<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">/**
 * Chart output for chart.js.
 *
 * @copyright  2016 Frédéric Massart - FMCorz.net
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @module     core/chart_output_chartjs
 */
define("core/chart_output_chartjs",["jquery","core/chartjs","core/chart_axis","core/chart_bar","core/chart_output_base","core/chart_line","core/chart_pie","core/chart_series"],(function($,Chartjs,Axis,Bar,Base,Line,Pie,Series){var makeAxisId=function(xy,index){return"axis-"+xy+"-"+index};function Output(){Base.prototype.constructor.apply(this,arguments),this._canvas=this._node,"CANVAS"!=this._canvas.prop("tagName")&amp;&amp;(this._canvas=$("&lt;canvas&gt;"),this._node.append(this._canvas)),this._build()}return Output.prototype=Object.create(Base.prototype),Output.prototype._config=null,Output.prototype._chartjs=null,Output.prototype._canvas=null,Output.prototype._build=function(){this._config=this._makeConfig(),this._chartjs=new Chartjs(this._canvas[0],this._config)},Output.prototype._cleanData=function(data){return data instanceof Array?data.map((function(value){return $("&lt;span&gt;").html(value).text()})):$("&lt;span&gt;").html(data).text()},Output.prototype._getChartType=function(){var type=this._chart.getType();return this._chart.getType()===Bar.prototype.TYPE&amp;&amp;!0===this._chart.getHorizontal()?type="horizontalBar":this._chart.getType()===Pie.prototype.TYPE&amp;&amp;!0===this._chart.getDoughnut()&amp;&amp;(type="doughnut"),type},Output.prototype._makeAxisConfig=function(axis,xy,index){var scaleData={id:makeAxisId(xy,index)};return axis.getPosition()!==Axis.prototype.POS_DEFAULT&amp;&amp;(scaleData.position=axis.getPosition()),null!==axis.getLabel()&amp;&amp;(scaleData.title={display:!0,text:this._cleanData(axis.getLabel())}),null!==axis.getStepSize()&amp;&amp;(scaleData.ticks=scaleData.ticks||{},scaleData.ticks.stepSize=axis.getStepSize()),null!==axis.getMax()&amp;&amp;(scaleData.ticks=scaleData.ticks||{},scaleData.ticks.max=axis.getMax()),null!==axis.getMin()&amp;&amp;(scaleData.ticks=scaleData.ticks||{},scaleData.ticks.min=axis.getMin()),scaleData},Output.prototype._makeConfig=function(){var charType=this._getChartType(),config={type:charType,data:{labels:this._cleanData(this._chart.getLabels()),datasets:this._makeDatasetsConfig()},options:{responsive:!0,maintainAspectRatio:!1,plugins:{title:{display:null!==this._chart.getTitle(),text:this._cleanData(this._chart.getTitle())}}}};"horizontalBar"===charType&amp;&amp;(config.type="bar",config.options.indexAxis="y");var legendOptions=this._chart.getLegendOptions();return legendOptions&amp;&amp;(config.options.plugins.legend=legendOptions),this._chart.getXAxes().forEach(function(axis,i){var axisLabels=axis.getLabels();config.options.scales=config.options.scales||{},config.options.scales.x=config.options.scales.x||{},config.options.scales.x[i]=this._makeAxisConfig(axis,"x",i),null!==axisLabels&amp;&amp;(config.options.scales.x[i].ticks.callback=function(value,index){return axisLabels[index]||""}),config.options.scales.x.stacked=this._isStacked()}.bind(this)),this._chart.getYAxes().forEach(function(axis,i){var axisLabels=axis.getLabels();config.options.scales=config.options.scales||{},config.options.scales.y=config.options.scales.yAxes||{},config.options.scales.y[i]=this._makeAxisConfig(axis,"y",i),null!==axisLabels&amp;&amp;(config.options.scales.y[i].ticks.callback=function(value){return axisLabels[parseInt(value,10)]||""}),config.options.scales.y.stacked=this._isStacked()}.bind(this)),config.options.plugins.tooltip={callbacks:{label:this._makeTooltip.bind(this)}},config},Output.prototype._makeDatasetsConfig=function(){return this._chart.getSeries().map(function(series){var colors=series.hasColoredValues()?series.getColors():series.getColor(),dataset={label:this._cleanData(series.getLabel()),data:series.getValues(),type:series.getType(),fill:series.getFill(),backgroundColor:colors,borderColor:this._chart.getType()==Pie.prototype.TYPE?"#fff":colors,tension:this._isSmooth(series)?.3:0};return null!==series.getXAxis()&amp;&amp;(dataset.xAxisID=makeAxisId("x",series.getXAxis())),null!==series.getYAxis()&amp;&amp;(dataset.yAxisID=makeAxisId("y",series.getYAxis())),dataset}.bind(this))},Output.prototype._makeTooltip=function(tooltipItem){var serieLabel=this._chart.getSeries()[tooltipItem.datasetIndex].getLabel(),tooltipData=tooltipItem.dataset.data[tooltipItem.dataIndex],tooltip=[];if(this._chart.getType()===Pie.prototype.TYPE){var chartLabels=this._cleanData(this._chart.getLabels());tooltip.push(chartLabels[tooltipItem.dataIndex]+" - "+this._cleanData(serieLabel)+": "+tooltipData)}else tooltip.push(this._cleanData(serieLabel)+": "+tooltipData);return tooltip},Output.prototype._isSmooth=function(series){var smooth=!1;return this._chart.getType()===Line.prototype.TYPE?null===(smooth=series.getSmooth())&amp;&amp;(smooth=this._chart.getSmooth()):series.getType()===Series.prototype.TYPE_LINE&amp;&amp;(smooth=series.getSmooth()),smooth},Output.prototype._isStacked=function(){var stacked=!1;return this._chart.getType()===Bar.prototype.TYPE&amp;&amp;(stacked=this._chart.getStacked()),stacked},Output.prototype.update=function(){$.extend(!0,this._config,this._makeConfig()),this._chartjs.update()},Output}));
define("core/storage_validation",["exports","core/localstorage"],(function(_exports,_localstorage){var obj;
/**
   * Clean caches after user login in order to prevent cache poisoning.
   * @module      core/storage_validation
   * @copyright   2024 Raquel Ortega &lt;raquel.ortega@moodle.com&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_localstorage=(obj=_localstorage)&amp;&amp;obj.__esModule?obj:{default:obj};_exports.init=userCurrentLogin=&gt;{userCurrentLogin!==Number(_localstorage.default.get("sUserLogintime"))&amp;&amp;(_localstorage.default.clean(),_localstorage.default.set("sUserLogintime",Number(userCurrentLogin).toString()))}}));
/**
 * Javascript for showing/hiding pages of content.
 *
 * @module     core/paged_content_pages
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core/paged_content_pages",["jquery","core/templates","core/notification","core/pubsub","core/paged_content_events","core/pending"],(function($,Templates,Notification,PubSub,PagedContentEvents,Pending){var SELECTORS_PAGE_REGION='[data-region="paged-content-page"]',TEMPLATES_PAGING_CONTENT_ITEM="core/paged_content_page",TEMPLATES_LOADING="core/overlay_loading",findPage=function(root,pageNumber){return root.find('[data-page="'+pageNumber+'"]')},showPages=function(root,pagesData,id,renderPagesContentCallback){var pendingPromise=new Pending("core/paged_content_pages:showPages"),existingPages=[],newPageData=[],newPagesPromise=$.Deferred();if(pagesData.forEach((function(pageData){var pageNumber=pageData.pageNumber,existingPage=findPage(root,pageNumber);existingPage.length?existingPages.push(existingPage):newPageData.push(pageData)})),newPageData.length&amp;&amp;"function"==typeof renderPagesContentCallback){var renderPagePromises=renderPagesContentCallback(newPageData,{allItemsLoaded:function(lastPageNumber){PubSub.publish(id+PagedContentEvents.ALL_ITEMS_LOADED,lastPageNumber)}}).map((function(promise,index){return function(root,pagePromise,pageNumber){var deferred=$.Deferred();return pagePromise.then((function(html,pageJS){pageJS=pageJS||"",Templates.render(TEMPLATES_PAGING_CONTENT_ITEM,{page:pageNumber,content:html}).then((function(html){Templates.appendNodeContents(root,html,pageJS);var page=findPage(root,pageNumber);deferred.resolve(page)})).fail((function(exception){deferred.reject(exception)})).fail(Notification.exception)})).fail((function(exception){deferred.reject(exception)})).fail(Notification.exception),deferred.promise()}(root,promise,newPageData[index].pageNumber)}));$.when.apply($,renderPagePromises).then((function(){var newPages=Array.prototype.slice.call(arguments);newPagesPromise.resolve(newPages)})).fail((function(exception){newPagesPromise.reject(exception)})).fail(Notification.exception)}else newPagesPromise.resolve([]);var loadingPromise=function(root){var deferred=$.Deferred();root.attr("aria-busy",!0);var pendingPromise=new Pending("core/paged_content_pages:startLoading");return Templates.render(TEMPLATES_LOADING,{visible:!0}).then((function(html){var loadingSpinner=$(html),timerId=setTimeout((function(){root.css("position","relative"),loadingSpinner.appendTo(root)}),300);deferred.always((function(){clearTimeout(timerId),loadingSpinner.remove(),root.css("position",""),root.removeAttr("aria-busy"),pendingPromise.resolve()}))})).fail(Notification.exception),deferred}(root);newPagesPromise.then((function(newPages){var pagesToShow=existingPages.concat(newPages);root.find(SELECTORS_PAGE_REGION).addClass("hidden"),pagesToShow.forEach((function(page){page.removeClass("hidden")}))})).then((function(){PubSub.publish(id+PagedContentEvents.PAGES_SHOWN,pagesData)})).fail(Notification.exception).always((function(){loadingPromise.resolve(),pendingPromise.resolve()})).catch()};return{init:function(root,id,renderPagesContentCallback){root=$(root),PubSub.subscribe(id+PagedContentEvents.SHOW_PAGES,(function(pagesData){showPages(root,pagesData,id,renderPagesContentCallback)})),PubSub.subscribe(id+PagedContentEvents.SET_ITEMS_PER_PAGE_LIMIT,(function(){root.empty()}))},rootSelector:'[data-region="page-container"]'}}));
/**
 * Course selector adaptor for auto-complete form element.
 *
 * @module     core/form-cohort-selector
 * @copyright  2016 Damyon Wiese &lt;damyon@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.1
 */
define("core/form-cohort-selector",["core/ajax","jquery"],(function(ajax,$){return{processResults:function(selector,data){var results=[],i=0,excludelist=String($(selector).data("exclude")).split(",");for(i=0;i&lt;data.cohorts.length;i++)-1===excludelist.indexOf(String(data.cohorts[i].id))&amp;&amp;results.push({value:data.cohorts[i].id,label:data.cohorts[i].name});return results},transport:function(selector,query,success,failure){var promises;void 0===query&amp;&amp;(query="");var calls=[{methodname:"core_cohort_search_cohorts",args:{query:query,includes:"parents",limitfrom:0,limitnum:100,context:{contextid:$(selector).data("contextid")}}}];promises=ajax.call(calls),$.when.apply($.when,promises).done((function(data){success(data)})).fail(failure)}}}));
/**
 * Expose the global YUI variable. Note: This is only for scripts that are writing AMD
 * wrappers for YUI functionality. This is not for plugins.
 *
 * @module     core/yui
 * @copyright  2015 Damyon Wiese &lt;damyon@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      2.9
 */
define("core/yui",(function(){return Y}));
define("core/pubsub",["exports","core/pending"],(function(_exports,_pending){var obj;
/**
   * A simple Javascript PubSub implementation.
   *
   * @module     core/pubsub
   * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.unsubscribe=_exports.subscribe=_exports.publish=void 0,_pending=(obj=_pending)&amp;&amp;obj.__esModule?obj:{default:obj};const events={};_exports.subscribe=function(eventName,callback){events[eventName]=events[eventName]||[],events[eventName].push(callback)};_exports.unsubscribe=function(eventName,callback){if(events[eventName])for(var i=0;i&lt;events[eventName].length;i++)if(events[eventName][i]===callback){events[eventName].splice(i,1);break}};_exports.publish=function(eventName,data){const pendingPromise=new _pending.default("Publishing "+eventName);events[eventName]&amp;&amp;events[eventName].forEach((function(callback){callback(data)})),pendingPromise.resolve()}}));
/**
 * Show/hide admin settings based on other settings selected
 *
 * @copyright 2018 Davo Smith, Synergy Learning
 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core/showhidesettings",["jquery"],(function($){var dependencies;function isCheckboxHiddenElement($el){return $el.is("input[type=hidden]")&amp;&amp;$el.siblings('input[type=checkbox][name="'+$el.attr("name")+'"]').length}function isCheckedRelevant($el,value){return!isCheckboxHiddenElement($el)&amp;&amp;!function($el,value){return $el.is("input[type=radio]")&amp;&amp;$el.attr("value")!==value}($el,value)}function isUncheckedRadioButton($el){return $el.is("input[type=radio]")&amp;&amp;!$el.prop("checked")}function isUncheckedCheckbox($el){return $el.is("input[type=checkbox]")&amp;&amp;!$el.prop("checked")}function isMultiSelect($el){return $el.is("select")&amp;&amp;$el.prop("multiple")}function multiSelectMatches($el,values){var selected=$el.val()||[];if(!values.length)return!1;if(selected.length!==values.length)return!1;for(var i in selected)if(selected.hasOwnProperty(i)&amp;&amp;-1===values.indexOf(selected[i]))return!1;return!0}var depFns={notchecked:function($dependon,value){var hide=!1;return value=String(value),$dependon.each((function(idx,el){var $el=$(el);isCheckedRelevant($el,value)&amp;&amp;(hide=hide||!$el.prop("checked"))})),hide},checked:function($dependon,value){var hide=!1;return value=String(value),$dependon.each((function(idx,el){var $el=$(el);isCheckedRelevant($el,value)&amp;&amp;(hide=hide||$el.prop("checked"))})),hide},noitemselected:function($dependon){var hide=!1;return $dependon.each((function(idx,el){var $el=$(el);hide=hide||-1===$el.prop("selectedIndex")})),hide},eq:function($dependon,value){var hide=!1,hiddenVal=!1;return value=String(value),$dependon.each((function(idx,el){var $el=$(el);if(!isUncheckedRadioButton($el))if(isCheckboxHiddenElement($el))hiddenVal=$el.val()===value;else if(isUncheckedCheckbox($el))hide=hide||hiddenVal;else if(isMultiSelect($el)){var values=value.split("|");hide=multiSelectMatches($el,values)}else hide=hide||$el.val()===value})),hide},in:function($dependon,value){var hide=!1,hiddenVal=!1,values=value.split("|");return $dependon.each((function(idx,el){var $el=$(el);isUncheckedRadioButton($el)||(isCheckboxHiddenElement($el)?hiddenVal=values.indexOf($el.val())&gt;-1:hide=isUncheckedCheckbox($el)?hide||hiddenVal:isMultiSelect($el)?multiSelectMatches($el,values):hide||values.indexOf($el.val())&gt;-1)})),hide},defaultCondition:function($dependon,value){var hide=!1,hiddenVal=!1;return value=String(value),$dependon.each((function(idx,el){var $el=$(el);if(!isUncheckedRadioButton($el))if(isCheckboxHiddenElement($el))hiddenVal=$el.val()!==value;else if(isUncheckedCheckbox($el))hide=hide||hiddenVal;else if(isMultiSelect($el)){var values=value.split("|");hide=!multiSelectMatches($el,values)}else hide=hide||$el.val()!==value})),hide}};function getElementsByName(name){return $('[name="'+name+'"],[name^="'+name+'["]')}function updateDependencies(){var toHide={};$.each(dependencies,(function(dependonname){var dependon=getElementsByName(dependonname);$.each(dependencies[dependonname],(function(condition,values){$.each(values,(function(value,elements){var hide=function($dependon,condition,value){return"function"==typeof depFns[condition]?depFns[condition]($dependon,value):depFns.defaultCondition($dependon,value)}(dependon,condition,value);$.each(elements,(function(idx,elToHide){toHide.hasOwnProperty(elToHide)?toHide[elToHide]=toHide[elToHide]||hide:toHide[elToHide]=hide}))}))}))})),$.each(toHide,(function(elToHide,hide){getElementsByName(elToHide).each((function(idx,el){var $parent=$(el).closest(".form-item");$parent.length&amp;&amp;(hide?$parent.hide():$parent.show())}))}))}return{init:function(opts){dependencies=opts.dependencies,$.each(dependencies,(function(depname){var $el=getElementsByName(depname);$el.length&amp;&amp;$el.on("change",updateDependencies)})),updateDependencies(),$(".form-dependenton").hide()}}}));
define("core/toast",["exports","core/templates","core/notification","core/pending"],(function(_exports,_templates,_notification,_pending){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * A system for displaying small snackbar notifications to users which disappear shortly after they are shown.
   *
   * @module     core/toast
   * @copyright  2019 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.addToastRegion=_exports.add=void 0,_templates=_interopRequireDefault(_templates),_notification=_interopRequireDefault(_notification),_pending=_interopRequireDefault(_pending);const addToastRegion=async parent=&gt;{const pendingPromise=new _pending.default("addToastRegion");try{const{html:html,js:js}=await _templates.default.renderForPromise("core/local/toast/wrapper",{});_templates.default.prependNodeContents(parent,html,js)}catch(e){_notification.default.exception(e)}pendingPromise.resolve()};_exports.addToastRegion=addToastRegion;_exports.add=async(message,configuration)=&gt;{const pendingPromise=new _pending.default("addToastRegion");configuration={type:"info",closeButton:!1,autohide:!0,delay:4e3,...configuration};try{const targetNode=await getTargetNode(),{html:html,js:js}=await _templates.default.renderForPromise("core/local/toast/message",{message:await message,...configuration});_templates.default.prependNodeContents(targetNode,html,js)}catch(e){_notification.default.exception(e)}pendingPromise.resolve()};const getTargetNode=async()=&gt;{const regions=document.querySelectorAll(".toast-wrapper");return regions.length?regions[regions.length-1]:(await addToastRegion(document.body),getTargetNode())}}));
/**
 * Competency rule points module.
 *
 * @module core/icon_system_fontawesome
 * @copyright  2017 Damyon Wiese
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core/icon_system_fontawesome",["core/icon_system","jquery","core/ajax","core/mustache","core/localstorage","core/url"],(function(IconSystem,$,Ajax,Mustache,LocalStorage,Url){var staticMap=null,fetchMap=null,IconSystemFontawesome=function(){IconSystem.apply(this,arguments)};return(IconSystemFontawesome.prototype=Object.create(IconSystem.prototype)).init=function(){var currTheme=M.cfg.theme;if(staticMap)return $.when(this);var map=LocalStorage.get("core_iconsystem/theme/"+currTheme+"/core/iconmap-fontawesome");return map&amp;&amp;(map=JSON.parse(map)),map?(staticMap=map,$.when(this)):(null===fetchMap&amp;&amp;(fetchMap=Ajax.call([{methodname:"core_output_load_fontawesome_icon_system_map",args:{themename:M.cfg.theme}}],!0,!1,!1,0,M.cfg.themerev)[0]),fetchMap.then(function(map){return staticMap={},$.each(map,(function(index,value){staticMap[value.component+"/"+value.pix]=value.to})),LocalStorage.set("core_iconsystem/theme/"+currTheme+"/core/iconmap-fontawesome",JSON.stringify(staticMap)),this}.bind(this)))},IconSystemFontawesome.prototype.renderIcon=function(key,component,title,template){var mappedIcon=staticMap[component+"/"+key],unmappedIcon=!1;void 0===mappedIcon&amp;&amp;(unmappedIcon={attributes:[{name:"src",value:Url.imageUrl(key,component)},{name:"alt",value:title},{name:"title",value:title}]});var context={key:mappedIcon,title:title,alt:title,unmappedIcon:unmappedIcon};return void 0!==title&amp;&amp;""!==title||(context["aria-hidden"]=!0),Mustache.render(template,context).trim()},IconSystemFontawesome.prototype.getTemplateName=function(){return"core/pix_icon_fontawesome"},IconSystemFontawesome}));
/**
 * A javascript module to handle list items drag and drop
 *
 * Example of usage:
 *
 * Create a list (for example `&lt;ul&gt;` or `&lt;tbody&gt;`) where each draggable element has a drag handle.
 * The best practice is to use the template core/drag_handle:
 * $OUTPUT-&gt;render_from_template('core/drag_handle', ['movetitle' =&gt; get_string('movecontent', 'moodle', ELEMENTNAME)]);
 *
 * Attach this JS module to this list:
 *
 * Space between define and ( critical in comment but not allowed in code in order to function
 * correctly with Moodle's requirejs.php
 *
 * For the full list of possible parameters see var defaultParameters below.
 *
 * The following jQuery events are fired:
 * - SortableList.EVENTS.DRAGSTART : when user started dragging a list element
 * - SortableList.EVENTS.DRAG : when user dragged a list element to a new position
 * - SortableList.EVENTS.DROP : when user dropped a list element
 * - SortableList.EVENTS.DROPEND : when user finished dragging - either fired right after dropping or
 *                          if "Esc" was pressed during dragging
 *
 * @example
 * define (['jquery', 'core/sortable_list'], function($, SortableList) {
 *     var list = new SortableList('ul.my-awesome-list'); // source list (usually &lt;ul&gt; or &lt;tbody&gt;) - selector or element
 *
 *     // Listen to the events when element is dragged.
 *     $('ul.my-awesome-list &gt; *').on(SortableList.EVENTS.DROP, function(evt, info) {
 *         console.log(info);
 *     });
 *
 *     // Advanced usage. Overwrite methods getElementName, getDestinationName, moveDialogueTitle, for example:
 *     list.getElementName = function(element) {
 *         return $.Deferred().resolve(element.attr('data-name'));
 *     }
 * });
 *
 * @module     core/sortable_list
 * @class      core/sortable_list
 * @copyright  2018 Marina Glancy
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core/sortable_list",["jquery","core/log","core/autoscroll","core/str","core/modal_factory","core/modal_events","core/notification"],(function($,log,autoScroll,str,ModalFactory,ModalEvents,Notification){var defaultParameters={targetListSelector:null,moveHandlerSelector:"[data-drag-type=move]",isHorizontal:!1,autoScroll:!0},CSS_keyboardDragClass="dragdrop-keyboard-drag",CSS_isDraggedClass="sortable-list-is-dragged",CSS_currentPositionClass="sortable-list-current-position",CSS_targetListClass="sortable-list-target",CSS_overElementClass="sortable-list-over-element",registerNotPassiveListeners=function(eventname){return{setup:function(x,ns,handle){return!!ns.includes("notPassive")&amp;&amp;(this.addEventListener(eventname,handle,{passive:!1}),!0)}}};(function(){var options,passivesupported=!1;try{options=Object.defineProperty({},"passive",{get:function(){passivesupported=!0}}),document.addEventListener("testpassiveeventoptions",options,options),document.removeEventListener("testpassiveeventoptions",options,options)}catch(err){passivesupported=!1}return passivesupported})&amp;&amp;($.event.special.touchstart=registerNotPassiveListeners("touchstart"),$.event.special.touchmove=registerNotPassiveListeners("touchmove"),$.event.special.touchend=registerNotPassiveListeners("touchend"));var SortableList=function(root,config){this.info=null,this.proxy=null,this.proxyDelta=null,this.dragCounter=0,this.lastEvent=null,this.config=$.extend({},defaultParameters,config||{}),this.config.listSelector=root,this.config.targetListSelector||(this.config.targetListSelector=root),"object"==typeof this.config.listSelector?$(this.config.listSelector).on("mousedown touchstart.notPassive",$.proxy(this.dragStartHandler,this)):$("body").on("mousedown touchstart.notPassive",this.config.listSelector,$.proxy(this.dragStartHandler,this)),null!==this.config.moveHandlerSelector&amp;&amp;$("body").on("click keypress",this.config.moveHandlerSelector,$.proxy(this.clickHandler,this))};return SortableList.EVENTS={DRAGSTART:"sortablelist-dragstart",DRAG:"sortablelist-drag",DROP:"sortablelist-drop",DRAGEND:"sortablelist-dragend"},SortableList.prototype.resetDraggedClasses=function(){var classes=[CSS_isDraggedClass,CSS_currentPositionClass,CSS_overElementClass,CSS_targetListClass];for(var i in classes)$("."+classes[i]).removeClass(classes[i]);this.proxy&amp;&amp;(this.proxy.remove(),this.proxy=$())},SortableList.prototype.calculatePositionOnPage=function(evt){if(evt.originalEvent&amp;&amp;evt.originalEvent.touches&amp;&amp;void 0!==evt.originalEvent.touches[0]){var touch=evt.originalEvent.touches[0];evt.pageX=touch.pageX,evt.pageY=touch.pageY}void 0===evt.pageX?(evt.pageX=this.lastEvent.pageX,evt.pageY=this.lastEvent.pageY):this.lastEvent=evt,void 0===evt.clientX&amp;&amp;(evt.clientX=Math.round(evt.pageX-$(window).scrollLeft()),evt.clientY=Math.round(evt.pageY-$(window).scrollTop()))},SortableList.prototype.dragStartHandler=function(evt){if(null!==this.info){if("click"===this.info.type||"touchend"===this.info.type)return;this.moveElement(this.info.sourceList,this.info.sourceNextElement),this.finishDragging()}if("mousedown"!==evt.type||1===evt.which){this.calculatePositionOnPage(evt);var movedElement=$(evt.target).closest($(evt.currentTarget).children());if(movedElement.length&amp;&amp;(null===this.config.moveHandlerSelector||$(evt.target).closest(this.config.moveHandlerSelector,movedElement).length)){evt.stopPropagation(),evt.preventDefault(),this.dragCounter++,this.info={element:movedElement,sourceNextElement:movedElement.next(),sourceList:movedElement.parent(),targetNextElement:movedElement.next(),targetList:movedElement.parent(),type:evt.type,dropped:!1,startX:evt.pageX,startY:evt.pageY,startTime:(new Date).getTime()},$(this.config.targetListSelector).addClass(CSS_targetListClass);var offset=movedElement.offset();movedElement.addClass(CSS_currentPositionClass),this.proxyDelta={x:offset.left-evt.pageX,y:offset.top-evt.pageY},this.proxy=$();var thisDragCounter=this.dragCounter;setTimeout($.proxy((function(){null!==this.info&amp;&amp;"click"!==this.info.type&amp;&amp;"keypress"!==this.info.type&amp;&amp;this.dragCounter===thisDragCounter&amp;&amp;this.createProxy()}),this),500),$(window).on("mousemove touchmove.notPassive mouseup touchend.notPassive",$.proxy(this.dragHandler,this)),$(window).on("keypress",$.proxy(this.dragcancelHandler,this)),this.config.autoScroll&amp;&amp;autoScroll.start((function(){$(window).trigger("mousemove")})),this.executeCallback(SortableList.EVENTS.DRAGSTART)}}},SortableList.prototype.createProxy=function(){this.proxy=this.info.element.clone(),this.info.sourceList.append(this.proxy),this.proxy.removeAttr("id").removeClass(CSS_currentPositionClass).addClass(CSS_isDraggedClass).css({position:"fixed"}),this.proxy.offset({top:this.proxyDelta.y+this.lastEvent.pageY,left:this.proxyDelta.x+this.lastEvent.pageX})},SortableList.prototype.clickHandler=function(evt){if(("keypress"!==evt.type||13===evt.originalEvent.keyCode||32===evt.originalEvent.keyCode)&amp;&amp;null===this.info){var clickedElement=$(evt.target).closest(this.config.moveHandlerSelector),sourceList=clickedElement.closest(this.config.listSelector),movedElement=clickedElement.closest(sourceList.children());movedElement.length&amp;&amp;(evt.preventDefault(),evt.stopPropagation(),this.dragCounter++,this.info={element:movedElement,sourceNextElement:movedElement.next(),sourceList:sourceList,targetNextElement:movedElement.next(),targetList:sourceList,dropped:!1,type:evt.type,startTime:(new Date).getTime()},this.executeCallback(SortableList.EVENTS.DRAGSTART),this.displayMoveDialogue(clickedElement))}},SortableList.prototype.getPositionInNode=function(pageX,pageY,element){if(!element.length)return null;var rect=element[0].getBoundingClientRect(),y=pageY-(rect.top+window.scrollY),x=pageX-(rect.left+window.scrollX);return x&gt;=-0&amp;&amp;x&lt;=rect.width+0&amp;&amp;y&gt;=-0&amp;&amp;y&lt;=rect.height+0?{x:x,y:y,xRatio:rect.width?x/rect.width:0,yRatio:rect.height?y/rect.height:0}:null},SortableList.prototype.isListHorizontal=function(element){var isHorizontal=this.config.isHorizontal;return!0===isHorizontal||!1===isHorizontal?isHorizontal:isHorizontal(element)},SortableList.prototype.dragHandler=function(evt){evt.preventDefault(),evt.stopPropagation(),this.calculatePositionOnPage(evt),this.proxy.offset({top:-1e3,left:-1e3});var element=$(document.elementFromPoint(evt.clientX,evt.clientY)),mainElement=this.info.element[0],isNotSelf=function(){return this!==mainElement},current=element.closest("."+CSS_targetListClass+" &gt; :not(."+CSS_isDraggedClass+")").filter(isNotSelf),currentList=element.closest("."+CSS_targetListClass),proxy=this.proxy,isNotProxy=function(){return!proxy||!proxy.length||this!==proxy[0]};if($("."+CSS_overElementClass).removeClass(CSS_overElementClass),current.addClass(CSS_overElementClass),this.proxy.offset({top:this.proxyDelta.y+evt.pageY,left:this.proxyDelta.x+evt.pageX}),currentList.length&amp;&amp;!currentList.children().filter(isNotProxy).length)this.moveElement(currentList,$());else if(1===current.length&amp;&amp;!this.info.element.find(current[0]).length){var coordinates=this.getPositionInNode(evt.pageX,evt.pageY,current);if(coordinates){var parent=current.parent(),ratio=this.isListHorizontal(parent)?coordinates.xRatio:coordinates.yRatio,subList=current.find("."+CSS_targetListClass),subListEmpty=!subList.children().filter(isNotProxy).filter(isNotSelf).length;subList.length&amp;&amp;subListEmpty&amp;&amp;ratio&gt;.2&amp;&amp;ratio&lt;.8?this.moveElement(subList,$()):ratio&gt;.5?this.moveElement(parent,current.next().filter(isNotProxy)):this.moveElement(parent,current)}}if("mouseup"===evt.type||"touchend"===evt.type){this.info.endX=evt.pageX,this.info.endY=evt.pageY,this.info.endTime=(new Date).getTime(),this.info.dropped=!0,this.info.positionChanged=this.hasPositionChanged(this.info);var oldinfo=this.info;this.executeCallback(SortableList.EVENTS.DROP),this.finishDragging(),"touchend"===evt.type&amp;&amp;null!==this.config.moveHandlerSelector&amp;&amp;oldinfo.endTime-oldinfo.startTime&lt;500&amp;&amp;!oldinfo.positionChanged&amp;&amp;this.clickHandler(evt)}},SortableList.prototype.hasPositionChanged=function(info){return info.sourceList[0]!==info.targetList[0]||info.sourceNextElement.length!==info.targetNextElement.length||info.sourceNextElement.length&amp;&amp;info.sourceNextElement[0]!==info.targetNextElement[0]},SortableList.prototype.moveElement=function(parentElement,beforeElement){var dragEl=this.info.element;beforeElement.length&amp;&amp;beforeElement[0]===dragEl[0]||parentElement[0]===this.info.targetList[0]&amp;&amp;beforeElement.length===this.info.targetNextElement.length&amp;&amp;beforeElement[0]===this.info.targetNextElement[0]||(beforeElement.length?parentElement[0].insertBefore(dragEl[0],beforeElement[0]):this.proxy&amp;&amp;this.proxy.parent().length&amp;&amp;this.proxy.parent()[0]===parentElement[0]?parentElement[0].insertBefore(dragEl[0],this.proxy[0]):parentElement[0].appendChild(dragEl[0]),this.info.targetList=parentElement,this.info.targetNextElement=beforeElement,this.executeCallback(SortableList.EVENTS.DRAG))},SortableList.prototype.finishDragging=function(){this.resetDraggedClasses(),this.config.autoScroll&amp;&amp;autoScroll.stop(),$(window).off("mousemove touchmove.notPassive mouseup touchend.notPassive",$.proxy(this.dragHandler,this)),$(window).off("keypress",$.proxy(this.dragcancelHandler,this)),this.executeCallback(SortableList.EVENTS.DRAGEND),this.info=null},SortableList.prototype.executeCallback=function(eventName){this.info.element.trigger(eventName,this.info)},SortableList.prototype.dragcancelHandler=function(evt){"keypress"===evt.type&amp;&amp;27===evt.originalEvent.keyCode&amp;&amp;(this.moveElement(this.info.sourceList,this.info.sourceNextElement),this.finishDragging())},SortableList.prototype.getElementName=function(element){return $.Deferred().resolve(element.text())},SortableList.prototype.getDestinationName=function(parentElement,afterElement){return afterElement.length?this.getElementName(afterElement).then((function(name){return str.get_string("movecontentafter","moodle",name)})):str.get_string("movecontenttothetop","moodle")},SortableList.prototype.getMoveDialogueTitle=function(element,handler){return handler.attr("title")?$.Deferred().resolve(handler.attr("title")):this.getElementName(element).then((function(name){return str.get_string("movecontent","moodle",name)}))},SortableList.prototype.getDestinationsList=function(){var addedLists=[],targets=$(this.config.targetListSelector),destinations=$("&lt;ul/&gt;").addClass(CSS_keyboardDragClass),result=$.when().then((function(){return destinations})),createLink=$.proxy((function(parentElement,beforeElement,afterElement){beforeElement.is(this.info.element)||afterElement.is(this.info.element)||$.contains(this.info.element[0],parentElement[0])||(result=result.then($.proxy((function(){return this.getDestinationName(parentElement,afterElement)}),this)).then((function(txt){var li=$("&lt;li/&gt;").appendTo(destinations);return $('&lt;a href="#"/&gt;').attr("data-core_sortable_list-quickmove",1).appendTo(li).data("parent-element",parentElement).data("before-element",beforeElement).text(txt),destinations})))}),this),addList=function(){if(-1===$.inArray(this,addedLists)){addedLists.push(this);var list=$(this),children=list.children();children.each((function(){var element=$(this);createLink(list,element,element.prev()),element.find(targets).each(addList)})),createLink(list,$(),children.last())}};return targets.each(addList),result},SortableList.prototype.displayMoveDialogue=function(clickedElement){ModalFactory.create({type:ModalFactory.types.CANCEL,title:this.getMoveDialogueTitle(this.info.element,clickedElement),body:this.getDestinationsList()}).then($.proxy((function(modal){var quickMoveHandler=$.proxy((function(e){e.preventDefault(),e.stopPropagation(),this.moveElement($(e.currentTarget).data("parent-element"),$(e.currentTarget).data("before-element")),this.info.endTime=(new Date).getTime(),this.info.positionChanged=this.hasPositionChanged(this.info),this.info.dropped=!0,clickedElement.focus(),this.executeCallback(SortableList.EVENTS.DROP),modal.hide()}),this);return modal.getRoot().on("click","[data-core_sortable_list-quickmove]",quickMoveHandler),modal.getRoot().on(ModalEvents.hidden,$.proxy((function(){modal.getRoot().off("click","[data-core_sortable_list-quickmove]",quickMoveHandler),modal.destroy(),this.finishDragging()}),this)),modal.setLarge(),modal.show(),modal}),this)).catch(Notification.exception)},SortableList}));
/**
 * Javascript to enhance the paged content paging bar.
 *
 * @module     core/paging_bar
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core/paged_content_paging_bar",["jquery","core/custom_interaction_events","core/paged_content_events","core/str","core/pubsub","core/pending"],(function($,CustomEvents,PagedContentEvents,Str,PubSub,Pending){var SELECTORS_PAGE="[data-page]",SELECTORS_PAGE_ITEM='[data-region="page-item"]',SELECTORS_PAGE_LINK='[data-region="page-link"]',SELECTORS_FIRST_BUTTON='[data-control="first"]',SELECTORS_LAST_BUTTON='[data-control="last"]',SELECTORS_NEXT_BUTTON='[data-control="next"]',SELECTORS_PREVIOUS_BUTTON='[data-control="previous"]',SELECTORS_DOTS_BUTTONS="[data-dots]",SELECTORS_BEGINNING_DOTS_BUTTON='[data-dots="beginning"]',SELECTORS_ENDING_DOTS_BUTTON='[data-dots="ending"]',getPageByNumber=function(root,pageNumber){return root.find(SELECTORS_PAGE_ITEM+'[data-page-number="'+pageNumber+'"]')},setLastPageNumber=function(root,number){root.attr("data-last-page-number",number)},getLastPageNumber=function(root){return parseInt(root.attr("data-last-page-number"),10)},getActivePageNumber=function(root){return parseInt(root.attr("data-active-page-number"),10)},setActivePageNumber=function(root,number){root.attr("data-active-page-number",number)},getPageNumber=function(root,page){if(null!=page.attr("data-page"))return parseInt(page.attr("data-page-number"),10);var pageNumber=1,activePageNumber=null;switch(page.attr("data-control")){case"first":default:pageNumber=1;break;case"last":pageNumber=getLastPageNumber(root);break;case"next":activePageNumber=getActivePageNumber(root);var lastPage=getLastPageNumber(root);pageNumber=lastPage?activePageNumber&amp;&amp;activePageNumber&lt;lastPage?activePageNumber+1:lastPage:activePageNumber+1;break;case"previous":pageNumber=(activePageNumber=getActivePageNumber(root))&amp;&amp;activePageNumber&gt;1?activePageNumber-1:1}return parseInt(pageNumber,10)},show=function(root){root.removeClass("hidden")},hide=function(root){root.addClass("hidden")},disableNextControlButtons=function(root){var nextButton=root.find(SELECTORS_NEXT_BUTTON),lastButton=root.find(SELECTORS_LAST_BUTTON);nextButton.addClass("disabled"),nextButton.attr("aria-disabled",!0),lastButton.addClass("disabled"),lastButton.attr("aria-disabled",!0)},enableNextControlButtons=function(root){var nextButton=root.find(SELECTORS_NEXT_BUTTON),lastButton=root.find(SELECTORS_LAST_BUTTON);nextButton.removeClass("disabled"),nextButton.removeAttr("aria-disabled"),lastButton.removeClass("disabled"),lastButton.removeAttr("aria-disabled")},disablePreviousControlButtons=function(root){var previousButton=root.find(SELECTORS_PREVIOUS_BUTTON),firstButton=root.find(SELECTORS_FIRST_BUTTON);previousButton.addClass("disabled"),previousButton.attr("aria-disabled",!0),firstButton.addClass("disabled"),firstButton.attr("aria-disabled",!0)},adjustPagingBarSize=function(root){var activePageNumber=getActivePageNumber(root),lastPageNumber=getLastPageNumber(root),dotsButtons=root.find(SELECTORS_DOTS_BUTTONS),beginningDotsButton=root.find(SELECTORS_BEGINNING_DOTS_BUTTON),endingDotsButton=root.find(SELECTORS_ENDING_DOTS_BUTTON),pages=root.find(SELECTORS_PAGE),barSize=parseInt(root.attr("data-bar-size"),10);if(barSize&amp;&amp;lastPageNumber&gt;barSize){var minpage=Math.max(activePageNumber-Math.round(barSize/2),1),maxpage=minpage+barSize-1;maxpage&gt;=lastPageNumber&amp;&amp;(minpage=(maxpage=lastPageNumber)-barSize+1),minpage&gt;1?(show(beginningDotsButton),minpage++):hide(beginningDotsButton),maxpage&lt;lastPageNumber?(show(endingDotsButton),maxpage--):hide(endingDotsButton),dotsButtons.addClass("disabled"),dotsButtons.attr("aria-disabled",!0),hide(pages),pages.each((function(index,page){page=$(page),index+1&gt;=minpage&amp;&amp;index+1&lt;=maxpage&amp;&amp;show(page)}))}else hide(dotsButtons)},enablePreviousControlButtons=function(root){var previousButton=root.find(SELECTORS_PREVIOUS_BUTTON),firstButton=root.find(SELECTORS_FIRST_BUTTON);previousButton.removeClass("disabled"),previousButton.removeAttr("aria-disabled"),firstButton.removeClass("disabled"),firstButton.removeAttr("aria-disabled")},showPage=function(root,pageNumber,id){var pendingPromise=new Pending("core/paged_content_paging_bar:showPage"),lastPageNumber=getLastPageNumber(root),isSamePage=pageNumber==getActivePageNumber(root),limit=function(root){return parseInt(root.attr("data-items-per-page"),10)}(root),offset=(pageNumber-1)*limit;if(!isSamePage){root.find(SELECTORS_PAGE_ITEM).removeClass("active").removeAttr("aria-current");var page=getPageByNumber(root,pageNumber);page.addClass("active"),page.attr("aria-current",!0),setActivePageNumber(root,pageNumber),adjustPagingBarSize(root)}lastPageNumber&amp;&amp;pageNumber&gt;=lastPageNumber?disableNextControlButtons(root):enableNextControlButtons(root),pageNumber&gt;1?enablePreviousControlButtons(root):disablePreviousControlButtons(root),function(root){var pageAriaLabelComponents=function(root){return root.attr("data-aria-label-components-pagination-item").split(",").map((function(component){return component.trim()}))}(root),activePageAriaLabelComponents=function(root){return root.attr("data-aria-label-components-pagination-active-item").split(",").map((function(component){return component.trim()}))}(root),activePageNumber=getActivePageNumber(root),pageItems=root.find(SELECTORS_PAGE_ITEM),stringRequests=pageItems.toArray().map((function(index,page){page=$(page);var pageNumber=getPageNumber(root,page);return pageNumber===activePageNumber?{key:activePageAriaLabelComponents[0],component:activePageAriaLabelComponents[1],param:pageNumber}:{key:pageAriaLabelComponents[0],component:pageAriaLabelComponents[1],param:pageNumber}}));Str.get_strings(stringRequests).then((function(strings){return pageItems.each((function(index,page){page=$(page);var string=strings[index];page.attr("aria-label",string),page.find(SELECTORS_PAGE_LINK).attr("aria-label",string)})),strings})).catch((function(){}))}(root),PubSub.publish(id+PagedContentEvents.SHOW_PAGES,[{pageNumber:pageNumber,limit:limit,offset:offset}]),pendingPromise.resolve()};return{init:function(root,id){var pages=(root=$(root)).find(SELECTORS_PAGE);if(function(root,items){var lastPageNumber=0;setActivePageNumber(root,0),items.each((function(index,item){var pageNumber=index+1;(item=$(item)).attr("data-page-number",pageNumber),lastPageNumber++,item.hasClass("active")&amp;&amp;setActivePageNumber(root,pageNumber)})),setLastPageNumber(root,lastPageNumber)}(root,pages),function(root,id){var ignoreControlWhileLoading=root.attr("data-ignore-control-while-loading"),loading=!1;""==ignoreControlWhileLoading&amp;&amp;(ignoreControlWhileLoading=!0),CustomEvents.define(root,[CustomEvents.events.activate]),root.on(CustomEvents.events.activate,SELECTORS_PAGE_ITEM,(function(e,data){if(data.originalEvent.preventDefault(),data.originalEvent.stopPropagation(),!ignoreControlWhileLoading||!loading){var page=$(e.target).closest(SELECTORS_PAGE_ITEM);if(!page.hasClass("disabled")){var pageNumber=getPageNumber(root,page);showPage(root,pageNumber,id),loading=!0}}})),PubSub.subscribe(id+PagedContentEvents.ALL_ITEMS_LOADED,(function(pageNumber){loading=!1;var currentLastPage=getLastPageNumber(root);(!currentLastPage||pageNumber&lt;currentLastPage)&amp;&amp;setLastPageNumber(root,pageNumber),1===pageNumber&amp;&amp;root.attr("data-hide-control-on-single-page")?(hide(root),disableNextControlButtons(root),disablePreviousControlButtons(root)):(show(root),disableNextControlButtons(root))})),PubSub.subscribe(id+PagedContentEvents.PAGES_SHOWN,(function(){loading=!1})),PubSub.subscribe(id+PagedContentEvents.SET_ITEMS_PER_PAGE_LIMIT,(function(limit){!function(root,limit){root.attr("data-items-per-page",limit)}(root,limit),setLastPageNumber(root,0),setActivePageNumber(root,0),show(root),showPage(root,1,id)}))}(root,id),function(root){var number=getActivePageNumber(root);return!isNaN(number)&amp;&amp;0!=number}(root)){var activePageNumber=getActivePageNumber(root);getPageByNumber(root,activePageNumber).click(),1==activePageNumber&amp;&amp;disablePreviousControlButtons(root)}else(function(root){return root.find(SELECTORS_NEXT_BUTTON)})(root).click();adjustPagingBarSize(root)},disableNextControlButtons:disableNextControlButtons,enableNextControlButtons:enableNextControlButtons,disablePreviousControlButtons:disablePreviousControlButtons,enablePreviousControlButtons:enablePreviousControlButtons,showPage:showPage,rootSelector:'[data-region="paging-bar"]'}}));
define("core/local/aria/focuslock",["exports","./selectors"],(function(_exports,_selectors){var obj;
/**
   * Tab locking system.
   *
   * This is based on code and examples provided in the ARIA specification.
   * https://www.w3.org/TR/wai-aria-practices/examples/dialog-modal/dialog.html
   *
   * @module     core/tablock
   * @copyright  2019 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.untrapFocus=_exports.trapFocus=void 0,_selectors=(obj=_selectors)&amp;&amp;obj.__esModule?obj:{default:obj};const lockRegionStack=[],initialFocusElementStack=[],finalFocusElementStack=[];let lastFocus=null,ignoreFocusChanges=!1,isLocked=!1;const lockHandler=event=&gt;{if(ignoreFocusChanges)return;let lockRegion=getCurrentLockRegion();for(;lockRegion&amp;&amp;!document.contains(lockRegion);)untrapFocus(),lockRegion=getCurrentLockRegion();lockRegion&amp;&amp;(lockRegion.contains(event.target)?lastFocus=event.target:(focusFirstDescendant(),lastFocus==document.activeElement&amp;&amp;focusLastDescendant(),lastFocus=document.activeElement))},focusFirstDescendant=()=&gt;{const lockRegion=getCurrentLockRegion(),focusableElements=Array.from(lockRegion.querySelectorAll(_selectors.default.elements.focusable));return focusableElements.unshift(lockRegion),focusableElements.some((focusableElement=&gt;attemptFocus(focusableElement)))},focusLastDescendant=()=&gt;{const lockRegion=getCurrentLockRegion(),focusableElements=Array.from(lockRegion.querySelectorAll(_selectors.default.elements.focusable)).reverse();return focusableElements.push(lockRegion),focusableElements.some((focusableElement=&gt;attemptFocus(focusableElement)))},attemptFocus=focusTarget=&gt;{if(!(focusTarget=&gt;{if(focusTarget.tabIndex&gt;0||0===focusTarget.tabIndex&amp;&amp;null!==focusTarget.getAttribute("tabIndex"))return!0;if(focusTarget.disabled)return!1;switch(focusTarget.nodeName){case"A":return!!focusTarget.href&amp;&amp;"ignore"!=focusTarget.rel;case"INPUT":return"hidden"!=focusTarget.type&amp;&amp;"file"!=focusTarget.type;case"BUTTON":case"SELECT":case"TEXTAREA":return!0;default:return!1}})(focusTarget))return!1;ignoreFocusChanges=!0;try{focusTarget.focus()}catch(e){}return ignoreFocusChanges=!1,document.activeElement===focusTarget},getCurrentLockRegion=()=&gt;lockRegionStack[lockRegionStack.length-1];_exports.trapFocus=newLockRegion=&gt;{if((newLockRegion=&gt;{if(newLockRegion===getCurrentLockRegion())return;lockRegionStack.push(newLockRegion);const currentLockRegion=getCurrentLockRegion(),element=document.createElement("div");element.tabIndex=0,element.style.position="fixed",element.style.top=0,element.style.left=0;const initialNode=element.cloneNode();currentLockRegion.parentNode.insertBefore(initialNode,currentLockRegion),initialFocusElementStack.push(initialNode);const finalNode=element.cloneNode();currentLockRegion.parentNode.insertBefore(finalNode,currentLockRegion.nextSibling),finalFocusElementStack.push(finalNode)})(newLockRegion),isLocked||document.addEventListener("focus",lockHandler,!0),!focusFirstDescendant()){const currentLockRegion=getCurrentLockRegion(),originalRegionTabIndex=currentLockRegion.tabIndex;currentLockRegion.tabIndex=0,attemptFocus(currentLockRegion),currentLockRegion.tabIndex=originalRegionTabIndex}lastFocus=document.activeElement,isLocked=!0};const untrapFocus=()=&gt;{(()=&gt;{lockRegionStack.pop();const finalNode=finalFocusElementStack.pop();finalNode&amp;&amp;finalNode.remove();const initialNode=initialFocusElementStack.pop();initialNode&amp;&amp;initialNode.remove()})(),lockRegionStack.length||(document.removeEventListener("focus",lockHandler,!0),lastFocus=null,ignoreFocusChanges=!1,isLocked=!1)};_exports.untrapFocus=untrapFocus}));
define("core/local/aria/selectors",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0;return _exports.default={aria:{hidden:"[aria-hidden]"},elements:{focusable:'input:not([type="hidden"]), a[href], button, textarea, select, [tabindex]',focusableToUnhide:"[data-aria-hidden-tab-index]"}},_exports.default}));
define("core/local/aria/aria-hidden",["exports","core/normalise","./selectors"],(function(_exports,_normalise,_selectors){var obj;
/**
   * ARIA helpers related to the aria-hidden attribute.
   *
   * @module     core/local/aria/aria-hidden.
   * @copyright  2020 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.unhideSiblings=_exports.unhide=_exports.hideSiblings=_exports.hide=void 0,_selectors=(obj=_selectors)&amp;&amp;obj.__esModule?obj:{default:obj};const childObserverMap=new Map,siblingObserverMap=new Map,supportsMutationObservers=()=&gt;MutationObserver&amp;&amp;"function"==typeof MutationObserver,disableElementFocusability=target=&gt;{target instanceof HTMLElement&amp;&amp;(target.matches(_selectors.default.elements.focusable)&amp;&amp;disableAndStoreTabIndex(target),target.querySelectorAll(_selectors.default.elements.focusable).forEach(disableAndStoreTabIndex))},disableAndStoreTabIndex=element=&gt;{void 0===element.dataset.ariaHiddenTabIndex&amp;&amp;(element.getAttribute("tabindex")?element.dataset.ariaHiddenTabIndex=element.getAttribute("tabindex"):element.dataset.ariaHiddenTabIndex="",element.setAttribute("tabindex",-1))},restoreTabIndex=element=&gt;{if(element.closest(_selectors.default.aria.hidden))return;const oldTabIndex=element.dataset.ariaHiddenTabIndex;""===oldTabIndex?element.removeAttribute("tabindex"):element.setAttribute("tabindex",oldTabIndex),delete element.dataset.ariaHiddenTabIndex},hide=target=&gt;(0,_normalise.getList)(target).forEach(_hide);_exports.hide=hide;const _hide=target=&gt;{if(target instanceof HTMLElement&amp;&amp;!target.closest(_selectors.default.aria.hidden)&amp;&amp;(target.setAttribute("aria-hidden",!0),disableElementFocusability(target),supportsMutationObservers())){const mutationObserver=new MutationObserver((mutationList=&gt;{mutationList.forEach((mutation=&gt;{if("childList"===mutation.type)mutation.addedNodes.forEach(disableElementFocusability);else if("attributes"===mutation.type){const element=mutation.target,proposedTabIndex=element.getAttribute("tabindex");"-1"!==proposedTabIndex&amp;&amp;(element.dataset.ariaHiddenTabIndex=proposedTabIndex,element.setAttribute("tabindex",-1))}}))}));mutationObserver.observe(target,{subtree:!0,childList:!0,attributes:!0,attributeFilter:["tabindex"]}),childObserverMap.set(target,mutationObserver)}},unhide=target=&gt;(0,_normalise.getList)(target).forEach(_unhide);_exports.unhide=unhide;const _unhide=target=&gt;{target instanceof HTMLElement&amp;&amp;(target.removeAttribute("aria-hidden"),(target=&gt;{target instanceof HTMLElement&amp;&amp;(target.matches(_selectors.default.elements.focusableToUnhide)&amp;&amp;restoreTabIndex(target),target.querySelectorAll(_selectors.default.elements.focusableToUnhide).forEach(restoreTabIndex))})(target),childObserverMap.has(target)&amp;&amp;(childObserverMap.get(target).disconnect(),childObserverMap.delete(target)))};_exports.hideSiblings=target=&gt;(0,_normalise.getList)(target).forEach(_hideSiblings);const _hideSiblings=target=&gt;{if(target instanceof HTMLElement&amp;&amp;target.parentElement&amp;&amp;(target.parentElement.childNodes.forEach((node=&gt;{node!==target&amp;&amp;hide(node)})),supportsMutationObservers())){const newNodeObserver=new MutationObserver((mutationList=&gt;{mutationList.forEach((mutation=&gt;{mutation.addedNodes.forEach((node=&gt;{target.contains(node)||hide(node)}))}))}));newNodeObserver.observe(target.parentElement,{childList:!0,subtree:!0}),siblingObserverMap.set(target.parentElement,newNodeObserver)}};_exports.unhideSiblings=target=&gt;(0,_normalise.getList)(target).forEach(_unhideSiblings);const _unhideSiblings=target=&gt;{target instanceof HTMLElement&amp;&amp;target.parentElement&amp;&amp;(target.parentElement.childNodes.forEach((node=&gt;{node!==target&amp;&amp;unhide(node)})),siblingObserverMap.has(target.parentElement)&amp;&amp;(siblingObserverMap.get(target.parentElement).disconnect(),siblingObserverMap.delete(target.parentElement)))}}));
define("core/local/repository/dynamic_tabs",["exports","core/ajax"],(function(_exports,_ajax){var obj;
/**
   * Module to handle dynamic tabs AJAX requests
   *
   * @module      core/local/repository/dynamic_tabs
   * @copyright   2021 David Matamoros &lt;davidmc@moodle.com&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.getContent=void 0,_ajax=(obj=_ajax)&amp;&amp;obj.__esModule?obj:{default:obj};_exports.getContent=(tab,jsondata)=&gt;{const request={methodname:"core_dynamic_tabs_get_content",args:{tab:tab,jsondata:jsondata}};return _ajax.default.call([request])[0]}}));
define("core/local/reactive/reactive",["exports","core/log","core/local/reactive/statemanager","core/pending"],(function(_exports,_log,_statemanager,_pending){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * A generic single state reactive module.
   *
   * @module     core/reactive/local/reactive/reactive
   * @class     core/reactive/local/reactive/reactive
   * @copyright  2021 Ferran Recio &lt;ferran@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_log=_interopRequireDefault(_log),_statemanager=_interopRequireDefault(_statemanager),_pending=_interopRequireDefault(_pending);let pendingCount=0;return _exports.default=class{constructor(description){var _description$target,_description$mutation;if(void 0===description.eventName||void 0===description.eventDispatch)throw new Error("Reactivity event required");void 0!==description.name&amp;&amp;(this.name=description.name),this.target=null!==(_description$target=description.target)&amp;&amp;void 0!==_description$target?_description$target:document.createTextNode(null),this.eventName=description.eventName,this.eventDispatch=description.eventDispatch,this.stateManager=new _statemanager.default(this.eventDispatch,this.target),this.watchers=new Map([]),this.components=new Set([]),this.mutations=null!==(_description$mutation=description.mutations)&amp;&amp;void 0!==_description$mutation?_description$mutation:{},this.target.addEventListener(this.eventName,this.callWatchersHandler.bind(this)),this.pendingState=new _pending.default("core/reactive:registerInstance".concat(pendingCount++)),void 0!==description.state&amp;&amp;this.setInitialState(description.state),void 0!==M.reactive&amp;&amp;M.reactive.registerNewInstance(this)}callWatchersHandler(event){this.target.dispatchEvent(new CustomEvent(event.detail.action,{bubbles:!1,detail:event.detail}))}setInitialState(stateData){this.pendingState.resolve(),this.stateManager.setInitialState(stateData)}addMutations(newFunctions){void 0!==newFunctions.init&amp;&amp;newFunctions.init(this.stateManager);for(const[mutation,mutationFunction]of Object.entries(newFunctions))this.mutations[mutation]=mutationFunction.bind(newFunctions)}setMutations(manager){this.mutations=manager,void 0!==manager.init&amp;&amp;manager.init(this.stateManager)}get state(){return this.stateManager.state}get(name,id){return this.stateManager.get(name,id)}getInitialStatePromise(){return this.stateManager.getInitialPromise()}registerComponent(component){var _component$name;const componentName=null!==(_component$name=component.name)&amp;&amp;void 0!==_component$name?_component$name:"Unkown component";let dispatchSuccess=()=&gt;{},dispatchFail=dispatchSuccess;if(void 0!==component.dispatchRegistrationSuccess&amp;&amp;(dispatchSuccess=component.dispatchRegistrationSuccess.bind(component)),void 0!==component.dispatchRegistrationFail&amp;&amp;(dispatchFail=component.dispatchRegistrationFail.bind(component)),this.components.has(component))return dispatchSuccess(),component;const pendingPromise=new _pending.default("core/reactive:registerComponent".concat(pendingCount++));let listeners=[],handlers=[];return void 0!==component.getWatchers&amp;&amp;(handlers=component.getWatchers()),handlers.forEach((_ref=&gt;{let{watch:watch,handler:handler}=_ref;if(void 0===watch)throw dispatchFail(),new Error("Missing watch attribute in ".concat(componentName," watcher"));if(void 0===handler)throw dispatchFail(),new Error("Missing handler for watcher ".concat(watch," in ").concat(componentName));const listener=event=&gt;{const currentFocus=document.activeElement;handler.apply(component,[event.detail]),document.activeElement===document.body&amp;&amp;document.body.contains(currentFocus)&amp;&amp;currentFocus.focus()};listeners.push({target:this.target,watch:watch,listener:listener}),this.target.addEventListener(watch,listener)})),void 0!==component.stateReady&amp;&amp;this.getInitialStatePromise().then((state=&gt;(component.stateReady(state),pendingPromise.resolve(),!0))).catch((reason=&gt;{pendingPromise.resolve(),_log.default.error("Initial state in ".concat(componentName," rejected due to: ").concat(reason)),_log.default.error(reason)})),this.watchers.set(component,listeners),this.components.add(component),this.target.dispatchEvent(new CustomEvent("registerComponent:success",{bubbles:!1,detail:{component:component}})),dispatchSuccess(),component}unregisterComponent(component){if(!this.components.has(component))return component;this.components.delete(component);const listeners=this.watchers.get(component);return void 0===listeners||(listeners.forEach((_ref2=&gt;{let{target:target,watch:watch,listener:listener}=_ref2;target.removeEventListener(watch,listener)})),this.watchers.delete(component)),component}async dispatch(actionName){if("string"!=typeof actionName)throw new Error("Dispatch action name must be a string");if("_"===actionName.charAt(0))throw new Error("Illegal Private ".concat(actionName," mutation method dispatch"));if(void 0===this.mutations[actionName])throw new Error("Unkown ".concat(actionName," mutation"));const pendingPromise=new _pending.default("core/reactive:".concat(actionName).concat(pendingCount++)),mutationFunction=this.mutations[actionName];try{for(var _len=arguments.length,params=new Array(_len&gt;1?_len-1:0),_key=1;_key&lt;_len;_key++)params[_key-1]=arguments[_key];await mutationFunction.apply(this.mutations,[this.stateManager,...params]),pendingPromise.resolve()}catch(error){throw this.stateManager.setReadOnly(!0),pendingPromise.resolve(),error}}},_exports.default}));
define("core/local/reactive/debug",["exports","core/local/reactive/reactive","core/log"],(function(_exports,_reactive,_log){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Reactive module debug tools.
   *
   * @module     core/reactive/local/reactive/debug
   * @copyright  2021 Ferran Recio &lt;ferran@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.initDebug=void 0,_reactive=_interopRequireDefault(_reactive),_log=_interopRequireDefault(_log);const reactiveInstances={},reactiveDebuggers={};
/**
   * Reactive module debug tools.
   *
   * If debug is enabled, this reactive module will spy all the reactive instances and keep a record
   * of the changes and components they have.
   *
   * It is important to note that the Debug class is also a Reactive module. The debug instance keeps
   * the reactive instances data as its own state. This way it is possible to implement development tools
   * that whatches this data.
   *
   * @class      core/reactive/local/reactive/debug/Debug
   * @copyright  2021 Ferran Recio &lt;ferran@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */
class Debug extends _reactive.default{setInitialState(stateData){super.setInitialState(stateData),_log.default.debug('Debug module "M.reactive" loaded.')}get list(){return JSON.parse(JSON.stringify(this.state.reactives))}registerNewInstance(instance){var _instance$name;let name=null!==(_instance$name=instance.name)&amp;&amp;void 0!==_instance$name?_instance$name:"instance".concat(this.state.reactives.length);name=name.replace(/\W/g,""),_log.default.debug('Registering new reactive instance "M.reactive.'.concat(name,'"')),reactiveInstances[name]=instance,reactiveDebuggers[name]=new DebugInstance(reactiveInstances[name]),this.dispatch("putInstance",name,instance);const refreshMethod=()=&gt;{this.dispatch("putInstance",name,instance)};instance.target.addEventListener("readmode:on",refreshMethod),instance.target.addEventListener("readmode:off",refreshMethod),instance.target.addEventListener("registerComponent:success",refreshMethod),instance.target.addEventListener("transaction:end",refreshMethod);instance.target.addEventListener("transaction:start",(_ref=&gt;{let{detail:detail}=_ref;const changes=null==detail?void 0:detail.changes;this.dispatch("lastTransaction",name,changes)}))}debug(name){return reactiveDebuggers[name]}}class Mutations{putInstance(stateManager,name,instance){const state=stateManager.state;stateManager.setReadOnly(!1),state.reactives.has(name)?(state.reactives.get(name).countcomponents=instance.components.length,state.reactives.get(name).readOnly=instance.stateManager.readonly,state.reactives.get(name).modified=(new Date).getTime()):state.reactives.add({id:name,countcomponents:instance.components.length,readOnly:instance.stateManager.readonly,lastChanges:[],modified:(new Date).getTime()}),stateManager.setReadOnly(!0)}lastTransaction(stateManager,name,changes){if(!changes||0===changes.length)return;const state=stateManager.state,lastChanges=["transaction:start"];changes.forEach((change=&gt;{lastChanges.push(change.eventName)})),lastChanges.push("transaction:end"),stateManager.setReadOnly(!1),state.reactives.get(name).lastChanges=lastChanges,stateManager.setReadOnly(!0)}}
/**
   * Class used to debug a specific instance and manipulate the state from the JS console.
   *
   * @class      core/reactive/local/reactive/debug/DebugInstance
   * @copyright  2021 Ferran Recio &lt;ferran@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */class DebugInstance{constructor(instance){this.instance=instance,void 0===instance._reactiveDebugData&amp;&amp;(instance._reactiveDebugData={highlighted:!1})}set readOnly(value){this.instance.stateManager.setReadOnly(value)}get readOnly(){return this.instance.stateManager.readonly}get state(){return this.instance.state}set highlight(value){this.instance._reactiveDebugData.highlighted=value,this.instance.components.forEach((_ref2=&gt;{let{element:element}=_ref2;const border=value?"thick solid #0000FF":"";element.style.border=border}))}get highlight(){return this.instance._reactiveDebugData.highlighted}get components(){return[...this.instance.components]}get changes(){const result=[];return this.instance.stateManager.eventsToPublish.forEach((element=&gt;{result.push(element.eventName)})),result}async dispatch(){this.instance.dispatch(...arguments)}get elements(){const result=[];return this.instance.components.forEach((_ref3=&gt;{let{element:element}=_ref3;result.push(element)})),result}get stateData(){return JSON.parse(JSON.stringify(this.state))}processUpdates(updates){this.instance.stateManager.processUpdates(updates)}}function dispatchStateChangedEvent(detail,target){void 0===target&amp;&amp;(target=document),target.dispatchEvent(new CustomEvent("core_reactive_debug:stateChanged",{bubbles:!0,detail:detail}))}_exports.initDebug=()=&gt;{const debug=new Debug({name:"CoreReactiveDebug",eventName:"core_reactive_debug:stateChanged",eventDispatch:dispatchStateChangedEvent,mutations:new Mutations,state:{reactives:[]}});return reactiveDebuggers.registerNewInstance=debug.registerNewInstance.bind(debug),{debug:debug,debuggers:reactiveDebuggers}}}));
define("core/local/reactive/basecomponent",["exports","core/templates"],(function(_exports,_templates){var obj;
/**
   * Reactive UI component base class.
   *
   * Each UI reactive component should extend this class to interact with a reactive state.
   *
   * @module     core/local/reactive/basecomponent
   * @class     core/local/reactive/basecomponent
   * @copyright  2020 Ferran Recio &lt;ferran@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_templates=(obj=_templates)&amp;&amp;obj.__esModule?obj:{default:obj};return _exports.default=class{constructor(descriptor){if(void 0===descriptor.element||!(descriptor.element instanceof HTMLElement))throw Error("Reactive components needs a main DOM element to dispatch events");this.element=descriptor.element,this.eventHandlers=new Map([]),this.eventListeners=[],this.selectors={},this.events=this.constructor.getEvents(),this.create(descriptor),void 0!==descriptor.selectors&amp;&amp;this.addSelectors(descriptor.selectors),void 0===descriptor.reactive?this.element.dispatchEvent(new CustomEvent("core/reactive:requestRegistration",{bubbles:!0,detail:{component:this}})):(this.reactive=descriptor.reactive,this.reactive.registerComponent(this),this.addEventListener(this.element,"core/reactive:requestRegistration",(event=&gt;{var _event$detail;null!=event&amp;&amp;null!==(_event$detail=event.detail)&amp;&amp;void 0!==_event$detail&amp;&amp;_event$detail.component&amp;&amp;(event.stopPropagation(),this.registerChildComponent(event.detail.component))})))}static getEvents(){return{}}create(descriptor){}destroy(){}getWatchers(){return[]}stateReady(){}getElement(query,dataId){if(void 0===query&amp;&amp;void 0===dataId)return this.element;const dataSelector=dataId?"[data-id='".concat(dataId,"']"):"",selector="".concat(null!=query?query:"").concat(dataSelector);return this.element.querySelector(selector)}getElements(query,dataId){const dataSelector=dataId?"[data-id='".concat(dataId,"']"):"",selector="".concat(null!=query?query:"").concat(dataSelector);return this.element.querySelectorAll(selector)}addSelectors(newSelectors){for(const[selectorName,selector]of Object.entries(newSelectors))this.selectors[selectorName]=selector}getSelector(selectorName){return this.selectors[selectorName]}dispatchEvent(eventName,detail){this.element.dispatchEvent(new CustomEvent(eventName,{bubbles:!0,detail:detail}))}renderComponent(target,file,data){return new Promise(((resolve,reject)=&gt;{target.addEventListener("ComponentRegistration:Success",(_ref=&gt;{let{detail:detail}=_ref;resolve(detail.component)})),target.addEventListener("ComponentRegistration:Fail",(()=&gt;{reject("Registration of ".concat(file," fails."))})),_templates.default.renderForPromise(file,data).then((_ref2=&gt;{let{html:html,js:js}=_ref2;return _templates.default.replaceNodeContents(target,html,js),!0})).catch((error=&gt;{throw reject("Rendering of ".concat(file," throws an error.")),error}))}))}addEventListener(target,type,listener){let bindListener=this.eventHandlers.get(listener);void 0===bindListener&amp;&amp;(bindListener=listener.bind(this),this.eventHandlers.set(listener,bindListener)),target.addEventListener(type,bindListener),this.eventListeners.push({target:target,type:type,bindListener:bindListener})}removeEventListener(target,type,listener){let bindListener=this.eventHandlers.get(listener);void 0!==bindListener&amp;&amp;target.removeEventListener(type,bindListener)}removeAllEventListeners(){this.eventListeners.forEach((_ref3=&gt;{let{target:target,type:type,bindListener:bindListener}=_ref3;target.removeEventListener(type,bindListener)})),this.eventListeners=[]}remove(){this.unregister(),this.element.remove()}unregister(){this.reactive.unregisterComponent(this),this.removeAllEventListeners(),this.destroy()}dispatchRegistrationSuccess(){void 0!==this.element.parentNode&amp;&amp;this.element.parentNode.dispatchEvent(new CustomEvent("ComponentRegistration:Success",{bubbles:!1,detail:{component:this}}))}dispatchRegistrationFail(){void 0!==this.element.parentNode&amp;&amp;this.element.parentNode.dispatchEvent(new CustomEvent("ComponentRegistration:Fail",{bubbles:!1,detail:{component:this}}))}registerChildComponent(component){component.reactive=this.reactive,this.reactive.registerComponent(component)}set locked(locked){this.setElementLocked(this.element,locked)}get locked(){return this.getElementLocked(this.element)}setElementLocked(target,locked){target.dataset.locked=null!=locked&amp;&amp;locked,locked?(target.style.pointerEvents="none",target.style.userSelect="none",target.hasAttribute("draggable")&amp;&amp;target.setAttribute("draggable",!1),target.setAttribute("aria-busy",!0)):(target.style.pointerEvents=null,target.style.userSelect=null,target.hasAttribute("draggable")&amp;&amp;target.setAttribute("draggable",!0),target.setAttribute("aria-busy",!1))}getElementLocked(target){var _target$dataset$locke;return null!==(_target$dataset$locke=target.dataset.locked)&amp;&amp;void 0!==_target$dataset$locke&amp;&amp;_target$dataset$locke}},_exports.default}));
define("core/local/reactive/logger",["exports","core/toast"],(function(_exports,_toast){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0;return _exports.default=
/**
   * Default reactive mutations logger class.
   *
   * This logger is used by default by the StateManager to log mutation feedbacks
   * and actions. By default, feedbacks will be displayed as a toast. However, the
   * reactive instance can provide alternative loggers to provide advanced logging
   * capabilities.
   *
   * @module     core/local/reactive/logger
   * @class      Logger
   * @copyright  2023 Ferran Recio &lt;ferran@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */
class{constructor(){this._debug=!1}add(entry){entry.feedbackMessage&amp;&amp;(0,_toast.add)(entry.feedbackMessage)}},_exports.default}));
define("core/local/reactive/statemanager",["exports","core/local/reactive/logger"],(function(_exports,_logger){var obj;
/**
   * Reactive simple state manager.
   *
   * The state manager contains the state data, trigger update events and
   * can lock and unlock the state data.
   *
   * This file contains the three main elements of the state manager:
   * - State manager: the public class to alter the state, dispatch events and process update messages.
   * - Proxy handler: a private class to keep track of the state object changes.
   * - StateMap class: a private class extending Map class that triggers event when a state list is modifed.
   *
   * @module     core/local/reactive/stateManager
   * @class     core/local/reactive/stateManager
   * @copyright  2021 Ferran Recio &lt;ferran@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_logger=(obj=_logger)&amp;&amp;obj.__esModule?obj:{default:obj};_exports.default=class{constructor(dispatchEvent,target){this.dispatchEvent=dispatchEvent,this.target=null!=target?target:document,this.readonly=!1,this.eventsToPublish=[],this.updateTypes={create:this.defaultCreate.bind(this),update:this.defaultUpdate.bind(this),delete:this.defaultDelete.bind(this),put:this.defaultPut.bind(this),override:this.defaultOverride.bind(this),remove:this.defaultRemove.bind(this),prepareFields:this.defaultPrepareFields.bind(this)},this.initialPromise=new Promise((resolve=&gt;{this.target.addEventListener("state:loaded",(event=&gt;{resolve(event.detail.state)}))})),this.logger=new _logger.default}setInitialState(initialState){if(void 0!==this.state)throw Error("Initial state can only be initialized ones");const state=new Proxy({},new Handler("state",this,!0));for(const[prop,propValue]of Object.entries(initialState))state[prop]=propValue;this.state=state,this.readonly=!0,this.dispatchEvent({action:"state:loaded",state:this.state},this.target)}getInitialPromise(){return this.initialPromise}setReadOnly(readonly){this.readonly=readonly;let mode="off";this.readonly&amp;&amp;(mode="on",this._publishEvents()),this.dispatchEvent({action:"readmode:".concat(mode),state:this.state,element:null},this.target)}addUpdateTypes(newFunctions){for(const[updateType,updateFunction]of Object.entries(newFunctions))"function"==typeof updateFunction&amp;&amp;(this.updateTypes[updateType]=updateFunction.bind(newFunctions))}processUpdates(updates,updateTypes){if(!Array.isArray(updates))throw Error("State updates must be an array");this.setReadOnly(!1),updates.forEach((update=&gt;{if(void 0===update.name)throw Error("Missing state update name");this.processUpdate(update.name,update.action,update.fields,updateTypes)})),this.setReadOnly(!0)}processUpdate(updateName,action,fields,updateTypes){var _action,_updateTypes$action,_updateTypes$prepareF;if(!fields)throw Error("Missing state update fields");void 0===updateTypes&amp;&amp;(updateTypes={});const method=null!==(_updateTypes$action=updateTypes[action=null!==(_action=action)&amp;&amp;void 0!==_action?_action:"update"])&amp;&amp;void 0!==_updateTypes$action?_updateTypes$action:this.updateTypes[action];if(void 0===method)throw Error("Unkown update action ".concat(action));method(this,updateName,(null!==(_updateTypes$prepareF=updateTypes.prepareFields)&amp;&amp;void 0!==_updateTypes$prepareF?_updateTypes$prepareF:this.updateTypes.prepareFields)(this,updateName,fields))}defaultPrepareFields(stateManager,updateName,fields){return fields}defaultCreate(stateManager,updateName,fields){let state=stateManager.state;state[updateName]instanceof StateMap?state[updateName].add(fields):state[updateName]=fields}defaultDelete(stateManager,updateName,fields){if(!stateManager.get(updateName,fields.id))throw Error("Inexistent ".concat(updateName," ").concat(fields.id));let state=stateManager.state;state[updateName]instanceof StateMap?state[updateName].delete(fields.id):delete state[updateName]}defaultRemove(stateManager,updateName,fields){if(!stateManager.get(updateName,fields.id))return;let state=stateManager.state;state[updateName]instanceof StateMap?state[updateName].delete(fields.id):delete state[updateName]}defaultUpdate(stateManager,updateName,fields){let current=stateManager.get(updateName,fields.id);if(!current)throw Error("Inexistent ".concat(updateName," ").concat(fields.id));for(const[fieldName,fieldValue]of Object.entries(fields))current[fieldName]=fieldValue}defaultPut(stateManager,updateName,fields){let current=stateManager.get(updateName,fields.id);if(current)for(const[fieldName,fieldValue]of Object.entries(fields))current[fieldName]=fieldValue;else{let state=stateManager.state;if(state[updateName]instanceof StateMap)return void state[updateName].add(fields);state[updateName]=fields}}defaultOverride(stateManager,updateName,fields){let current=stateManager.get(updateName,fields.id);if(current){for(const[fieldName]of Object.entries(current))void 0===fields[fieldName]&amp;&amp;delete current[fieldName];for(const[fieldName,fieldValue]of Object.entries(fields))current[fieldName]=fieldValue}else{let state=stateManager.state;if(state[updateName]instanceof StateMap)return void state[updateName].add(fields);state[updateName]=fields}}setLogger(logger){this.logger=logger}addLoggerEntry(entry){this.logger.add(entry)}get(name,id){const state=this.state;let current=state[name];if(current instanceof StateMap){if(void 0===id)throw Error("Missing id for ".concat(name," state update"));current=state[name].get(id)}return current}registerStateAction(field,prop,action,data){let parentAction="updated";null!==prop?this.eventsToPublish.push({eventName:"".concat(field,".").concat(prop,":").concat(action),eventData:data,action:action}):parentAction=action,void 0!==data.id&amp;&amp;(null!==prop&amp;&amp;this.eventsToPublish.push({eventName:"".concat(field,"[").concat(data.id,"].").concat(prop,":").concat(action),eventData:data,action:action}),this.eventsToPublish.push({eventName:"".concat(field,"[").concat(data.id,"]:").concat(parentAction),eventData:data,action:parentAction})),this.eventsToPublish.push({eventName:"".concat(field,":").concat(parentAction),eventData:data,action:parentAction}),this.eventsToPublish.push({eventName:"state:updated",eventData:data,action:"updated"})}_publishEvents(){const fieldChanges=this.eventsToPublish;this.eventsToPublish=[],this.dispatchEvent({action:"transaction:start",state:this.state,element:null,changes:fieldChanges},this.target),fieldChanges.sort(((a,b)=&gt;{var _weights$a$action,_weights$b$action;const weights={created:0,updated:1,deleted:2},aweight=null!==(_weights$a$action=weights[a.action])&amp;&amp;void 0!==_weights$a$action?_weights$a$action:0,bweight=null!==(_weights$b$action=weights[b.action])&amp;&amp;void 0!==_weights$b$action?_weights$b$action:0;return aweight===bweight?a.eventName.length-b.eventName.length:aweight-bweight}));let publishedEvents=new Set;fieldChanges.forEach((event=&gt;{var _event$eventData$id;const eventkey="".concat(event.eventName,".").concat(null!==(_event$eventData$id=event.eventData.id)&amp;&amp;void 0!==_event$eventData$id?_event$eventData$id:0);publishedEvents.has(eventkey)||(this.dispatchEvent({action:event.eventName,state:this.state,element:event.eventData},this.target),publishedEvents.add(eventkey))})),this.dispatchEvent({action:"transaction:end",state:this.state,element:null},this.target)}};class Handler{constructor(name,stateManager,proxyValues){this.name=name,this.stateManager=stateManager,this.proxyValues=null!=proxyValues&amp;&amp;proxyValues}set(obj,prop,value,receiver){if(this.stateManager.readonly)throw new Error("State locked. Use mutations to change ".concat(prop," value in ").concat(this.name,"."));if(JSON.stringify(obj[prop])===JSON.stringify(value))return!0;const action=void 0!==obj[prop]?"updated":"created";return this.proxyValues?Array.isArray(value)?obj[prop]=new StateMap(prop,this.stateManager).loadValues(value):obj[prop]=new Proxy(value,new Handler(prop,this.stateManager)):obj[prop]=value,void 0===this.stateManager.state||this.stateManager.registerStateAction(this.name,prop,action,receiver),!0}deleteProperty(obj,prop){if(this.stateManager.readonly)throw new Error("State locked. Use mutations to delete ".concat(prop," in ").concat(this.name,"."));return prop in obj&amp;&amp;(delete obj[prop],this.stateManager.registerStateAction(this.name,prop,"deleted",obj)),!0}}class StateMap extends Map{constructor(name,stateManager,iterable){super(iterable),this.name=name,this.stateManager=stateManager}set(key,value){if(this.stateManager.readonly)throw new Error("State locked. Use mutations to change ".concat(key," value in ").concat(this.name,"."));if(key=this.normalizeKey(key),this.checkValue(value),null==key)throw Error("State lists keys cannot be null or undefined");if(this.normalizeKey(value.id)!==key)throw new Error("State error: ".concat(this.name," list element ID (").concat(value.id,") and key (").concat(key,") mismatch"));const action=super.has(key)?"updated":"created",result=super.set(key,new Proxy(value,new Handler(this.name,this.stateManager)));return void 0===this.stateManager.state||this.stateManager.registerStateAction(this.name,null,action,super.get(key)),result}checkValue(value){if(void 0===value.id)throw Error("State lists elements must contain at least an id attribute")}normalizeKey(key){return String(key).valueOf()}add(value){return this.checkValue(value),this.set(value.id,value)}get(key){return super.get(this.normalizeKey(key))}has(key){return super.has(this.normalizeKey(key))}delete(key){if(key=this.normalizeKey(key),this.stateManager.readonly)throw new Error("State locked. Use mutations to change ".concat(key," value in ").concat(this.name,"."));const previous=super.get(key),result=super.delete(key);return result?(this.stateManager.registerStateAction(this.name,null,"deleted",previous),result):result}toJSON(){let result=[];return this.forEach((value=&gt;{result.push(value)})),result}loadValues(values){return values.forEach((data=&gt;{this.checkValue(data);let key=data.id,newvalue=new Proxy(data,new Handler(this.name,this.stateManager));this.set(key,newvalue)})),this}}return _exports.default}));
define("core/local/reactive/srlogger",["exports","core/local/reactive/logger"],(function(_exports,_logger){var obj;Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_logger=(obj=_logger)&amp;&amp;obj.__esModule?obj:{default:obj};class SRLogger extends _logger.default{add(entry){if(entry.feedbackMessage){let loggerFeedback=document.getElementById(SRLogger.liveRegionId);loggerFeedback||(loggerFeedback=document.createElement("div"),loggerFeedback.id=SRLogger.liveRegionId,loggerFeedback.classList.add("sr-only"),loggerFeedback.setAttribute("aria-live","polite"),document.body.append(loggerFeedback)),loggerFeedback.innerHTML=entry.feedbackMessage,setTimeout((()=&gt;{loggerFeedback.innerHTML=""}),4e3)}}}return _exports.default=SRLogger,function(obj,key,value){key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value}(SRLogger,"liveRegionId","sr-logger-feedback-container"),_exports.default}));
define("core/local/reactive/debugpanel",["exports","core/reactive","core/log","core/utils"],(function(_exports,_reactive,_log,_utils){var obj;
/**
   * Reactive module debug panel.
   *
   * This module contains all the UI components for the reactive debug tools.
   * Those tools are only available if the debug is enables and could be used
   * from the footer.
   *
   * @module     core/local/reactive/debugpanel
   * @copyright  2021 Ferran Recio &lt;ferran@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.initsubpanel=_exports.init=void 0,_log=(obj=_log)&amp;&amp;obj.__esModule?obj:{default:obj};_exports.init=(target,selectors)=&gt;{const element=document.getElementById(target);void 0!==_reactive.debug?new GlobalDebugPanel({element:element,reactive:_reactive.debug,selectors:selectors}):element.remove()};_exports.initsubpanel=(target,selectors)=&gt;{const element=document.getElementById(target);void 0!==_reactive.debug?new DebugInstanceSubpanel({element:element,reactive:_reactive.debug,selectors:selectors}):element.remove()};class GlobalDebugPanel extends _reactive.BaseComponent{create(){this.name="GlobalDebugPanel",this.selectors={LOADERS:"[data-for='loaders']",SUBPANEL:"[data-for='subpanel']",NOINSTANCES:"[data-for='noinstances']",LOG:"[data-for='log']"},this.classes={HIDE:"d-none"},this.subPanels=new Set}stateReady(state){this._updateReactivesPanels({state:state}),this.getElement(this.selectors.SUBPANEL).innerHTML=""}getWatchers(){return[{watch:"reactives:created",handler:this._updateReactivesPanels}]}_updateReactivesPanels(_ref){var _this$getElement,_this$getElement$clas;let{state:state}=_ref;null===(_this$getElement=this.getElement(this.selectors.NOINSTANCES))||void 0===_this$getElement||null===(_this$getElement$clas=_this$getElement.classList)||void 0===_this$getElement$clas||_this$getElement$clas.toggle(this.classes.HIDE,state.reactives.size&gt;0),state.reactives.forEach((instance=&gt;{this._createLoader(instance)}))}_createLoader(instance){if(this.subPanels.has(instance.id))return;this.subPanels.add(instance.id);const loaders=this.getElement(this.selectors.LOADERS),btn=document.createElement("button");btn.innerHTML=instance.id,btn.dataset.id=instance.id,loaders.appendChild(btn),this.addEventListener(btn,"click",(()=&gt;this._openPanel(btn,instance)))}async _openPanel(btn,instance){try{const target=this.getElement(this.selectors.SUBPANEL),data={...instance};await this.renderComponent(target,"core/local/reactive/debuginstancepanel",data)}catch(error){throw _log.default.error("Cannot load reactive debug subpanel"),error}}}class DebugInstanceSubpanel extends _reactive.BaseComponent{create(){this.name="DebugInstanceSubpanel",this.selectors={NAME:"[data-for='name']",CLOSE:"[data-for='close']",READMODE:"[data-for='readmode']",HIGHLIGHT:"[data-for='highlight']",LOG:"[data-for='log']",STATE:"[data-for='state']",CLEAN:"[data-for='clean']",PIN:"[data-for='pin']",SAVE:"[data-for='save']",INVALID:"[data-for='invalid']"},this.id=this.element.dataset.id,this.controller=M.reactive[this.id],this.draggable=!1,this.relativeDrag=!0,this.strings={savewarning:""}}stateReady(){var _this$getElement$inne,_this$getElement2;this.dragdrop=new _reactive.DragDrop(this),this.addEventListener(this.getElement(this.selectors.CLOSE),"click",this.remove),this.controller.highlight&amp;&amp;this._toggleButtonText(this.getElement(this.selectors.HIGHLIGHT)),this.addEventListener(this.getElement(this.selectors.HIGHLIGHT),"click",(()=&gt;{this.controller.highlight=!this.controller.highlight,this._toggleButtonText(this.getElement(this.selectors.HIGHLIGHT))})),this.addEventListener(this.getElement(this.selectors.READMODE),"click",this._toggleEditMode),this.addEventListener(this.getElement(this.selectors.CLEAN),"click",this._cleanAreas),this.addEventListener(this.getElement(this.selectors.PIN),"click",this._togglePin),this.getElement(this.selectors.SAVE).disabled=!0,this.addEventListener(this.getElement(this.selectors.STATE),"keyup",(0,_utils.debounce)(this._checkJSON,500)),this.addEventListener(this.getElement(this.selectors.SAVE),"click",this._saveState),this.strings.savewarning=null!==(_this$getElement$inne=null===(_this$getElement2=this.getElement(this.selectors.INVALID))||void 0===_this$getElement2?void 0:_this$getElement2.innerHTML)&amp;&amp;void 0!==_this$getElement$inne?_this$getElement$inne:"",this._refreshState()}destroy(){void 0!==this.dragdrop&amp;&amp;this.dragdrop.unregister()}getWatchers(){return[{watch:"reactives[".concat(this.id,"].lastChanges:updated"),handler:this._refreshLog},{watch:"reactives[".concat(this.id,"].modified:updated"),handler:this._refreshState},{watch:"reactives[".concat(this.id,"].readOnly:updated"),handler:this._refreshReadOnly}]}_refreshLog(_ref2){var _element$lastChanges;let{element:element}=_ref2;const logContent=(null!==(_element$lastChanges=null==element?void 0:element.lastChanges)&amp;&amp;void 0!==_element$lastChanges?_element$lastChanges:[]).join("\n"),target=this.getElement(this.selectors.LOG);target.value+="\n\n= Transaction =\n ".concat(logContent),target.scrollTop=target.scrollHeight}_cleanAreas(){this.getElement(this.selectors.LOG).value="",this._refreshState()}_refreshState(){this.getElement(this.selectors.STATE).value=JSON.stringify(this.controller.state,null,4)}_refreshReadOnly(){const target=this.getElement(this.selectors.READMODE);void 0===target.dataset.readonly&amp;&amp;(target.dataset.readonly=target.innerHTML),this.controller.readOnly?target.innerHTML=target.dataset.readonly:target.innerHTML=target.dataset.alt}_toggleEditMode(){this.controller.readOnly=!this.controller.readOnly}_checkJSON(){const invalid=this.getElement(this.selectors.INVALID),save=this.getElement(this.selectors.SAVE),edited=this.getElement(this.selectors.STATE).value,currentStateData=this.controller.stateData;if(edited==JSON.stringify(this.controller.state,null,4))return invalid.style.color="",invalid.innerHTML="",void(save.disabled=!0);try{const newState=JSON.parse(edited),result=this._generateStateUpdates(currentStateData,newState);return invalid.style.color="",invalid.innerHTML=this.strings.savewarning,save.disabled=!1,result}catch(error){var _error$message;return invalid.style.color="red",invalid.innerHTML=null!==(_error$message=error.message)&amp;&amp;void 0!==_error$message?_error$message:"Invalid JSON sctructure",void(save.disabled=!0)}}_saveState(){const updates=this._checkJSON();updates&amp;&amp;this.controller.processUpdates(updates)}_generateStateUpdates(currentStateData,newStateData){const updates=[],ids={};for(const[key,newValue]of Object.entries(newStateData))Array.isArray(newValue)?(ids[key]={},newValue.forEach((element=&gt;{if(void 0===element.id)throw Error("Array ".concat(key," element without id attribute"));updates.push({name:key,action:"override",fields:element});const index=String(element.id).valueOf();ids[key][index]=!0}))):updates.push({name:key,action:"override",fields:newValue});for(const[key,oldValue]of Object.entries(currentStateData)){let deleteField=!1;if(void 0===newStateData[key]&amp;&amp;(deleteField=!0),Array.isArray(oldValue)){if(!deleteField&amp;&amp;void 0===ids[key])throw Error("Array ".concat(key," cannot change to object."));oldValue.forEach((element=&gt;{const index=String(element.id).valueOf();let deleteEntry=deleteField;deleteEntry||void 0!==ids[key][index]||(deleteEntry=!0),deleteEntry&amp;&amp;updates.push({name:key,action:"delete",fields:element})}))}else{if(!deleteField&amp;&amp;void 0!==ids[key])throw Error("Object ".concat(key," cannot change to array."));deleteField&amp;&amp;updates.push({name:key,action:"delete",fields:oldValue})}}return updates}getDraggableData(){return this.draggable}dragEnd(dropdata,event){this.element.style.top="".concat(event.newFixedTop,"px"),this.element.style.left="".concat(event.newFixedLeft,"px")}_togglePin(){this.draggable=!this.draggable,this.dragdrop.setDraggable(this.draggable),this.draggable?this._unpin():this._pin()}_unpin(){const pageCenterY=window.innerHeight/2,pageCenterX=window.innerWidth/2,style={position:"fixed",resize:"both",overflow:"auto",height:"400px",width:"400px",top:"".concat(pageCenterY-200,"px"),left:"".concat(pageCenterX-200,"px")};Object.assign(this.element.style,style),this.getElement(this.selectors.STATE).style.height="50px",this.getElement(this.selectors.LOG).style.height="50px",this._toggleButtonText(this.getElement(this.selectors.PIN))}_pin(){["position","resize","overflow","top","left","height","width"].forEach((prop=&gt;this.element.style.removeProperty(prop))),this._toggleButtonText(this.getElement(this.selectors.PIN))}_toggleButtonText(element){[element.innerHTML,element.dataset.alt]=[element.dataset.alt,element.innerHTML]}}}));
define("core/local/reactive/dragdrop",["exports","core/local/reactive/basecomponent"],(function(_exports,_basecomponent){var obj;
/**
   * Drag and drop helper component.
   *
   * This component is used to delegate drag and drop handling.
   *
   * To delegate the logic to this particular element the component should create a new instance
   * passing "this" as param. The component will use all the necessary callbacks and add all the
   * necessary listeners to the component element.
   *
   * Component attributes used by dragdrop module:
   * - element: the draggable or dropzone element.
   * - (optional) classes: object with alternative CSS classes
   * - (optional) fullregion: page element affeted by the elementy dragging. Use this attribute if
   *                          the draggable element affects a bigger region (for example a draggable
   *                          title).
   * - (optional) autoconfigDraggable: by default, the component will be draggable if it has a
   *                                   getDraggableData method. If this value is false draggable
   *                                  property must be defined using setDraggable method.
   * - (optional) relativeDrag: by default the drag image is located at point (0,0) relative to the
   *                            mouse position to prevent the mouse from covering it. If this attribute
   *                            is true the drag image will be located at the click offset.
   *
   * Methods the parent component should have for making it draggable:
   *
   * - getDraggableData(): Object|data
   *      Return the data that will be passed to any valid dropzone while it is dragged.
   *      If the component has this method, the dragdrop module will enable the dragging,
   *      this is the only required method for dragging.
   *      If at the dragging moment this method returns a false|null|undefined, the dragging
   *      actions won't be captured.
   *
   * - (optional) dragStart(Object dropdata, Event event): void
   * - (optional) dragEnd(Object dropdata, Event event): void
   *      Callbacks dragdrop will call when the element is dragged and getDraggableData
   *      return some data.
   *
   * Methods the parent component should have for enabling it as a dropzone:
   *
   * - validateDropData(Object dropdata): boolean
   *      If that method exists, the dragdrop module will automathically configure the element as dropzone.
   *      This method will return true if the dropdata is accepted. In case it returns false, no drag and
   *      drop event will be listened for this specific dragged dropdata.
   *
   * - (Optional) showDropZone(Object dropdata, Event event): void
   * - (Optional) hideDropZone(Object dropdata, Event event): void
   *      Methods called when a valid dragged data pass over the element.
   *
   * - (Optional) drop(Object dropdata, Event event): void
   *      Called when a valid dragged element is dropped over the element.
   *
   *      Note that none of this methods will be called if validateDropData
   *      returns a false value.
   *
   * This module will also add or remove several CSS classes from both dragged elements and dropzones.
   * See the "this.classes" in the create method for more details. In case the parent component wants
   * to use the same classes, it can use the getClasses method. On the other hand, if the parent
   * component has an alternative "classes" attribute, this will override the default drag and drop
   * classes.
   *
   * @module     core/local/reactive/dragdrop
   * @class      core/local/reactive/dragdrop
   * @copyright  2021 Ferran Recio &lt;ferran@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_basecomponent=(obj=_basecomponent)&amp;&amp;obj.__esModule?obj:{default:obj};let activeDropData=new Map,dragStartPoint={};class _default extends _basecomponent.default{create(parent){var _parent$name,_parent$classes,_this$parent$draggabl,_this$parent$relative;this.name="".concat(null!==(_parent$name=parent.name)&amp;&amp;void 0!==_parent$name?_parent$name:"unkown","_dragdrop"),this.classes=Object.assign({BODYDRAGGING:"dragging",DRAGGABLEREADY:"draggable",DROPREADY:"dropready",DRAGOVER:"dragover",DRAGGING:"dragging",DROPUP:"drop-up",DROPDOWN:"drop-down",DROPZONE:"drop-zone",DRAGICON:"dragicon"},null!==(_parent$classes=null==parent?void 0:parent.classes)&amp;&amp;void 0!==_parent$classes?_parent$classes:{}),this.fullregion=parent.fullregion,this.parent=parent,this.autoconfigDraggable=null===(_this$parent$draggabl=this.parent.draggable)||void 0===_this$parent$draggabl||_this$parent$draggabl,this.relativeDrag=null!==(_this$parent$relative=this.parent.relativeDrag)&amp;&amp;void 0!==_this$parent$relative&amp;&amp;_this$parent$relative,this.entercount=0,this.dropzonevisible=!1}getClasses(){return this.classes}stateReady(){"function"==typeof this.parent.validateDropData&amp;&amp;(this.element.classList.add(this.classes.DROPREADY),this.addEventListener(this.element,"dragenter",this._dragEnter),this.addEventListener(this.element,"dragleave",this._dragLeave),this.addEventListener(this.element,"dragover",this._dragOver),this.addEventListener(this.element,"drop",this._drop)),this.autoconfigDraggable&amp;&amp;"function"==typeof this.parent.getDraggableData&amp;&amp;this.setDraggable(!0)}setDraggable(value){if("function"!=typeof this.parent.getDraggableData)throw new Error("Draggable components must have a getDraggableData method");this.element.setAttribute("draggable",value),value?(this.addEventListener(this.element,"dragstart",this._dragStart),this.addEventListener(this.element,"dragend",this._dragEnd),this.element.classList.add(this.classes.DRAGGABLEREADY)):(this.removeEventListener(this.element,"dragstart",this._dragStart),this.removeEventListener(this.element,"dragend",this._dragEnd),this.element.classList.remove(this.classes.DRAGGABLEREADY))}_dragStart(event){var _this$fullregion;if(document.activeElement.matches("textarea, input"))return void event.preventDefault();const dropdata=this.parent.getDraggableData();if(!dropdata)return;dragStartPoint={pageX:event.pageX,pageY:event.pageY},event.stopPropagation(),activeDropData.set(this.reactive,dropdata),document.body.classList.add(this.classes.BODYDRAGGING),this.element.classList.add(this.classes.DRAGGING),null===(_this$fullregion=this.fullregion)||void 0===_this$fullregion||_this$fullregion.classList.add(this.classes.DRAGGING);let dragImage=this.element;if(void 0!==this.parent.setDragImage){const customImage=this.parent.setDragImage(dropdata,event);customImage&amp;&amp;(dragImage=customImage)}const position={x:0,y:0};this.relativeDrag&amp;&amp;(position.x=event.offsetX,position.y=event.offsetY),event.dataTransfer.setDragImage(dragImage,position.x,position.y),this._callParentMethod("dragStart",dropdata,event)}_dragEnd(event){var _this$fullregion2;const dropdata=activeDropData.get(this.reactive);dropdata&amp;&amp;(activeDropData.delete(this.reactive),document.body.classList.remove(this.classes.BODYDRAGGING),this.element.classList.remove(this.classes.DRAGGING),null===(_this$fullregion2=this.fullregion)||void 0===_this$fullregion2||_this$fullregion2.classList.remove(this.classes.DRAGGING),this._addEventTotalMovement(event),this._callParentMethod("dragEnd",dropdata,event))}_dragEnter(event){const dropdata=this._processEvent(event);dropdata&amp;&amp;(this.entercount++,this.element.classList.add(this.classes.DRAGOVER),1!=this.entercount||this.dropzonevisible||(this.dropzonevisible=!0,this.element.classList.add(this.classes.DRAGOVER),this._callParentMethod("showDropZone",dropdata,event)))}_dragOver(event){const dropdata=this._processEvent(event);dropdata&amp;&amp;!this.dropzonevisible&amp;&amp;(this.dropzonevisible=!0,this.element.classList.add(this.classes.DRAGOVER),this._callParentMethod("showDropZone",dropdata,event))}_dragLeave(event){const dropdata=this._processEvent(event);dropdata&amp;&amp;(this.entercount--,0==this.entercount&amp;&amp;this.dropzonevisible&amp;&amp;(this.dropzonevisible=!1,this.element.classList.remove(this.classes.DRAGOVER),this._callParentMethod("hideDropZone",dropdata,event)))}_drop(event){const dropdata=this._processEvent(event);dropdata&amp;&amp;(this.entercount=0,this.dropzonevisible&amp;&amp;(this.dropzonevisible=!1,this._callParentMethod("hideDropZone",dropdata,event)),this.element.classList.remove(this.classes.DRAGOVER),this._callParentMethod("drop",dropdata,event),dragStartPoint={})}_processEvent(event){const dropdata=this._getDropData(event);return dropdata&amp;&amp;this.parent.validateDropData(dropdata)?(event.preventDefault(),event.stopPropagation(),this._addEventTotalMovement(event),dropdata):null}_addEventTotalMovement(event){if(void 0===dragStartPoint.pageX||void 0===event.pageX)return;event.fixedMovementX=event.pageX-dragStartPoint.pageX,event.fixedMovementY=event.pageY-dragStartPoint.pageY,event.initialPageX=dragStartPoint.pageX,event.initialPageY=dragStartPoint.pageY;const current=this.element.getBoundingClientRect();if(event.newFixedTop=current.top+event.fixedMovementY,event.newFixedLeft=current.left+event.fixedMovementX,void 0!==this.fullregion){const current=this.fullregion.getBoundingClientRect();event.newRegionFixedxTop=current.top+event.fixedMovementY,event.newRegionFixedxLeft=current.left+event.fixedMovementX}}_callParentMethod(methodname,dropdata,event){"function"==typeof this.parent[methodname]&amp;&amp;this.parent[methodname](dropdata,event)}_getDropData(event){if(!this._containsOnlyFiles(event))return activeDropData.get(this.reactive)}_containsOnlyFiles(event){return!!(event.dataTransfer.types&amp;&amp;event.dataTransfer.types.length&gt;0)&amp;&amp;event.dataTransfer.types.every((type=&gt;"Files"===type))}}return _exports.default=_default,_exports.default}));
define("core/local/modal/alert",["exports","core/modal"],(function(_exports,_modal){var obj;
/**
   * Alert modal.
   *
   * @module     core/modal_alert
   * @copyright  2020 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_modal=(obj=_modal)&amp;&amp;obj.__esModule?obj:{default:obj};class _default extends _modal.default{registerEventListeners(){super.registerEventListeners(),this.registerCloseOnCancel()}}return _exports.default=_default,_exports.default}));
define("core/local/inplace_editable/events",["exports","jquery","core/event_dispatcher"],(function(_exports,_jquery,_event_dispatcher){var obj;
/**
   * Inplace editable module events
   *
   * @module      core/local/inplace_editable/events
   * @copyright   2021 Paul Holden &lt;paulh@moodle.com&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.notifyElementUpdated=_exports.notifyElementUpdateFailed=_exports.eventTypes=void 0,_jquery=(obj=_jquery)&amp;&amp;obj.__esModule?obj:{default:obj};const eventTypes={elementUpdated:"core/inplace_editable:updated",elementUpdateFailed:"core/inplace_editable:updateFailed"};_exports.eventTypes=eventTypes;_exports.notifyElementUpdated=(element,ajaxreturn,oldvalue)=&gt;(0,_event_dispatcher.dispatchEvent)(eventTypes.elementUpdated,{ajaxreturn:ajaxreturn,oldvalue:oldvalue},element);_exports.notifyElementUpdateFailed=(element,exception,newvalue)=&gt;(0,_event_dispatcher.dispatchEvent)(eventTypes.elementUpdateFailed,{exception:exception,newvalue:newvalue},element,{cancelable:!0});let legacyEventsRegistered=!1;legacyEventsRegistered||(document.addEventListener(eventTypes.elementUpdated,(event=&gt;{const legacyEvent=_jquery.default.Event("updated",event.detail);(0,_jquery.default)(event.target).trigger(legacyEvent)})),document.addEventListener(eventTypes.elementUpdateFailed,(event=&gt;{const legacyEvent=_jquery.default.Event("updatefailed",event.detail);(0,_jquery.default)(event.target).trigger(legacyEvent),legacyEvent.isDefaultPrevented()&amp;&amp;event.preventDefault()})),legacyEventsRegistered=!0)}));
/**
 * Chart builder.
 *
 * @copyright  2016 Frédéric Massart - FMCorz.net
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core/chart_builder",["jquery"],(function($){return{make:function(data){var deferred=$.Deferred();return require(["core/chart_"+data.type],(function(Klass){var instance=Klass.prototype.create(Klass,data);deferred.resolve(instance)})),deferred.promise()}}}));
/**
 * Course selector adaptor for auto-complete form element.
 *
 * @module     core/form-course-selector
 * @copyright  2016 Damyon Wiese &lt;damyon@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.1
 */
define("core/form-course-selector",["core/ajax","jquery"],(function(ajax,$){return{processResults:function(selector,data){var results=[],i=0,excludelist=String($(selector).data("exclude")).split(",");for(i=0;i&lt;data.courses.length;i++)-1===excludelist.indexOf(String(data.courses[i].id))&amp;&amp;results.push({value:data.courses[i].id,label:data.courses[i].displayname});return results},transport:function(selector,query,success,failure){var el=$(selector),requiredcapabilities=el.data("requiredcapabilities");requiredcapabilities=""!==requiredcapabilities.trim()?requiredcapabilities.split(","):[];var promises,limittoenrolled=el.data("limittoenrolled"),includefrontpage=el.data("includefrontpage"),onlywithcompletion=el.data("onlywithcompletion");void 0===query&amp;&amp;(query="");var calls=[{methodname:"core_course_search_courses",args:{criterianame:"search",criteriavalue:query,page:0,perpage:100,requiredcapabilities:requiredcapabilities,limittoenrolled:limittoenrolled,onlywithcompletion:onlywithcompletion}}];includefrontpage&amp;&amp;calls.push({methodname:"core_course_get_courses",args:{options:{ids:[includefrontpage]}}}),promises=ajax.call(calls),$.when.apply($.when,promises).done((function(data,site){if(site&amp;&amp;1==site.length){var frontpage=site.pop();(""===query||frontpage.fullname.toUpperCase().indexOf(query.toUpperCase())&gt;-1||frontpage.shortname.toUpperCase().indexOf(query.toUpperCase())&gt;-1)&amp;&amp;data.courses.splice(0,0,frontpage)}success(data)})).fail(failure)}}}));
/**
 * Standard Ajax wrapper for Moodle. It calls the central Ajax script,
 * which can call any existing webservice using the current session.
 * In addition, it can batch multiple requests and return multiple responses.
 *
 * @module     core/ajax
 * @copyright  2015 Damyon Wiese &lt;damyon@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      2.9
 */
define("core/ajax",["jquery","core/config","core/log","core/url"],(function($,config,Log,URL){var unloading=!1,requestSuccess=function(responses){var request,response,nosessionupdate,exception=null,i=0;if(responses.error)for(;i&lt;this.length;i++)(request=this[i]).deferred.reject(responses);else{for(i=0;i&lt;this.length;i++){if(request=this[i],void 0===(response=responses[i])){exception=new Error("missing response");break}if(!1!==response.error){exception=response.exception,nosessionupdate=this[i].nosessionupdate;break}request.deferred.resolve(response.data)}null!==exception&amp;&amp;("servicerequireslogin"!==exception.errorcode||nosessionupdate?this.forEach((function(request){request.deferred.reject(exception)})):window.location=URL.relativeUrl("/login/index.php"))}},requestFail=function(jqXHR,textStatus,exception){var i=0;for(i=0;i&lt;this.length;i++){var request=this[i];unloading?(Log.error("Page unloaded."),Log.error(exception)):request.deferred.reject(exception)}};return{call:function(requests,async,loginrequired,nosessionupdate,timeout,cachekey){$(window).bind("beforeunload",(function(){unloading=!0}));var i,ajaxRequestData=[],promises=[],methodInfo=[],requestInfo="";for(void 0===loginrequired&amp;&amp;(loginrequired=!0),void 0===async&amp;&amp;(async=!0),void 0===timeout&amp;&amp;(timeout=0),void 0===cachekey||(cachekey=parseInt(cachekey))&lt;=0?cachekey=null:cachekey||(cachekey=null),void 0===nosessionupdate&amp;&amp;(nosessionupdate=!1),i=0;i&lt;requests.length;i++){var request=requests[i];ajaxRequestData.push({index:i,methodname:request.methodname,args:request.args}),request.nosessionupdate=nosessionupdate,request.deferred=$.Deferred(),promises.push(request.deferred.promise()),void 0!==request.done&amp;&amp;request.deferred.done(request.done),void 0!==request.fail&amp;&amp;request.deferred.fail(request.fail),request.index=i,methodInfo.push(request.methodname)}requestInfo=methodInfo.length&lt;=5?methodInfo.sort().join():methodInfo.length+"-method-calls",ajaxRequestData=JSON.stringify(ajaxRequestData);var settings={type:"POST",context:requests,dataType:"json",processData:!1,async:async,contentType:"application/json",timeout:timeout},script="service.php",url=config.wwwroot+"/lib/ajax/";if(loginrequired?url+=script+"?sesskey="+config.sesskey+"&amp;info="+requestInfo:(url+=(script="service-nologin.php")+"?info="+requestInfo,cachekey&amp;&amp;(url+="&amp;cachekey="+cachekey,settings.type="GET")),nosessionupdate&amp;&amp;(url+="&amp;nosessionupdate=true"),"POST"===settings.type)settings.data=ajaxRequestData;else{var urlUseGet=url+"&amp;args="+encodeURIComponent(ajaxRequestData);urlUseGet.length&gt;2e3?(settings.type="POST",settings.data=ajaxRequestData):url=urlUseGet}return async?$.ajax(url,settings).done(requestSuccess).fail(requestFail):(settings.success=requestSuccess,settings.error=requestFail,$.ajax(url,settings)),promises}}}));
/**
 * Expose the M.cfg global variable.
 *
 * @module     core/config
 * @copyright  2015 Damyon Wiese &lt;damyon@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      2.9
 */
define("core/config",(function(){return M.cfg}));
/**
 * A way to call HTML fragments to be inserted as required via JavaScript.
 *
 * @module     core/fragment
 * @copyright  2016 Adrian Greeve &lt;adrian@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.1
 */
define("core/fragment",["jquery","core/ajax"],(function($,ajax){var processCollectedJavascript=function(js){var jsNodes=$(js),allScript="";return jsNodes.each((function(index,scriptNode){var tagName=(scriptNode=$(scriptNode)).prop("tagName");if(tagName&amp;&amp;"script"==tagName.toLowerCase())if(scriptNode.attr("src")){var exists=!1;$("script").each((function(index,s){return $(s).attr("src")==scriptNode.attr("src")&amp;&amp;(exists=!0),!exists})),exists||(allScript+=" { ",allScript+=' node = document.createElement("script"); ',allScript+=' node.type = "text/javascript"; ',allScript+=' node.src = decodeURI("'+encodeURI(scriptNode.attr("src"))+'"); ',allScript+=' document.getElementsByTagName("head")[0].appendChild(node); ',allScript+=" } ")}else allScript+=" "+scriptNode.text()})),allScript};return{loadFragment:function(component,callback,contextid,params){var promise=$.Deferred();return function(component,callback,contextid,params){var formattedparams=[];for(var index in params)formattedparams.push({name:index,value:params[index]});return ajax.call([{methodname:"core_get_fragment",args:{component:component,callback:callback,contextid:contextid,args:formattedparams}}])[0]}(component,callback,contextid,params).then((function(data){promise.resolve(data.html,processCollectedJavascript(data.javascript))})).fail((function(ex){promise.reject(ex)})),promise.promise()},processCollectedJavascript:function(js){return processCollectedJavascript(js)}}}));
/**
 * Events for the paged content element.
 *
 * @module     core/paged_content_events
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core/paged_content_events",[],(function(){return{SHOW_PAGES:"core-paged-content-show-pages",PAGES_SHOWN:"core-paged-content-pages-shown",ALL_ITEMS_LOADED:"core-paged-content-all-items-loaded",SET_ITEMS_PER_PAGE_LIMIT:"core-paged-content-set-items-per-page-limit"}}));
/**
 * Wrap an instance of the browser's local or session storage to handle
 * cache expiry, key namespacing and other helpful things.
 *
 * @module     core/storagewrapper
 * @copyright  2017 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core/storagewrapper",["core/config"],(function(config){var Wrapper=function(storage){this.storage=storage,this.supported=this.detectSupport(),this.hashSource=config.wwwroot+"/"+config.jsrev,this.hash=this.hashString(this.hashSource),this.prefix=this.hash+"/",this.jsrevPrefix=this.hashString(config.wwwroot)+"/jsrev",this.validateCache()};return Wrapper.prototype.detectSupport=function(){if(-1==config.jsrev)return!1;if(void 0===this.storage)return!1;try{return null!==this.storage&amp;&amp;(this.storage.setItem("test","1"),this.storage.removeItem("test"),!0)}catch(ex){return!1}},Wrapper.prototype.prefixKey=function(key){return this.prefix+key},Wrapper.prototype.validateCache=function(){if(this.supported){var cacheVersion=this.storage.getItem(this.jsrevPrefix);if(null!==cacheVersion)config.jsrev!=cacheVersion&amp;&amp;(this.storage.clear(),this.storage.setItem(this.jsrevPrefix,config.jsrev));else this.storage.setItem(this.jsrevPrefix,config.jsrev)}},Wrapper.prototype.hashString=function(source){var i,len,hash=0;if(0===source.length)return hash;for(i=0,len=source.length;i&lt;len;i++)hash=(hash&lt;&lt;5)-hash+source.charCodeAt(i),hash|=0;return hash},Wrapper.prototype.get=function(key){return!!this.supported&amp;&amp;(key=this.prefixKey(key),this.storage.getItem(key))},Wrapper.prototype.set=function(key,value){if(!this.supported)return!1;key=this.prefixKey(key);try{this.storage.setItem(key,value)}catch(e){return!1}return!0},Wrapper.prototype.clean=function(){this.storage.clear()},Wrapper}));
define("core/menu_navigation",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0;
/**
   * Keyboard initialization for a given html node.
   *
   * @module     core/menu_navigation
   * @copyright  2021 Moodle
   * @author     Mathew May &lt;mathew.solutions&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */
const SELECTORS_menuitem='[role="menuitem"]',SELECTORS_tab='[role="tab"]',SELECTORS_dropdowntoggle='[data-toggle="dropdown"]';let openDropdownNode=null;const clickErrorHandler=(item,fallback)=&gt;null!==item?item:fallback,menuItemHelper=src=&gt;{let parent;if(!src.dataset.disableactive){if(src.classList.contains("dropdown-item")){parent=src.closest(".dropdown-menu");const dropDownToggle=document.getElementById(parent.getAttribute("aria-labelledby"));dropDownToggle.classList.add("active"),dropDownToggle.setAttribute("tabindex",0)}else{if(!src.matches("".concat(SELECTORS_tab,",").concat(SELECTORS_menuitem))||src.matches(SELECTORS_dropdowntoggle))return;parent=src.parentElement.parentElement.querySelector(".dropdown-menu")}Array.prototype.forEach.call(parent.children,(node=&gt;{const menuItem=node.querySelector(SELECTORS_menuitem);null!==menuItem&amp;&amp;(menuItem.classList.remove("active"),menuItem.removeAttribute("aria-current"))})),"menuitem"===src.getAttribute("role")&amp;&amp;src.setAttribute("aria-current","true")}},keyboardListenerEvents=e=&gt;{const src=e.srcElement,firstNode=e.currentTarget.firstElementChild,lastNode=findUsableLastNode(e.currentTarget);if(src.classList.contains("dropdown-item"))"ArrowRight"!=e.key&amp;&amp;"ArrowLeft"!=e.key||(e.preventDefault(),null!==openDropdownNode&amp;&amp;openDropdownNode.parentElement.click())," "!=e.key&amp;&amp;"Enter"!=e.key||(e.preventDefault(),menuItemHelper(src),src.parentElement.classList.contains("dropdown")||src.click());else{const rtl=window.right_to_left(),arrowNext=rtl?"ArrowLeft":"ArrowRight",arrowPrevious=rtl?"ArrowRight":"ArrowLeft";"menuitem"===src.getAttribute("role")&amp;&amp;(e.key==arrowNext&amp;&amp;(e.preventDefault(),setFocusNext(src,firstNode)),e.key==arrowPrevious&amp;&amp;(e.preventDefault(),setFocusPrev(src,lastNode)),"ArrowUp"!=e.key&amp;&amp;"ArrowDown"!=e.key||(openDropdownNode=src,e.preventDefault()),"Home"==e.key&amp;&amp;(e.preventDefault(),setFocusHomeEnd(firstNode)),"End"==e.key&amp;&amp;(e.preventDefault(),setFocusHomeEnd(lastNode)))," "!=e.key&amp;&amp;"Enter"!=e.key||(e.preventDefault(),src.parentElement.classList.contains("dropdown")||src.click())}},clickListenerEvents=e=&gt;{const src=e.srcElement;menuItemHelper(src)};_exports.default=elementRoot=&gt;{elementRoot.removeEventListener("keydown",keyboardListenerEvents),elementRoot.removeEventListener("click",clickListenerEvents),elementRoot.addEventListener("keydown",keyboardListenerEvents),elementRoot.addEventListener("click",clickListenerEvents)};const setFocusNext=(currentNode,firstNode)=&gt;{const listElement=currentNode.parentElement,nextListItem=(el=&gt;{do{el=el.nextElementSibling}while(el&amp;&amp;!el.offsetHeight);return el})(listElement),nodeToSelect=clickErrorHandler(nextListItem,firstNode),itemSelector="tablist"===listElement.parentElement.getAttribute("role")?SELECTORS_tab:SELECTORS_menuitem;nodeToSelect.querySelector(itemSelector).focus()},setFocusPrev=(currentNode,lastNode)=&gt;{const listElement=currentNode.parentElement,nextListItem=(el=&gt;{do{el=el.previousElementSibling}while(el&amp;&amp;!el.offsetHeight);return el})(listElement),nodeToSelect=clickErrorHandler(nextListItem,lastNode),itemSelector="tablist"===listElement.parentElement.getAttribute("role")?SELECTORS_tab:SELECTORS_menuitem;nodeToSelect.querySelector(itemSelector).focus()},setFocusHomeEnd=node=&gt;{node.querySelector(SELECTORS_menuitem).focus()},findUsableLastNode=elementRoot=&gt;{if(elementRoot.lastElementChild.classList.contains("d-none")){const nodesToUse=Array.prototype.map.call(elementRoot.children,(node=&gt;node)).reverse().filter((node=&gt;{if(!node.classList.contains("d-none"))return node}));return 0!==nodesToUse.length?nodesToUse[0]:elementRoot.firstElementChild}return elementRoot.lastElementChild};return _exports.default}));
define("core/str",["exports","jquery","core/ajax","core/config","core/localstorage"],(function(_exports,_jquery,_ajax,_config,_localstorage){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Fetch and return language strings.
   *
   * @module     core/str
   * @copyright  2015 Damyon Wiese &lt;damyon@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   * @since      2.9
   *
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.get_strings=_exports.get_string=_exports.cache_strings=void 0,_jquery=_interopRequireDefault(_jquery),_ajax=_interopRequireDefault(_ajax),_config=_interopRequireDefault(_config),_localstorage=_interopRequireDefault(_localstorage);let promiseCache=[];_exports.get_string=(key,component,param,lang)=&gt;get_strings([{key:key,component:component,param:param,lang:lang}]).then((results=&gt;results[0]));const get_strings=requests=&gt;{let requestData=[];const pageLang=_config.default.language,stringPromises=requests.map((request=&gt;{let{component:component,key:key,param:param,lang:lang=pageLang}=request;component||(component="core");const cacheKey=(_ref=&gt;{let{key:key,component:component,lang:lang=pageLang}=_ref;return"core_str/".concat(key,"/").concat(component,"/").concat(lang)})({key:key,component:component,lang:lang}),buildReturn=promise=&gt;(promiseCache[cacheKey]=promise,promise);if(component in M.str&amp;&amp;key in M.str[component])return buildReturn(new Promise((resolve=&gt;{resolve(M.util.get_string(key,component,param,lang))})));const cached=_localstorage.default.get(cacheKey);return cached?(M.str[component]={...M.str[component],[key]:cached},buildReturn(new Promise((resolve=&gt;{resolve(M.util.get_string(key,component,param,lang))})))):cacheKey in promiseCache?buildReturn(promiseCache[cacheKey]).then((()=&gt;M.util.get_string(key,component,param,lang))):buildReturn(new Promise(((resolve,reject)=&gt;{requestData.push({methodname:"core_get_string",args:{stringid:key,stringparams:[],component:component,lang:lang},done:str=&gt;{M.str[component]={...M.str[component],[key]:str},_localstorage.default.set(cacheKey,str),resolve(M.util.get_string(key,component,param,lang))},fail:reject})})))}));return requestData.length&amp;&amp;_ajax.default.call(requestData,!0,!1,!1,0,M.cfg.langrev),_jquery.default.when.apply(_jquery.default,stringPromises).then((function(){for(var _len=arguments.length,strings=new Array(_len),_key=0;_key&lt;_len;_key++)strings[_key]=arguments[_key];return strings}))};_exports.get_strings=get_strings;_exports.cache_strings=strings=&gt;{strings.forEach((_ref2=&gt;{let{key:key,component:component,value:value,lang:lang=_config.default.language}=_ref2;const cacheKey=["core_str",key,component,lang].join("/");component in M.str&amp;&amp;key in M.str[component]||(component in M.str||(M.str[component]={}),M.str[component][key]=value),_localstorage.default.get(cacheKey)||_localstorage.default.set(cacheKey,value),cacheKey in promiseCache||(promiseCache[cacheKey]=_jquery.default.Deferred().resolve(value).promise())}))}}));
define("core/reactive",["exports","core/local/reactive/basecomponent","core/local/reactive/reactive","core/local/reactive/dragdrop","core/local/reactive/debug"],(function(_exports,_basecomponent,_reactive,_dragdrop,_debug){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Generic reactive module used in the course editor.
   *
   * @module     core/reactive
   * @copyright  2021 Ferran Recio &lt;ferran@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */let debug;if(Object.defineProperty(_exports,"__esModule",{value:!0}),Object.defineProperty(_exports,"BaseComponent",{enumerable:!0,get:function(){return _basecomponent.default}}),Object.defineProperty(_exports,"DragDrop",{enumerable:!0,get:function(){return _dragdrop.default}}),Object.defineProperty(_exports,"Reactive",{enumerable:!0,get:function(){return _reactive.default}}),_exports.debug=void 0,_basecomponent=_interopRequireDefault(_basecomponent),_reactive=_interopRequireDefault(_reactive),_dragdrop=_interopRequireDefault(_dragdrop),_exports.debug=debug,M.cfg.developerdebug&amp;&amp;void 0===M.reactive){const debugOBject=(0,_debug.initDebug)();M.reactive=debugOBject.debuggers,_exports.debug=debug=debugOBject.debug}}));
/**
 * A timer that will execute a callback with decreasing frequency. Useful for
 * doing polling on the server without overwhelming it with requests.
 *
 * @module     core/backoff_timer
 * @copyright  2016 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core/backoff_timer",(function(){var BackoffTimer=function(callback,backoffFunction){this.callback=callback,this.backOffFunction=backoffFunction};return BackoffTimer.prototype.callback=null,BackoffTimer.prototype.backOffFunction=null,BackoffTimer.prototype.time=null,BackoffTimer.prototype.timeout=null,BackoffTimer.prototype.generateNextTime=function(){var newTime=this.backOffFunction(this.time);return this.time=newTime,newTime},BackoffTimer.prototype.reset=function(){return this.time=null,this.stop(),this},BackoffTimer.prototype.stop=function(){return this.timeout&amp;&amp;(window.clearTimeout(this.timeout),this.timeout=null),this},BackoffTimer.prototype.start=function(){if(!this.timeout){var time=this.generateNextTime();this.timeout=window.setTimeout(function(){this.callback(),this.stop(),this.start()}.bind(this),time)}return this},BackoffTimer.prototype.restart=function(){return this.reset().start()},BackoffTimer.getIncrementalCallback=function(minamount,incrementamount,maxamount,timeoutamount){return function(time){return time?time+incrementamount&gt;maxamount?timeoutamount:time+incrementamount:minamount}},BackoffTimer}));
define("core/modal_cancel",["exports","core/modal","core/notification"],(function(_exports,_modal,_notification){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Contain the logic for the cancel modal.
   *
   * @module     core/modal_cancel
   * @copyright  2016 Ryan Wyllie &lt;ryan@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_modal=_interopRequireDefault(_modal),_notification=_interopRequireDefault(_notification);class _default extends _modal.default{constructor(root){super(root),this.getFooter().find(this.getActionSelector("cancel")).length||_notification.default.exception({message:"No cancel button found"})}registerEventListeners(){super.registerEventListeners(),this.registerCloseOnCancel()}}return _exports.default=_default,_exports.default}));
/**
 * Controls the popover region element.
 *
 * See template: core/popover_region
 *
 * @module     core/popover_region_controller
 * @copyright  2015 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.2
 */
define("core/popover_region_controller",["jquery","core/str","core/custom_interaction_events"],(function($,str,customEvents){var SELECTORS_CONTENT=".popover-region-content",SELECTORS_CONTENT_CONTAINER=".popover-region-content-container",SELECTORS_MENU_CONTAINER=".popover-region-container",SELECTORS_MENU_TOGGLE=".popover-region-toggle",SELECTORS_CAN_RECEIVE_FOCUS='input:not([type="hidden"]), a[href], button, textarea, select, [tabindex]',PopoverRegionController=function(element){this.root=$(element),this.content=this.root.find(SELECTORS_CONTENT),this.contentContainer=this.root.find(SELECTORS_CONTENT_CONTAINER),this.menuContainer=this.root.find(SELECTORS_MENU_CONTAINER),this.menuToggle=this.root.find(SELECTORS_MENU_TOGGLE),this.isLoading=!1,this.promises={closeHandlers:$.Deferred(),navigationHandlers:$.Deferred()},this.registerBaseEventListeners()};return PopoverRegionController.prototype.events=function(){return{menuOpened:"popoverregion:menuopened",menuClosed:"popoverregion:menuclosed",startLoading:"popoverregion:startLoading",stopLoading:"popoverregion:stopLoading"}},PopoverRegionController.prototype.getContentContainer=function(){return this.contentContainer},PopoverRegionController.prototype.getContent=function(){return this.content},PopoverRegionController.prototype.isMenuOpen=function(){return!this.root.hasClass("collapsed")},PopoverRegionController.prototype.toggleMenu=function(){this.isMenuOpen()?this.closeMenu():this.openMenu()},PopoverRegionController.prototype.closeMenu=function(){this.isMenuOpen()&amp;&amp;(this.root.addClass("collapsed"),this.menuContainer.attr("aria-expanded","false"),this.menuContainer.attr("aria-hidden","true"),this.updateButtonAriaLabel(),this.updateFocusItemTabIndex(),this.root.trigger(this.events().menuClosed))},PopoverRegionController.prototype.openMenu=function(){this.isMenuOpen()||(this.root.removeClass("collapsed"),this.menuContainer.attr("aria-expanded","true"),this.menuContainer.attr("aria-hidden","false"),this.updateButtonAriaLabel(),this.updateFocusItemTabIndex(),this.promises.closeHandlers.resolve(),this.promises.navigationHandlers.resolve(),this.root.trigger(this.events().menuOpened))},PopoverRegionController.prototype.updateButtonAriaLabel=function(){this.isMenuOpen()?str.get_string("hidepopoverwindow").done(function(string){this.menuToggle.attr("aria-label",string)}.bind(this)):str.get_string("showpopoverwindow").done(function(string){this.menuToggle.attr("aria-label",string)}.bind(this))},PopoverRegionController.prototype.startLoading=function(){this.isLoading=!0,this.getContentContainer().addClass("loading"),this.getContentContainer().attr("aria-busy","true"),this.root.trigger(this.events().startLoading)},PopoverRegionController.prototype.stopLoading=function(){this.isLoading=!1,this.getContentContainer().removeClass("loading"),this.getContentContainer().attr("aria-busy","false"),this.root.trigger(this.events().stopLoading)},PopoverRegionController.prototype.focusMenuToggle=function(){this.menuToggle.focus()},PopoverRegionController.prototype.contentItemHasFocus=function(){return this.getContentItemWithFocus().length&gt;0},PopoverRegionController.prototype.getContentItemWithFocus=function(){var currentFocus=$(document.activeElement),items=this.getContent().children(),currentItem=items.filter(currentFocus);return currentItem.length||(currentItem=items.has(currentFocus)),currentItem},PopoverRegionController.prototype.focusContentItem=function(item){item.is(SELECTORS_CAN_RECEIVE_FOCUS)?item.focus():item.find(SELECTORS_CAN_RECEIVE_FOCUS).first().focus()},PopoverRegionController.prototype.focusFirstContentItem=function(){this.focusContentItem(this.getContent().children().first())},PopoverRegionController.prototype.focusLastContentItem=function(){this.focusContentItem(this.getContent().children().last())},PopoverRegionController.prototype.focusNextContentItem=function(){var currentItem=this.getContentItemWithFocus();currentItem.length&amp;&amp;currentItem.next()&amp;&amp;this.focusContentItem(currentItem.next())},PopoverRegionController.prototype.focusPreviousContentItem=function(){var currentItem=this.getContentItemWithFocus();currentItem.length&amp;&amp;currentItem.prev()&amp;&amp;this.focusContentItem(currentItem.prev())},PopoverRegionController.prototype.registerBaseEventListeners=function(){customEvents.define(this.root,[customEvents.events.activate,customEvents.events.escape]),this.root.on(customEvents.events.activate,SELECTORS_MENU_TOGGLE,function(){this.toggleMenu()}.bind(this)),this.promises.closeHandlers.done(function(){this.root.on(customEvents.events.escape,function(){this.closeMenu(),this.focusMenuToggle()}.bind(this)),$("html").click(function(e){var target=$(e.target);this.root.is(target)||this.root.has(target).length||this.closeMenu()}.bind(this)),customEvents.define(this.getContentContainer(),[customEvents.events.scrollBottom])}.bind(this))},PopoverRegionController.prototype.registerListNavigationEventListeners=function(){customEvents.define(this.root,[customEvents.events.down]),this.root.on(customEvents.events.down,function(e,data){this.isMenuOpen()?this.contentItemHasFocus()?this.focusNextContentItem():this.focusFirstContentItem():(this.openMenu(),this.focusFirstContentItem()),data.originalEvent.preventDefault()}.bind(this)),this.promises.navigationHandlers.done(function(){customEvents.define(this.root,[customEvents.events.up,customEvents.events.home,customEvents.events.end]),this.root.on(customEvents.events.up,function(e,data){this.focusPreviousContentItem(),data.originalEvent.preventDefault()}.bind(this)),this.root.on(customEvents.events.home,function(e,data){this.focusFirstContentItem(),data.originalEvent.preventDefault()}.bind(this)),this.root.on(customEvents.events.end,function(e,data){this.focusLastContentItem(),data.originalEvent.preventDefault()}.bind(this))}.bind(this))},PopoverRegionController.prototype.updateFocusItemTabIndex=function(){this.isMenuOpen()?this.menuContainer.find(SELECTORS_CAN_RECEIVE_FOCUS).removeAttr("tabindex"):this.menuContainer.find(SELECTORS_CAN_RECEIVE_FOCUS).attr("tabindex","-1")},PopoverRegionController}));
define("core/drawer",["exports","jquery","core/pubsub","core/aria","core/drawer_events"],(function(_exports,_jquery,PubSub,Aria,_drawer_events){function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Controls the drawer.
   *
   * @module     core/drawer
   * @copyright  2019 Jun Pataleta &lt;jun@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_jquery=_interopRequireDefault(_jquery),PubSub=_interopRequireWildcard(PubSub),Aria=_interopRequireWildcard(Aria),_drawer_events=_interopRequireDefault(_drawer_events);const show=root=&gt;{root=(0,_jquery.default)(root),Aria.unhide(root.get()),root.removeClass("hidden"),root.attr("aria-expanded",!0),root.focus(),PubSub.publish(_drawer_events.default.DRAWER_SHOWN,root)},hide=root=&gt;{(root=(0,_jquery.default)(root)).addClass("hidden"),root.attr("aria-expanded",!1),Aria.hide(root.get()),PubSub.publish(_drawer_events.default.DRAWER_HIDDEN,root)},isVisible=root=&gt;!root.hasClass("hidden"),toggle=root=&gt;{isVisible(root)?hide(root):show(root)};var _default={hide:hide,show:show,isVisible:isVisible,toggle:toggle,registerToggles:(root,toggleElements)=&gt;{let openTrigger=null;toggleElements.attr("aria-expanded",isVisible(root)),toggleElements.on("click",(e=&gt;{e.preventDefault();const wasVisible=isVisible(root);toggle(root),toggleElements.attr("aria-expanded",!wasVisible),wasVisible?openTrigger&amp;&amp;(openTrigger.focus(),openTrigger=null):openTrigger=toggleElements.filter(((index,element)=&gt;element==e.target||element.contains(e.target)))}))},getDrawerRoot:contentRoot=&gt;(contentRoot=(0,_jquery.default)(contentRoot)).closest('[data-region="right-hand-drawer"]')};return _exports.default=_default,_exports.default}));
/**
 * Create a modal.
 *
 * @module     core/modal_factory
 * @copyright  2016 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core/modal_factory",["jquery","core/modal_events","core/modal_registry","core/modal","core/modal_save_cancel","core/modal_cancel","core/local/modal/alert","core/templates","core/notification","core/custom_interaction_events","core/pending"],(function($,ModalEvents,ModalRegistry,Modal,ModalSaveCancel,ModalCancel,ModalAlert,Templates,Notification,CustomEvents,Pending){var TEMPLATES_DEFAULT="core/modal",TEMPLATES_SAVE_CANCEL="core/modal_save_cancel",TEMPLATES_CANCEL="core/modal_cancel",TEMPLATES_ALERT="core/local/modal/alert",TYPES={DEFAULT:"DEFAULT",SAVE_CANCEL:"SAVE_CANCEL",CANCEL:"CANCEL",ALERT:"ALERT"};ModalRegistry.register(TYPES.DEFAULT,Modal,TEMPLATES_DEFAULT),ModalRegistry.register(TYPES.SAVE_CANCEL,ModalSaveCancel,TEMPLATES_SAVE_CANCEL),ModalRegistry.register(TYPES.CANCEL,ModalCancel,TEMPLATES_CANCEL),ModalRegistry.register(TYPES.ALERT,ModalAlert,TEMPLATES_ALERT);var createFromType=function(registryConf,templateContext){var templateName=registryConf.template,modalPromise=Templates.render(templateName,templateContext).then((function(html){var modalElement=$(html);return function(registryConf,modalElement){return modalElement=$(modalElement),new(0,registryConf.module)(modalElement)}(registryConf,modalElement)})).fail(Notification.exception);return modalPromise};return{create:function(modalConfig,triggerElement){var registryConf,type=modalConfig.type||TYPES.DEFAULT,isLarge=!!modalConfig.large,isScrollable=!modalConfig.hasOwnProperty("scrollable")||modalConfig.scrollable,templateContext={};(registryConf=ModalRegistry.get(type))||Notification.exception({message:"Unable to find modal of type: "+type}),void 0!==modalConfig.templateContext&amp;&amp;(templateContext=modalConfig.templateContext);var pendingModalPromise=new Pending("core/modal_factory:create"),modalPromise=createFromType(registryConf,templateContext).then((function(modal){return void 0!==modalConfig.title&amp;&amp;modal.setTitle(modalConfig.title),void 0!==modalConfig.body&amp;&amp;modal.setBody(modalConfig.body),void 0!==modalConfig.footer&amp;&amp;modal.setFooter(modalConfig.footer),modalConfig.buttons&amp;&amp;Object.entries(modalConfig.buttons).forEach((function(_ref){let[key,value]=_ref;modal.setButtonText(key,value)})),isLarge&amp;&amp;modal.setLarge(),void 0!==modalConfig.removeOnClose&amp;&amp;modal.setRemoveOnClose(modalConfig.removeOnClose),modal.setScrollable(isScrollable),pendingModalPromise.resolve(),modal}));return void 0!==triggerElement&amp;&amp;function(modalPromise,triggerElement,modalConfig){var actualTriggerElement=null,hasPreShowCallback="function"==typeof modalConfig.preShowCallback,triggeredCallback=function(e,data){var pendingPromise=new Pending("core/modal_factory:setUpTrigger:triggeredCallback");actualTriggerElement=$(e.currentTarget),modalPromise.then((function(modal){return hasPreShowCallback&amp;&amp;modalConfig.preShowCallback(actualTriggerElement,modal),modal.show(),modal})).then(pendingPromise.resolve),data.originalEvent.preventDefault()};if(Array.isArray(triggerElement)){var selector=triggerElement[1];triggerElement=triggerElement[0],CustomEvents.define(triggerElement,[CustomEvents.events.activate]),triggerElement.on(CustomEvents.events.activate,selector,triggeredCallback)}else CustomEvents.define(triggerElement,[CustomEvents.events.activate]),triggerElement.on(CustomEvents.events.activate,triggeredCallback);modalPromise.then((function(modal){return modal.getRoot().on(ModalEvents.hidden,(function(){null!==actualTriggerElement&amp;&amp;actualTriggerElement.focus()})),modal}))}(modalPromise,triggerElement,modalConfig),modalPromise},types:TYPES}}));
/**
 * A list of human readable names for the keycodes.
 *
 * @module     core/key_codes
 * @copyright  2016 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.2
 */
define("core/key_codes",(function(){return{tab:9,enter:13,shift:16,ctrl:17,alt:18,escape:27,space:32,end:35,home:36,arrowLeft:37,arrowUp:38,arrowRight:39,arrowDown:40,8:56,asterix:106,pageUp:33,pageDown:34}}));
define("core/edit_switch",["exports","core/ajax","core/event_dispatcher","core/notification"],(function(_exports,_ajax,_event_dispatcher,_notification){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=_exports.eventTypes=void 0;
/**
   * Controls the edit switch.
   *
   * @module     core/edit_switch
   * @copyright  2021 Bas Brands &lt;bas@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */
const eventTypes={editModeSet:"core/edit_switch/editModeSet"};_exports.eventTypes=eventTypes;const notifyEditModeSet=(container,editMode)=&gt;(0,_event_dispatcher.dispatchEvent)(eventTypes.editModeSet,{editMode:editMode},container,{cancelable:!0});_exports.init=editingSwitchId=&gt;{const editSwitch=document.getElementById(editingSwitchId);editSwitch.addEventListener("change",(()=&gt;{var context,setmode;(context=editSwitch.dataset.context,setmode=editSwitch.checked,(0,_ajax.call)([{methodname:"core_change_editmode",args:{context:context,setmode:setmode}}])[0]).then((result=&gt;{result.success?(editSwitch=&gt;{editSwitch.checked?editSwitch.setAttribute("aria-checked",!0):editSwitch.setAttribute("aria-checked",!1),notifyEditModeSet(editSwitch,editSwitch.checked).defaultPrevented||(editSwitch.setAttribute("disabled",!0),window.location=editSwitch.dataset.pageurl)})(editSwitch):editSwitch.checked=!1})).catch(_notification.exception)}))}}));
define("core/adapter",[],(function(){return function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a="function"==typeof require&amp;&amp;require;if(!u&amp;&amp;a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,(function(e){var n=t[o][1][e];return s(n||e)}),l,l.exports,e,t,n,r)}return n[o].exports}for(var i="function"==typeof require&amp;&amp;require,o=0;o&lt;r.length;o++)s(r[o]);return s}({1:[function(require,module,exports){var adapter=(0,require("./adapter_factory.js").adapterFactory)({window:"undefined"==typeof window?void 0:window});module.exports=adapter},{"./adapter_factory.js":2}],2:[function(require,module,exports){Object.defineProperty(exports,"__esModule",{value:!0}),exports.adapterFactory=function(){var _ref=arguments.length&gt;0&amp;&amp;void 0!==arguments[0]?arguments[0]:{},window=_ref.window,options=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]?arguments[1]:{shimChrome:!0,shimFirefox:!0,shimSafari:!0},logging=utils.log,browserDetails=utils.detectBrowser(window),adapter={browserDetails:browserDetails,commonShim:commonShim,extractVersion:utils.extractVersion,disableLog:utils.disableLog,disableWarnings:utils.disableWarnings,sdp:sdp};switch(browserDetails.browser){case"chrome":if(!chromeShim||!chromeShim.shimPeerConnection||!options.shimChrome)return logging("Chrome shim is not included in this adapter release."),adapter;if(null===browserDetails.version)return logging("Chrome shim can not determine version, not shimming."),adapter;logging("adapter.js shimming chrome."),adapter.browserShim=chromeShim,commonShim.shimAddIceCandidateNullOrEmpty(window,browserDetails),chromeShim.shimGetUserMedia(window,browserDetails),chromeShim.shimMediaStream(window,browserDetails),chromeShim.shimPeerConnection(window,browserDetails),chromeShim.shimOnTrack(window,browserDetails),chromeShim.shimAddTrackRemoveTrack(window,browserDetails),chromeShim.shimGetSendersWithDtmf(window,browserDetails),chromeShim.shimGetStats(window,browserDetails),chromeShim.shimSenderReceiverGetStats(window,browserDetails),chromeShim.fixNegotiationNeeded(window,browserDetails),commonShim.shimRTCIceCandidate(window,browserDetails),commonShim.shimConnectionState(window,browserDetails),commonShim.shimMaxMessageSize(window,browserDetails),commonShim.shimSendThrowTypeError(window,browserDetails),commonShim.removeExtmapAllowMixed(window,browserDetails);break;case"firefox":if(!firefoxShim||!firefoxShim.shimPeerConnection||!options.shimFirefox)return logging("Firefox shim is not included in this adapter release."),adapter;logging("adapter.js shimming firefox."),adapter.browserShim=firefoxShim,commonShim.shimAddIceCandidateNullOrEmpty(window,browserDetails),firefoxShim.shimGetUserMedia(window,browserDetails),firefoxShim.shimPeerConnection(window,browserDetails),firefoxShim.shimOnTrack(window,browserDetails),firefoxShim.shimRemoveStream(window,browserDetails),firefoxShim.shimSenderGetStats(window,browserDetails),firefoxShim.shimReceiverGetStats(window,browserDetails),firefoxShim.shimRTCDataChannel(window,browserDetails),firefoxShim.shimAddTransceiver(window,browserDetails),firefoxShim.shimGetParameters(window,browserDetails),firefoxShim.shimCreateOffer(window,browserDetails),firefoxShim.shimCreateAnswer(window,browserDetails),commonShim.shimRTCIceCandidate(window,browserDetails),commonShim.shimConnectionState(window,browserDetails),commonShim.shimMaxMessageSize(window,browserDetails),commonShim.shimSendThrowTypeError(window,browserDetails);break;case"safari":if(!safariShim||!options.shimSafari)return logging("Safari shim is not included in this adapter release."),adapter;logging("adapter.js shimming safari."),adapter.browserShim=safariShim,commonShim.shimAddIceCandidateNullOrEmpty(window,browserDetails),safariShim.shimRTCIceServerUrls(window,browserDetails),safariShim.shimCreateOfferLegacy(window,browserDetails),safariShim.shimCallbacksAPI(window,browserDetails),safariShim.shimLocalStreamsAPI(window,browserDetails),safariShim.shimRemoteStreamsAPI(window,browserDetails),safariShim.shimTrackEventTransceiver(window,browserDetails),safariShim.shimGetUserMedia(window,browserDetails),safariShim.shimAudioContext(window,browserDetails),commonShim.shimRTCIceCandidate(window,browserDetails),commonShim.shimMaxMessageSize(window,browserDetails),commonShim.shimSendThrowTypeError(window,browserDetails),commonShim.removeExtmapAllowMixed(window,browserDetails);break;default:logging("Unsupported browser!")}return adapter};var utils=_interopRequireWildcard(require("./utils")),chromeShim=_interopRequireWildcard(require("./chrome/chrome_shim")),firefoxShim=_interopRequireWildcard(require("./firefox/firefox_shim")),safariShim=_interopRequireWildcard(require("./safari/safari_shim")),commonShim=_interopRequireWildcard(require("./common_shim")),sdp=_interopRequireWildcard(require("sdp"));function _interopRequireWildcard(obj){if(obj&amp;&amp;obj.__esModule)return obj;var newObj={};if(null!=obj)for(var key in obj)Object.prototype.hasOwnProperty.call(obj,key)&amp;&amp;(newObj[key]=obj[key]);return newObj.default=obj,newObj}},{"./chrome/chrome_shim":3,"./common_shim":6,"./firefox/firefox_shim":7,"./safari/safari_shim":10,"./utils":11,sdp:12}],3:[function(require,module,exports){Object.defineProperty(exports,"__esModule",{value:!0}),exports.shimGetDisplayMedia=exports.shimGetUserMedia=void 0;var _typeof="function"==typeof Symbol&amp;&amp;"symbol"==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&amp;&amp;"function"==typeof Symbol&amp;&amp;obj.constructor===Symbol&amp;&amp;obj!==Symbol.prototype?"symbol":typeof obj},_getusermedia=require("./getusermedia");Object.defineProperty(exports,"shimGetUserMedia",{enumerable:!0,get:function(){return _getusermedia.shimGetUserMedia}});var _getdisplaymedia=require("./getdisplaymedia");Object.defineProperty(exports,"shimGetDisplayMedia",{enumerable:!0,get:function(){return _getdisplaymedia.shimGetDisplayMedia}}),exports.shimMediaStream=function(window){window.MediaStream=window.MediaStream||window.webkitMediaStream},exports.shimOnTrack=function(window){if("object"===(void 0===window?"undefined":_typeof(window))&amp;&amp;window.RTCPeerConnection&amp;&amp;!("ontrack"in window.RTCPeerConnection.prototype)){Object.defineProperty(window.RTCPeerConnection.prototype,"ontrack",{get:function(){return this._ontrack},set:function(f){this._ontrack&amp;&amp;this.removeEventListener("track",this._ontrack),this.addEventListener("track",this._ontrack=f)},enumerable:!0,configurable:!0});var origSetRemoteDescription=window.RTCPeerConnection.prototype.setRemoteDescription;window.RTCPeerConnection.prototype.setRemoteDescription=function(){var _this=this;return this._ontrackpoly||(this._ontrackpoly=function(e){e.stream.addEventListener("addtrack",(function(te){var receiver=void 0;receiver=window.RTCPeerConnection.prototype.getReceivers?_this.getReceivers().find((function(r){return r.track&amp;&amp;r.track.id===te.track.id})):{track:te.track};var event=new Event("track");event.track=te.track,event.receiver=receiver,event.transceiver={receiver:receiver},event.streams=[e.stream],_this.dispatchEvent(event)})),e.stream.getTracks().forEach((function(track){var receiver=void 0;receiver=window.RTCPeerConnection.prototype.getReceivers?_this.getReceivers().find((function(r){return r.track&amp;&amp;r.track.id===track.id})):{track:track};var event=new Event("track");event.track=track,event.receiver=receiver,event.transceiver={receiver:receiver},event.streams=[e.stream],_this.dispatchEvent(event)}))},this.addEventListener("addstream",this._ontrackpoly)),origSetRemoteDescription.apply(this,arguments)}}else utils.wrapPeerConnectionEvent(window,"track",(function(e){return e.transceiver||Object.defineProperty(e,"transceiver",{value:{receiver:e.receiver}}),e}))},exports.shimGetSendersWithDtmf=function(window){if("object"===(void 0===window?"undefined":_typeof(window))&amp;&amp;window.RTCPeerConnection&amp;&amp;!("getSenders"in window.RTCPeerConnection.prototype)&amp;&amp;"createDTMFSender"in window.RTCPeerConnection.prototype){var shimSenderWithDtmf=function(pc,track){return{track:track,get dtmf(){return void 0===this._dtmf&amp;&amp;("audio"===track.kind?this._dtmf=pc.createDTMFSender(track):this._dtmf=null),this._dtmf},_pc:pc}};if(!window.RTCPeerConnection.prototype.getSenders){window.RTCPeerConnection.prototype.getSenders=function(){return this._senders=this._senders||[],this._senders.slice()};var origAddTrack=window.RTCPeerConnection.prototype.addTrack;window.RTCPeerConnection.prototype.addTrack=function(track,stream){var sender=origAddTrack.apply(this,arguments);return sender||(sender=shimSenderWithDtmf(this,track),this._senders.push(sender)),sender};var origRemoveTrack=window.RTCPeerConnection.prototype.removeTrack;window.RTCPeerConnection.prototype.removeTrack=function(sender){origRemoveTrack.apply(this,arguments);var idx=this._senders.indexOf(sender);-1!==idx&amp;&amp;this._senders.splice(idx,1)}}var origAddStream=window.RTCPeerConnection.prototype.addStream;window.RTCPeerConnection.prototype.addStream=function(stream){var _this2=this;this._senders=this._senders||[],origAddStream.apply(this,[stream]),stream.getTracks().forEach((function(track){_this2._senders.push(shimSenderWithDtmf(_this2,track))}))};var origRemoveStream=window.RTCPeerConnection.prototype.removeStream;window.RTCPeerConnection.prototype.removeStream=function(stream){var _this3=this;this._senders=this._senders||[],origRemoveStream.apply(this,[stream]),stream.getTracks().forEach((function(track){var sender=_this3._senders.find((function(s){return s.track===track}));sender&amp;&amp;_this3._senders.splice(_this3._senders.indexOf(sender),1)}))}}else if("object"===(void 0===window?"undefined":_typeof(window))&amp;&amp;window.RTCPeerConnection&amp;&amp;"getSenders"in window.RTCPeerConnection.prototype&amp;&amp;"createDTMFSender"in window.RTCPeerConnection.prototype&amp;&amp;window.RTCRtpSender&amp;&amp;!("dtmf"in window.RTCRtpSender.prototype)){var origGetSenders=window.RTCPeerConnection.prototype.getSenders;window.RTCPeerConnection.prototype.getSenders=function(){var _this4=this,senders=origGetSenders.apply(this,[]);return senders.forEach((function(sender){return sender._pc=_this4})),senders},Object.defineProperty(window.RTCRtpSender.prototype,"dtmf",{get:function(){return void 0===this._dtmf&amp;&amp;("audio"===this.track.kind?this._dtmf=this._pc.createDTMFSender(this.track):this._dtmf=null),this._dtmf}})}},exports.shimGetStats=function(window){if(!window.RTCPeerConnection)return;var origGetStats=window.RTCPeerConnection.prototype.getStats;window.RTCPeerConnection.prototype.getStats=function(){var _this5=this,_arguments=Array.prototype.slice.call(arguments),selector=_arguments[0],onSucc=_arguments[1],onErr=_arguments[2];if(arguments.length&gt;0&amp;&amp;"function"==typeof selector)return origGetStats.apply(this,arguments);if(0===origGetStats.length&amp;&amp;(0===arguments.length||"function"!=typeof selector))return origGetStats.apply(this,[]);var fixChromeStats_=function(response){var standardReport={};return response.result().forEach((function(report){var standardStats={id:report.id,timestamp:report.timestamp,type:{localcandidate:"local-candidate",remotecandidate:"remote-candidate"}[report.type]||report.type};report.names().forEach((function(name){standardStats[name]=report.stat(name)})),standardReport[standardStats.id]=standardStats})),standardReport},makeMapStats=function(stats){return new Map(Object.keys(stats).map((function(key){return[key,stats[key]]})))};if(arguments.length&gt;=2){var successCallbackWrapper_=function(response){onSucc(makeMapStats(fixChromeStats_(response)))};return origGetStats.apply(this,[successCallbackWrapper_,selector])}return new Promise((function(resolve,reject){origGetStats.apply(_this5,[function(response){resolve(makeMapStats(fixChromeStats_(response)))},reject])})).then(onSucc,onErr)}},exports.shimSenderReceiverGetStats=function(window){if(!("object"===(void 0===window?"undefined":_typeof(window))&amp;&amp;window.RTCPeerConnection&amp;&amp;window.RTCRtpSender&amp;&amp;window.RTCRtpReceiver))return;if(!("getStats"in window.RTCRtpSender.prototype)){var origGetSenders=window.RTCPeerConnection.prototype.getSenders;origGetSenders&amp;&amp;(window.RTCPeerConnection.prototype.getSenders=function(){var _this6=this,senders=origGetSenders.apply(this,[]);return senders.forEach((function(sender){return sender._pc=_this6})),senders});var origAddTrack=window.RTCPeerConnection.prototype.addTrack;origAddTrack&amp;&amp;(window.RTCPeerConnection.prototype.addTrack=function(){var sender=origAddTrack.apply(this,arguments);return sender._pc=this,sender}),window.RTCRtpSender.prototype.getStats=function(){var sender=this;return this._pc.getStats().then((function(result){return utils.filterStats(result,sender.track,!0)}))}}if(!("getStats"in window.RTCRtpReceiver.prototype)){var origGetReceivers=window.RTCPeerConnection.prototype.getReceivers;origGetReceivers&amp;&amp;(window.RTCPeerConnection.prototype.getReceivers=function(){var _this7=this,receivers=origGetReceivers.apply(this,[]);return receivers.forEach((function(receiver){return receiver._pc=_this7})),receivers}),utils.wrapPeerConnectionEvent(window,"track",(function(e){return e.receiver._pc=e.srcElement,e})),window.RTCRtpReceiver.prototype.getStats=function(){var receiver=this;return this._pc.getStats().then((function(result){return utils.filterStats(result,receiver.track,!1)}))}}if(!("getStats"in window.RTCRtpSender.prototype)||!("getStats"in window.RTCRtpReceiver.prototype))return;var origGetStats=window.RTCPeerConnection.prototype.getStats;window.RTCPeerConnection.prototype.getStats=function(){if(arguments.length&gt;0&amp;&amp;arguments[0]instanceof window.MediaStreamTrack){var track=arguments[0],sender=void 0,receiver=void 0,err=void 0;return this.getSenders().forEach((function(s){s.track===track&amp;&amp;(sender?err=!0:sender=s)})),this.getReceivers().forEach((function(r){return r.track===track&amp;&amp;(receiver?err=!0:receiver=r),r.track===track})),err||sender&amp;&amp;receiver?Promise.reject(new DOMException("There are more than one sender or receiver for the track.","InvalidAccessError")):sender?sender.getStats():receiver?receiver.getStats():Promise.reject(new DOMException("There is no sender or receiver for the track.","InvalidAccessError"))}return origGetStats.apply(this,arguments)}},exports.shimAddTrackRemoveTrackWithNative=shimAddTrackRemoveTrackWithNative,exports.shimAddTrackRemoveTrack=function(window,browserDetails){if(!window.RTCPeerConnection)return;if(window.RTCPeerConnection.prototype.addTrack&amp;&amp;browserDetails.version&gt;=65)return shimAddTrackRemoveTrackWithNative(window);var origGetLocalStreams=window.RTCPeerConnection.prototype.getLocalStreams;window.RTCPeerConnection.prototype.getLocalStreams=function(){var _this11=this,nativeStreams=origGetLocalStreams.apply(this);return this._reverseStreams=this._reverseStreams||{},nativeStreams.map((function(stream){return _this11._reverseStreams[stream.id]}))};var origAddStream=window.RTCPeerConnection.prototype.addStream;window.RTCPeerConnection.prototype.addStream=function(stream){var _this12=this;if(this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},stream.getTracks().forEach((function(track){if(_this12.getSenders().find((function(s){return s.track===track})))throw new DOMException("Track already exists.","InvalidAccessError")})),!this._reverseStreams[stream.id]){var newStream=new window.MediaStream(stream.getTracks());this._streams[stream.id]=newStream,this._reverseStreams[newStream.id]=stream,stream=newStream}origAddStream.apply(this,[stream])};var origRemoveStream=window.RTCPeerConnection.prototype.removeStream;function replaceInternalStreamId(pc,description){var sdp=description.sdp;return Object.keys(pc._reverseStreams||[]).forEach((function(internalId){var externalStream=pc._reverseStreams[internalId],internalStream=pc._streams[externalStream.id];sdp=sdp.replace(new RegExp(internalStream.id,"g"),externalStream.id)})),new RTCSessionDescription({type:description.type,sdp:sdp})}function replaceExternalStreamId(pc,description){var sdp=description.sdp;return Object.keys(pc._reverseStreams||[]).forEach((function(internalId){var externalStream=pc._reverseStreams[internalId],internalStream=pc._streams[externalStream.id];sdp=sdp.replace(new RegExp(externalStream.id,"g"),internalStream.id)})),new RTCSessionDescription({type:description.type,sdp:sdp})}window.RTCPeerConnection.prototype.removeStream=function(stream){this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},origRemoveStream.apply(this,[this._streams[stream.id]||stream]),delete this._reverseStreams[this._streams[stream.id]?this._streams[stream.id].id:stream.id],delete this._streams[stream.id]},window.RTCPeerConnection.prototype.addTrack=function(track,stream){var _this13=this;if("closed"===this.signalingState)throw new DOMException("The RTCPeerConnection's signalingState is 'closed'.","InvalidStateError");var streams=[].slice.call(arguments,1);if(1!==streams.length||!streams[0].getTracks().find((function(t){return t===track})))throw new DOMException("The adapter.js addTrack polyfill only supports a single  stream which is associated with the specified track.","NotSupportedError");var alreadyExists=this.getSenders().find((function(s){return s.track===track}));if(alreadyExists)throw new DOMException("Track already exists.","InvalidAccessError");this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{};var oldStream=this._streams[stream.id];if(oldStream)oldStream.addTrack(track),Promise.resolve().then((function(){_this13.dispatchEvent(new Event("negotiationneeded"))}));else{var newStream=new window.MediaStream([track]);this._streams[stream.id]=newStream,this._reverseStreams[newStream.id]=stream,this.addStream(newStream)}return this.getSenders().find((function(s){return s.track===track}))},["createOffer","createAnswer"].forEach((function(method){var nativeMethod=window.RTCPeerConnection.prototype[method],methodObj=_defineProperty({},method,(function(){var _this14=this,args=arguments,isLegacyCall=arguments.length&amp;&amp;"function"==typeof arguments[0];return isLegacyCall?nativeMethod.apply(this,[function(description){var desc=replaceInternalStreamId(_this14,description);args[0].apply(null,[desc])},function(err){args[1]&amp;&amp;args[1].apply(null,err)},arguments[2]]):nativeMethod.apply(this,arguments).then((function(description){return replaceInternalStreamId(_this14,description)}))}));window.RTCPeerConnection.prototype[method]=methodObj[method]}));var origSetLocalDescription=window.RTCPeerConnection.prototype.setLocalDescription;window.RTCPeerConnection.prototype.setLocalDescription=function(){return arguments.length&amp;&amp;arguments[0].type?(arguments[0]=replaceExternalStreamId(this,arguments[0]),origSetLocalDescription.apply(this,arguments)):origSetLocalDescription.apply(this,arguments)};var origLocalDescription=Object.getOwnPropertyDescriptor(window.RTCPeerConnection.prototype,"localDescription");Object.defineProperty(window.RTCPeerConnection.prototype,"localDescription",{get:function(){var description=origLocalDescription.get.apply(this);return""===description.type?description:replaceInternalStreamId(this,description)}}),window.RTCPeerConnection.prototype.removeTrack=function(sender){var _this15=this;if("closed"===this.signalingState)throw new DOMException("The RTCPeerConnection's signalingState is 'closed'.","InvalidStateError");if(!sender._pc)throw new DOMException("Argument 1 of RTCPeerConnection.removeTrack does not implement interface RTCRtpSender.","TypeError");if(!(sender._pc===this))throw new DOMException("Sender was not created by this connection.","InvalidAccessError");this._streams=this._streams||{};var stream=void 0;Object.keys(this._streams).forEach((function(streamid){_this15._streams[streamid].getTracks().find((function(track){return sender.track===track}))&amp;&amp;(stream=_this15._streams[streamid])})),stream&amp;&amp;(1===stream.getTracks().length?this.removeStream(this._reverseStreams[stream.id]):stream.removeTrack(sender.track),this.dispatchEvent(new Event("negotiationneeded")))}},exports.shimPeerConnection=function(window,browserDetails){!window.RTCPeerConnection&amp;&amp;window.webkitRTCPeerConnection&amp;&amp;(window.RTCPeerConnection=window.webkitRTCPeerConnection);if(!window.RTCPeerConnection)return;browserDetails.version&lt;53&amp;&amp;["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach((function(method){var nativeMethod=window.RTCPeerConnection.prototype[method],methodObj=_defineProperty({},method,(function(){return arguments[0]=new("addIceCandidate"===method?window.RTCIceCandidate:window.RTCSessionDescription)(arguments[0]),nativeMethod.apply(this,arguments)}));window.RTCPeerConnection.prototype[method]=methodObj[method]}))},exports.fixNegotiationNeeded=function(window,browserDetails){utils.wrapPeerConnectionEvent(window,"negotiationneeded",(function(e){var pc=e.target;if(!(browserDetails.version&lt;72||pc.getConfiguration&amp;&amp;"plan-b"===pc.getConfiguration().sdpSemantics)||"stable"===pc.signalingState)return e}))};var utils=function(obj){if(obj&amp;&amp;obj.__esModule)return obj;var newObj={};if(null!=obj)for(var key in obj)Object.prototype.hasOwnProperty.call(obj,key)&amp;&amp;(newObj[key]=obj[key]);return newObj.default=obj,newObj}(require("../utils.js"));function _defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function shimAddTrackRemoveTrackWithNative(window){window.RTCPeerConnection.prototype.getLocalStreams=function(){var _this8=this;return this._shimmedLocalStreams=this._shimmedLocalStreams||{},Object.keys(this._shimmedLocalStreams).map((function(streamId){return _this8._shimmedLocalStreams[streamId][0]}))};var origAddTrack=window.RTCPeerConnection.prototype.addTrack;window.RTCPeerConnection.prototype.addTrack=function(track,stream){if(!stream)return origAddTrack.apply(this,arguments);this._shimmedLocalStreams=this._shimmedLocalStreams||{};var sender=origAddTrack.apply(this,arguments);return this._shimmedLocalStreams[stream.id]?-1===this._shimmedLocalStreams[stream.id].indexOf(sender)&amp;&amp;this._shimmedLocalStreams[stream.id].push(sender):this._shimmedLocalStreams[stream.id]=[stream,sender],sender};var origAddStream=window.RTCPeerConnection.prototype.addStream;window.RTCPeerConnection.prototype.addStream=function(stream){var _this9=this;this._shimmedLocalStreams=this._shimmedLocalStreams||{},stream.getTracks().forEach((function(track){if(_this9.getSenders().find((function(s){return s.track===track})))throw new DOMException("Track already exists.","InvalidAccessError")}));var existingSenders=this.getSenders();origAddStream.apply(this,arguments);var newSenders=this.getSenders().filter((function(newSender){return-1===existingSenders.indexOf(newSender)}));this._shimmedLocalStreams[stream.id]=[stream].concat(newSenders)};var origRemoveStream=window.RTCPeerConnection.prototype.removeStream;window.RTCPeerConnection.prototype.removeStream=function(stream){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},delete this._shimmedLocalStreams[stream.id],origRemoveStream.apply(this,arguments)};var origRemoveTrack=window.RTCPeerConnection.prototype.removeTrack;window.RTCPeerConnection.prototype.removeTrack=function(sender){var _this10=this;return this._shimmedLocalStreams=this._shimmedLocalStreams||{},sender&amp;&amp;Object.keys(this._shimmedLocalStreams).forEach((function(streamId){var idx=_this10._shimmedLocalStreams[streamId].indexOf(sender);-1!==idx&amp;&amp;_this10._shimmedLocalStreams[streamId].splice(idx,1),1===_this10._shimmedLocalStreams[streamId].length&amp;&amp;delete _this10._shimmedLocalStreams[streamId]})),origRemoveTrack.apply(this,arguments)}}},{"../utils.js":11,"./getdisplaymedia":4,"./getusermedia":5}],4:[function(require,module,exports){Object.defineProperty(exports,"__esModule",{value:!0}),exports.shimGetDisplayMedia=function(window,getSourceId){if(window.navigator.mediaDevices&amp;&amp;"getDisplayMedia"in window.navigator.mediaDevices)return;if(!window.navigator.mediaDevices)return;if("function"!=typeof getSourceId)return void console.error("shimGetDisplayMedia: getSourceId argument is not a function");window.navigator.mediaDevices.getDisplayMedia=function(constraints){return getSourceId(constraints).then((function(sourceId){var widthSpecified=constraints.video&amp;&amp;constraints.video.width,heightSpecified=constraints.video&amp;&amp;constraints.video.height,frameRateSpecified=constraints.video&amp;&amp;constraints.video.frameRate;return constraints.video={mandatory:{chromeMediaSource:"desktop",chromeMediaSourceId:sourceId,maxFrameRate:frameRateSpecified||3}},widthSpecified&amp;&amp;(constraints.video.mandatory.maxWidth=widthSpecified),heightSpecified&amp;&amp;(constraints.video.mandatory.maxHeight=heightSpecified),window.navigator.mediaDevices.getUserMedia(constraints)}))}}},{}],5:[function(require,module,exports){Object.defineProperty(exports,"__esModule",{value:!0});var _typeof="function"==typeof Symbol&amp;&amp;"symbol"==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&amp;&amp;"function"==typeof Symbol&amp;&amp;obj.constructor===Symbol&amp;&amp;obj!==Symbol.prototype?"symbol":typeof obj};exports.shimGetUserMedia=function(window,browserDetails){var navigator=window&amp;&amp;window.navigator;if(!navigator.mediaDevices)return;var constraintsToChrome_=function(c){if("object"!==(void 0===c?"undefined":_typeof(c))||c.mandatory||c.optional)return c;var cc={};return Object.keys(c).forEach((function(key){if("require"!==key&amp;&amp;"advanced"!==key&amp;&amp;"mediaSource"!==key){var r="object"===_typeof(c[key])?c[key]:{ideal:c[key]};void 0!==r.exact&amp;&amp;"number"==typeof r.exact&amp;&amp;(r.min=r.max=r.exact);var oldname_=function(prefix,name){return prefix?prefix+name.charAt(0).toUpperCase()+name.slice(1):"deviceId"===name?"sourceId":name};if(void 0!==r.ideal){cc.optional=cc.optional||[];var oc={};"number"==typeof r.ideal?(oc[oldname_("min",key)]=r.ideal,cc.optional.push(oc),(oc={})[oldname_("max",key)]=r.ideal,cc.optional.push(oc)):(oc[oldname_("",key)]=r.ideal,cc.optional.push(oc))}void 0!==r.exact&amp;&amp;"number"!=typeof r.exact?(cc.mandatory=cc.mandatory||{},cc.mandatory[oldname_("",key)]=r.exact):["min","max"].forEach((function(mix){void 0!==r[mix]&amp;&amp;(cc.mandatory=cc.mandatory||{},cc.mandatory[oldname_(mix,key)]=r[mix])}))}})),c.advanced&amp;&amp;(cc.optional=(cc.optional||[]).concat(c.advanced)),cc},shimConstraints_=function(constraints,func){if(browserDetails.version&gt;=61)return func(constraints);if((constraints=JSON.parse(JSON.stringify(constraints)))&amp;&amp;"object"===_typeof(constraints.audio)){var remap=function(obj,a,b){a in obj&amp;&amp;!(b in obj)&amp;&amp;(obj[b]=obj[a],delete obj[a])};remap((constraints=JSON.parse(JSON.stringify(constraints))).audio,"autoGainControl","googAutoGainControl"),remap(constraints.audio,"noiseSuppression","googNoiseSuppression"),constraints.audio=constraintsToChrome_(constraints.audio)}if(constraints&amp;&amp;"object"===_typeof(constraints.video)){var face=constraints.video.facingMode;face=face&amp;&amp;("object"===(void 0===face?"undefined":_typeof(face))?face:{ideal:face});var getSupportedFacingModeLies=browserDetails.version&lt;66;if(face&amp;&amp;("user"===face.exact||"environment"===face.exact||"user"===face.ideal||"environment"===face.ideal)&amp;&amp;(!navigator.mediaDevices.getSupportedConstraints||!navigator.mediaDevices.getSupportedConstraints().facingMode||getSupportedFacingModeLies)){delete constraints.video.facingMode;var matches=void 0;if("environment"===face.exact||"environment"===face.ideal?matches=["back","rear"]:"user"!==face.exact&amp;&amp;"user"!==face.ideal||(matches=["front"]),matches)return navigator.mediaDevices.enumerateDevices().then((function(devices){var dev=(devices=devices.filter((function(d){return"videoinput"===d.kind}))).find((function(d){return matches.some((function(match){return d.label.toLowerCase().includes(match)}))}));return!dev&amp;&amp;devices.length&amp;&amp;matches.includes("back")&amp;&amp;(dev=devices[devices.length-1]),dev&amp;&amp;(constraints.video.deviceId=face.exact?{exact:dev.deviceId}:{ideal:dev.deviceId}),constraints.video=constraintsToChrome_(constraints.video),logging("chrome: "+JSON.stringify(constraints)),func(constraints)}))}constraints.video=constraintsToChrome_(constraints.video)}return logging("chrome: "+JSON.stringify(constraints)),func(constraints)},shimError_=function(e){return browserDetails.version&gt;=64?e:{name:{PermissionDeniedError:"NotAllowedError",PermissionDismissedError:"NotAllowedError",InvalidStateError:"NotAllowedError",DevicesNotFoundError:"NotFoundError",ConstraintNotSatisfiedError:"OverconstrainedError",TrackStartError:"NotReadableError",MediaDeviceFailedDueToShutdown:"NotAllowedError",MediaDeviceKillSwitchOn:"NotAllowedError",TabCaptureError:"AbortError",ScreenCaptureError:"AbortError",DeviceCaptureError:"AbortError"}[e.name]||e.name,message:e.message,constraint:e.constraint||e.constraintName,toString:function(){return this.name+(this.message&amp;&amp;": ")+this.message}}};if(navigator.getUserMedia=function(constraints,onSuccess,onError){shimConstraints_(constraints,(function(c){navigator.webkitGetUserMedia(c,onSuccess,(function(e){onError&amp;&amp;onError(shimError_(e))}))}))}.bind(navigator),navigator.mediaDevices.getUserMedia){var origGetUserMedia=navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);navigator.mediaDevices.getUserMedia=function(cs){return shimConstraints_(cs,(function(c){return origGetUserMedia(c).then((function(stream){if(c.audio&amp;&amp;!stream.getAudioTracks().length||c.video&amp;&amp;!stream.getVideoTracks().length)throw stream.getTracks().forEach((function(track){track.stop()})),new DOMException("","NotFoundError");return stream}),(function(e){return Promise.reject(shimError_(e))}))}))}}};var logging=function(obj){if(obj&amp;&amp;obj.__esModule)return obj;var newObj={};if(null!=obj)for(var key in obj)Object.prototype.hasOwnProperty.call(obj,key)&amp;&amp;(newObj[key]=obj[key]);return newObj.default=obj,newObj}(require("../utils.js")).log},{"../utils.js":11}],6:[function(require,module,exports){Object.defineProperty(exports,"__esModule",{value:!0});var _typeof="function"==typeof Symbol&amp;&amp;"symbol"==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&amp;&amp;"function"==typeof Symbol&amp;&amp;obj.constructor===Symbol&amp;&amp;obj!==Symbol.prototype?"symbol":typeof obj};exports.shimRTCIceCandidate=function(window){if(!window.RTCIceCandidate||window.RTCIceCandidate&amp;&amp;"foundation"in window.RTCIceCandidate.prototype)return;var NativeRTCIceCandidate=window.RTCIceCandidate;window.RTCIceCandidate=function(args){if("object"===(void 0===args?"undefined":_typeof(args))&amp;&amp;args.candidate&amp;&amp;0===args.candidate.indexOf("a=")&amp;&amp;((args=JSON.parse(JSON.stringify(args))).candidate=args.candidate.substr(2)),args.candidate&amp;&amp;args.candidate.length){var nativeCandidate=new NativeRTCIceCandidate(args),parsedCandidate=_sdp2.default.parseCandidate(args.candidate),augmentedCandidate=Object.assign(nativeCandidate,parsedCandidate);return augmentedCandidate.toJSON=function(){return{candidate:augmentedCandidate.candidate,sdpMid:augmentedCandidate.sdpMid,sdpMLineIndex:augmentedCandidate.sdpMLineIndex,usernameFragment:augmentedCandidate.usernameFragment}},augmentedCandidate}return new NativeRTCIceCandidate(args)},window.RTCIceCandidate.prototype=NativeRTCIceCandidate.prototype,utils.wrapPeerConnectionEvent(window,"icecandidate",(function(e){return e.candidate&amp;&amp;Object.defineProperty(e,"candidate",{value:new window.RTCIceCandidate(e.candidate),writable:"false"}),e}))},exports.shimMaxMessageSize=function(window,browserDetails){if(!window.RTCPeerConnection)return;"sctp"in window.RTCPeerConnection.prototype||Object.defineProperty(window.RTCPeerConnection.prototype,"sctp",{get:function(){return void 0===this._sctp?null:this._sctp}});var sctpInDescription=function(description){if(!description||!description.sdp)return!1;var sections=_sdp2.default.splitSections(description.sdp);return sections.shift(),sections.some((function(mediaSection){var mLine=_sdp2.default.parseMLine(mediaSection);return mLine&amp;&amp;"application"===mLine.kind&amp;&amp;-1!==mLine.protocol.indexOf("SCTP")}))},getRemoteFirefoxVersion=function(description){var match=description.sdp.match(/mozilla...THIS_IS_SDPARTA-(\d+)/);if(null===match||match.length&lt;2)return-1;var version=parseInt(match[1],10);return version!=version?-1:version},getCanSendMaxMessageSize=function(remoteIsFirefox){var canSendMaxMessageSize=65536;return"firefox"===browserDetails.browser&amp;&amp;(canSendMaxMessageSize=browserDetails.version&lt;57?-1===remoteIsFirefox?16384:2147483637:browserDetails.version&lt;60?57===browserDetails.version?65535:65536:2147483637),canSendMaxMessageSize},getMaxMessageSize=function(description,remoteIsFirefox){var maxMessageSize=65536;"firefox"===browserDetails.browser&amp;&amp;57===browserDetails.version&amp;&amp;(maxMessageSize=65535);var match=_sdp2.default.matchPrefix(description.sdp,"a=max-message-size:");return match.length&gt;0?maxMessageSize=parseInt(match[0].substr(19),10):"firefox"===browserDetails.browser&amp;&amp;-1!==remoteIsFirefox&amp;&amp;(maxMessageSize=2147483637),maxMessageSize},origSetRemoteDescription=window.RTCPeerConnection.prototype.setRemoteDescription;window.RTCPeerConnection.prototype.setRemoteDescription=function(){if(this._sctp=null,"chrome"===browserDetails.browser&amp;&amp;browserDetails.version&gt;=76){var _getConfiguration=this.getConfiguration(),sdpSemantics=_getConfiguration.sdpSemantics;"plan-b"===sdpSemantics&amp;&amp;Object.defineProperty(this,"sctp",{get:function(){return void 0===this._sctp?null:this._sctp},enumerable:!0,configurable:!0})}if(sctpInDescription(arguments[0])){var isFirefox=getRemoteFirefoxVersion(arguments[0]),canSendMMS=getCanSendMaxMessageSize(isFirefox),remoteMMS=getMaxMessageSize(arguments[0],isFirefox),maxMessageSize=void 0;maxMessageSize=0===canSendMMS&amp;&amp;0===remoteMMS?Number.POSITIVE_INFINITY:0===canSendMMS||0===remoteMMS?Math.max(canSendMMS,remoteMMS):Math.min(canSendMMS,remoteMMS);var sctp={};Object.defineProperty(sctp,"maxMessageSize",{get:function(){return maxMessageSize}}),this._sctp=sctp}return origSetRemoteDescription.apply(this,arguments)}},exports.shimSendThrowTypeError=function(window){if(!window.RTCPeerConnection||!("createDataChannel"in window.RTCPeerConnection.prototype))return;function wrapDcSend(dc,pc){var origDataChannelSend=dc.send;dc.send=function(){var data=arguments[0],length=data.length||data.size||data.byteLength;if("open"===dc.readyState&amp;&amp;pc.sctp&amp;&amp;length&gt;pc.sctp.maxMessageSize)throw new TypeError("Message too large (can send a maximum of "+pc.sctp.maxMessageSize+" bytes)");return origDataChannelSend.apply(dc,arguments)}}var origCreateDataChannel=window.RTCPeerConnection.prototype.createDataChannel;window.RTCPeerConnection.prototype.createDataChannel=function(){var dataChannel=origCreateDataChannel.apply(this,arguments);return wrapDcSend(dataChannel,this),dataChannel},utils.wrapPeerConnectionEvent(window,"datachannel",(function(e){return wrapDcSend(e.channel,e.target),e}))},exports.shimConnectionState=function(window){if(!window.RTCPeerConnection||"connectionState"in window.RTCPeerConnection.prototype)return;var proto=window.RTCPeerConnection.prototype;Object.defineProperty(proto,"connectionState",{get:function(){return{completed:"connected",checking:"connecting"}[this.iceConnectionState]||this.iceConnectionState},enumerable:!0,configurable:!0}),Object.defineProperty(proto,"onconnectionstatechange",{get:function(){return this._onconnectionstatechange||null},set:function(cb){this._onconnectionstatechange&amp;&amp;(this.removeEventListener("connectionstatechange",this._onconnectionstatechange),delete this._onconnectionstatechange),cb&amp;&amp;this.addEventListener("connectionstatechange",this._onconnectionstatechange=cb)},enumerable:!0,configurable:!0}),["setLocalDescription","setRemoteDescription"].forEach((function(method){var origMethod=proto[method];proto[method]=function(){return this._connectionstatechangepoly||(this._connectionstatechangepoly=function(e){var pc=e.target;if(pc._lastConnectionState!==pc.connectionState){pc._lastConnectionState=pc.connectionState;var newEvent=new Event("connectionstatechange",e);pc.dispatchEvent(newEvent)}return e},this.addEventListener("iceconnectionstatechange",this._connectionstatechangepoly)),origMethod.apply(this,arguments)}}))},exports.removeExtmapAllowMixed=function(window,browserDetails){if(!window.RTCPeerConnection)return;if("chrome"===browserDetails.browser&amp;&amp;browserDetails.version&gt;=71)return;if("safari"===browserDetails.browser&amp;&amp;browserDetails.version&gt;=605)return;var nativeSRD=window.RTCPeerConnection.prototype.setRemoteDescription;window.RTCPeerConnection.prototype.setRemoteDescription=function(desc){if(desc&amp;&amp;desc.sdp&amp;&amp;-1!==desc.sdp.indexOf("\na=extmap-allow-mixed")){var sdp=desc.sdp.split("\n").filter((function(line){return"a=extmap-allow-mixed"!==line.trim()})).join("\n");window.RTCSessionDescription&amp;&amp;desc instanceof window.RTCSessionDescription?arguments[0]=new window.RTCSessionDescription({type:desc.type,sdp:sdp}):desc.sdp=sdp}return nativeSRD.apply(this,arguments)}},exports.shimAddIceCandidateNullOrEmpty=function(window,browserDetails){if(!window.RTCPeerConnection||!window.RTCPeerConnection.prototype)return;var nativeAddIceCandidate=window.RTCPeerConnection.prototype.addIceCandidate;if(!nativeAddIceCandidate||0===nativeAddIceCandidate.length)return;window.RTCPeerConnection.prototype.addIceCandidate=function(){return arguments[0]?("chrome"===browserDetails.browser&amp;&amp;browserDetails.version&lt;78||"firefox"===browserDetails.browser&amp;&amp;browserDetails.version&lt;68||"safari"===browserDetails.browser)&amp;&amp;arguments[0]&amp;&amp;""===arguments[0].candidate?Promise.resolve():nativeAddIceCandidate.apply(this,arguments):(arguments[1]&amp;&amp;arguments[1].apply(null),Promise.resolve())}};var obj,_sdp=require("sdp"),_sdp2=(obj=_sdp)&amp;&amp;obj.__esModule?obj:{default:obj},utils=function(obj){if(obj&amp;&amp;obj.__esModule)return obj;var newObj={};if(null!=obj)for(var key in obj)Object.prototype.hasOwnProperty.call(obj,key)&amp;&amp;(newObj[key]=obj[key]);return newObj.default=obj,newObj}(require("./utils"))},{"./utils":11,sdp:12}],7:[function(require,module,exports){Object.defineProperty(exports,"__esModule",{value:!0}),exports.shimGetDisplayMedia=exports.shimGetUserMedia=void 0;var _typeof="function"==typeof Symbol&amp;&amp;"symbol"==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&amp;&amp;"function"==typeof Symbol&amp;&amp;obj.constructor===Symbol&amp;&amp;obj!==Symbol.prototype?"symbol":typeof obj},_getusermedia=require("./getusermedia");Object.defineProperty(exports,"shimGetUserMedia",{enumerable:!0,get:function(){return _getusermedia.shimGetUserMedia}});var _getdisplaymedia=require("./getdisplaymedia");Object.defineProperty(exports,"shimGetDisplayMedia",{enumerable:!0,get:function(){return _getdisplaymedia.shimGetDisplayMedia}}),exports.shimOnTrack=function(window){"object"===(void 0===window?"undefined":_typeof(window))&amp;&amp;window.RTCTrackEvent&amp;&amp;"receiver"in window.RTCTrackEvent.prototype&amp;&amp;!("transceiver"in window.RTCTrackEvent.prototype)&amp;&amp;Object.defineProperty(window.RTCTrackEvent.prototype,"transceiver",{get:function(){return{receiver:this.receiver}}})},exports.shimPeerConnection=function(window,browserDetails){if("object"!==(void 0===window?"undefined":_typeof(window))||!window.RTCPeerConnection&amp;&amp;!window.mozRTCPeerConnection)return;!window.RTCPeerConnection&amp;&amp;window.mozRTCPeerConnection&amp;&amp;(window.RTCPeerConnection=window.mozRTCPeerConnection);browserDetails.version&lt;53&amp;&amp;["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach((function(method){var nativeMethod=window.RTCPeerConnection.prototype[method],methodObj=function(obj,key,value){key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value;return obj}({},method,(function(){return arguments[0]=new("addIceCandidate"===method?window.RTCIceCandidate:window.RTCSessionDescription)(arguments[0]),nativeMethod.apply(this,arguments)}));window.RTCPeerConnection.prototype[method]=methodObj[method]}));var modernStatsTypes={inboundrtp:"inbound-rtp",outboundrtp:"outbound-rtp",candidatepair:"candidate-pair",localcandidate:"local-candidate",remotecandidate:"remote-candidate"},nativeGetStats=window.RTCPeerConnection.prototype.getStats;window.RTCPeerConnection.prototype.getStats=function(){var _arguments=Array.prototype.slice.call(arguments),selector=_arguments[0],onSucc=_arguments[1],onErr=_arguments[2];return nativeGetStats.apply(this,[selector||null]).then((function(stats){if(browserDetails.version&lt;53&amp;&amp;!onSucc)try{stats.forEach((function(stat){stat.type=modernStatsTypes[stat.type]||stat.type}))}catch(e){if("TypeError"!==e.name)throw e;stats.forEach((function(stat,i){stats.set(i,Object.assign({},stat,{type:modernStatsTypes[stat.type]||stat.type}))}))}return stats})).then(onSucc,onErr)}},exports.shimSenderGetStats=function(window){if("object"!==(void 0===window?"undefined":_typeof(window))||!window.RTCPeerConnection||!window.RTCRtpSender)return;if(window.RTCRtpSender&amp;&amp;"getStats"in window.RTCRtpSender.prototype)return;var origGetSenders=window.RTCPeerConnection.prototype.getSenders;origGetSenders&amp;&amp;(window.RTCPeerConnection.prototype.getSenders=function(){var _this=this,senders=origGetSenders.apply(this,[]);return senders.forEach((function(sender){return sender._pc=_this})),senders});var origAddTrack=window.RTCPeerConnection.prototype.addTrack;origAddTrack&amp;&amp;(window.RTCPeerConnection.prototype.addTrack=function(){var sender=origAddTrack.apply(this,arguments);return sender._pc=this,sender});window.RTCRtpSender.prototype.getStats=function(){return this.track?this._pc.getStats(this.track):Promise.resolve(new Map)}},exports.shimReceiverGetStats=function(window){if("object"!==(void 0===window?"undefined":_typeof(window))||!window.RTCPeerConnection||!window.RTCRtpSender)return;if(window.RTCRtpSender&amp;&amp;"getStats"in window.RTCRtpReceiver.prototype)return;var origGetReceivers=window.RTCPeerConnection.prototype.getReceivers;origGetReceivers&amp;&amp;(window.RTCPeerConnection.prototype.getReceivers=function(){var _this2=this,receivers=origGetReceivers.apply(this,[]);return receivers.forEach((function(receiver){return receiver._pc=_this2})),receivers});utils.wrapPeerConnectionEvent(window,"track",(function(e){return e.receiver._pc=e.srcElement,e})),window.RTCRtpReceiver.prototype.getStats=function(){return this._pc.getStats(this.track)}},exports.shimRemoveStream=function(window){if(!window.RTCPeerConnection||"removeStream"in window.RTCPeerConnection.prototype)return;window.RTCPeerConnection.prototype.removeStream=function(stream){var _this3=this;utils.deprecated("removeStream","removeTrack"),this.getSenders().forEach((function(sender){sender.track&amp;&amp;stream.getTracks().includes(sender.track)&amp;&amp;_this3.removeTrack(sender)}))}},exports.shimRTCDataChannel=function(window){window.DataChannel&amp;&amp;!window.RTCDataChannel&amp;&amp;(window.RTCDataChannel=window.DataChannel)},exports.shimAddTransceiver=function(window){if("object"!==(void 0===window?"undefined":_typeof(window))||!window.RTCPeerConnection)return;var origAddTransceiver=window.RTCPeerConnection.prototype.addTransceiver;origAddTransceiver&amp;&amp;(window.RTCPeerConnection.prototype.addTransceiver=function(){this.setParametersPromises=[];var initParameters=arguments[1],shouldPerformCheck=initParameters&amp;&amp;"sendEncodings"in initParameters;shouldPerformCheck&amp;&amp;initParameters.sendEncodings.forEach((function(encodingParam){if("rid"in encodingParam){if(!/^[a-z0-9]{0,16}$/i.test(encodingParam.rid))throw new TypeError("Invalid RID value provided.")}if("scaleResolutionDownBy"in encodingParam&amp;&amp;!(parseFloat(encodingParam.scaleResolutionDownBy)&gt;=1))throw new RangeError("scale_resolution_down_by must be &gt;= 1.0");if("maxFramerate"in encodingParam&amp;&amp;!(parseFloat(encodingParam.maxFramerate)&gt;=0))throw new RangeError("max_framerate must be &gt;= 0.0")}));var transceiver=origAddTransceiver.apply(this,arguments);if(shouldPerformCheck){var sender=transceiver.sender,params=sender.getParameters();(!("encodings"in params)||1===params.encodings.length&amp;&amp;0===Object.keys(params.encodings[0]).length)&amp;&amp;(params.encodings=initParameters.sendEncodings,sender.sendEncodings=initParameters.sendEncodings,this.setParametersPromises.push(sender.setParameters(params).then((function(){delete sender.sendEncodings})).catch((function(){delete sender.sendEncodings}))))}return transceiver})},exports.shimGetParameters=function(window){if("object"!==(void 0===window?"undefined":_typeof(window))||!window.RTCRtpSender)return;var origGetParameters=window.RTCRtpSender.prototype.getParameters;origGetParameters&amp;&amp;(window.RTCRtpSender.prototype.getParameters=function(){var params=origGetParameters.apply(this,arguments);return"encodings"in params||(params.encodings=[].concat(this.sendEncodings||[{}])),params})},exports.shimCreateOffer=function(window){if("object"!==(void 0===window?"undefined":_typeof(window))||!window.RTCPeerConnection)return;var origCreateOffer=window.RTCPeerConnection.prototype.createOffer;window.RTCPeerConnection.prototype.createOffer=function(){var _this4=this,_arguments2=arguments;return this.setParametersPromises&amp;&amp;this.setParametersPromises.length?Promise.all(this.setParametersPromises).then((function(){return origCreateOffer.apply(_this4,_arguments2)})).finally((function(){_this4.setParametersPromises=[]})):origCreateOffer.apply(this,arguments)}},exports.shimCreateAnswer=function(window){if("object"!==(void 0===window?"undefined":_typeof(window))||!window.RTCPeerConnection)return;var origCreateAnswer=window.RTCPeerConnection.prototype.createAnswer;window.RTCPeerConnection.prototype.createAnswer=function(){var _this5=this,_arguments3=arguments;return this.setParametersPromises&amp;&amp;this.setParametersPromises.length?Promise.all(this.setParametersPromises).then((function(){return origCreateAnswer.apply(_this5,_arguments3)})).finally((function(){_this5.setParametersPromises=[]})):origCreateAnswer.apply(this,arguments)}};var utils=function(obj){if(obj&amp;&amp;obj.__esModule)return obj;var newObj={};if(null!=obj)for(var key in obj)Object.prototype.hasOwnProperty.call(obj,key)&amp;&amp;(newObj[key]=obj[key]);return newObj.default=obj,newObj}(require("../utils"))},{"../utils":11,"./getdisplaymedia":8,"./getusermedia":9}],8:[function(require,module,exports){Object.defineProperty(exports,"__esModule",{value:!0}),exports.shimGetDisplayMedia=function(window,preferredMediaSource){if(window.navigator.mediaDevices&amp;&amp;"getDisplayMedia"in window.navigator.mediaDevices)return;if(!window.navigator.mediaDevices)return;window.navigator.mediaDevices.getDisplayMedia=function(constraints){if(!constraints||!constraints.video){var err=new DOMException("getDisplayMedia without video constraints is undefined");return err.name="NotFoundError",err.code=8,Promise.reject(err)}return!0===constraints.video?constraints.video={mediaSource:preferredMediaSource}:constraints.video.mediaSource=preferredMediaSource,window.navigator.mediaDevices.getUserMedia(constraints)}}},{}],9:[function(require,module,exports){Object.defineProperty(exports,"__esModule",{value:!0});var _typeof="function"==typeof Symbol&amp;&amp;"symbol"==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&amp;&amp;"function"==typeof Symbol&amp;&amp;obj.constructor===Symbol&amp;&amp;obj!==Symbol.prototype?"symbol":typeof obj};exports.shimGetUserMedia=function(window,browserDetails){var navigator=window&amp;&amp;window.navigator,MediaStreamTrack=window&amp;&amp;window.MediaStreamTrack;if(navigator.getUserMedia=function(constraints,onSuccess,onError){utils.deprecated("navigator.getUserMedia","navigator.mediaDevices.getUserMedia"),navigator.mediaDevices.getUserMedia(constraints).then(onSuccess,onError)},!(browserDetails.version&gt;55&amp;&amp;"autoGainControl"in navigator.mediaDevices.getSupportedConstraints())){var remap=function(obj,a,b){a in obj&amp;&amp;!(b in obj)&amp;&amp;(obj[b]=obj[a],delete obj[a])},nativeGetUserMedia=navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);if(navigator.mediaDevices.getUserMedia=function(c){return"object"===(void 0===c?"undefined":_typeof(c))&amp;&amp;"object"===_typeof(c.audio)&amp;&amp;(c=JSON.parse(JSON.stringify(c)),remap(c.audio,"autoGainControl","mozAutoGainControl"),remap(c.audio,"noiseSuppression","mozNoiseSuppression")),nativeGetUserMedia(c)},MediaStreamTrack&amp;&amp;MediaStreamTrack.prototype.getSettings){var nativeGetSettings=MediaStreamTrack.prototype.getSettings;MediaStreamTrack.prototype.getSettings=function(){var obj=nativeGetSettings.apply(this,arguments);return remap(obj,"mozAutoGainControl","autoGainControl"),remap(obj,"mozNoiseSuppression","noiseSuppression"),obj}}if(MediaStreamTrack&amp;&amp;MediaStreamTrack.prototype.applyConstraints){var nativeApplyConstraints=MediaStreamTrack.prototype.applyConstraints;MediaStreamTrack.prototype.applyConstraints=function(c){return"audio"===this.kind&amp;&amp;"object"===(void 0===c?"undefined":_typeof(c))&amp;&amp;(c=JSON.parse(JSON.stringify(c)),remap(c,"autoGainControl","mozAutoGainControl"),remap(c,"noiseSuppression","mozNoiseSuppression")),nativeApplyConstraints.apply(this,[c])}}}};var utils=function(obj){if(obj&amp;&amp;obj.__esModule)return obj;var newObj={};if(null!=obj)for(var key in obj)Object.prototype.hasOwnProperty.call(obj,key)&amp;&amp;(newObj[key]=obj[key]);return newObj.default=obj,newObj}(require("../utils"))},{"../utils":11}],10:[function(require,module,exports){Object.defineProperty(exports,"__esModule",{value:!0});var _typeof="function"==typeof Symbol&amp;&amp;"symbol"==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&amp;&amp;"function"==typeof Symbol&amp;&amp;obj.constructor===Symbol&amp;&amp;obj!==Symbol.prototype?"symbol":typeof obj};exports.shimLocalStreamsAPI=function(window){if("object"!==(void 0===window?"undefined":_typeof(window))||!window.RTCPeerConnection)return;"getLocalStreams"in window.RTCPeerConnection.prototype||(window.RTCPeerConnection.prototype.getLocalStreams=function(){return this._localStreams||(this._localStreams=[]),this._localStreams});if(!("addStream"in window.RTCPeerConnection.prototype)){var _addTrack=window.RTCPeerConnection.prototype.addTrack;window.RTCPeerConnection.prototype.addStream=function(stream){var _this=this;this._localStreams||(this._localStreams=[]),this._localStreams.includes(stream)||this._localStreams.push(stream),stream.getAudioTracks().forEach((function(track){return _addTrack.call(_this,track,stream)})),stream.getVideoTracks().forEach((function(track){return _addTrack.call(_this,track,stream)}))},window.RTCPeerConnection.prototype.addTrack=function(track){for(var _this2=this,_len=arguments.length,streams=Array(_len&gt;1?_len-1:0),_key=1;_key&lt;_len;_key++)streams[_key-1]=arguments[_key];return streams&amp;&amp;streams.forEach((function(stream){_this2._localStreams?_this2._localStreams.includes(stream)||_this2._localStreams.push(stream):_this2._localStreams=[stream]})),_addTrack.apply(this,arguments)}}"removeStream"in window.RTCPeerConnection.prototype||(window.RTCPeerConnection.prototype.removeStream=function(stream){var _this3=this;this._localStreams||(this._localStreams=[]);var index=this._localStreams.indexOf(stream);if(-1!==index){this._localStreams.splice(index,1);var tracks=stream.getTracks();this.getSenders().forEach((function(sender){tracks.includes(sender.track)&amp;&amp;_this3.removeTrack(sender)}))}})},exports.shimRemoteStreamsAPI=function(window){if("object"!==(void 0===window?"undefined":_typeof(window))||!window.RTCPeerConnection)return;"getRemoteStreams"in window.RTCPeerConnection.prototype||(window.RTCPeerConnection.prototype.getRemoteStreams=function(){return this._remoteStreams?this._remoteStreams:[]});if(!("onaddstream"in window.RTCPeerConnection.prototype)){Object.defineProperty(window.RTCPeerConnection.prototype,"onaddstream",{get:function(){return this._onaddstream},set:function(f){var _this4=this;this._onaddstream&amp;&amp;(this.removeEventListener("addstream",this._onaddstream),this.removeEventListener("track",this._onaddstreampoly)),this.addEventListener("addstream",this._onaddstream=f),this.addEventListener("track",this._onaddstreampoly=function(e){e.streams.forEach((function(stream){if(_this4._remoteStreams||(_this4._remoteStreams=[]),!_this4._remoteStreams.includes(stream)){_this4._remoteStreams.push(stream);var event=new Event("addstream");event.stream=stream,_this4.dispatchEvent(event)}}))})}});var origSetRemoteDescription=window.RTCPeerConnection.prototype.setRemoteDescription;window.RTCPeerConnection.prototype.setRemoteDescription=function(){var pc=this;return this._onaddstreampoly||this.addEventListener("track",this._onaddstreampoly=function(e){e.streams.forEach((function(stream){if(pc._remoteStreams||(pc._remoteStreams=[]),!(pc._remoteStreams.indexOf(stream)&gt;=0)){pc._remoteStreams.push(stream);var event=new Event("addstream");event.stream=stream,pc.dispatchEvent(event)}}))}),origSetRemoteDescription.apply(pc,arguments)}}},exports.shimCallbacksAPI=function(window){if("object"!==(void 0===window?"undefined":_typeof(window))||!window.RTCPeerConnection)return;var prototype=window.RTCPeerConnection.prototype,origCreateOffer=prototype.createOffer,origCreateAnswer=prototype.createAnswer,setLocalDescription=prototype.setLocalDescription,setRemoteDescription=prototype.setRemoteDescription,addIceCandidate=prototype.addIceCandidate;prototype.createOffer=function(successCallback,failureCallback){var options=arguments.length&gt;=2?arguments[2]:arguments[0],promise=origCreateOffer.apply(this,[options]);return failureCallback?(promise.then(successCallback,failureCallback),Promise.resolve()):promise},prototype.createAnswer=function(successCallback,failureCallback){var options=arguments.length&gt;=2?arguments[2]:arguments[0],promise=origCreateAnswer.apply(this,[options]);return failureCallback?(promise.then(successCallback,failureCallback),Promise.resolve()):promise};var withCallback=function(description,successCallback,failureCallback){var promise=setLocalDescription.apply(this,[description]);return failureCallback?(promise.then(successCallback,failureCallback),Promise.resolve()):promise};prototype.setLocalDescription=withCallback,withCallback=function(description,successCallback,failureCallback){var promise=setRemoteDescription.apply(this,[description]);return failureCallback?(promise.then(successCallback,failureCallback),Promise.resolve()):promise},prototype.setRemoteDescription=withCallback,withCallback=function(candidate,successCallback,failureCallback){var promise=addIceCandidate.apply(this,[candidate]);return failureCallback?(promise.then(successCallback,failureCallback),Promise.resolve()):promise},prototype.addIceCandidate=withCallback},exports.shimGetUserMedia=function(window){var navigator=window&amp;&amp;window.navigator;if(navigator.mediaDevices&amp;&amp;navigator.mediaDevices.getUserMedia){var mediaDevices=navigator.mediaDevices,_getUserMedia=mediaDevices.getUserMedia.bind(mediaDevices);navigator.mediaDevices.getUserMedia=function(constraints){return _getUserMedia(shimConstraints(constraints))}}!navigator.getUserMedia&amp;&amp;navigator.mediaDevices&amp;&amp;navigator.mediaDevices.getUserMedia&amp;&amp;(navigator.getUserMedia=function(constraints,cb,errcb){navigator.mediaDevices.getUserMedia(constraints).then(cb,errcb)}.bind(navigator))},exports.shimConstraints=shimConstraints,exports.shimRTCIceServerUrls=function(window){if(!window.RTCPeerConnection)return;var OrigPeerConnection=window.RTCPeerConnection;window.RTCPeerConnection=function(pcConfig,pcConstraints){if(pcConfig&amp;&amp;pcConfig.iceServers){for(var newIceServers=[],i=0;i&lt;pcConfig.iceServers.length;i++){var server=pcConfig.iceServers[i];!server.hasOwnProperty("urls")&amp;&amp;server.hasOwnProperty("url")?(utils.deprecated("RTCIceServer.url","RTCIceServer.urls"),(server=JSON.parse(JSON.stringify(server))).urls=server.url,delete server.url,newIceServers.push(server)):newIceServers.push(pcConfig.iceServers[i])}pcConfig.iceServers=newIceServers}return new OrigPeerConnection(pcConfig,pcConstraints)},window.RTCPeerConnection.prototype=OrigPeerConnection.prototype,"generateCertificate"in OrigPeerConnection&amp;&amp;Object.defineProperty(window.RTCPeerConnection,"generateCertificate",{get:function(){return OrigPeerConnection.generateCertificate}})},exports.shimTrackEventTransceiver=function(window){"object"===(void 0===window?"undefined":_typeof(window))&amp;&amp;window.RTCTrackEvent&amp;&amp;"receiver"in window.RTCTrackEvent.prototype&amp;&amp;!("transceiver"in window.RTCTrackEvent.prototype)&amp;&amp;Object.defineProperty(window.RTCTrackEvent.prototype,"transceiver",{get:function(){return{receiver:this.receiver}}})},exports.shimCreateOfferLegacy=function(window){var origCreateOffer=window.RTCPeerConnection.prototype.createOffer;window.RTCPeerConnection.prototype.createOffer=function(offerOptions){if(offerOptions){void 0!==offerOptions.offerToReceiveAudio&amp;&amp;(offerOptions.offerToReceiveAudio=!!offerOptions.offerToReceiveAudio);var audioTransceiver=this.getTransceivers().find((function(transceiver){return"audio"===transceiver.receiver.track.kind}));!1===offerOptions.offerToReceiveAudio&amp;&amp;audioTransceiver?"sendrecv"===audioTransceiver.direction?audioTransceiver.setDirection?audioTransceiver.setDirection("sendonly"):audioTransceiver.direction="sendonly":"recvonly"===audioTransceiver.direction&amp;&amp;(audioTransceiver.setDirection?audioTransceiver.setDirection("inactive"):audioTransceiver.direction="inactive"):!0!==offerOptions.offerToReceiveAudio||audioTransceiver||this.addTransceiver("audio"),void 0!==offerOptions.offerToReceiveVideo&amp;&amp;(offerOptions.offerToReceiveVideo=!!offerOptions.offerToReceiveVideo);var videoTransceiver=this.getTransceivers().find((function(transceiver){return"video"===transceiver.receiver.track.kind}));!1===offerOptions.offerToReceiveVideo&amp;&amp;videoTransceiver?"sendrecv"===videoTransceiver.direction?videoTransceiver.setDirection?videoTransceiver.setDirection("sendonly"):videoTransceiver.direction="sendonly":"recvonly"===videoTransceiver.direction&amp;&amp;(videoTransceiver.setDirection?videoTransceiver.setDirection("inactive"):videoTransceiver.direction="inactive"):!0!==offerOptions.offerToReceiveVideo||videoTransceiver||this.addTransceiver("video")}return origCreateOffer.apply(this,arguments)}},exports.shimAudioContext=function(window){if("object"!==(void 0===window?"undefined":_typeof(window))||window.AudioContext)return;window.AudioContext=window.webkitAudioContext};var utils=function(obj){if(obj&amp;&amp;obj.__esModule)return obj;var newObj={};if(null!=obj)for(var key in obj)Object.prototype.hasOwnProperty.call(obj,key)&amp;&amp;(newObj[key]=obj[key]);return newObj.default=obj,newObj}(require("../utils"));function shimConstraints(constraints){return constraints&amp;&amp;void 0!==constraints.video?Object.assign({},constraints,{video:utils.compactObject(constraints.video)}):constraints}},{"../utils":11}],11:[function(require,module,exports){Object.defineProperty(exports,"__esModule",{value:!0});var _typeof="function"==typeof Symbol&amp;&amp;"symbol"==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&amp;&amp;"function"==typeof Symbol&amp;&amp;obj.constructor===Symbol&amp;&amp;obj!==Symbol.prototype?"symbol":typeof obj};exports.extractVersion=extractVersion,exports.wrapPeerConnectionEvent=function(window,eventNameToWrap,wrapper){if(!window.RTCPeerConnection)return;var proto=window.RTCPeerConnection.prototype,nativeAddEventListener=proto.addEventListener;proto.addEventListener=function(nativeEventName,cb){if(nativeEventName!==eventNameToWrap)return nativeAddEventListener.apply(this,arguments);var wrappedCallback=function(e){var modifiedEvent=wrapper(e);modifiedEvent&amp;&amp;(cb.handleEvent?cb.handleEvent(modifiedEvent):cb(modifiedEvent))};return this._eventMap=this._eventMap||{},this._eventMap[eventNameToWrap]||(this._eventMap[eventNameToWrap]=new Map),this._eventMap[eventNameToWrap].set(cb,wrappedCallback),nativeAddEventListener.apply(this,[nativeEventName,wrappedCallback])};var nativeRemoveEventListener=proto.removeEventListener;proto.removeEventListener=function(nativeEventName,cb){if(nativeEventName!==eventNameToWrap||!this._eventMap||!this._eventMap[eventNameToWrap])return nativeRemoveEventListener.apply(this,arguments);if(!this._eventMap[eventNameToWrap].has(cb))return nativeRemoveEventListener.apply(this,arguments);var unwrappedCb=this._eventMap[eventNameToWrap].get(cb);return this._eventMap[eventNameToWrap].delete(cb),0===this._eventMap[eventNameToWrap].size&amp;&amp;delete this._eventMap[eventNameToWrap],0===Object.keys(this._eventMap).length&amp;&amp;delete this._eventMap,nativeRemoveEventListener.apply(this,[nativeEventName,unwrappedCb])},Object.defineProperty(proto,"on"+eventNameToWrap,{get:function(){return this["_on"+eventNameToWrap]},set:function(cb){this["_on"+eventNameToWrap]&amp;&amp;(this.removeEventListener(eventNameToWrap,this["_on"+eventNameToWrap]),delete this["_on"+eventNameToWrap]),cb&amp;&amp;this.addEventListener(eventNameToWrap,this["_on"+eventNameToWrap]=cb)},enumerable:!0,configurable:!0})},exports.disableLog=function(bool){if("boolean"!=typeof bool)return new Error("Argument type: "+(void 0===bool?"undefined":_typeof(bool))+". Please use a boolean.");return logDisabled_=bool,bool?"adapter.js logging disabled":"adapter.js logging enabled"},exports.disableWarnings=function(bool){if("boolean"!=typeof bool)return new Error("Argument type: "+(void 0===bool?"undefined":_typeof(bool))+". Please use a boolean.");return deprecationWarnings_=!bool,"adapter.js deprecation warnings "+(bool?"disabled":"enabled")},exports.log=function(){if("object"===("undefined"==typeof window?"undefined":_typeof(window))){if(logDisabled_)return;"undefined"!=typeof console&amp;&amp;"function"==typeof console.log&amp;&amp;console.log.apply(console,arguments)}},exports.deprecated=function(oldMethod,newMethod){if(!deprecationWarnings_)return;console.warn(oldMethod+" is deprecated, please use "+newMethod+" instead.")},exports.detectBrowser=function(window){var result={browser:null,version:null};if(void 0===window||!window.navigator)return result.browser="Not a browser.",result;var navigator=window.navigator;if(navigator.mozGetUserMedia)result.browser="firefox",result.version=extractVersion(navigator.userAgent,/Firefox\/(\d+)\./,1);else if(navigator.webkitGetUserMedia||!1===window.isSecureContext&amp;&amp;window.webkitRTCPeerConnection&amp;&amp;!window.RTCIceGatherer)result.browser="chrome",result.version=extractVersion(navigator.userAgent,/Chrom(e|ium)\/(\d+)\./,2);else{if(!window.RTCPeerConnection||!navigator.userAgent.match(/AppleWebKit\/(\d+)\./))return result.browser="Not a supported browser.",result;result.browser="safari",result.version=extractVersion(navigator.userAgent,/AppleWebKit\/(\d+)\./,1),result.supportsUnifiedPlan=window.RTCRtpTransceiver&amp;&amp;"currentDirection"in window.RTCRtpTransceiver.prototype}return result},exports.compactObject=function compactObject(data){if(!isObject(data))return data;return Object.keys(data).reduce((function(accumulator,key){var isObj=isObject(data[key]),value=isObj?compactObject(data[key]):data[key],isEmptyObject=isObj&amp;&amp;!Object.keys(value).length;return void 0===value||isEmptyObject?accumulator:Object.assign(accumulator,function(obj,key,value){key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value;return obj}({},key,value))}),{})},exports.walkStats=walkStats,exports.filterStats=function(result,track,outbound){var streamStatsType=outbound?"outbound-rtp":"inbound-rtp",filteredResult=new Map;if(null===track)return filteredResult;var trackStats=[];return result.forEach((function(value){"track"===value.type&amp;&amp;value.trackIdentifier===track.id&amp;&amp;trackStats.push(value)})),trackStats.forEach((function(trackStat){result.forEach((function(stats){stats.type===streamStatsType&amp;&amp;stats.trackId===trackStat.id&amp;&amp;walkStats(result,stats,filteredResult)}))})),filteredResult};var logDisabled_=!0,deprecationWarnings_=!0;function extractVersion(uastring,expr,pos){var match=uastring.match(expr);return match&amp;&amp;match.length&gt;=pos&amp;&amp;parseInt(match[pos],10)}function isObject(val){return"[object Object]"===Object.prototype.toString.call(val)}function walkStats(stats,base,resultSet){base&amp;&amp;!resultSet.has(base.id)&amp;&amp;(resultSet.set(base.id,base),Object.keys(base).forEach((function(name){name.endsWith("Id")?walkStats(stats,stats.get(base[name]),resultSet):name.endsWith("Ids")&amp;&amp;base[name].forEach((function(id){walkStats(stats,stats.get(id),resultSet)}))})))}},{}],12:[function(require,module,exports){var _typeof="function"==typeof Symbol&amp;&amp;"symbol"==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&amp;&amp;"function"==typeof Symbol&amp;&amp;obj.constructor===Symbol&amp;&amp;obj!==Symbol.prototype?"symbol":typeof obj},SDPUtils={generateIdentifier:function(){return Math.random().toString(36).substr(2,10)}};SDPUtils.localCName=SDPUtils.generateIdentifier(),SDPUtils.splitLines=function(blob){return blob.trim().split("\n").map((function(line){return line.trim()}))},SDPUtils.splitSections=function(blob){return blob.split("\nm=").map((function(part,index){return(index&gt;0?"m="+part:part).trim()+"\r\n"}))},SDPUtils.getDescription=function(blob){var sections=SDPUtils.splitSections(blob);return sections&amp;&amp;sections[0]},SDPUtils.getMediaSections=function(blob){var sections=SDPUtils.splitSections(blob);return sections.shift(),sections},SDPUtils.matchPrefix=function(blob,prefix){return SDPUtils.splitLines(blob).filter((function(line){return 0===line.indexOf(prefix)}))},SDPUtils.parseCandidate=function(line){for(var parts=void 0,candidate={foundation:(parts=0===line.indexOf("a=candidate:")?line.substring(12).split(" "):line.substring(10).split(" "))[0],component:{1:"rtp",2:"rtcp"}[parts[1]],protocol:parts[2].toLowerCase(),priority:parseInt(parts[3],10),ip:parts[4],address:parts[4],port:parseInt(parts[5],10),type:parts[7]},i=8;i&lt;parts.length;i+=2)switch(parts[i]){case"raddr":candidate.relatedAddress=parts[i+1];break;case"rport":candidate.relatedPort=parseInt(parts[i+1],10);break;case"tcptype":candidate.tcpType=parts[i+1];break;case"ufrag":candidate.ufrag=parts[i+1],candidate.usernameFragment=parts[i+1];break;default:void 0===candidate[parts[i]]&amp;&amp;(candidate[parts[i]]=parts[i+1])}return candidate},SDPUtils.writeCandidate=function(candidate){var sdp=[];sdp.push(candidate.foundation);var component=candidate.component;"rtp"===component?sdp.push(1):"rtcp"===component?sdp.push(2):sdp.push(component),sdp.push(candidate.protocol.toUpperCase()),sdp.push(candidate.priority),sdp.push(candidate.address||candidate.ip),sdp.push(candidate.port);var type=candidate.type;return sdp.push("typ"),sdp.push(type),"host"!==type&amp;&amp;candidate.relatedAddress&amp;&amp;candidate.relatedPort&amp;&amp;(sdp.push("raddr"),sdp.push(candidate.relatedAddress),sdp.push("rport"),sdp.push(candidate.relatedPort)),candidate.tcpType&amp;&amp;"tcp"===candidate.protocol.toLowerCase()&amp;&amp;(sdp.push("tcptype"),sdp.push(candidate.tcpType)),(candidate.usernameFragment||candidate.ufrag)&amp;&amp;(sdp.push("ufrag"),sdp.push(candidate.usernameFragment||candidate.ufrag)),"candidate:"+sdp.join(" ")},SDPUtils.parseIceOptions=function(line){return line.substr(14).split(" ")},SDPUtils.parseRtpMap=function(line){var parts=line.substr(9).split(" "),parsed={payloadType:parseInt(parts.shift(),10)};return parts=parts[0].split("/"),parsed.name=parts[0],parsed.clockRate=parseInt(parts[1],10),parsed.channels=3===parts.length?parseInt(parts[2],10):1,parsed.numChannels=parsed.channels,parsed},SDPUtils.writeRtpMap=function(codec){var pt=codec.payloadType;void 0!==codec.preferredPayloadType&amp;&amp;(pt=codec.preferredPayloadType);var channels=codec.channels||codec.numChannels||1;return"a=rtpmap:"+pt+" "+codec.name+"/"+codec.clockRate+(1!==channels?"/"+channels:"")+"\r\n"},SDPUtils.parseExtmap=function(line){var parts=line.substr(9).split(" ");return{id:parseInt(parts[0],10),direction:parts[0].indexOf("/")&gt;0?parts[0].split("/")[1]:"sendrecv",uri:parts[1]}},SDPUtils.writeExtmap=function(headerExtension){return"a=extmap:"+(headerExtension.id||headerExtension.preferredId)+(headerExtension.direction&amp;&amp;"sendrecv"!==headerExtension.direction?"/"+headerExtension.direction:"")+" "+headerExtension.uri+"\r\n"},SDPUtils.parseFmtp=function(line){for(var parsed={},kv=void 0,parts=line.substr(line.indexOf(" ")+1).split(";"),j=0;j&lt;parts.length;j++)parsed[(kv=parts[j].trim().split("="))[0].trim()]=kv[1];return parsed},SDPUtils.writeFmtp=function(codec){var line="",pt=codec.payloadType;if(void 0!==codec.preferredPayloadType&amp;&amp;(pt=codec.preferredPayloadType),codec.parameters&amp;&amp;Object.keys(codec.parameters).length){var params=[];Object.keys(codec.parameters).forEach((function(param){codec.parameters[param]?params.push(param+"="+codec.parameters[param]):params.push(param)})),line+="a=fmtp:"+pt+" "+params.join(";")+"\r\n"}return line},SDPUtils.parseRtcpFb=function(line){var parts=line.substr(line.indexOf(" ")+1).split(" ");return{type:parts.shift(),parameter:parts.join(" ")}},SDPUtils.writeRtcpFb=function(codec){var lines="",pt=codec.payloadType;return void 0!==codec.preferredPayloadType&amp;&amp;(pt=codec.preferredPayloadType),codec.rtcpFeedback&amp;&amp;codec.rtcpFeedback.length&amp;&amp;codec.rtcpFeedback.forEach((function(fb){lines+="a=rtcp-fb:"+pt+" "+fb.type+(fb.parameter&amp;&amp;fb.parameter.length?" "+fb.parameter:"")+"\r\n"})),lines},SDPUtils.parseSsrcMedia=function(line){var sp=line.indexOf(" "),parts={ssrc:parseInt(line.substr(7,sp-7),10)},colon=line.indexOf(":",sp);return colon&gt;-1?(parts.attribute=line.substr(sp+1,colon-sp-1),parts.value=line.substr(colon+1)):parts.attribute=line.substr(sp+1),parts},SDPUtils.parseSsrcGroup=function(line){var parts=line.substr(13).split(" ");return{semantics:parts.shift(),ssrcs:parts.map((function(ssrc){return parseInt(ssrc,10)}))}},SDPUtils.getMid=function(mediaSection){var mid=SDPUtils.matchPrefix(mediaSection,"a=mid:")[0];if(mid)return mid.substr(6)},SDPUtils.parseFingerprint=function(line){var parts=line.substr(14).split(" ");return{algorithm:parts[0].toLowerCase(),value:parts[1]}},SDPUtils.getDtlsParameters=function(mediaSection,sessionpart){return{role:"auto",fingerprints:SDPUtils.matchPrefix(mediaSection+sessionpart,"a=fingerprint:").map(SDPUtils.parseFingerprint)}},SDPUtils.writeDtlsParameters=function(params,setupType){var sdp="a=setup:"+setupType+"\r\n";return params.fingerprints.forEach((function(fp){sdp+="a=fingerprint:"+fp.algorithm+" "+fp.value+"\r\n"})),sdp},SDPUtils.parseCryptoLine=function(line){var parts=line.substr(9).split(" ");return{tag:parseInt(parts[0],10),cryptoSuite:parts[1],keyParams:parts[2],sessionParams:parts.slice(3)}},SDPUtils.writeCryptoLine=function(parameters){return"a=crypto:"+parameters.tag+" "+parameters.cryptoSuite+" "+("object"===_typeof(parameters.keyParams)?SDPUtils.writeCryptoKeyParams(parameters.keyParams):parameters.keyParams)+(parameters.sessionParams?" "+parameters.sessionParams.join(" "):"")+"\r\n"},SDPUtils.parseCryptoKeyParams=function(keyParams){if(0!==keyParams.indexOf("inline:"))return null;var parts=keyParams.substr(7).split("|");return{keyMethod:"inline",keySalt:parts[0],lifeTime:parts[1],mkiValue:parts[2]?parts[2].split(":")[0]:void 0,mkiLength:parts[2]?parts[2].split(":")[1]:void 0}},SDPUtils.writeCryptoKeyParams=function(keyParams){return keyParams.keyMethod+":"+keyParams.keySalt+(keyParams.lifeTime?"|"+keyParams.lifeTime:"")+(keyParams.mkiValue&amp;&amp;keyParams.mkiLength?"|"+keyParams.mkiValue+":"+keyParams.mkiLength:"")},SDPUtils.getCryptoParameters=function(mediaSection,sessionpart){return SDPUtils.matchPrefix(mediaSection+sessionpart,"a=crypto:").map(SDPUtils.parseCryptoLine)},SDPUtils.getIceParameters=function(mediaSection,sessionpart){var ufrag=SDPUtils.matchPrefix(mediaSection+sessionpart,"a=ice-ufrag:")[0],pwd=SDPUtils.matchPrefix(mediaSection+sessionpart,"a=ice-pwd:")[0];return ufrag&amp;&amp;pwd?{usernameFragment:ufrag.substr(12),password:pwd.substr(10)}:null},SDPUtils.writeIceParameters=function(params){var sdp="a=ice-ufrag:"+params.usernameFragment+"\r\na=ice-pwd:"+params.password+"\r\n";return params.iceLite&amp;&amp;(sdp+="a=ice-lite\r\n"),sdp},SDPUtils.parseRtpParameters=function(mediaSection){for(var description={codecs:[],headerExtensions:[],fecMechanisms:[],rtcp:[]},mline=SDPUtils.splitLines(mediaSection)[0].split(" "),i=3;i&lt;mline.length;i++){var pt=mline[i],rtpmapline=SDPUtils.matchPrefix(mediaSection,"a=rtpmap:"+pt+" ")[0];if(rtpmapline){var codec=SDPUtils.parseRtpMap(rtpmapline),fmtps=SDPUtils.matchPrefix(mediaSection,"a=fmtp:"+pt+" ");switch(codec.parameters=fmtps.length?SDPUtils.parseFmtp(fmtps[0]):{},codec.rtcpFeedback=SDPUtils.matchPrefix(mediaSection,"a=rtcp-fb:"+pt+" ").map(SDPUtils.parseRtcpFb),description.codecs.push(codec),codec.name.toUpperCase()){case"RED":case"ULPFEC":description.fecMechanisms.push(codec.name.toUpperCase())}}}return SDPUtils.matchPrefix(mediaSection,"a=extmap:").forEach((function(line){description.headerExtensions.push(SDPUtils.parseExtmap(line))})),description},SDPUtils.writeRtpDescription=function(kind,caps){var sdp="";sdp+="m="+kind+" ",sdp+=caps.codecs.length&gt;0?"9":"0",sdp+=" UDP/TLS/RTP/SAVPF ",sdp+=caps.codecs.map((function(codec){return void 0!==codec.preferredPayloadType?codec.preferredPayloadType:codec.payloadType})).join(" ")+"\r\n",sdp+="c=IN IP4 0.0.0.0\r\n",sdp+="a=rtcp:9 IN IP4 0.0.0.0\r\n",caps.codecs.forEach((function(codec){sdp+=SDPUtils.writeRtpMap(codec),sdp+=SDPUtils.writeFmtp(codec),sdp+=SDPUtils.writeRtcpFb(codec)}));var maxptime=0;return caps.codecs.forEach((function(codec){codec.maxptime&gt;maxptime&amp;&amp;(maxptime=codec.maxptime)})),maxptime&gt;0&amp;&amp;(sdp+="a=maxptime:"+maxptime+"\r\n"),caps.headerExtensions&amp;&amp;caps.headerExtensions.forEach((function(extension){sdp+=SDPUtils.writeExtmap(extension)})),sdp},SDPUtils.parseRtpEncodingParameters=function(mediaSection){var encodingParameters=[],description=SDPUtils.parseRtpParameters(mediaSection),hasRed=-1!==description.fecMechanisms.indexOf("RED"),hasUlpfec=-1!==description.fecMechanisms.indexOf("ULPFEC"),ssrcs=SDPUtils.matchPrefix(mediaSection,"a=ssrc:").map((function(line){return SDPUtils.parseSsrcMedia(line)})).filter((function(parts){return"cname"===parts.attribute})),primarySsrc=ssrcs.length&gt;0&amp;&amp;ssrcs[0].ssrc,secondarySsrc=void 0,flows=SDPUtils.matchPrefix(mediaSection,"a=ssrc-group:FID").map((function(line){return line.substr(17).split(" ").map((function(part){return parseInt(part,10)}))}));flows.length&gt;0&amp;&amp;flows[0].length&gt;1&amp;&amp;flows[0][0]===primarySsrc&amp;&amp;(secondarySsrc=flows[0][1]),description.codecs.forEach((function(codec){if("RTX"===codec.name.toUpperCase()&amp;&amp;codec.parameters.apt){var encParam={ssrc:primarySsrc,codecPayloadType:parseInt(codec.parameters.apt,10)};primarySsrc&amp;&amp;secondarySsrc&amp;&amp;(encParam.rtx={ssrc:secondarySsrc}),encodingParameters.push(encParam),hasRed&amp;&amp;((encParam=JSON.parse(JSON.stringify(encParam))).fec={ssrc:primarySsrc,mechanism:hasUlpfec?"red+ulpfec":"red"},encodingParameters.push(encParam))}})),0===encodingParameters.length&amp;&amp;primarySsrc&amp;&amp;encodingParameters.push({ssrc:primarySsrc});var bandwidth=SDPUtils.matchPrefix(mediaSection,"b=");return bandwidth.length&amp;&amp;(bandwidth=0===bandwidth[0].indexOf("b=TIAS:")?parseInt(bandwidth[0].substr(7),10):0===bandwidth[0].indexOf("b=AS:")?1e3*parseInt(bandwidth[0].substr(5),10)*.95-16e3:void 0,encodingParameters.forEach((function(params){params.maxBitrate=bandwidth}))),encodingParameters},SDPUtils.parseRtcpParameters=function(mediaSection){var rtcpParameters={},remoteSsrc=SDPUtils.matchPrefix(mediaSection,"a=ssrc:").map((function(line){return SDPUtils.parseSsrcMedia(line)})).filter((function(obj){return"cname"===obj.attribute}))[0];remoteSsrc&amp;&amp;(rtcpParameters.cname=remoteSsrc.value,rtcpParameters.ssrc=remoteSsrc.ssrc);var rsize=SDPUtils.matchPrefix(mediaSection,"a=rtcp-rsize");rtcpParameters.reducedSize=rsize.length&gt;0,rtcpParameters.compound=0===rsize.length;var mux=SDPUtils.matchPrefix(mediaSection,"a=rtcp-mux");return rtcpParameters.mux=mux.length&gt;0,rtcpParameters},SDPUtils.writeRtcpParameters=function(rtcpParameters){var sdp="";return rtcpParameters.reducedSize&amp;&amp;(sdp+="a=rtcp-rsize\r\n"),rtcpParameters.mux&amp;&amp;(sdp+="a=rtcp-mux\r\n"),void 0!==rtcpParameters.ssrc&amp;&amp;rtcpParameters.cname&amp;&amp;(sdp+="a=ssrc:"+rtcpParameters.ssrc+" cname:"+rtcpParameters.cname+"\r\n"),sdp},SDPUtils.parseMsid=function(mediaSection){var parts=void 0,spec=SDPUtils.matchPrefix(mediaSection,"a=msid:");if(1===spec.length)return{stream:(parts=spec[0].substr(7).split(" "))[0],track:parts[1]};var planB=SDPUtils.matchPrefix(mediaSection,"a=ssrc:").map((function(line){return SDPUtils.parseSsrcMedia(line)})).filter((function(msidParts){return"msid"===msidParts.attribute}));return planB.length&gt;0?{stream:(parts=planB[0].value.split(" "))[0],track:parts[1]}:void 0},SDPUtils.parseSctpDescription=function(mediaSection){var mline=SDPUtils.parseMLine(mediaSection),maxSizeLine=SDPUtils.matchPrefix(mediaSection,"a=max-message-size:"),maxMessageSize=void 0;maxSizeLine.length&gt;0&amp;&amp;(maxMessageSize=parseInt(maxSizeLine[0].substr(19),10)),isNaN(maxMessageSize)&amp;&amp;(maxMessageSize=65536);var sctpPort=SDPUtils.matchPrefix(mediaSection,"a=sctp-port:");if(sctpPort.length&gt;0)return{port:parseInt(sctpPort[0].substr(12),10),protocol:mline.fmt,maxMessageSize:maxMessageSize};var sctpMapLines=SDPUtils.matchPrefix(mediaSection,"a=sctpmap:");if(sctpMapLines.length&gt;0){var parts=sctpMapLines[0].substr(10).split(" ");return{port:parseInt(parts[0],10),protocol:parts[1],maxMessageSize:maxMessageSize}}},SDPUtils.writeSctpDescription=function(media,sctp){var output=[];return output="DTLS/SCTP"!==media.protocol?["m="+media.kind+" 9 "+media.protocol+" "+sctp.protocol+"\r\n","c=IN IP4 0.0.0.0\r\n","a=sctp-port:"+sctp.port+"\r\n"]:["m="+media.kind+" 9 "+media.protocol+" "+sctp.port+"\r\n","c=IN IP4 0.0.0.0\r\n","a=sctpmap:"+sctp.port+" "+sctp.protocol+" 65535\r\n"],void 0!==sctp.maxMessageSize&amp;&amp;output.push("a=max-message-size:"+sctp.maxMessageSize+"\r\n"),output.join("")},SDPUtils.generateSessionId=function(){return Math.random().toString().substr(2,21)},SDPUtils.writeSessionBoilerplate=function(sessId,sessVer,sessUser){var version=void 0!==sessVer?sessVer:2;return"v=0\r\no="+(sessUser||"thisisadapterortc")+" "+(sessId||SDPUtils.generateSessionId())+" "+version+" IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\n"},SDPUtils.getDirection=function(mediaSection,sessionpart){for(var lines=SDPUtils.splitLines(mediaSection),i=0;i&lt;lines.length;i++)switch(lines[i]){case"a=sendrecv":case"a=sendonly":case"a=recvonly":case"a=inactive":return lines[i].substr(2)}return sessionpart?SDPUtils.getDirection(sessionpart):"sendrecv"},SDPUtils.getKind=function(mediaSection){return SDPUtils.splitLines(mediaSection)[0].split(" ")[0].substr(2)},SDPUtils.isRejected=function(mediaSection){return"0"===mediaSection.split(" ",2)[1]},SDPUtils.parseMLine=function(mediaSection){var parts=SDPUtils.splitLines(mediaSection)[0].substr(2).split(" ");return{kind:parts[0],port:parseInt(parts[1],10),protocol:parts[2],fmt:parts.slice(3).join(" ")}},SDPUtils.parseOLine=function(mediaSection){var parts=SDPUtils.matchPrefix(mediaSection,"o=")[0].substr(2).split(" ");return{username:parts[0],sessionId:parts[1],sessionVersion:parseInt(parts[2],10),netType:parts[3],addressType:parts[4],address:parts[5]}},SDPUtils.isValidSDP=function(blob){if("string"!=typeof blob||0===blob.length)return!1;for(var lines=SDPUtils.splitLines(blob),i=0;i&lt;lines.length;i++)if(lines[i].length&lt;2||"="!==lines[i].charAt(1))return!1;return!0},"object"===(void 0===module?"undefined":_typeof(module))&amp;&amp;(module.exports=SDPUtils)},{}]},{},[1])(1)}));
/**!
 * @fileOverview Kickass library to create and place poppers near their reference elements.
 * @version 1.12.6
 * @license
 * Copyright (c) 2016 Federico Zivolo and contributors
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in all
 * copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */
!function(global,factory){"object"==typeof exports&amp;&amp;"undefined"!=typeof module?module.exports=factory():"function"==typeof define&amp;&amp;define.amd?define("core/popper",factory):global.Popper=factory()}(window,(function(){for(var isBrowser="undefined"!=typeof window&amp;&amp;void 0!==window.document,longerTimeoutBrowsers=["Edge","Trident","Firefox"],timeoutDuration=0,i=0;i&lt;longerTimeoutBrowsers.length;i+=1)if(isBrowser&amp;&amp;navigator.userAgent.indexOf(longerTimeoutBrowsers[i])&gt;=0){timeoutDuration=1;break}var debounce=isBrowser&amp;&amp;window.Promise?function(fn){var called=!1;return function(){called||(called=!0,Promise.resolve().then((function(){called=!1,fn()})))}}:function(fn){var scheduled=!1;return function(){scheduled||(scheduled=!0,setTimeout((function(){scheduled=!1,fn()}),timeoutDuration))}};function isFunction(functionToCheck){return functionToCheck&amp;&amp;"[object Function]"==={}.toString.call(functionToCheck)}function getStyleComputedProperty(element,property){if(1!==element.nodeType)return[];var css=window.getComputedStyle(element,null);return property?css[property]:css}function getParentNode(element){return"HTML"===element.nodeName?element:element.parentNode||element.host}function getScrollParent(element){if(!element)return window.document.body;switch(element.nodeName){case"HTML":case"BODY":return element.ownerDocument.body;case"#document":return element.body}var _getStyleComputedProp=getStyleComputedProperty(element),overflow=_getStyleComputedProp.overflow,overflowX=_getStyleComputedProp.overflowX,overflowY=_getStyleComputedProp.overflowY;return/(auto|scroll)/.test(overflow+overflowY+overflowX)?element:getScrollParent(getParentNode(element))}function getOffsetParent(element){var offsetParent=element&amp;&amp;element.offsetParent,nodeName=offsetParent&amp;&amp;offsetParent.nodeName;return nodeName&amp;&amp;"BODY"!==nodeName&amp;&amp;"HTML"!==nodeName?-1!==["TD","TABLE"].indexOf(offsetParent.nodeName)&amp;&amp;"static"===getStyleComputedProperty(offsetParent,"position")?getOffsetParent(offsetParent):offsetParent:element?element.ownerDocument.documentElement:window.document.documentElement}function getRoot(node){return null!==node.parentNode?getRoot(node.parentNode):node}function findCommonOffsetParent(element1,element2){if(!(element1&amp;&amp;element1.nodeType&amp;&amp;element2&amp;&amp;element2.nodeType))return window.document.documentElement;var order=element1.compareDocumentPosition(element2)&amp;Node.DOCUMENT_POSITION_FOLLOWING,start=order?element1:element2,end=order?element2:element1,range=document.createRange();range.setStart(start,0),range.setEnd(end,0);var element,nodeName,commonAncestorContainer=range.commonAncestorContainer;if(element1!==commonAncestorContainer&amp;&amp;element2!==commonAncestorContainer||start.contains(end))return"BODY"===(nodeName=(element=commonAncestorContainer).nodeName)||"HTML"!==nodeName&amp;&amp;getOffsetParent(element.firstElementChild)!==element?getOffsetParent(commonAncestorContainer):commonAncestorContainer;var element1root=getRoot(element1);return element1root.host?findCommonOffsetParent(element1root.host,element2):findCommonOffsetParent(element1,getRoot(element2).host)}function getScroll(element){var side=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]?arguments[1]:"top",upperSide="top"===side?"scrollTop":"scrollLeft",nodeName=element.nodeName;if("BODY"===nodeName||"HTML"===nodeName){var html=element.ownerDocument.documentElement,scrollingElement=element.ownerDocument.scrollingElement||html;return scrollingElement[upperSide]}return element[upperSide]}function getBordersSize(styles,axis){var sideA="x"===axis?"Left":"Top",sideB="Left"===sideA?"Right":"Bottom";return+styles["border"+sideA+"Width"].split("px")[0]+ +styles["border"+sideB+"Width"].split("px")[0]}var isIE10=void 0,isIE10$1=function(){return void 0===isIE10&amp;&amp;(isIE10=-1!==navigator.appVersion.indexOf("MSIE 10")),isIE10};function getSize(axis,body,html,computedStyle){return Math.max(body["offset"+axis],body["scroll"+axis],html["client"+axis],html["offset"+axis],html["scroll"+axis],isIE10$1()?html["offset"+axis]+computedStyle["margin"+("Height"===axis?"Top":"Left")]+computedStyle["margin"+("Height"===axis?"Bottom":"Right")]:0)}function getWindowSizes(){var body=window.document.body,html=window.document.documentElement,computedStyle=isIE10$1()&amp;&amp;window.getComputedStyle(html);return{height:getSize("Height",body,html,computedStyle),width:getSize("Width",body,html,computedStyle)}}var classCallCheck=function(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")},createClass=function(){function defineProperties(target,props){for(var i=0;i&lt;props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&amp;&amp;(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){return protoProps&amp;&amp;defineProperties(Constructor.prototype,protoProps),staticProps&amp;&amp;defineProperties(Constructor,staticProps),Constructor}}(),defineProperty=function(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj},_extends=Object.assign||function(target){for(var i=1;i&lt;arguments.length;i++){var source=arguments[i];for(var key in source)Object.prototype.hasOwnProperty.call(source,key)&amp;&amp;(target[key]=source[key])}return target};function getClientRect(offsets){return _extends({},offsets,{right:offsets.left+offsets.width,bottom:offsets.top+offsets.height})}function getBoundingClientRect(element){var rect={};if(isIE10$1())try{rect=element.getBoundingClientRect();var scrollTop=getScroll(element,"top"),scrollLeft=getScroll(element,"left");rect.top+=scrollTop,rect.left+=scrollLeft,rect.bottom+=scrollTop,rect.right+=scrollLeft}catch(err){}else rect=element.getBoundingClientRect();var result={left:rect.left,top:rect.top,width:rect.right-rect.left,height:rect.bottom-rect.top},sizes="HTML"===element.nodeName?getWindowSizes():{},width=sizes.width||element.clientWidth||result.right-result.left,height=sizes.height||element.clientHeight||result.bottom-result.top,horizScrollbar=element.offsetWidth-width,vertScrollbar=element.offsetHeight-height;if(horizScrollbar||vertScrollbar){var styles=getStyleComputedProperty(element);horizScrollbar-=getBordersSize(styles,"x"),vertScrollbar-=getBordersSize(styles,"y"),result.width-=horizScrollbar,result.height-=vertScrollbar}return getClientRect(result)}function getOffsetRectRelativeToArbitraryNode(children,parent){var isIE10=isIE10$1(),isHTML="HTML"===parent.nodeName,childrenRect=getBoundingClientRect(children),parentRect=getBoundingClientRect(parent),scrollParent=getScrollParent(children),styles=getStyleComputedProperty(parent),borderTopWidth=+styles.borderTopWidth.split("px")[0],borderLeftWidth=+styles.borderLeftWidth.split("px")[0],offsets=getClientRect({top:childrenRect.top-parentRect.top-borderTopWidth,left:childrenRect.left-parentRect.left-borderLeftWidth,width:childrenRect.width,height:childrenRect.height});if(offsets.marginTop=0,offsets.marginLeft=0,!isIE10&amp;&amp;isHTML){var marginTop=+styles.marginTop.split("px")[0],marginLeft=+styles.marginLeft.split("px")[0];offsets.top-=borderTopWidth-marginTop,offsets.bottom-=borderTopWidth-marginTop,offsets.left-=borderLeftWidth-marginLeft,offsets.right-=borderLeftWidth-marginLeft,offsets.marginTop=marginTop,offsets.marginLeft=marginLeft}return(isIE10?parent.contains(scrollParent):parent===scrollParent&amp;&amp;"BODY"!==scrollParent.nodeName)&amp;&amp;(offsets=function(rect,element){var subtract=arguments.length&gt;2&amp;&amp;void 0!==arguments[2]&amp;&amp;arguments[2],scrollTop=getScroll(element,"top"),scrollLeft=getScroll(element,"left"),modifier=subtract?-1:1;return rect.top+=scrollTop*modifier,rect.bottom+=scrollTop*modifier,rect.left+=scrollLeft*modifier,rect.right+=scrollLeft*modifier,rect}(offsets,parent)),offsets}function isFixed(element){var nodeName=element.nodeName;return"BODY"!==nodeName&amp;&amp;"HTML"!==nodeName&amp;&amp;("fixed"===getStyleComputedProperty(element,"position")||isFixed(getParentNode(element)))}function getBoundaries(popper,reference,padding,boundariesElement){var boundaries={top:0,left:0},offsetParent=findCommonOffsetParent(popper,reference);if("viewport"===boundariesElement)boundaries=function(element){var html=element.ownerDocument.documentElement,relativeOffset=getOffsetRectRelativeToArbitraryNode(element,html),width=Math.max(html.clientWidth,window.innerWidth||0),height=Math.max(html.clientHeight,window.innerHeight||0),scrollTop=getScroll(html),scrollLeft=getScroll(html,"left");return getClientRect({top:scrollTop-relativeOffset.top+relativeOffset.marginTop,left:scrollLeft-relativeOffset.left+relativeOffset.marginLeft,width:width,height:height})}(offsetParent);else{var boundariesNode=void 0;"scrollParent"===boundariesElement?"BODY"===(boundariesNode=getScrollParent(getParentNode(popper))).nodeName&amp;&amp;(boundariesNode=popper.ownerDocument.documentElement):boundariesNode="window"===boundariesElement?popper.ownerDocument.documentElement:boundariesElement;var offsets=getOffsetRectRelativeToArbitraryNode(boundariesNode,offsetParent);if("HTML"!==boundariesNode.nodeName||isFixed(offsetParent))boundaries=offsets;else{var _getWindowSizes=getWindowSizes(),height=_getWindowSizes.height,width=_getWindowSizes.width;boundaries.top+=offsets.top-offsets.marginTop,boundaries.bottom=height+offsets.top,boundaries.left+=offsets.left-offsets.marginLeft,boundaries.right=width+offsets.left}}return boundaries.left+=padding,boundaries.top+=padding,boundaries.right-=padding,boundaries.bottom-=padding,boundaries}function getArea(_ref){return _ref.width*_ref.height}function computeAutoPlacement(placement,refRect,popper,reference,boundariesElement){var padding=arguments.length&gt;5&amp;&amp;void 0!==arguments[5]?arguments[5]:0;if(-1===placement.indexOf("auto"))return placement;var boundaries=getBoundaries(popper,reference,padding,boundariesElement),rects={top:{width:boundaries.width,height:refRect.top-boundaries.top},right:{width:boundaries.right-refRect.right,height:boundaries.height},bottom:{width:boundaries.width,height:boundaries.bottom-refRect.bottom},left:{width:refRect.left-boundaries.left,height:boundaries.height}},sortedAreas=Object.keys(rects).map((function(key){return _extends({key:key},rects[key],{area:getArea(rects[key])})})).sort((function(a,b){return b.area-a.area})),filteredAreas=sortedAreas.filter((function(_ref2){var width=_ref2.width,height=_ref2.height;return width&gt;=popper.clientWidth&amp;&amp;height&gt;=popper.clientHeight})),computedPlacement=filteredAreas.length&gt;0?filteredAreas[0].key:sortedAreas[0].key,variation=placement.split("-")[1];return computedPlacement+(variation?"-"+variation:"")}function getReferenceOffsets(state,popper,reference){return getOffsetRectRelativeToArbitraryNode(reference,findCommonOffsetParent(popper,reference))}function getOuterSizes(element){var styles=window.getComputedStyle(element),x=parseFloat(styles.marginTop)+parseFloat(styles.marginBottom),y=parseFloat(styles.marginLeft)+parseFloat(styles.marginRight);return{width:element.offsetWidth+y,height:element.offsetHeight+x}}function getOppositePlacement(placement){var hash={left:"right",right:"left",bottom:"top",top:"bottom"};return placement.replace(/left|right|bottom|top/g,(function(matched){return hash[matched]}))}function getPopperOffsets(popper,referenceOffsets,placement){placement=placement.split("-")[0];var popperRect=getOuterSizes(popper),popperOffsets={width:popperRect.width,height:popperRect.height},isHoriz=-1!==["right","left"].indexOf(placement),mainSide=isHoriz?"top":"left",secondarySide=isHoriz?"left":"top",measurement=isHoriz?"height":"width",secondaryMeasurement=isHoriz?"width":"height";return popperOffsets[mainSide]=referenceOffsets[mainSide]+referenceOffsets[measurement]/2-popperRect[measurement]/2,popperOffsets[secondarySide]=placement===secondarySide?referenceOffsets[secondarySide]-popperRect[secondaryMeasurement]:referenceOffsets[getOppositePlacement(secondarySide)],popperOffsets}function find(arr,check){return Array.prototype.find?arr.find(check):arr.filter(check)[0]}function runModifiers(modifiers,data,ends){return(void 0===ends?modifiers:modifiers.slice(0,function(arr,prop,value){if(Array.prototype.findIndex)return arr.findIndex((function(cur){return cur[prop]===value}));var match=find(arr,(function(obj){return obj[prop]===value}));return arr.indexOf(match)}(modifiers,"name",ends))).forEach((function(modifier){modifier.function&amp;&amp;console.warn("`modifier.function` is deprecated, use `modifier.fn`!");var fn=modifier.function||modifier.fn;modifier.enabled&amp;&amp;isFunction(fn)&amp;&amp;(data.offsets.popper=getClientRect(data.offsets.popper),data.offsets.reference=getClientRect(data.offsets.reference),data=fn(data,modifier))})),data}function update(){if(!this.state.isDestroyed){var data={instance:this,styles:{},arrowStyles:{},attributes:{},flipped:!1,offsets:{}};data.offsets.reference=getReferenceOffsets(this.state,this.popper,this.reference),data.placement=computeAutoPlacement(this.options.placement,data.offsets.reference,this.popper,this.reference,this.options.modifiers.flip.boundariesElement,this.options.modifiers.flip.padding),data.originalPlacement=data.placement,data.offsets.popper=getPopperOffsets(this.popper,data.offsets.reference,data.placement),data.offsets.popper.position="absolute",data=runModifiers(this.modifiers,data),this.state.isCreated?this.options.onUpdate(data):(this.state.isCreated=!0,this.options.onCreate(data))}}function isModifierEnabled(modifiers,modifierName){return modifiers.some((function(_ref){var name=_ref.name;return _ref.enabled&amp;&amp;name===modifierName}))}function getSupportedPropertyName(property){for(var prefixes=[!1,"ms","Webkit","Moz","O"],upperProp=property.charAt(0).toUpperCase()+property.slice(1),i=0;i&lt;prefixes.length-1;i++){var prefix=prefixes[i],toCheck=prefix?""+prefix+upperProp:property;if(void 0!==window.document.body.style[toCheck])return toCheck}return null}function destroy(){return this.state.isDestroyed=!0,isModifierEnabled(this.modifiers,"applyStyle")&amp;&amp;(this.popper.removeAttribute("x-placement"),this.popper.style.left="",this.popper.style.position="",this.popper.style.top="",this.popper.style[getSupportedPropertyName("transform")]=""),this.disableEventListeners(),this.options.removeOnDestroy&amp;&amp;this.popper.parentNode.removeChild(this.popper),this}function getWindow(element){var ownerDocument=element.ownerDocument;return ownerDocument?ownerDocument.defaultView:window}function attachToScrollParents(scrollParent,event,callback,scrollParents){var isBody="BODY"===scrollParent.nodeName,target=isBody?scrollParent.ownerDocument.defaultView:scrollParent;target.addEventListener(event,callback,{passive:!0}),isBody||attachToScrollParents(getScrollParent(target.parentNode),event,callback,scrollParents),scrollParents.push(target)}function setupEventListeners(reference,options,state,updateBound){state.updateBound=updateBound,getWindow(reference).addEventListener("resize",state.updateBound,{passive:!0});var scrollElement=getScrollParent(reference);return attachToScrollParents(scrollElement,"scroll",state.updateBound,state.scrollParents),state.scrollElement=scrollElement,state.eventsEnabled=!0,state}function enableEventListeners(){this.state.eventsEnabled||(this.state=setupEventListeners(this.reference,this.options,this.state,this.scheduleUpdate))}function disableEventListeners(){var reference,state;this.state.eventsEnabled&amp;&amp;(window.cancelAnimationFrame(this.scheduleUpdate),this.state=(reference=this.reference,state=this.state,getWindow(reference).removeEventListener("resize",state.updateBound),state.scrollParents.forEach((function(target){target.removeEventListener("scroll",state.updateBound)})),state.updateBound=null,state.scrollParents=[],state.scrollElement=null,state.eventsEnabled=!1,state))}function isNumeric(n){return""!==n&amp;&amp;!isNaN(parseFloat(n))&amp;&amp;isFinite(n)}function setStyles(element,styles){Object.keys(styles).forEach((function(prop){var unit="";-1!==["width","height","top","right","bottom","left"].indexOf(prop)&amp;&amp;isNumeric(styles[prop])&amp;&amp;(unit="px"),element.style[prop]=styles[prop]+unit}))}function isModifierRequired(modifiers,requestingName,requestedName){var requesting=find(modifiers,(function(_ref){return _ref.name===requestingName})),isRequired=!!requesting&amp;&amp;modifiers.some((function(modifier){return modifier.name===requestedName&amp;&amp;modifier.enabled&amp;&amp;modifier.order&lt;requesting.order}));if(!isRequired){var _requesting="`"+requestingName+"`",requested="`"+requestedName+"`";console.warn(requested+" modifier is required by "+_requesting+" modifier in order to work, be sure to include it before "+_requesting+"!")}return isRequired}var placements=["auto-start","auto","auto-end","top-start","top","top-end","right-start","right","right-end","bottom-end","bottom","bottom-start","left-end","left","left-start"],validPlacements=placements.slice(3);function clockwise(placement){var counter=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]&amp;&amp;arguments[1],index=validPlacements.indexOf(placement),arr=validPlacements.slice(index+1).concat(validPlacements.slice(0,index));return counter?arr.reverse():arr}var BEHAVIORS_FLIP="flip",BEHAVIORS_CLOCKWISE="clockwise",BEHAVIORS_COUNTERCLOCKWISE="counterclockwise";function parseOffset(offset,popperOffsets,referenceOffsets,basePlacement){var offsets=[0,0],useHeight=-1!==["right","left"].indexOf(basePlacement),fragments=offset.split(/(\+|\-)/).map((function(frag){return frag.trim()})),divider=fragments.indexOf(find(fragments,(function(frag){return-1!==frag.search(/,|\s/)})));fragments[divider]&amp;&amp;-1===fragments[divider].indexOf(",")&amp;&amp;console.warn("Offsets separated by white space(s) are deprecated, use a comma (,) instead.");var splitRegex=/\s*,\s*|\s+/,ops=-1!==divider?[fragments.slice(0,divider).concat([fragments[divider].split(splitRegex)[0]]),[fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider+1))]:[fragments];return ops=ops.map((function(op,index){var measurement=(1===index?!useHeight:useHeight)?"height":"width",mergeWithPrevious=!1;return op.reduce((function(a,b){return""===a[a.length-1]&amp;&amp;-1!==["+","-"].indexOf(b)?(a[a.length-1]=b,mergeWithPrevious=!0,a):mergeWithPrevious?(a[a.length-1]+=b,mergeWithPrevious=!1,a):a.concat(b)}),[]).map((function(str){return function(str,measurement,popperOffsets,referenceOffsets){var split=str.match(/((?:\-|\+)?\d*\.?\d*)(.*)/),value=+split[1],unit=split[2];if(!value)return str;if(0===unit.indexOf("%")){return getClientRect("%p"===unit?popperOffsets:referenceOffsets)[measurement]/100*value}if("vh"===unit||"vw"===unit)return("vh"===unit?Math.max(document.documentElement.clientHeight,window.innerHeight||0):Math.max(document.documentElement.clientWidth,window.innerWidth||0))/100*value;return value}(str,measurement,popperOffsets,referenceOffsets)}))})),ops.forEach((function(op,index){op.forEach((function(frag,index2){isNumeric(frag)&amp;&amp;(offsets[index]+=frag*("-"===op[index2-1]?-1:1))}))})),offsets}var modifiers={shift:{order:100,enabled:!0,fn:function(data){var placement=data.placement,basePlacement=placement.split("-")[0],shiftvariation=placement.split("-")[1];if(shiftvariation){var _data$offsets=data.offsets,reference=_data$offsets.reference,popper=_data$offsets.popper,isVertical=-1!==["bottom","top"].indexOf(basePlacement),side=isVertical?"left":"top",measurement=isVertical?"width":"height",shiftOffsets={start:defineProperty({},side,reference[side]),end:defineProperty({},side,reference[side]+reference[measurement]-popper[measurement])};data.offsets.popper=_extends({},popper,shiftOffsets[shiftvariation])}return data}},offset:{order:200,enabled:!0,fn:function(data,_ref){var offset=_ref.offset,placement=data.placement,_data$offsets=data.offsets,popper=_data$offsets.popper,reference=_data$offsets.reference,basePlacement=placement.split("-")[0],offsets=void 0;return offsets=isNumeric(+offset)?[+offset,0]:parseOffset(offset,popper,reference,basePlacement),"left"===basePlacement?(popper.top+=offsets[0],popper.left-=offsets[1]):"right"===basePlacement?(popper.top+=offsets[0],popper.left+=offsets[1]):"top"===basePlacement?(popper.left+=offsets[0],popper.top-=offsets[1]):"bottom"===basePlacement&amp;&amp;(popper.left+=offsets[0],popper.top+=offsets[1]),data.popper=popper,data},offset:0},preventOverflow:{order:300,enabled:!0,fn:function(data,options){var boundariesElement=options.boundariesElement||getOffsetParent(data.instance.popper);data.instance.reference===boundariesElement&amp;&amp;(boundariesElement=getOffsetParent(boundariesElement));var boundaries=getBoundaries(data.instance.popper,data.instance.reference,options.padding,boundariesElement);options.boundaries=boundaries;var order=options.priority,popper=data.offsets.popper,check={primary:function(placement){var value=popper[placement];return popper[placement]&lt;boundaries[placement]&amp;&amp;!options.escapeWithReference&amp;&amp;(value=Math.max(popper[placement],boundaries[placement])),defineProperty({},placement,value)},secondary:function(placement){var mainSide="right"===placement?"left":"top",value=popper[mainSide];return popper[placement]&gt;boundaries[placement]&amp;&amp;!options.escapeWithReference&amp;&amp;(value=Math.min(popper[mainSide],boundaries[placement]-("right"===placement?popper.width:popper.height))),defineProperty({},mainSide,value)}};return order.forEach((function(placement){var side=-1!==["left","top"].indexOf(placement)?"primary":"secondary";popper=_extends({},popper,check[side](placement))})),data.offsets.popper=popper,data},priority:["left","right","top","bottom"],padding:5,boundariesElement:"scrollParent"},keepTogether:{order:400,enabled:!0,fn:function(data){var _data$offsets=data.offsets,popper=_data$offsets.popper,reference=_data$offsets.reference,placement=data.placement.split("-")[0],floor=Math.floor,isVertical=-1!==["top","bottom"].indexOf(placement),side=isVertical?"right":"bottom",opSide=isVertical?"left":"top",measurement=isVertical?"width":"height";return popper[side]&lt;floor(reference[opSide])&amp;&amp;(data.offsets.popper[opSide]=floor(reference[opSide])-popper[measurement]),popper[opSide]&gt;floor(reference[side])&amp;&amp;(data.offsets.popper[opSide]=floor(reference[side])),data}},arrow:{order:500,enabled:!0,fn:function(data,options){if(!isModifierRequired(data.instance.modifiers,"arrow","keepTogether"))return data;var arrowElement=options.element;if("string"==typeof arrowElement){if(!(arrowElement=data.instance.popper.querySelector(arrowElement)))return data}else if(!data.instance.popper.contains(arrowElement))return console.warn("WARNING: `arrow.element` must be child of its popper element!"),data;var placement=data.placement.split("-")[0],_data$offsets=data.offsets,popper=_data$offsets.popper,reference=_data$offsets.reference,isVertical=-1!==["left","right"].indexOf(placement),len=isVertical?"height":"width",sideCapitalized=isVertical?"Top":"Left",side=sideCapitalized.toLowerCase(),altSide=isVertical?"left":"top",opSide=isVertical?"bottom":"right",arrowElementSize=getOuterSizes(arrowElement)[len];reference[opSide]-arrowElementSize&lt;popper[side]&amp;&amp;(data.offsets.popper[side]-=popper[side]-(reference[opSide]-arrowElementSize)),reference[side]+arrowElementSize&gt;popper[opSide]&amp;&amp;(data.offsets.popper[side]+=reference[side]+arrowElementSize-popper[opSide]);var center=reference[side]+reference[len]/2-arrowElementSize/2,popperMarginSide=getStyleComputedProperty(data.instance.popper,"margin"+sideCapitalized).replace("px",""),sideValue=center-getClientRect(data.offsets.popper)[side]-popperMarginSide;return sideValue=Math.max(Math.min(popper[len]-arrowElementSize,sideValue),0),data.arrowElement=arrowElement,data.offsets.arrow={},data.offsets.arrow[side]=Math.round(sideValue),data.offsets.arrow[altSide]="",data},element:"[x-arrow]"},flip:{order:600,enabled:!0,fn:function(data,options){if(isModifierEnabled(data.instance.modifiers,"inner"))return data;if(data.flipped&amp;&amp;data.placement===data.originalPlacement)return data;var boundaries=getBoundaries(data.instance.popper,data.instance.reference,options.padding,options.boundariesElement),placement=data.placement.split("-")[0],placementOpposite=getOppositePlacement(placement),variation=data.placement.split("-")[1]||"",flipOrder=[];switch(options.behavior){case BEHAVIORS_FLIP:flipOrder=[placement,placementOpposite];break;case BEHAVIORS_CLOCKWISE:flipOrder=clockwise(placement);break;case BEHAVIORS_COUNTERCLOCKWISE:flipOrder=clockwise(placement,!0);break;default:flipOrder=options.behavior}return flipOrder.forEach((function(step,index){if(placement!==step||flipOrder.length===index+1)return data;placement=data.placement.split("-")[0],placementOpposite=getOppositePlacement(placement);var popperOffsets=data.offsets.popper,refOffsets=data.offsets.reference,floor=Math.floor,overlapsRef="left"===placement&amp;&amp;floor(popperOffsets.right)&gt;floor(refOffsets.left)||"right"===placement&amp;&amp;floor(popperOffsets.left)&lt;floor(refOffsets.right)||"top"===placement&amp;&amp;floor(popperOffsets.bottom)&gt;floor(refOffsets.top)||"bottom"===placement&amp;&amp;floor(popperOffsets.top)&lt;floor(refOffsets.bottom),overflowsLeft=floor(popperOffsets.left)&lt;floor(boundaries.left),overflowsRight=floor(popperOffsets.right)&gt;floor(boundaries.right),overflowsTop=floor(popperOffsets.top)&lt;floor(boundaries.top),overflowsBottom=floor(popperOffsets.bottom)&gt;floor(boundaries.bottom),overflowsBoundaries="left"===placement&amp;&amp;overflowsLeft||"right"===placement&amp;&amp;overflowsRight||"top"===placement&amp;&amp;overflowsTop||"bottom"===placement&amp;&amp;overflowsBottom,isVertical=-1!==["top","bottom"].indexOf(placement),flippedVariation=!!options.flipVariations&amp;&amp;(isVertical&amp;&amp;"start"===variation&amp;&amp;overflowsLeft||isVertical&amp;&amp;"end"===variation&amp;&amp;overflowsRight||!isVertical&amp;&amp;"start"===variation&amp;&amp;overflowsTop||!isVertical&amp;&amp;"end"===variation&amp;&amp;overflowsBottom);(overlapsRef||overflowsBoundaries||flippedVariation)&amp;&amp;(data.flipped=!0,(overlapsRef||overflowsBoundaries)&amp;&amp;(placement=flipOrder[index+1]),flippedVariation&amp;&amp;(variation=function(variation){return"end"===variation?"start":"start"===variation?"end":variation}(variation)),data.placement=placement+(variation?"-"+variation:""),data.offsets.popper=_extends({},data.offsets.popper,getPopperOffsets(data.instance.popper,data.offsets.reference,data.placement)),data=runModifiers(data.instance.modifiers,data,"flip"))})),data},behavior:"flip",padding:5,boundariesElement:"viewport"},inner:{order:700,enabled:!1,fn:function(data){var placement=data.placement,basePlacement=placement.split("-")[0],_data$offsets=data.offsets,popper=_data$offsets.popper,reference=_data$offsets.reference,isHoriz=-1!==["left","right"].indexOf(basePlacement),subtractLength=-1===["top","left"].indexOf(basePlacement);return popper[isHoriz?"left":"top"]=reference[basePlacement]-(subtractLength?popper[isHoriz?"width":"height"]:0),data.placement=getOppositePlacement(placement),data.offsets.popper=getClientRect(popper),data}},hide:{order:800,enabled:!0,fn:function(data){if(!isModifierRequired(data.instance.modifiers,"hide","preventOverflow"))return data;var refRect=data.offsets.reference,bound=find(data.instance.modifiers,(function(modifier){return"preventOverflow"===modifier.name})).boundaries;if(refRect.bottom&lt;bound.top||refRect.left&gt;bound.right||refRect.top&gt;bound.bottom||refRect.right&lt;bound.left){if(!0===data.hide)return data;data.hide=!0,data.attributes["x-out-of-boundaries"]=""}else{if(!1===data.hide)return data;data.hide=!1,data.attributes["x-out-of-boundaries"]=!1}return data}},computeStyle:{order:850,enabled:!0,fn:function(data,options){var x=options.x,y=options.y,popper=data.offsets.popper,legacyGpuAccelerationOption=find(data.instance.modifiers,(function(modifier){return"applyStyle"===modifier.name})).gpuAcceleration;void 0!==legacyGpuAccelerationOption&amp;&amp;console.warn("WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!");var gpuAcceleration=void 0!==legacyGpuAccelerationOption?legacyGpuAccelerationOption:options.gpuAcceleration,offsetParentRect=getBoundingClientRect(getOffsetParent(data.instance.popper)),styles={position:popper.position},offsets={left:Math.floor(popper.left),top:Math.floor(popper.top),bottom:Math.floor(popper.bottom),right:Math.floor(popper.right)},sideA="bottom"===x?"top":"bottom",sideB="right"===y?"left":"right",prefixedProperty=getSupportedPropertyName("transform"),left=void 0,top=void 0;if(top="bottom"===sideA?-offsetParentRect.height+offsets.bottom:offsets.top,left="right"===sideB?-offsetParentRect.width+offsets.right:offsets.left,gpuAcceleration&amp;&amp;prefixedProperty)styles[prefixedProperty]="translate3d("+left+"px, "+top+"px, 0)",styles[sideA]=0,styles[sideB]=0,styles.willChange="transform";else{var invertTop="bottom"===sideA?-1:1,invertLeft="right"===sideB?-1:1;styles[sideA]=top*invertTop,styles[sideB]=left*invertLeft,styles.willChange=sideA+", "+sideB}var attributes={"x-placement":data.placement};return data.attributes=_extends({},attributes,data.attributes),data.styles=_extends({},styles,data.styles),data.arrowStyles=_extends({},data.offsets.arrow,data.arrowStyles),data},gpuAcceleration:!0,x:"bottom",y:"right"},applyStyle:{order:900,enabled:!0,fn:function(data){var element,attributes;return setStyles(data.instance.popper,data.styles),element=data.instance.popper,attributes=data.attributes,Object.keys(attributes).forEach((function(prop){!1!==attributes[prop]?element.setAttribute(prop,attributes[prop]):element.removeAttribute(prop)})),data.arrowElement&amp;&amp;Object.keys(data.arrowStyles).length&amp;&amp;setStyles(data.arrowElement,data.arrowStyles),data},onLoad:function(reference,popper,options,modifierOptions,state){var referenceOffsets=getReferenceOffsets(0,popper,reference),placement=computeAutoPlacement(options.placement,referenceOffsets,popper,reference,options.modifiers.flip.boundariesElement,options.modifiers.flip.padding);return popper.setAttribute("x-placement",placement),setStyles(popper,{position:"absolute"}),options},gpuAcceleration:void 0}},Defaults={placement:"bottom",eventsEnabled:!0,removeOnDestroy:!1,onCreate:function(){},onUpdate:function(){},modifiers:modifiers},Popper=function(){function Popper(reference,popper){var _this=this,options=arguments.length&gt;2&amp;&amp;void 0!==arguments[2]?arguments[2]:{};classCallCheck(this,Popper),this.scheduleUpdate=function(){return requestAnimationFrame(_this.update)},this.update=debounce(this.update.bind(this)),this.options=_extends({},Popper.Defaults,options),this.state={isDestroyed:!1,isCreated:!1,scrollParents:[]},this.reference=reference&amp;&amp;reference.jquery?reference[0]:reference,this.popper=popper&amp;&amp;popper.jquery?popper[0]:popper,this.options.modifiers={},Object.keys(_extends({},Popper.Defaults.modifiers,options.modifiers)).forEach((function(name){_this.options.modifiers[name]=_extends({},Popper.Defaults.modifiers[name]||{},options.modifiers?options.modifiers[name]:{})})),this.modifiers=Object.keys(this.options.modifiers).map((function(name){return _extends({name:name},_this.options.modifiers[name])})).sort((function(a,b){return a.order-b.order})),this.modifiers.forEach((function(modifierOptions){modifierOptions.enabled&amp;&amp;isFunction(modifierOptions.onLoad)&amp;&amp;modifierOptions.onLoad(_this.reference,_this.popper,_this.options,modifierOptions,_this.state)})),this.update();var eventsEnabled=this.options.eventsEnabled;eventsEnabled&amp;&amp;this.enableEventListeners(),this.state.eventsEnabled=eventsEnabled}return createClass(Popper,[{key:"update",value:function(){return update.call(this)}},{key:"destroy",value:function(){return destroy.call(this)}},{key:"enableEventListeners",value:function(){return enableEventListeners.call(this)}},{key:"disableEventListeners",value:function(){return disableEventListeners.call(this)}}]),Popper}();return Popper.Utils=("undefined"!=typeof window?window:global).PopperUtils,Popper.placements=placements,Popper.Defaults=Defaults,Popper}));
/**
 * Autocomplete wrapper for select2 library.
 *
 * @module     core/form-autocomplete
 * @copyright  2015 Damyon Wiese &lt;damyon@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.0
 */
define("core/form-autocomplete",["jquery","core/log","core/str","core/templates","core/notification","core/loadingicon","core/aria","core_form/changechecker"],(function($,log,str,templates,notification,LoadingIcon,Aria,FormChangeChecker){var KEYS_DOWN=40,KEYS_ENTER=13,KEYS_SPACE=32,KEYS_ESCAPE=27,KEYS_COMMA=44,KEYS_UP=38,KEYS_LEFT=37,KEYS_RIGHT=39,uniqueId=Date.now(),activateSelection=function(index,state){var selectionElement=$(document.getElementById(state.selectionId)),length=selectionElement.children("[aria-selected=true]").length;for(index%=length;index&lt;0;)index+=length;var element=$(selectionElement.children("[aria-selected=true]").get(index)),itemId=state.selectionId+"-"+index;return selectionElement.children().attr("data-active-selection",null).attr("id",""),element.attr("data-active-selection",!0).attr("id",itemId),selectionElement.attr("aria-activedescendant",itemId),selectionElement.attr("data-active-value",element.attr("data-value")),$.Deferred().resolve()},updateActiveSelectionFromState=function(state){var activeElement=function(state){var _selectionRegion$attr,selectionRegion=$(document.getElementById(state.selectionId)),activeId=selectionRegion.attr("aria-activedescendant");if(activeId){var activeElement=$(document.getElementById(activeId));if(activeElement.length)return activeElement}var activeValue=null===(_selectionRegion$attr=selectionRegion.attr("data-active-value"))||void 0===_selectionRegion$attr?void 0:_selectionRegion$attr.replace(/"/g,'\\"');return selectionRegion.find('[data-value="'+activeValue+'"]')}(state),activeValue=activeElement.attr("data-value"),selectionRegion=$(document.getElementById(state.selectionId));if(activeValue){var activeIndex=selectionRegion.find("[aria-selected=true]").index(activeElement);if(-1!==activeIndex)return void activateSelection(activeIndex,state)}activateSelection(0,state)},updateSelectionList=function(options,state,originalSelect){var pendingKey="form-autocomplete-updateSelectionList-"+state.inputId;M.util.js_pending(pendingKey);var items=[],newSelection=$(document.getElementById(state.selectionId));if(originalSelect.children("option").each((function(index,ele){var label;$(ele).prop("selected")&amp;&amp;(""!==(label=$(ele).data("html")?$(ele).data("html"):$(ele).html())&amp;&amp;items.push({label:label,value:$(ele).attr("value")}))})),!hasItemListChanged(state,items))return M.util.js_complete(pendingKey),Promise.resolve();state.items=items;var context=$.extend(options,state);return templates.render(options.templates.items,context).then((function(html,js){templates.replaceNodeContents(newSelection,html,js),updateActiveSelectionFromState(state)})).then((function(){return M.util.js_complete(pendingKey)})).catch(notification.exception)},hasItemListChanged=function(state,items){return state.items.length!==items.length||state.items.filter((item=&gt;-1===items.indexOf(item))).length&gt;0},notifyChange=function(originalSelect){FormChangeChecker.markFormChangedFromNode(originalSelect[0]),originalSelect[0].dispatchEvent(new Event("change"))},deselectItem=function(options,state,item,originalSelect){var selectedItemValue=$(item).attr("data-value");return void 0!==originalSelect.find("option").first().attr("value")&amp;&amp;originalSelect.prepend($("&lt;option&gt;")),originalSelect.children("option").each((function(index,ele){$(ele).attr("value")==selectedItemValue&amp;&amp;($(ele).prop("selected",!1),$(ele).attr("data-iscustom")&amp;&amp;$(ele).remove())})),updateSelectionList(options,state,originalSelect).then((function(){notifyChange(originalSelect)}))},activateItem=function(index,state){var inputElement=$(document.getElementById(state.inputId)),suggestionsElement=$(document.getElementById(state.suggestionsId)),length=suggestionsElement.children(":not([aria-hidden])").length;for(index%=length;index&lt;0;)index+=length;var element=$(suggestionsElement.children(":not([aria-hidden])").get(index)),globalIndex=$(suggestionsElement.children("[role=option]")).index(element),itemId=state.suggestionsId+"-"+globalIndex;suggestionsElement.children().attr("aria-selected",!1).attr("id",""),element.attr("aria-selected",!0).attr("id",itemId),inputElement.attr("aria-activedescendant",itemId);var scrollPos=element.offset().top-suggestionsElement.offset().top+suggestionsElement.scrollTop()-suggestionsElement.height()/2;return suggestionsElement.animate({scrollTop:scrollPos},100).promise()},closeSuggestions=function(state){var inputElement=$(document.getElementById(state.inputId)),suggestionsElement=$(document.getElementById(state.suggestionsId));return"true"===inputElement.attr("aria-expanded")&amp;&amp;inputElement.attr("aria-expanded",!1),inputElement.attr("aria-activedescendant",state.selectionId),Aria.hide(suggestionsElement.get()),suggestionsElement.hide(),$.Deferred().resolve()},updateSuggestions=function(options,state,query,originalSelect){var pendingKey="form-autocomplete-updateSuggestions-"+state.inputId;M.util.js_pending(pendingKey);var inputElement=$(document.getElementById(state.inputId)),suggestionsElement=$(document.getElementById(state.suggestionsId)),matchingElements=!1,suggestions=[];originalSelect.children("option").each((function(index,option){!0!==$(option).prop("selected")&amp;&amp;(suggestions[suggestions.length]={label:option.innerHTML,value:$(option).attr("value")})}));var searchquery=state.caseSensitive?query:query.toLocaleLowerCase(),context=$.extend({options:suggestions},options,state);return templates.render("core/form_autocomplete_suggestions",context).then((function(html,js){return templates.replaceNode(suggestionsElement,html,js),suggestionsElement=$(document.getElementById(state.suggestionsId)),Aria.unhide(suggestionsElement.get()),suggestionsElement.show(),suggestionsElement.children().each((function(index,node){node=$(node),options.caseSensitive&amp;&amp;node.text().indexOf(searchquery)&gt;-1||!options.caseSensitive&amp;&amp;node.text().toLocaleLowerCase().indexOf(searchquery)&gt;-1?(Aria.unhide(node.get()),node.show(),matchingElements=!0):(node.hide(),Aria.hide(node.get()))})),inputElement.attr("aria-expanded",!0),originalSelect.attr("data-notice")?suggestionsElement.html(originalSelect.attr("data-notice")):matchingElements?options.tags||activateItem(0,state):str.get_string("nosuggestions","form").done((function(nosuggestionsstr){suggestionsElement.html(nosuggestionsstr)})),suggestionsElement})).then((function(){return M.util.js_complete(pendingKey)})).catch(notification.exception)},createItem=function(options,state,originalSelect){var inputElement=$(document.getElementById(state.inputId)),tags=inputElement.val().split(","),found=!1;return $.each(tags,(function(tagindex,tag){if(""!==(tag=tag.trim())&amp;&amp;(options.multiple||originalSelect.children("option").prop("selected",!1),originalSelect.children("option").each((function(index,ele){$(ele).attr("value")==tag&amp;&amp;(found=!0,$(ele).prop("selected",!0))})),!found)){var option=$("&lt;option&gt;");option.append(document.createTextNode(tag)),option.attr("value",tag),originalSelect.append(option),option.prop("selected",!0),option.attr("data-iscustom",!0)}})),updateSelectionList(options,state,originalSelect).then((function(){notifyChange(originalSelect)})).then((function(){inputElement.val("")})).then((function(){return closeSuggestions(state)}))},selectCurrentItem=function(options,state,originalSelect){var inputElement=$(document.getElementById(state.inputId)),selectedItemValue=$(document.getElementById(state.suggestionsId)).children("[aria-selected=true]").attr("data-value");return options.multiple||originalSelect.children("option").prop("selected",!1),originalSelect.children("option").each((function(index,ele){$(ele).attr("value")==selectedItemValue&amp;&amp;$(ele).prop("selected",!0)})),updateSelectionList(options,state,originalSelect).then((function(){notifyChange(originalSelect)})).then((function(){return options.closeSuggestionsOnSelect?(inputElement.val(""),closeSuggestions(state)):(inputElement.focus(),updateSuggestions(options,state,inputElement.val(),originalSelect))}))},updateAjax=function(e,options,state,originalSelect,ajaxHandler){var pendingPromise=addPendingJSPromise("updateAjax"),parentElement=$(document.getElementById(state.selectId)).parent();LoadingIcon.addIconToContainerRemoveOnCompletion(parentElement,pendingPromise);var query=$(e.currentTarget).val();return ajaxHandler.transport(options.selector,query,(function(results){var processedResults=ajaxHandler.processResults(options.selector,results),existingValues=[];if(originalSelect.children("option").each((function(optionIndex,option){(option=$(option)).prop("selected")?existingValues.push(String(option.attr("value"))):option.remove()})),!options.multiple&amp;&amp;0===originalSelect.children("option").length){var option=$("&lt;option&gt;");originalSelect.append(option)}$.isArray(processedResults)?($.each(processedResults,(function(resultIndex,result){if(-1===existingValues.indexOf(String(result.value))){var option=$("&lt;option&gt;");option.append(result.label),option.attr("value",result.value),originalSelect.append(option)}})),originalSelect.attr("data-notice","")):originalSelect.attr("data-notice",processedResults),pendingPromise.resolve(updateSuggestions(options,state,"",originalSelect))}),(function(error){pendingPromise.reject(error)})),pendingPromise},addNavigation=function(options,state,originalSelect){var inputElement=$(document.getElementById(state.inputId));(inputElement.on("keydown",(function(e){var pendingJsPromise=addPendingJSPromise("addNavigation-"+state.inputId+"-"+e.keyCode);switch(e.keyCode){case KEYS_DOWN:return options.showSuggestions?("true"===inputElement.attr("aria-expanded")?pendingJsPromise.resolve(function(state){var suggestionsElement=$(document.getElementById(state.suggestionsId)),element=suggestionsElement.children("[aria-selected=true]"),current=suggestionsElement.children(":not([aria-hidden])").index(element);return activateItem(current+1,state)}(state)):!inputElement.val()&amp;&amp;options.ajax?require([options.ajax],(function(ajaxHandler){pendingJsPromise.resolve(updateAjax(e,options,state,originalSelect,ajaxHandler))})):pendingJsPromise.resolve(updateSuggestions(options,state,inputElement.val(),originalSelect)),e.preventDefault(),!1):(pendingJsPromise.resolve(),!0);case KEYS_UP:return pendingJsPromise.resolve(function(state){var suggestionsElement=$(document.getElementById(state.suggestionsId)),element=suggestionsElement.children("[aria-selected=true]"),current=suggestionsElement.children(":not([aria-hidden])").index(element);return activateItem(current-1,state)}(state)),e.preventDefault(),!1;case KEYS_ENTER:var suggestionsElement=$(document.getElementById(state.suggestionsId));return"true"===inputElement.attr("aria-expanded")&amp;&amp;suggestionsElement.children("[aria-selected=true]").length&gt;0?pendingJsPromise.resolve(selectCurrentItem(options,state,originalSelect)):options.tags?pendingJsPromise.resolve(createItem(options,state,originalSelect)):pendingJsPromise.resolve(),e.preventDefault(),!1;case KEYS_ESCAPE:return"true"===inputElement.attr("aria-expanded")?pendingJsPromise.resolve(closeSuggestions(state)):pendingJsPromise.resolve(),e.preventDefault(),!1}return pendingJsPromise.resolve(),!0})),inputElement.on("keypress",(function(e){return e.keyCode!==KEYS_COMMA||(options.tags&amp;&amp;addPendingJSPromise("keypress-"+e.keyCode).resolve(createItem(options,state,originalSelect)),e.preventDefault(),!1)})),inputElement.closest("form").on("submit",(function(){return options.tags&amp;&amp;addPendingJSPromise("form-autocomplete-submit").resolve(createItem(options,state,originalSelect)),!0})),inputElement.on("blur",(function(){var pendingPromise=addPendingJSPromise("form-autocomplete-blur");window.setTimeout((function(){var focusElement=$(document.activeElement),timeoutPromise=$.Deferred();focusElement.is(document.getElementById(state.suggestionsId))?inputElement.focus():!focusElement.is(inputElement)&amp;&amp;$(document.getElementById(state.inputId)).length&amp;&amp;(options.tags&amp;&amp;timeoutPromise.then((function(){return createItem(options,state,originalSelect)})).catch(),timeoutPromise.then((function(){return closeSuggestions(state)})).catch()),timeoutPromise.then((function(){return pendingPromise.resolve()})).catch(),timeoutPromise.resolve()}),500)})),options.showSuggestions)&amp;&amp;$(document.getElementById(state.downArrowId)).on("click",(function(e){var pendingPromise=addPendingJSPromise("form-autocomplete-show-suggestions");inputElement.focus(),!inputElement.val()&amp;&amp;options.ajax?require([options.ajax],(function(ajaxHandler){pendingPromise.resolve(updateAjax(e,options,state,originalSelect,ajaxHandler))})):pendingPromise.resolve(updateSuggestions(options,state,inputElement.val(),originalSelect))}));var suggestionsElement=$(document.getElementById(state.suggestionsId));suggestionsElement.parent().prop("onclick",null).off("click"),suggestionsElement.parent().on("click","#".concat(state.suggestionsId," [role=option]"),(function(e){var pendingPromise=addPendingJSPromise("form-autocomplete-parent"),element=$(e.currentTarget).closest("[role=option]"),current=$(document.getElementById(state.suggestionsId)).children(":not([aria-hidden])").index(element);activateItem(current,state).then((function(){return selectCurrentItem(options,state,originalSelect)})).then((function(){return pendingPromise.resolve()})).catch()}));var selectionElement=$(document.getElementById(state.selectionId));selectionElement.on("click","[role=option]",(function(e){addPendingJSPromise("form-autocomplete-clicks").resolve(deselectItem(options,state,$(e.currentTarget),originalSelect))})),selectionElement.on("focus",(function(){updateActiveSelectionFromState(state)})),selectionElement.on("keydown",(function(e){var pendingPromise=addPendingJSPromise("form-autocomplete-keydown-"+e.keyCode);switch(e.keyCode){case KEYS_RIGHT:case KEYS_DOWN:return e.preventDefault(),void pendingPromise.resolve(function(state){var selectionsElement=$(document.getElementById(state.selectionId)),element=selectionsElement.children("[data-active-selection]"),current=0;return element?(current=selectionsElement.children("[aria-selected=true]").index(element),current+=1):current=0,activateSelection(current,state)}(state));case KEYS_LEFT:case KEYS_UP:return e.preventDefault(),void pendingPromise.resolve(function(state){var selectionsElement=$(document.getElementById(state.selectionId)),element=selectionsElement.children("[data-active-selection]");if(!element)return activateSelection(0,state);var current=selectionsElement.children("[aria-selected=true]").index(element);return activateSelection(current-1,state)}(state));case KEYS_SPACE:case KEYS_ENTER:var selectedItem=$(document.getElementById(state.selectionId)).children("[data-active-selection]");return void(selectedItem&amp;&amp;(e.preventDefault(),pendingPromise.resolve(deselectItem(options,state,selectedItem,originalSelect))))}pendingPromise.resolve()})),options.showSuggestions&amp;&amp;(inputElement.on("focus",(function(e){var query=$(e.currentTarget).val();$(e.currentTarget).data("last-value",query)})),options.ajax?require([options.ajax],(function(ajaxHandler){var throttleTimeout=null,inProgress=!1,pendingKey="autocomplete-throttledhandler",handler=function(e){throttleTimeout=null,inProgress=!0,updateAjax(e,options,state,originalSelect,ajaxHandler).then((function(){return null===throttleTimeout&amp;&amp;M.util.js_complete(pendingKey),inProgress=!1,arguments[0]})).catch(notification.exception)},throttledHandler=function(e){window.clearTimeout(throttleTimeout),inProgress?throttleTimeout=window.setTimeout(throttledHandler.bind(this,e),100):(null===throttleTimeout&amp;&amp;M.util.js_pending(pendingKey),throttleTimeout=window.setTimeout(handler.bind(this,e),300))};inputElement.on("input",(function(e){var query=$(e.currentTarget).val();$(e.currentTarget).data("last-value")!==query&amp;&amp;throttledHandler(e),$(e.currentTarget).data("last-value",query)}))})):inputElement.on("input",(function(e){var query=$(e.currentTarget).val();$(e.currentTarget).data("last-value")!==query&amp;&amp;updateSuggestions(options,state,query,originalSelect),$(e.currentTarget).data("last-value",query)})))},addPendingJSPromise=function(key){var pendingKey="form-autocomplete:"+key;M.util.js_pending(pendingKey);var pendingPromise=$.Deferred();return pendingPromise.then((function(){return M.util.js_complete(pendingKey),arguments[0]})).catch(notification.exception),pendingPromise};return{enhance:function(selector,tags,ajax,placeholder,caseSensitive,showSuggestions,noSelectionString,closeSuggestionsOnSelect,templateOverrides){var options={selector:selector,tags:!1,ajax:!1,placeholder:placeholder,caseSensitive:!1,showSuggestions:!0,noSelectionString:noSelectionString,templates:$.extend({input:"core/form_autocomplete_input",items:"core/form_autocomplete_selection_items",layout:"core/form_autocomplete_layout",selection:"core/form_autocomplete_selection",suggestions:"core/form_autocomplete_suggestions"},templateOverrides)},pendingKey="autocomplete-setup-"+selector;M.util.js_pending(pendingKey),void 0!==tags&amp;&amp;(options.tags=tags),void 0!==ajax&amp;&amp;(options.ajax=ajax),void 0!==caseSensitive&amp;&amp;(options.caseSensitive=caseSensitive),void 0!==showSuggestions&amp;&amp;(options.showSuggestions=showSuggestions),void 0===noSelectionString&amp;&amp;str.get_string("noselection","form").done((function(result){options.noSelectionString=result})).fail(notification.exception);var originalSelect=$(selector);if(!originalSelect)return log.debug("Selector not found: "+selector),M.util.js_complete(pendingKey),!1;if("enhanced"===originalSelect.data("enhanced"))return M.util.js_complete(pendingKey),!1;originalSelect.data("enhanced","enhanced"),Aria.hide(originalSelect.get()),originalSelect.css("visibility","hidden");var state={selectId:originalSelect.attr("id"),inputId:"form_autocomplete_input-"+uniqueId,suggestionsId:"form_autocomplete_suggestions-"+uniqueId,selectionId:"form_autocomplete_selection-"+uniqueId,downArrowId:"form_autocomplete_downarrow-"+uniqueId,items:[]};uniqueId++,options.multiple=originalSelect.attr("multiple"),options.multiple||originalSelect.prepend("&lt;option&gt;"),options.closeSuggestionsOnSelect=void 0!==closeSuggestionsOnSelect?closeSuggestionsOnSelect:!options.multiple;var originalLabel=$("[for="+state.selectId+"]"),suggestions=[];originalSelect.children("option").each((function(index,option){suggestions[index]={label:option.innerHTML,value:$(option).attr("value")}}));var context=$.extend({},options,state);context.options=suggestions,context.items=[];var collectedjs="",renderLayout=templates.render(options.templates.layout,{}).then((function(html){return $(html)})),renderInput=templates.render(options.templates.input,context).then((function(html,js){return collectedjs+=js,$(html)})),renderDatalist=templates.render(options.templates.suggestions,context).then((function(html,js){return collectedjs+=js,$(html)})),renderSelection=templates.render(options.templates.selection,context).then((function(html,js){return collectedjs+=js,$(html)}));return $.when(renderLayout,renderInput,renderDatalist,renderSelection).then((function(layout,input,suggestions,selection){originalSelect.hide();var container=originalSelect.parent();input.find("input").attr("data-fieldtype","autocomplete"),container.append(layout),container.find('[data-region="form_autocomplete-input"]').replaceWith(input),container.find('[data-region="form_autocomplete-suggestions"]').replaceWith(suggestions),container.find('[data-region="form_autocomplete-selection"]').replaceWith(selection),templates.runTemplateJS(collectedjs),originalLabel.attr("for",state.inputId),addNavigation(options,state,originalSelect);var suggestionsElement=$(document.getElementById(state.suggestionsId));suggestionsElement.hide(),Aria.hide(suggestionsElement.get())})).then((function(){return updateSelectionList(options,state,originalSelect)})).then((function(){return M.util.js_complete(pendingKey)})).catch((function(error){M.util.js_complete(pendingKey),notification.exception(error)}))}}}));
/**
 * Contain the logic for modals.
 *
 * @module core/modal
 * @class core/modal
 * @copyright  2016 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core/modal",["jquery","core/templates","core/notification","core/key_codes","core/custom_interaction_events","core/modal_backdrop","core_filters/events","core/modal_events","core/local/aria/focuslock","core/pending","core/aria","core/fullscreen"],(function($,Templates,Notification,KeyCodes,CustomEvents,ModalBackdrop,FilterEvents,ModalEvents,FocusLock,Pending,Aria,Fullscreen){var backdropPromise,SELECTORS_CONTAINER='[data-region="modal-container"]',SELECTORS_MODAL='[data-region="modal"]',SELECTORS_HEADER='[data-region="header"]',SELECTORS_TITLE='[data-region="title"]',SELECTORS_BODY='[data-region="body"]',SELECTORS_FOOTER='[data-region="footer"]',SELECTORS_HIDE='[data-action="hide"]',SELECTORS_DIALOG="[role=dialog]",SELECTORS_FORM="form",SELECTORS_MENU_BAR="[role=menubar]",SELECTORS_HAS_Z_INDEX=".moodle-has-zindex",TEMPLATES_LOADING="core/loading",TEMPLATES_BACKDROP="core/modal_backdrop",modalCounter=0,Modal=function(root){this.root=$(root),this.modal=this.root.find(SELECTORS_MODAL),this.header=this.modal.find(SELECTORS_HEADER),this.headerPromise=$.Deferred(),this.title=this.header.find(SELECTORS_TITLE),this.titlePromise=$.Deferred(),this.body=this.modal.find(SELECTORS_BODY),this.bodyPromise=$.Deferred(),this.footer=this.modal.find(SELECTORS_FOOTER),this.footerPromise=$.Deferred(),this.hiddenSiblings=[],this.isAttached=!1,this.bodyJS=null,this.footerJS=null,this.modalCount=modalCounter++,this.attachmentPoint=document.createElement("div"),document.body.append(this.attachmentPoint),this.focusOnClose=null,this.root.is(SELECTORS_CONTAINER)||Notification.exception({message:"Element is not a modal container"}),this.modal.length||Notification.exception({message:"Container does not contain a modal"}),this.header.length||Notification.exception({message:"Modal is missing a header region"}),this.title.length||Notification.exception({message:"Modal header is missing a title region"}),this.body.length||Notification.exception({message:"Modal is missing a body region"}),this.footer.length||Notification.exception({message:"Modal is missing a footer region"}),this.registerEventListeners()};return Modal.prototype.attachToDOM=function(){this.getAttachmentPoint().append(this.root),this.isAttached||(FocusLock.trapFocus(this.root[0]),this.bodyJS&amp;&amp;(Templates.runTemplateJS(this.bodyJS),this.bodyJS=null),this.footerJS&amp;&amp;(Templates.runTemplateJS(this.footerJS),this.footerJS=null),this.isAttached=!0)},Modal.prototype.countOtherVisibleModals=function(){var count=0;return $("body").find(SELECTORS_CONTAINER).each(function(index,element){element=$(element),!this.root.is(element)&amp;&amp;element.hasClass("show")&amp;&amp;count++}.bind(this)),count},Modal.prototype.getBackdrop=function(){return backdropPromise||(backdropPromise=Templates.render(TEMPLATES_BACKDROP,{}).then((function(html){var element=$(html);return new ModalBackdrop(element)})).fail(Notification.exception)),backdropPromise},Modal.prototype.getRoot=function(){return this.root},Modal.prototype.getModal=function(){return this.modal},Modal.prototype.getTitle=function(){return this.title},Modal.prototype.getBody=function(){return this.body},Modal.prototype.getFooter=function(){return this.footer},Modal.prototype.getTitlePromise=function(){return this.titlePromise},Modal.prototype.getBodyPromise=function(){return this.bodyPromise},Modal.prototype.getFooterPromise=function(){return this.footerPromise},Modal.prototype.getModalCount=function(){return this.modalCount},Modal.prototype.setTitle=function(value){var title=this.getTitle();this.titlePromise=$.Deferred(),this.asyncSet(value,title.html.bind(title)).then(function(){this.titlePromise.resolve(title)}.bind(this)).catch(Notification.exception)},Modal.prototype.setBody=function(value){this.bodyPromise=$.Deferred();var body=this.getBody();if("string"==typeof value)body.html(value),FilterEvents.notifyFilterContentUpdated(body),this.getRoot().trigger(ModalEvents.bodyRendered,this),this.bodyPromise.resolve(body);else{var jsPendingId="amd-modal-js-pending-id-"+this.getModalCount();M.util.js_pending(jsPendingId);var contentPromise=null;if(body.css("overflow","hidden"),"pending"==(value=$.when(value)).state()){var height=body.innerHeight();height&lt;100&amp;&amp;(height=100),body.animate({height:height+"px"},150),body.html(""),contentPromise=Templates.render(TEMPLATES_LOADING,{}).then((function(html){var loadingIcon=$(html).hide();return body.html(loadingIcon),loadingIcon.fadeIn(150),$.when(loadingIcon.promise(),value)})).then((function(loadingIcon){return loadingIcon.fadeOut(100).promise()})).then((function(){return value}))}else contentPromise=value;contentPromise.then(function(html,js){var result=null;if(this.isVisible()){body.css("opacity",0);var currentHeight=body.innerHeight();body.html(html),body.css("height","");var newHeight=body.innerHeight();body.css("height",currentHeight+"px"),result=body.animate({height:newHeight+"px",opacity:1},{duration:150,queue:!1}).promise()}else body.html(html);return js&amp;&amp;(this.isAttached?Templates.runTemplateJS(js):this.bodyJS=js),result}.bind(this)).then(function(result){return FilterEvents.notifyFilterContentUpdated(body),this.getRoot().trigger(ModalEvents.bodyRendered,this),result}.bind(this)).then(function(){this.bodyPromise.resolve(body)}.bind(this)).fail(Notification.exception).always((function(){body.css("height",""),body.css("overflow",""),body.css("opacity",""),M.util.js_complete(jsPendingId)})).fail(Notification.exception)}},Modal.prototype.setBodyContent=function(promise){return promise.then((_ref=&gt;{let{html:html,js:js}=_ref;return this.setBody($.when(html,js))})).catch((exception=&gt;{throw this.hide(),exception}))},Modal.prototype.setFooter=function(value){this.showFooter(),this.footerPromise=$.Deferred();var footer=this.getFooter();"string"==typeof value?(footer.html(value),this.footerPromise.resolve(footer)):Templates.render(TEMPLATES_LOADING,{}).then((function(html){return footer.html(html),value})).then(function(html,js){return footer.html(html),js&amp;&amp;(this.isAttached?Templates.runTemplateJS(js):this.footerJS=js),footer}.bind(this)).then(function(footer){this.footerPromise.resolve(footer)}.bind(this)).catch(Notification.exception)},Modal.prototype.hasFooterContent=function(){return!!this.getFooter().children().length},Modal.prototype.hideFooter=function(){this.getFooter().addClass("hidden")},Modal.prototype.showFooter=function(){this.getFooter().removeClass("hidden")},Modal.prototype.setLarge=function(){this.isLarge()||this.getModal().addClass("modal-lg")},Modal.prototype.isLarge=function(){return this.getModal().hasClass("modal-lg")},Modal.prototype.setSmall=function(){this.isSmall()||this.getModal().removeClass("modal-lg")},Modal.prototype.isSmall=function(){return!this.getModal().hasClass("modal-lg")},Modal.prototype.setScrollable=function(value){value?this.getModal()[0].classList.add("modal-dialog-scrollable"):this.getModal()[0].classList.remove("modal-dialog-scrollable")},Modal.prototype.calculateZIndex=function(){var items=$(SELECTORS_DIALOG+", "+SELECTORS_MENU_BAR+", "+SELECTORS_HAS_Z_INDEX),zIndex=parseInt(this.root.css("z-index"));return items.each((function(index,item){var itemZIndex=(item=$(item)).css("z-index")?parseInt(item.css("z-index")):0;itemZIndex&gt;zIndex&amp;&amp;(zIndex=itemZIndex)})),zIndex},Modal.prototype.isVisible=function(){return this.root.hasClass("show")},Modal.prototype.hasFocus=function(){var target=$(document.activeElement);return this.root.is(target)||this.root.has(target).length},Modal.prototype.hasTransitions=function(){return this.getRoot().hasClass("fade")},Modal.prototype.getAttachmentPoint=function(){return $(Fullscreen.getElement()||this.attachmentPoint)},Modal.prototype.show=function(){if(this.isVisible())return $.Deferred().resolve();var pendingPromise=new Pending("core/modal:show");return this.hasFooterContent()?this.showFooter():this.hideFooter(),this.attachToDOM(),!this.focusOnClose&amp;&amp;document.activeElement&amp;&amp;(this.focusOnClose=document.activeElement),this.getBackdrop().then(function(backdrop){var newIndex=this.calculateZIndex()+2,newBackdropIndex=newIndex-1;this.root.css("z-index",newIndex),backdrop.setZIndex(newBackdropIndex),backdrop.show(),this.root.removeClass("hide").addClass("show"),this.accessibilityShow(),this.getModal().focus(),$("body").addClass("modal-open"),this.root.trigger(ModalEvents.shown,this)}.bind(this)).then(pendingPromise.resolve)},Modal.prototype.hideIfNotForm=function(){0==this.modal.find(SELECTORS_FORM).length&amp;&amp;this.hide()},Modal.prototype.hide=function(){this.getBackdrop().done(function(backdrop){FocusLock.untrapFocus(),this.countOtherVisibleModals()||(backdrop.hide(),$("body").removeClass("modal-open"));var currentIndex=parseInt(this.root.css("z-index"));this.root.css("z-index",""),backdrop.setZIndex(currentIndex-3),this.accessibilityHide(),this.hasTransitions()?this.getRoot().one("transitionend webkitTransitionEnd oTransitionEnd",function(){this.getRoot().removeClass("show").addClass("hide")}.bind(this)):this.getRoot().removeClass("show").addClass("hide"),$(document.body).find(this.getRoot()).length&amp;&amp;$(document.body).append(this.getRoot()),this.root.trigger(ModalEvents.hidden,this)}.bind(this))},Modal.prototype.destroy=function(){this.hide(),this.root.remove(),this.root.trigger(ModalEvents.destroyed,this),this.attachmentPoint.remove()},Modal.prototype.accessibilityShow=function(){Aria.unhide(this.root.get()),Aria.hideSiblings(this.root.get()[0])},Modal.prototype.accessibilityHide=function(){Aria.unhideSiblings(this.root.get()[0]),Aria.hide(this.root.get())},Modal.prototype.registerEventListeners=function(){this.getRoot().on("keydown",function(e){this.isVisible()&amp;&amp;e.keyCode==KeyCodes.escape&amp;&amp;(this.removeOnClose?this.destroy():this.hide())}.bind(this)),this.getRoot().click(function(e){if(!$(e.target).closest(SELECTORS_MODAL).length&amp;&amp;$(e.target).closest(SELECTORS_CONTAINER).length){var outsideClickEvent=$.Event(ModalEvents.outsideClick);this.getRoot().trigger(outsideClickEvent,this),outsideClickEvent.isDefaultPrevented()||this.hideIfNotForm()}}.bind(this)),CustomEvents.define(this.getModal(),[CustomEvents.events.activate]),this.getModal().on(CustomEvents.events.activate,SELECTORS_HIDE,function(e,data){this.removeOnClose?this.destroy():this.hide(),data.originalEvent.preventDefault()}.bind(this)),this.getRoot().on(ModalEvents.hidden,(()=&gt;{this.focusOnClose&amp;&amp;this.focusOnClose.focus()}))},Modal.prototype.registerCloseOnCancel=function(){this.getModal().on(CustomEvents.events.activate,this.getActionSelector("cancel"),function(e,data){var cancelEvent=$.Event(ModalEvents.cancel);this.getRoot().trigger(cancelEvent,this),cancelEvent.isDefaultPrevented()||(data.originalEvent.preventDefault(),this.removeOnClose?this.destroy():this.hide())}.bind(this))},Modal.prototype.registerCloseOnSave=function(){this.getModal().on(CustomEvents.events.activate,this.getActionSelector("save"),function(e,data){var saveEvent=$.Event(ModalEvents.save);this.getRoot().trigger(saveEvent,this),saveEvent.isDefaultPrevented()||(data.originalEvent.preventDefault(),this.removeOnClose?this.destroy():this.hide())}.bind(this))},Modal.prototype.asyncSet=function(value,setFunction){var p=value;return"object"==typeof value&amp;&amp;value.hasOwnProperty("then")||(p=$.Deferred()).resolve(value),p.then((function(content){setFunction(content)})).fail(Notification.exception),p},Modal.prototype.setButtonText=function(action,value){const button=this.getFooter().find(this.getActionSelector(action));if(!button)throw new Error("Unable to find the '"+action+"' button");return this.asyncSet(value,button.text.bind(button))},Modal.prototype.getActionSelector=function(action){return"[data-action='"+action+"']"},Modal.prototype.setRemoveOnClose=function(remove){this.removeOnClose=remove},Modal.prototype.setReturnElement=function(element){this.focusOnClose=element},Modal}));
define("core/usermenu",["exports","jquery","core/key_codes"],(function(_exports,_jquery,_key_codes){var obj;
/**
   * Initializes and handles events in the user menu.
   *
   * @module     core/usermenu
   * @copyright  2021 Moodle
   * @author     Mihail Geshoski &lt;mihail@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_jquery=(obj=_jquery)&amp;&amp;obj.__esModule?obj:{default:obj};const selectors_userMenu=".usermenu",selectors_userMenuCarousel=".usermenu #usermenu-carousel",selectors_userMenuCarouselItem=".usermenu #usermenu-carousel .carousel-item",selectors_userMenuCarouselItemActive=".usermenu #usermenu-carousel .carousel-item.active",selectors_userMenuCarouselNavigationLink=".usermenu #usermenu-carousel .carousel-navigation-link";var _default={init:()=&gt;{(()=&gt;{const userMenu=document.querySelector(selectors_userMenu);(0,_jquery.default)(selectors_userMenu).on("shown.bs.dropdown",(()=&gt;{const activeCarouselItem=document.querySelector(selectors_userMenuCarouselItemActive);activeCarouselItem.focus(),userMenu.querySelectorAll(selectors_userMenuCarouselItem).forEach((element=&gt;{element.classList.contains("active")||(element.style.width=activeCarouselItem.offsetWidth+"px",element.style.height=activeCarouselItem.offsetHeight+"px")}))})),userMenu.addEventListener("click",(e=&gt;{e.target.matches(selectors_userMenuCarouselNavigationLink)&amp;&amp;carouselManagement(e)})),userMenu.addEventListener("keydown",(e=&gt;{e.keyCode!==_key_codes.space&amp;&amp;e.keyCode!==_key_codes.enter||!e.target.matches(selectors_userMenuCarouselNavigationLink)||(e.preventDefault(),carouselManagement(e))}));const carouselManagement=e=&gt;{e.stopPropagation();const targetedCarouselItemId=e.target.dataset.carouselTargetId,targetedCarouselItem=userMenu.querySelector("#"+targetedCarouselItemId),index=Array.from(targetedCarouselItem.parentNode.children).indexOf(targetedCarouselItem);(0,_jquery.default)(selectors_userMenuCarousel).carousel(index)};(0,_jquery.default)(selectors_userMenu).on("hide.bs.dropdown",(()=&gt;{(0,_jquery.default)(selectors_userMenuCarousel).carousel(0)})),(0,_jquery.default)(selectors_userMenuCarousel).on("slid.bs.carousel",(()=&gt;{userMenu.querySelector(selectors_userMenuCarouselItemActive).focus()}))})()}};return _exports.default=_default,_exports.default}));
/**
 * This is an empty module, that is required before all other modules.
 * Because every module is returned from a request for any other module, this
 * forces the loading of all modules with a single request.
 *
 * @module     core/log
 * @copyright  2015 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core/log",["core/loglevel"],(function(log){var originalFactory=log.methodFactory;return log.methodFactory=function(methodName,logLevel){var rawMethod=originalFactory(methodName,logLevel);return function(message,source){rawMethod(source?source+": "+message:message)}},log.setConfig=function(config){void 0!==config.level&amp;&amp;log.setLevel(config.level)},log}));
define("core/moremenu",["exports","jquery","core/menu_navigation"],(function(_exports,_jquery,_menu_navigation){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Moves wrapping navigation items into a more menu.
   *
   * @module     core/moremenu
   * @copyright  2021 Moodle
   * @author     Bas Brands &lt;bas@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_jquery=_interopRequireDefault(_jquery),_menu_navigation=_interopRequireDefault(_menu_navigation);const Selectors_regions={moredropdown:'[data-region="moredropdown"]',morebutton:'[data-region="morebutton"]'},Selectors_classes={dropdownitem:"dropdown-item",dropdownmoremenu:"dropdownmoremenu",hidden:"d-none",active:"active",nav:"nav",navlink:"nav-link",observed:"observed"},Selectors_attributes={menu:'[role="menu"]',dropdowntoggle:'[data-toggle="dropdown"]'};let isTabListMenu=!1;const autoCollapse=menu=&gt;{const maxHeight=menu.parentNode.offsetHeight+1,moreDropdown=menu.querySelector(Selectors_regions.moredropdown),moreButton=menu.querySelector(Selectors_regions.morebutton);if(menu.offsetHeight&gt;maxHeight){moreButton.classList.remove(Selectors_classes.hidden);let menuHeight=0;Array.from(menu.children).reverse().forEach((item=&gt;{item.classList.contains(Selectors_classes.dropdownmoremenu)?menu.offsetHeight&gt;maxHeight&amp;&amp;(menuHeight=menu.offsetHeight):menu.offsetHeight&gt;maxHeight?moveIntoMoreDropdown(menu,item,!0):menuHeight&gt;maxHeight&amp;&amp;(moveIntoMoreDropdown(menu,item,!0),menuHeight=0)}))}else"children"in moreDropdown&amp;&amp;(Array.from(moreDropdown.children).forEach((item=&gt;{if(menu.offsetHeight&lt;maxHeight&amp;&amp;"true"!==item.dataset.forceintomoremenu){const lastNode=moreDropdown.removeChild(item);moveOutOfMoreDropdown(menu,lastNode)}})),0===Array.from(moreDropdown.children).length&amp;&amp;moreButton.classList.add(Selectors_classes.hidden)),menu.offsetHeight&gt;maxHeight&amp;&amp;autoCollapse(menu);menu.parentNode.classList.add(Selectors_classes.observed)},moveIntoMoreDropdown=function(menu,navNode){let prepend=arguments.length&gt;2&amp;&amp;void 0!==arguments[2]&amp;&amp;arguments[2];const moreDropdown=menu.querySelector(Selectors_regions.moredropdown),dropdownToggle=menu.querySelector(Selectors_attributes.dropdowntoggle),navLink=navNode.querySelector("."+Selectors_classes.navlink);navLink.classList.contains(Selectors_classes.active)&amp;&amp;(dropdownToggle.classList.add(Selectors_classes.active),dropdownToggle.setAttribute("tabindex","0"),navLink.setAttribute("tabindex","-1"),isTabListMenu&amp;&amp;navLink.removeAttribute("aria-selected"),navLink.setAttribute("aria-current","true")),navLink.setAttribute("role","menuitem"),navLink.classList.remove(Selectors_classes.navlink),navLink.classList.add(Selectors_classes.dropdownitem),prepend?moreDropdown.prepend(navNode):moreDropdown.append(navNode)},moveOutOfMoreDropdown=(menu,navNode)=&gt;{const moreButton=menu.querySelector(Selectors_regions.morebutton),dropdownToggle=menu.querySelector(Selectors_attributes.dropdowntoggle),navLink=navNode.querySelector("."+Selectors_classes.dropdownitem);isTabListMenu&amp;&amp;navLink.setAttribute("role","tab"),navLink.classList.contains(Selectors_classes.active)&amp;&amp;(dropdownToggle.classList.remove(Selectors_classes.active),dropdownToggle.setAttribute("tabindex","-1"),navLink.setAttribute("tabindex","0"),isTabListMenu&amp;&amp;(navLink.removeAttribute("aria-current"),navLink.setAttribute("aria-selected","true"))),navLink.classList.remove(Selectors_classes.dropdownitem),navLink.classList.add(Selectors_classes.navlink),menu.insertBefore(navNode,moreButton)};return _exports.default=menu=&gt;{isTabListMenu="tablist"===menu.getAttribute("role");if(!window.location.hash){const itemRole=isTabListMenu?"tab":"menuitem",menuListItem=menu.firstElementChild,roleSelector="[role=".concat(itemRole,"]"),menuItem=menuListItem.querySelector(roleSelector),ariaAttribute=isTabListMenu?"aria-selected":"aria-current";menu.querySelector("[".concat(ariaAttribute,"='true']"))||(menuItem.setAttribute(ariaAttribute,"true"),menuItem.setAttribute("tabindex","0"))}if("children"in menu){const moreButton=menu.querySelector(Selectors_regions.morebutton);Array.from(menu.children).forEach((item=&gt;{item.classList.contains(Selectors_classes.dropdownmoremenu)||"true"!==item.dataset.forceintomoremenu||(moveIntoMoreDropdown(menu,item,!1),moreButton.classList.contains(Selectors_classes.hidden)&amp;&amp;moreButton.classList.remove(Selectors_classes.hidden))}))}autoCollapse(menu),(0,_menu_navigation.default)(menu),window.addEventListener("resize",(()=&gt;{autoCollapse(menu),(0,_menu_navigation.default)(menu)}));const toggledropdown=e=&gt;{const innerMenu=e.target.parentNode.querySelector(Selectors_attributes.menu);innerMenu&amp;&amp;innerMenu.classList.toggle("show"),e.stopPropagation()};(0,_jquery.default)("."+Selectors_classes.dropdownmoremenu).on("show.bs.dropdown",(function(){menu.querySelector(Selectors_regions.moredropdown).querySelectorAll(".dropdown").forEach((dropdown=&gt;{dropdown.removeEventListener("click",toggledropdown,!0),dropdown.addEventListener("click",toggledropdown,!0)}))}))},_exports.default}));
define("core/aria",["exports","./local/aria/aria-hidden"],(function(_exports,_ariaHidden){Object.defineProperty(_exports,"__esModule",{value:!0}),Object.defineProperty(_exports,"hide",{enumerable:!0,get:function(){return _ariaHidden.hide}}),Object.defineProperty(_exports,"hideSiblings",{enumerable:!0,get:function(){return _ariaHidden.hideSiblings}}),Object.defineProperty(_exports,"unhide",{enumerable:!0,get:function(){return _ariaHidden.unhide}}),Object.defineProperty(_exports,"unhideSiblings",{enumerable:!0,get:function(){return _ariaHidden.unhideSiblings}})}));
/**
 * Contain the events a modal can fire.
 *
 * @module     core/modal_events
 * @class      modal_events
 * @copyright  2016 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core/modal_events",[],(function(){return{shown:"modal:shown",hidden:"modal:hidden",destroyed:"modal:destroyed",bodyRendered:"modal:bodyRendered",outsideClick:"modal:outsideClick",save:"modal-save-cancel:save",cancel:"modal-save-cancel:cancel"}}));
define("core/datafilter",["exports","core/datafilter/filtertypes/courseid","core/datafilter/filtertype","core/str","core/notification","core/pending","core/datafilter/selectors","core/templates","core/custom_interaction_events","jquery"],(function(_exports,_courseid,_filtertype,_str,_notification,_pending,_selectors,_templates,_custom_interaction_events,_jquery){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_courseid=_interopRequireDefault(_courseid),_filtertype=_interopRequireDefault(_filtertype),_notification=_interopRequireDefault(_notification),_pending=_interopRequireDefault(_pending),_selectors=_interopRequireDefault(_selectors),_templates=_interopRequireDefault(_templates),_custom_interaction_events=_interopRequireDefault(_custom_interaction_events),_jquery=_interopRequireDefault(_jquery);var _systemImportTransformerGlobalIdentifier="undefined"!=typeof window?window:"undefined"!=typeof self?self:"undefined"!=typeof global?global:{};function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}return _exports.default=class{constructor(filterSet,applyCallback){this.filterSet=filterSet,this.applyCallback=applyCallback,this.activeFilters={courseid:new _courseid.default("courseid",filterSet)}}init(){this.filterSet.querySelector(_selectors.default.filterset.region).addEventListener("click",(e=&gt;{e.target.closest(_selectors.default.filterset.actions.addRow)&amp;&amp;(e.preventDefault(),this.addFilterRow()),e.target.closest(_selectors.default.filterset.actions.applyFilters)&amp;&amp;(e.preventDefault(),this.updateTableFromFilter()),e.target.closest(_selectors.default.filterset.actions.resetFilters)&amp;&amp;(e.preventDefault(),this.removeAllFilters())})),this.filterSet.querySelector(_selectors.default.filterset.regions.filterlist).addEventListener("click",(e=&gt;{e.target.closest(_selectors.default.filter.actions.remove)&amp;&amp;(e.preventDefault(),this.removeOrReplaceFilterRow(e.target.closest(_selectors.default.filter.region),!0))}));let filterRegion=(0,_jquery.default)(this.getFilterRegion());_custom_interaction_events.default.define(filterRegion,[_custom_interaction_events.default.events.accessibleChange]),filterRegion.on(_custom_interaction_events.default.events.accessibleChange,(e=&gt;{const typeField=e.target.closest(_selectors.default.filter.fields.type);if(typeField&amp;&amp;typeField.value){const filter=e.target.closest(_selectors.default.filter.region);this.addFilter(filter,typeField.value)}})),this.filterSet.querySelector(_selectors.default.filterset.fields.join).addEventListener("change",(e=&gt;{this.filterSet.dataset.filterverb=e.target.value}))}getFilterRegion(){return this.filterSet.querySelector(_selectors.default.filterset.regions.filterlist)}addFilterRow(){const pendingPromise=new _pending.default("core/datafilter:addFilterRow"),rownum=1+this.getFilterRegion().querySelectorAll(_selectors.default.filter.region).length;return _templates.default.renderForPromise("core/datafilter/filter_row",{rownumber:rownum}).then((_ref=&gt;{let{html:html,js:js}=_ref;return _templates.default.appendNodeContents(this.getFilterRegion(),html,js)})).then((filterRow=&gt;{const typeList=this.filterSet.querySelector(_selectors.default.data.typeList);return filterRow.forEach((contentNode=&gt;{const contentTypeList=contentNode.querySelector(_selectors.default.filter.fields.type);contentTypeList&amp;&amp;(contentTypeList.innerHTML=typeList.innerHTML)})),filterRow})).then((filterRow=&gt;(this.updateFiltersOptions(),filterRow))).then((result=&gt;(pendingPromise.resolve(),result))).catch(_notification.default.exception)}getFilterDataSource(filterType){return this.filterSet.querySelector(_selectors.default.filterset.regions.datasource).querySelector(_selectors.default.data.fields.byName(filterType))}async addFilter(filterRow,filterType,initialFilterValues){filterRow.dataset.filterType=filterType;const filterDataNode=this.getFilterDataSource(filterType);let Filter=_filtertype.default;filterDataNode.dataset.filterTypeClass&amp;&amp;(Filter=await("function"==typeof _systemImportTransformerGlobalIdentifier.define&amp;&amp;_systemImportTransformerGlobalIdentifier.define.amd?new Promise((function(resolve,reject){_systemImportTransformerGlobalIdentifier.require([filterDataNode.dataset.filterTypeClass],resolve,reject)})):"undefined"!=typeof module&amp;&amp;module.exports&amp;&amp;"undefined"!=typeof require||"undefined"!=typeof module&amp;&amp;module.component&amp;&amp;_systemImportTransformerGlobalIdentifier.require&amp;&amp;"component"===_systemImportTransformerGlobalIdentifier.require.loader?Promise.resolve(require(filterDataNode.dataset.filterTypeClass)):Promise.resolve(_systemImportTransformerGlobalIdentifier[filterDataNode.dataset.filterTypeClass]))),this.activeFilters[filterType]=new Filter(filterType,this.filterSet,initialFilterValues);const typeField=filterRow.querySelector(_selectors.default.filter.fields.type);return typeField.value=filterType,typeField.disabled="disabled",this.updateFiltersOptions(),this.activeFilters[filterType]}getFilterObject(name){return this.activeFilters[name]}removeOrReplaceFilterRow(filterRow,refreshContent){1===this.getFilterRegion().querySelectorAll(_selectors.default.filter.region).length?this.replaceFilterRow(filterRow,refreshContent):this.removeFilterRow(filterRow,refreshContent)}async removeFilterRow(filterRow){let refreshContent=!(arguments.length&gt;1&amp;&amp;void 0!==arguments[1])||arguments[1];const hasFilterValue=!!filterRow.querySelector(_selectors.default.filter.fields.type).value;this.removeFilterObject(filterRow.dataset.filterType),filterRow.remove(),this.updateFiltersOptions(),hasFilterValue&amp;&amp;refreshContent&amp;&amp;this.updateTableFromFilter();const filterLegends=await this.getAvailableFilterLegends();this.getFilterRegion().querySelectorAll(_selectors.default.filter.region).forEach(((filterRow,index)=&gt;{filterRow.querySelector("legend").innerText=filterLegends[index]}))}replaceFilterRow(filterRow){let refreshContent=!(arguments.length&gt;1&amp;&amp;void 0!==arguments[1])||arguments[1],rowNum=arguments.length&gt;2&amp;&amp;void 0!==arguments[2]?arguments[2]:1;return this.removeFilterObject(filterRow.dataset.filterType),_templates.default.renderForPromise("core/datafilter/filter_row",{rownumber:rowNum}).then((_ref2=&gt;{let{html:html,js:js}=_ref2;return _templates.default.replaceNode(filterRow,html,js)})).then((filterRow=&gt;{const typeList=this.filterSet.querySelector(_selectors.default.data.typeList);return filterRow.forEach((contentNode=&gt;{const contentTypeList=contentNode.querySelector(_selectors.default.filter.fields.type);contentTypeList&amp;&amp;(contentTypeList.innerHTML=typeList.innerHTML)})),filterRow})).then((filterRow=&gt;(this.updateFiltersOptions(),filterRow))).then((filterRow=&gt;refreshContent?this.updateTableFromFilter():filterRow)).catch(_notification.default.exception)}removeFilterObject(filterName){if(filterName){const filter=this.getFilterObject(filterName);filter&amp;&amp;(filter.tearDown(),delete this.activeFilters[filterName])}}removeAllFilters(){return this.getFilterRegion().querySelectorAll(_selectors.default.filter.region).forEach((filterRow=&gt;this.removeOrReplaceFilterRow(filterRow,!1))),this.updateTableFromFilter()}removeEmptyFilters(){this.getFilterRegion().querySelectorAll(_selectors.default.filter.region).forEach((filterRow=&gt;{filterRow.querySelector(_selectors.default.filter.fields.type).value||this.removeOrReplaceFilterRow(filterRow,!1)}))}updateFiltersOptions(){const filters=this.getFilterRegion().querySelectorAll(_selectors.default.filter.region);filters.forEach((filterRow=&gt;{filterRow.querySelectorAll(_selectors.default.filter.fields.type+" option").forEach((option=&gt;{option.value===filterRow.dataset.filterType?(option.classList.remove("hidden"),option.disabled=!1):this.activeFilters[option.value]?(option.classList.add("hidden"),option.disabled=!0):(option.classList.remove("hidden"),option.disabled=!1)}))}));const addRowButton=this.filterSet.querySelector(_selectors.default.filterset.actions.addRow);this.filterSet.querySelectorAll(_selectors.default.data.fields.all).length&lt;=filters.length?addRowButton.setAttribute("disabled","disabled"):addRowButton.removeAttribute("disabled"),1===filters.length?(this.filterSet.querySelector(_selectors.default.filterset.regions.filtermatch).classList.add("hidden"),this.filterSet.querySelector(_selectors.default.filterset.fields.join).value=2,this.filterSet.dataset.filterverb=2):this.filterSet.querySelector(_selectors.default.filterset.regions.filtermatch).classList.remove("hidden")}updateTableFromFilter(){const pendingPromise=new _pending.default("core/datafilter:updateTableFromFilter"),filters={};Object.values(this.activeFilters).forEach((filter=&gt;{filters[filter.filterValue.name]=filter.filterValue})),this.applyCallback&amp;&amp;this.applyCallback(filters,pendingPromise)}async getAvailableFilterLegends(){const maxFilters=document.querySelector(_selectors.default.data.typeListSelect).length-1;let requests=[];[...Array(maxFilters)].forEach(((_,rowIndex)=&gt;{requests.push({key:"filterrowlegend",component:"core",param:rowIndex+1})}));return await(0,_str.get_strings)(requests).then((fetchedStrings=&gt;fetchedStrings)).catch(_notification.default.exception)}},_exports.default}));
/**
 * Module for text truncation.
 *
 * Implementation provided by Pathable (thanks!).
 * See: https://github.com/pathable/truncate
 *
 * @module     core/truncate
 * @copyright  2017 Pathable
 *             2017 Mathias Bynens
 *             2017 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core/truncate",["jquery"],(function($){var chop=/(\s*\S+|\s)$/,start=/^(\S*)/,space=/\s/,charLengthAt=function(text,position){var string=String(text),size=string.length,index=position?Number(position):0;if(index!=index&amp;&amp;(index=0),index&lt;=-1||index&gt;=size)return"";index|=0;var cuSecond,cuFirst=string.charCodeAt(index),nextIndex=index+1,len=1;return cuFirst&gt;=55296&amp;&amp;cuFirst&lt;=56319&amp;&amp;size&gt;nextIndex&amp;&amp;(cuSecond=string.charCodeAt(nextIndex))&gt;=56320&amp;&amp;cuSecond&lt;=57343&amp;&amp;(len=2),len},lengthMultiByte=function(text){for(var count=0,i=0;i&lt;text.length;i+=charLengthAt(text,i))count++;return count},getSliceLength=function(text,amount){if(!text.length)return 0;var length=0,count=0;do{length+=charLengthAt(text,length),count++}while(length&lt;text.length&amp;&amp;count&lt;amount);return length};return $.truncate=function(html,options){return $("&lt;div&gt;&lt;/div&gt;").append(html).truncate(options).html()},$.fn.truncate=function(options){isNaN(parseFloat(options))||(options={length:options});var o=$.extend({},$.truncate.defaults,options);return this.each((function(){var self=$(this);o.noBreaks&amp;&amp;self.find("br").replaceWith(" ");var ellipsisLength=o.ellipsis.length,text=self.text(),textLength=lengthMultiByte(text),excess=textLength-o.length+ellipsisLength;if(!(textLength&lt;o.length)){if(o.stripTags&amp;&amp;self.text(text),o.words&amp;&amp;excess&gt;0){var sliced=text.slice(0,getSliceLength(text,o.length-ellipsisLength)+1),replaced=sliced.replace(chop,""),truncated=lengthMultiByte(replaced),oneWord=!sliced.match(space);excess=o.keepFirstWord&amp;&amp;0===truncated?textLength-lengthMultiByte(start.exec(text)[0])-ellipsisLength:oneWord&amp;&amp;0===truncated?textLength-o.length+ellipsisLength:textLength-truncated-1}excess&gt;textLength&amp;&amp;(excess=textLength-o.length),excess&lt;0||!excess&amp;&amp;!o.truncated||$.each(self.contents().get().reverse(),(function(i,el){var $el=$(el),text=$el.text(),length=lengthMultiByte(text);if(length&lt;=excess)return o.truncated=!0,excess-=length,void $el.remove();if(3===el.nodeType){var splitAmount=length-excess;return splitAmount=splitAmount&gt;=0?getSliceLength(text,splitAmount):0,$(el.splitText(splitAmount)).replaceWith(o.ellipsis),!1}return $el.truncate($.extend(o,{length:length-excess+ellipsisLength})),!1}))}}))},$.truncate.defaults={stripTags:!1,words:!1,keepFirstWord:!1,noBreaks:!1,length:1/0,ellipsis:"…"},{truncate:$.truncate}}));
/**
 * Chart line.
 *
 * @copyright  2016 Frédéric Massart - FMCorz.net
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @module     core/chart_line
 */
define("core/chart_line",["core/chart_base"],(function(Base){function Line(){Base.prototype.constructor.apply(this,arguments)}return Line.prototype=Object.create(Base.prototype),Line.prototype.TYPE="line",Line.prototype._smooth=!1,Line.prototype.create=function(Klass,data){var chart=Base.prototype.create.apply(this,arguments);return chart.setSmooth(data.smooth),chart},Line.prototype.getSmooth=function(){return this._smooth},Line.prototype.setSmooth=function(smooth){this._smooth=Boolean(smooth)},Line}));
/**
 * Chart output.
 *
 * Proxy to the default output module.
 *
 * @copyright  2016 Frédéric Massart - FMCorz.net
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core/chart_output",["core/chart_output_chartjs"],(function(Output){return Output}));
/**
 * This module provides a wrapper to encapsulate a lot of the common combinations of
 * user interaction we use in Moodle.
 *
 * @module     core/custom_interaction_events
 * @copyright  2016 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.2
 */
define("core/custom_interaction_events",["jquery","core/key_codes"],(function($,keyCodes){var events={activate:"cie:activate",keyboardActivate:"cie:keyboardactivate",escape:"cie:escape",down:"cie:down",up:"cie:up",home:"cie:home",end:"cie:end",next:"cie:next",previous:"cie:previous",asterix:"cie:asterix",scrollLock:"cie:scrollLock",scrollTop:"cie:scrollTop",scrollBottom:"cie:scrollBottom",ctrlPageUp:"cie:ctrlPageUp",ctrlPageDown:"cie:ctrlPageDown",enter:"cie:enter",accessibleChange:"cie:accessibleChange"},triggeredEvents={},isModifierPressed=function(e){return e.shiftKey||e.metaKey||e.altKey||e.ctrlKey},triggerEvent=function(eventName,e){var eventTypeKey="";return e.hasOwnProperty("originalEvent")?(eventTypeKey="triggeredCustom_"+eventName,e.originalEvent.hasOwnProperty(eventTypeKey)?void 0:(e.originalEvent[eventTypeKey]=!0,void $(e.target).trigger(eventName,[{originalEvent:e}]))):(eventTypeKey=""+eventName+e.type+e.timeStamp,void(triggeredEvents.hasOwnProperty(eventTypeKey)||(triggeredEvents[eventTypeKey]=!0,$(e.target).trigger(eventName,[{originalEvent:e}]))))},addKeyboardEvent=function(element,event,keyCode){element.off("keydown."+event).on("keydown."+event,(function(e){isModifierPressed(e)||e.keyCode==keyCode&amp;&amp;triggerEvent(event,e)}))},addActivateListener=function(element){element.off("click.cie.activate").on("click.cie.activate",(function(e){triggerEvent(events.activate,e)})),element.off("keydown.cie.activate").on("keydown.cie.activate",(function(e){isModifierPressed(e)||e.keyCode!=keyCodes.enter&amp;&amp;e.keyCode!=keyCodes.space||triggerEvent(events.activate,e)}))},addKeyboardActivateListener=function(element){element.off("keydown.cie.keyboardactivate").on("keydown.cie.keyboardactivate",(function(e){isModifierPressed(e)||e.keyCode!=keyCodes.enter&amp;&amp;e.keyCode!=keyCodes.space||triggerEvent(events.keyboardActivate,e)}))},addEscapeListener=function(element){addKeyboardEvent(element,events.escape,keyCodes.escape)},addDownListener=function(element){addKeyboardEvent(element,events.down,keyCodes.arrowDown)},addUpListener=function(element){addKeyboardEvent(element,events.up,keyCodes.arrowUp)},addHomeListener=function(element){addKeyboardEvent(element,events.home,keyCodes.home)},addEndListener=function(element){addKeyboardEvent(element,events.end,keyCodes.end)},addNextListener=function(element){var keyCode="rtl"==$("html").attr("dir")?keyCodes.arrowLeft:keyCodes.arrowRight;addKeyboardEvent(element,events.next,keyCode)},addPreviousListener=function(element){var keyCode="rtl"==$("html").attr("dir")?keyCodes.arrowRight:keyCodes.arrowLeft;addKeyboardEvent(element,events.previous,keyCode)},addAsterixListener=function(element){addKeyboardEvent(element,events.asterix,keyCodes.asterix)},addScrollTopListener=function(element){element.off("scroll.cie.scrollTop").on("scroll.cie.scrollTop",(function(e){0===element.scrollTop()&amp;&amp;triggerEvent(events.scrollTop,e)}))},addScrollBottomListener=function(element){element.off("scroll.cie.scrollBottom").on("scroll.cie.scrollBottom",(function(e){element.scrollTop()+element.innerHeight()&gt;=element[0].scrollHeight&amp;&amp;triggerEvent(events.scrollBottom,e)}))},addScrollLockListener=function(element){element.off("DOMMouseScroll.cie.DOMMouseScrollLock mousewheel.cie.mousewheelLock").on("DOMMouseScroll.cie.DOMMouseScrollLock mousewheel.cie.mousewheelLock",(function(e){var scrollTop=element.scrollTop(),scrollHeight=element[0].scrollHeight,height=element.height(),delta="DOMMouseScroll"==e.type?-40*e.originalEvent.detail:e.originalEvent.wheelDelta,up=delta&gt;0;return!up&amp;&amp;-delta&gt;scrollHeight-height-scrollTop?(element.scrollTop(scrollHeight),e.stopPropagation(),e.preventDefault(),e.returnValue=!1,triggerEvent(events.scrollLock,e),!1):!(up&amp;&amp;delta&gt;scrollTop)||(element.scrollTop(0),e.stopPropagation(),e.preventDefault(),e.returnValue=!1,triggerEvent(events.scrollLock,e),!1)}))},addCtrlPageUpListener=function(element){element.off("keydown.cie.ctrlpageup").on("keydown.cie.ctrlpageup",(function(e){e.ctrlKey&amp;&amp;e.keyCode==keyCodes.pageUp&amp;&amp;triggerEvent(events.ctrlPageUp,e)}))},addCtrlPageDownListener=function(element){element.off("keydown.cie.ctrlpagedown").on("keydown.cie.ctrlpagedown",(function(e){e.ctrlKey&amp;&amp;e.keyCode==keyCodes.pageDown&amp;&amp;triggerEvent(events.ctrlPageDown,e)}))},addEnterListener=function(element){addKeyboardEvent(element,events.enter,keyCodes.enter)},addAccessibleChangeListener=function(element){var onMac=-1!==navigator.userAgent.indexOf("Macintosh"),touchEnabled="ontouchstart"in window||"msMaxTouchPoints"in navigator&amp;&amp;navigator.msMaxTouchPoints&gt;0;if(onMac||touchEnabled)element.on("change",(function(e){triggerEvent(events.accessibleChange,e)}));else{var checkAndTriggerAccessibleChange=function(e){"initValue"in e.target.dataset&amp;&amp;e.target.value!==e.target.dataset.initValue&amp;&amp;(e.target.dataset.initValue=e.target.value,triggerEvent(events.accessibleChange,e))},nativeElement=element.get()[0];nativeElement.addEventListener("focus",(function(e){var target;(target=e.target).dataset.initValue=target.value}),!0),nativeElement.addEventListener("blur",(function(e){checkAndTriggerAccessibleChange(e)}),!0),element.on("keydown",(function(e){var target;e.which===keyCodes.enter?checkAndTriggerAccessibleChange(e):e.which===keyCodes.escape?("initValue"in(target=e.target).dataset&amp;&amp;(target.value=target.dataset.initValue),e.target.dataset.ignoreChange=!0):e.target.dataset.ignoreChange=!0})),element.on("change",(function(e){e.target.dataset.ignoreChange||checkAndTriggerAccessibleChange(e)})),element.on("keyup",(function(e){delete e.target.dataset.ignoreChange})),element.on("click",(function(e){checkAndTriggerAccessibleChange(e)}))}};return{define:function(element,include){var handlers;(element=$(element),include=include||[],element.length&amp;&amp;include.length)&amp;&amp;$.each(((handlers={})[events.activate]=addActivateListener,handlers[events.keyboardActivate]=addKeyboardActivateListener,handlers[events.escape]=addEscapeListener,handlers[events.down]=addDownListener,handlers[events.up]=addUpListener,handlers[events.home]=addHomeListener,handlers[events.end]=addEndListener,handlers[events.next]=addNextListener,handlers[events.previous]=addPreviousListener,handlers[events.asterix]=addAsterixListener,handlers[events.scrollLock]=addScrollLockListener,handlers[events.scrollTop]=addScrollTopListener,handlers[events.scrollBottom]=addScrollBottomListener,handlers[events.ctrlPageUp]=addCtrlPageUpListener,handlers[events.ctrlPageDown]=addCtrlPageDownListener,handlers[events.enter]=addEnterListener,handlers[events.accessibleChange]=addAccessibleChangeListener,handlers),(function(eventType,handler){(function(eventType,include){return!(!(include=include||[]).length||-1===include.indexOf(eventType))})(eventType,include)&amp;&amp;handler(element)}))},events:events}}));
/**
 * AJAX helper for the inline editing a value.
 *
 * This script is automatically included from template core/inplace_editable
 * It registers a click-listener on [data-inplaceeditablelink] link (the "inplace edit" icon),
 * then replaces the displayed value with an input field. On "Enter" it sends a request
 * to web service core_update_inplace_editable, which invokes the specified callback.
 * Any exception thrown by the web service (or callback) is displayed as an error popup.
 *
 * @module     core/inplace_editable
 * @copyright  2016 Marina Glancy
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.1
 */
define("core/inplace_editable",["jquery","core/ajax","core/templates","core/notification","core/str","core/config","core/url","core/form-autocomplete","core/pending","core/local/inplace_editable/events"],(function($,ajax,templates,notification,str,cfg,url,autocomplete,Pending,Events){const updateValue=function(mainelement,value,silent){var pendingId=[mainelement.attr("data-itemid"),mainelement.attr("data-component"),mainelement.attr("data-itemtype")].join("-"),pendingPromise=new Pending(pendingId);addSpinner(mainelement),ajax.call([{methodname:"core_update_inplace_editable",args:{itemid:mainelement.attr("data-itemid"),component:mainelement.attr("data-component"),itemtype:mainelement.attr("data-itemtype"),value:value}}])[0].then((function(data){return templates.render("core/inplace_editable",data).then((function(html,js){var oldvalue=mainelement.attr("data-value"),newelement=$(html);templates.replaceNode(mainelement,newelement,js),silent||newelement.find("[data-inplaceeditablelink]").focus(),Events.notifyElementUpdated(newelement.get(0),data,oldvalue)}))})).then((function(){return pendingPromise.resolve()})).fail((function(ex){var element;(element=mainelement).removeClass("updating"),element.find("img.spinner").hide(),M.util.js_complete(pendingId),Events.notifyElementUpdateFailed(mainelement.get(0),ex,value).defaultPrevented||notification.exception(ex)}))},addSpinner=function(element){element.addClass("updating");var spinner=element.find("img.spinner");spinner.length?spinner.show():(spinner=$("&lt;img/&gt;").attr("src",url.imageUrl("i/loading_small")).addClass("spinner").addClass("smallicon"),element.append(spinner))};return $("body").on("click keypress","[data-inplaceeditable] [data-inplaceeditablelink]",(function(e){if("keypress"!==e.type||13===e.keyCode){var editingEnabledPromise=new Pending("autocomplete-start-editing");e.stopImmediatePropagation(),e.preventDefault();var mainelement=$(this).closest("[data-inplaceeditable]"),turnEditingOff=function(el){el.find("input").off(),el.find("select").off(),el.html(el.attr("data-oldcontent")),el.removeAttr("data-oldcontent"),el.removeClass("inplaceeditingon"),el.find("[data-inplaceeditablelink]").focus(),el.parents('[data-inplace-in-draggable="true"]').attr("draggable",!0).attr("data-inplace-in-draggable",!1)},uniqueId=function(prefix,idlength){var i,uniqid=prefix;for(i=0;i&lt;idlength;i++)uniqid+=String(Math.floor(10*Math.random()));return 0===$("#"+uniqid).length?uniqid:uniqueId(prefix,idlength)};$('[data-inplace-in-draggable="true"]').attr("draggable",!0).attr("data-inplace-in-draggable",!1),$("span.inplaceeditable.inplaceeditingon").each((function(){turnEditingOff($(this))})),function(el){el.addClass("inplaceeditingon"),el.attr("data-oldcontent",el.html());var type=el.attr("data-type"),options=el.attr("data-options");el.parents('[draggable="true"]').attr("data-inplace-in-draggable",!0).attr("draggable",!1),"toggle"===type?function(el,newvalue){turnEditingOff(el),updateValue(el,newvalue)}(el,options):"select"===type?function(el,options){var i,inputelement=$("&lt;select&gt;&lt;/select&gt;").attr("id",uniqueId("id_inplacevalue_",20)).addClass("custom-select"),lbl=$('&lt;label class="accesshide"&gt;'+mainelement.attr("data-editlabel")+"&lt;/label&gt;").attr("for",inputelement.attr("id"));for(i in options)inputelement.append($("&lt;option&gt;").attr("value",options[i].key).html(options[i].value));inputelement.val(el.attr("data-value")),el.html("").append(lbl).append(inputelement),inputelement.focus(),inputelement.select(),inputelement.on("keyup change focusout",(function(e){if(!cfg.behatsiterunning||"focusout"!==e.type){if("change"===e.type){var val=inputelement.val();turnEditingOff(el),updateValue(el,val)}("keyup"===e.type&amp;&amp;27===e.keyCode||"focusout"===e.type)&amp;&amp;turnEditingOff(el)}}))}(el,$.parseJSON(options)):"autocomplete"===type?function(el,args){var i,inputelement=$("&lt;select&gt;&lt;/select&gt;").attr("id",uniqueId("id_inplacevalue_",20)).addClass("form-autocomplete-original-select").addClass("custom-select"),lbl=$('&lt;label class="accesshide"&gt;'+mainelement.attr("data-editlabel")+"&lt;/label&gt;").attr("for",inputelement.attr("id")),options=args.options,attributes=args.attributes,saveelement=$('&lt;a href="#"&gt;&lt;/a&gt;'),cancelelement=$('&lt;a href="#"&gt;&lt;/a&gt;');for(i in options)inputelement.append($("&lt;option&gt;").attr("value",options[i].key).html(options[i].value));attributes.multiple&amp;&amp;inputelement.attr("multiple","true"),inputelement.val(JSON.parse(el.attr("data-value"))),str.get_string("savechanges","core").then((function(s){return templates.renderPix("e/save","core",s)})).then((function(html){saveelement.append(html)})).fail(notification.exception),str.get_string("cancel","core").then((function(s){return templates.renderPix("e/cancel","core",s)})).then((function(html){cancelelement.append(html)})).fail(notification.exception),el.html("").append(lbl).append(inputelement).append(saveelement).append(cancelelement),inputelement.focus(),inputelement.select(),autocomplete.enhance(inputelement,attributes.tags,attributes.ajax,attributes.placeholder,attributes.caseSensitive,attributes.showSuggestions,attributes.noSelectionString).then((function(){el.find("[role=combobox]").focus()})).fail(notification.exception),inputelement.on("keyup",(function(e){("keyup"===e.type&amp;&amp;27===e.keyCode||"focusout"===e.type)&amp;&amp;turnEditingOff(el)})),saveelement.on("click",(function(e){var val=JSON.stringify(inputelement.val());inputelement.empty(),turnEditingOff(el),updateValue(el,val),e.preventDefault()})),cancelelement.on("click",(function(e){inputelement.empty(),turnEditingOff(el),e.preventDefault()}))}(el,$.parseJSON(options)):function(el){str.get_string("edittitleinstructions").done((function(s){var instr=$('&lt;span class="editinstructions"&gt;'+s+"&lt;/span&gt;").attr("id",uniqueId("id_editinstructions_",20)),inputelement=$('&lt;input type="text"/&gt;').attr("id",uniqueId("id_inplacevalue_",20)).attr("value",el.attr("data-value")).attr("aria-describedby",instr.attr("id")).addClass("ignoredirty").addClass("form-control"),lbl=$('&lt;label class="accesshide"&gt;'+mainelement.attr("data-editlabel")+"&lt;/label&gt;").attr("for",inputelement.attr("id"));el.html("").append(instr).append(lbl).append(inputelement),inputelement.focus(),inputelement.select(),inputelement.on("keyup keypress focusout",(function(e){if(!cfg.behatsiterunning||"focusout"!==e.type){if("keypress"===e.type&amp;&amp;13===e.keyCode){var val=inputelement.val();turnEditingOff(el),updateValue(el,val)}("keyup"===e.type&amp;&amp;27===e.keyCode||"focusout"===e.type)&amp;&amp;turnEditingOff(el)}}))}))}(el)}(mainelement),editingEnabledPromise.resolve()}})),{getInplaceEditable:function(parent){const element=parent.querySelector("[data-inplaceeditable]");if(element)return{element:element,getValue:function(){return this.element.dataset.value},setValue:function(newvalue){updateValue($(this.element),newvalue,!0)},getItemId:function(){return this.element.dataset.itemid}}}}}));
define("core/utils",["exports","core/pending"],(function(_exports,_pending){var obj;Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.throttle=_exports.debounce=void 0,_pending=(obj=_pending)&amp;&amp;obj.__esModule?obj:{default:obj};_exports.throttle=(func,wait)=&gt;{let onCooldown=!1,runAgain=null;const run=function(){for(var _len=arguments.length,args=new Array(_len),_key=0;_key&lt;_len;_key++)args[_key]=arguments[_key];runAgain=null!==runAgain,onCooldown||(func.apply(this,args),onCooldown=!0,setTimeout((()=&gt;{const recurse=runAgain;onCooldown=!1,runAgain=null,recurse&amp;&amp;run(args)}),wait))};return run};const debounceMap=new Map;_exports.debounce=function(func,wait){let{pending:pending=!1,cancel:cancel=!1}=arguments.length&gt;2&amp;&amp;void 0!==arguments[2]?arguments[2]:{},timeout=null;const returnedFunction=function(){for(var _len2=arguments.length,args=new Array(_len2),_key2=0;_key2&lt;_len2;_key2++)args[_key2]=arguments[_key2];pending&amp;&amp;!debounceMap.has(returnedFunction)&amp;&amp;debounceMap.set(returnedFunction,new _pending.default("core/utils:debounce")),clearTimeout(timeout),timeout=setTimeout((async()=&gt;{const pendingPromise=debounceMap.get(returnedFunction);debounceMap.delete(returnedFunction),await func.apply(undefined,args),null==pendingPromise||pendingPromise.resolve()}),wait)};return cancel&amp;&amp;(returnedFunction.cancel=()=&gt;{const pendingPromise=debounceMap.get(returnedFunction);null==pendingPromise||pendingPromise.resolve(),clearTimeout(timeout)}),returnedFunction}}));
/**
 * This is an empty module, that is required before all other modules.
 * Because every module is returned from a request for any other module, this
 * forces the loading of all modules with a single request.
 *
 * This function also sets up the listeners for ajax requests so we can tell
 * if any requests are still in progress.
 *
 * @module     core/first
 * @copyright  2015 Damyon Wiese &lt;damyon@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      2.9
 */
define("core/first",["jquery"],(function($){$(document).bind("ajaxStart",(function(){M.util.js_pending("jq")})).bind("ajaxStop",(function(){M.util.js_complete("jq")}))}));
/**
 * Simple API for set/get to sessionstorage, with cacherev expiration.
 *
 * Session storage will only persist for as long as the browser window
 * stays open.
 *
 * See:
 * https://developer.mozilla.org/en-US/docs/Web/API/Window/sessionStorage
 *
 * @module     core/sessionstorage
 * @copyright  2017 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core/sessionstorage",["core/config","core/storagewrapper"],(function(config,StorageWrapper){var storage=new StorageWrapper(window.sessionStorage);return{get:function(key){return storage.get(key)},set:function(key,value){return storage.set(key,value)}}}));
define("core/dynamic_tabs",["exports","jquery","core/templates","core/loadingicon","core/notification","core/pending","core/str","core/local/repository/dynamic_tabs","core_form/changechecker"],(function(_exports,_jquery,_templates,_loadingicon,_notification,_pending,_str,_dynamic_tabs,_changechecker){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Dynamic Tabs UI element with AJAX loading of tabs content
   *
   * @module      core/dynamic_tabs
   * @copyright   2021 David Matamoros &lt;davidmc@moodle.com&gt; based on code from Marina Glancy
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_jquery=_interopRequireDefault(_jquery),_templates=_interopRequireDefault(_templates),_notification=_interopRequireDefault(_notification),_pending=_interopRequireDefault(_pending);const SELECTORS={dynamicTabs:".dynamictabs",activeTab:".dynamictabs .nav-link.active",allActiveTabs:'.dynamictabs .nav-link[data-toggle="tab"]:not(.disabled)',tabContent:".dynamictabs .tab-pane [data-tab-content]",tabToggle:'a[data-toggle="tab"]',tabPane:".dynamictabs .tab-pane",forTabName:tabName=&gt;'.dynamictabs [data-tab-content="'.concat(tabName,'"]'),forTabId:tabName=&gt;'.dynamictabs [data-toggle="tab"][href="#'.concat(tabName,'"]')};_exports.init=()=&gt;{const tabToggle=(0,_jquery.default)(SELECTORS.tabToggle);if(tabToggle.on("click",(event=&gt;{(0,_changechecker.isAnyWatchedFormDirty)()&amp;&amp;(event.preventDefault(),event.stopPropagation(),(0,_str.get_strings)([{key:"changesmade",component:"moodle"},{key:"changesmadereallygoaway",component:"moodle"},{key:"confirm",component:"moodle"}]).then((_ref=&gt;{let[strChangesMade,strChangesMadeReally,strConfirm]=_ref;return _notification.default.confirm(strChangesMade,strChangesMadeReally,strConfirm,null,(()=&gt;{(0,_changechecker.resetAllFormDirtyStates)(),(0,_jquery.default)(event.target).trigger(event.type)}))})).catch(_notification.default.exception))})),tabToggle.on("show.bs.tab",(function(){const previousTabName=getActiveTabName();if(previousTabName){document.querySelector(SELECTORS.forTabName(previousTabName)).textContent=""}})).on("shown.bs.tab",(function(){const tab=(0,_jquery.default)((0,_jquery.default)(this).attr("href"));1===tab.length&amp;&amp;loadTab(tab.attr("id"))})),!openTabFromHash()){const tabs=document.querySelector(SELECTORS.allActiveTabs);if(tabs)openTab(tabs.getAttribute("aria-controls"));else{const tabPane=document.querySelector(SELECTORS.tabPane);tabPane&amp;&amp;(tabPane.classList.add("active","show"),loadTab(tabPane.getAttribute("id")))}}};const getActiveTabName=()=&gt;{const element=document.querySelector(SELECTORS.activeTab);return(null==element?void 0:element.getAttribute("aria-controls"))||null},loadTab=tabName=&gt;{var _ref2,_tabName;tabName=null!==(_ref2=null!==(_tabName=tabName)&amp;&amp;void 0!==_tabName?_tabName:getActiveTabName())&amp;&amp;void 0!==_ref2?_ref2:(()=&gt;{const element=document.querySelector(SELECTORS.tabContent);return(null==element?void 0:element.dataset.tabContent)||null})();const tab=document.querySelector(SELECTORS.forTabName(tabName));if(!tab)return;const pendingPromise=new _pending.default("core/dynamic_tabs:loadTab:"+tabName);(0,_loadingicon.addIconToContainer)(tab).then((()=&gt;{let tabArgs={...tab.dataset};return delete tabArgs.tabClass,delete tabArgs.tabContent,(0,_dynamic_tabs.getContent)(tab.dataset.tabClass,JSON.stringify(tabArgs))})).then((response=&gt;Promise.all([_jquery.default.parseHTML(response.javascript,null,!0).map((node=&gt;node.innerHTML)).join("\n"),_templates.default.renderForPromise(response.template,JSON.parse(response.content))]))).then((_ref3=&gt;{let[responseJs,{html:html,js:js}]=_ref3;return _templates.default.replaceNodeContents(tab,html,js+responseJs)})).then((()=&gt;pendingPromise.resolve())).catch(_notification.default.exception)},openTab=tabName=&gt;{const tab=(tabName=&gt;document.querySelector(SELECTORS.forTabId(tabName)))(tabName);return!!tab&amp;&amp;(loadTab(tabName),tab.classList.add("active"),(tabName=&gt;document.getElementById(tabName))(tabName).classList.add("active","show"),!0)},openTabFromHash=()=&gt;{const hash=document.location.hash;return!!hash.match(/^#\w+$/g)&amp;&amp;openTab(hash.replace(/^#/g,""))}}));
/**
 * Icon System base module.
 *
 * @module core/icon_system
 * @copyright  2017 Damyon Wiese
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core/icon_system",["jquery"],(function($){var IconSystem=function(){};return IconSystem.prototype.init=function(){return $.when(this)},IconSystem.prototype.renderIcon=function(key,component,title,template){throw new Error("Abstract function not implemented.")},IconSystem.prototype.getTemplateName=function(){throw new Error("Abstract function not implemented.")},IconSystem}));
/**
 * Chart output base.
 *
 * This takes a chart object and draws it.
 *
 * @copyright  2016 Frédéric Massart - FMCorz.net
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @module     core/chart_output_base
 */
define("core/chart_output_base",["jquery"],(function($){function Base(node,chart){this._node=$(node),this._chart=chart}return Base.prototype.update=function(){throw new Error("Not supported.")},Base}));
define("core/drawer_events",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0;return _exports.default={DRAWER_SHOWN:"drawer-shown",DRAWER_HIDDEN:"drawer-hidden"},_exports.default}));
define("core/addblockmodal",["exports","core/modal_factory","core/templates","core/str","core/ajax"],(function(_exports,_modal_factory,_templates,_str,_ajax){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Show an add block modal instead of doing it on a separate page.
   *
   * @module     core/addblockmodal
   * @copyright  2016 Damyon Wiese &lt;damyon@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_modal_factory=_interopRequireDefault(_modal_factory),_templates=_interopRequireDefault(_templates),_ajax=_interopRequireDefault(_ajax);const SELECTORS_ADD_BLOCK='[data-key="addblock"]';let listenerEventsRegistered=!1;const registerListenerEvents=(pageType,pageLayout,addBlockUrl,subPage)=&gt;{document.addEventListener("click",(e=&gt;{const addBlock=e.target.closest(SELECTORS_ADD_BLOCK);if(addBlock){e.preventDefault();let addBlockModal=null,addBlockModalUrl=null!=addBlockUrl?addBlockUrl:addBlock.dataset.url;buildAddBlockModal().then((modal=&gt;{addBlockModal=modal;const modalBody=renderBlocks(addBlockModalUrl,pageType,pageLayout,subPage);return modal.setBody(modalBody),modal.show(),modalBody})).catch((()=&gt;{addBlockModal.destroy()}))}}))},buildAddBlockModal=()=&gt;_modal_factory.default.create({type:_modal_factory.default.types.CANCEL,title:(0,_str.get_string)("addblock")}),renderBlocks=async(addBlockUrl,pageType,pageLayout,subPage)=&gt;{const blocks=await getAddableBlocks(pageType,pageLayout,subPage);return _templates.default.render("core/add_block_body",{blocks:blocks,url:addBlockUrl})},getAddableBlocks=async(pageType,pageLayout,subPage)=&gt;{const request={methodname:"core_block_fetch_addable_blocks",args:{pagecontextid:M.cfg.contextid,pagetype:pageType,pagelayout:pageLayout,subpage:subPage}};return _ajax.default.call([request])[0]};_exports.init=function(pageType,pageLayout){let addBlockUrl=arguments.length&gt;2&amp;&amp;void 0!==arguments[2]?arguments[2]:null,subPage=arguments.length&gt;3&amp;&amp;void 0!==arguments[3]?arguments[3]:"";listenerEventsRegistered||(registerListenerEvents(pageType,pageLayout,addBlockUrl,subPage),listenerEventsRegistered=!0)}}));
/**
 * Chart output for HTML table.
 *
 * @copyright  2016 Frédéric Massart - FMCorz.net
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @module     core/chart_output_htmltable
 */
define("core/chart_output_htmltable",["jquery","core/chart_output_base"],(function($,Base){function Output(){Base.prototype.constructor.apply(this,arguments),this._build()}return Output.prototype=Object.create(Base.prototype),Output.prototype._build=function(){this._node.empty(),this._node.append(this._makeTable())},Output.prototype._makeTable=function(){var node,value,tbl=$("&lt;table&gt;"),c=this._chart,labels=c.getLabels(),hasLabel=labels.length&gt;0,series=c.getSeries(),rowCount=series[0].getCount();tbl.addClass("chart-output-htmltable generaltable"),null!==c.getTitle()&amp;&amp;tbl.append($("&lt;caption&gt;").text(c.getTitle())),node=$("&lt;tr&gt;"),hasLabel&amp;&amp;node.append($("&lt;td&gt;")),series.forEach((function(serie){node.append($("&lt;th&gt;").text(serie.getLabel()).attr("scope","col"))})),tbl.append(node);for(var rowId=0;rowId&lt;rowCount;rowId++){node=$("&lt;tr&gt;"),labels.length&gt;0&amp;&amp;node.append($("&lt;th&gt;").text(labels[rowId]).attr("scope","row"));for(var serieId=0;serieId&lt;series.length;serieId++)value=series[serieId].getValues()[rowId],null!==series[serieId].getLabels()&amp;&amp;(value=series[serieId].getLabels()[rowId]),node.append($("&lt;td&gt;").text(value));tbl.append(node)}return tbl},Output.prototype.update=function(){this._build()},Output}));
/**
 * Template renderer for Moodle. Load and render Moodle templates with Mustache.
 *
 * @module     core/templates
 * @copyright  2015 Damyon Wiese &lt;damyon@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      2.9
 */
define("core/templates",["core/mustache","jquery","core/ajax","core/str","core/notification","core/url","core/config","core/localstorage","core/icon_system","core_filters/events","core/yui","core/log","core/truncate","core/user_date","core/pending"],(function(mustache,$,ajax,str,notification,coreurl,config,storage,IconSystem,filterEvents,Y,Log,Truncate,UserDate,Pending){var uniqInstances=0,templateCache={},templatePromises={},cachePartialPromises={},iconSystem={},loadTemplateBuffer=[],isLoadingTemplates=!1,disallowedNestedHelpers=["js"],getNormalisedComponent=function(component){return component&amp;&amp;"moodle"!==component&amp;&amp;"core"!==component?component:"core"},getTemplatePromiseFromCache=function(searchKey){if(searchKey in templatePromises)return templatePromises[searchKey];if(searchKey in templateCache)return templatePromises[searchKey]=$.Deferred().resolve(templateCache[searchKey]).promise(),templatePromises[searchKey];if(M.cfg.templaterev&lt;=0)return null;var cached=storage.get("core_template/"+M.cfg.templaterev+":"+searchKey);return cached?(templateCache[searchKey]=cached,templatePromises[searchKey]=$.Deferred().resolve(cached).promise(),templatePromises[searchKey]):null},processLoadTemplateBuffer=function(){if(loadTemplateBuffer.length&amp;&amp;!isLoadingTemplates){isLoadingTemplates=!0;var templatesToLoad=loadTemplateBuffer.slice(),serverRequestsDeferred=$.Deferred(),requests=[],templatePromises=templatesToLoad.map((function(templateData){var component=getNormalisedComponent(templateData.component),name=templateData.name,searchKey=templateData.searchKey,theme=templateData.theme,templateDeferred=templateData.deferred,promise=null,cachedPromise=getTemplatePromiseFromCache(searchKey);if(cachedPromise)promise=cachedPromise;else{requests.push({methodname:"core_output_load_template_with_dependencies",args:{component:component,template:name,themename:theme,lang:config.language}});var index=requests.length-1;promise=serverRequestsDeferred.promise().then((function(promises){return templatePromises[searchKey]=promises[index].then((function(response){var templateSource=null;return response.templates.forEach((function(data){data.component=getNormalisedComponent(data.component);var tempSearchKey=[theme,data.component,data.name].join("/");templateCache[tempSearchKey]=data.value,M.cfg.templaterev&gt;0&amp;&amp;storage.set("core_template/"+M.cfg.templaterev+":"+tempSearchKey,data.value),data.component==component&amp;&amp;data.name==name&amp;&amp;(templateSource=data.value)})),response.strings.length&amp;&amp;str.cache_strings(response.strings.map((function(data){return{component:getNormalisedComponent(data.component),key:data.name,value:data.value}}))),templateSource})),templatePromises[searchKey]}))}return promise.then((function(source){return templateDeferred.resolve(source)})).catch((function(error){throw templateDeferred.reject(error),error}))}));requests.length?serverRequestsDeferred.resolve(ajax.call(requests,!0,!1,!1,0,M.cfg.templaterev)):serverRequestsDeferred.resolve(),$.when.apply(null,templatePromises).then((function(){loadTemplateBuffer.splice(0,templatesToLoad.length),isLoadingTemplates=!1,processLoadTemplateBuffer()})).catch((function(){loadTemplateBuffer.splice(0,templatesToLoad.length),isLoadingTemplates=!1,processLoadTemplateBuffer()}))}},Renderer=function(){this.requiredStrings=[],this.requiredJS=[],this.requiredDates=[],this.currentThemeName=""};Renderer.prototype.requiredStrings=null,Renderer.prototype.requiredDates=[],Renderer.prototype.requiredJS=null,Renderer.prototype.currentThemeName="",Renderer.prototype.getTemplate=function(templateName){var currentTheme=this.currentThemeName,searchKey=currentTheme+"/"+templateName,cachedPromise=getTemplatePromiseFromCache(searchKey);if(cachedPromise)return cachedPromise;var existingBufferRecords=loadTemplateBuffer.filter((function(record){return record.searchKey==searchKey}));if(existingBufferRecords.length)return existingBufferRecords[0].deferred.promise();var parts=templateName.split("/"),component=getNormalisedComponent(parts.shift()),name=parts.join("/"),deferred=$.Deferred();return loadTemplateBuffer.push({component:component,name:name,theme:currentTheme,searchKey:searchKey,deferred:deferred}),processLoadTemplateBuffer(),deferred.promise()},Renderer.prototype.prefetchTemplates=function(templateNames,currentTheme){templateNames.forEach((function(templateName){var searchKey=currentTheme+"/"+templateName;if(!getTemplatePromiseFromCache(searchKey)&amp;&amp;!loadTemplateBuffer.filter((function(record){return record.searchKey==searchKey})).length){var parts=templateName.split("/"),component=getNormalisedComponent(parts.shift()),name=parts.join("/");loadTemplateBuffer.push({component:component,name:name,theme:currentTheme,searchKey:searchKey,deferred:$.Deferred()})}})),processLoadTemplateBuffer()},Renderer.prototype.partialHelper=function(name){var searchKey=this.currentThemeName+"/"+name;return searchKey in templateCache||notification.exception(new Error("Failed to pre-fetch the template: "+name)),templateCache[searchKey]},Renderer.prototype.renderIcon=function(key,component,title){var modulename=config.iconsystemmodule;component=getNormalisedComponent(component);var ready=$.Deferred();return require([modulename],(function(System){var system=new System;system instanceof IconSystem?(iconSystem=system,system.init().then(ready.resolve).catch(notification.exception)):ready.reject("Invalid icon system specified"+config.iconsystemmodule)})),ready.then(function(iconSystem){return this.getTemplate(iconSystem.getTemplateName())}.bind(this)).then((function(template){return iconSystem.renderIcon(key,component,title,template)}))},Renderer.prototype.pixHelper=function(context,sectionText,helper){var parts=sectionText.split(","),key="",component="",text="";parts.length&gt;0&amp;&amp;(key=helper(parts.shift().trim(),context)),parts.length&gt;0&amp;&amp;(component=helper(parts.shift().trim(),context)),parts.length&gt;0&amp;&amp;(text=helper(parts.join(",").trim(),context));var templateName=iconSystem.getTemplateName(),searchKey=this.currentThemeName+"/"+templateName,template=templateCache[searchKey];return component=getNormalisedComponent(component),key=key.replace(/&amp;#x2F;/gi,"/"),iconSystem.renderIcon(key,component,text,template)},Renderer.prototype.jsHelper=function(context,sectionText,helper){return this.requiredJS.push(helper(sectionText,context)),""},Renderer.prototype.stringHelper=function(context,sectionText,helper){var parts=sectionText.split(","),key="",component="",param="";if(parts.length&gt;0&amp;&amp;(key=parts.shift().trim()),parts.length&gt;0&amp;&amp;(component=parts.shift().trim()),parts.length&gt;0&amp;&amp;(param=parts.join(",").trim()),component=getNormalisedComponent(component),""!==param&amp;&amp;(param=helper(param,context)),param.match(/^{\s*"/gm))try{const parsedParam=JSON.parse(param);parsedParam&amp;&amp;"object"==typeof parsedParam&amp;&amp;(param=parsedParam)}catch(err){window.console.warn(err.message)}var index=this.requiredStrings.length;return this.requiredStrings.push({key:key,component:component,param:param}),"[[_s"+index+"]]"},Renderer.prototype.cleanStringHelper=function(context,sectionText,helper){return this.stringHelper(context,sectionText,helper).replace("s","c")},Renderer.prototype.quoteHelper=function(context,sectionText,helper){var content=helper(sectionText.trim(),context);return content=(content=JSON.stringify(content)).replace(/([{}]{2,3})/g,"{{=&lt;% %&gt;=}}$1&lt;%={{ }}=%&gt;")},Renderer.prototype.shortenTextHelper=function(context,sectionText,helper){var parts=sectionText.match(/(.*?),(.*)/),length=parts[1].trim(),content=helper(parts[2].trim(),context);return Truncate.truncate(content,{length:length,words:!0,ellipsis:"..."})},Renderer.prototype.userDateHelper=function(context,sectionText,helper){var parts=sectionText.match(/(.*?),(.*)/),timestamp=helper(parts[1].trim(),context),format=helper(parts[2].trim(),context),index=this.requiredDates.length;return this.requiredDates.push({timestamp:timestamp,format:format}),"[[_t_"+index+"]]"},Renderer.prototype.addHelperFunction=function(helperFunction,context){return function(){return function(sectionText,helper){var originalHelpers=disallowedNestedHelpers.reduce((function(carry,name){return context.hasOwnProperty(name)&amp;&amp;(carry[name]=context[name]),carry}),{});disallowedNestedHelpers.forEach((function(helperName){context[helperName]=function(){return""}}));var result=helperFunction.apply(this,[context,sectionText,helper]);for(var name in originalHelpers)context[name]=originalHelpers[name];return result}.bind(this)}.bind(this)},Renderer.prototype.addHelpers=function(context,themeName){this.currentThemeName=themeName,this.requiredStrings=[],this.requiredJS=[],context.uniqid=uniqInstances++,context.str=this.addHelperFunction(this.stringHelper,context),context.cleanstr=this.addHelperFunction(this.cleanStringHelper,context),context.pix=this.addHelperFunction(this.pixHelper,context),context.js=this.addHelperFunction(this.jsHelper,context),context.quote=this.addHelperFunction(this.quoteHelper,context),context.shortentext=this.addHelperFunction(this.shortenTextHelper,context),context.userdate=this.addHelperFunction(this.userDateHelper,context),context.globals={config:config},context.currentTheme=themeName},Renderer.prototype.getJS=function(){var js="";return this.requiredJS.length&gt;0&amp;&amp;(js=this.requiredJS.join(";\n")),js},Renderer.prototype.treatStringsInContent=function(content,strings){var treated,index,strIndex,walker,char,strFinal,isClean,pattern=/\[\[_(s|c)\d+\]\]/;do{for(treated="",index=content.search(pattern);index&gt;-1;){treated+=content.substring(0,index),isClean="c"==(content=content.substr(index))[3],strIndex="",walker=4,char=content.substr(walker,1);do{strIndex+=char,walker++,char=content.substr(walker,1)}while("]"!=char);void 0===(strFinal=strings[parseInt(strIndex,10)])&amp;&amp;(Log.debug("Could not find string for pattern [[_"+(isClean?"c":"s")+strIndex+"]]."),strFinal=""),isClean&amp;&amp;(strFinal=mustache.escape(strFinal)),treated+=strFinal,index=(content=content.substr(6+strIndex.length)).search(pattern)}index=(content=treated+content).search(pattern)}while(index&gt;-1);return content},Renderer.prototype.treatDatesInContent=function(content,dates){return dates.forEach((function(date,index){var re=new RegExp("\\[\\[_t_"+index+"\\]\\]","g");content=content.replace(re,date)})),content},Renderer.prototype.doRender=function(templateSource,context,themeName){this.currentThemeName=themeName;var iconTemplate=iconSystem.getTemplateName(),pendingPromise=new Pending("core/templates:doRender");return this.getTemplate(iconTemplate).then(function(){this.addHelpers(context,themeName);var result=mustache.render(templateSource,context,this.partialHelper.bind(this));return $.Deferred().resolve(result.trim(),this.getJS()).promise()}.bind(this)).then(function(html,js){return this.requiredStrings.length&gt;0?str.get_strings(this.requiredStrings).then(function(strings){return this.requiredDates=this.requiredDates.map(function(date){return{timestamp:this.treatStringsInContent(date.timestamp,strings),format:this.treatStringsInContent(date.format,strings)}}.bind(this)),html=this.treatStringsInContent(html,strings),js=this.treatStringsInContent(js,strings),$.Deferred().resolve(html,js).promise()}.bind(this)):$.Deferred().resolve(html,js).promise()}.bind(this)).then(function(html,js){return this.requiredDates.length&gt;0?UserDate.get(this.requiredDates).then(function(dates){return html=this.treatDatesInContent(html,dates),js=this.treatDatesInContent(js,dates),$.Deferred().resolve(html,js).promise()}.bind(this)):$.Deferred().resolve(html,js).promise()}.bind(this)).then((function(html,js){return pendingPromise.resolve(),$.Deferred().resolve(html,js).promise()}))};var runTemplateJS=function(source){if(""!==source.trim()){var newscript=$("&lt;script&gt;").attr("type","text/javascript").html(source);$("head").append(newscript)}},domReplace=function(element,newHTML,newJS,replaceChildNodes){var replaceNode=$(element);if(replaceNode.length){var newNodes=$(newHTML);return replaceChildNodes?(new Y.NodeList(replaceNode.children().get()).destroy(!0),replaceNode.empty(),replaceNode.append(newNodes)):(new Y.NodeList(replaceNode.get()).destroy(!0),replaceNode.replaceWith(newNodes)),runTemplateJS(newJS),filterEvents.notifyFilterContentUpdated(newNodes),newNodes.get()}return[]};Renderer.prototype.scanForPartials=function(templateSource){var tokens=mustache.parse(templateSource),partials=[],findPartial=function(tokens,partials){var i,token;for(i=0;i&lt;tokens.length;i++)"&gt;"!=(token=tokens[i])[0]&amp;&amp;"&lt;"!=token[0]||partials.push(token[1]),token.length&gt;4&amp;&amp;findPartial(token[4],partials)};return findPartial(tokens,partials),partials},Renderer.prototype.cachePartials=function(templateName,parentage){var searchKey=this.currentThemeName+"/"+templateName;return searchKey in cachePartialPromises||(parentage=parentage||[searchKey],cachePartialPromises[searchKey]=$.Deferred(),this.getTemplate(templateName).then(function(templateSource){var fetchThemAll=this.scanForPartials(templateSource).filter(function(partialName){return!(parentage.indexOf(this.currentThemeName+"/"+partialName)&gt;=0)&amp;&amp;partialName!=templateName}.bind(this)).map(function(partialName){return parentage.push(this.currentThemeName+"/"+partialName),this.cachePartials(partialName,parentage)}.bind(this));return $.when.apply($,fetchThemAll).then((function(){return cachePartialPromises[searchKey].resolve(templateSource)}))}.bind(this)).catch(cachePartialPromises[searchKey].reject)),cachePartialPromises[searchKey]},Renderer.prototype.render=function(templateName,context,themeName){void 0===themeName&amp;&amp;(themeName=config.theme),this.currentThemeName=themeName;var modulename=config.iconsystemmodule,ready=$.Deferred();return require([modulename],(function(System){var system=new System;system instanceof IconSystem?(iconSystem=system,system.init().then(ready.resolve).catch(notification.exception)):ready.reject("Invalid icon system specified"+config.iconsystem)})),ready.then(function(){return this.cachePartials(templateName)}.bind(this)).then(function(templateSource){return this.doRender(templateSource,context,themeName)}.bind(this))};return{render:function(templateName,context,themeName){return(new Renderer).render(templateName,context,themeName)},prefetchTemplates:function(templateNames,themeName){var renderer=new Renderer;return void 0===themeName&amp;&amp;(themeName=config.theme),renderer.prefetchTemplates(templateNames,themeName)},renderForPromise:function(templateName,context,themeName){return(new Renderer).render(templateName,context,themeName).then((function(html,js){return{html:html,js:js}}))},renderPix:function(key,component,title){return(new Renderer).renderIcon(key,getNormalisedComponent(component),title)},runTemplateJS:runTemplateJS,replaceNodeContents:function(element,newHTML,newJS){return domReplace(element,newHTML,newJS,!0)},replaceNode:function(element,newHTML,newJS){return domReplace(element,newHTML,newJS,!1)},prependNodeContents:function(element,html,js){return function(element,html,js){var node=$(element);if(node.length){var newContent=$(html);return node.prepend(newContent),runTemplateJS(js),filterEvents.notifyFilterContentUpdated(node),newContent.get()}return[]}(element,html,js)},appendNodeContents:function(element,html,js){return function(element,html,js){var node=$(element);if(node.length){var newContent=$(html);return node.append(newContent),runTemplateJS(js),filterEvents.notifyFilterContentUpdated(node),newContent.get()}return[]}(element,html,js)}}}));
define("core/normalise",["exports","jquery"],(function(_exports,_jquery){var obj;
/**
   * Normalisation helpers.
   *
   * @module     core/normalise
   * @copyright  2020 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.getList=void 0,_jquery=(obj=_jquery)&amp;&amp;obj.__esModule?obj:{default:obj};_exports.getList=nodes=&gt;nodes instanceof HTMLElement?[nodes]:nodes instanceof Array?nodes:nodes instanceof NodeList?Array.from(nodes):nodes instanceof _jquery.default?nodes.get():Array.from(nodes)}));
define("core/userfeedback",["exports","core/ajax","core/notification"],(function(_exports,_ajax,_notification){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Handle clicking on action links of the feedback alert.
   *
   * @module     core/cta_feedback
   * @copyright  2020 Shamim Rezaie &lt;shamim@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.registerEventListeners=void 0,_ajax=_interopRequireDefault(_ajax),_notification=_interopRequireDefault(_notification);const Selectors={regions:{root:'[data-region="core/userfeedback"]'},actions:{}};Selectors.actions.give="".concat(Selectors.regions.root,' [data-action="give"]'),Selectors.actions.remind="".concat(Selectors.regions.root,' [data-action="remind"]');_exports.registerEventListeners=()=&gt;{document.addEventListener("click",(e=&gt;{const giveAction=e.target.closest(Selectors.actions.give);if(giveAction){if(e.preventDefault(),!window.open(giveAction.href))throw new Error("Unable to open popup");Promise.resolve(giveAction).then(hideRoot).then(recordAction).catch(_notification.default.exception)}const remindAction=e.target.closest(Selectors.actions.remind);remindAction&amp;&amp;(e.preventDefault(),Promise.resolve(remindAction).then(hideRoot).then(recordAction).catch(_notification.default.exception))}))};const recordAction=clickedItem=&gt;clickedItem.dataset.record?_ajax.default.call([{methodname:"core_create_userfeedback_action_record",args:{action:clickedItem.dataset.action,contextid:M.cfg.contextid}}])[0]:Promise.resolve(),hideRoot=clickedItem=&gt;(clickedItem.dataset.hide&amp;&amp;clickedItem.closest(Selectors.regions.root).remove(),clickedItem)}));
/**
 * A module to help with toggle select/deselect all.
 *
 * @module     core/checkbox-toggleall
 * @copyright  2019 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core/checkbox-toggleall",["jquery","core/pubsub"],(function($,PubSub){var registered=!1,events={checkboxToggled:"core/checkbox-toggleall:checkboxToggled"},getToggleGroupElements=function(root,toggleGroup,exactMatch){return exactMatch?root.find('[data-action="toggle"][data-togglegroup="'+toggleGroup+'"]'):root.find('[data-action="toggle"][data-togglegroup^="'+toggleGroup+'"]')},getAllSlaveCheckboxes=function(root,toggleGroup){return getToggleGroupElements(root,toggleGroup,!1).filter('[data-toggle="slave"]')},getControlCheckboxes=function(root,toggleGroup,exactMatch){return getToggleGroupElements(root,toggleGroup,exactMatch).filter('[data-toggle="master"]')},toggleSlavesFromMasters=function(e){var targetState,root=e.data.root,target=$(e.target),toggleGroupName=target.data("togglegroup");targetState=target.is(":checkbox")?target.is(":checked"):1===target.data("checkall"),toggleSlavesToState(root,toggleGroupName,targetState)},toggleMastersAndActionElements=function(root,toggleGroupName){var toggleGroupSlaves=getAllSlaveCheckboxes(root,toggleGroupName);if(toggleGroupSlaves.length&gt;0){var toggleGroupCheckedSlaves=toggleGroupSlaves.filter(":checked"),targetState=toggleGroupSlaves.length===toggleGroupCheckedSlaves.length;setMasterStates(root,toggleGroupName,targetState,!0),setActionElementStates(root,toggleGroupName,!toggleGroupCheckedSlaves.length)}},getToggleGroupLevels=function(toggleGroupName){var toggleGroups=toggleGroupName.split(" "),toggleGroupLevels=[],toggleGroupLevel="";return toggleGroups.forEach((function(toggleGroupName){toggleGroupLevel+=" "+toggleGroupName,toggleGroupLevels.push(toggleGroupLevel.trim())})),toggleGroupLevels},toggleSlavesToState=function(root,toggleGroupName,targetState){var slaves=getAllSlaveCheckboxes(root,toggleGroupName);slaves.prop("checked",targetState).trigger("change");var checkedSlaves=slaves.filter(":checked");setMasterStates(root,toggleGroupName,targetState,!1),setActionElementStates(root,toggleGroupName,!checkedSlaves.length),getToggleGroupLevels(toggleGroupName).filter((toggleGroupLevel=&gt;toggleGroupLevel!==toggleGroupName)).forEach((function(toggleGroupLevel){toggleMastersAndActionElements(root,toggleGroupLevel)})),PubSub.publish(events.checkboxToggled,{root:root,toggleGroupName:toggleGroupName,slaves:slaves,checkedSlaves:checkedSlaves,anyChecked:targetState})},toggleMastersFromSlaves=function(e){var root=e.data.root,toggleGroupName=$(e.target).data("togglegroup"),slaves=getAllSlaveCheckboxes(root,toggleGroupName),checkedSlaves=slaves.filter(":checked");getToggleGroupLevels(toggleGroupName).forEach((function(toggleGroupLevel){toggleMastersAndActionElements(root,toggleGroupLevel)})),PubSub.publish(events.checkboxToggled,{root:root,toggleGroupName:toggleGroupName,slaves:slaves,checkedSlaves:checkedSlaves,anyChecked:!!checkedSlaves.length})},setActionElementStates=function(root,toggleGroupName,disableActionElements){(function(root,toggleGroup){return getToggleGroupElements(root,toggleGroup,!0).filter('[data-toggle="action"]')})(root,toggleGroupName).prop("disabled",disableActionElements)},setMasterStates=function(root,toggleGroupName,targetState,exactMatch){var masters=getControlCheckboxes(root,toggleGroupName,exactMatch);masters.prop("checked",targetState),masters.each((function(i,masterElement){var targetString;if(masterElement=$(masterElement),targetString=targetState?masterElement.data("toggle-deselectall"):masterElement.data("toggle-selectall"),masterElement.is(":checkbox")){var masterLabel=root.find('[for="'+masterElement.attr("id")+'"]');masterLabel.length&amp;&amp;masterLabel.html()!==targetString&amp;&amp;masterLabel.html(targetString)}else masterElement.text(targetString),masterElement.data("checkall",targetState?0:1)}))};return{init:function(){!function(){if(!registered){registered=!0;var root=$(document.body);root.on("click",'[data-action="toggle"][data-toggle="master"]',{root:root},toggleSlavesFromMasters),root.on("click",'[data-action="toggle"][data-toggle="slave"]',{root:root},toggleMastersFromSlaves)}}()},events:events,setGroupState:function(root,toggleGroupName,targetState){root=$(root),setMasterStates(root,toggleGroupName,targetState,!0),toggleSlavesToState(root,toggleGroupName,targetState)},updateSlavesFromMasterState:function(root,toggleGroupName){root=$(root);var targetState,target=getControlCheckboxes(root,toggleGroupName,!1);targetState=target.is(":checkbox")?target.is(":checked"):1===target.data("checkall"),toggleSlavesToState(root,toggleGroupName,targetState)}}}));
/**
 * A helper to manage pendingJS checks.
 *
 * @module     core/pending
 * @copyright  2018 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.6
 */
define("core/pending",["jquery"],(function($){var request=function(pendingKey){var pendingPromise=$.Deferred();return pendingKey=pendingKey||{},M.util.js_pending(pendingKey),pendingPromise.then((function(){return M.util.js_complete(pendingKey)})).catch(),pendingPromise};return request.prototype.constructor=request,request}));
define("core/copy_to_clipboard",["core/str","core/toast","core/prefetch"],(function(_str,_toast,_prefetch){
/**
   * A JavaScript module that enhances a button and text container to support copy-to-clipboard functionality.
   *
   * This module needs to be loaded by pages/templates/modules that require this functionality.
   *
   * To enable copy-to-clipboard functionality, we need a trigger element (usually a button) and a copy target element
   * (e.g. a div, span, text input, or text area).
   *
   * In the trigger element, we need to declare the &lt;code&gt;data-action="copytoclipboard"&lt;/code&gt; attribute and set the
   * &lt;code&gt;data-clipboard-target&lt;/code&gt; attribute which is the CSS selector that points to the target element that contains the text
   * to be copied.
   *
   * When the text is successfully copied to the clipboard, a toast message that indicates that the copy operation was a success
   * will be shown. This success message can be customised by setting the &lt;code&gt;data-clipboard-success-message&lt;/code&gt; attribute in the
   * trigger element.
   *
   * @module     core/copy_to_clipboard
   * @copyright  2021 Jun Pataleta
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   *
   * @example &lt;caption&gt;Markup for the trigger and target elements&lt;/caption&gt;
   * &lt;input type="text" id="textinputtocopy" class="form-control" value="Copy me!" readonly /&gt;
   * &lt;button id="copybutton" data-action="copytoclipboard" data-clipboard-target="#textinputtocopy"
   *         data-clipboard-success-message="Success!" class="btn btn-secondary"&gt;
   *     Copy to clipboard
   * &lt;/button&gt;
   */
const copyNodeContentToClipboard=(copyButton,copyTarget)=&gt;(copyTarget.select(),document.execCommand("copy")?(displaySuccessToast(copyButton),!0):(displayFailureToast(),!1)),displaySuccessToast=copyButton=&gt;getSuccessText(copyButton).then((successMessage=&gt;(0,_toast.add)(successMessage,{}))),displayFailureToast=()=&gt;getFailureText().then((message=&gt;(0,_toast.add)(message,{type:"warning"}))),getFailureText=()=&gt;(0,_str.get_string)("unabletocopytoclipboard","core"),getSuccessText=copyButton=&gt;copyButton.dataset.clipboardSuccessMessage?Promise.resolve(copyButton.dataset.clipboardSuccessMessage):(0,_str.get_string)("textcopiedtoclipboard","core"),getTextFromContainer=container=&gt;container.value?container.value:container.innerText?container.innerText:null;let loaded=!1;loaded||((0,_prefetch.prefetchStrings)("core",["textcopiedtoclipboard","unabletocopytoclipboard"]),document.addEventListener("click",(e=&gt;{const copyButton=e.target.closest('[data-action="copytoclipboard"]');if(!copyButton)return;if(!copyButton.dataset.clipboardTarget)return;const copyTarget=document.querySelector(copyButton.dataset.clipboardTarget);if(!copyTarget)return;e.preventDefault();const textToCopy=getTextFromContainer(copyTarget);if(textToCopy)if(navigator.clipboard)navigator.clipboard.writeText(textToCopy).then((()=&gt;displaySuccessToast(copyButton))).catch();else if(copyTarget instanceof HTMLInputElement||copyTarget instanceof HTMLTextAreaElement)copyTarget.focus(),copyNodeContentToClipboard(copyButton,copyTarget)&amp;&amp;copyButton.focus();else{const copyRegion=document.createElement("textarea");copyRegion.value=textToCopy,copyRegion.classList.add("sr-only"),document.body.appendChild(copyRegion),copyNodeContentToClipboard(copyButton,copyRegion),copyRegion.remove(),copyButton.focus()}else displayFailureToast()})),loaded=!0)}));
/*
 * JavaScript to provide automatic scrolling, e.g. during a drag operation.
 *
 * Note: this module is defined statically. It is a singleton. You
 * can only have one use of it active at any time. However, since this
 * is usually used in relation to drag-drop, and since you only ever
 * drag one thing at a time, this is not a problem in practice.
 *
 * @module     core/autoscroll
 * @copyright  2016 The Open University
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.6
 */
define("core/autoscroll",["jquery"],(function($){var autoscroll={SCROLL_THRESHOLD:30,SCROLL_FREQUENCY:1e3/60,SCROLL_SPEED:.5,scrollingId:null,scrollAmount:0,callback:null,start:function(callback){$(window).on("mousemove",autoscroll.mouseMove),$(window).on("touchmove",autoscroll.touchMove),autoscroll.callback=callback},stop:function(){$(window).off("mousemove",autoscroll.mouseMove),$(window).off("touchmove",autoscroll.touchMove),null!==autoscroll.scrollingId&amp;&amp;autoscroll.stopScrolling()},touchMove:function(e){for(var i=0;i&lt;e.changedTouches.length;i++)autoscroll.handleMove(e.changedTouches[i].clientX,e.changedTouches[i].clientY)},mouseMove:function(e){autoscroll.handleMove(e.clientX,e.clientY)},handleMove:function(clientX,clientY){clientY&lt;autoscroll.SCROLL_THRESHOLD?autoscroll.scrollAmount=-Math.min(autoscroll.SCROLL_THRESHOLD-clientY,autoscroll.SCROLL_THRESHOLD):clientY&gt;$(window).height()-autoscroll.SCROLL_THRESHOLD?autoscroll.scrollAmount=Math.min(clientY-($(window).height()-autoscroll.SCROLL_THRESHOLD),autoscroll.SCROLL_THRESHOLD):autoscroll.scrollAmount=0,autoscroll.scrollAmount&amp;&amp;null===autoscroll.scrollingId?autoscroll.startScrolling():autoscroll.scrollAmount||null===autoscroll.scrollingId||autoscroll.stopScrolling()},startScrolling:function(){var maxScroll=$(document).height()-$(window).height();autoscroll.scrollingId=window.setInterval((function(){var y=$(window).scrollTop(),offset=Math.round(autoscroll.scrollAmount*autoscroll.SCROLL_SPEED);if(y+offset&lt;0&amp;&amp;(offset=-y),y+offset&gt;maxScroll&amp;&amp;(offset=maxScroll-y),0!==offset){$(window).scrollTop(y+offset);var realOffset=$(window).scrollTop()-y;0!==realOffset&amp;&amp;autoscroll.callback&amp;&amp;autoscroll.callback(realOffset)}}),autoscroll.SCROLL_FREQUENCY)},stopScrolling:function(){window.clearInterval(autoscroll.scrollingId),autoscroll.scrollingId=null}};return{start:autoscroll.start,stop:autoscroll.stop}}));
/**
 * Factory to create a paged content widget.
 *
 * @module     core/paged_content_factory
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core/paged_content_factory",["jquery","core/templates","core/notification","core/paged_content","core/paged_content_events","core/pubsub","core/ajax"],(function($,Templates,Notification,PagedContent,PagedContentEvents,PubSub,Ajax){var TEMPLATES_PAGED_CONTENT="core/paged_content",DEFAULT_ITEMS_PER_PAGE_SINGLE=25,DEFAULT_ITEMS_PER_PAGE_ARRAY=[25,50,100,0],DEFAULT_MAX_PAGES=3,buildItemsPerPagePagingBarContext=function(itemsPerPage){var context=[];$.isArray(itemsPerPage)?(context=itemsPerPage.map((function(num){return"number"==typeof num?{value:num,active:!1}:num}))).filter((function(item){return item.active})).length||(context[0].active=!0):context=[{value:itemsPerPage,active:!0}];return context},buildPagingBarTemplateContext=function(numberOfItems,itemsPerPage){return numberOfItems?function(numberOfItems,itemsPerPage){null===itemsPerPage&amp;&amp;(itemsPerPage=DEFAULT_ITEMS_PER_PAGE_SINGLE),$.isArray(itemsPerPage)&amp;&amp;(itemsPerPage=itemsPerPage[0]);var context={showitemsperpageselector:!1,itemsperpage:[{value:35,active:!0}],previous:!0,next:!0,activepagenumber:1,hidecontrolonsinglepage:!0,pages:[]};context.itemsperpage=buildItemsPerPagePagingBarContext(itemsPerPage);for(var numberOfPages=function(numberOfItems,itemsPerPage){var numberOfPages=1;if(numberOfItems&gt;0){var partial=numberOfItems%itemsPerPage;numberOfPages=partial?(numberOfItems-=partial)/itemsPerPage+1:numberOfItems/itemsPerPage}return numberOfPages}(numberOfItems,itemsPerPage),i=1;i&lt;=numberOfPages;i++){var page={number:i,page:""+i};1===i&amp;&amp;(page.active=!0),context.pages.push(page)}return context.barsize=10,context}(numberOfItems,itemsPerPage):function(itemsPerPage){null===itemsPerPage&amp;&amp;(itemsPerPage=DEFAULT_ITEMS_PER_PAGE_ARRAY);var context={showitemsperpageselector:!1,itemsperpage:[{value:35,active:!0}],previous:!0,next:!0,activepagenumber:1,hidecontrolonsinglepage:!0,pages:[]};return context.itemsperpage=buildItemsPerPagePagingBarContext(itemsPerPage),context.showitemsperpageselector=$.isArray(itemsPerPage)&amp;&amp;itemsPerPage.length&gt;1,context}(itemsPerPage)},buildTemplateContext=function(numberOfItems,itemsPerPage,config){var context={pagingbar:!1,pagingdropdown:!1,skipjs:!0,ignorecontrolwhileloading:!0,controlplacementbottom:!1};return config.hasOwnProperty("ignoreControlWhileLoading")&amp;&amp;(context.ignorecontrolwhileloading=config.ignoreControlWhileLoading),config.hasOwnProperty("controlPlacementBottom")&amp;&amp;(context.controlplacementbottom=config.controlPlacementBottom),config.hasOwnProperty("hideControlOnSinglePage")&amp;&amp;(context.hidecontrolonsinglepage=config.hideControlOnSinglePage),config.hasOwnProperty("ariaLabels")&amp;&amp;(context.arialabels=config.ariaLabels),config.hasOwnProperty("dropdown")&amp;&amp;config.dropdown?context.pagingdropdown=function(itemsPerPage,config){if(null===itemsPerPage&amp;&amp;(itemsPerPage=DEFAULT_ITEMS_PER_PAGE_SINGLE),$.isArray(itemsPerPage))return{options:itemsPerPage};var context={options:[]},totalItems=0,lastIncrease=0,maxPages=DEFAULT_MAX_PAGES;config.hasOwnProperty("maxPages")&amp;&amp;(maxPages=config.maxPages);for(var i=1;i&lt;=maxPages;i++){var itemCount=0;i&lt;=2?(itemCount=itemsPerPage,lastIncrease=itemsPerPage):itemCount=lastIncrease*=2;var option={itemcount:itemCount,content:totalItems+=itemCount};1===i&amp;&amp;(option.active=!0),context.options.push(option)}return context}(itemsPerPage,config):(context.pagingbar=buildPagingBarTemplateContext(numberOfItems,itemsPerPage),config.hasOwnProperty("showFirstLast")&amp;&amp;config.showFirstLast&amp;&amp;(context.pagingbar.first=!0,context.pagingbar.last=!0)),context},createWithTotalAndLimit=function(numberOfItems,itemsPerPage,renderPagesContentCallback,config){config=config||{};var deferred=$.Deferred(),templateContext=buildTemplateContext(numberOfItems,itemsPerPage,config);return Templates.render(TEMPLATES_PAGED_CONTENT,templateContext).then((function(html,js){var id=(html=$(html)).attr("id");config.hasOwnProperty("eventNamespace")&amp;&amp;(id=config.eventNamespace);var container=html;PagedContent.init(container,renderPagesContentCallback,id),registerEvents(id,config),deferred.resolve(html,js)})).fail((function(exception){deferred.reject(exception)})).fail(Notification.exception),deferred.promise()},registerEvents=function(namespace,config){var persistentLimitKey;config.hasOwnProperty("persistentLimitKey")&amp;&amp;PubSub.subscribe(namespace+PagedContentEvents.SET_ITEMS_PER_PAGE_LIMIT,(persistentLimitKey=config.persistentLimitKey,function(limit){var request={methodname:"core_user_update_user_preferences",args:{preferences:[{type:persistentLimitKey,value:limit}]}};Ajax.call([request])}))};return{create:function(renderPagesContentCallback,config){return createWithTotalAndLimit(null,null,renderPagesContentCallback,config)},createWithLimit:function(itemsPerPage,renderPagesContentCallback,config){return createWithTotalAndLimit(null,itemsPerPage,renderPagesContentCallback,config)},createWithTotalAndLimit:createWithTotalAndLimit,createFromStaticList:function(contentItems,itemsPerPage,renderContentCallback,config){void 0===config&amp;&amp;(config={});var numberOfItems=contentItems.length;return createWithTotalAndLimit(numberOfItems,itemsPerPage,(function(pagesData){var contentToRender=[];return pagesData.forEach((function(pageData){var begin=pageData.offset,end=pageData.limit?begin+pageData.limit:numberOfItems,items=contentItems.slice(begin,end);contentToRender.push(items)})),renderContentCallback(contentToRender)}),config)},createFromAjax:createWithTotalAndLimit,resetLastPageNumber:function(id,lastPageNumber){PubSub.publish(id+PagedContentEvents.ALL_ITEMS_LOADED,lastPageNumber)}}}));
/**
 * Simple API for set/get to localstorage, with cacherev expiration.
 *
 * @module     core/localstorage
 * @class      localstorage
 * @copyright  2015 Damyon Wiese &lt;damyon@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      2.9
 */
define("core/localstorage",["core/config","core/storagewrapper"],(function(config,StorageWrapper){var storage=new StorageWrapper(window.localStorage);return{get:function(key){return storage.get(key)},set:function(key,value){return storage.set(key,value)},clean:function(){return storage.clean()}}}));
/**
 * Implement an accessible aria tree widget, from a nested unordered list.
 * Based on http://oaa-accessibility.org/example/41/.
 *
 * @module     core/tree
 * @copyright  2015 Damyon Wiese &lt;damyon@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core/tree",["jquery"],(function($){var SELECTORS_ITEM="[role=treeitem]",SELECTORS_GROUP="[role=treeitem]:has([role=group]), [role=treeitem][aria-owns], [role=treeitem][data-requires-ajax=true]",SELECTORS_CLOSED_GROUP="[role=treeitem]:has([role=group])[aria-expanded=false], [role=treeitem][aria-owns][aria-expanded=false], [role=treeitem][data-requires-ajax=true][aria-expanded=false]",SELECTORS_FIRST_ITEM="[role=treeitem]:first",SELECTORS_VISIBLE_ITEM="[role=treeitem]:visible",SELECTORS_UNLOADED_AJAX_ITEM="[role=treeitem][data-requires-ajax=true][data-loaded=false][aria-expanded=true]",Tree=function(selector,selectCallback){this.treeRoot=$(selector),this.treeRoot.data("activeItem",null),this.selectCallback=selectCallback,this.keys={tab:9,enter:13,space:32,pageup:33,pagedown:34,end:35,home:36,left:37,up:38,right:39,down:40,asterisk:106},this.initialiseNodes(this.treeRoot),this.setActiveItem(this.treeRoot.find(SELECTORS_FIRST_ITEM)),this.refreshVisibleItemsCache(),this.bindEventHandlers()};return Tree.prototype.registerEnterCallback=function(callback){this.enterCallback=callback},Tree.prototype.refreshVisibleItemsCache=function(){this.treeRoot.data("visibleItems",this.treeRoot.find(SELECTORS_VISIBLE_ITEM))},Tree.prototype.getVisibleItems=function(){return this.treeRoot.data("visibleItems")},Tree.prototype.setActiveItem=function(item){var currentActive=this.treeRoot.data("activeItem");item!==currentActive&amp;&amp;(currentActive&amp;&amp;(currentActive.attr("tabindex","-1"),currentActive.attr("aria-selected","false")),item.attr("tabindex","0"),item.attr("aria-selected","true"),this.treeRoot.data("activeItem",item),"function"==typeof this.selectCallback&amp;&amp;this.selectCallback(item))},Tree.prototype.isGroupItem=function(item){return item.is(SELECTORS_GROUP)},Tree.prototype.getGroupFromItem=function(item){var ariaowns=this.treeRoot.find("#"+item.attr("aria-owns")),plain=item.children("[role=group]");return ariaowns.length&gt;plain.length?ariaowns:plain},Tree.prototype.isGroupCollapsed=function(item){return"false"===item.attr("aria-expanded")},Tree.prototype.isGroupCollapsible=function(item){return"false"!==item.attr("data-collapsible")},Tree.prototype.initialiseNodes=function(node){this.removeAllFromTabOrder(node),this.setAriaSelectedFalseOnItems(node);var thisTree=this;node.find(SELECTORS_UNLOADED_AJAX_ITEM).each((function(){var unloadedNode=$(this);thisTree.collapseGroup(unloadedNode),thisTree.expandGroup(unloadedNode)}))},Tree.prototype.removeAllFromTabOrder=function(node){node.find("*").attr("tabindex","-1"),this.getGroupFromItem($(node)).find("*").attr("tabindex","-1")},Tree.prototype.setAriaSelectedFalseOnItems=function(node){node.find(SELECTORS_ITEM).attr("aria-selected","false")},Tree.prototype.expandAllGroups=function(){var thisTree=this;this.treeRoot.find(SELECTORS_CLOSED_GROUP).each((function(){var groupNode=$(this);thisTree.expandGroup($(this)).done((function(){thisTree.expandAllChildGroups(groupNode)}))}))},Tree.prototype.expandAllChildGroups=function(item){var thisTree=this;this.getGroupFromItem(item).find(SELECTORS_CLOSED_GROUP).each((function(){var groupNode=$(this);thisTree.expandGroup($(this)).done((function(){thisTree.expandAllChildGroups(groupNode)}))}))},Tree.prototype.expandGroup=function(item){var promise=$.Deferred();if("false"!==item.attr("data-expandable")&amp;&amp;this.isGroupCollapsed(item))if("true"===item.attr("data-requires-ajax")&amp;&amp;"true"!==item.attr("data-loaded")){item.attr("data-loaded",!1);var moduleName=item.closest("[data-ajax-loader]").attr("data-ajax-loader"),thisTree=this;const p=item.find("p");p.addClass("loading"),require([moduleName],(function(loader){loader.load(item).done((function(){item.attr("data-loaded",!0),thisTree.initialiseNodes(item),thisTree.finishExpandingGroup(item),p.removeClass("loading"),promise.resolve()}))}))}else this.finishExpandingGroup(item),promise.resolve();else promise.resolve();return promise},Tree.prototype.finishExpandingGroup=function(item){this.getGroupFromItem(item).removeAttr("aria-hidden"),item.attr("aria-expanded","true"),this.refreshVisibleItemsCache()},Tree.prototype.collapseGroup=function(item){this.isGroupCollapsible(item)&amp;&amp;!this.isGroupCollapsed(item)&amp;&amp;(this.getGroupFromItem(item).attr("aria-hidden","true"),item.attr("aria-expanded","false"),this.refreshVisibleItemsCache())},Tree.prototype.toggleGroup=function(item){"true"===item.attr("aria-expanded")?this.collapseGroup(item):this.expandGroup(item)},Tree.prototype.handleKeyDown=function(e){var _this$getVisibleItems,item=$(e.target),currentIndex=null===(_this$getVisibleItems=this.getVisibleItems())||void 0===_this$getVisibleItems?void 0:_this$getVisibleItems.index(item);if(!(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey&amp;&amp;e.keyCode!=this.keys.tab))switch(e.keyCode){case this.keys.home:return this.getVisibleItems().first().focus(),void e.preventDefault();case this.keys.end:return this.getVisibleItems().last().focus(),void e.preventDefault();case this.keys.enter:var links=item.children("a").length?item.children("a"):item.children().not(SELECTORS_GROUP).find("a");return links.length?links.first().data("overrides-tree-activation-key-handler")?links.first().triggerHandler(e):"function"==typeof this.enterCallback?this.enterCallback(item):window.location.href=links.first().attr("href"):this.isGroupItem(item)&amp;&amp;this.toggleGroup(item,!0),void e.preventDefault();case this.keys.space:if(this.isGroupItem(item))this.toggleGroup(item,!0);else if(item.children("a").length){var firstLink=item.children("a").first();firstLink.data("overrides-tree-activation-key-handler")&amp;&amp;firstLink.triggerHandler(e)}return void e.preventDefault();case this.keys.left:var focusParent=function(tree){tree.getVisibleItems().filter((function(){return tree.getGroupFromItem($(this)).has(item).length})).focus()};return this.isGroupItem(item)?this.isGroupCollapsed(item)?focusParent(this):this.collapseGroup(item):focusParent(this),void e.preventDefault();case this.keys.right:return this.isGroupItem(item)&amp;&amp;(this.isGroupCollapsed(item)?this.expandGroup(item):this.getGroupFromItem(item).find(SELECTORS_ITEM).first().focus()),void e.preventDefault();case this.keys.up:if(currentIndex&gt;0)this.getVisibleItems().eq(currentIndex-1).focus();return void e.preventDefault();case this.keys.down:if(currentIndex&lt;this.getVisibleItems().length-1)this.getVisibleItems().eq(currentIndex+1).focus();return void e.preventDefault();case this.keys.asterisk:return this.expandAllGroups(),void e.preventDefault()}},Tree.prototype.handleItemClick=function(event,item){item.focus(),this.isGroupItem(item)&amp;&amp;this.toggleGroup(item)},Tree.prototype.handleClick=function(event){if(!(event.altKey||event.ctrlKey||event.shiftKey||event.metaKey)){var item=$(event.target).closest('[role="treeitem"]');item.is(event.currentTarget)&amp;&amp;this.handleItemClick(event,item)}},Tree.prototype.handleFocus=function(e){this.setActiveItem($(e.target))},Tree.prototype.bindEventHandlers=function(){this.treeRoot.on({click:this.handleClick.bind(this),keydown:this.handleKeyDown.bind(this),focus:this.handleFocus.bind(this)},SELECTORS_ITEM)},Tree}));
/**
 * A registry for the different types of modal.
 *
 * @module     core/modal_registry
 * @class      modal_registry
 * @copyright  2016 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core/modal_registry",["core/notification","core/prefetch"],(function(Notification,Prefetch){var registry={},get=function(type){return registry[type]};return{register:function(type,module,template){get(type)&amp;&amp;Notification.exception({message:"Modal of  type '"+type+"' is already registered"}),module&amp;&amp;"function"==typeof module||Notification.exception({message:"You must provide a modal module"}),template||Notification.exception({message:"You must provide a modal template"}),registry[type]={module:module,template:template},Prefetch.prefetchTemplate(template)},get:get}}));
define("core/modal_save_cancel",["exports","core/modal","core/notification"],(function(_exports,_modal,_notification){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Contain the logic for the save/cancel modal.
   *
   * @module     core/modal_save_cancel
   * @copyright  2016 Ryan Wyllie &lt;ryan@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_modal=_interopRequireDefault(_modal),_notification=_interopRequireDefault(_notification);class _default extends _modal.default{constructor(root){super(root),this.getFooter().find(this.getActionSelector("save")).length||_notification.default.exception({message:"No save button found"}),this.getFooter().find(this.getActionSelector("cancel")).length||_notification.default.exception({message:"No cancel button found"})}registerEventListeners(){super.registerEventListeners(),this.registerCloseOnSave(),this.registerCloseOnCancel()}setFooter(){_notification.default.exception({message:"Can not change the footer of a save cancel modal"})}setSaveButtonText(value){return this.setButtonText("save",value)}}return _exports.default=_default,_exports.default}));
define("core/notification",["exports","core/pending","core/log"],(function(_exports,_pending,_log){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.saveCancelPromise=_exports.saveCancel=_exports.init=_exports.fetchNotifications=_exports.exception=_exports.default=_exports.confirm=_exports.alert=_exports.addNotification=void 0,_pending=_interopRequireDefault(_pending),_log=_interopRequireDefault(_log);var _systemImportTransformerGlobalIdentifier="undefined"!=typeof window?window:"undefined"!=typeof self?self:"undefined"!=typeof global?global:{};function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}let currentContextId=M.cfg.contextid;const notificationTypes={success:"core/notification_success",info:"core/notification_info",warning:"core/notification_warning",error:"core/notification_error"},Selectors={notificationRegion:"#".concat("user-notifications"),fallbackRegionParents:["#region-main",'[role="main"]',"body"]},fetchNotifications=async()=&gt;(await("function"==typeof _systemImportTransformerGlobalIdentifier.define&amp;&amp;_systemImportTransformerGlobalIdentifier.define.amd?new Promise((function(resolve,reject){_systemImportTransformerGlobalIdentifier.require(["core/ajax"],resolve,reject)})):"undefined"!=typeof module&amp;&amp;module.exports&amp;&amp;"undefined"!=typeof require||"undefined"!=typeof module&amp;&amp;module.component&amp;&amp;_systemImportTransformerGlobalIdentifier.require&amp;&amp;"component"===_systemImportTransformerGlobalIdentifier.require.loader?Promise.resolve(require("core/ajax")):Promise.resolve(_systemImportTransformerGlobalIdentifier["core/ajax"]))).call([{methodname:"core_fetch_notifications",args:{contextid:currentContextId}}])[0].then(addNotifications);_exports.fetchNotifications=fetchNotifications;const addNotifications=notifications=&gt;{if(!notifications.length)return Promise.resolve();const pendingPromise=new _pending.default("core/notification:addNotifications");return notifications.forEach((notification=&gt;renderNotification(notification.template,notification.variables))),pendingPromise.resolve()},addNotification=notification=&gt;{const pendingPromise=new _pending.default("core/notification:addNotifications");let template=notificationTypes.error;return(notification={closebutton:!0,announce:!0,type:"error",...notification}).template?(template=notification.template,delete notification.template):notification.type&amp;&amp;(void 0!==notificationTypes[notification.type]&amp;&amp;(template=notificationTypes[notification.type]),delete notification.type),renderNotification(template,notification).then(pendingPromise.resolve)};_exports.addNotification=addNotification;const renderNotification=async(template,variables)=&gt;{if(void 0===variables.message||!variables.message)return void _log.default.debug("Notification received without content. Skipping.");const pendingPromise=new _pending.default("core/notification:renderNotification"),Templates=await("function"==typeof _systemImportTransformerGlobalIdentifier.define&amp;&amp;_systemImportTransformerGlobalIdentifier.define.amd?new Promise((function(resolve,reject){_systemImportTransformerGlobalIdentifier.require(["core/templates"],resolve,reject)})):"undefined"!=typeof module&amp;&amp;module.exports&amp;&amp;"undefined"!=typeof require||"undefined"!=typeof module&amp;&amp;module.component&amp;&amp;_systemImportTransformerGlobalIdentifier.require&amp;&amp;"component"===_systemImportTransformerGlobalIdentifier.require.loader?Promise.resolve(require("core/templates")):Promise.resolve(_systemImportTransformerGlobalIdentifier["core/templates"]));Templates.renderForPromise(template,variables).then((_ref=&gt;{let{html:html,js:js=""}=_ref;Templates.prependNodeContents(getNotificationRegion(),html,js)})).then(pendingPromise.resolve).catch(exception)},getNotificationRegion=()=&gt;document.querySelector(Selectors.notificationRegion),alert=async(title,message,cancelText)=&gt;{var pendingPromise=new _pending.default("core/notification:alert");const ModalFactory=await("function"==typeof _systemImportTransformerGlobalIdentifier.define&amp;&amp;_systemImportTransformerGlobalIdentifier.define.amd?new Promise((function(resolve,reject){_systemImportTransformerGlobalIdentifier.require(["core/modal_factory"],resolve,reject)})):"undefined"!=typeof module&amp;&amp;module.exports&amp;&amp;"undefined"!=typeof require||"undefined"!=typeof module&amp;&amp;module.component&amp;&amp;_systemImportTransformerGlobalIdentifier.require&amp;&amp;"component"===_systemImportTransformerGlobalIdentifier.require.loader?Promise.resolve(require("core/modal_factory")):Promise.resolve(_systemImportTransformerGlobalIdentifier["core/modal_factory"]));return ModalFactory.create({type:ModalFactory.types.ALERT,body:message,title:title,buttons:{cancel:cancelText},removeOnClose:!0}).then((function(modal){return modal.show(),pendingPromise.resolve(),modal}))};_exports.alert=alert;const confirm=(title,question,saveLabel,noLabel,saveCallback,cancelCallback)=&gt;saveCancel(title,question,saveLabel,saveCallback,cancelCallback);_exports.confirm=confirm;const saveCancel=async function(title,question,saveLabel,saveCallback,cancelCallback){let{triggerElement:triggerElement=null}=arguments.length&gt;5&amp;&amp;void 0!==arguments[5]?arguments[5]:{};const pendingPromise=new _pending.default("core/notification:confirm"),[ModalFactory,ModalEvents]=await Promise.all(["function"==typeof _systemImportTransformerGlobalIdentifier.define&amp;&amp;_systemImportTransformerGlobalIdentifier.define.amd?new Promise((function(resolve,reject){_systemImportTransformerGlobalIdentifier.require(["core/modal_factory"],resolve,reject)})):"undefined"!=typeof module&amp;&amp;module.exports&amp;&amp;"undefined"!=typeof require||"undefined"!=typeof module&amp;&amp;module.component&amp;&amp;_systemImportTransformerGlobalIdentifier.require&amp;&amp;"component"===_systemImportTransformerGlobalIdentifier.require.loader?Promise.resolve(require("core/modal_factory")):Promise.resolve(_systemImportTransformerGlobalIdentifier["core/modal_factory"]),"function"==typeof _systemImportTransformerGlobalIdentifier.define&amp;&amp;_systemImportTransformerGlobalIdentifier.define.amd?new Promise((function(resolve,reject){_systemImportTransformerGlobalIdentifier.require(["core/modal_events"],resolve,reject)})):"undefined"!=typeof module&amp;&amp;module.exports&amp;&amp;"undefined"!=typeof require||"undefined"!=typeof module&amp;&amp;module.component&amp;&amp;_systemImportTransformerGlobalIdentifier.require&amp;&amp;"component"===_systemImportTransformerGlobalIdentifier.require.loader?Promise.resolve(require("core/modal_events")):Promise.resolve(_systemImportTransformerGlobalIdentifier["core/modal_events"])]);return ModalFactory.create({type:ModalFactory.types.SAVE_CANCEL,title:title,body:question,buttons:{save:saveLabel},removeOnClose:!0}).then((function(modal){return modal.show(),modal.getRoot().on(ModalEvents.save,saveCallback),modal.getRoot().on(ModalEvents.cancel,cancelCallback),modal.getRoot().on(ModalEvents.hidden,(()=&gt;null==triggerElement?void 0:triggerElement.focus())),pendingPromise.resolve(),modal}))};_exports.saveCancel=saveCancel;const saveCancelPromise=function(title,question,saveLabel){let{triggerElement:triggerElement=null}=arguments.length&gt;3&amp;&amp;void 0!==arguments[3]?arguments[3]:{};return new Promise(((resolve,reject)=&gt;{saveCancel(title,question,saveLabel,resolve,reject,{triggerElement:triggerElement})}))};_exports.saveCancelPromise=saveCancelPromise;const exception=async ex=&gt;{const pendingPromise=new _pending.default("core/notification:displayException");if(ex.stack||(ex.stack=""),ex.debuginfo&amp;&amp;(ex.stack+=ex.debuginfo+"\n"),!ex.backtrace&amp;&amp;ex.stacktrace&amp;&amp;(ex.backtrace=ex.stacktrace),ex.backtrace){ex.stack+=ex.backtrace;const ln=ex.backtrace.match(/line ([^ ]*) of/),fn=ex.backtrace.match(/ of ([^:]*): /);ln&amp;&amp;ln[1]&amp;&amp;(ex.lineNumber=ln[1]),fn&amp;&amp;fn[1]&amp;&amp;(ex.fileName=fn[1],ex.fileName.length&gt;30&amp;&amp;(ex.fileName="..."+ex.fileName.substr(ex.fileName.length-27)))}void 0===ex.name&amp;&amp;ex.errorcode&amp;&amp;(ex.name=ex.errorcode);(await("function"==typeof _systemImportTransformerGlobalIdentifier.define&amp;&amp;_systemImportTransformerGlobalIdentifier.define.amd?new Promise((function(resolve,reject){_systemImportTransformerGlobalIdentifier.require(["core/yui"],resolve,reject)})):"undefined"!=typeof module&amp;&amp;module.exports&amp;&amp;"undefined"!=typeof require||"undefined"!=typeof module&amp;&amp;module.component&amp;&amp;_systemImportTransformerGlobalIdentifier.require&amp;&amp;"component"===_systemImportTransformerGlobalIdentifier.require.loader?Promise.resolve(require("core/yui")):Promise.resolve(_systemImportTransformerGlobalIdentifier["core/yui"]))).use("moodle-core-notification-exception",(function(){new M.core.exception(ex).show(),pendingPromise.resolve()}))};_exports.exception=exception;const init=(contextId,notificationList)=&gt;{currentContextId=contextId,(()=&gt;{if(getNotificationRegion())return!1;const newRegion=document.createElement("span");newRegion.id="user-notifications",Selectors.fallbackRegionParents.some((selector=&gt;{const targetRegion=document.querySelector(selector);return!!targetRegion&amp;&amp;(targetRegion.prepend(newRegion),!0)}))})(),addNotifications(notificationList)};_exports.init=init;var _default={init:init,fetchNotifications:fetchNotifications,addNotification:addNotification,alert:alert,confirm:confirm,saveCancel:saveCancel,saveCancelPromise:saveCancelPromise,exception:exception};return _exports.default=_default,_exports.default}));
/**
 * Chart axis.
 *
 * @module core/chart_axis
 * @copyright  2016 Frédéric Massart - FMCorz.net
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core/chart_axis",[],(function(){function Axis(){}return Axis.prototype.POS_DEFAULT=null,Axis.prototype.POS_BOTTOM="bottom",Axis.prototype.POS_LEFT="left",Axis.prototype.POS_RIGHT="right",Axis.prototype.POS_TOP="top",Axis.prototype._label=null,Axis.prototype._labels=null,Axis.prototype._max=null,Axis.prototype._min=null,Axis.prototype._position=null,Axis.prototype._stepSize=null,Axis.prototype.create=function(obj){var s=new Axis;return s.setPosition(obj.position),s.setLabel(obj.label),s.setStepSize(obj.stepSize),s.setMax(obj.max),s.setMin(obj.min),s.setLabels(obj.labels),s},Axis.prototype.getLabel=function(){return this._label},Axis.prototype.getLabels=function(){return this._labels},Axis.prototype.getMax=function(){return this._max},Axis.prototype.getMin=function(){return this._min},Axis.prototype.getPosition=function(){return this._position},Axis.prototype.getStepSize=function(){return this._stepSize},Axis.prototype.setLabel=function(label){this._label=label||null},Axis.prototype.setLabels=function(labels){this._labels=labels||null,null===this._labels||null!==this._stepSize||null!==this._min&amp;&amp;0!==this._min||null!==this._max||(this.setStepSize(1),this.setMin(0),this.setMax(labels.length-1))},Axis.prototype.setMax=function(max){this._max=void 0!==max?max:null},Axis.prototype.setMin=function(min){this._min=void 0!==min?min:null},Axis.prototype.setPosition=function(position){if(position!=this.POS_DEFAULT&amp;&amp;position!=this.POS_BOTTOM&amp;&amp;position!=this.POS_LEFT&amp;&amp;position!=this.POS_RIGHT&amp;&amp;position!=this.POS_TOP)throw new Error("Invalid axis position.");this._position=position},Axis.prototype.setStepSize=function(stepSize){if(null==stepSize)stepSize=null;else{if(isNaN(Number(stepSize)))throw new Error("Value for stepSize is not a number.");stepSize=Number(stepSize)}this._stepSize=stepSize},Axis}));
/**
 * Chart bar.
 *
 * @copyright  2016 Frédéric Massart - FMCorz.net
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @module     core/chart_bar
 */
define("core/chart_bar",["core/chart_base"],(function(Base){function Bar(){Base.prototype.constructor.apply(this,arguments)}return Bar.prototype=Object.create(Base.prototype),Bar.prototype._horizontal=!1,Bar.prototype._stacked=!1,Bar.prototype.TYPE="bar",Bar.prototype.create=function(Klass,data){var chart=Base.prototype.create.apply(this,arguments);return chart.setHorizontal(data.horizontal),chart.setStacked(data.stacked),chart},Bar.prototype._setDefaults=function(){Base.prototype._setDefaults.apply(this,arguments);var axis=this.getYAxis(0,!0);axis.setMin(0)},Bar.prototype.getHorizontal=function(){return this._horizontal},Bar.prototype.getStacked=function(){return this._stacked},Bar.prototype.setHorizontal=function(horizontal){var axis=this.getXAxis(0,!0);null===axis.getMin()&amp;&amp;axis.setMin(0),this._horizontal=Boolean(horizontal)},Bar.prototype.setStacked=function(stacked){this._stacked=Boolean(stacked)},Bar}));
define("core/event_dispatcher",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.dispatchEvent=void 0;_exports.dispatchEvent=function(eventName){let detail=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]?arguments[1]:{},container=arguments.length&gt;2&amp;&amp;void 0!==arguments[2]?arguments[2]:document,{bubbles:bubbles=!0,cancelable:cancelable=!1,composed:composed=!1}=arguments.length&gt;3&amp;&amp;void 0!==arguments[3]?arguments[3]:{};const customEvent=new CustomEvent(eventName,{bubbles:bubbles,cancelable:cancelable,composed:composed,detail:detail});return container.dispatchEvent(customEvent),customEvent}}));
/**
 * @copyright  2015 Martin Mastny &lt;mastnym@vscht.cz&gt;
 * @since      3.0
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core/permissionmanager",["jquery","core/config","core/notification","core/templates","core/yui"],(function($,config,notification,templates,Y){var contextid,contextname,adminurl,overideableroles,SELECTORS_ADDROLE="a.allowlink, a.prohibitlink",SELECTORS_REMOVEROLE="a.preventlink, a.unprohibitlink",SELECTORS_UNPROHIBIT="a.unprohibitlink",rolesloadedevent=$.Event("rolesloaded"),panel=null,loadOverideableRoles=function(){var params={contextid:contextid,getroles:1,sesskey:config.sesskey};$.post(adminurl+"roles/ajax.php",params,null,"json").done((function(data){try{overideableroles=data,(loadOverideableRoles=function(){$("body").trigger(rolesloadedevent)})()}catch(err){notification.exception(err)}})).fail((function(jqXHR,status,error){notification.exception(error)}))},changePermissions=function(row,roleid,action){var params={contextid:contextid,roleid:roleid,sesskey:M.cfg.sesskey,action:action,capability:row.data("name")};$.post(adminurl+"roles/ajax.php",params,null,"json").done((function(data){var action=data;try{var templatedata={rolename:overideableroles[roleid],roleid:roleid,adminurl:adminurl,imageurl:M.util.image_url("t/delete","moodle")};switch(action){case"allow":templatedata.spanclass="allowed",templatedata.linkclass="preventlink",templatedata.action="prevent",templatedata.icon="t/delete",templatedata.iconalt=M.util.get_string("deletexrole","core_role",overideableroles[roleid]);break;case"prohibit":templatedata.spanclass="forbidden",templatedata.linkclass="unprohibitlink",templatedata.action="unprohibit",templatedata.icon="t/delete",templatedata.iconalt=M.util.get_string("deletexrole","core_role",overideableroles[roleid]);break;case"prevent":return void row.find('a[data-role-id="'+roleid+'"]').first().closest(".allowed").remove();case"unprohibit":return void row.find('a[data-role-id="'+roleid+'"]').first().closest(".forbidden").remove();default:return}templates.render("core/permissionmanager_role",templatedata).done((function(content){if("allow"==action)$(content).insertBefore(row.find(".allowmore").first());else if("prohibit"==action){$(content).insertBefore(row.find(".prohibitmore").first());var allowedLink=row.find(".allowedroles").first().find('a[data-role-id="'+roleid+'"]');allowedLink&amp;&amp;allowedLink.first().closest(".allowed").remove()}panel.hide()})).fail(notification.exception)}catch(err){notification.exception(err)}})).fail((function(jqXHR,status,error){notification.exception(error)}))},handleAddRole=function(e){e.preventDefault();var link=$(e.currentTarget);$("body").one("rolesloaded",(function(){Y.use("moodle-core-notification-dialogue",(function(){var i,existingrolelinks,action=link.data("action"),row=link.closest("tr.rolecap"),confirmationDetails={cap:row.data("humanname"),context:contextname},message=M.util.get_string("role"+action+"info","core_role",confirmationDetails);null===panel&amp;&amp;(panel=new M.core.dialogue({draggable:!0,modal:!0,closeButton:!0,width:"450px"})),panel.set("headerContent",M.util.get_string("role"+action+"header","core_role"));var roles=[];switch(action){case"allow":existingrolelinks=row.find(SELECTORS_REMOVEROLE);break;case"prohibit":existingrolelinks=row.find(SELECTORS_UNPROHIBIT)}for(i in overideableroles){var disabled="";existingrolelinks.filter("[data-role-id='"+i+"']").length&amp;&amp;(disabled="disabled");var roledetails={roleid:i,rolename:overideableroles[i],disabled:disabled};roles.push(roledetails)}templates.render("core/permissionmanager_panelcontent",{message:message,roles:roles}).done((function(content){panel.set("bodyContent",content),panel.show(),$("div.role_buttons").on("click","button",(function(e){var roleid=$(e.currentTarget).data("role-id");changePermissions(row,roleid,action)}))})).fail(notification.exception)}))})),loadOverideableRoles()},handleRemoveRole=function(e){e.preventDefault();var link=$(e.currentTarget);$("body").one("rolesloaded",(function(){var action=link.data("action"),roleid=link.data("role-id"),row=link.closest("tr.rolecap"),questionDetails={role:overideableroles[roleid],cap:row.data("humanname"),context:contextname};notification.confirm(M.util.get_string("confirmunassigntitle","core_role"),M.util.get_string("confirmrole"+action,"core_role",questionDetails),M.util.get_string("confirmunassignyes","core_role"),M.util.get_string("confirmunassignno","core_role"),(function(){changePermissions(row,roleid,action)}))})),loadOverideableRoles()};return{initialize:function(args){contextid=args.contextid,contextname=args.contextname,adminurl=args.adminurl;var body=$("body");body.on("click",SELECTORS_ADDROLE,handleAddRole),body.on("click",SELECTORS_REMOVEROLE,handleRemoveRole)}}}));
/**
 * Javascript to manage the paging dropdown control.
 *
 * @module     core/paged_content_paging_dropdown
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core/paged_content_paging_dropdown",["jquery","core/custom_interaction_events","core/paged_content_events","core/pubsub"],(function($,CustomEvents,PagedContentEvents,PubSub){var SELECTORS_DROPDOWN_ITEM='[data-region="dropdown-item"]',SELECTORS_DROPDOWN_TOGGLE='[data-region="dropdown-toggle"]',SELECTORS_ACTIVE_DROPDOWN_ITEM='[data-region="dropdown-item"].active',SELECTORS_CARET='[data-region="caret"]',getPageNumber=function(item){return parseInt(item.attr("data-page-number"),10)},getAllItems=function(root){return root.find(SELECTORS_DROPDOWN_ITEM)},getPreviousItems=function(root,item){var pageNumber=getPageNumber(item);return getAllItems(root).filter((function(index,element){return getPageNumber($(element))&lt;pageNumber}))},getLimit=function(item){return parseInt(item.attr("data-item-count"),10)},getOffset=function(root,item){if(null!=item.attr("data-offset"))return parseInt(item.attr("data-offset"),10);var offset=0;return getPreviousItems(root,item).each((function(index,prevItem){prevItem=$(prevItem),offset+=getLimit(prevItem)})),item.attr("data-offset",offset),offset},getActiveItem=function(root){return root.find(SELECTORS_ACTIVE_DROPDOWN_ITEM)},setActiveItem=function(root,item,id){var eventPayload=function(root,items){return items.map((function(index,item){return item=$(item),{pageNumber:getPageNumber(item),limit:getLimit(item),offset:getOffset(root,item)}})).get()}(root,getPreviousItems(root,item).add(item)),toggle=root.find(SELECTORS_DROPDOWN_TOGGLE),caret=toggle.find(SELECTORS_CARET);getActiveItem(root).removeClass("active"),item.addClass("active"),toggle.html(item.text()),toggle.append(caret),PubSub.publish(id+PagedContentEvents.SHOW_PAGES,eventPayload)};return{init:function(root,id){root=$(root),function(items){items.each((function(index,item){(item=$(item)).attr("data-page-number",index+1)}))}(getAllItems(root));var activeItem=getActiveItem(root);activeItem.length&amp;&amp;setActiveItem(root,activeItem,id),CustomEvents.define(root,[CustomEvents.events.activate]),root.on(CustomEvents.events.activate,SELECTORS_DROPDOWN_ITEM,(function(e,data){var item=$(e.target).closest(SELECTORS_DROPDOWN_ITEM);setActiveItem(root,item,id),data.originalEvent.preventDefault()}))},rootSelector:'[data-region="paging-dropdown-container"]'}}));
/**
 * Javascript to load and render a paged content section.
 *
 * @module     core/paged_content
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core/paged_content",["jquery","core/paged_content_pages","core/paged_content_paging_bar","core/paged_content_paging_bar_limit_selector","core/paged_content_paging_dropdown"],(function($,Pages,PagingBar,PagingBarLimitSelector,Dropdown){return{init:function(root,renderPagesContentCallback,namespaceOverride){var pagesContainer=(root=$(root)).find(Pages.rootSelector),pagingBarContainer=root.find(PagingBar.rootSelector),dropdownContainer=root.find(Dropdown.rootSelector),pagingBarLimitSelectorContainer=root.find(PagingBarLimitSelector.rootSelector),id=root.attr("id");namespaceOverride&amp;&amp;(id=namespaceOverride),Pages.init(pagesContainer,id,renderPagesContentCallback),pagingBarContainer.length&amp;&amp;PagingBar.init(pagingBarContainer,id),pagingBarLimitSelectorContainer.length&amp;&amp;PagingBarLimitSelector.init(pagingBarLimitSelectorContainer,id),dropdownContainer.length&amp;&amp;Dropdown.init(dropdownContainer,id)},rootSelector:'[data-region="paged-content-container"]'}}));
/**
 * Provide global helper code to enhance page elements.
 *
 * @module     core/page_global
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core/page_global",["jquery","core/custom_interaction_events","core/str","core/network"],(function($,CustomEvents,Str,Network){return{init:function(){var body;body=$("body"),CustomEvents.define(body,[CustomEvents.events.activate]),body.on(CustomEvents.events.activate,"[data-show-active-item]",(function(e){var option=$(e.target).closest(".dropdown-item"),menuContainer=option.closest("[data-show-active-item]");if(option.hasClass("dropdown-item")&amp;&amp;!option.hasClass("active")){var dropdownItems=menuContainer.find(".dropdown-item");dropdownItems.removeClass("active"),dropdownItems.removeAttr("aria-current"),menuContainer.attr("data-skip-active-class")||option.addClass("active"),option.attr("aria-current",!0);var activeOptionText=option.text(),dropdownToggle=menuContainer.parent().find('[data-toggle="dropdown"]'),dropdownToggleText=dropdownToggle.find("[data-active-item-text]");dropdownToggleText.length?dropdownToggleText.html(activeOptionText):dropdownToggle.html(activeOptionText);var activeItemAriaLabelComponent=menuContainer.attr("data-active-item-button-aria-label-components");if(activeItemAriaLabelComponent){var strParams=activeItemAriaLabelComponent.split(",");strParams.push(activeOptionText),Str.get_string(strParams[0].trim(),strParams[1].trim(),strParams[2].trim()).then((function(string){return dropdownToggle.attr("aria-label",string),string})).catch((function(){return!1}))}}})),Network.init()}}}));
define("core/prefetch",["exports","core/config"],(function(_exports,_config){var obj;Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_config=(obj=_config)&amp;&amp;obj.__esModule?obj:{default:obj};var _systemImportTransformerGlobalIdentifier="undefined"!=typeof window?window:"undefined"!=typeof self?self:"undefined"!=typeof global?global:{};let prefetchTimer,initialPrefetchComplete=!1,templateList=[],stringList={};const fetchQueue=()=&gt;{if(templateList){const templatesToLoad=templateList.slice();templateList=[],("function"==typeof _systemImportTransformerGlobalIdentifier.define&amp;&amp;_systemImportTransformerGlobalIdentifier.define.amd?new Promise((function(resolve,reject){_systemImportTransformerGlobalIdentifier.require(["core/templates"],resolve,reject)})):"undefined"!=typeof module&amp;&amp;module.exports&amp;&amp;"undefined"!=typeof require||"undefined"!=typeof module&amp;&amp;module.component&amp;&amp;_systemImportTransformerGlobalIdentifier.require&amp;&amp;"component"===_systemImportTransformerGlobalIdentifier.require.loader?Promise.resolve(require("core/templates")):Promise.resolve(_systemImportTransformerGlobalIdentifier["core/templates"])).then((Templates=&gt;Templates.prefetchTemplates(templatesToLoad))).catch()}const mappedStringsToFetch=stringList;stringList={};const stringsToFetch=[];Object.keys(mappedStringsToFetch).forEach((component=&gt;{stringsToFetch.push(...mappedStringsToFetch[component].map((key=&gt;({component:component,key:key}))))})),stringsToFetch&amp;&amp;("function"==typeof _systemImportTransformerGlobalIdentifier.define&amp;&amp;_systemImportTransformerGlobalIdentifier.define.amd?new Promise((function(resolve,reject){_systemImportTransformerGlobalIdentifier.require(["core/str"],resolve,reject)})):"undefined"!=typeof module&amp;&amp;module.exports&amp;&amp;"undefined"!=typeof require||"undefined"!=typeof module&amp;&amp;module.component&amp;&amp;_systemImportTransformerGlobalIdentifier.require&amp;&amp;"component"===_systemImportTransformerGlobalIdentifier.require.loader?Promise.resolve(require("core/str")):Promise.resolve(_systemImportTransformerGlobalIdentifier["core/str"])).then((Str=&gt;Str.get_strings(stringsToFetch))).catch()},processQueue=()=&gt;{prefetchTimer||(initialPrefetchComplete?fetchQueue():prefetchTimer=setTimeout((()=&gt;{initialPrefetchComplete=!0,prefetchTimer=null,("function"==typeof _systemImportTransformerGlobalIdentifier.define&amp;&amp;_systemImportTransformerGlobalIdentifier.define.amd?new Promise((function(resolve,reject){_systemImportTransformerGlobalIdentifier.require([_config.default.iconsystemmodule],resolve,reject)})):"undefined"!=typeof module&amp;&amp;module.exports&amp;&amp;"undefined"!=typeof require||"undefined"!=typeof module&amp;&amp;module.component&amp;&amp;_systemImportTransformerGlobalIdentifier.require&amp;&amp;"component"===_systemImportTransformerGlobalIdentifier.require.loader?Promise.resolve(require(_config.default.iconsystemmodule)):Promise.resolve(_systemImportTransformerGlobalIdentifier[_config.default.iconsystemmodule])).then((IconSystem=&gt;{const iconSystem=new IconSystem;return prefetchTemplate(iconSystem.getTemplateName()),iconSystem})).then((iconSystem=&gt;{fetchQueue(),iconSystem.init()})).catch()}),500))},prefetchTemplates=templatesNames=&gt;{templateList=templateList.concat(templatesNames),processQueue()},prefetchTemplate=templateName=&gt;{prefetchTemplates([templateName])},prefetchStrings=(component,keys)=&gt;{stringList[component]||(stringList[component]=[]),stringList[component]=stringList[component].concat(keys),processQueue()};prefetchTemplates([].concat(["core/loading"],["core/modal"],["core/modal_backdrop"])),prefetchStrings("core",["cancel","closebuttontitle","loading","savechanges"]),prefetchStrings("core_form",["showless","showmore"]);var _default={prefetchTemplate:prefetchTemplate,prefetchTemplates:prefetchTemplates,prefetchString:(component,key)=&gt;{stringList[component]||(stringList[component]=[]),stringList[component].push(key),processQueue()},prefetchStrings:prefetchStrings};return _exports.default=_default,_exports.default}));
/**
 * AJAX helper for the tag management page.
 *
 * @module     core/tag
 * @copyright  2015 Marina Glancy
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.0
 */
define("core/tag",["jquery","core/ajax","core/templates","core/notification","core/str","core/modal_factory","core/modal_events","core/pending"],(function($,ajax,templates,notification,str,ModalFactory,ModalEvents,Pending){return{initTagindexPage:function(){$("body").delegate(".tagarea[data-ta] a[data-quickload=1]","click",(function(e){var pendingPromise=new Pending("core/tag:initTagindexPage");e.preventDefault();var target=$(this),query=target[0].search.replace(/^\?/,""),tagarea=target.closest(".tagarea[data-ta]"),args=query.split("&amp;").reduce((function(s,c){var t=c.split("=");return s[t[0]]=decodeURIComponent(t[1]),s}),{});ajax.call([{methodname:"core_tag_get_tagindex",args:{tagindex:args}}])[0].then((function(data){return templates.render("core_tag/index",data)})).then((function(html,js){templates.replaceNode(tagarea,html,js)})).always(pendingPromise.resolve).catch(notification.exception)}))},initManagePage:function(){$("body").on("updated","[data-inplaceeditable]",(function(e){var pendingPromise=new Pending("core/tag:initManagePage");if(str.get_strings([{key:"selecttag",component:"core_tag"},{key:"now",component:"core"}]).then((function(result){$('label[for="tagselect'+e.ajaxreturn.itemid+'"]').html(result[0]),$(e.target).closest("tr").find("td.col-timemodified").html(result[1])})).always(pendingPromise.resolve).catch(notification.exception),"tagflag"===e.ajaxreturn.itemtype){var row=$(e.target).closest("tr");"0"===e.ajaxreturn.value?row.removeClass("table-warning"):row.addClass("table-warning")}})),$(".tag-management-table").delegate("a.tagdelete","click",(function(e){var pendingPromise=new Pending("core/tag:tagdelete");e.preventDefault();var href=$(this).attr("href");str.get_strings([{key:"delete",component:"core"},{key:"confirmdeletetag",component:"tag"},{key:"yes",component:"core"},{key:"no",component:"core"}]).then((function(s){return notification.confirm(s[0],s[1],s[2],s[3],(function(){window.location.href=href}))})).always(pendingPromise.resolve).catch(notification.exception)})),$("#tag-management-delete").click((function(e){var form=$(this).closest("form").get(0);if($(form).find("input[data-togglegroup='tags-manage'][data-toggle='slave']:checked").length){var pendingPromise=new Pending("core/tag:tag-management-delete"),tempElement=$("&lt;input type='hidden'/&gt;").attr("name",this.name);e.preventDefault(),str.get_strings([{key:"delete",component:"core"},{key:"confirmdeletetags",component:"tag"},{key:"yes",component:"core"},{key:"no",component:"core"}]).then((function(s){return notification.confirm(s[0],s[1],s[2],s[3],(function(){tempElement.appendTo(form),form.submit()}))})).always(pendingPromise.resolve).catch(notification.exception)}})),$("#tag-management-combine").click((function(e){var pendingPromise=new Pending("core/tag:tag-management-combine");e.preventDefault();var form=$(this).closest("form").get(0),tags=$(form).find("input[data-togglegroup='tags-manage'][data-toggle='slave']:checked");if(tags.length&lt;=1)str.get_strings([{key:"combineselected",component:"tag"},{key:"selectmultipletags",component:"tag"},{key:"ok"}]).then((function(s){return notification.alert(s[0],s[1],s[2])})).always(pendingPromise.resolve).catch(notification.exception);else{var tempElement=$("&lt;input type='hidden'/&gt;").attr("name",this.name),saveButtonText="",tagOptions=[];tags.each((function(){var tagid=$(this).val(),tagname=$(".inplaceeditable[data-itemtype=tagname][data-itemid="+tagid+"]").attr("data-value");tagOptions.push({id:tagid,name:tagname})})),str.get_strings([{key:"combineselected",component:"tag"},{key:"continue",component:"core"}]).then((function(langStrings){var modalTitle=langStrings[0];saveButtonText=langStrings[1];var templateContext={tags:tagOptions};return ModalFactory.create({title:modalTitle,body:templates.render("core_tag/combine_tags",templateContext),type:ModalFactory.types.SAVE_CANCEL})})).then((function(modal){return modal.setSaveButtonText(saveButtonText),modal})).then((function(modal){modal.getRoot().on(ModalEvents.save,(function(e){e.preventDefault(),tempElement.appendTo(form);var maintag=$("input[name=maintag]:checked","#combinetags_form").val();$("&lt;input type='hidden'/&gt;").attr("name","maintag").attr("value",maintag).appendTo(form),form.submit()})),modal.getRoot().on(ModalEvents.hidden,(function(){modal.destroy()})),modal.show(),$("#combinetags_form input[type=radio]").first().focus().prop("checked",!0)})).always(pendingPromise.resolve).catch(notification.exception)}})),$("body").on("updatefailed","[data-inplaceeditable][data-itemtype=tagname]",(function(e){var exception=e.exception,newvalue=e.newvalue,tagid=$(e.target).attr("data-itemid");if("namesalreadybeeingused"===exception.errorcode){var pendingPromise=new Pending("core/tag:updatefailed");e.preventDefault(),str.get_strings([{key:"confirm",component:"core"},{key:"nameuseddocombine",component:"tag"},{key:"yes",component:"core"},{key:"cancel",component:"core"}]).then((function(s){return notification.confirm(s[0],s[1],s[2],s[3],(function(){window.location.href=window.location.href+"&amp;newname="+encodeURIComponent(newvalue)+"&amp;tagid="+encodeURIComponent(tagid)+"&amp;action=renamecombine&amp;sesskey="+M.cfg.sesskey}))})).always(pendingPromise.resolve).catch(notification.exception)}})),$("body").on("click","a[data-action=addstandardtag]",(function(e){var pendingPromise=new Pending("core/tag:addstandardtag");return e.preventDefault(),ModalFactory.create({title:str.get_string("addotags","tag"),body:templates.render("core_tag/add_tags",{actionurl:window.location.href,sesskey:M.cfg.sesskey}),type:ModalFactory.types.SAVE_CANCEL}).then((function(modal){modal.setSaveButtonText(str.get_string("continue","core")),modal.getRoot().on(ModalEvents.save,(function(e){var tagsInput=$(e.currentTarget).find("#id_tagslist"),name=tagsInput.val().trim();tagsInput.val(name);var tagsForm=$("#addtags_form");return tagsForm.on("submit",(function(e){var form=$("#addtags_form");!1===form[0].checkValidity()&amp;&amp;(e.preventDefault(),e.stopPropagation()),form.addClass("was-validated"),$('[data-region="tagslistinput"]').addClass("error");var errorMessage=$("#id_tagslist_error_message");errorMessage.removeAttr("hidden"),errorMessage.addClass("help-block")})),tagsForm.submit(),!1})),modal.getRoot().on(ModalEvents.hidden,(function(){modal.destroy()})),modal.show()})).always(pendingPromise.resolve).catch(notification.exception)}))},initManageCollectionsPage:function(){$("body").on("updated","[data-inplaceeditable]",(function(e){var areaid,collid,pendingPromise=new Pending("core/tag:initManageCollectionsPage-updated"),ajaxreturn=e.ajaxreturn;"core_tag"===ajaxreturn.component&amp;&amp;"tagareaenable"===ajaxreturn.itemtype&amp;&amp;(areaid=$(this).attr("data-itemid"),$(".tag-collections-table ul[data-collectionid] li[data-areaid="+areaid+"]").hide(),"1"===ajaxreturn.value?($(this).closest("tr").removeClass("dimmed_text"),collid=$(this).closest("tr").find('[data-itemtype="tagareacollection"]').attr("data-value"),$(".tag-collections-table ul[data-collectionid="+collid+"] li[data-areaid="+areaid+"]").show()):$(this).closest("tr").addClass("dimmed_text")),"core_tag"===ajaxreturn.component&amp;&amp;"tagareacollection"===ajaxreturn.itemtype&amp;&amp;(areaid=$(this).attr("data-itemid"),$(".tag-collections-table ul[data-collectionid] li[data-areaid="+areaid+"]").hide(),collid=$(this).attr("data-value"),"1"===$(this).closest("tr").find('[data-itemtype="tagareaenable"]').attr("data-value")&amp;&amp;$(".tag-collections-table ul[data-collectionid="+collid+"] li[data-areaid="+areaid+"]").show()),pendingPromise.resolve()})),$("body").on("click",".addtagcoll &gt; a",(function(e){var pendingPromise=new Pending("core/tag:initManageCollectionsPage-addtagcoll");e.preventDefault();var href=$(this).attr("data-url"),saveButtonText="";str.get_strings([{key:"addtagcoll",component:"tag"},{key:"create",component:"core"}]).then((function(langStrings){var modalTitle=langStrings[0];saveButtonText=langStrings[1];var templateContext={actionurl:href,sesskey:M.cfg.sesskey};return ModalFactory.create({title:modalTitle,body:templates.render("core_tag/add_tag_collection",templateContext),type:ModalFactory.types.SAVE_CANCEL})})).then((function(modal){return modal.setSaveButtonText(saveButtonText),modal.getRoot().on(ModalEvents.save,(function(e){var collectionInput=$(e.currentTarget).find("#addtagcoll_name"),name=collectionInput.val().trim();collectionInput.val(name);var form=$("#addtagcoll_form");return form.on("submit",(function(e){!1===form[0].checkValidity()&amp;&amp;(e.preventDefault(),e.stopPropagation()),form.addClass("was-validated"),$('[data-region="addtagcoll_nameinput"]').addClass("error");var errorMessage=$("#id_addtagcoll_name_error_message");errorMessage.removeAttr("hidden"),errorMessage.addClass("help-block")})),form.submit(),!1})),modal.getRoot().on(ModalEvents.hidden,(function(){modal.destroy()})),modal.show(),modal})).always(pendingPromise.resolve).catch(notification.exception)})),$("body").on("click",".tag-collections-table .action_delete",(function(e){var pendingPromise=new Pending("core/tag:initManageCollectionsPage-action_delete");e.preventDefault();var href=$(this).attr("data-url")+"&amp;sesskey="+M.cfg.sesskey;str.get_strings([{key:"delete"},{key:"suredeletecoll",component:"tag",param:$(this).attr("data-collname")},{key:"yes"},{key:"no"}]).then((function(s){return notification.confirm(s[0],s[1],s[2],s[3],(function(){window.location.href=href}))})).always(pendingPromise.resolve).catch(notification.exception)}))}}}));
/**
 * Contain the logic for modal backdrops.
 *
 * @module     core/modal_backdrop
 * @copyright  2016 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core/modal_backdrop",["jquery","core/templates","core/notification","core/fullscreen"],(function($,Templates,Notification,Fullscreen){var SELECTORS_ROOT='[data-region="modal-backdrop"]',ModalBackdrop=function(root){this.root=$(root),this.isAttached=!1,this.attachmentPoint=document.createElement("div"),document.body.append(this.attachmentPoint),this.root.is(SELECTORS_ROOT)||Notification.exception({message:"Element is not a modal backdrop"})};return ModalBackdrop.prototype.getRoot=function(){return this.root},ModalBackdrop.prototype.getAttachmentPoint=function(){return $(Fullscreen.getElement()||this.attachmentPoint)},ModalBackdrop.prototype.attachToDOM=function(){this.getAttachmentPoint().append(this.root),this.isAttached||(this.isAttached=!0)},ModalBackdrop.prototype.setZIndex=function(value){this.root.css("z-index",value)},ModalBackdrop.prototype.isVisible=function(){return this.root.hasClass("show")},ModalBackdrop.prototype.hasTransitions=function(){return this.getRoot().hasClass("fade")},ModalBackdrop.prototype.show=function(){this.isVisible()||(this.attachToDOM(),this.root.removeClass("hide").addClass("show"))},ModalBackdrop.prototype.hide=function(){this.isVisible()&amp;&amp;(this.hasTransitions()?this.getRoot().one("transitionend webkitTransitionEnd oTransitionEnd",function(){this.getRoot().removeClass("show").addClass("hide")}.bind(this)):this.getRoot().removeClass("show").addClass("hide"),$(document.body).find(this.getRoot()).length&amp;&amp;$(document.body).append(this.getRoot()))},ModalBackdrop.prototype.destroy=function(){this.root.remove(),this.attachmentPoint.remove()},ModalBackdrop}));
/**
 * Competency rule points module.
 *
 * @module core/icon_system_standard
 * @copyright  2017 Damyon Wiese
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core/icon_system_standard",["core/icon_system","core/url","core/mustache"],(function(IconSystem,CoreUrl,Mustache){var IconSystemStandard=function(){IconSystem.apply(this,arguments)};return(IconSystemStandard.prototype=Object.create(IconSystem.prototype)).renderIcon=function(key,component,title,template){var templatecontext={attributes:[{name:"src",value:CoreUrl.imageUrl(key,component)},{name:"alt",value:title},{name:"title",value:title}]};return void 0!==title&amp;&amp;""!=title||templatecontext.attributes.push({name:"aria-hidden",value:"true"}),Mustache.render(template,templatecontext).trim()},IconSystemStandard.prototype.getTemplateName=function(){return"core/pix_icon"},IconSystemStandard}));
define("core/utility",["core/str","core/pending","core/toast","core/notification"],(function(Str,_pending,_toast,_notification){var obj;Str=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}(Str),_pending=(obj=_pending)&amp;&amp;obj.__esModule?obj:{default:obj};var _systemImportTransformerGlobalIdentifier="undefined"!=typeof window?window:"undefined"!=typeof self?self:"undefined"!=typeof global?global:{};function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}let registered=!1;const getModalString=(dataset,type,field)=&gt;dataset["".concat(type).concat(field,"Str")]?Str.get_string.apply(null,JSON.parse(dataset["".concat(type).concat(field,"Str")])):Promise.resolve(dataset["".concat(type).concat(field)]),displayConfirmation=(source,type)=&gt;(0,_notification.saveCancelPromise)(getModalString(source.dataset,type,"Title"),getModalString(source.dataset,type,"Content"),getModalString(source.dataset,type,"YesButton")).then((()=&gt;{if("true"===source.dataset["".concat(type,"Toast")]){const stringForToast=getModalString(source.dataset,type,"ToastConfirmation");"string"==typeof stringForToast?(0,_toast.add)(stringForToast):stringForToast.then((str=&gt;(0,_toast.add)(str))).catch((e=&gt;(0,_notification.exception)(e)))}window.location.href=source.dataset["".concat(type,"Destination")]})).catch((()=&gt;{}));registered||((()=&gt;{document.addEventListener("click",(e=&gt;{const confirmRequest=e.target.closest('[data-confirmation="modal"]');confirmRequest&amp;&amp;(e.preventDefault(),displayConfirmation(confirmRequest,"confirmation"));const modalConfirmation=e.target.closest('[data-modal="confirmation"]');modalConfirmation&amp;&amp;(e.preventDefault(),displayConfirmation(modalConfirmation,"modal"));const alertRequest=e.target.closest('[data-modal="alert"]');alertRequest&amp;&amp;(e.preventDefault(),(async(title,content)=&gt;{const pendingPromise=new _pending.default("core/confirm:alert"),ModalFactory=await("function"==typeof _systemImportTransformerGlobalIdentifier.define&amp;&amp;_systemImportTransformerGlobalIdentifier.define.amd?new Promise((function(resolve,reject){_systemImportTransformerGlobalIdentifier.require(["core/modal_factory"],resolve,reject)})):"undefined"!=typeof module&amp;&amp;module.exports&amp;&amp;"undefined"!=typeof require||"undefined"!=typeof module&amp;&amp;module.component&amp;&amp;_systemImportTransformerGlobalIdentifier.require&amp;&amp;"component"===_systemImportTransformerGlobalIdentifier.require.loader?Promise.resolve(require("core/modal_factory")):Promise.resolve(_systemImportTransformerGlobalIdentifier["core/modal_factory"]));ModalFactory.create({type:ModalFactory.types.ALERT,title:title,body:content,removeOnClose:!0}).then((function(modal){return modal.show(),pendingPromise.resolve(),modal}))})(getModalString(alertRequest.dataset,"modal","Title"),getModalString(alertRequest.dataset,"modal","Content")))}))})(),registered=!0)}));
define("core/fullscreen",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.getElement=void 0;_exports.getElement=()=&gt;{let element=null;return document.fullscreenElement?element=document.fullscreenElement:document.mozFullscreenElement?element=document.mozFullscreenElement:document.msFullscreenElement?element=document.msFullscreenElement:document.webkitFullscreenElement&amp;&amp;(element=document.webkitFullscreenElement),element}}));
/**
 * Fetch and render dates from timestamps.
 *
 * @module     core/user_date
 * @copyright  2017 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core/user_date",["jquery","core/ajax","core/sessionstorage","core/config"],(function($,Ajax,Storage,Config){var promisesCache={},getKey=function(request){return"core_user_date/"+Config.language+"/"+Config.usertimezone+"/"+request.timestamp+"/"+request.format},loadDatesFromServer=function(dates){var args=dates.map((function(data){var fixDay=data.hasOwnProperty("fixday")?data.fixday:1,fixHour=data.hasOwnProperty("fixhour")?data.fixhour:1;return{timestamp:data.timestamp,format:data.format,type:data.type||null,fixday:fixDay,fixhour:fixHour}})),request={methodname:"core_get_user_dates",args:{contextid:Config.contextid,timestamps:args}};return Ajax.call([request],!0,!0)[0].then((function(results){results.dates.forEach((function(value,index){var date=dates[index];!function(key,value){Storage.set(key,value)}(getKey(date),value),date.deferred.resolve(value)}))})).catch((function(ex){dates.forEach((function(date){date.deferred.reject(ex)}))}))};return{get:function(requests){var ajaxRequests=[],promises=[];return requests.forEach((function(request){var key=getKey(request);if(function(key){return void 0!==promisesCache[key]}(key))promises.push(function(key){return promisesCache[key]}(key));else{var deferred=$.Deferred(),cached=function(key){return Storage.get(key)}(key);cached?deferred.resolve(cached):(request.deferred=deferred,ajaxRequests.push(request)),function(key,promise){promisesCache[key]=promise}(key,deferred.promise()),promises.push(deferred.promise())}})),ajaxRequests.length&amp;&amp;loadDatesFromServer(ajaxRequests),$.when.apply($,promises).then((function(){return 1===arguments.length?[arguments[0]]:Array.apply(null,arguments)}))},getUserMidnightForTimestamp:function(timestamp,todayMidnight){var future=timestamp&gt;todayMidnight,diffSeconds=Math.abs(timestamp-todayMidnight),diffDaysInSeconds=86400*(future?Math.floor(diffSeconds/86400):Math.ceil(diffSeconds/86400));return future?todayMidnight+diffDaysInSeconds:todayMidnight-diffDaysInSeconds}}}));
define("core/emoji/picker",["exports","core/localstorage","core/emoji/data","core/utils","core/str","core/templates"],(function(_exports,_localstorage,EmojiData,_utils,_str,_templates){var obj;
/**
   * Emoji picker.
   *
   * @module core/emoji/picker
   * @copyright  2019 Ryan Wyllie &lt;ryan@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_localstorage=(obj=_localstorage)&amp;&amp;obj.__esModule?obj:{default:obj},EmojiData=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}(EmojiData);const ROW_TYPE_EMOJI=0,ROW_TYPE_HEADER=1,SELECTORS_CATEGORY_SELECTOR='[data-action="show-category"]',SELECTORS_EMOJIS_CONTAINER='[data-region="emojis-container"]',SELECTORS_EMOJI_PREVIEW='[data-region="emoji-preview"]',SELECTORS_EMOJI_SHORT_NAME='[data-region="emoji-short-name"]',SELECTORS_ROW_CONTAINER='[data-region="row-container"]',SELECTORS_SEARCH_INPUT='[data-region="search-input"]',SELECTORS_SEARCH_RESULTS_CONTAINER='[data-region="search-results-container"]',createRowDataForCategory=(categoryName,categoryDisplayName,emojis,totalRowCount)=&gt;{const rowData=[];rowData.push({index:totalRowCount+rowData.length,type:ROW_TYPE_HEADER,data:{name:categoryName,displayName:categoryDisplayName}});for(let i=0;i&lt;emojis.length;i+=7){const rowEmojis=emojis.slice(i,i+7);rowData.push({index:totalRowCount+rowData.length,type:ROW_TYPE_EMOJI,data:rowEmojis})}return rowData},addIndexesToRowData=rowData=&gt;rowData.map(((data,index)=&gt;({...data,index:index}))),getCategoryScrollPositionsFromRowData=rowData=&gt;rowData.reduce(((carry,row,index)=&gt;(row.type===ROW_TYPE_HEADER&amp;&amp;(carry[row.data.name]=40*index),carry)),{}),isEmojiElement=element=&gt;null!==element.getAttribute("data-short-names"),findCategorySelectorFromElement=element=&gt;element?"show-category"===element.getAttribute("data-action")?element:findCategorySelectorFromElement(element.parentElement):null,getCategorySelectorByCategoryName=(root,name)=&gt;root.querySelector('[data-category="'.concat(name,'"]')),getCategoryByScrollPosition=(root,position,categoryScrollPositions)=&gt;{let positions=[];position&lt;0&amp;&amp;(position=0);for(const categoryName in categoryScrollPositions){const categoryPosition=categoryScrollPositions[categoryName];positions.push([categoryPosition,categoryName])}positions.sort(((_ref,_ref2)=&gt;{let[a]=_ref,[b]=_ref2;return a&lt;b?-1:a&gt;b?1:0}));const{categoryName:categoryName,previousPosition:previousPosition,nextPosition:nextPosition}=positions.reduce(((carry,candidate)=&gt;{const[categoryPosition,categoryName]=candidate;return categoryPosition&lt;=position?(carry.categoryName=categoryName,carry.previousPosition=carry.currentPosition,carry.currentPosition=position):null===carry.nextPosition&amp;&amp;(carry.nextPosition=categoryPosition),carry}),{categoryName:null,currentPosition:null,previousPosition:null,nextPosition:null});return[getCategorySelectorByCategoryName(root,categoryName),previousPosition,nextPosition]},getRecentEmojis=()=&gt;{const storedData=_localstorage.default.get("moodle-recent-emojis");return storedData?JSON.parse(storedData):[]},addRecentEmoji=(rowData,recentEmojiRowCount,newEmoji)=&gt;{const categoryName=rowData[0].data.name,categoryDisplayName=rowData[0].data.displayName,recentEmojis=getRecentEmojis();let newRecentEmojis=[newEmoji,...recentEmojis.filter((emoji=&gt;emoji.unified!=newEmoji.unified))];newRecentEmojis=newRecentEmojis.slice(0,21);const newRecentEmojiRowData=createRowDataForCategory(categoryName,categoryDisplayName,newRecentEmojis);return(recentEmojis=&gt;{_localstorage.default.set("moodle-recent-emojis",JSON.stringify(recentEmojis))})(newRecentEmojis),[addIndexesToRowData(newRecentEmojiRowData.concat(rowData.slice(recentEmojiRowCount))),newRecentEmojiRowData.length]},getRowsToRender=(scrollPosition,visibleRowCount,rowData)=&gt;{const minVisibleRow=scrollPosition&gt;40?Math.floor(scrollPosition/40):0,start=minVisibleRow&gt;=5?minVisibleRow-5:minVisibleRow,end=minVisibleRow+visibleRowCount+5;return rowData.slice(start,end)},createRowElement=async rowData=&gt;{let row=null;return row=rowData.type===ROW_TYPE_HEADER?await(async(rowIndex,name)=&gt;{const context={index:rowIndex,text:name},html=await(0,_templates.render)("core/emoji/header_row",context),temp=document.createElement("div");return temp.innerHTML=html,temp.firstChild})(rowData.index,rowData.data.displayName):await(async(rowIndex,emojis)=&gt;{const context={index:rowIndex,emojis:emojis.map((emojiData=&gt;{const charCodes=emojiData.unified.split("-").map((code=&gt;"0x".concat(code))),emojiText=String.fromCodePoint.apply(null,charCodes);return{shortnames:":".concat(emojiData.shortnames.join(": :"),":"),unified:emojiData.unified,text:emojiText,spacer:!1}})),spacers:Array(7-emojis.length).fill(!0)},html=await(0,_templates.render)("core/emoji/emoji_row",context),temp=document.createElement("div");return temp.innerHTML=html,temp.firstChild})(rowData.index,rowData.data),row.style.position="absolute",row.style.left=0,row.style.right=0,row.style.top="".concat(40*rowData.index,"px"),row},doRowsMatch=(a,b)=&gt;{if(a.index!==b.index)return!1;if(a.type!==b.type)return!1;if(typeof a.data!=typeof b.data)return!1;if(a.type===ROW_TYPE_HEADER)return a.data.name===b.data.name;if(a.data.length!==b.data.length)return!1;for(let i=0;i&lt;a.data.length;i++)if(a.data[i].unified!=b.data[i].unified)return!1;return!0},generateRenderRowsAtPositionFunction=rowContainer=&gt;{let currentRows=[],nextRows=[],rowCount=0,isRendering=!1;const renderNextRows=async()=&gt;{if(!nextRows.length)return;if(isRendering)return;isRendering=!0;const nextRowsToRender=nextRows.slice();nextRows=[],await(async(rowContainer,currentRows,nextRows)=&gt;{const toAdd=nextRows.filter((nextRow=&gt;!currentRows.some((currentRow=&gt;doRowsMatch(currentRow,nextRow)))));let toKeep=currentRows.filter((currentRow=&gt;nextRows.some((nextRow=&gt;doRowsMatch(currentRow,nextRow)))));const toRemoveElements=currentRows.filter((currentRow=&gt;!nextRows.some((nextRow=&gt;doRowsMatch(currentRow,nextRow))))).map((rowData=&gt;rowContainer.querySelectorAll('[data-row="'.concat(rowData.index,'"]'))));(await Promise.all(toAdd.map((rowData=&gt;createRowElement(rowData))))).forEach(((row,index)=&gt;{const rowData=toAdd[index];let nextRowIndex=null;for(let i=0;i&lt;toKeep.length;i++)if(toKeep[i].index&gt;rowData.index){nextRowIndex=i;break}if(null!==nextRowIndex){const nextRowData=toKeep[nextRowIndex],nextRowNode=rowContainer.querySelector('[data-row="'.concat(nextRowData.index,'"]'));rowContainer.insertBefore(row,nextRowNode),toKeep.splice(nextRowIndex,0,toKeep)}else toKeep.push(rowData),rowContainer.appendChild(row)})),toRemoveElements.forEach((rows=&gt;{for(let i=0;i&lt;rows.length;i++){const row=rows[i];rowContainer.removeChild(row)}}))})(rowContainer,currentRows,nextRowsToRender),currentRows=nextRowsToRender,isRendering=!1,renderNextRows()};return function(scrollPosition,rowData){let rowLimit=arguments.length&gt;2&amp;&amp;void 0!==arguments[2]?arguments[2]:10;nextRows=getRowsToRender(scrollPosition,rowLimit,rowData),renderNextRows(),rowCount!==rowData.length&amp;&amp;(rowContainer.style.height="".concat(40*rowData.length,"px")),rowCount=rowData.length}},clearSearch=(emojiContainer,searchResultsContainer,searchInput)=&gt;{searchResultsContainer.classList.add("hidden"),emojiContainer.classList.remove("hidden"),searchInput.value=""},getHandleMouseEnter=(emojiPreview,emojiShortName)=&gt;e=&gt;{const target=e.target;isEmojiElement(target)&amp;&amp;(emojiShortName.textContent=target.getAttribute("data-short-names"),emojiPreview.textContent=target.textContent)},getHandleMouseLeave=(emojiPreview,emojiShortName)=&gt;e=&gt;{const target=e.target;isEmojiElement(target)&amp;&amp;(emojiShortName.textContent="",emojiPreview.textContent="")},getHandleScroll=(root,currentVisibleRowScrollPosition,emojiContainer,initialCategoryScrollPositions,renderAtPosition)=&gt;{let[currentCategoryElement,previousCategoryPosition,nextCategoryPosition]=getCategoryByScrollPosition(root,emojiContainer.scrollTop,initialCategoryScrollPositions);return(categoryScrollPositions,rowData)=&gt;{const newScrollPosition=emojiContainer.scrollTop,updateRenderRows=newScrollPosition&lt;currentVisibleRowScrollPosition-40||newScrollPosition&gt;currentVisibleRowScrollPosition+40;(newScrollPosition&gt;=nextCategoryPosition||newScrollPosition&lt;previousCategoryPosition)&amp;&amp;([currentCategoryElement,previousCategoryPosition,nextCategoryPosition]=getCategoryByScrollPosition(root,newScrollPosition,categoryScrollPositions),((root,element)=&gt;{const allCategorySelectors=root.querySelectorAll(SELECTORS_CATEGORY_SELECTOR);for(let i=0;i&lt;allCategorySelectors.length;i++)allCategorySelectors[i].classList.remove("selected");element.classList.add("selected")})(root,currentCategoryElement)),updateRenderRows&amp;&amp;requestAnimationFrame((()=&gt;{renderAtPosition(newScrollPosition,rowData),currentVisibleRowScrollPosition=newScrollPosition}))}},registerEventListeners=(root,emojiContainer,renderAtPosition,currentVisibleRowScrollPosition,selectCallback,categoryScrollPositions,rowData,recentEmojiRowCount)=&gt;{const searchInput=root.querySelector(SELECTORS_SEARCH_INPUT),searchResultsContainer=root.querySelector(SELECTORS_SEARCH_RESULTS_CONTAINER),emojiPreview=root.querySelector(SELECTORS_EMOJI_PREVIEW),emojiShortName=root.querySelector(SELECTORS_EMOJI_SHORT_NAME),clickHandler=((recentEmojiRowCount,emojiContainer,searchResultsContainer,searchInput,selectCallback,renderAtPosition)=&gt;(e,rowData,categoryScrollPositions)=&gt;{const target=e.target;let newRowData=rowData,newCategoryScrollPositions=categoryScrollPositions;if(clearSearch(emojiContainer,searchResultsContainer,searchInput),isEmojiElement(target)){const emojiData={unified:target.getAttribute("data-unified"),shortnames:target.getAttribute("data-short-names").replace(/:/g,"").split(" ")},currentScrollTop=emojiContainer.scrollTop,isRecentEmojiRowVisible=null!==emojiContainer.querySelector('[data-row="'.concat(recentEmojiRowCount-1,'"]'));return[newRowData,recentEmojiRowCount]=addRecentEmoji(rowData,recentEmojiRowCount,emojiData),newCategoryScrollPositions=getCategoryScrollPositionsFromRowData(newRowData),isRecentEmojiRowVisible&amp;&amp;renderAtPosition(currentScrollTop,newRowData),selectCallback(target.textContent),[newRowData,newCategoryScrollPositions]}const categorySelector=findCategorySelectorFromElement(target);if(categorySelector){const position=categoryScrollPositions[categorySelector.getAttribute("data-category")];emojiContainer.scrollTop=position}return[newRowData,newCategoryScrollPositions]})(recentEmojiRowCount,emojiContainer,searchResultsContainer,searchInput,selectCallback,renderAtPosition),scrollHandler=getHandleScroll(root,currentVisibleRowScrollPosition,emojiContainer,categoryScrollPositions,renderAtPosition),searchHandler=((searchInput,searchResultsContainer,emojiContainer)=&gt;{const rowContainer=searchResultsContainer.querySelector(SELECTORS_ROW_CONTAINER),renderSearchResultsAtPosition=generateRenderRowsAtPositionFunction(rowContainer);return searchResultsContainer.appendChild(rowContainer),async()=&gt;{const searchTerm=searchInput.value.toLowerCase();if(searchTerm){((emojiContainer,searchResultsContainer)=&gt;{searchResultsContainer.classList.remove("hidden"),emojiContainer.classList.add("hidden")})(emojiContainer,searchResultsContainer);const matchingEmojis=Object.keys(EmojiData.byShortName).reduce(((carry,shortName)=&gt;(shortName.includes(searchTerm)&amp;&amp;carry.push({shortnames:[shortName],unified:EmojiData.byShortName[shortName]}),carry)),[]),searchResultsString=await(0,_str.get_string)("searchresults","core"),rowData=createRowDataForCategory(searchResultsString,searchResultsString,matchingEmojis,0);renderSearchResultsAtPosition(0,rowData,rowData.length)}else clearSearch(emojiContainer,searchResultsContainer,searchInput)}})(searchInput,searchResultsContainer,emojiContainer);root.addEventListener("focus",getHandleMouseEnter(emojiPreview,emojiShortName),!0),root.addEventListener("blur",getHandleMouseLeave(emojiPreview,emojiShortName),!0),root.addEventListener("mouseenter",getHandleMouseEnter(emojiPreview,emojiShortName),!0),root.addEventListener("mouseleave",getHandleMouseLeave(emojiPreview,emojiShortName),!0),root.addEventListener("click",(e=&gt;{[rowData,categoryScrollPositions]=clickHandler(e,rowData,categoryScrollPositions)})),emojiContainer.addEventListener("scroll",(0,_utils.throttle)((()=&gt;scrollHandler(categoryScrollPositions,rowData)),50)),searchInput.addEventListener("input",(0,_utils.debounce)(searchHandler,200))};return _exports.default=(root,selectCallback)=&gt;{const emojiContainer=root.querySelector(SELECTORS_EMOJIS_CONTAINER),rowContainer=emojiContainer.querySelector(SELECTORS_ROW_CONTAINER),allData=[{name:"Recent",emojis:getRecentEmojis()},...EmojiData.byCategory];let rowData=[],recentEmojiRowCount=0;allData.forEach((category=&gt;{const categoryDisplayName=getCategorySelectorByCategoryName(root,category.name).title,categoryRowData=createRowDataForCategory(category.name,categoryDisplayName,category.emojis,rowData.length);"Recent"===category.name&amp;&amp;(recentEmojiRowCount=categoryRowData.length),rowData=rowData.concat(categoryRowData)})),rowData=addIndexesToRowData(rowData);const categoryScrollPositions=getCategoryScrollPositionsFromRowData(rowData),renderAtPosition=generateRenderRowsAtPositionFunction(rowContainer);renderAtPosition(0,rowData),registerEventListeners(root,emojiContainer,renderAtPosition,0,selectCallback,categoryScrollPositions,rowData,recentEmojiRowCount)},_exports.default}));
define("core/emoji/auto_complete",["exports","core/emoji/data","core/templates","core/utils","core/localstorage","core/key_codes"],(function(_exports,EmojiData,_templates,_utils,_localstorage,_key_codes){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,EmojiData=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}
/**
   * Emoji auto complete.
   *
   * @module core/emoji/auto_complete
   * @copyright  2019 Ryan Wyllie &lt;ryan@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */(EmojiData),_localstorage=_interopRequireDefault(_localstorage),_key_codes=_interopRequireDefault(_key_codes);const SELECTORS_EMOJI_BUTTON='[data-region="emoji-button"]',SELECTORS_ACTIVE_EMOJI_BUTTON='[data-region="emoji-button"].active',getRecentEmojis=()=&gt;{const storedData=_localstorage.default.get("moodle-recent-emojis");return storedData?JSON.parse(storedData):[]},addRecentEmoji=(unified,shortName)=&gt;{const newEmoji={unified:unified,shortnames:[shortName]},recentEmojis=getRecentEmojis();let newRecentEmojis=[newEmoji,...recentEmojis.filter((emoji=&gt;emoji.unified!=newEmoji.unified))];newRecentEmojis=newRecentEmojis.slice(0,27),_localstorage.default.set("moodle-recent-emojis",JSON.stringify(newRecentEmojis))},getEmojiTextFromShortName=shortName=&gt;{const unified=EmojiData.byShortName[shortName];if(unified){const charCodes=unified.split("-").map((code=&gt;"0x".concat(code)));return String.fromCodePoint.apply(null,charCodes)}return null},getShortNameFromText=text=&gt;text.replace(/:/g,""),getActiveEmojiSuggestion=root=&gt;root.querySelector(SELECTORS_ACTIVE_EMOJI_BUTTON),selectEmojiElement=(element,selectCallback)=&gt;{const shortName=element.getAttribute("data-short-name"),unified=element.getAttribute("data-unified");addRecentEmoji(unified,shortName),selectCallback(element.innerHTML.trim())};return _exports.default=(root,textArea,hasSuggestionCallback,selectCallback)=&gt;{let hasSuggestions=!1,previousSearchText="";textArea.addEventListener("keyup",(0,_utils.debounce)((()=&gt;{const searchText=((text,position)=&gt;{const startMatches=text.slice(0,position).match(/(\S*)$/),endMatches=text.slice(position).match(/^(\S*)/);let startText="",endText="";return startMatches&amp;&amp;(startText=startMatches[startMatches.length-1]),endMatches&amp;&amp;(endText=endMatches[endMatches.length-1]),"".concat(startText).concat(endText)})(textArea.value,textArea.selectionStart);if(searchText!==previousSearchText){if(previousSearchText=searchText,(text=&gt;/^:[^:\s]+:$/.test(text))(searchText)){const shortName=getShortNameFromText(searchText),emojiText=getEmojiTextFromShortName(shortName);hasSuggestions=!1,emojiText&amp;&amp;(addRecentEmoji(EmojiData.byShortName[shortName],shortName),selectCallback(emojiText))}else if((text=&gt;/^:[^:\s]*$/.test(text))(searchText)){const suggestions=(searchTerm=getShortNameFromText(searchText),limit=50,""===searchTerm?getRecentEmojis().map((data=&gt;data.shortnames[0])).slice(0,limit):(searchTerm=searchTerm.toLowerCase(),Object.keys(EmojiData.byShortName).filter((shortName=&gt;shortName.includes(searchTerm))).slice(0,limit)));suggestions.length?((async(root,shortNames)=&gt;{const renderContext={emojis:shortNames.map(((shortName,index)=&gt;({active:0===index,emojitext:getEmojiTextFromShortName(shortName),displayshortname:":".concat(shortName,":"),shortname:shortName,unified:EmojiData.byShortName[shortName]})))},html=await(0,_templates.render)("core/emoji/auto_complete",renderContext);root.innerHTML=html})(root,suggestions),hasSuggestions=!0):hasSuggestions=!1}else hasSuggestions=!1;var searchTerm,limit;hasSuggestionCallback(hasSuggestions)}}),200)),textArea.addEventListener("keydown",(e=&gt;{if(hasSuggestions){if(!(e.shiftKey||e.metaKey||e.altKey||e.ctrlKey))switch(e.which){case _key_codes.default.escape:hasSuggestions=!1,hasSuggestionCallback(!1);break;case _key_codes.default.arrowLeft:(root=&gt;{const activeEmojiSuggestion=getActiveEmojiSuggestion(root),previousSuggestion=activeEmojiSuggestion.previousElementSibling;previousSuggestion&amp;&amp;(activeEmojiSuggestion.classList.remove("active"),previousSuggestion.classList.add("active"),previousSuggestion.scrollIntoView({behaviour:"smooth",inline:"center"}))})(root),e.preventDefault();break;case _key_codes.default.arrowRight:(root=&gt;{const activeEmojiSuggestion=getActiveEmojiSuggestion(root),nextSuggestion=activeEmojiSuggestion.nextElementSibling;nextSuggestion&amp;&amp;(activeEmojiSuggestion.classList.remove("active"),nextSuggestion.classList.add("active"),nextSuggestion.scrollIntoView({behaviour:"smooth",inline:"center"}))})(root),e.preventDefault();break;case _key_codes.default.enter:selectEmojiElement(getActiveEmojiSuggestion(root),selectCallback),e.preventDefault(),e.stopPropagation()}}})),root.addEventListener("click",(e=&gt;{const target=e.target;target.matches(SELECTORS_EMOJI_BUTTON)&amp;&amp;selectEmojiElement(target,selectCallback)}))},_exports.default}));
define("core/emoji/data",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.byShortName=_exports.byCategory=void 0;_exports.byCategory=[{name:"Smileys &amp; Emotion",emojis:[{unified:"1F600",shortnames:["grinning"]},{unified:"1F603",shortnames:["smiley"]},{unified:"1F604",shortnames:["smile"]},{unified:"1F601",shortnames:["grin"]},{unified:"1F606",shortnames:["laughing"]},{unified:"1F605",shortnames:["sweat_smile"]},{unified:"1F923",shortnames:["rolling_on_the_floor_laughing"]},{unified:"1F602",shortnames:["joy"]},{unified:"1F642",shortnames:["slightly_smiling_face"]},{unified:"1F643",shortnames:["upside_down_face"]},{unified:"1FAE0",shortnames:["melting_face"]},{unified:"1F609",shortnames:["wink"]},{unified:"1F60A",shortnames:["blush"]},{unified:"1F607",shortnames:["innocent"]},{unified:"1F970",shortnames:["smiling_face_with_3_hearts"]},{unified:"1F60D",shortnames:["heart_eyes"]},{unified:"1F929",shortnames:["star-struck"]},{unified:"1F618",shortnames:["kissing_heart"]},{unified:"1F617",shortnames:["kissing"]},{unified:"263A-FE0F",shortnames:["relaxed"]},{unified:"1F61A",shortnames:["kissing_closed_eyes"]},{unified:"1F619",shortnames:["kissing_smiling_eyes"]},{unified:"1F972",shortnames:["smiling_face_with_tear"]},{unified:"1F60B",shortnames:["yum"]},{unified:"1F61B",shortnames:["stuck_out_tongue"]},{unified:"1F61C",shortnames:["stuck_out_tongue_winking_eye"]},{unified:"1F92A",shortnames:["zany_face"]},{unified:"1F61D",shortnames:["stuck_out_tongue_closed_eyes"]},{unified:"1F911",shortnames:["money_mouth_face"]},{unified:"1F917",shortnames:["hugging_face"]},{unified:"1F92D",shortnames:["face_with_hand_over_mouth"]},{unified:"1FAE2",shortnames:["face_with_open_eyes_and_hand_over_mouth"]},{unified:"1FAE3",shortnames:["face_with_peeking_eye"]},{unified:"1F92B",shortnames:["shushing_face"]},{unified:"1F914",shortnames:["thinking_face"]},{unified:"1FAE1",shortnames:["saluting_face"]},{unified:"1F910",shortnames:["zipper_mouth_face"]},{unified:"1F928",shortnames:["face_with_raised_eyebrow"]},{unified:"1F610",shortnames:["neutral_face"]},{unified:"1F611",shortnames:["expressionless"]},{unified:"1F636",shortnames:["no_mouth"]},{unified:"1FAE5",shortnames:["dotted_line_face"]},{unified:"1F636-200D-1F32B-FE0F",shortnames:["face_in_clouds"]},{unified:"1F60F",shortnames:["smirk"]},{unified:"1F612",shortnames:["unamused"]},{unified:"1F644",shortnames:["face_with_rolling_eyes"]},{unified:"1F62C",shortnames:["grimacing"]},{unified:"1F62E-200D-1F4A8",shortnames:["face_exhaling"]},{unified:"1F925",shortnames:["lying_face"]},{unified:"1F60C",shortnames:["relieved"]},{unified:"1F614",shortnames:["pensive"]},{unified:"1F62A",shortnames:["sleepy"]},{unified:"1F924",shortnames:["drooling_face"]},{unified:"1F634",shortnames:["sleeping"]},{unified:"1F637",shortnames:["mask"]},{unified:"1F912",shortnames:["face_with_thermometer"]},{unified:"1F915",shortnames:["face_with_head_bandage"]},{unified:"1F922",shortnames:["nauseated_face"]},{unified:"1F92E",shortnames:["face_vomiting"]},{unified:"1F927",shortnames:["sneezing_face"]},{unified:"1F975",shortnames:["hot_face"]},{unified:"1F976",shortnames:["cold_face"]},{unified:"1F974",shortnames:["woozy_face"]},{unified:"1F635",shortnames:["dizzy_face"]},{unified:"1F635-200D-1F4AB",shortnames:["face_with_spiral_eyes"]},{unified:"1F92F",shortnames:["exploding_head"]},{unified:"1F920",shortnames:["face_with_cowboy_hat"]},{unified:"1F973",shortnames:["partying_face"]},{unified:"1F978",shortnames:["disguised_face"]},{unified:"1F60E",shortnames:["sunglasses"]},{unified:"1F913",shortnames:["nerd_face"]},{unified:"1F9D0",shortnames:["face_with_monocle"]},{unified:"1F615",shortnames:["confused"]},{unified:"1FAE4",shortnames:["face_with_diagonal_mouth"]},{unified:"1F61F",shortnames:["worried"]},{unified:"1F641",shortnames:["slightly_frowning_face"]},{unified:"2639-FE0F",shortnames:["white_frowning_face"]},{unified:"1F62E",shortnames:["open_mouth"]},{unified:"1F62F",shortnames:["hushed"]},{unified:"1F632",shortnames:["astonished"]},{unified:"1F633",shortnames:["flushed"]},{unified:"1F97A",shortnames:["pleading_face"]},{unified:"1F979",shortnames:["face_holding_back_tears"]},{unified:"1F626",shortnames:["frowning"]},{unified:"1F627",shortnames:["anguished"]},{unified:"1F628",shortnames:["fearful"]},{unified:"1F630",shortnames:["cold_sweat"]},{unified:"1F625",shortnames:["disappointed_relieved"]},{unified:"1F622",shortnames:["cry"]},{unified:"1F62D",shortnames:["sob"]},{unified:"1F631",shortnames:["scream"]},{unified:"1F616",shortnames:["confounded"]},{unified:"1F623",shortnames:["persevere"]},{unified:"1F61E",shortnames:["disappointed"]},{unified:"1F613",shortnames:["sweat"]},{unified:"1F629",shortnames:["weary"]},{unified:"1F62B",shortnames:["tired_face"]},{unified:"1F971",shortnames:["yawning_face"]},{unified:"1F624",shortnames:["triumph"]},{unified:"1F621",shortnames:["rage"]},{unified:"1F620",shortnames:["angry"]},{unified:"1F92C",shortnames:["face_with_symbols_on_mouth"]},{unified:"1F608",shortnames:["smiling_imp"]},{unified:"1F47F",shortnames:["imp"]},{unified:"1F480",shortnames:["skull"]},{unified:"2620-FE0F",shortnames:["skull_and_crossbones"]},{unified:"1F4A9",shortnames:["hankey"]},{unified:"1F921",shortnames:["clown_face"]},{unified:"1F479",shortnames:["japanese_ogre"]},{unified:"1F47A",shortnames:["japanese_goblin"]},{unified:"1F47B",shortnames:["ghost"]},{unified:"1F47D",shortnames:["alien"]},{unified:"1F47E",shortnames:["space_invader"]},{unified:"1F916",shortnames:["robot_face"]},{unified:"1F63A",shortnames:["smiley_cat"]},{unified:"1F638",shortnames:["smile_cat"]},{unified:"1F639",shortnames:["joy_cat"]},{unified:"1F63B",shortnames:["heart_eyes_cat"]},{unified:"1F63C",shortnames:["smirk_cat"]},{unified:"1F63D",shortnames:["kissing_cat"]},{unified:"1F640",shortnames:["scream_cat"]},{unified:"1F63F",shortnames:["crying_cat_face"]},{unified:"1F63E",shortnames:["pouting_cat"]},{unified:"1F648",shortnames:["see_no_evil"]},{unified:"1F649",shortnames:["hear_no_evil"]},{unified:"1F64A",shortnames:["speak_no_evil"]},{unified:"1F48B",shortnames:["kiss"]},{unified:"1F48C",shortnames:["love_letter"]},{unified:"1F498",shortnames:["cupid"]},{unified:"1F49D",shortnames:["gift_heart"]},{unified:"1F496",shortnames:["sparkling_heart"]},{unified:"1F497",shortnames:["heartpulse"]},{unified:"1F493",shortnames:["heartbeat"]},{unified:"1F49E",shortnames:["revolving_hearts"]},{unified:"1F495",shortnames:["two_hearts"]},{unified:"1F49F",shortnames:["heart_decoration"]},{unified:"2763-FE0F",shortnames:["heavy_heart_exclamation_mark_ornament"]},{unified:"1F494",shortnames:["broken_heart"]},{unified:"2764-FE0F-200D-1F525",shortnames:["heart_on_fire"]},{unified:"2764-FE0F-200D-1FA79",shortnames:["mending_heart"]},{unified:"2764-FE0F",shortnames:["heart"]},{unified:"1F9E1",shortnames:["orange_heart"]},{unified:"1F49B",shortnames:["yellow_heart"]},{unified:"1F49A",shortnames:["green_heart"]},{unified:"1F499",shortnames:["blue_heart"]},{unified:"1F49C",shortnames:["purple_heart"]},{unified:"1F90E",shortnames:["brown_heart"]},{unified:"1F5A4",shortnames:["black_heart"]},{unified:"1F90D",shortnames:["white_heart"]},{unified:"1F4AF",shortnames:["100"]},{unified:"1F4A2",shortnames:["anger"]},{unified:"1F4A5",shortnames:["boom"]},{unified:"1F4AB",shortnames:["dizzy"]},{unified:"1F4A6",shortnames:["sweat_drops"]},{unified:"1F4A8",shortnames:["dash"]},{unified:"1F573-FE0F",shortnames:["hole"]},{unified:"1F4A3",shortnames:["bomb"]},{unified:"1F4AC",shortnames:["speech_balloon"]},{unified:"1F441-FE0F-200D-1F5E8-FE0F",shortnames:["eye-in-speech-bubble"]},{unified:"1F5E8-FE0F",shortnames:["left_speech_bubble"]},{unified:"1F5EF-FE0F",shortnames:["right_anger_bubble"]},{unified:"1F4AD",shortnames:["thought_balloon"]},{unified:"1F4A4",shortnames:["zzz"]}]},{name:"People &amp; Body",emojis:[{unified:"1F44B",shortnames:["wave"]},{unified:"1F91A",shortnames:["raised_back_of_hand"]},{unified:"1F590-FE0F",shortnames:["raised_hand_with_fingers_splayed"]},{unified:"270B",shortnames:["hand"]},{unified:"1F596",shortnames:["spock-hand"]},{unified:"1FAF1",shortnames:["rightwards_hand"]},{unified:"1FAF2",shortnames:["leftwards_hand"]},{unified:"1FAF3",shortnames:["palm_down_hand"]},{unified:"1FAF4",shortnames:["palm_up_hand"]},{unified:"1F44C",shortnames:["ok_hand"]},{unified:"1F90C",shortnames:["pinched_fingers"]},{unified:"1F90F",shortnames:["pinching_hand"]},{unified:"270C-FE0F",shortnames:["v"]},{unified:"1F91E",shortnames:["crossed_fingers"]},{unified:"1FAF0",shortnames:["hand_with_index_finger_and_thumb_crossed"]},{unified:"1F91F",shortnames:["i_love_you_hand_sign"]},{unified:"1F918",shortnames:["the_horns"]},{unified:"1F919",shortnames:["call_me_hand"]},{unified:"1F448",shortnames:["point_left"]},{unified:"1F449",shortnames:["point_right"]},{unified:"1F446",shortnames:["point_up_2"]},{unified:"1F595",shortnames:["middle_finger"]},{unified:"1F447",shortnames:["point_down"]},{unified:"261D-FE0F",shortnames:["point_up"]},{unified:"1FAF5",shortnames:["index_pointing_at_the_viewer"]},{unified:"1F44D",shortnames:["+1"]},{unified:"1F44E",shortnames:["-1"]},{unified:"270A",shortnames:["fist"]},{unified:"1F44A",shortnames:["facepunch"]},{unified:"1F91B",shortnames:["left-facing_fist"]},{unified:"1F91C",shortnames:["right-facing_fist"]},{unified:"1F44F",shortnames:["clap"]},{unified:"1F64C",shortnames:["raised_hands"]},{unified:"1FAF6",shortnames:["heart_hands"]},{unified:"1F450",shortnames:["open_hands"]},{unified:"1F932",shortnames:["palms_up_together"]},{unified:"1F91D",shortnames:["handshake"]},{unified:"1F64F",shortnames:["pray"]},{unified:"270D-FE0F",shortnames:["writing_hand"]},{unified:"1F485",shortnames:["nail_care"]},{unified:"1F933",shortnames:["selfie"]},{unified:"1F4AA",shortnames:["muscle"]},{unified:"1F9BE",shortnames:["mechanical_arm"]},{unified:"1F9BF",shortnames:["mechanical_leg"]},{unified:"1F9B5",shortnames:["leg"]},{unified:"1F9B6",shortnames:["foot"]},{unified:"1F442",shortnames:["ear"]},{unified:"1F9BB",shortnames:["ear_with_hearing_aid"]},{unified:"1F443",shortnames:["nose"]},{unified:"1F9E0",shortnames:["brain"]},{unified:"1FAC0",shortnames:["anatomical_heart"]},{unified:"1FAC1",shortnames:["lungs"]},{unified:"1F9B7",shortnames:["tooth"]},{unified:"1F9B4",shortnames:["bone"]},{unified:"1F440",shortnames:["eyes"]},{unified:"1F441-FE0F",shortnames:["eye"]},{unified:"1F445",shortnames:["tongue"]},{unified:"1F444",shortnames:["lips"]},{unified:"1FAE6",shortnames:["biting_lip"]},{unified:"1F476",shortnames:["baby"]},{unified:"1F9D2",shortnames:["child"]},{unified:"1F466",shortnames:["boy"]},{unified:"1F467",shortnames:["girl"]},{unified:"1F9D1",shortnames:["adult"]},{unified:"1F468",shortnames:["man"]},{unified:"1F9D4",shortnames:["bearded_person"]},{unified:"1F9D4-200D-2642-FE0F",shortnames:["man_with_beard"]},{unified:"1F9D4-200D-2640-FE0F",shortnames:["woman_with_beard"]},{unified:"1F468-200D-1F9B0",shortnames:["red_haired_man"]},{unified:"1F468-200D-1F9B1",shortnames:["curly_haired_man"]},{unified:"1F468-200D-1F9B3",shortnames:["white_haired_man"]},{unified:"1F468-200D-1F9B2",shortnames:["bald_man"]},{unified:"1F469",shortnames:["woman"]},{unified:"1F469-200D-1F9B0",shortnames:["red_haired_woman"]},{unified:"1F9D1-200D-1F9B0",shortnames:["red_haired_person"]},{unified:"1F469-200D-1F9B1",shortnames:["curly_haired_woman"]},{unified:"1F9D1-200D-1F9B1",shortnames:["curly_haired_person"]},{unified:"1F469-200D-1F9B3",shortnames:["white_haired_woman"]},{unified:"1F9D1-200D-1F9B3",shortnames:["white_haired_person"]},{unified:"1F469-200D-1F9B2",shortnames:["bald_woman"]},{unified:"1F9D1-200D-1F9B2",shortnames:["bald_person"]},{unified:"1F471-200D-2640-FE0F",shortnames:["blond-haired-woman"]},{unified:"1F471-200D-2642-FE0F",shortnames:["blond-haired-man","person_with_blond_hair"]},{unified:"1F9D3",shortnames:["older_adult"]},{unified:"1F474",shortnames:["older_man"]},{unified:"1F475",shortnames:["older_woman"]},{unified:"1F64D-200D-2642-FE0F",shortnames:["man-frowning"]},{unified:"1F64D-200D-2640-FE0F",shortnames:["woman-frowning","person_frowning"]},{unified:"1F64E-200D-2642-FE0F",shortnames:["man-pouting"]},{unified:"1F64E-200D-2640-FE0F",shortnames:["woman-pouting","person_with_pouting_face"]},{unified:"1F645-200D-2642-FE0F",shortnames:["man-gesturing-no"]},{unified:"1F645-200D-2640-FE0F",shortnames:["woman-gesturing-no","no_good"]},{unified:"1F646-200D-2642-FE0F",shortnames:["man-gesturing-ok"]},{unified:"1F646-200D-2640-FE0F",shortnames:["woman-gesturing-ok","ok_woman"]},{unified:"1F481-200D-2642-FE0F",shortnames:["man-tipping-hand"]},{unified:"1F481-200D-2640-FE0F",shortnames:["woman-tipping-hand","information_desk_person"]},{unified:"1F64B-200D-2642-FE0F",shortnames:["man-raising-hand"]},{unified:"1F64B-200D-2640-FE0F",shortnames:["woman-raising-hand","raising_hand"]},{unified:"1F9CF",shortnames:["deaf_person"]},{unified:"1F9CF-200D-2642-FE0F",shortnames:["deaf_man"]},{unified:"1F9CF-200D-2640-FE0F",shortnames:["deaf_woman"]},{unified:"1F647",shortnames:["bow"]},{unified:"1F647-200D-2642-FE0F",shortnames:["man-bowing"]},{unified:"1F647-200D-2640-FE0F",shortnames:["woman-bowing"]},{unified:"1F926",shortnames:["face_palm"]},{unified:"1F926-200D-2642-FE0F",shortnames:["man-facepalming"]},{unified:"1F926-200D-2640-FE0F",shortnames:["woman-facepalming"]},{unified:"1F937",shortnames:["shrug"]},{unified:"1F937-200D-2642-FE0F",shortnames:["man-shrugging"]},{unified:"1F937-200D-2640-FE0F",shortnames:["woman-shrugging"]},{unified:"1F9D1-200D-2695-FE0F",shortnames:["health_worker"]},{unified:"1F468-200D-2695-FE0F",shortnames:["male-doctor"]},{unified:"1F469-200D-2695-FE0F",shortnames:["female-doctor"]},{unified:"1F9D1-200D-1F393",shortnames:["student"]},{unified:"1F468-200D-1F393",shortnames:["male-student"]},{unified:"1F469-200D-1F393",shortnames:["female-student"]},{unified:"1F9D1-200D-1F3EB",shortnames:["teacher"]},{unified:"1F468-200D-1F3EB",shortnames:["male-teacher"]},{unified:"1F469-200D-1F3EB",shortnames:["female-teacher"]},{unified:"1F9D1-200D-2696-FE0F",shortnames:["judge"]},{unified:"1F468-200D-2696-FE0F",shortnames:["male-judge"]},{unified:"1F469-200D-2696-FE0F",shortnames:["female-judge"]},{unified:"1F9D1-200D-1F33E",shortnames:["farmer"]},{unified:"1F468-200D-1F33E",shortnames:["male-farmer"]},{unified:"1F469-200D-1F33E",shortnames:["female-farmer"]},{unified:"1F9D1-200D-1F373",shortnames:["cook"]},{unified:"1F468-200D-1F373",shortnames:["male-cook"]},{unified:"1F469-200D-1F373",shortnames:["female-cook"]},{unified:"1F9D1-200D-1F527",shortnames:["mechanic"]},{unified:"1F468-200D-1F527",shortnames:["male-mechanic"]},{unified:"1F469-200D-1F527",shortnames:["female-mechanic"]},{unified:"1F9D1-200D-1F3ED",shortnames:["factory_worker"]},{unified:"1F468-200D-1F3ED",shortnames:["male-factory-worker"]},{unified:"1F469-200D-1F3ED",shortnames:["female-factory-worker"]},{unified:"1F9D1-200D-1F4BC",shortnames:["office_worker"]},{unified:"1F468-200D-1F4BC",shortnames:["male-office-worker"]},{unified:"1F469-200D-1F4BC",shortnames:["female-office-worker"]},{unified:"1F9D1-200D-1F52C",shortnames:["scientist"]},{unified:"1F468-200D-1F52C",shortnames:["male-scientist"]},{unified:"1F469-200D-1F52C",shortnames:["female-scientist"]},{unified:"1F9D1-200D-1F4BB",shortnames:["technologist"]},{unified:"1F468-200D-1F4BB",shortnames:["male-technologist"]},{unified:"1F469-200D-1F4BB",shortnames:["female-technologist"]},{unified:"1F9D1-200D-1F3A4",shortnames:["singer"]},{unified:"1F468-200D-1F3A4",shortnames:["male-singer"]},{unified:"1F469-200D-1F3A4",shortnames:["female-singer"]},{unified:"1F9D1-200D-1F3A8",shortnames:["artist"]},{unified:"1F468-200D-1F3A8",shortnames:["male-artist"]},{unified:"1F469-200D-1F3A8",shortnames:["female-artist"]},{unified:"1F9D1-200D-2708-FE0F",shortnames:["pilot"]},{unified:"1F468-200D-2708-FE0F",shortnames:["male-pilot"]},{unified:"1F469-200D-2708-FE0F",shortnames:["female-pilot"]},{unified:"1F9D1-200D-1F680",shortnames:["astronaut"]},{unified:"1F468-200D-1F680",shortnames:["male-astronaut"]},{unified:"1F469-200D-1F680",shortnames:["female-astronaut"]},{unified:"1F9D1-200D-1F692",shortnames:["firefighter"]},{unified:"1F468-200D-1F692",shortnames:["male-firefighter"]},{unified:"1F469-200D-1F692",shortnames:["female-firefighter"]},{unified:"1F46E-200D-2642-FE0F",shortnames:["male-police-officer","cop"]},{unified:"1F46E-200D-2640-FE0F",shortnames:["female-police-officer"]},{unified:"1F575-FE0F-200D-2642-FE0F",shortnames:["male-detective","sleuth_or_spy"]},{unified:"1F575-FE0F-200D-2640-FE0F",shortnames:["female-detective"]},{unified:"1F482-200D-2642-FE0F",shortnames:["male-guard","guardsman"]},{unified:"1F482-200D-2640-FE0F",shortnames:["female-guard"]},{unified:"1F977",shortnames:["ninja"]},{unified:"1F477-200D-2642-FE0F",shortnames:["male-construction-worker","construction_worker"]},{unified:"1F477-200D-2640-FE0F",shortnames:["female-construction-worker"]},{unified:"1FAC5",shortnames:["person_with_crown"]},{unified:"1F934",shortnames:["prince"]},{unified:"1F478",shortnames:["princess"]},{unified:"1F473-200D-2642-FE0F",shortnames:["man-wearing-turban","man_with_turban"]},{unified:"1F473-200D-2640-FE0F",shortnames:["woman-wearing-turban"]},{unified:"1F472",shortnames:["man_with_gua_pi_mao"]},{unified:"1F9D5",shortnames:["person_with_headscarf"]},{unified:"1F935",shortnames:["person_in_tuxedo"]},{unified:"1F935-200D-2642-FE0F",shortnames:["man_in_tuxedo"]},{unified:"1F935-200D-2640-FE0F",shortnames:["woman_in_tuxedo"]},{unified:"1F470",shortnames:["bride_with_veil"]},{unified:"1F470-200D-2642-FE0F",shortnames:["man_with_veil"]},{unified:"1F470-200D-2640-FE0F",shortnames:["woman_with_veil"]},{unified:"1F930",shortnames:["pregnant_woman"]},{unified:"1FAC3",shortnames:["pregnant_man"]},{unified:"1FAC4",shortnames:["pregnant_person"]},{unified:"1F931",shortnames:["breast-feeding"]},{unified:"1F469-200D-1F37C",shortnames:["woman_feeding_baby"]},{unified:"1F468-200D-1F37C",shortnames:["man_feeding_baby"]},{unified:"1F9D1-200D-1F37C",shortnames:["person_feeding_baby"]},{unified:"1F47C",shortnames:["angel"]},{unified:"1F385",shortnames:["santa"]},{unified:"1F936",shortnames:["mrs_claus"]},{unified:"1F9D1-200D-1F384",shortnames:["mx_claus"]},{unified:"1F9B8",shortnames:["superhero"]},{unified:"1F9B8-200D-2642-FE0F",shortnames:["male_superhero"]},{unified:"1F9B8-200D-2640-FE0F",shortnames:["female_superhero"]},{unified:"1F9B9",shortnames:["supervillain"]},{unified:"1F9B9-200D-2642-FE0F",shortnames:["male_supervillain"]},{unified:"1F9B9-200D-2640-FE0F",shortnames:["female_supervillain"]},{unified:"1F9D9-200D-2642-FE0F",shortnames:["male_mage"]},{unified:"1F9D9-200D-2640-FE0F",shortnames:["female_mage","mage"]},{unified:"1F9DA-200D-2642-FE0F",shortnames:["male_fairy"]},{unified:"1F9DA-200D-2640-FE0F",shortnames:["female_fairy","fairy"]},{unified:"1F9DB-200D-2642-FE0F",shortnames:["male_vampire"]},{unified:"1F9DB-200D-2640-FE0F",shortnames:["female_vampire","vampire"]},{unified:"1F9DC-200D-2642-FE0F",shortnames:["merman","merperson"]},{unified:"1F9DC-200D-2640-FE0F",shortnames:["mermaid"]},{unified:"1F9DD-200D-2642-FE0F",shortnames:["male_elf","elf"]},{unified:"1F9DD-200D-2640-FE0F",shortnames:["female_elf"]},{unified:"1F9DE-200D-2642-FE0F",shortnames:["male_genie","genie"]},{unified:"1F9DE-200D-2640-FE0F",shortnames:["female_genie"]},{unified:"1F9DF-200D-2642-FE0F",shortnames:["male_zombie","zombie"]},{unified:"1F9DF-200D-2640-FE0F",shortnames:["female_zombie"]},{unified:"1F9CC",shortnames:["troll"]},{unified:"1F486-200D-2642-FE0F",shortnames:["man-getting-massage"]},{unified:"1F486-200D-2640-FE0F",shortnames:["woman-getting-massage","massage"]},{unified:"1F487-200D-2642-FE0F",shortnames:["man-getting-haircut"]},{unified:"1F487-200D-2640-FE0F",shortnames:["woman-getting-haircut","haircut"]},{unified:"1F6B6-200D-2642-FE0F",shortnames:["man-walking","walking"]},{unified:"1F6B6-200D-2640-FE0F",shortnames:["woman-walking"]},{unified:"1F9CD",shortnames:["standing_person"]},{unified:"1F9CD-200D-2642-FE0F",shortnames:["man_standing"]},{unified:"1F9CD-200D-2640-FE0F",shortnames:["woman_standing"]},{unified:"1F9CE",shortnames:["kneeling_person"]},{unified:"1F9CE-200D-2642-FE0F",shortnames:["man_kneeling"]},{unified:"1F9CE-200D-2640-FE0F",shortnames:["woman_kneeling"]},{unified:"1F9D1-200D-1F9AF",shortnames:["person_with_probing_cane"]},{unified:"1F468-200D-1F9AF",shortnames:["man_with_probing_cane"]},{unified:"1F469-200D-1F9AF",shortnames:["woman_with_probing_cane"]},{unified:"1F9D1-200D-1F9BC",shortnames:["person_in_motorized_wheelchair"]},{unified:"1F468-200D-1F9BC",shortnames:["man_in_motorized_wheelchair"]},{unified:"1F469-200D-1F9BC",shortnames:["woman_in_motorized_wheelchair"]},{unified:"1F9D1-200D-1F9BD",shortnames:["person_in_manual_wheelchair"]},{unified:"1F468-200D-1F9BD",shortnames:["man_in_manual_wheelchair"]},{unified:"1F469-200D-1F9BD",shortnames:["woman_in_manual_wheelchair"]},{unified:"1F3C3-200D-2642-FE0F",shortnames:["man-running","runner"]},{unified:"1F3C3-200D-2640-FE0F",shortnames:["woman-running"]},{unified:"1F483",shortnames:["dancer"]},{unified:"1F57A",shortnames:["man_dancing"]},{unified:"1F574-FE0F",shortnames:["man_in_business_suit_levitating"]},{unified:"1F46F-200D-2642-FE0F",shortnames:["men-with-bunny-ears-partying"]},{unified:"1F46F-200D-2640-FE0F",shortnames:["women-with-bunny-ears-partying","dancers"]},{unified:"1F9D6-200D-2642-FE0F",shortnames:["man_in_steamy_room","person_in_steamy_room"]},{unified:"1F9D6-200D-2640-FE0F",shortnames:["woman_in_steamy_room"]},{unified:"1F9D7-200D-2642-FE0F",shortnames:["man_climbing"]},{unified:"1F9D7-200D-2640-FE0F",shortnames:["woman_climbing","person_climbing"]},{unified:"1F93A",shortnames:["fencer"]},{unified:"1F3C7",shortnames:["horse_racing"]},{unified:"26F7-FE0F",shortnames:["skier"]},{unified:"1F3C2",shortnames:["snowboarder"]},{unified:"1F3CC-FE0F-200D-2642-FE0F",shortnames:["man-golfing","golfer"]},{unified:"1F3CC-FE0F-200D-2640-FE0F",shortnames:["woman-golfing"]},{unified:"1F3C4-200D-2642-FE0F",shortnames:["man-surfing","surfer"]},{unified:"1F3C4-200D-2640-FE0F",shortnames:["woman-surfing"]},{unified:"1F6A3-200D-2642-FE0F",shortnames:["man-rowing-boat","rowboat"]},{unified:"1F6A3-200D-2640-FE0F",shortnames:["woman-rowing-boat"]},{unified:"1F3CA-200D-2642-FE0F",shortnames:["man-swimming","swimmer"]},{unified:"1F3CA-200D-2640-FE0F",shortnames:["woman-swimming"]},{unified:"26F9-FE0F-200D-2642-FE0F",shortnames:["man-bouncing-ball","person_with_ball"]},{unified:"26F9-FE0F-200D-2640-FE0F",shortnames:["woman-bouncing-ball"]},{unified:"1F3CB-FE0F-200D-2642-FE0F",shortnames:["man-lifting-weights","weight_lifter"]},{unified:"1F3CB-FE0F-200D-2640-FE0F",shortnames:["woman-lifting-weights"]},{unified:"1F6B4-200D-2642-FE0F",shortnames:["man-biking","bicyclist"]},{unified:"1F6B4-200D-2640-FE0F",shortnames:["woman-biking"]},{unified:"1F6B5-200D-2642-FE0F",shortnames:["man-mountain-biking","mountain_bicyclist"]},{unified:"1F6B5-200D-2640-FE0F",shortnames:["woman-mountain-biking"]},{unified:"1F938",shortnames:["person_doing_cartwheel"]},{unified:"1F938-200D-2642-FE0F",shortnames:["man-cartwheeling"]},{unified:"1F938-200D-2640-FE0F",shortnames:["woman-cartwheeling"]},{unified:"1F93C",shortnames:["wrestlers"]},{unified:"1F93C-200D-2642-FE0F",shortnames:["man-wrestling"]},{unified:"1F93C-200D-2640-FE0F",shortnames:["woman-wrestling"]},{unified:"1F93D",shortnames:["water_polo"]},{unified:"1F93D-200D-2642-FE0F",shortnames:["man-playing-water-polo"]},{unified:"1F93D-200D-2640-FE0F",shortnames:["woman-playing-water-polo"]},{unified:"1F93E",shortnames:["handball"]},{unified:"1F93E-200D-2642-FE0F",shortnames:["man-playing-handball"]},{unified:"1F93E-200D-2640-FE0F",shortnames:["woman-playing-handball"]},{unified:"1F939",shortnames:["juggling"]},{unified:"1F939-200D-2642-FE0F",shortnames:["man-juggling"]},{unified:"1F939-200D-2640-FE0F",shortnames:["woman-juggling"]},{unified:"1F9D8-200D-2642-FE0F",shortnames:["man_in_lotus_position"]},{unified:"1F9D8-200D-2640-FE0F",shortnames:["woman_in_lotus_position","person_in_lotus_position"]},{unified:"1F6C0",shortnames:["bath"]},{unified:"1F6CC",shortnames:["sleeping_accommodation"]},{unified:"1F9D1-200D-1F91D-200D-1F9D1",shortnames:["people_holding_hands"]},{unified:"1F46D",shortnames:["two_women_holding_hands"]},{unified:"1F46B",shortnames:["man_and_woman_holding_hands"]},{unified:"1F46C",shortnames:["two_men_holding_hands"]},{unified:"1F48F",shortnames:["couplekiss"]},{unified:"1F469-200D-2764-FE0F-200D-1F48B-200D-1F468",shortnames:["woman-kiss-man"]},{unified:"1F468-200D-2764-FE0F-200D-1F48B-200D-1F468",shortnames:["man-kiss-man"]},{unified:"1F469-200D-2764-FE0F-200D-1F48B-200D-1F469",shortnames:["woman-kiss-woman"]},{unified:"1F491",shortnames:["couple_with_heart"]},{unified:"1F469-200D-2764-FE0F-200D-1F468",shortnames:["woman-heart-man"]},{unified:"1F468-200D-2764-FE0F-200D-1F468",shortnames:["man-heart-man"]},{unified:"1F469-200D-2764-FE0F-200D-1F469",shortnames:["woman-heart-woman"]},{unified:"1F468-200D-1F469-200D-1F466",shortnames:["man-woman-boy","family"]},{unified:"1F468-200D-1F469-200D-1F467",shortnames:["man-woman-girl"]},{unified:"1F468-200D-1F469-200D-1F467-200D-1F466",shortnames:["man-woman-girl-boy"]},{unified:"1F468-200D-1F469-200D-1F466-200D-1F466",shortnames:["man-woman-boy-boy"]},{unified:"1F468-200D-1F469-200D-1F467-200D-1F467",shortnames:["man-woman-girl-girl"]},{unified:"1F468-200D-1F468-200D-1F466",shortnames:["man-man-boy"]},{unified:"1F468-200D-1F468-200D-1F467",shortnames:["man-man-girl"]},{unified:"1F468-200D-1F468-200D-1F467-200D-1F466",shortnames:["man-man-girl-boy"]},{unified:"1F468-200D-1F468-200D-1F466-200D-1F466",shortnames:["man-man-boy-boy"]},{unified:"1F468-200D-1F468-200D-1F467-200D-1F467",shortnames:["man-man-girl-girl"]},{unified:"1F469-200D-1F469-200D-1F466",shortnames:["woman-woman-boy"]},{unified:"1F469-200D-1F469-200D-1F467",shortnames:["woman-woman-girl"]},{unified:"1F469-200D-1F469-200D-1F467-200D-1F466",shortnames:["woman-woman-girl-boy"]},{unified:"1F469-200D-1F469-200D-1F466-200D-1F466",shortnames:["woman-woman-boy-boy"]},{unified:"1F469-200D-1F469-200D-1F467-200D-1F467",shortnames:["woman-woman-girl-girl"]},{unified:"1F468-200D-1F466",shortnames:["man-boy"]},{unified:"1F468-200D-1F466-200D-1F466",shortnames:["man-boy-boy"]},{unified:"1F468-200D-1F467",shortnames:["man-girl"]},{unified:"1F468-200D-1F467-200D-1F466",shortnames:["man-girl-boy"]},{unified:"1F468-200D-1F467-200D-1F467",shortnames:["man-girl-girl"]},{unified:"1F469-200D-1F466",shortnames:["woman-boy"]},{unified:"1F469-200D-1F466-200D-1F466",shortnames:["woman-boy-boy"]},{unified:"1F469-200D-1F467",shortnames:["woman-girl"]},{unified:"1F469-200D-1F467-200D-1F466",shortnames:["woman-girl-boy"]},{unified:"1F469-200D-1F467-200D-1F467",shortnames:["woman-girl-girl"]},{unified:"1F5E3-FE0F",shortnames:["speaking_head_in_silhouette"]},{unified:"1F464",shortnames:["bust_in_silhouette"]},{unified:"1F465",shortnames:["busts_in_silhouette"]},{unified:"1FAC2",shortnames:["people_hugging"]},{unified:"1F463",shortnames:["footprints"]}]},{name:"Animals &amp; Nature",emojis:[{unified:"1F435",shortnames:["monkey_face"]},{unified:"1F412",shortnames:["monkey"]},{unified:"1F98D",shortnames:["gorilla"]},{unified:"1F9A7",shortnames:["orangutan"]},{unified:"1F436",shortnames:["dog"]},{unified:"1F415",shortnames:["dog2"]},{unified:"1F9AE",shortnames:["guide_dog"]},{unified:"1F415-200D-1F9BA",shortnames:["service_dog"]},{unified:"1F429",shortnames:["poodle"]},{unified:"1F43A",shortnames:["wolf"]},{unified:"1F98A",shortnames:["fox_face"]},{unified:"1F99D",shortnames:["raccoon"]},{unified:"1F431",shortnames:["cat"]},{unified:"1F408",shortnames:["cat2"]},{unified:"1F408-200D-2B1B",shortnames:["black_cat"]},{unified:"1F981",shortnames:["lion_face"]},{unified:"1F42F",shortnames:["tiger"]},{unified:"1F405",shortnames:["tiger2"]},{unified:"1F406",shortnames:["leopard"]},{unified:"1F434",shortnames:["horse"]},{unified:"1F40E",shortnames:["racehorse"]},{unified:"1F984",shortnames:["unicorn_face"]},{unified:"1F993",shortnames:["zebra_face"]},{unified:"1F98C",shortnames:["deer"]},{unified:"1F9AC",shortnames:["bison"]},{unified:"1F42E",shortnames:["cow"]},{unified:"1F402",shortnames:["ox"]},{unified:"1F403",shortnames:["water_buffalo"]},{unified:"1F404",shortnames:["cow2"]},{unified:"1F437",shortnames:["pig"]},{unified:"1F416",shortnames:["pig2"]},{unified:"1F417",shortnames:["boar"]},{unified:"1F43D",shortnames:["pig_nose"]},{unified:"1F40F",shortnames:["ram"]},{unified:"1F411",shortnames:["sheep"]},{unified:"1F410",shortnames:["goat"]},{unified:"1F42A",shortnames:["dromedary_camel"]},{unified:"1F42B",shortnames:["camel"]},{unified:"1F999",shortnames:["llama"]},{unified:"1F992",shortnames:["giraffe_face"]},{unified:"1F418",shortnames:["elephant"]},{unified:"1F9A3",shortnames:["mammoth"]},{unified:"1F98F",shortnames:["rhinoceros"]},{unified:"1F99B",shortnames:["hippopotamus"]},{unified:"1F42D",shortnames:["mouse"]},{unified:"1F401",shortnames:["mouse2"]},{unified:"1F400",shortnames:["rat"]},{unified:"1F439",shortnames:["hamster"]},{unified:"1F430",shortnames:["rabbit"]},{unified:"1F407",shortnames:["rabbit2"]},{unified:"1F43F-FE0F",shortnames:["chipmunk"]},{unified:"1F9AB",shortnames:["beaver"]},{unified:"1F994",shortnames:["hedgehog"]},{unified:"1F987",shortnames:["bat"]},{unified:"1F43B",shortnames:["bear"]},{unified:"1F43B-200D-2744-FE0F",shortnames:["polar_bear"]},{unified:"1F428",shortnames:["koala"]},{unified:"1F43C",shortnames:["panda_face"]},{unified:"1F9A5",shortnames:["sloth"]},{unified:"1F9A6",shortnames:["otter"]},{unified:"1F9A8",shortnames:["skunk"]},{unified:"1F998",shortnames:["kangaroo"]},{unified:"1F9A1",shortnames:["badger"]},{unified:"1F43E",shortnames:["feet"]},{unified:"1F983",shortnames:["turkey"]},{unified:"1F414",shortnames:["chicken"]},{unified:"1F413",shortnames:["rooster"]},{unified:"1F423",shortnames:["hatching_chick"]},{unified:"1F424",shortnames:["baby_chick"]},{unified:"1F425",shortnames:["hatched_chick"]},{unified:"1F426",shortnames:["bird"]},{unified:"1F427",shortnames:["penguin"]},{unified:"1F54A-FE0F",shortnames:["dove_of_peace"]},{unified:"1F985",shortnames:["eagle"]},{unified:"1F986",shortnames:["duck"]},{unified:"1F9A2",shortnames:["swan"]},{unified:"1F989",shortnames:["owl"]},{unified:"1F9A4",shortnames:["dodo"]},{unified:"1FAB6",shortnames:["feather"]},{unified:"1F9A9",shortnames:["flamingo"]},{unified:"1F99A",shortnames:["peacock"]},{unified:"1F99C",shortnames:["parrot"]},{unified:"1F438",shortnames:["frog"]},{unified:"1F40A",shortnames:["crocodile"]},{unified:"1F422",shortnames:["turtle"]},{unified:"1F98E",shortnames:["lizard"]},{unified:"1F40D",shortnames:["snake"]},{unified:"1F432",shortnames:["dragon_face"]},{unified:"1F409",shortnames:["dragon"]},{unified:"1F995",shortnames:["sauropod"]},{unified:"1F996",shortnames:["t-rex"]},{unified:"1F433",shortnames:["whale"]},{unified:"1F40B",shortnames:["whale2"]},{unified:"1F42C",shortnames:["dolphin"]},{unified:"1F9AD",shortnames:["seal"]},{unified:"1F41F",shortnames:["fish"]},{unified:"1F420",shortnames:["tropical_fish"]},{unified:"1F421",shortnames:["blowfish"]},{unified:"1F988",shortnames:["shark"]},{unified:"1F419",shortnames:["octopus"]},{unified:"1F41A",shortnames:["shell"]},{unified:"1FAB8",shortnames:["coral"]},{unified:"1F40C",shortnames:["snail"]},{unified:"1F98B",shortnames:["butterfly"]},{unified:"1F41B",shortnames:["bug"]},{unified:"1F41C",shortnames:["ant"]},{unified:"1F41D",shortnames:["bee"]},{unified:"1FAB2",shortnames:["beetle"]},{unified:"1F41E",shortnames:["ladybug"]},{unified:"1F997",shortnames:["cricket"]},{unified:"1FAB3",shortnames:["cockroach"]},{unified:"1F577-FE0F",shortnames:["spider"]},{unified:"1F578-FE0F",shortnames:["spider_web"]},{unified:"1F982",shortnames:["scorpion"]},{unified:"1F99F",shortnames:["mosquito"]},{unified:"1FAB0",shortnames:["fly"]},{unified:"1FAB1",shortnames:["worm"]},{unified:"1F9A0",shortnames:["microbe"]},{unified:"1F490",shortnames:["bouquet"]},{unified:"1F338",shortnames:["cherry_blossom"]},{unified:"1F4AE",shortnames:["white_flower"]},{unified:"1FAB7",shortnames:["lotus"]},{unified:"1F3F5-FE0F",shortnames:["rosette"]},{unified:"1F339",shortnames:["rose"]},{unified:"1F940",shortnames:["wilted_flower"]},{unified:"1F33A",shortnames:["hibiscus"]},{unified:"1F33B",shortnames:["sunflower"]},{unified:"1F33C",shortnames:["blossom"]},{unified:"1F337",shortnames:["tulip"]},{unified:"1F331",shortnames:["seedling"]},{unified:"1FAB4",shortnames:["potted_plant"]},{unified:"1F332",shortnames:["evergreen_tree"]},{unified:"1F333",shortnames:["deciduous_tree"]},{unified:"1F334",shortnames:["palm_tree"]},{unified:"1F335",shortnames:["cactus"]},{unified:"1F33E",shortnames:["ear_of_rice"]},{unified:"1F33F",shortnames:["herb"]},{unified:"2618-FE0F",shortnames:["shamrock"]},{unified:"1F340",shortnames:["four_leaf_clover"]},{unified:"1F341",shortnames:["maple_leaf"]},{unified:"1F342",shortnames:["fallen_leaf"]},{unified:"1F343",shortnames:["leaves"]},{unified:"1FAB9",shortnames:["empty_nest"]},{unified:"1FABA",shortnames:["nest_with_eggs"]}]},{name:"Food &amp; Drink",emojis:[{unified:"1F347",shortnames:["grapes"]},{unified:"1F348",shortnames:["melon"]},{unified:"1F349",shortnames:["watermelon"]},{unified:"1F34A",shortnames:["tangerine"]},{unified:"1F34B",shortnames:["lemon"]},{unified:"1F34C",shortnames:["banana"]},{unified:"1F34D",shortnames:["pineapple"]},{unified:"1F96D",shortnames:["mango"]},{unified:"1F34E",shortnames:["apple"]},{unified:"1F34F",shortnames:["green_apple"]},{unified:"1F350",shortnames:["pear"]},{unified:"1F351",shortnames:["peach"]},{unified:"1F352",shortnames:["cherries"]},{unified:"1F353",shortnames:["strawberry"]},{unified:"1FAD0",shortnames:["blueberries"]},{unified:"1F95D",shortnames:["kiwifruit"]},{unified:"1F345",shortnames:["tomato"]},{unified:"1FAD2",shortnames:["olive"]},{unified:"1F965",shortnames:["coconut"]},{unified:"1F951",shortnames:["avocado"]},{unified:"1F346",shortnames:["eggplant"]},{unified:"1F954",shortnames:["potato"]},{unified:"1F955",shortnames:["carrot"]},{unified:"1F33D",shortnames:["corn"]},{unified:"1F336-FE0F",shortnames:["hot_pepper"]},{unified:"1FAD1",shortnames:["bell_pepper"]},{unified:"1F952",shortnames:["cucumber"]},{unified:"1F96C",shortnames:["leafy_green"]},{unified:"1F966",shortnames:["broccoli"]},{unified:"1F9C4",shortnames:["garlic"]},{unified:"1F9C5",shortnames:["onion"]},{unified:"1F344",shortnames:["mushroom"]},{unified:"1F95C",shortnames:["peanuts"]},{unified:"1FAD8",shortnames:["beans"]},{unified:"1F330",shortnames:["chestnut"]},{unified:"1F35E",shortnames:["bread"]},{unified:"1F950",shortnames:["croissant"]},{unified:"1F956",shortnames:["baguette_bread"]},{unified:"1FAD3",shortnames:["flatbread"]},{unified:"1F968",shortnames:["pretzel"]},{unified:"1F96F",shortnames:["bagel"]},{unified:"1F95E",shortnames:["pancakes"]},{unified:"1F9C7",shortnames:["waffle"]},{unified:"1F9C0",shortnames:["cheese_wedge"]},{unified:"1F356",shortnames:["meat_on_bone"]},{unified:"1F357",shortnames:["poultry_leg"]},{unified:"1F969",shortnames:["cut_of_meat"]},{unified:"1F953",shortnames:["bacon"]},{unified:"1F354",shortnames:["hamburger"]},{unified:"1F35F",shortnames:["fries"]},{unified:"1F355",shortnames:["pizza"]},{unified:"1F32D",shortnames:["hotdog"]},{unified:"1F96A",shortnames:["sandwich"]},{unified:"1F32E",shortnames:["taco"]},{unified:"1F32F",shortnames:["burrito"]},{unified:"1FAD4",shortnames:["tamale"]},{unified:"1F959",shortnames:["stuffed_flatbread"]},{unified:"1F9C6",shortnames:["falafel"]},{unified:"1F95A",shortnames:["egg"]},{unified:"1F373",shortnames:["fried_egg"]},{unified:"1F958",shortnames:["shallow_pan_of_food"]},{unified:"1F372",shortnames:["stew"]},{unified:"1FAD5",shortnames:["fondue"]},{unified:"1F963",shortnames:["bowl_with_spoon"]},{unified:"1F957",shortnames:["green_salad"]},{unified:"1F37F",shortnames:["popcorn"]},{unified:"1F9C8",shortnames:["butter"]},{unified:"1F9C2",shortnames:["salt"]},{unified:"1F96B",shortnames:["canned_food"]},{unified:"1F371",shortnames:["bento"]},{unified:"1F358",shortnames:["rice_cracker"]},{unified:"1F359",shortnames:["rice_ball"]},{unified:"1F35A",shortnames:["rice"]},{unified:"1F35B",shortnames:["curry"]},{unified:"1F35C",shortnames:["ramen"]},{unified:"1F35D",shortnames:["spaghetti"]},{unified:"1F360",shortnames:["sweet_potato"]},{unified:"1F362",shortnames:["oden"]},{unified:"1F363",shortnames:["sushi"]},{unified:"1F364",shortnames:["fried_shrimp"]},{unified:"1F365",shortnames:["fish_cake"]},{unified:"1F96E",shortnames:["moon_cake"]},{unified:"1F361",shortnames:["dango"]},{unified:"1F95F",shortnames:["dumpling"]},{unified:"1F960",shortnames:["fortune_cookie"]},{unified:"1F961",shortnames:["takeout_box"]},{unified:"1F980",shortnames:["crab"]},{unified:"1F99E",shortnames:["lobster"]},{unified:"1F990",shortnames:["shrimp"]},{unified:"1F991",shortnames:["squid"]},{unified:"1F9AA",shortnames:["oyster"]},{unified:"1F366",shortnames:["icecream"]},{unified:"1F367",shortnames:["shaved_ice"]},{unified:"1F368",shortnames:["ice_cream"]},{unified:"1F369",shortnames:["doughnut"]},{unified:"1F36A",shortnames:["cookie"]},{unified:"1F382",shortnames:["birthday"]},{unified:"1F370",shortnames:["cake"]},{unified:"1F9C1",shortnames:["cupcake"]},{unified:"1F967",shortnames:["pie"]},{unified:"1F36B",shortnames:["chocolate_bar"]},{unified:"1F36C",shortnames:["candy"]},{unified:"1F36D",shortnames:["lollipop"]},{unified:"1F36E",shortnames:["custard"]},{unified:"1F36F",shortnames:["honey_pot"]},{unified:"1F37C",shortnames:["baby_bottle"]},{unified:"1F95B",shortnames:["glass_of_milk"]},{unified:"2615",shortnames:["coffee"]},{unified:"1FAD6",shortnames:["teapot"]},{unified:"1F375",shortnames:["tea"]},{unified:"1F376",shortnames:["sake"]},{unified:"1F37E",shortnames:["champagne"]},{unified:"1F377",shortnames:["wine_glass"]},{unified:"1F378",shortnames:["cocktail"]},{unified:"1F379",shortnames:["tropical_drink"]},{unified:"1F37A",shortnames:["beer"]},{unified:"1F37B",shortnames:["beers"]},{unified:"1F942",shortnames:["clinking_glasses"]},{unified:"1F943",shortnames:["tumbler_glass"]},{unified:"1FAD7",shortnames:["pouring_liquid"]},{unified:"1F964",shortnames:["cup_with_straw"]},{unified:"1F9CB",shortnames:["bubble_tea"]},{unified:"1F9C3",shortnames:["beverage_box"]},{unified:"1F9C9",shortnames:["mate_drink"]},{unified:"1F9CA",shortnames:["ice_cube"]},{unified:"1F962",shortnames:["chopsticks"]},{unified:"1F37D-FE0F",shortnames:["knife_fork_plate"]},{unified:"1F374",shortnames:["fork_and_knife"]},{unified:"1F944",shortnames:["spoon"]},{unified:"1F52A",shortnames:["hocho"]},{unified:"1FAD9",shortnames:["jar"]},{unified:"1F3FA",shortnames:["amphora"]}]},{name:"Travel &amp; Places",emojis:[{unified:"1F30D",shortnames:["earth_africa"]},{unified:"1F30E",shortnames:["earth_americas"]},{unified:"1F30F",shortnames:["earth_asia"]},{unified:"1F310",shortnames:["globe_with_meridians"]},{unified:"1F5FA-FE0F",shortnames:["world_map"]},{unified:"1F5FE",shortnames:["japan"]},{unified:"1F9ED",shortnames:["compass"]},{unified:"1F3D4-FE0F",shortnames:["snow_capped_mountain"]},{unified:"26F0-FE0F",shortnames:["mountain"]},{unified:"1F30B",shortnames:["volcano"]},{unified:"1F5FB",shortnames:["mount_fuji"]},{unified:"1F3D5-FE0F",shortnames:["camping"]},{unified:"1F3D6-FE0F",shortnames:["beach_with_umbrella"]},{unified:"1F3DC-FE0F",shortnames:["desert"]},{unified:"1F3DD-FE0F",shortnames:["desert_island"]},{unified:"1F3DE-FE0F",shortnames:["national_park"]},{unified:"1F3DF-FE0F",shortnames:["stadium"]},{unified:"1F3DB-FE0F",shortnames:["classical_building"]},{unified:"1F3D7-FE0F",shortnames:["building_construction"]},{unified:"1F9F1",shortnames:["bricks"]},{unified:"1FAA8",shortnames:["rock"]},{unified:"1FAB5",shortnames:["wood"]},{unified:"1F6D6",shortnames:["hut"]},{unified:"1F3D8-FE0F",shortnames:["house_buildings"]},{unified:"1F3DA-FE0F",shortnames:["derelict_house_building"]},{unified:"1F3E0",shortnames:["house"]},{unified:"1F3E1",shortnames:["house_with_garden"]},{unified:"1F3E2",shortnames:["office"]},{unified:"1F3E3",shortnames:["post_office"]},{unified:"1F3E4",shortnames:["european_post_office"]},{unified:"1F3E5",shortnames:["hospital"]},{unified:"1F3E6",shortnames:["bank"]},{unified:"1F3E8",shortnames:["hotel"]},{unified:"1F3E9",shortnames:["love_hotel"]},{unified:"1F3EA",shortnames:["convenience_store"]},{unified:"1F3EB",shortnames:["school"]},{unified:"1F3EC",shortnames:["department_store"]},{unified:"1F3ED",shortnames:["factory"]},{unified:"1F3EF",shortnames:["japanese_castle"]},{unified:"1F3F0",shortnames:["european_castle"]},{unified:"1F492",shortnames:["wedding"]},{unified:"1F5FC",shortnames:["tokyo_tower"]},{unified:"1F5FD",shortnames:["statue_of_liberty"]},{unified:"26EA",shortnames:["church"]},{unified:"1F54C",shortnames:["mosque"]},{unified:"1F6D5",shortnames:["hindu_temple"]},{unified:"1F54D",shortnames:["synagogue"]},{unified:"26E9-FE0F",shortnames:["shinto_shrine"]},{unified:"1F54B",shortnames:["kaaba"]},{unified:"26F2",shortnames:["fountain"]},{unified:"26FA",shortnames:["tent"]},{unified:"1F301",shortnames:["foggy"]},{unified:"1F303",shortnames:["night_with_stars"]},{unified:"1F3D9-FE0F",shortnames:["cityscape"]},{unified:"1F304",shortnames:["sunrise_over_mountains"]},{unified:"1F305",shortnames:["sunrise"]},{unified:"1F306",shortnames:["city_sunset"]},{unified:"1F307",shortnames:["city_sunrise"]},{unified:"1F309",shortnames:["bridge_at_night"]},{unified:"2668-FE0F",shortnames:["hotsprings"]},{unified:"1F3A0",shortnames:["carousel_horse"]},{unified:"1F6DD",shortnames:["playground_slide"]},{unified:"1F3A1",shortnames:["ferris_wheel"]},{unified:"1F3A2",shortnames:["roller_coaster"]},{unified:"1F488",shortnames:["barber"]},{unified:"1F3AA",shortnames:["circus_tent"]},{unified:"1F682",shortnames:["steam_locomotive"]},{unified:"1F683",shortnames:["railway_car"]},{unified:"1F684",shortnames:["bullettrain_side"]},{unified:"1F685",shortnames:["bullettrain_front"]},{unified:"1F686",shortnames:["train2"]},{unified:"1F687",shortnames:["metro"]},{unified:"1F688",shortnames:["light_rail"]},{unified:"1F689",shortnames:["station"]},{unified:"1F68A",shortnames:["tram"]},{unified:"1F69D",shortnames:["monorail"]},{unified:"1F69E",shortnames:["mountain_railway"]},{unified:"1F68B",shortnames:["train"]},{unified:"1F68C",shortnames:["bus"]},{unified:"1F68D",shortnames:["oncoming_bus"]},{unified:"1F68E",shortnames:["trolleybus"]},{unified:"1F690",shortnames:["minibus"]},{unified:"1F691",shortnames:["ambulance"]},{unified:"1F692",shortnames:["fire_engine"]},{unified:"1F693",shortnames:["police_car"]},{unified:"1F694",shortnames:["oncoming_police_car"]},{unified:"1F695",shortnames:["taxi"]},{unified:"1F696",shortnames:["oncoming_taxi"]},{unified:"1F697",shortnames:["car"]},{unified:"1F698",shortnames:["oncoming_automobile"]},{unified:"1F699",shortnames:["blue_car"]},{unified:"1F6FB",shortnames:["pickup_truck"]},{unified:"1F69A",shortnames:["truck"]},{unified:"1F69B",shortnames:["articulated_lorry"]},{unified:"1F69C",shortnames:["tractor"]},{unified:"1F3CE-FE0F",shortnames:["racing_car"]},{unified:"1F3CD-FE0F",shortnames:["racing_motorcycle"]},{unified:"1F6F5",shortnames:["motor_scooter"]},{unified:"1F9BD",shortnames:["manual_wheelchair"]},{unified:"1F9BC",shortnames:["motorized_wheelchair"]},{unified:"1F6FA",shortnames:["auto_rickshaw"]},{unified:"1F6B2",shortnames:["bike"]},{unified:"1F6F4",shortnames:["scooter"]},{unified:"1F6F9",shortnames:["skateboard"]},{unified:"1F6FC",shortnames:["roller_skate"]},{unified:"1F68F",shortnames:["busstop"]},{unified:"1F6E3-FE0F",shortnames:["motorway"]},{unified:"1F6E4-FE0F",shortnames:["railway_track"]},{unified:"1F6E2-FE0F",shortnames:["oil_drum"]},{unified:"26FD",shortnames:["fuelpump"]},{unified:"1F6DE",shortnames:["wheel"]},{unified:"1F6A8",shortnames:["rotating_light"]},{unified:"1F6A5",shortnames:["traffic_light"]},{unified:"1F6A6",shortnames:["vertical_traffic_light"]},{unified:"1F6D1",shortnames:["octagonal_sign"]},{unified:"1F6A7",shortnames:["construction"]},{unified:"2693",shortnames:["anchor"]},{unified:"1F6DF",shortnames:["ring_buoy"]},{unified:"26F5",shortnames:["boat"]},{unified:"1F6F6",shortnames:["canoe"]},{unified:"1F6A4",shortnames:["speedboat"]},{unified:"1F6F3-FE0F",shortnames:["passenger_ship"]},{unified:"26F4-FE0F",shortnames:["ferry"]},{unified:"1F6E5-FE0F",shortnames:["motor_boat"]},{unified:"1F6A2",shortnames:["ship"]},{unified:"2708-FE0F",shortnames:["airplane"]},{unified:"1F6E9-FE0F",shortnames:["small_airplane"]},{unified:"1F6EB",shortnames:["airplane_departure"]},{unified:"1F6EC",shortnames:["airplane_arriving"]},{unified:"1FA82",shortnames:["parachute"]},{unified:"1F4BA",shortnames:["seat"]},{unified:"1F681",shortnames:["helicopter"]},{unified:"1F69F",shortnames:["suspension_railway"]},{unified:"1F6A0",shortnames:["mountain_cableway"]},{unified:"1F6A1",shortnames:["aerial_tramway"]},{unified:"1F6F0-FE0F",shortnames:["satellite"]},{unified:"1F680",shortnames:["rocket"]},{unified:"1F6F8",shortnames:["flying_saucer"]},{unified:"1F6CE-FE0F",shortnames:["bellhop_bell"]},{unified:"1F9F3",shortnames:["luggage"]},{unified:"231B",shortnames:["hourglass"]},{unified:"23F3",shortnames:["hourglass_flowing_sand"]},{unified:"231A",shortnames:["watch"]},{unified:"23F0",shortnames:["alarm_clock"]},{unified:"23F1-FE0F",shortnames:["stopwatch"]},{unified:"23F2-FE0F",shortnames:["timer_clock"]},{unified:"1F570-FE0F",shortnames:["mantelpiece_clock"]},{unified:"1F55B",shortnames:["clock12"]},{unified:"1F567",shortnames:["clock1230"]},{unified:"1F550",shortnames:["clock1"]},{unified:"1F55C",shortnames:["clock130"]},{unified:"1F551",shortnames:["clock2"]},{unified:"1F55D",shortnames:["clock230"]},{unified:"1F552",shortnames:["clock3"]},{unified:"1F55E",shortnames:["clock330"]},{unified:"1F553",shortnames:["clock4"]},{unified:"1F55F",shortnames:["clock430"]},{unified:"1F554",shortnames:["clock5"]},{unified:"1F560",shortnames:["clock530"]},{unified:"1F555",shortnames:["clock6"]},{unified:"1F561",shortnames:["clock630"]},{unified:"1F556",shortnames:["clock7"]},{unified:"1F562",shortnames:["clock730"]},{unified:"1F557",shortnames:["clock8"]},{unified:"1F563",shortnames:["clock830"]},{unified:"1F558",shortnames:["clock9"]},{unified:"1F564",shortnames:["clock930"]},{unified:"1F559",shortnames:["clock10"]},{unified:"1F565",shortnames:["clock1030"]},{unified:"1F55A",shortnames:["clock11"]},{unified:"1F566",shortnames:["clock1130"]},{unified:"1F311",shortnames:["new_moon"]},{unified:"1F312",shortnames:["waxing_crescent_moon"]},{unified:"1F313",shortnames:["first_quarter_moon"]},{unified:"1F314",shortnames:["moon"]},{unified:"1F315",shortnames:["full_moon"]},{unified:"1F316",shortnames:["waning_gibbous_moon"]},{unified:"1F317",shortnames:["last_quarter_moon"]},{unified:"1F318",shortnames:["waning_crescent_moon"]},{unified:"1F319",shortnames:["crescent_moon"]},{unified:"1F31A",shortnames:["new_moon_with_face"]},{unified:"1F31B",shortnames:["first_quarter_moon_with_face"]},{unified:"1F31C",shortnames:["last_quarter_moon_with_face"]},{unified:"1F321-FE0F",shortnames:["thermometer"]},{unified:"2600-FE0F",shortnames:["sunny"]},{unified:"1F31D",shortnames:["full_moon_with_face"]},{unified:"1F31E",shortnames:["sun_with_face"]},{unified:"1FA90",shortnames:["ringed_planet"]},{unified:"2B50",shortnames:["star"]},{unified:"1F31F",shortnames:["star2"]},{unified:"1F320",shortnames:["stars"]},{unified:"1F30C",shortnames:["milky_way"]},{unified:"2601-FE0F",shortnames:["cloud"]},{unified:"26C5",shortnames:["partly_sunny"]},{unified:"26C8-FE0F",shortnames:["thunder_cloud_and_rain"]},{unified:"1F324-FE0F",shortnames:["mostly_sunny"]},{unified:"1F325-FE0F",shortnames:["barely_sunny"]},{unified:"1F326-FE0F",shortnames:["partly_sunny_rain"]},{unified:"1F327-FE0F",shortnames:["rain_cloud"]},{unified:"1F328-FE0F",shortnames:["snow_cloud"]},{unified:"1F329-FE0F",shortnames:["lightning"]},{unified:"1F32A-FE0F",shortnames:["tornado"]},{unified:"1F32B-FE0F",shortnames:["fog"]},{unified:"1F32C-FE0F",shortnames:["wind_blowing_face"]},{unified:"1F300",shortnames:["cyclone"]},{unified:"1F308",shortnames:["rainbow"]},{unified:"1F302",shortnames:["closed_umbrella"]},{unified:"2602-FE0F",shortnames:["umbrella"]},{unified:"2614",shortnames:["umbrella_with_rain_drops"]},{unified:"26F1-FE0F",shortnames:["umbrella_on_ground"]},{unified:"26A1",shortnames:["zap"]},{unified:"2744-FE0F",shortnames:["snowflake"]},{unified:"2603-FE0F",shortnames:["snowman"]},{unified:"26C4",shortnames:["snowman_without_snow"]},{unified:"2604-FE0F",shortnames:["comet"]},{unified:"1F525",shortnames:["fire"]},{unified:"1F4A7",shortnames:["droplet"]},{unified:"1F30A",shortnames:["ocean"]}]},{name:"Activities",emojis:[{unified:"1F383",shortnames:["jack_o_lantern"]},{unified:"1F384",shortnames:["christmas_tree"]},{unified:"1F386",shortnames:["fireworks"]},{unified:"1F387",shortnames:["sparkler"]},{unified:"1F9E8",shortnames:["firecracker"]},{unified:"2728",shortnames:["sparkles"]},{unified:"1F388",shortnames:["balloon"]},{unified:"1F389",shortnames:["tada"]},{unified:"1F38A",shortnames:["confetti_ball"]},{unified:"1F38B",shortnames:["tanabata_tree"]},{unified:"1F38D",shortnames:["bamboo"]},{unified:"1F38E",shortnames:["dolls"]},{unified:"1F38F",shortnames:["flags"]},{unified:"1F390",shortnames:["wind_chime"]},{unified:"1F391",shortnames:["rice_scene"]},{unified:"1F9E7",shortnames:["red_envelope"]},{unified:"1F380",shortnames:["ribbon"]},{unified:"1F381",shortnames:["gift"]},{unified:"1F397-FE0F",shortnames:["reminder_ribbon"]},{unified:"1F39F-FE0F",shortnames:["admission_tickets"]},{unified:"1F3AB",shortnames:["ticket"]},{unified:"1F396-FE0F",shortnames:["medal"]},{unified:"1F3C6",shortnames:["trophy"]},{unified:"1F3C5",shortnames:["sports_medal"]},{unified:"1F947",shortnames:["first_place_medal"]},{unified:"1F948",shortnames:["second_place_medal"]},{unified:"1F949",shortnames:["third_place_medal"]},{unified:"26BD",shortnames:["soccer"]},{unified:"26BE",shortnames:["baseball"]},{unified:"1F94E",shortnames:["softball"]},{unified:"1F3C0",shortnames:["basketball"]},{unified:"1F3D0",shortnames:["volleyball"]},{unified:"1F3C8",shortnames:["football"]},{unified:"1F3C9",shortnames:["rugby_football"]},{unified:"1F3BE",shortnames:["tennis"]},{unified:"1F94F",shortnames:["flying_disc"]},{unified:"1F3B3",shortnames:["bowling"]},{unified:"1F3CF",shortnames:["cricket_bat_and_ball"]},{unified:"1F3D1",shortnames:["field_hockey_stick_and_ball"]},{unified:"1F3D2",shortnames:["ice_hockey_stick_and_puck"]},{unified:"1F94D",shortnames:["lacrosse"]},{unified:"1F3D3",shortnames:["table_tennis_paddle_and_ball"]},{unified:"1F3F8",shortnames:["badminton_racquet_and_shuttlecock"]},{unified:"1F94A",shortnames:["boxing_glove"]},{unified:"1F94B",shortnames:["martial_arts_uniform"]},{unified:"1F945",shortnames:["goal_net"]},{unified:"26F3",shortnames:["golf"]},{unified:"26F8-FE0F",shortnames:["ice_skate"]},{unified:"1F3A3",shortnames:["fishing_pole_and_fish"]},{unified:"1F93F",shortnames:["diving_mask"]},{unified:"1F3BD",shortnames:["running_shirt_with_sash"]},{unified:"1F3BF",shortnames:["ski"]},{unified:"1F6F7",shortnames:["sled"]},{unified:"1F94C",shortnames:["curling_stone"]},{unified:"1F3AF",shortnames:["dart"]},{unified:"1FA80",shortnames:["yo-yo"]},{unified:"1FA81",shortnames:["kite"]},{unified:"1F3B1",shortnames:["8ball"]},{unified:"1F52E",shortnames:["crystal_ball"]},{unified:"1FA84",shortnames:["magic_wand"]},{unified:"1F9FF",shortnames:["nazar_amulet"]},{unified:"1FAAC",shortnames:["hamsa"]},{unified:"1F3AE",shortnames:["video_game"]},{unified:"1F579-FE0F",shortnames:["joystick"]},{unified:"1F3B0",shortnames:["slot_machine"]},{unified:"1F3B2",shortnames:["game_die"]},{unified:"1F9E9",shortnames:["jigsaw"]},{unified:"1F9F8",shortnames:["teddy_bear"]},{unified:"1FA85",shortnames:["pinata"]},{unified:"1FAA9",shortnames:["mirror_ball"]},{unified:"1FA86",shortnames:["nesting_dolls"]},{unified:"2660-FE0F",shortnames:["spades"]},{unified:"2665-FE0F",shortnames:["hearts"]},{unified:"2666-FE0F",shortnames:["diamonds"]},{unified:"2663-FE0F",shortnames:["clubs"]},{unified:"265F-FE0F",shortnames:["chess_pawn"]},{unified:"1F0CF",shortnames:["black_joker"]},{unified:"1F004",shortnames:["mahjong"]},{unified:"1F3B4",shortnames:["flower_playing_cards"]},{unified:"1F3AD",shortnames:["performing_arts"]},{unified:"1F5BC-FE0F",shortnames:["frame_with_picture"]},{unified:"1F3A8",shortnames:["art"]},{unified:"1F9F5",shortnames:["thread"]},{unified:"1FAA1",shortnames:["sewing_needle"]},{unified:"1F9F6",shortnames:["yarn"]},{unified:"1FAA2",shortnames:["knot"]}]},{name:"Objects",emojis:[{unified:"1F453",shortnames:["eyeglasses"]},{unified:"1F576-FE0F",shortnames:["dark_sunglasses"]},{unified:"1F97D",shortnames:["goggles"]},{unified:"1F97C",shortnames:["lab_coat"]},{unified:"1F9BA",shortnames:["safety_vest"]},{unified:"1F454",shortnames:["necktie"]},{unified:"1F455",shortnames:["shirt"]},{unified:"1F456",shortnames:["jeans"]},{unified:"1F9E3",shortnames:["scarf"]},{unified:"1F9E4",shortnames:["gloves"]},{unified:"1F9E5",shortnames:["coat"]},{unified:"1F9E6",shortnames:["socks"]},{unified:"1F457",shortnames:["dress"]},{unified:"1F458",shortnames:["kimono"]},{unified:"1F97B",shortnames:["sari"]},{unified:"1FA71",shortnames:["one-piece_swimsuit"]},{unified:"1FA72",shortnames:["briefs"]},{unified:"1FA73",shortnames:["shorts"]},{unified:"1F459",shortnames:["bikini"]},{unified:"1F45A",shortnames:["womans_clothes"]},{unified:"1F45B",shortnames:["purse"]},{unified:"1F45C",shortnames:["handbag"]},{unified:"1F45D",shortnames:["pouch"]},{unified:"1F6CD-FE0F",shortnames:["shopping_bags"]},{unified:"1F392",shortnames:["school_satchel"]},{unified:"1FA74",shortnames:["thong_sandal"]},{unified:"1F45E",shortnames:["mans_shoe"]},{unified:"1F45F",shortnames:["athletic_shoe"]},{unified:"1F97E",shortnames:["hiking_boot"]},{unified:"1F97F",shortnames:["womans_flat_shoe"]},{unified:"1F460",shortnames:["high_heel"]},{unified:"1F461",shortnames:["sandal"]},{unified:"1FA70",shortnames:["ballet_shoes"]},{unified:"1F462",shortnames:["boot"]},{unified:"1F451",shortnames:["crown"]},{unified:"1F452",shortnames:["womans_hat"]},{unified:"1F3A9",shortnames:["tophat"]},{unified:"1F393",shortnames:["mortar_board"]},{unified:"1F9E2",shortnames:["billed_cap"]},{unified:"1FA96",shortnames:["military_helmet"]},{unified:"26D1-FE0F",shortnames:["helmet_with_white_cross"]},{unified:"1F4FF",shortnames:["prayer_beads"]},{unified:"1F484",shortnames:["lipstick"]},{unified:"1F48D",shortnames:["ring"]},{unified:"1F48E",shortnames:["gem"]},{unified:"1F507",shortnames:["mute"]},{unified:"1F508",shortnames:["speaker"]},{unified:"1F509",shortnames:["sound"]},{unified:"1F50A",shortnames:["loud_sound"]},{unified:"1F4E2",shortnames:["loudspeaker"]},{unified:"1F4E3",shortnames:["mega"]},{unified:"1F4EF",shortnames:["postal_horn"]},{unified:"1F514",shortnames:["bell"]},{unified:"1F515",shortnames:["no_bell"]},{unified:"1F3BC",shortnames:["musical_score"]},{unified:"1F3B5",shortnames:["musical_note"]},{unified:"1F3B6",shortnames:["notes"]},{unified:"1F399-FE0F",shortnames:["studio_microphone"]},{unified:"1F39A-FE0F",shortnames:["level_slider"]},{unified:"1F39B-FE0F",shortnames:["control_knobs"]},{unified:"1F3A4",shortnames:["microphone"]},{unified:"1F3A7",shortnames:["headphones"]},{unified:"1F4FB",shortnames:["radio"]},{unified:"1F3B7",shortnames:["saxophone"]},{unified:"1FA97",shortnames:["accordion"]},{unified:"1F3B8",shortnames:["guitar"]},{unified:"1F3B9",shortnames:["musical_keyboard"]},{unified:"1F3BA",shortnames:["trumpet"]},{unified:"1F3BB",shortnames:["violin"]},{unified:"1FA95",shortnames:["banjo"]},{unified:"1F941",shortnames:["drum_with_drumsticks"]},{unified:"1FA98",shortnames:["long_drum"]},{unified:"1F4F1",shortnames:["iphone"]},{unified:"1F4F2",shortnames:["calling"]},{unified:"260E-FE0F",shortnames:["phone"]},{unified:"1F4DE",shortnames:["telephone_receiver"]},{unified:"1F4DF",shortnames:["pager"]},{unified:"1F4E0",shortnames:["fax"]},{unified:"1F50B",shortnames:["battery"]},{unified:"1FAAB",shortnames:["low_battery"]},{unified:"1F50C",shortnames:["electric_plug"]},{unified:"1F4BB",shortnames:["computer"]},{unified:"1F5A5-FE0F",shortnames:["desktop_computer"]},{unified:"1F5A8-FE0F",shortnames:["printer"]},{unified:"2328-FE0F",shortnames:["keyboard"]},{unified:"1F5B1-FE0F",shortnames:["three_button_mouse"]},{unified:"1F5B2-FE0F",shortnames:["trackball"]},{unified:"1F4BD",shortnames:["minidisc"]},{unified:"1F4BE",shortnames:["floppy_disk"]},{unified:"1F4BF",shortnames:["cd"]},{unified:"1F4C0",shortnames:["dvd"]},{unified:"1F9EE",shortnames:["abacus"]},{unified:"1F3A5",shortnames:["movie_camera"]},{unified:"1F39E-FE0F",shortnames:["film_frames"]},{unified:"1F4FD-FE0F",shortnames:["film_projector"]},{unified:"1F3AC",shortnames:["clapper"]},{unified:"1F4FA",shortnames:["tv"]},{unified:"1F4F7",shortnames:["camera"]},{unified:"1F4F8",shortnames:["camera_with_flash"]},{unified:"1F4F9",shortnames:["video_camera"]},{unified:"1F4FC",shortnames:["vhs"]},{unified:"1F50D",shortnames:["mag"]},{unified:"1F50E",shortnames:["mag_right"]},{unified:"1F56F-FE0F",shortnames:["candle"]},{unified:"1F4A1",shortnames:["bulb"]},{unified:"1F526",shortnames:["flashlight"]},{unified:"1F3EE",shortnames:["izakaya_lantern"]},{unified:"1FA94",shortnames:["diya_lamp"]},{unified:"1F4D4",shortnames:["notebook_with_decorative_cover"]},{unified:"1F4D5",shortnames:["closed_book"]},{unified:"1F4D6",shortnames:["book"]},{unified:"1F4D7",shortnames:["green_book"]},{unified:"1F4D8",shortnames:["blue_book"]},{unified:"1F4D9",shortnames:["orange_book"]},{unified:"1F4DA",shortnames:["books"]},{unified:"1F4D3",shortnames:["notebook"]},{unified:"1F4D2",shortnames:["ledger"]},{unified:"1F4C3",shortnames:["page_with_curl"]},{unified:"1F4DC",shortnames:["scroll"]},{unified:"1F4C4",shortnames:["page_facing_up"]},{unified:"1F4F0",shortnames:["newspaper"]},{unified:"1F5DE-FE0F",shortnames:["rolled_up_newspaper"]},{unified:"1F4D1",shortnames:["bookmark_tabs"]},{unified:"1F516",shortnames:["bookmark"]},{unified:"1F3F7-FE0F",shortnames:["label"]},{unified:"1F4B0",shortnames:["moneybag"]},{unified:"1FA99",shortnames:["coin"]},{unified:"1F4B4",shortnames:["yen"]},{unified:"1F4B5",shortnames:["dollar"]},{unified:"1F4B6",shortnames:["euro"]},{unified:"1F4B7",shortnames:["pound"]},{unified:"1F4B8",shortnames:["money_with_wings"]},{unified:"1F4B3",shortnames:["credit_card"]},{unified:"1F9FE",shortnames:["receipt"]},{unified:"1F4B9",shortnames:["chart"]},{unified:"2709-FE0F",shortnames:["email"]},{unified:"1F4E7",shortnames:["e-mail"]},{unified:"1F4E8",shortnames:["incoming_envelope"]},{unified:"1F4E9",shortnames:["envelope_with_arrow"]},{unified:"1F4E4",shortnames:["outbox_tray"]},{unified:"1F4E5",shortnames:["inbox_tray"]},{unified:"1F4E6",shortnames:["package"]},{unified:"1F4EB",shortnames:["mailbox"]},{unified:"1F4EA",shortnames:["mailbox_closed"]},{unified:"1F4EC",shortnames:["mailbox_with_mail"]},{unified:"1F4ED",shortnames:["mailbox_with_no_mail"]},{unified:"1F4EE",shortnames:["postbox"]},{unified:"1F5F3-FE0F",shortnames:["ballot_box_with_ballot"]},{unified:"270F-FE0F",shortnames:["pencil2"]},{unified:"2712-FE0F",shortnames:["black_nib"]},{unified:"1F58B-FE0F",shortnames:["lower_left_fountain_pen"]},{unified:"1F58A-FE0F",shortnames:["lower_left_ballpoint_pen"]},{unified:"1F58C-FE0F",shortnames:["lower_left_paintbrush"]},{unified:"1F58D-FE0F",shortnames:["lower_left_crayon"]},{unified:"1F4DD",shortnames:["memo"]},{unified:"1F4BC",shortnames:["briefcase"]},{unified:"1F4C1",shortnames:["file_folder"]},{unified:"1F4C2",shortnames:["open_file_folder"]},{unified:"1F5C2-FE0F",shortnames:["card_index_dividers"]},{unified:"1F4C5",shortnames:["date"]},{unified:"1F4C6",shortnames:["calendar"]},{unified:"1F5D2-FE0F",shortnames:["spiral_note_pad"]},{unified:"1F5D3-FE0F",shortnames:["spiral_calendar_pad"]},{unified:"1F4C7",shortnames:["card_index"]},{unified:"1F4C8",shortnames:["chart_with_upwards_trend"]},{unified:"1F4C9",shortnames:["chart_with_downwards_trend"]},{unified:"1F4CA",shortnames:["bar_chart"]},{unified:"1F4CB",shortnames:["clipboard"]},{unified:"1F4CC",shortnames:["pushpin"]},{unified:"1F4CD",shortnames:["round_pushpin"]},{unified:"1F4CE",shortnames:["paperclip"]},{unified:"1F587-FE0F",shortnames:["linked_paperclips"]},{unified:"1F4CF",shortnames:["straight_ruler"]},{unified:"1F4D0",shortnames:["triangular_ruler"]},{unified:"2702-FE0F",shortnames:["scissors"]},{unified:"1F5C3-FE0F",shortnames:["card_file_box"]},{unified:"1F5C4-FE0F",shortnames:["file_cabinet"]},{unified:"1F5D1-FE0F",shortnames:["wastebasket"]},{unified:"1F512",shortnames:["lock"]},{unified:"1F513",shortnames:["unlock"]},{unified:"1F50F",shortnames:["lock_with_ink_pen"]},{unified:"1F510",shortnames:["closed_lock_with_key"]},{unified:"1F511",shortnames:["key"]},{unified:"1F5DD-FE0F",shortnames:["old_key"]},{unified:"1F528",shortnames:["hammer"]},{unified:"1FA93",shortnames:["axe"]},{unified:"26CF-FE0F",shortnames:["pick"]},{unified:"2692-FE0F",shortnames:["hammer_and_pick"]},{unified:"1F6E0-FE0F",shortnames:["hammer_and_wrench"]},{unified:"1F5E1-FE0F",shortnames:["dagger_knife"]},{unified:"2694-FE0F",shortnames:["crossed_swords"]},{unified:"1F52B",shortnames:["gun"]},{unified:"1FA83",shortnames:["boomerang"]},{unified:"1F3F9",shortnames:["bow_and_arrow"]},{unified:"1F6E1-FE0F",shortnames:["shield"]},{unified:"1FA9A",shortnames:["carpentry_saw"]},{unified:"1F527",shortnames:["wrench"]},{unified:"1FA9B",shortnames:["screwdriver"]},{unified:"1F529",shortnames:["nut_and_bolt"]},{unified:"2699-FE0F",shortnames:["gear"]},{unified:"1F5DC-FE0F",shortnames:["compression"]},{unified:"2696-FE0F",shortnames:["scales"]},{unified:"1F9AF",shortnames:["probing_cane"]},{unified:"1F517",shortnames:["link"]},{unified:"26D3-FE0F",shortnames:["chains"]},{unified:"1FA9D",shortnames:["hook"]},{unified:"1F9F0",shortnames:["toolbox"]},{unified:"1F9F2",shortnames:["magnet"]},{unified:"1FA9C",shortnames:["ladder"]},{unified:"2697-FE0F",shortnames:["alembic"]},{unified:"1F9EA",shortnames:["test_tube"]},{unified:"1F9EB",shortnames:["petri_dish"]},{unified:"1F9EC",shortnames:["dna"]},{unified:"1F52C",shortnames:["microscope"]},{unified:"1F52D",shortnames:["telescope"]},{unified:"1F4E1",shortnames:["satellite_antenna"]},{unified:"1F489",shortnames:["syringe"]},{unified:"1FA78",shortnames:["drop_of_blood"]},{unified:"1F48A",shortnames:["pill"]},{unified:"1FA79",shortnames:["adhesive_bandage"]},{unified:"1FA7C",shortnames:["crutch"]},{unified:"1FA7A",shortnames:["stethoscope"]},{unified:"1FA7B",shortnames:["x-ray"]},{unified:"1F6AA",shortnames:["door"]},{unified:"1F6D7",shortnames:["elevator"]},{unified:"1FA9E",shortnames:["mirror"]},{unified:"1FA9F",shortnames:["window"]},{unified:"1F6CF-FE0F",shortnames:["bed"]},{unified:"1F6CB-FE0F",shortnames:["couch_and_lamp"]},{unified:"1FA91",shortnames:["chair"]},{unified:"1F6BD",shortnames:["toilet"]},{unified:"1FAA0",shortnames:["plunger"]},{unified:"1F6BF",shortnames:["shower"]},{unified:"1F6C1",shortnames:["bathtub"]},{unified:"1FAA4",shortnames:["mouse_trap"]},{unified:"1FA92",shortnames:["razor"]},{unified:"1F9F4",shortnames:["lotion_bottle"]},{unified:"1F9F7",shortnames:["safety_pin"]},{unified:"1F9F9",shortnames:["broom"]},{unified:"1F9FA",shortnames:["basket"]},{unified:"1F9FB",shortnames:["roll_of_paper"]},{unified:"1FAA3",shortnames:["bucket"]},{unified:"1F9FC",shortnames:["soap"]},{unified:"1FAE7",shortnames:["bubbles"]},{unified:"1FAA5",shortnames:["toothbrush"]},{unified:"1F9FD",shortnames:["sponge"]},{unified:"1F9EF",shortnames:["fire_extinguisher"]},{unified:"1F6D2",shortnames:["shopping_trolley"]},{unified:"1F6AC",shortnames:["smoking"]},{unified:"26B0-FE0F",shortnames:["coffin"]},{unified:"1FAA6",shortnames:["headstone"]},{unified:"26B1-FE0F",shortnames:["funeral_urn"]},{unified:"1F5FF",shortnames:["moyai"]},{unified:"1FAA7",shortnames:["placard"]},{unified:"1FAAA",shortnames:["identification_card"]}]},{name:"Symbols",emojis:[{unified:"1F3E7",shortnames:["atm"]},{unified:"1F6AE",shortnames:["put_litter_in_its_place"]},{unified:"1F6B0",shortnames:["potable_water"]},{unified:"267F",shortnames:["wheelchair"]},{unified:"1F6B9",shortnames:["mens"]},{unified:"1F6BA",shortnames:["womens"]},{unified:"1F6BB",shortnames:["restroom"]},{unified:"1F6BC",shortnames:["baby_symbol"]},{unified:"1F6BE",shortnames:["wc"]},{unified:"1F6C2",shortnames:["passport_control"]},{unified:"1F6C3",shortnames:["customs"]},{unified:"1F6C4",shortnames:["baggage_claim"]},{unified:"1F6C5",shortnames:["left_luggage"]},{unified:"26A0-FE0F",shortnames:["warning"]},{unified:"1F6B8",shortnames:["children_crossing"]},{unified:"26D4",shortnames:["no_entry"]},{unified:"1F6AB",shortnames:["no_entry_sign"]},{unified:"1F6B3",shortnames:["no_bicycles"]},{unified:"1F6AD",shortnames:["no_smoking"]},{unified:"1F6AF",shortnames:["do_not_litter"]},{unified:"1F6B1",shortnames:["non-potable_water"]},{unified:"1F6B7",shortnames:["no_pedestrians"]},{unified:"1F4F5",shortnames:["no_mobile_phones"]},{unified:"1F51E",shortnames:["underage"]},{unified:"2622-FE0F",shortnames:["radioactive_sign"]},{unified:"2623-FE0F",shortnames:["biohazard_sign"]},{unified:"2B06-FE0F",shortnames:["arrow_up"]},{unified:"2197-FE0F",shortnames:["arrow_upper_right"]},{unified:"27A1-FE0F",shortnames:["arrow_right"]},{unified:"2198-FE0F",shortnames:["arrow_lower_right"]},{unified:"2B07-FE0F",shortnames:["arrow_down"]},{unified:"2199-FE0F",shortnames:["arrow_lower_left"]},{unified:"2B05-FE0F",shortnames:["arrow_left"]},{unified:"2196-FE0F",shortnames:["arrow_upper_left"]},{unified:"2195-FE0F",shortnames:["arrow_up_down"]},{unified:"2194-FE0F",shortnames:["left_right_arrow"]},{unified:"21A9-FE0F",shortnames:["leftwards_arrow_with_hook"]},{unified:"21AA-FE0F",shortnames:["arrow_right_hook"]},{unified:"2934-FE0F",shortnames:["arrow_heading_up"]},{unified:"2935-FE0F",shortnames:["arrow_heading_down"]},{unified:"1F503",shortnames:["arrows_clockwise"]},{unified:"1F504",shortnames:["arrows_counterclockwise"]},{unified:"1F519",shortnames:["back"]},{unified:"1F51A",shortnames:["end"]},{unified:"1F51B",shortnames:["on"]},{unified:"1F51C",shortnames:["soon"]},{unified:"1F51D",shortnames:["top"]},{unified:"1F6D0",shortnames:["place_of_worship"]},{unified:"269B-FE0F",shortnames:["atom_symbol"]},{unified:"1F549-FE0F",shortnames:["om_symbol"]},{unified:"2721-FE0F",shortnames:["star_of_david"]},{unified:"2638-FE0F",shortnames:["wheel_of_dharma"]},{unified:"262F-FE0F",shortnames:["yin_yang"]},{unified:"271D-FE0F",shortnames:["latin_cross"]},{unified:"2626-FE0F",shortnames:["orthodox_cross"]},{unified:"262A-FE0F",shortnames:["star_and_crescent"]},{unified:"262E-FE0F",shortnames:["peace_symbol"]},{unified:"1F54E",shortnames:["menorah_with_nine_branches"]},{unified:"1F52F",shortnames:["six_pointed_star"]},{unified:"2648",shortnames:["aries"]},{unified:"2649",shortnames:["taurus"]},{unified:"264A",shortnames:["gemini"]},{unified:"264B",shortnames:["cancer"]},{unified:"264C",shortnames:["leo"]},{unified:"264D",shortnames:["virgo"]},{unified:"264E",shortnames:["libra"]},{unified:"264F",shortnames:["scorpius"]},{unified:"2650",shortnames:["sagittarius"]},{unified:"2651",shortnames:["capricorn"]},{unified:"2652",shortnames:["aquarius"]},{unified:"2653",shortnames:["pisces"]},{unified:"26CE",shortnames:["ophiuchus"]},{unified:"1F500",shortnames:["twisted_rightwards_arrows"]},{unified:"1F501",shortnames:["repeat"]},{unified:"1F502",shortnames:["repeat_one"]},{unified:"25B6-FE0F",shortnames:["arrow_forward"]},{unified:"23E9",shortnames:["fast_forward"]},{unified:"23ED-FE0F",shortnames:["black_right_pointing_double_triangle_with_vertical_bar"]},{unified:"23EF-FE0F",shortnames:["black_right_pointing_triangle_with_double_vertical_bar"]},{unified:"25C0-FE0F",shortnames:["arrow_backward"]},{unified:"23EA",shortnames:["rewind"]},{unified:"23EE-FE0F",shortnames:["black_left_pointing_double_triangle_with_vertical_bar"]},{unified:"1F53C",shortnames:["arrow_up_small"]},{unified:"23EB",shortnames:["arrow_double_up"]},{unified:"1F53D",shortnames:["arrow_down_small"]},{unified:"23EC",shortnames:["arrow_double_down"]},{unified:"23F8-FE0F",shortnames:["double_vertical_bar"]},{unified:"23F9-FE0F",shortnames:["black_square_for_stop"]},{unified:"23FA-FE0F",shortnames:["black_circle_for_record"]},{unified:"23CF-FE0F",shortnames:["eject"]},{unified:"1F3A6",shortnames:["cinema"]},{unified:"1F505",shortnames:["low_brightness"]},{unified:"1F506",shortnames:["high_brightness"]},{unified:"1F4F6",shortnames:["signal_strength"]},{unified:"1F4F3",shortnames:["vibration_mode"]},{unified:"1F4F4",shortnames:["mobile_phone_off"]},{unified:"2640-FE0F",shortnames:["female_sign"]},{unified:"2642-FE0F",shortnames:["male_sign"]},{unified:"26A7-FE0F",shortnames:["transgender_symbol"]},{unified:"2716-FE0F",shortnames:["heavy_multiplication_x"]},{unified:"2795",shortnames:["heavy_plus_sign"]},{unified:"2796",shortnames:["heavy_minus_sign"]},{unified:"2797",shortnames:["heavy_division_sign"]},{unified:"1F7F0",shortnames:["heavy_equals_sign"]},{unified:"267E-FE0F",shortnames:["infinity"]},{unified:"203C-FE0F",shortnames:["bangbang"]},{unified:"2049-FE0F",shortnames:["interrobang"]},{unified:"2753",shortnames:["question"]},{unified:"2754",shortnames:["grey_question"]},{unified:"2755",shortnames:["grey_exclamation"]},{unified:"2757",shortnames:["exclamation"]},{unified:"3030-FE0F",shortnames:["wavy_dash"]},{unified:"1F4B1",shortnames:["currency_exchange"]},{unified:"1F4B2",shortnames:["heavy_dollar_sign"]},{unified:"2695-FE0F",shortnames:["medical_symbol"]},{unified:"267B-FE0F",shortnames:["recycle"]},{unified:"269C-FE0F",shortnames:["fleur_de_lis"]},{unified:"1F531",shortnames:["trident"]},{unified:"1F4DB",shortnames:["name_badge"]},{unified:"1F530",shortnames:["beginner"]},{unified:"2B55",shortnames:["o"]},{unified:"2705",shortnames:["white_check_mark"]},{unified:"2611-FE0F",shortnames:["ballot_box_with_check"]},{unified:"2714-FE0F",shortnames:["heavy_check_mark"]},{unified:"274C",shortnames:["x"]},{unified:"274E",shortnames:["negative_squared_cross_mark"]},{unified:"27B0",shortnames:["curly_loop"]},{unified:"27BF",shortnames:["loop"]},{unified:"303D-FE0F",shortnames:["part_alternation_mark"]},{unified:"2733-FE0F",shortnames:["eight_spoked_asterisk"]},{unified:"2734-FE0F",shortnames:["eight_pointed_black_star"]},{unified:"2747-FE0F",shortnames:["sparkle"]},{unified:"00A9-FE0F",shortnames:["copyright"]},{unified:"00AE-FE0F",shortnames:["registered"]},{unified:"2122-FE0F",shortnames:["tm"]},{unified:"0023-FE0F-20E3",shortnames:["hash"]},{unified:"002A-FE0F-20E3",shortnames:["keycap_star"]},{unified:"0030-FE0F-20E3",shortnames:["zero"]},{unified:"0031-FE0F-20E3",shortnames:["one"]},{unified:"0032-FE0F-20E3",shortnames:["two"]},{unified:"0033-FE0F-20E3",shortnames:["three"]},{unified:"0034-FE0F-20E3",shortnames:["four"]},{unified:"0035-FE0F-20E3",shortnames:["five"]},{unified:"0036-FE0F-20E3",shortnames:["six"]},{unified:"0037-FE0F-20E3",shortnames:["seven"]},{unified:"0038-FE0F-20E3",shortnames:["eight"]},{unified:"0039-FE0F-20E3",shortnames:["nine"]},{unified:"1F51F",shortnames:["keycap_ten"]},{unified:"1F520",shortnames:["capital_abcd"]},{unified:"1F521",shortnames:["abcd"]},{unified:"1F522",shortnames:["1234"]},{unified:"1F523",shortnames:["symbols"]},{unified:"1F524",shortnames:["abc"]},{unified:"1F170-FE0F",shortnames:["a"]},{unified:"1F18E",shortnames:["ab"]},{unified:"1F171-FE0F",shortnames:["b"]},{unified:"1F191",shortnames:["cl"]},{unified:"1F192",shortnames:["cool"]},{unified:"1F193",shortnames:["free"]},{unified:"2139-FE0F",shortnames:["information_source"]},{unified:"1F194",shortnames:["id"]},{unified:"24C2-FE0F",shortnames:["m"]},{unified:"1F195",shortnames:["new"]},{unified:"1F196",shortnames:["ng"]},{unified:"1F17E-FE0F",shortnames:["o2"]},{unified:"1F197",shortnames:["ok"]},{unified:"1F17F-FE0F",shortnames:["parking"]},{unified:"1F198",shortnames:["sos"]},{unified:"1F199",shortnames:["up"]},{unified:"1F19A",shortnames:["vs"]},{unified:"1F201",shortnames:["koko"]},{unified:"1F202-FE0F",shortnames:["sa"]},{unified:"1F237-FE0F",shortnames:["u6708"]},{unified:"1F236",shortnames:["u6709"]},{unified:"1F22F",shortnames:["u6307"]},{unified:"1F250",shortnames:["ideograph_advantage"]},{unified:"1F239",shortnames:["u5272"]},{unified:"1F21A",shortnames:["u7121"]},{unified:"1F232",shortnames:["u7981"]},{unified:"1F251",shortnames:["accept"]},{unified:"1F238",shortnames:["u7533"]},{unified:"1F234",shortnames:["u5408"]},{unified:"1F233",shortnames:["u7a7a"]},{unified:"3297-FE0F",shortnames:["congratulations"]},{unified:"3299-FE0F",shortnames:["secret"]},{unified:"1F23A",shortnames:["u55b6"]},{unified:"1F235",shortnames:["u6e80"]},{unified:"1F534",shortnames:["red_circle"]},{unified:"1F7E0",shortnames:["large_orange_circle"]},{unified:"1F7E1",shortnames:["large_yellow_circle"]},{unified:"1F7E2",shortnames:["large_green_circle"]},{unified:"1F535",shortnames:["large_blue_circle"]},{unified:"1F7E3",shortnames:["large_purple_circle"]},{unified:"1F7E4",shortnames:["large_brown_circle"]},{unified:"26AB",shortnames:["black_circle"]},{unified:"26AA",shortnames:["white_circle"]},{unified:"1F7E5",shortnames:["large_red_square"]},{unified:"1F7E7",shortnames:["large_orange_square"]},{unified:"1F7E8",shortnames:["large_yellow_square"]},{unified:"1F7E9",shortnames:["large_green_square"]},{unified:"1F7E6",shortnames:["large_blue_square"]},{unified:"1F7EA",shortnames:["large_purple_square"]},{unified:"1F7EB",shortnames:["large_brown_square"]},{unified:"2B1B",shortnames:["black_large_square"]},{unified:"2B1C",shortnames:["white_large_square"]},{unified:"25FC-FE0F",shortnames:["black_medium_square"]},{unified:"25FB-FE0F",shortnames:["white_medium_square"]},{unified:"25FE",shortnames:["black_medium_small_square"]},{unified:"25FD",shortnames:["white_medium_small_square"]},{unified:"25AA-FE0F",shortnames:["black_small_square"]},{unified:"25AB-FE0F",shortnames:["white_small_square"]},{unified:"1F536",shortnames:["large_orange_diamond"]},{unified:"1F537",shortnames:["large_blue_diamond"]},{unified:"1F538",shortnames:["small_orange_diamond"]},{unified:"1F539",shortnames:["small_blue_diamond"]},{unified:"1F53A",shortnames:["small_red_triangle"]},{unified:"1F53B",shortnames:["small_red_triangle_down"]},{unified:"1F4A0",shortnames:["diamond_shape_with_a_dot_inside"]},{unified:"1F518",shortnames:["radio_button"]},{unified:"1F533",shortnames:["white_square_button"]},{unified:"1F532",shortnames:["black_square_button"]}]},{name:"Flags",emojis:[{unified:"1F3C1",shortnames:["checkered_flag"]},{unified:"1F6A9",shortnames:["triangular_flag_on_post"]},{unified:"1F38C",shortnames:["crossed_flags"]},{unified:"1F3F4",shortnames:["waving_black_flag"]},{unified:"1F3F3-FE0F",shortnames:["waving_white_flag"]},{unified:"1F3F3-FE0F-200D-1F308",shortnames:["rainbow-flag"]},{unified:"1F3F3-FE0F-200D-26A7-FE0F",shortnames:["transgender_flag"]},{unified:"1F3F4-200D-2620-FE0F",shortnames:["pirate_flag"]},{unified:"1F1E6-1F1E8",shortnames:["flag-ac"]},{unified:"1F1E6-1F1E9",shortnames:["flag-ad"]},{unified:"1F1E6-1F1EA",shortnames:["flag-ae"]},{unified:"1F1E6-1F1EB",shortnames:["flag-af"]},{unified:"1F1E6-1F1EC",shortnames:["flag-ag"]},{unified:"1F1E6-1F1EE",shortnames:["flag-ai"]},{unified:"1F1E6-1F1F1",shortnames:["flag-al"]},{unified:"1F1E6-1F1F2",shortnames:["flag-am"]},{unified:"1F1E6-1F1F4",shortnames:["flag-ao"]},{unified:"1F1E6-1F1F6",shortnames:["flag-aq"]},{unified:"1F1E6-1F1F7",shortnames:["flag-ar"]},{unified:"1F1E6-1F1F8",shortnames:["flag-as"]},{unified:"1F1E6-1F1F9",shortnames:["flag-at"]},{unified:"1F1E6-1F1FA",shortnames:["flag-au"]},{unified:"1F1E6-1F1FC",shortnames:["flag-aw"]},{unified:"1F1E6-1F1FD",shortnames:["flag-ax"]},{unified:"1F1E6-1F1FF",shortnames:["flag-az"]},{unified:"1F1E7-1F1E6",shortnames:["flag-ba"]},{unified:"1F1E7-1F1E7",shortnames:["flag-bb"]},{unified:"1F1E7-1F1E9",shortnames:["flag-bd"]},{unified:"1F1E7-1F1EA",shortnames:["flag-be"]},{unified:"1F1E7-1F1EB",shortnames:["flag-bf"]},{unified:"1F1E7-1F1EC",shortnames:["flag-bg"]},{unified:"1F1E7-1F1ED",shortnames:["flag-bh"]},{unified:"1F1E7-1F1EE",shortnames:["flag-bi"]},{unified:"1F1E7-1F1EF",shortnames:["flag-bj"]},{unified:"1F1E7-1F1F1",shortnames:["flag-bl"]},{unified:"1F1E7-1F1F2",shortnames:["flag-bm"]},{unified:"1F1E7-1F1F3",shortnames:["flag-bn"]},{unified:"1F1E7-1F1F4",shortnames:["flag-bo"]},{unified:"1F1E7-1F1F6",shortnames:["flag-bq"]},{unified:"1F1E7-1F1F7",shortnames:["flag-br"]},{unified:"1F1E7-1F1F8",shortnames:["flag-bs"]},{unified:"1F1E7-1F1F9",shortnames:["flag-bt"]},{unified:"1F1E7-1F1FB",shortnames:["flag-bv"]},{unified:"1F1E7-1F1FC",shortnames:["flag-bw"]},{unified:"1F1E7-1F1FE",shortnames:["flag-by"]},{unified:"1F1E7-1F1FF",shortnames:["flag-bz"]},{unified:"1F1E8-1F1E6",shortnames:["flag-ca"]},{unified:"1F1E8-1F1E8",shortnames:["flag-cc"]},{unified:"1F1E8-1F1E9",shortnames:["flag-cd"]},{unified:"1F1E8-1F1EB",shortnames:["flag-cf"]},{unified:"1F1E8-1F1EC",shortnames:["flag-cg"]},{unified:"1F1E8-1F1ED",shortnames:["flag-ch"]},{unified:"1F1E8-1F1EE",shortnames:["flag-ci"]},{unified:"1F1E8-1F1F0",shortnames:["flag-ck"]},{unified:"1F1E8-1F1F1",shortnames:["flag-cl"]},{unified:"1F1E8-1F1F2",shortnames:["flag-cm"]},{unified:"1F1E8-1F1F3",shortnames:["cn"]},{unified:"1F1E8-1F1F4",shortnames:["flag-co"]},{unified:"1F1E8-1F1F5",shortnames:["flag-cp"]},{unified:"1F1E8-1F1F7",shortnames:["flag-cr"]},{unified:"1F1E8-1F1FA",shortnames:["flag-cu"]},{unified:"1F1E8-1F1FB",shortnames:["flag-cv"]},{unified:"1F1E8-1F1FC",shortnames:["flag-cw"]},{unified:"1F1E8-1F1FD",shortnames:["flag-cx"]},{unified:"1F1E8-1F1FE",shortnames:["flag-cy"]},{unified:"1F1E8-1F1FF",shortnames:["flag-cz"]},{unified:"1F1E9-1F1EA",shortnames:["de"]},{unified:"1F1E9-1F1EC",shortnames:["flag-dg"]},{unified:"1F1E9-1F1EF",shortnames:["flag-dj"]},{unified:"1F1E9-1F1F0",shortnames:["flag-dk"]},{unified:"1F1E9-1F1F2",shortnames:["flag-dm"]},{unified:"1F1E9-1F1F4",shortnames:["flag-do"]},{unified:"1F1E9-1F1FF",shortnames:["flag-dz"]},{unified:"1F1EA-1F1E6",shortnames:["flag-ea"]},{unified:"1F1EA-1F1E8",shortnames:["flag-ec"]},{unified:"1F1EA-1F1EA",shortnames:["flag-ee"]},{unified:"1F1EA-1F1EC",shortnames:["flag-eg"]},{unified:"1F1EA-1F1ED",shortnames:["flag-eh"]},{unified:"1F1EA-1F1F7",shortnames:["flag-er"]},{unified:"1F1EA-1F1F8",shortnames:["es"]},{unified:"1F1EA-1F1F9",shortnames:["flag-et"]},{unified:"1F1EA-1F1FA",shortnames:["flag-eu"]},{unified:"1F1EB-1F1EE",shortnames:["flag-fi"]},{unified:"1F1EB-1F1EF",shortnames:["flag-fj"]},{unified:"1F1EB-1F1F0",shortnames:["flag-fk"]},{unified:"1F1EB-1F1F2",shortnames:["flag-fm"]},{unified:"1F1EB-1F1F4",shortnames:["flag-fo"]},{unified:"1F1EB-1F1F7",shortnames:["fr"]},{unified:"1F1EC-1F1E6",shortnames:["flag-ga"]},{unified:"1F1EC-1F1E7",shortnames:["gb"]},{unified:"1F1EC-1F1E9",shortnames:["flag-gd"]},{unified:"1F1EC-1F1EA",shortnames:["flag-ge"]},{unified:"1F1EC-1F1EB",shortnames:["flag-gf"]},{unified:"1F1EC-1F1EC",shortnames:["flag-gg"]},{unified:"1F1EC-1F1ED",shortnames:["flag-gh"]},{unified:"1F1EC-1F1EE",shortnames:["flag-gi"]},{unified:"1F1EC-1F1F1",shortnames:["flag-gl"]},{unified:"1F1EC-1F1F2",shortnames:["flag-gm"]},{unified:"1F1EC-1F1F3",shortnames:["flag-gn"]},{unified:"1F1EC-1F1F5",shortnames:["flag-gp"]},{unified:"1F1EC-1F1F6",shortnames:["flag-gq"]},{unified:"1F1EC-1F1F7",shortnames:["flag-gr"]},{unified:"1F1EC-1F1F8",shortnames:["flag-gs"]},{unified:"1F1EC-1F1F9",shortnames:["flag-gt"]},{unified:"1F1EC-1F1FA",shortnames:["flag-gu"]},{unified:"1F1EC-1F1FC",shortnames:["flag-gw"]},{unified:"1F1EC-1F1FE",shortnames:["flag-gy"]},{unified:"1F1ED-1F1F0",shortnames:["flag-hk"]},{unified:"1F1ED-1F1F2",shortnames:["flag-hm"]},{unified:"1F1ED-1F1F3",shortnames:["flag-hn"]},{unified:"1F1ED-1F1F7",shortnames:["flag-hr"]},{unified:"1F1ED-1F1F9",shortnames:["flag-ht"]},{unified:"1F1ED-1F1FA",shortnames:["flag-hu"]},{unified:"1F1EE-1F1E8",shortnames:["flag-ic"]},{unified:"1F1EE-1F1E9",shortnames:["flag-id"]},{unified:"1F1EE-1F1EA",shortnames:["flag-ie"]},{unified:"1F1EE-1F1F1",shortnames:["flag-il"]},{unified:"1F1EE-1F1F2",shortnames:["flag-im"]},{unified:"1F1EE-1F1F3",shortnames:["flag-in"]},{unified:"1F1EE-1F1F4",shortnames:["flag-io"]},{unified:"1F1EE-1F1F6",shortnames:["flag-iq"]},{unified:"1F1EE-1F1F7",shortnames:["flag-ir"]},{unified:"1F1EE-1F1F8",shortnames:["flag-is"]},{unified:"1F1EE-1F1F9",shortnames:["it"]},{unified:"1F1EF-1F1EA",shortnames:["flag-je"]},{unified:"1F1EF-1F1F2",shortnames:["flag-jm"]},{unified:"1F1EF-1F1F4",shortnames:["flag-jo"]},{unified:"1F1EF-1F1F5",shortnames:["jp"]},{unified:"1F1F0-1F1EA",shortnames:["flag-ke"]},{unified:"1F1F0-1F1EC",shortnames:["flag-kg"]},{unified:"1F1F0-1F1ED",shortnames:["flag-kh"]},{unified:"1F1F0-1F1EE",shortnames:["flag-ki"]},{unified:"1F1F0-1F1F2",shortnames:["flag-km"]},{unified:"1F1F0-1F1F3",shortnames:["flag-kn"]},{unified:"1F1F0-1F1F5",shortnames:["flag-kp"]},{unified:"1F1F0-1F1F7",shortnames:["kr"]},{unified:"1F1F0-1F1FC",shortnames:["flag-kw"]},{unified:"1F1F0-1F1FE",shortnames:["flag-ky"]},{unified:"1F1F0-1F1FF",shortnames:["flag-kz"]},{unified:"1F1F1-1F1E6",shortnames:["flag-la"]},{unified:"1F1F1-1F1E7",shortnames:["flag-lb"]},{unified:"1F1F1-1F1E8",shortnames:["flag-lc"]},{unified:"1F1F1-1F1EE",shortnames:["flag-li"]},{unified:"1F1F1-1F1F0",shortnames:["flag-lk"]},{unified:"1F1F1-1F1F7",shortnames:["flag-lr"]},{unified:"1F1F1-1F1F8",shortnames:["flag-ls"]},{unified:"1F1F1-1F1F9",shortnames:["flag-lt"]},{unified:"1F1F1-1F1FA",shortnames:["flag-lu"]},{unified:"1F1F1-1F1FB",shortnames:["flag-lv"]},{unified:"1F1F1-1F1FE",shortnames:["flag-ly"]},{unified:"1F1F2-1F1E6",shortnames:["flag-ma"]},{unified:"1F1F2-1F1E8",shortnames:["flag-mc"]},{unified:"1F1F2-1F1E9",shortnames:["flag-md"]},{unified:"1F1F2-1F1EA",shortnames:["flag-me"]},{unified:"1F1F2-1F1EB",shortnames:["flag-mf"]},{unified:"1F1F2-1F1EC",shortnames:["flag-mg"]},{unified:"1F1F2-1F1ED",shortnames:["flag-mh"]},{unified:"1F1F2-1F1F0",shortnames:["flag-mk"]},{unified:"1F1F2-1F1F1",shortnames:["flag-ml"]},{unified:"1F1F2-1F1F2",shortnames:["flag-mm"]},{unified:"1F1F2-1F1F3",shortnames:["flag-mn"]},{unified:"1F1F2-1F1F4",shortnames:["flag-mo"]},{unified:"1F1F2-1F1F5",shortnames:["flag-mp"]},{unified:"1F1F2-1F1F6",shortnames:["flag-mq"]},{unified:"1F1F2-1F1F7",shortnames:["flag-mr"]},{unified:"1F1F2-1F1F8",shortnames:["flag-ms"]},{unified:"1F1F2-1F1F9",shortnames:["flag-mt"]},{unified:"1F1F2-1F1FA",shortnames:["flag-mu"]},{unified:"1F1F2-1F1FB",shortnames:["flag-mv"]},{unified:"1F1F2-1F1FC",shortnames:["flag-mw"]},{unified:"1F1F2-1F1FD",shortnames:["flag-mx"]},{unified:"1F1F2-1F1FE",shortnames:["flag-my"]},{unified:"1F1F2-1F1FF",shortnames:["flag-mz"]},{unified:"1F1F3-1F1E6",shortnames:["flag-na"]},{unified:"1F1F3-1F1E8",shortnames:["flag-nc"]},{unified:"1F1F3-1F1EA",shortnames:["flag-ne"]},{unified:"1F1F3-1F1EB",shortnames:["flag-nf"]},{unified:"1F1F3-1F1EC",shortnames:["flag-ng"]},{unified:"1F1F3-1F1EE",shortnames:["flag-ni"]},{unified:"1F1F3-1F1F1",shortnames:["flag-nl"]},{unified:"1F1F3-1F1F4",shortnames:["flag-no"]},{unified:"1F1F3-1F1F5",shortnames:["flag-np"]},{unified:"1F1F3-1F1F7",shortnames:["flag-nr"]},{unified:"1F1F3-1F1FA",shortnames:["flag-nu"]},{unified:"1F1F3-1F1FF",shortnames:["flag-nz"]},{unified:"1F1F4-1F1F2",shortnames:["flag-om"]},{unified:"1F1F5-1F1E6",shortnames:["flag-pa"]},{unified:"1F1F5-1F1EA",shortnames:["flag-pe"]},{unified:"1F1F5-1F1EB",shortnames:["flag-pf"]},{unified:"1F1F5-1F1EC",shortnames:["flag-pg"]},{unified:"1F1F5-1F1ED",shortnames:["flag-ph"]},{unified:"1F1F5-1F1F0",shortnames:["flag-pk"]},{unified:"1F1F5-1F1F1",shortnames:["flag-pl"]},{unified:"1F1F5-1F1F2",shortnames:["flag-pm"]},{unified:"1F1F5-1F1F3",shortnames:["flag-pn"]},{unified:"1F1F5-1F1F7",shortnames:["flag-pr"]},{unified:"1F1F5-1F1F8",shortnames:["flag-ps"]},{unified:"1F1F5-1F1F9",shortnames:["flag-pt"]},{unified:"1F1F5-1F1FC",shortnames:["flag-pw"]},{unified:"1F1F5-1F1FE",shortnames:["flag-py"]},{unified:"1F1F6-1F1E6",shortnames:["flag-qa"]},{unified:"1F1F7-1F1EA",shortnames:["flag-re"]},{unified:"1F1F7-1F1F4",shortnames:["flag-ro"]},{unified:"1F1F7-1F1F8",shortnames:["flag-rs"]},{unified:"1F1F7-1F1FA",shortnames:["ru"]},{unified:"1F1F7-1F1FC",shortnames:["flag-rw"]},{unified:"1F1F8-1F1E6",shortnames:["flag-sa"]},{unified:"1F1F8-1F1E7",shortnames:["flag-sb"]},{unified:"1F1F8-1F1E8",shortnames:["flag-sc"]},{unified:"1F1F8-1F1E9",shortnames:["flag-sd"]},{unified:"1F1F8-1F1EA",shortnames:["flag-se"]},{unified:"1F1F8-1F1EC",shortnames:["flag-sg"]},{unified:"1F1F8-1F1ED",shortnames:["flag-sh"]},{unified:"1F1F8-1F1EE",shortnames:["flag-si"]},{unified:"1F1F8-1F1EF",shortnames:["flag-sj"]},{unified:"1F1F8-1F1F0",shortnames:["flag-sk"]},{unified:"1F1F8-1F1F1",shortnames:["flag-sl"]},{unified:"1F1F8-1F1F2",shortnames:["flag-sm"]},{unified:"1F1F8-1F1F3",shortnames:["flag-sn"]},{unified:"1F1F8-1F1F4",shortnames:["flag-so"]},{unified:"1F1F8-1F1F7",shortnames:["flag-sr"]},{unified:"1F1F8-1F1F8",shortnames:["flag-ss"]},{unified:"1F1F8-1F1F9",shortnames:["flag-st"]},{unified:"1F1F8-1F1FB",shortnames:["flag-sv"]},{unified:"1F1F8-1F1FD",shortnames:["flag-sx"]},{unified:"1F1F8-1F1FE",shortnames:["flag-sy"]},{unified:"1F1F8-1F1FF",shortnames:["flag-sz"]},{unified:"1F1F9-1F1E6",shortnames:["flag-ta"]},{unified:"1F1F9-1F1E8",shortnames:["flag-tc"]},{unified:"1F1F9-1F1E9",shortnames:["flag-td"]},{unified:"1F1F9-1F1EB",shortnames:["flag-tf"]},{unified:"1F1F9-1F1EC",shortnames:["flag-tg"]},{unified:"1F1F9-1F1ED",shortnames:["flag-th"]},{unified:"1F1F9-1F1EF",shortnames:["flag-tj"]},{unified:"1F1F9-1F1F0",shortnames:["flag-tk"]},{unified:"1F1F9-1F1F1",shortnames:["flag-tl"]},{unified:"1F1F9-1F1F2",shortnames:["flag-tm"]},{unified:"1F1F9-1F1F3",shortnames:["flag-tn"]},{unified:"1F1F9-1F1F4",shortnames:["flag-to"]},{unified:"1F1F9-1F1F7",shortnames:["flag-tr"]},{unified:"1F1F9-1F1F9",shortnames:["flag-tt"]},{unified:"1F1F9-1F1FB",shortnames:["flag-tv"]},{unified:"1F1F9-1F1FC",shortnames:["flag-tw"]},{unified:"1F1F9-1F1FF",shortnames:["flag-tz"]},{unified:"1F1FA-1F1E6",shortnames:["flag-ua"]},{unified:"1F1FA-1F1EC",shortnames:["flag-ug"]},{unified:"1F1FA-1F1F2",shortnames:["flag-um"]},{unified:"1F1FA-1F1F3",shortnames:["flag-un"]},{unified:"1F1FA-1F1F8",shortnames:["us"]},{unified:"1F1FA-1F1FE",shortnames:["flag-uy"]},{unified:"1F1FA-1F1FF",shortnames:["flag-uz"]},{unified:"1F1FB-1F1E6",shortnames:["flag-va"]},{unified:"1F1FB-1F1E8",shortnames:["flag-vc"]},{unified:"1F1FB-1F1EA",shortnames:["flag-ve"]},{unified:"1F1FB-1F1EC",shortnames:["flag-vg"]},{unified:"1F1FB-1F1EE",shortnames:["flag-vi"]},{unified:"1F1FB-1F1F3",shortnames:["flag-vn"]},{unified:"1F1FB-1F1FA",shortnames:["flag-vu"]},{unified:"1F1FC-1F1EB",shortnames:["flag-wf"]},{unified:"1F1FC-1F1F8",shortnames:["flag-ws"]},{unified:"1F1FD-1F1F0",shortnames:["flag-xk"]},{unified:"1F1FE-1F1EA",shortnames:["flag-ye"]},{unified:"1F1FE-1F1F9",shortnames:["flag-yt"]},{unified:"1F1FF-1F1E6",shortnames:["flag-za"]},{unified:"1F1FF-1F1F2",shortnames:["flag-zm"]},{unified:"1F1FF-1F1FC",shortnames:["flag-zw"]},{unified:"1F3F4-E0067-E0062-E0065-E006E-E0067-E007F",shortnames:["flag-england"]},{unified:"1F3F4-E0067-E0062-E0073-E0063-E0074-E007F",shortnames:["flag-scotland"]},{unified:"1F3F4-E0067-E0062-E0077-E006C-E0073-E007F",shortnames:["flag-wales"]}]}];_exports.byShortName={hash:"0023-FE0F-20E3",keycap_star:"002A-FE0F-20E3",zero:"0030-FE0F-20E3",one:"0031-FE0F-20E3",two:"0032-FE0F-20E3",three:"0033-FE0F-20E3",four:"0034-FE0F-20E3",five:"0035-FE0F-20E3",six:"0036-FE0F-20E3",seven:"0037-FE0F-20E3",eight:"0038-FE0F-20E3",nine:"0039-FE0F-20E3",copyright:"00A9-FE0F",registered:"00AE-FE0F",mahjong:"1F004",black_joker:"1F0CF",a:"1F170-FE0F",b:"1F171-FE0F",o2:"1F17E-FE0F",parking:"1F17F-FE0F",ab:"1F18E",cl:"1F191",cool:"1F192",free:"1F193",id:"1F194",new:"1F195",ng:"1F196",ok:"1F197",sos:"1F198",up:"1F199",vs:"1F19A","flag-ac":"1F1E6-1F1E8","flag-ad":"1F1E6-1F1E9","flag-ae":"1F1E6-1F1EA","flag-af":"1F1E6-1F1EB","flag-ag":"1F1E6-1F1EC","flag-ai":"1F1E6-1F1EE","flag-al":"1F1E6-1F1F1","flag-am":"1F1E6-1F1F2","flag-ao":"1F1E6-1F1F4","flag-aq":"1F1E6-1F1F6","flag-ar":"1F1E6-1F1F7","flag-as":"1F1E6-1F1F8","flag-at":"1F1E6-1F1F9","flag-au":"1F1E6-1F1FA","flag-aw":"1F1E6-1F1FC","flag-ax":"1F1E6-1F1FD","flag-az":"1F1E6-1F1FF","flag-ba":"1F1E7-1F1E6","flag-bb":"1F1E7-1F1E7","flag-bd":"1F1E7-1F1E9","flag-be":"1F1E7-1F1EA","flag-bf":"1F1E7-1F1EB","flag-bg":"1F1E7-1F1EC","flag-bh":"1F1E7-1F1ED","flag-bi":"1F1E7-1F1EE","flag-bj":"1F1E7-1F1EF","flag-bl":"1F1E7-1F1F1","flag-bm":"1F1E7-1F1F2","flag-bn":"1F1E7-1F1F3","flag-bo":"1F1E7-1F1F4","flag-bq":"1F1E7-1F1F6","flag-br":"1F1E7-1F1F7","flag-bs":"1F1E7-1F1F8","flag-bt":"1F1E7-1F1F9","flag-bv":"1F1E7-1F1FB","flag-bw":"1F1E7-1F1FC","flag-by":"1F1E7-1F1FE","flag-bz":"1F1E7-1F1FF","flag-ca":"1F1E8-1F1E6","flag-cc":"1F1E8-1F1E8","flag-cd":"1F1E8-1F1E9","flag-cf":"1F1E8-1F1EB","flag-cg":"1F1E8-1F1EC","flag-ch":"1F1E8-1F1ED","flag-ci":"1F1E8-1F1EE","flag-ck":"1F1E8-1F1F0","flag-cl":"1F1E8-1F1F1","flag-cm":"1F1E8-1F1F2",cn:"1F1E8-1F1F3","flag-co":"1F1E8-1F1F4","flag-cp":"1F1E8-1F1F5","flag-cr":"1F1E8-1F1F7","flag-cu":"1F1E8-1F1FA","flag-cv":"1F1E8-1F1FB","flag-cw":"1F1E8-1F1FC","flag-cx":"1F1E8-1F1FD","flag-cy":"1F1E8-1F1FE","flag-cz":"1F1E8-1F1FF",de:"1F1E9-1F1EA","flag-dg":"1F1E9-1F1EC","flag-dj":"1F1E9-1F1EF","flag-dk":"1F1E9-1F1F0","flag-dm":"1F1E9-1F1F2","flag-do":"1F1E9-1F1F4","flag-dz":"1F1E9-1F1FF","flag-ea":"1F1EA-1F1E6","flag-ec":"1F1EA-1F1E8","flag-ee":"1F1EA-1F1EA","flag-eg":"1F1EA-1F1EC","flag-eh":"1F1EA-1F1ED","flag-er":"1F1EA-1F1F7",es:"1F1EA-1F1F8","flag-et":"1F1EA-1F1F9","flag-eu":"1F1EA-1F1FA","flag-fi":"1F1EB-1F1EE","flag-fj":"1F1EB-1F1EF","flag-fk":"1F1EB-1F1F0","flag-fm":"1F1EB-1F1F2","flag-fo":"1F1EB-1F1F4",fr:"1F1EB-1F1F7","flag-ga":"1F1EC-1F1E6",gb:"1F1EC-1F1E7","flag-gd":"1F1EC-1F1E9","flag-ge":"1F1EC-1F1EA","flag-gf":"1F1EC-1F1EB","flag-gg":"1F1EC-1F1EC","flag-gh":"1F1EC-1F1ED","flag-gi":"1F1EC-1F1EE","flag-gl":"1F1EC-1F1F1","flag-gm":"1F1EC-1F1F2","flag-gn":"1F1EC-1F1F3","flag-gp":"1F1EC-1F1F5","flag-gq":"1F1EC-1F1F6","flag-gr":"1F1EC-1F1F7","flag-gs":"1F1EC-1F1F8","flag-gt":"1F1EC-1F1F9","flag-gu":"1F1EC-1F1FA","flag-gw":"1F1EC-1F1FC","flag-gy":"1F1EC-1F1FE","flag-hk":"1F1ED-1F1F0","flag-hm":"1F1ED-1F1F2","flag-hn":"1F1ED-1F1F3","flag-hr":"1F1ED-1F1F7","flag-ht":"1F1ED-1F1F9","flag-hu":"1F1ED-1F1FA","flag-ic":"1F1EE-1F1E8","flag-id":"1F1EE-1F1E9","flag-ie":"1F1EE-1F1EA","flag-il":"1F1EE-1F1F1","flag-im":"1F1EE-1F1F2","flag-in":"1F1EE-1F1F3","flag-io":"1F1EE-1F1F4","flag-iq":"1F1EE-1F1F6","flag-ir":"1F1EE-1F1F7","flag-is":"1F1EE-1F1F8",it:"1F1EE-1F1F9","flag-je":"1F1EF-1F1EA","flag-jm":"1F1EF-1F1F2","flag-jo":"1F1EF-1F1F4",jp:"1F1EF-1F1F5","flag-ke":"1F1F0-1F1EA","flag-kg":"1F1F0-1F1EC","flag-kh":"1F1F0-1F1ED","flag-ki":"1F1F0-1F1EE","flag-km":"1F1F0-1F1F2","flag-kn":"1F1F0-1F1F3","flag-kp":"1F1F0-1F1F5",kr:"1F1F0-1F1F7","flag-kw":"1F1F0-1F1FC","flag-ky":"1F1F0-1F1FE","flag-kz":"1F1F0-1F1FF","flag-la":"1F1F1-1F1E6","flag-lb":"1F1F1-1F1E7","flag-lc":"1F1F1-1F1E8","flag-li":"1F1F1-1F1EE","flag-lk":"1F1F1-1F1F0","flag-lr":"1F1F1-1F1F7","flag-ls":"1F1F1-1F1F8","flag-lt":"1F1F1-1F1F9","flag-lu":"1F1F1-1F1FA","flag-lv":"1F1F1-1F1FB","flag-ly":"1F1F1-1F1FE","flag-ma":"1F1F2-1F1E6","flag-mc":"1F1F2-1F1E8","flag-md":"1F1F2-1F1E9","flag-me":"1F1F2-1F1EA","flag-mf":"1F1F2-1F1EB","flag-mg":"1F1F2-1F1EC","flag-mh":"1F1F2-1F1ED","flag-mk":"1F1F2-1F1F0","flag-ml":"1F1F2-1F1F1","flag-mm":"1F1F2-1F1F2","flag-mn":"1F1F2-1F1F3","flag-mo":"1F1F2-1F1F4","flag-mp":"1F1F2-1F1F5","flag-mq":"1F1F2-1F1F6","flag-mr":"1F1F2-1F1F7","flag-ms":"1F1F2-1F1F8","flag-mt":"1F1F2-1F1F9","flag-mu":"1F1F2-1F1FA","flag-mv":"1F1F2-1F1FB","flag-mw":"1F1F2-1F1FC","flag-mx":"1F1F2-1F1FD","flag-my":"1F1F2-1F1FE","flag-mz":"1F1F2-1F1FF","flag-na":"1F1F3-1F1E6","flag-nc":"1F1F3-1F1E8","flag-ne":"1F1F3-1F1EA","flag-nf":"1F1F3-1F1EB","flag-ng":"1F1F3-1F1EC","flag-ni":"1F1F3-1F1EE","flag-nl":"1F1F3-1F1F1","flag-no":"1F1F3-1F1F4","flag-np":"1F1F3-1F1F5","flag-nr":"1F1F3-1F1F7","flag-nu":"1F1F3-1F1FA","flag-nz":"1F1F3-1F1FF","flag-om":"1F1F4-1F1F2","flag-pa":"1F1F5-1F1E6","flag-pe":"1F1F5-1F1EA","flag-pf":"1F1F5-1F1EB","flag-pg":"1F1F5-1F1EC","flag-ph":"1F1F5-1F1ED","flag-pk":"1F1F5-1F1F0","flag-pl":"1F1F5-1F1F1","flag-pm":"1F1F5-1F1F2","flag-pn":"1F1F5-1F1F3","flag-pr":"1F1F5-1F1F7","flag-ps":"1F1F5-1F1F8","flag-pt":"1F1F5-1F1F9","flag-pw":"1F1F5-1F1FC","flag-py":"1F1F5-1F1FE","flag-qa":"1F1F6-1F1E6","flag-re":"1F1F7-1F1EA","flag-ro":"1F1F7-1F1F4","flag-rs":"1F1F7-1F1F8",ru:"1F1F7-1F1FA","flag-rw":"1F1F7-1F1FC","flag-sa":"1F1F8-1F1E6","flag-sb":"1F1F8-1F1E7","flag-sc":"1F1F8-1F1E8","flag-sd":"1F1F8-1F1E9","flag-se":"1F1F8-1F1EA","flag-sg":"1F1F8-1F1EC","flag-sh":"1F1F8-1F1ED","flag-si":"1F1F8-1F1EE","flag-sj":"1F1F8-1F1EF","flag-sk":"1F1F8-1F1F0","flag-sl":"1F1F8-1F1F1","flag-sm":"1F1F8-1F1F2","flag-sn":"1F1F8-1F1F3","flag-so":"1F1F8-1F1F4","flag-sr":"1F1F8-1F1F7","flag-ss":"1F1F8-1F1F8","flag-st":"1F1F8-1F1F9","flag-sv":"1F1F8-1F1FB","flag-sx":"1F1F8-1F1FD","flag-sy":"1F1F8-1F1FE","flag-sz":"1F1F8-1F1FF","flag-ta":"1F1F9-1F1E6","flag-tc":"1F1F9-1F1E8","flag-td":"1F1F9-1F1E9","flag-tf":"1F1F9-1F1EB","flag-tg":"1F1F9-1F1EC","flag-th":"1F1F9-1F1ED","flag-tj":"1F1F9-1F1EF","flag-tk":"1F1F9-1F1F0","flag-tl":"1F1F9-1F1F1","flag-tm":"1F1F9-1F1F2","flag-tn":"1F1F9-1F1F3","flag-to":"1F1F9-1F1F4","flag-tr":"1F1F9-1F1F7","flag-tt":"1F1F9-1F1F9","flag-tv":"1F1F9-1F1FB","flag-tw":"1F1F9-1F1FC","flag-tz":"1F1F9-1F1FF","flag-ua":"1F1FA-1F1E6","flag-ug":"1F1FA-1F1EC","flag-um":"1F1FA-1F1F2","flag-un":"1F1FA-1F1F3",us:"1F1FA-1F1F8","flag-uy":"1F1FA-1F1FE","flag-uz":"1F1FA-1F1FF","flag-va":"1F1FB-1F1E6","flag-vc":"1F1FB-1F1E8","flag-ve":"1F1FB-1F1EA","flag-vg":"1F1FB-1F1EC","flag-vi":"1F1FB-1F1EE","flag-vn":"1F1FB-1F1F3","flag-vu":"1F1FB-1F1FA","flag-wf":"1F1FC-1F1EB","flag-ws":"1F1FC-1F1F8","flag-xk":"1F1FD-1F1F0","flag-ye":"1F1FE-1F1EA","flag-yt":"1F1FE-1F1F9","flag-za":"1F1FF-1F1E6","flag-zm":"1F1FF-1F1F2","flag-zw":"1F1FF-1F1FC",koko:"1F201",sa:"1F202-FE0F",u7121:"1F21A",u6307:"1F22F",u7981:"1F232",u7a7a:"1F233",u5408:"1F234",u6e80:"1F235",u6709:"1F236",u6708:"1F237-FE0F",u7533:"1F238",u5272:"1F239",u55b6:"1F23A",ideograph_advantage:"1F250",accept:"1F251",cyclone:"1F300",foggy:"1F301",closed_umbrella:"1F302",night_with_stars:"1F303",sunrise_over_mountains:"1F304",sunrise:"1F305",city_sunset:"1F306",city_sunrise:"1F307",rainbow:"1F308",bridge_at_night:"1F309",ocean:"1F30A",volcano:"1F30B",milky_way:"1F30C",earth_africa:"1F30D",earth_americas:"1F30E",earth_asia:"1F30F",globe_with_meridians:"1F310",new_moon:"1F311",waxing_crescent_moon:"1F312",first_quarter_moon:"1F313",moon:"1F314",full_moon:"1F315",waning_gibbous_moon:"1F316",last_quarter_moon:"1F317",waning_crescent_moon:"1F318",crescent_moon:"1F319",new_moon_with_face:"1F31A",first_quarter_moon_with_face:"1F31B",last_quarter_moon_with_face:"1F31C",full_moon_with_face:"1F31D",sun_with_face:"1F31E",star2:"1F31F",stars:"1F320",thermometer:"1F321-FE0F",mostly_sunny:"1F324-FE0F",barely_sunny:"1F325-FE0F",partly_sunny_rain:"1F326-FE0F",rain_cloud:"1F327-FE0F",snow_cloud:"1F328-FE0F",lightning:"1F329-FE0F",tornado:"1F32A-FE0F",fog:"1F32B-FE0F",wind_blowing_face:"1F32C-FE0F",hotdog:"1F32D",taco:"1F32E",burrito:"1F32F",chestnut:"1F330",seedling:"1F331",evergreen_tree:"1F332",deciduous_tree:"1F333",palm_tree:"1F334",cactus:"1F335",hot_pepper:"1F336-FE0F",tulip:"1F337",cherry_blossom:"1F338",rose:"1F339",hibiscus:"1F33A",sunflower:"1F33B",blossom:"1F33C",corn:"1F33D",ear_of_rice:"1F33E",herb:"1F33F",four_leaf_clover:"1F340",maple_leaf:"1F341",fallen_leaf:"1F342",leaves:"1F343",mushroom:"1F344",tomato:"1F345",eggplant:"1F346",grapes:"1F347",melon:"1F348",watermelon:"1F349",tangerine:"1F34A",lemon:"1F34B",banana:"1F34C",pineapple:"1F34D",apple:"1F34E",green_apple:"1F34F",pear:"1F350",peach:"1F351",cherries:"1F352",strawberry:"1F353",hamburger:"1F354",pizza:"1F355",meat_on_bone:"1F356",poultry_leg:"1F357",rice_cracker:"1F358",rice_ball:"1F359",rice:"1F35A",curry:"1F35B",ramen:"1F35C",spaghetti:"1F35D",bread:"1F35E",fries:"1F35F",sweet_potato:"1F360",dango:"1F361",oden:"1F362",sushi:"1F363",fried_shrimp:"1F364",fish_cake:"1F365",icecream:"1F366",shaved_ice:"1F367",ice_cream:"1F368",doughnut:"1F369",cookie:"1F36A",chocolate_bar:"1F36B",candy:"1F36C",lollipop:"1F36D",custard:"1F36E",honey_pot:"1F36F",cake:"1F370",bento:"1F371",stew:"1F372",fried_egg:"1F373",fork_and_knife:"1F374",tea:"1F375",sake:"1F376",wine_glass:"1F377",cocktail:"1F378",tropical_drink:"1F379",beer:"1F37A",beers:"1F37B",baby_bottle:"1F37C",knife_fork_plate:"1F37D-FE0F",champagne:"1F37E",popcorn:"1F37F",ribbon:"1F380",gift:"1F381",birthday:"1F382",jack_o_lantern:"1F383",christmas_tree:"1F384",santa:"1F385",fireworks:"1F386",sparkler:"1F387",balloon:"1F388",tada:"1F389",confetti_ball:"1F38A",tanabata_tree:"1F38B",crossed_flags:"1F38C",bamboo:"1F38D",dolls:"1F38E",flags:"1F38F",wind_chime:"1F390",rice_scene:"1F391",school_satchel:"1F392",mortar_board:"1F393",medal:"1F396-FE0F",reminder_ribbon:"1F397-FE0F",studio_microphone:"1F399-FE0F",level_slider:"1F39A-FE0F",control_knobs:"1F39B-FE0F",film_frames:"1F39E-FE0F",admission_tickets:"1F39F-FE0F",carousel_horse:"1F3A0",ferris_wheel:"1F3A1",roller_coaster:"1F3A2",fishing_pole_and_fish:"1F3A3",microphone:"1F3A4",movie_camera:"1F3A5",cinema:"1F3A6",headphones:"1F3A7",art:"1F3A8",tophat:"1F3A9",circus_tent:"1F3AA",ticket:"1F3AB",clapper:"1F3AC",performing_arts:"1F3AD",video_game:"1F3AE",dart:"1F3AF",slot_machine:"1F3B0","8ball":"1F3B1",game_die:"1F3B2",bowling:"1F3B3",flower_playing_cards:"1F3B4",musical_note:"1F3B5",notes:"1F3B6",saxophone:"1F3B7",guitar:"1F3B8",musical_keyboard:"1F3B9",trumpet:"1F3BA",violin:"1F3BB",musical_score:"1F3BC",running_shirt_with_sash:"1F3BD",tennis:"1F3BE",ski:"1F3BF",basketball:"1F3C0",checkered_flag:"1F3C1",snowboarder:"1F3C2","woman-running":"1F3C3-200D-2640-FE0F","man-running":"1F3C3-200D-2642-FE0F",runner:"1F3C3-200D-2642-FE0F","woman-surfing":"1F3C4-200D-2640-FE0F","man-surfing":"1F3C4-200D-2642-FE0F",surfer:"1F3C4-200D-2642-FE0F",sports_medal:"1F3C5",trophy:"1F3C6",horse_racing:"1F3C7",football:"1F3C8",rugby_football:"1F3C9","woman-swimming":"1F3CA-200D-2640-FE0F","man-swimming":"1F3CA-200D-2642-FE0F",swimmer:"1F3CA-200D-2642-FE0F","woman-lifting-weights":"1F3CB-FE0F-200D-2640-FE0F","man-lifting-weights":"1F3CB-FE0F-200D-2642-FE0F",weight_lifter:"1F3CB-FE0F-200D-2642-FE0F","woman-golfing":"1F3CC-FE0F-200D-2640-FE0F","man-golfing":"1F3CC-FE0F-200D-2642-FE0F",golfer:"1F3CC-FE0F-200D-2642-FE0F",racing_motorcycle:"1F3CD-FE0F",racing_car:"1F3CE-FE0F",cricket_bat_and_ball:"1F3CF",volleyball:"1F3D0",field_hockey_stick_and_ball:"1F3D1",ice_hockey_stick_and_puck:"1F3D2",table_tennis_paddle_and_ball:"1F3D3",snow_capped_mountain:"1F3D4-FE0F",camping:"1F3D5-FE0F",beach_with_umbrella:"1F3D6-FE0F",building_construction:"1F3D7-FE0F",house_buildings:"1F3D8-FE0F",cityscape:"1F3D9-FE0F",derelict_house_building:"1F3DA-FE0F",classical_building:"1F3DB-FE0F",desert:"1F3DC-FE0F",desert_island:"1F3DD-FE0F",national_park:"1F3DE-FE0F",stadium:"1F3DF-FE0F",house:"1F3E0",house_with_garden:"1F3E1",office:"1F3E2",post_office:"1F3E3",european_post_office:"1F3E4",hospital:"1F3E5",bank:"1F3E6",atm:"1F3E7",hotel:"1F3E8",love_hotel:"1F3E9",convenience_store:"1F3EA",school:"1F3EB",department_store:"1F3EC",factory:"1F3ED",izakaya_lantern:"1F3EE",japanese_castle:"1F3EF",european_castle:"1F3F0","rainbow-flag":"1F3F3-FE0F-200D-1F308",transgender_flag:"1F3F3-FE0F-200D-26A7-FE0F",waving_white_flag:"1F3F3-FE0F",pirate_flag:"1F3F4-200D-2620-FE0F","flag-england":"1F3F4-E0067-E0062-E0065-E006E-E0067-E007F","flag-scotland":"1F3F4-E0067-E0062-E0073-E0063-E0074-E007F","flag-wales":"1F3F4-E0067-E0062-E0077-E006C-E0073-E007F",waving_black_flag:"1F3F4",rosette:"1F3F5-FE0F",label:"1F3F7-FE0F",badminton_racquet_and_shuttlecock:"1F3F8",bow_and_arrow:"1F3F9",amphora:"1F3FA","skin-tone-2":"1F3FB","skin-tone-3":"1F3FC","skin-tone-4":"1F3FD","skin-tone-5":"1F3FE","skin-tone-6":"1F3FF",rat:"1F400",mouse2:"1F401",ox:"1F402",water_buffalo:"1F403",cow2:"1F404",tiger2:"1F405",leopard:"1F406",rabbit2:"1F407",black_cat:"1F408-200D-2B1B",cat2:"1F408",dragon:"1F409",crocodile:"1F40A",whale2:"1F40B",snail:"1F40C",snake:"1F40D",racehorse:"1F40E",ram:"1F40F",goat:"1F410",sheep:"1F411",monkey:"1F412",rooster:"1F413",chicken:"1F414",service_dog:"1F415-200D-1F9BA",dog2:"1F415",pig2:"1F416",boar:"1F417",elephant:"1F418",octopus:"1F419",shell:"1F41A",bug:"1F41B",ant:"1F41C",bee:"1F41D",ladybug:"1F41E",fish:"1F41F",tropical_fish:"1F420",blowfish:"1F421",turtle:"1F422",hatching_chick:"1F423",baby_chick:"1F424",hatched_chick:"1F425",bird:"1F426",penguin:"1F427",koala:"1F428",poodle:"1F429",dromedary_camel:"1F42A",camel:"1F42B",dolphin:"1F42C",mouse:"1F42D",cow:"1F42E",tiger:"1F42F",rabbit:"1F430",cat:"1F431",dragon_face:"1F432",whale:"1F433",horse:"1F434",monkey_face:"1F435",dog:"1F436",pig:"1F437",frog:"1F438",hamster:"1F439",wolf:"1F43A",polar_bear:"1F43B-200D-2744-FE0F",bear:"1F43B",panda_face:"1F43C",pig_nose:"1F43D",feet:"1F43E",chipmunk:"1F43F-FE0F",eyes:"1F440","eye-in-speech-bubble":"1F441-FE0F-200D-1F5E8-FE0F",eye:"1F441-FE0F",ear:"1F442",nose:"1F443",lips:"1F444",tongue:"1F445",point_up_2:"1F446",point_down:"1F447",point_left:"1F448",point_right:"1F449",facepunch:"1F44A",wave:"1F44B",ok_hand:"1F44C","+1":"1F44D","-1":"1F44E",clap:"1F44F",open_hands:"1F450",crown:"1F451",womans_hat:"1F452",eyeglasses:"1F453",necktie:"1F454",shirt:"1F455",jeans:"1F456",dress:"1F457",kimono:"1F458",bikini:"1F459",womans_clothes:"1F45A",purse:"1F45B",handbag:"1F45C",pouch:"1F45D",mans_shoe:"1F45E",athletic_shoe:"1F45F",high_heel:"1F460",sandal:"1F461",boot:"1F462",footprints:"1F463",bust_in_silhouette:"1F464",busts_in_silhouette:"1F465",boy:"1F466",girl:"1F467","male-farmer":"1F468-200D-1F33E","male-cook":"1F468-200D-1F373",man_feeding_baby:"1F468-200D-1F37C","male-student":"1F468-200D-1F393","male-singer":"1F468-200D-1F3A4","male-artist":"1F468-200D-1F3A8","male-teacher":"1F468-200D-1F3EB","male-factory-worker":"1F468-200D-1F3ED","man-boy-boy":"1F468-200D-1F466-200D-1F466","man-boy":"1F468-200D-1F466","man-girl-boy":"1F468-200D-1F467-200D-1F466","man-girl-girl":"1F468-200D-1F467-200D-1F467","man-girl":"1F468-200D-1F467","man-man-boy":"1F468-200D-1F468-200D-1F466","man-man-boy-boy":"1F468-200D-1F468-200D-1F466-200D-1F466","man-man-girl":"1F468-200D-1F468-200D-1F467","man-man-girl-boy":"1F468-200D-1F468-200D-1F467-200D-1F466","man-man-girl-girl":"1F468-200D-1F468-200D-1F467-200D-1F467","man-woman-boy":"1F468-200D-1F469-200D-1F466","man-woman-boy-boy":"1F468-200D-1F469-200D-1F466-200D-1F466","man-woman-girl":"1F468-200D-1F469-200D-1F467","man-woman-girl-boy":"1F468-200D-1F469-200D-1F467-200D-1F466","man-woman-girl-girl":"1F468-200D-1F469-200D-1F467-200D-1F467","male-technologist":"1F468-200D-1F4BB","male-office-worker":"1F468-200D-1F4BC","male-mechanic":"1F468-200D-1F527","male-scientist":"1F468-200D-1F52C","male-astronaut":"1F468-200D-1F680","male-firefighter":"1F468-200D-1F692",man_with_probing_cane:"1F468-200D-1F9AF",red_haired_man:"1F468-200D-1F9B0",curly_haired_man:"1F468-200D-1F9B1",bald_man:"1F468-200D-1F9B2",white_haired_man:"1F468-200D-1F9B3",man_in_motorized_wheelchair:"1F468-200D-1F9BC",man_in_manual_wheelchair:"1F468-200D-1F9BD","male-doctor":"1F468-200D-2695-FE0F","male-judge":"1F468-200D-2696-FE0F","male-pilot":"1F468-200D-2708-FE0F","man-heart-man":"1F468-200D-2764-FE0F-200D-1F468","man-kiss-man":"1F468-200D-2764-FE0F-200D-1F48B-200D-1F468",man:"1F468","female-farmer":"1F469-200D-1F33E","female-cook":"1F469-200D-1F373",woman_feeding_baby:"1F469-200D-1F37C","female-student":"1F469-200D-1F393","female-singer":"1F469-200D-1F3A4","female-artist":"1F469-200D-1F3A8","female-teacher":"1F469-200D-1F3EB","female-factory-worker":"1F469-200D-1F3ED","woman-boy-boy":"1F469-200D-1F466-200D-1F466","woman-boy":"1F469-200D-1F466","woman-girl-boy":"1F469-200D-1F467-200D-1F466","woman-girl-girl":"1F469-200D-1F467-200D-1F467","woman-girl":"1F469-200D-1F467","woman-woman-boy":"1F469-200D-1F469-200D-1F466","woman-woman-boy-boy":"1F469-200D-1F469-200D-1F466-200D-1F466","woman-woman-girl":"1F469-200D-1F469-200D-1F467","woman-woman-girl-boy":"1F469-200D-1F469-200D-1F467-200D-1F466","woman-woman-girl-girl":"1F469-200D-1F469-200D-1F467-200D-1F467","female-technologist":"1F469-200D-1F4BB","female-office-worker":"1F469-200D-1F4BC","female-mechanic":"1F469-200D-1F527","female-scientist":"1F469-200D-1F52C","female-astronaut":"1F469-200D-1F680","female-firefighter":"1F469-200D-1F692",woman_with_probing_cane:"1F469-200D-1F9AF",red_haired_woman:"1F469-200D-1F9B0",curly_haired_woman:"1F469-200D-1F9B1",bald_woman:"1F469-200D-1F9B2",white_haired_woman:"1F469-200D-1F9B3",woman_in_motorized_wheelchair:"1F469-200D-1F9BC",woman_in_manual_wheelchair:"1F469-200D-1F9BD","female-doctor":"1F469-200D-2695-FE0F","female-judge":"1F469-200D-2696-FE0F","female-pilot":"1F469-200D-2708-FE0F","woman-heart-man":"1F469-200D-2764-FE0F-200D-1F468","woman-heart-woman":"1F469-200D-2764-FE0F-200D-1F469","woman-kiss-man":"1F469-200D-2764-FE0F-200D-1F48B-200D-1F468","woman-kiss-woman":"1F469-200D-2764-FE0F-200D-1F48B-200D-1F469",woman:"1F469",family:"1F468-200D-1F469-200D-1F466",man_and_woman_holding_hands:"1F46B",two_men_holding_hands:"1F46C",two_women_holding_hands:"1F46D","female-police-officer":"1F46E-200D-2640-FE0F","male-police-officer":"1F46E-200D-2642-FE0F",cop:"1F46E-200D-2642-FE0F","women-with-bunny-ears-partying":"1F46F-200D-2640-FE0F","men-with-bunny-ears-partying":"1F46F-200D-2642-FE0F",dancers:"1F46F-200D-2640-FE0F",woman_with_veil:"1F470-200D-2640-FE0F",man_with_veil:"1F470-200D-2642-FE0F",bride_with_veil:"1F470","blond-haired-woman":"1F471-200D-2640-FE0F","blond-haired-man":"1F471-200D-2642-FE0F",person_with_blond_hair:"1F471-200D-2642-FE0F",man_with_gua_pi_mao:"1F472","woman-wearing-turban":"1F473-200D-2640-FE0F","man-wearing-turban":"1F473-200D-2642-FE0F",man_with_turban:"1F473-200D-2642-FE0F",older_man:"1F474",older_woman:"1F475",baby:"1F476","female-construction-worker":"1F477-200D-2640-FE0F","male-construction-worker":"1F477-200D-2642-FE0F",construction_worker:"1F477-200D-2642-FE0F",princess:"1F478",japanese_ogre:"1F479",japanese_goblin:"1F47A",ghost:"1F47B",angel:"1F47C",alien:"1F47D",space_invader:"1F47E",imp:"1F47F",skull:"1F480","woman-tipping-hand":"1F481-200D-2640-FE0F","man-tipping-hand":"1F481-200D-2642-FE0F",information_desk_person:"1F481-200D-2640-FE0F","female-guard":"1F482-200D-2640-FE0F","male-guard":"1F482-200D-2642-FE0F",guardsman:"1F482-200D-2642-FE0F",dancer:"1F483",lipstick:"1F484",nail_care:"1F485","woman-getting-massage":"1F486-200D-2640-FE0F","man-getting-massage":"1F486-200D-2642-FE0F",massage:"1F486-200D-2640-FE0F","woman-getting-haircut":"1F487-200D-2640-FE0F","man-getting-haircut":"1F487-200D-2642-FE0F",haircut:"1F487-200D-2640-FE0F",barber:"1F488",syringe:"1F489",pill:"1F48A",kiss:"1F48B",love_letter:"1F48C",ring:"1F48D",gem:"1F48E",couplekiss:"1F48F",bouquet:"1F490",couple_with_heart:"1F491",wedding:"1F492",heartbeat:"1F493",broken_heart:"1F494",two_hearts:"1F495",sparkling_heart:"1F496",heartpulse:"1F497",cupid:"1F498",blue_heart:"1F499",green_heart:"1F49A",yellow_heart:"1F49B",purple_heart:"1F49C",gift_heart:"1F49D",revolving_hearts:"1F49E",heart_decoration:"1F49F",diamond_shape_with_a_dot_inside:"1F4A0",bulb:"1F4A1",anger:"1F4A2",bomb:"1F4A3",zzz:"1F4A4",boom:"1F4A5",sweat_drops:"1F4A6",droplet:"1F4A7",dash:"1F4A8",hankey:"1F4A9",muscle:"1F4AA",dizzy:"1F4AB",speech_balloon:"1F4AC",thought_balloon:"1F4AD",white_flower:"1F4AE",100:"1F4AF",moneybag:"1F4B0",currency_exchange:"1F4B1",heavy_dollar_sign:"1F4B2",credit_card:"1F4B3",yen:"1F4B4",dollar:"1F4B5",euro:"1F4B6",pound:"1F4B7",money_with_wings:"1F4B8",chart:"1F4B9",seat:"1F4BA",computer:"1F4BB",briefcase:"1F4BC",minidisc:"1F4BD",floppy_disk:"1F4BE",cd:"1F4BF",dvd:"1F4C0",file_folder:"1F4C1",open_file_folder:"1F4C2",page_with_curl:"1F4C3",page_facing_up:"1F4C4",date:"1F4C5",calendar:"1F4C6",card_index:"1F4C7",chart_with_upwards_trend:"1F4C8",chart_with_downwards_trend:"1F4C9",bar_chart:"1F4CA",clipboard:"1F4CB",pushpin:"1F4CC",round_pushpin:"1F4CD",paperclip:"1F4CE",straight_ruler:"1F4CF",triangular_ruler:"1F4D0",bookmark_tabs:"1F4D1",ledger:"1F4D2",notebook:"1F4D3",notebook_with_decorative_cover:"1F4D4",closed_book:"1F4D5",book:"1F4D6",green_book:"1F4D7",blue_book:"1F4D8",orange_book:"1F4D9",books:"1F4DA",name_badge:"1F4DB",scroll:"1F4DC",memo:"1F4DD",telephone_receiver:"1F4DE",pager:"1F4DF",fax:"1F4E0",satellite_antenna:"1F4E1",loudspeaker:"1F4E2",mega:"1F4E3",outbox_tray:"1F4E4",inbox_tray:"1F4E5",package:"1F4E6","e-mail":"1F4E7",incoming_envelope:"1F4E8",envelope_with_arrow:"1F4E9",mailbox_closed:"1F4EA",mailbox:"1F4EB",mailbox_with_mail:"1F4EC",mailbox_with_no_mail:"1F4ED",postbox:"1F4EE",postal_horn:"1F4EF",newspaper:"1F4F0",iphone:"1F4F1",calling:"1F4F2",vibration_mode:"1F4F3",mobile_phone_off:"1F4F4",no_mobile_phones:"1F4F5",signal_strength:"1F4F6",camera:"1F4F7",camera_with_flash:"1F4F8",video_camera:"1F4F9",tv:"1F4FA",radio:"1F4FB",vhs:"1F4FC",film_projector:"1F4FD-FE0F",prayer_beads:"1F4FF",twisted_rightwards_arrows:"1F500",repeat:"1F501",repeat_one:"1F502",arrows_clockwise:"1F503",arrows_counterclockwise:"1F504",low_brightness:"1F505",high_brightness:"1F506",mute:"1F507",speaker:"1F508",sound:"1F509",loud_sound:"1F50A",battery:"1F50B",electric_plug:"1F50C",mag:"1F50D",mag_right:"1F50E",lock_with_ink_pen:"1F50F",closed_lock_with_key:"1F510",key:"1F511",lock:"1F512",unlock:"1F513",bell:"1F514",no_bell:"1F515",bookmark:"1F516",link:"1F517",radio_button:"1F518",back:"1F519",end:"1F51A",on:"1F51B",soon:"1F51C",top:"1F51D",underage:"1F51E",keycap_ten:"1F51F",capital_abcd:"1F520",abcd:"1F521",1234:"1F522",symbols:"1F523",abc:"1F524",fire:"1F525",flashlight:"1F526",wrench:"1F527",hammer:"1F528",nut_and_bolt:"1F529",hocho:"1F52A",gun:"1F52B",microscope:"1F52C",telescope:"1F52D",crystal_ball:"1F52E",six_pointed_star:"1F52F",beginner:"1F530",trident:"1F531",black_square_button:"1F532",white_square_button:"1F533",red_circle:"1F534",large_blue_circle:"1F535",large_orange_diamond:"1F536",large_blue_diamond:"1F537",small_orange_diamond:"1F538",small_blue_diamond:"1F539",small_red_triangle:"1F53A",small_red_triangle_down:"1F53B",arrow_up_small:"1F53C",arrow_down_small:"1F53D",om_symbol:"1F549-FE0F",dove_of_peace:"1F54A-FE0F",kaaba:"1F54B",mosque:"1F54C",synagogue:"1F54D",menorah_with_nine_branches:"1F54E",clock1:"1F550",clock2:"1F551",clock3:"1F552",clock4:"1F553",clock5:"1F554",clock6:"1F555",clock7:"1F556",clock8:"1F557",clock9:"1F558",clock10:"1F559",clock11:"1F55A",clock12:"1F55B",clock130:"1F55C",clock230:"1F55D",clock330:"1F55E",clock430:"1F55F",clock530:"1F560",clock630:"1F561",clock730:"1F562",clock830:"1F563",clock930:"1F564",clock1030:"1F565",clock1130:"1F566",clock1230:"1F567",candle:"1F56F-FE0F",mantelpiece_clock:"1F570-FE0F",hole:"1F573-FE0F",man_in_business_suit_levitating:"1F574-FE0F","female-detective":"1F575-FE0F-200D-2640-FE0F","male-detective":"1F575-FE0F-200D-2642-FE0F",sleuth_or_spy:"1F575-FE0F-200D-2642-FE0F",dark_sunglasses:"1F576-FE0F",spider:"1F577-FE0F",spider_web:"1F578-FE0F",joystick:"1F579-FE0F",man_dancing:"1F57A",linked_paperclips:"1F587-FE0F",lower_left_ballpoint_pen:"1F58A-FE0F",lower_left_fountain_pen:"1F58B-FE0F",lower_left_paintbrush:"1F58C-FE0F",lower_left_crayon:"1F58D-FE0F",raised_hand_with_fingers_splayed:"1F590-FE0F",middle_finger:"1F595","spock-hand":"1F596",black_heart:"1F5A4",desktop_computer:"1F5A5-FE0F",printer:"1F5A8-FE0F",three_button_mouse:"1F5B1-FE0F",trackball:"1F5B2-FE0F",frame_with_picture:"1F5BC-FE0F",card_index_dividers:"1F5C2-FE0F",card_file_box:"1F5C3-FE0F",file_cabinet:"1F5C4-FE0F",wastebasket:"1F5D1-FE0F",spiral_note_pad:"1F5D2-FE0F",spiral_calendar_pad:"1F5D3-FE0F",compression:"1F5DC-FE0F",old_key:"1F5DD-FE0F",rolled_up_newspaper:"1F5DE-FE0F",dagger_knife:"1F5E1-FE0F",speaking_head_in_silhouette:"1F5E3-FE0F",left_speech_bubble:"1F5E8-FE0F",right_anger_bubble:"1F5EF-FE0F",ballot_box_with_ballot:"1F5F3-FE0F",world_map:"1F5FA-FE0F",mount_fuji:"1F5FB",tokyo_tower:"1F5FC",statue_of_liberty:"1F5FD",japan:"1F5FE",moyai:"1F5FF",grinning:"1F600",grin:"1F601",joy:"1F602",smiley:"1F603",smile:"1F604",sweat_smile:"1F605",laughing:"1F606",innocent:"1F607",smiling_imp:"1F608",wink:"1F609",blush:"1F60A",yum:"1F60B",relieved:"1F60C",heart_eyes:"1F60D",sunglasses:"1F60E",smirk:"1F60F",neutral_face:"1F610",expressionless:"1F611",unamused:"1F612",sweat:"1F613",pensive:"1F614",confused:"1F615",confounded:"1F616",kissing:"1F617",kissing_heart:"1F618",kissing_smiling_eyes:"1F619",kissing_closed_eyes:"1F61A",stuck_out_tongue:"1F61B",stuck_out_tongue_winking_eye:"1F61C",stuck_out_tongue_closed_eyes:"1F61D",disappointed:"1F61E",worried:"1F61F",angry:"1F620",rage:"1F621",cry:"1F622",persevere:"1F623",triumph:"1F624",disappointed_relieved:"1F625",frowning:"1F626",anguished:"1F627",fearful:"1F628",weary:"1F629",sleepy:"1F62A",tired_face:"1F62B",grimacing:"1F62C",sob:"1F62D",face_exhaling:"1F62E-200D-1F4A8",open_mouth:"1F62E",hushed:"1F62F",cold_sweat:"1F630",scream:"1F631",astonished:"1F632",flushed:"1F633",sleeping:"1F634",face_with_spiral_eyes:"1F635-200D-1F4AB",dizzy_face:"1F635",face_in_clouds:"1F636-200D-1F32B-FE0F",no_mouth:"1F636",mask:"1F637",smile_cat:"1F638",joy_cat:"1F639",smiley_cat:"1F63A",heart_eyes_cat:"1F63B",smirk_cat:"1F63C",kissing_cat:"1F63D",pouting_cat:"1F63E",crying_cat_face:"1F63F",scream_cat:"1F640",slightly_frowning_face:"1F641",slightly_smiling_face:"1F642",upside_down_face:"1F643",face_with_rolling_eyes:"1F644","woman-gesturing-no":"1F645-200D-2640-FE0F","man-gesturing-no":"1F645-200D-2642-FE0F",no_good:"1F645-200D-2640-FE0F","woman-gesturing-ok":"1F646-200D-2640-FE0F","man-gesturing-ok":"1F646-200D-2642-FE0F",ok_woman:"1F646-200D-2640-FE0F","woman-bowing":"1F647-200D-2640-FE0F","man-bowing":"1F647-200D-2642-FE0F",bow:"1F647",see_no_evil:"1F648",hear_no_evil:"1F649",speak_no_evil:"1F64A","woman-raising-hand":"1F64B-200D-2640-FE0F","man-raising-hand":"1F64B-200D-2642-FE0F",raising_hand:"1F64B-200D-2640-FE0F",raised_hands:"1F64C","woman-frowning":"1F64D-200D-2640-FE0F","man-frowning":"1F64D-200D-2642-FE0F",person_frowning:"1F64D-200D-2640-FE0F","woman-pouting":"1F64E-200D-2640-FE0F","man-pouting":"1F64E-200D-2642-FE0F",person_with_pouting_face:"1F64E-200D-2640-FE0F",pray:"1F64F",rocket:"1F680",helicopter:"1F681",steam_locomotive:"1F682",railway_car:"1F683",bullettrain_side:"1F684",bullettrain_front:"1F685",train2:"1F686",metro:"1F687",light_rail:"1F688",station:"1F689",tram:"1F68A",train:"1F68B",bus:"1F68C",oncoming_bus:"1F68D",trolleybus:"1F68E",busstop:"1F68F",minibus:"1F690",ambulance:"1F691",fire_engine:"1F692",police_car:"1F693",oncoming_police_car:"1F694",taxi:"1F695",oncoming_taxi:"1F696",car:"1F697",oncoming_automobile:"1F698",blue_car:"1F699",truck:"1F69A",articulated_lorry:"1F69B",tractor:"1F69C",monorail:"1F69D",mountain_railway:"1F69E",suspension_railway:"1F69F",mountain_cableway:"1F6A0",aerial_tramway:"1F6A1",ship:"1F6A2","woman-rowing-boat":"1F6A3-200D-2640-FE0F","man-rowing-boat":"1F6A3-200D-2642-FE0F",rowboat:"1F6A3-200D-2642-FE0F",speedboat:"1F6A4",traffic_light:"1F6A5",vertical_traffic_light:"1F6A6",construction:"1F6A7",rotating_light:"1F6A8",triangular_flag_on_post:"1F6A9",door:"1F6AA",no_entry_sign:"1F6AB",smoking:"1F6AC",no_smoking:"1F6AD",put_litter_in_its_place:"1F6AE",do_not_litter:"1F6AF",potable_water:"1F6B0","non-potable_water":"1F6B1",bike:"1F6B2",no_bicycles:"1F6B3","woman-biking":"1F6B4-200D-2640-FE0F","man-biking":"1F6B4-200D-2642-FE0F",bicyclist:"1F6B4-200D-2642-FE0F","woman-mountain-biking":"1F6B5-200D-2640-FE0F","man-mountain-biking":"1F6B5-200D-2642-FE0F",mountain_bicyclist:"1F6B5-200D-2642-FE0F","woman-walking":"1F6B6-200D-2640-FE0F","man-walking":"1F6B6-200D-2642-FE0F",walking:"1F6B6-200D-2642-FE0F",no_pedestrians:"1F6B7",children_crossing:"1F6B8",mens:"1F6B9",womens:"1F6BA",restroom:"1F6BB",baby_symbol:"1F6BC",toilet:"1F6BD",wc:"1F6BE",shower:"1F6BF",bath:"1F6C0",bathtub:"1F6C1",passport_control:"1F6C2",customs:"1F6C3",baggage_claim:"1F6C4",left_luggage:"1F6C5",couch_and_lamp:"1F6CB-FE0F",sleeping_accommodation:"1F6CC",shopping_bags:"1F6CD-FE0F",bellhop_bell:"1F6CE-FE0F",bed:"1F6CF-FE0F",place_of_worship:"1F6D0",octagonal_sign:"1F6D1",shopping_trolley:"1F6D2",hindu_temple:"1F6D5",hut:"1F6D6",elevator:"1F6D7",playground_slide:"1F6DD",wheel:"1F6DE",ring_buoy:"1F6DF",hammer_and_wrench:"1F6E0-FE0F",shield:"1F6E1-FE0F",oil_drum:"1F6E2-FE0F",motorway:"1F6E3-FE0F",railway_track:"1F6E4-FE0F",motor_boat:"1F6E5-FE0F",small_airplane:"1F6E9-FE0F",airplane_departure:"1F6EB",airplane_arriving:"1F6EC",satellite:"1F6F0-FE0F",passenger_ship:"1F6F3-FE0F",scooter:"1F6F4",motor_scooter:"1F6F5",canoe:"1F6F6",sled:"1F6F7",flying_saucer:"1F6F8",skateboard:"1F6F9",auto_rickshaw:"1F6FA",pickup_truck:"1F6FB",roller_skate:"1F6FC",large_orange_circle:"1F7E0",large_yellow_circle:"1F7E1",large_green_circle:"1F7E2",large_purple_circle:"1F7E3",large_brown_circle:"1F7E4",large_red_square:"1F7E5",large_blue_square:"1F7E6",large_orange_square:"1F7E7",large_yellow_square:"1F7E8",large_green_square:"1F7E9",large_purple_square:"1F7EA",large_brown_square:"1F7EB",heavy_equals_sign:"1F7F0",pinched_fingers:"1F90C",white_heart:"1F90D",brown_heart:"1F90E",pinching_hand:"1F90F",zipper_mouth_face:"1F910",money_mouth_face:"1F911",face_with_thermometer:"1F912",nerd_face:"1F913",thinking_face:"1F914",face_with_head_bandage:"1F915",robot_face:"1F916",hugging_face:"1F917",the_horns:"1F918",call_me_hand:"1F919",raised_back_of_hand:"1F91A","left-facing_fist":"1F91B","right-facing_fist":"1F91C",handshake:"1F91D",crossed_fingers:"1F91E",i_love_you_hand_sign:"1F91F",face_with_cowboy_hat:"1F920",clown_face:"1F921",nauseated_face:"1F922",rolling_on_the_floor_laughing:"1F923",drooling_face:"1F924",lying_face:"1F925","woman-facepalming":"1F926-200D-2640-FE0F","man-facepalming":"1F926-200D-2642-FE0F",face_palm:"1F926",sneezing_face:"1F927",face_with_raised_eyebrow:"1F928","star-struck":"1F929",zany_face:"1F92A",shushing_face:"1F92B",face_with_symbols_on_mouth:"1F92C",face_with_hand_over_mouth:"1F92D",face_vomiting:"1F92E",exploding_head:"1F92F",pregnant_woman:"1F930","breast-feeding":"1F931",palms_up_together:"1F932",selfie:"1F933",prince:"1F934",woman_in_tuxedo:"1F935-200D-2640-FE0F",man_in_tuxedo:"1F935-200D-2642-FE0F",person_in_tuxedo:"1F935",mrs_claus:"1F936","woman-shrugging":"1F937-200D-2640-FE0F","man-shrugging":"1F937-200D-2642-FE0F",shrug:"1F937","woman-cartwheeling":"1F938-200D-2640-FE0F","man-cartwheeling":"1F938-200D-2642-FE0F",person_doing_cartwheel:"1F938","woman-juggling":"1F939-200D-2640-FE0F","man-juggling":"1F939-200D-2642-FE0F",juggling:"1F939",fencer:"1F93A","woman-wrestling":"1F93C-200D-2640-FE0F","man-wrestling":"1F93C-200D-2642-FE0F",wrestlers:"1F93C","woman-playing-water-polo":"1F93D-200D-2640-FE0F","man-playing-water-polo":"1F93D-200D-2642-FE0F",water_polo:"1F93D","woman-playing-handball":"1F93E-200D-2640-FE0F","man-playing-handball":"1F93E-200D-2642-FE0F",handball:"1F93E",diving_mask:"1F93F",wilted_flower:"1F940",drum_with_drumsticks:"1F941",clinking_glasses:"1F942",tumbler_glass:"1F943",spoon:"1F944",goal_net:"1F945",first_place_medal:"1F947",second_place_medal:"1F948",third_place_medal:"1F949",boxing_glove:"1F94A",martial_arts_uniform:"1F94B",curling_stone:"1F94C",lacrosse:"1F94D",softball:"1F94E",flying_disc:"1F94F",croissant:"1F950",avocado:"1F951",cucumber:"1F952",bacon:"1F953",potato:"1F954",carrot:"1F955",baguette_bread:"1F956",green_salad:"1F957",shallow_pan_of_food:"1F958",stuffed_flatbread:"1F959",egg:"1F95A",glass_of_milk:"1F95B",peanuts:"1F95C",kiwifruit:"1F95D",pancakes:"1F95E",dumpling:"1F95F",fortune_cookie:"1F960",takeout_box:"1F961",chopsticks:"1F962",bowl_with_spoon:"1F963",cup_with_straw:"1F964",coconut:"1F965",broccoli:"1F966",pie:"1F967",pretzel:"1F968",cut_of_meat:"1F969",sandwich:"1F96A",canned_food:"1F96B",leafy_green:"1F96C",mango:"1F96D",moon_cake:"1F96E",bagel:"1F96F",smiling_face_with_3_hearts:"1F970",yawning_face:"1F971",smiling_face_with_tear:"1F972",partying_face:"1F973",woozy_face:"1F974",hot_face:"1F975",cold_face:"1F976",ninja:"1F977",disguised_face:"1F978",face_holding_back_tears:"1F979",pleading_face:"1F97A",sari:"1F97B",lab_coat:"1F97C",goggles:"1F97D",hiking_boot:"1F97E",womans_flat_shoe:"1F97F",crab:"1F980",lion_face:"1F981",scorpion:"1F982",turkey:"1F983",unicorn_face:"1F984",eagle:"1F985",duck:"1F986",bat:"1F987",shark:"1F988",owl:"1F989",fox_face:"1F98A",butterfly:"1F98B",deer:"1F98C",gorilla:"1F98D",lizard:"1F98E",rhinoceros:"1F98F",shrimp:"1F990",squid:"1F991",giraffe_face:"1F992",zebra_face:"1F993",hedgehog:"1F994",sauropod:"1F995","t-rex":"1F996",cricket:"1F997",kangaroo:"1F998",llama:"1F999",peacock:"1F99A",hippopotamus:"1F99B",parrot:"1F99C",raccoon:"1F99D",lobster:"1F99E",mosquito:"1F99F",microbe:"1F9A0",badger:"1F9A1",swan:"1F9A2",mammoth:"1F9A3",dodo:"1F9A4",sloth:"1F9A5",otter:"1F9A6",orangutan:"1F9A7",skunk:"1F9A8",flamingo:"1F9A9",oyster:"1F9AA",beaver:"1F9AB",bison:"1F9AC",seal:"1F9AD",guide_dog:"1F9AE",probing_cane:"1F9AF",bone:"1F9B4",leg:"1F9B5",foot:"1F9B6",tooth:"1F9B7",female_superhero:"1F9B8-200D-2640-FE0F",male_superhero:"1F9B8-200D-2642-FE0F",superhero:"1F9B8",female_supervillain:"1F9B9-200D-2640-FE0F",male_supervillain:"1F9B9-200D-2642-FE0F",supervillain:"1F9B9",safety_vest:"1F9BA",ear_with_hearing_aid:"1F9BB",motorized_wheelchair:"1F9BC",manual_wheelchair:"1F9BD",mechanical_arm:"1F9BE",mechanical_leg:"1F9BF",cheese_wedge:"1F9C0",cupcake:"1F9C1",salt:"1F9C2",beverage_box:"1F9C3",garlic:"1F9C4",onion:"1F9C5",falafel:"1F9C6",waffle:"1F9C7",butter:"1F9C8",mate_drink:"1F9C9",ice_cube:"1F9CA",bubble_tea:"1F9CB",troll:"1F9CC",woman_standing:"1F9CD-200D-2640-FE0F",man_standing:"1F9CD-200D-2642-FE0F",standing_person:"1F9CD",woman_kneeling:"1F9CE-200D-2640-FE0F",man_kneeling:"1F9CE-200D-2642-FE0F",kneeling_person:"1F9CE",deaf_woman:"1F9CF-200D-2640-FE0F",deaf_man:"1F9CF-200D-2642-FE0F",deaf_person:"1F9CF",face_with_monocle:"1F9D0",farmer:"1F9D1-200D-1F33E",cook:"1F9D1-200D-1F373",person_feeding_baby:"1F9D1-200D-1F37C",mx_claus:"1F9D1-200D-1F384",student:"1F9D1-200D-1F393",singer:"1F9D1-200D-1F3A4",artist:"1F9D1-200D-1F3A8",teacher:"1F9D1-200D-1F3EB",factory_worker:"1F9D1-200D-1F3ED",technologist:"1F9D1-200D-1F4BB",office_worker:"1F9D1-200D-1F4BC",mechanic:"1F9D1-200D-1F527",scientist:"1F9D1-200D-1F52C",astronaut:"1F9D1-200D-1F680",firefighter:"1F9D1-200D-1F692",people_holding_hands:"1F9D1-200D-1F91D-200D-1F9D1",person_with_probing_cane:"1F9D1-200D-1F9AF",red_haired_person:"1F9D1-200D-1F9B0",curly_haired_person:"1F9D1-200D-1F9B1",bald_person:"1F9D1-200D-1F9B2",white_haired_person:"1F9D1-200D-1F9B3",person_in_motorized_wheelchair:"1F9D1-200D-1F9BC",person_in_manual_wheelchair:"1F9D1-200D-1F9BD",health_worker:"1F9D1-200D-2695-FE0F",judge:"1F9D1-200D-2696-FE0F",pilot:"1F9D1-200D-2708-FE0F",adult:"1F9D1",child:"1F9D2",older_adult:"1F9D3",woman_with_beard:"1F9D4-200D-2640-FE0F",man_with_beard:"1F9D4-200D-2642-FE0F",bearded_person:"1F9D4",person_with_headscarf:"1F9D5",woman_in_steamy_room:"1F9D6-200D-2640-FE0F",man_in_steamy_room:"1F9D6-200D-2642-FE0F",person_in_steamy_room:"1F9D6-200D-2642-FE0F",woman_climbing:"1F9D7-200D-2640-FE0F",man_climbing:"1F9D7-200D-2642-FE0F",person_climbing:"1F9D7-200D-2640-FE0F",woman_in_lotus_position:"1F9D8-200D-2640-FE0F",man_in_lotus_position:"1F9D8-200D-2642-FE0F",person_in_lotus_position:"1F9D8-200D-2640-FE0F",female_mage:"1F9D9-200D-2640-FE0F",male_mage:"1F9D9-200D-2642-FE0F",mage:"1F9D9-200D-2640-FE0F",female_fairy:"1F9DA-200D-2640-FE0F",male_fairy:"1F9DA-200D-2642-FE0F",fairy:"1F9DA-200D-2640-FE0F",female_vampire:"1F9DB-200D-2640-FE0F",male_vampire:"1F9DB-200D-2642-FE0F",vampire:"1F9DB-200D-2640-FE0F",mermaid:"1F9DC-200D-2640-FE0F",merman:"1F9DC-200D-2642-FE0F",merperson:"1F9DC-200D-2642-FE0F",female_elf:"1F9DD-200D-2640-FE0F",male_elf:"1F9DD-200D-2642-FE0F",elf:"1F9DD-200D-2642-FE0F",female_genie:"1F9DE-200D-2640-FE0F",male_genie:"1F9DE-200D-2642-FE0F",genie:"1F9DE-200D-2642-FE0F",female_zombie:"1F9DF-200D-2640-FE0F",male_zombie:"1F9DF-200D-2642-FE0F",zombie:"1F9DF-200D-2642-FE0F",brain:"1F9E0",orange_heart:"1F9E1",billed_cap:"1F9E2",scarf:"1F9E3",gloves:"1F9E4",coat:"1F9E5",socks:"1F9E6",red_envelope:"1F9E7",firecracker:"1F9E8",jigsaw:"1F9E9",test_tube:"1F9EA",petri_dish:"1F9EB",dna:"1F9EC",compass:"1F9ED",abacus:"1F9EE",fire_extinguisher:"1F9EF",toolbox:"1F9F0",bricks:"1F9F1",magnet:"1F9F2",luggage:"1F9F3",lotion_bottle:"1F9F4",thread:"1F9F5",yarn:"1F9F6",safety_pin:"1F9F7",teddy_bear:"1F9F8",broom:"1F9F9",basket:"1F9FA",roll_of_paper:"1F9FB",soap:"1F9FC",sponge:"1F9FD",receipt:"1F9FE",nazar_amulet:"1F9FF",ballet_shoes:"1FA70","one-piece_swimsuit":"1FA71",briefs:"1FA72",shorts:"1FA73",thong_sandal:"1FA74",drop_of_blood:"1FA78",adhesive_bandage:"1FA79",stethoscope:"1FA7A","x-ray":"1FA7B",crutch:"1FA7C","yo-yo":"1FA80",kite:"1FA81",parachute:"1FA82",boomerang:"1FA83",magic_wand:"1FA84",pinata:"1FA85",nesting_dolls:"1FA86",ringed_planet:"1FA90",chair:"1FA91",razor:"1FA92",axe:"1FA93",diya_lamp:"1FA94",banjo:"1FA95",military_helmet:"1FA96",accordion:"1FA97",long_drum:"1FA98",coin:"1FA99",carpentry_saw:"1FA9A",screwdriver:"1FA9B",ladder:"1FA9C",hook:"1FA9D",mirror:"1FA9E",window:"1FA9F",plunger:"1FAA0",sewing_needle:"1FAA1",knot:"1FAA2",bucket:"1FAA3",mouse_trap:"1FAA4",toothbrush:"1FAA5",headstone:"1FAA6",placard:"1FAA7",rock:"1FAA8",mirror_ball:"1FAA9",identification_card:"1FAAA",low_battery:"1FAAB",hamsa:"1FAAC",fly:"1FAB0",worm:"1FAB1",beetle:"1FAB2",cockroach:"1FAB3",potted_plant:"1FAB4",wood:"1FAB5",feather:"1FAB6",lotus:"1FAB7",coral:"1FAB8",empty_nest:"1FAB9",nest_with_eggs:"1FABA",anatomical_heart:"1FAC0",lungs:"1FAC1",people_hugging:"1FAC2",pregnant_man:"1FAC3",pregnant_person:"1FAC4",person_with_crown:"1FAC5",blueberries:"1FAD0",bell_pepper:"1FAD1",olive:"1FAD2",flatbread:"1FAD3",tamale:"1FAD4",fondue:"1FAD5",teapot:"1FAD6",pouring_liquid:"1FAD7",beans:"1FAD8",jar:"1FAD9",melting_face:"1FAE0",saluting_face:"1FAE1",face_with_open_eyes_and_hand_over_mouth:"1FAE2",face_with_peeking_eye:"1FAE3",face_with_diagonal_mouth:"1FAE4",dotted_line_face:"1FAE5",biting_lip:"1FAE6",bubbles:"1FAE7",hand_with_index_finger_and_thumb_crossed:"1FAF0",rightwards_hand:"1FAF1",leftwards_hand:"1FAF2",palm_down_hand:"1FAF3",palm_up_hand:"1FAF4",index_pointing_at_the_viewer:"1FAF5",heart_hands:"1FAF6",bangbang:"203C-FE0F",interrobang:"2049-FE0F",tm:"2122-FE0F",information_source:"2139-FE0F",left_right_arrow:"2194-FE0F",arrow_up_down:"2195-FE0F",arrow_upper_left:"2196-FE0F",arrow_upper_right:"2197-FE0F",arrow_lower_right:"2198-FE0F",arrow_lower_left:"2199-FE0F",leftwards_arrow_with_hook:"21A9-FE0F",arrow_right_hook:"21AA-FE0F",watch:"231A",hourglass:"231B",keyboard:"2328-FE0F",eject:"23CF-FE0F",fast_forward:"23E9",rewind:"23EA",arrow_double_up:"23EB",arrow_double_down:"23EC",black_right_pointing_double_triangle_with_vertical_bar:"23ED-FE0F",black_left_pointing_double_triangle_with_vertical_bar:"23EE-FE0F",black_right_pointing_triangle_with_double_vertical_bar:"23EF-FE0F",alarm_clock:"23F0",stopwatch:"23F1-FE0F",timer_clock:"23F2-FE0F",hourglass_flowing_sand:"23F3",double_vertical_bar:"23F8-FE0F",black_square_for_stop:"23F9-FE0F",black_circle_for_record:"23FA-FE0F",m:"24C2-FE0F",black_small_square:"25AA-FE0F",white_small_square:"25AB-FE0F",arrow_forward:"25B6-FE0F",arrow_backward:"25C0-FE0F",white_medium_square:"25FB-FE0F",black_medium_square:"25FC-FE0F",white_medium_small_square:"25FD",black_medium_small_square:"25FE",sunny:"2600-FE0F",cloud:"2601-FE0F",umbrella:"2602-FE0F",snowman:"2603-FE0F",comet:"2604-FE0F",phone:"260E-FE0F",ballot_box_with_check:"2611-FE0F",umbrella_with_rain_drops:"2614",coffee:"2615",shamrock:"2618-FE0F",point_up:"261D-FE0F",skull_and_crossbones:"2620-FE0F",radioactive_sign:"2622-FE0F",biohazard_sign:"2623-FE0F",orthodox_cross:"2626-FE0F",star_and_crescent:"262A-FE0F",peace_symbol:"262E-FE0F",yin_yang:"262F-FE0F",wheel_of_dharma:"2638-FE0F",white_frowning_face:"2639-FE0F",relaxed:"263A-FE0F",female_sign:"2640-FE0F",male_sign:"2642-FE0F",aries:"2648",taurus:"2649",gemini:"264A",cancer:"264B",leo:"264C",virgo:"264D",libra:"264E",scorpius:"264F",sagittarius:"2650",capricorn:"2651",aquarius:"2652",pisces:"2653",chess_pawn:"265F-FE0F",spades:"2660-FE0F",clubs:"2663-FE0F",hearts:"2665-FE0F",diamonds:"2666-FE0F",hotsprings:"2668-FE0F",recycle:"267B-FE0F",infinity:"267E-FE0F",wheelchair:"267F",hammer_and_pick:"2692-FE0F",anchor:"2693",crossed_swords:"2694-FE0F",medical_symbol:"2695-FE0F",scales:"2696-FE0F",alembic:"2697-FE0F",gear:"2699-FE0F",atom_symbol:"269B-FE0F",fleur_de_lis:"269C-FE0F",warning:"26A0-FE0F",zap:"26A1",transgender_symbol:"26A7-FE0F",white_circle:"26AA",black_circle:"26AB",coffin:"26B0-FE0F",funeral_urn:"26B1-FE0F",soccer:"26BD",baseball:"26BE",snowman_without_snow:"26C4",partly_sunny:"26C5",thunder_cloud_and_rain:"26C8-FE0F",ophiuchus:"26CE",pick:"26CF-FE0F",helmet_with_white_cross:"26D1-FE0F",chains:"26D3-FE0F",no_entry:"26D4",shinto_shrine:"26E9-FE0F",church:"26EA",mountain:"26F0-FE0F",umbrella_on_ground:"26F1-FE0F",fountain:"26F2",golf:"26F3",ferry:"26F4-FE0F",boat:"26F5",skier:"26F7-FE0F",ice_skate:"26F8-FE0F","woman-bouncing-ball":"26F9-FE0F-200D-2640-FE0F","man-bouncing-ball":"26F9-FE0F-200D-2642-FE0F",person_with_ball:"26F9-FE0F-200D-2642-FE0F",tent:"26FA",fuelpump:"26FD",scissors:"2702-FE0F",white_check_mark:"2705",airplane:"2708-FE0F",email:"2709-FE0F",fist:"270A",hand:"270B",v:"270C-FE0F",writing_hand:"270D-FE0F",pencil2:"270F-FE0F",black_nib:"2712-FE0F",heavy_check_mark:"2714-FE0F",heavy_multiplication_x:"2716-FE0F",latin_cross:"271D-FE0F",star_of_david:"2721-FE0F",sparkles:"2728",eight_spoked_asterisk:"2733-FE0F",eight_pointed_black_star:"2734-FE0F",snowflake:"2744-FE0F",sparkle:"2747-FE0F",x:"274C",negative_squared_cross_mark:"274E",question:"2753",grey_question:"2754",grey_exclamation:"2755",exclamation:"2757",heavy_heart_exclamation_mark_ornament:"2763-FE0F",heart_on_fire:"2764-FE0F-200D-1F525",mending_heart:"2764-FE0F-200D-1FA79",heart:"2764-FE0F",heavy_plus_sign:"2795",heavy_minus_sign:"2796",heavy_division_sign:"2797",arrow_right:"27A1-FE0F",curly_loop:"27B0",loop:"27BF",arrow_heading_up:"2934-FE0F",arrow_heading_down:"2935-FE0F",arrow_left:"2B05-FE0F",arrow_up:"2B06-FE0F",arrow_down:"2B07-FE0F",black_large_square:"2B1B",white_large_square:"2B1C",star:"2B50",o:"2B55",wavy_dash:"3030-FE0F",part_alternation_mark:"303D-FE0F",congratulations:"3297-FE0F",secret:"3299-FE0F"}}));
define("core/tooltip",["jquery","core/aria"],(function($,Aria){var Tooltip=function(selector){this._regionSelector=selector,$(this._regionSelector).each(function(index,element){var tooltipId=$(element).attr("aria-describedby");if(tooltipId){var tooltipele=document.getElementById(tooltipId);if(tooltipele)"tooltip"==$(tooltipele).attr("role")&amp;&amp;($(tooltipele).hide(),$(element).attr("tabindex","0")),$(element).on("focus",this._handleFocus.bind(this)),$(element).on("mouseover",this._handleMouseOver.bind(this)),$(element).on("mouseout",this._handleMouseOut.bind(this)),$(element).on("blur",this._handleBlur.bind(this)),$(element).on("keydown",this._handleKeyDown.bind(this))}}.bind(this))};return Tooltip.prototype._regionSelector=null,Tooltip.prototype._showTooltip=function(e){var triggerElement=$(e.target),tooltipId=triggerElement.attr("aria-describedby");if(tooltipId){var tooltipele=$(document.getElementById(tooltipId));if(tooltipele.show(),Aria.unhide(tooltipele),!tooltipele.is(".tooltip")){var inner=$('&lt;div class="tooltip-inner"&gt;&lt;/div&gt;');inner.append(tooltipele.contents()),tooltipele.append(inner),tooltipele.addClass("tooltip"),tooltipele.addClass("bottom"),tooltipele.append('&lt;div class="tooltip-arrow"&gt;&lt;/div&gt;')}var pos=triggerElement.offset();pos.top+=triggerElement.height()+10,$(tooltipele).offset(pos)}},Tooltip.prototype._hideTooltip=function(e){var tooltipId=$(e.target).attr("aria-describedby");if(tooltipId){var tooltipele=document.getElementById(tooltipId);$(tooltipele).hide(),Aria.hide(tooltipele)}},Tooltip.prototype._handleFocus=function(e){this._showTooltip(e)},Tooltip.prototype._handleKeyDown=function(e){27==e.which&amp;&amp;this._hideTooltip(e)},Tooltip.prototype._handleMouseOver=function(e){this._showTooltip(e)},Tooltip.prototype._handleMouseOut=function(e){$(e.target).is(":focus")||this._hideTooltip(e)},Tooltip.prototype._handleBlur=function(e){this._hideTooltip(e)},Tooltip}));
define("core/mustache",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0;var objectToString=Object.prototype.toString,isArray=Array.isArray||function(object){return"[object Array]"===objectToString.call(object)};function isFunction(object){return"function"==typeof object}function escapeRegExp(string){return string.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&amp;")}function hasProperty(obj,propName){return null!=obj&amp;&amp;"object"==typeof obj&amp;&amp;propName in obj}var regExpTest=RegExp.prototype.test;var nonSpaceRe=/\S/;function isWhitespace(string){return!function(re,string){return regExpTest.call(re,string)}(nonSpaceRe,string)}var entityMap={"&amp;":"&amp;amp;","&lt;":"&amp;lt;","&gt;":"&amp;gt;",'"':"&amp;quot;","'":"&amp;#39;","/":"&amp;#x2F;","`":"&amp;#x60;","=":"&amp;#x3D;"};var whiteRe=/\s*/,spaceRe=/\s+/,equalsRe=/\s*=/,curlyRe=/\s*\}/,tagRe=/#|\^|\/|&gt;|\{|&amp;|=|!|\$|&lt;/;function Scanner(string){this.string=string,this.tail=string,this.pos=0}function Context(view,parentContext){this.view=view,this.blocks={},this.cache={".":this.view},this.parent=parentContext}function Writer(){this.templateCache={_cache:{},set:function(key,value){this._cache[key]=value},get:function(key){return this._cache[key]},clear:function(){this._cache={}}}}Scanner.prototype.eos=function(){return""===this.tail},Scanner.prototype.scan=function(re){var match=this.tail.match(re);if(!match||0!==match.index)return"";var string=match[0];return this.tail=this.tail.substring(string.length),this.pos+=string.length,string},Scanner.prototype.scanUntil=function(re){var match,index=this.tail.search(re);switch(index){case-1:match=this.tail,this.tail="";break;case 0:match="";break;default:match=this.tail.substring(0,index),this.tail=this.tail.substring(index)}return this.pos+=match.length,match},Context.prototype.push=function(view){return new Context(view,this)},Context.prototype.setBlockVar=function(name,value){return this.blocks[name]=value,value},Context.prototype.clearBlockVars=function(){this.blocks={}},Context.prototype.getBlockVar=function(name){var value,blocks=this.blocks;return blocks.hasOwnProperty(name)?value=blocks[name]:this.parent&amp;&amp;(value=this.parent.getBlockVar(name)),value},Context.prototype.parseNameAndArgs=function(name){var arg,argbuffer,parts=name.split(" "),inString=!1,first=!0,i=0,finalArgs=[];for(i=0;i&lt;parts.length;i++)arg=parts[i],argbuffer="",inString?-1!==arg.replace("\\\\","").search(/^"$|[^\\]"$/)?(finalArgs[finalArgs.length]=argbuffer+" "+arg.substr(0,arg.length-1),argbuffer="",inString=!1):argbuffer+=" "+arg:-1===arg.search(/^"/)||first?(-1!==arg.search(/^\d+(\.\d*)?$/)?finalArgs[finalArgs.length]=parseFloat(arg):finalArgs[finalArgs.length]="true"===arg?1:"false"===arg?0:first?arg:this.lookup(arg),first=!1):-1!==arg.replace("\\\\","").search(/^".*[^\\]"$/)?finalArgs[finalArgs.length]=arg.substr(1,arg.length-2):(inString=!0,argbuffer=arg.substr(1));return finalArgs},Context.prototype.lookup=function(name){var value,primitive,propName,cache=this.cache,lambdaArgs=this.parseNameAndArgs(name);if(name=lambdaArgs.shift(),cache.hasOwnProperty(name))value=cache[name];else{for(var intermediateValue,names,index,context=this,lookupHit=!1;context;){if(name.indexOf(".")&gt;0)for(intermediateValue=context.view,names=name.split("."),index=0;null!=intermediateValue&amp;&amp;index&lt;names.length;)index===names.length-1&amp;&amp;(lookupHit=hasProperty(intermediateValue,names[index])||(primitive=intermediateValue,propName=names[index],null!=primitive&amp;&amp;"object"!=typeof primitive&amp;&amp;primitive.hasOwnProperty&amp;&amp;primitive.hasOwnProperty(propName))),intermediateValue=intermediateValue[names[index++]];else intermediateValue=context.view[name],lookupHit=hasProperty(context.view,name);if(lookupHit){value=intermediateValue;break}context=context.parent}cache[name]=value}return isFunction(value)&amp;&amp;(value=value.call(this.view,lambdaArgs)),value},Writer.prototype.clearCache=function(){void 0!==this.templateCache&amp;&amp;this.templateCache.clear()},Writer.prototype.parse=function(template,tags){var cache=this.templateCache,cacheKey=template+":"+(tags||mustache.tags).join(":"),isCacheEnabled=void 0!==cache,tokens=isCacheEnabled?cache.get(cacheKey):void 0;return null==tokens&amp;&amp;(tokens=function(template,tags){if(!template)return[];var openingTagRe,closingTagRe,closingCurlyRe,lineHasNonSpace=!1,sections=[],tokens=[],spaces=[],hasTag=!1,nonSpace=!1,indentation="",tagIndex=0;function stripSpace(){if(hasTag&amp;&amp;!nonSpace)for(;spaces.length;)delete tokens[spaces.pop()];else spaces=[];hasTag=!1,nonSpace=!1}function compileTags(tagsToCompile){if("string"==typeof tagsToCompile&amp;&amp;(tagsToCompile=tagsToCompile.split(spaceRe,2)),!isArray(tagsToCompile)||2!==tagsToCompile.length)throw new Error("Invalid tags: "+tagsToCompile);openingTagRe=new RegExp(escapeRegExp(tagsToCompile[0])+"\\s*"),closingTagRe=new RegExp("\\s*"+escapeRegExp(tagsToCompile[1])),closingCurlyRe=new RegExp("\\s*"+escapeRegExp("}"+tagsToCompile[1]))}compileTags(tags||mustache.tags);for(var start,type,value,chr,token,openSection,tagName,scanner=new Scanner(template);!scanner.eos();){if(start=scanner.pos,value=scanner.scanUntil(openingTagRe))for(var i=0,valueLength=value.length;i&lt;valueLength;++i)isWhitespace(chr=value.charAt(i))?(spaces.push(tokens.length),indentation+=chr):(nonSpace=!0,lineHasNonSpace=!0,indentation+=" "),tokens.push(["text",chr,start,start+1]),start+=1,"\n"===chr&amp;&amp;(stripSpace(),indentation="",tagIndex=0,lineHasNonSpace=!1);if(!scanner.scan(openingTagRe))break;if(hasTag=!0,type=scanner.scan(tagRe)||"name",scanner.scan(whiteRe),"="===type?(value=scanner.scanUntil(equalsRe),scanner.scan(equalsRe),scanner.scanUntil(closingTagRe)):"{"===type?(value=scanner.scanUntil(closingCurlyRe),scanner.scan(curlyRe),scanner.scanUntil(closingTagRe),type="&amp;"):value=scanner.scanUntil(closingTagRe),!scanner.scan(closingTagRe))throw new Error("Unclosed tag at "+scanner.pos);if(token="&gt;"==type?[type,value,start,scanner.pos,indentation,tagIndex,lineHasNonSpace]:[type,value,start,scanner.pos],tagIndex++,tokens.push(token),"#"===type||"^"===type||"$"===type||"&lt;"===type)sections.push(token);else if("/"===type){if(!(openSection=sections.pop()))throw new Error('Unopened section "'+value+'" at '+start);if((tagName=openSection[1].split(" ",1)[0])!==value.split(" ",1)[0])throw new Error('Unclosed section "'+tagName+'" at '+start)}else"name"===type||"{"===type||"&amp;"===type?nonSpace=!0:"="===type&amp;&amp;compileTags(value)}if(stripSpace(),openSection=sections.pop())throw new Error('Unclosed section "'+openSection[1]+'" at '+scanner.pos);return function(tokens){for(var token,nestedTokens=[],collector=nestedTokens,sections=[],i=0,numTokens=tokens.length;i&lt;numTokens;++i)switch((token=tokens[i])[0]){case"$":case"&lt;":case"#":case"^":collector.push(token),sections.push(token),collector=token[4]=[];break;case"/":sections.pop()[5]=token[2],collector=sections.length&gt;0?sections[sections.length-1][4]:nestedTokens;break;default:collector.push(token)}return nestedTokens}(function(tokens){for(var token,lastToken,squashedTokens=[],i=0,numTokens=tokens.length;i&lt;numTokens;++i)(token=tokens[i])&amp;&amp;("text"===token[0]&amp;&amp;lastToken&amp;&amp;"text"===lastToken[0]?(lastToken[1]+=token[1],lastToken[3]=token[3]):(squashedTokens.push(token),lastToken=token));return squashedTokens}(tokens))}(template,tags),isCacheEnabled&amp;&amp;cache.set(cacheKey,tokens)),tokens},Writer.prototype.render=function(template,view,partials,config){var tags=this.getConfigTags(config),tokens=this.parse(template,tags),context=view instanceof Context?view:new Context(view,void 0);return this.renderTokens(tokens,context,partials,template,config)},Writer.prototype.renderTokens=function(tokens,context,partials,originalTemplate,config){for(var token,symbol,value,buffer="",i=0,numTokens=tokens.length;i&lt;numTokens;++i)value=void 0,"#"===(symbol=(token=tokens[i])[0])?value=this.renderSection(token,context,partials,originalTemplate,config):"^"===symbol?value=this.renderInverted(token,context,partials,originalTemplate,config):"&gt;"===symbol?value=this.renderPartial(token,context,partials,config):"&lt;"===symbol?value=this.renderBlock(token,context,partials,originalTemplate,config):"$"===symbol?value=this.renderBlockVariable(token,context,partials,originalTemplate,config):"&amp;"===symbol?value=this.unescapedValue(token,context):"name"===symbol?value=this.escapedValue(token,context,config):"text"===symbol&amp;&amp;(value=this.rawValue(token)),void 0!==value&amp;&amp;(buffer+=value);return buffer},Writer.prototype.renderSection=function(token,context,partials,originalTemplate,config){var self=this,buffer="",lambdaArgs=context.parseNameAndArgs(token[1]),name=lambdaArgs.shift(),value=context.lookup(name);if(value){if(isArray(value))for(var j=0,valueLength=value.length;j&lt;valueLength;++j)buffer+=this.renderTokens(token[4],context.push(value[j]),partials,originalTemplate,config);else if("object"==typeof value||"string"==typeof value||"number"==typeof value)buffer+=this.renderTokens(token[4],context.push(value),partials,originalTemplate,config);else if(isFunction(value)){if("string"!=typeof originalTemplate)throw new Error("Cannot use higher-order sections without the original template");null!=(value=value.call(context.view,originalTemplate.slice(token[3],token[5]),(function(template){return self.render(template,context,partials,config)}),lambdaArgs))&amp;&amp;(buffer+=value)}else buffer+=this.renderTokens(token[4],context,partials,originalTemplate,config);return buffer}},Writer.prototype.renderInverted=function(token,context,partials,originalTemplate,config){var value=context.lookup(token[1]);if(!value||isArray(value)&amp;&amp;0===value.length)return this.renderTokens(token[4],context,partials,originalTemplate,config)},Writer.prototype.indentPartial=function(partial,indentation,lineHasNonSpace){for(var filteredIndentation=indentation.replace(/[^ \t]/g,""),partialByNl=partial.split("\n"),i=0;i&lt;partialByNl.length;i++)partialByNl[i].length&amp;&amp;(i&gt;0||!lineHasNonSpace)&amp;&amp;(partialByNl[i]=filteredIndentation+partialByNl[i]);return partialByNl.join("\n")},Writer.prototype.renderPartial=function(token,context,partials,config){if(partials){var tags=this.getConfigTags(config),value=isFunction(partials)?partials(token[1]):partials[token[1]];if(null!=value){var lineHasNonSpace=token[6],tagIndex=token[5],indentation=token[4],indentedValue=value;0==tagIndex&amp;&amp;indentation&amp;&amp;(indentedValue=this.indentPartial(value,indentation,lineHasNonSpace));var tokens=this.parse(indentedValue,tags);return this.renderTokens(tokens,context,partials,indentedValue,config)}}},Writer.prototype.renderBlock=function(token,context,partials,originalTemplate,config){if(partials){var value=isFunction(partials)?partials(token[1]):partials[token[1]];null!=value&amp;&amp;context.clearBlockVars(),this.renderTokens(token[4],context,partials,originalTemplate,config);var result=this.renderTokens(this.parse(value),context,partials,value,config);return context.clearBlockVars(),result}},Writer.prototype.renderBlockVariable=function(token,context,partials,originalTemplate,config){var value=token[1],exists=context.getBlockVar(value);return exists?this.renderTokens(this.parse(exists),context,partials,exists,config):(context.setBlockVar(value,originalTemplate.slice(token[3],token[5])),this.renderTokens(token[4],context,partials,originalTemplate,config))},Writer.prototype.unescapedValue=function(token,context){var value=context.lookup(token[1]);if(null!=value)return value},Writer.prototype.escapedValue=function(token,context,config){var escape=this.getConfigEscape(config)||mustache.escape,value=context.lookup(token[1]);if(null!=value)return"number"==typeof value&amp;&amp;escape===mustache.escape?String(value):escape(value)},Writer.prototype.rawValue=function(token){return token[1]},Writer.prototype.getConfigTags=function(config){return isArray(config)?config:config&amp;&amp;"object"==typeof config?config.tags:void 0},Writer.prototype.getConfigEscape=function(config){return config&amp;&amp;"object"==typeof config&amp;&amp;!isArray(config)?config.escape:void 0};var mustache={name:"mustache.js",version:"4.2.0",tags:["{{","}}"],clearCache:void 0,escape:void 0,parse:void 0,render:void 0,Scanner:void 0,Context:void 0,Writer:void 0,set templateCache(cache){defaultWriter.templateCache=cache},get templateCache(){return defaultWriter.templateCache}},defaultWriter=new Writer;mustache.clearCache=function(){return defaultWriter.clearCache()},mustache.parse=function(template,tags){return defaultWriter.parse(template,tags)},mustache.render=function(template,view,partials,config){if("string"!=typeof template)throw new TypeError('Invalid template! Template should be a "string" but "'+((isArray(obj=template)?"array":typeof obj)+'" was given as the first argument for mustache#render(template, view, partials)'));var obj;return defaultWriter.render(template,view,partials,config)},mustache.escape=function(string){return String(string).replace(/[&amp;&lt;&gt;"'`=\/]/g,(function(s){return entityMap[s]}))},mustache.Scanner=Scanner,mustache.Context=Context,mustache.Writer=Writer;var _default=mustache;return _exports.default=_default,_exports.default}));
/**
 * Enhance a textarea with auto growing rows to fit the content.
 *
 * @module     core/auto_rows
 * @copyright  2016 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.2
 */
define("core/auto_rows",["jquery"],(function($){var SELECTORS_ELEMENT="[data-auto-rows]",EVENTS={ROW_CHANGE:"autorows:rowchange"},changeListener=function(e){var element=$(e.target),minRows=element.data("min-rows"),currentRows=element.attr("rows");void 0===minRows&amp;&amp;element.data("min-rows",currentRows),element.attr("rows",1);var rows=function(element){var currentRows=element.attr("rows"),minRows=element.data("min-rows"),maxRows=element.attr("data-max-rows"),height=element.height(),padding=element.innerHeight()-height,rows=(element[0].scrollHeight-padding)/(height/currentRows);return element.css("height",""),rows&lt;minRows?minRows:maxRows&amp;&amp;rows&gt;=maxRows?maxRows:rows}(element);element.attr("rows",rows),rows!=currentRows&amp;&amp;element.trigger(EVENTS.ROW_CHANGE)};return{init:function(root){$(root).data("auto-rows")?$(root).on("input propertychange",changeListener.bind(this)):$(root).on("input propertychange",SELECTORS_ELEMENT,changeListener.bind(this))},events:EVENTS}}));
define("core/datafilter/filtertype",["exports","core/form-autocomplete","core/datafilter/selectors","core/str"],(function(_exports,_formAutocomplete,_selectors,_str){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Base Filter class for a filter type in the filter UI.
   *
   * @module     core/datafilter/filtertype
   * @copyright  2020 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_formAutocomplete=_interopRequireDefault(_formAutocomplete),_selectors=_interopRequireDefault(_selectors);return _exports.default=class{constructor(filterType,rootNode,initialValues){this.filterType=filterType,this.rootNode=rootNode,this.addValueSelector(initialValues)}tearDown(){}get placeholder(){return(0,_str.get_string)("placeholdertypeorselect","core")}get showSuggestions(){return!0}async addValueSelector(){let initialValues=arguments.length&gt;0&amp;&amp;void 0!==arguments[0]?arguments[0]:[];const filterValueNode=this.getFilterValueNode(),sourceDataNode=this.getSourceDataForFilter();if(!sourceDataNode)return;filterValueNode.innerHTML=sourceDataNode.outerHTML;const dataSource=filterValueNode.querySelector("select");dataSource.id="filter-value-"+dataSource.getAttribute("data-field-name");const filterValueLabel=document.createElement("label");filterValueLabel.setAttribute("for",dataSource.id),filterValueLabel.classList.add("sr-only"),filterValueLabel.innerText=dataSource.getAttribute("data-field-title"),filterValueNode.appendChild(filterValueLabel),initialValues.forEach((filterValue=&gt;{let selectedOption=dataSource.querySelector('option[value="'.concat(filterValue,'"]'));selectedOption?selectedOption.selected=!0:this.showSuggestions||(selectedOption=document.createElement("option"),selectedOption.value=filterValue,selectedOption.innerHTML=filterValue,selectedOption.selected=!0,dataSource.append(selectedOption))})),_formAutocomplete.default.enhance(dataSource,"1"==dataSource.dataset.allowCustom,null,await this.placeholder,!1,this.showSuggestions,null,!dataSource.multiple,{items:"core/datafilter/autocomplete_selection_items",layout:"core/datafilter/autocomplete_layout",selection:"core/datafilter/autocomplete_selection"})}get filterRoot(){return this.rootNode.querySelector(_selectors.default.filter.byName(this.filterType))}getSourceDataForFilter(){return this.rootNode.querySelector(_selectors.default.filterset.regions.datasource).querySelector(_selectors.default.data.fields.byName(this.filterType))}getFilterValueNode(){return this.filterRoot.querySelector(_selectors.default.filter.regions.values)}get name(){return this.filterType}get jointype(){return parseInt(this.filterRoot.querySelector(_selectors.default.filter.fields.join).value,10)}get rawValues(){const filterValueSelect=this.getFilterValueNode().querySelector("select");return Object.values((select=filterValueSelect,select.querySelectorAll(":checked"))).map((option=&gt;option.value));var select}get values(){return this.rawValues.map((option=&gt;parseInt(option,10)))}get filterValue(){return{name:this.name,jointype:this.jointype,values:this.values}}},_exports.default}));
define("core/datafilter/selectors",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0;
/**
   * Module containing the selectors for user filters.
   *
   * @module     core/datafilter/selectors
   * @copyright  2020 Michael Hawkins &lt;michaelh@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */
const getFilterRegion=region=&gt;'[data-filterregion="'.concat(region,'"]'),getFilterAction=action=&gt;'[data-filteraction="'.concat(action,'"]'),getFilterField=field=&gt;'[data-filterfield="'.concat(field,'"]');var _default={filter:{region:getFilterRegion("filter"),actions:{remove:getFilterAction("remove")},fields:{join:getFilterField("join"),type:getFilterField("type")},regions:{values:getFilterRegion("value")},byName:name=&gt;"".concat(getFilterRegion("filter"),'[data-filter-type="').concat(name,'"]')},filterset:{region:getFilterRegion("actions"),actions:{addRow:getFilterAction("add"),applyFilters:getFilterAction("apply"),resetFilters:getFilterAction("reset")},regions:{filtermatch:getFilterRegion("filtermatch"),filterlist:getFilterRegion("filters"),datasource:getFilterRegion("filtertypedata")},fields:{join:"".concat(getFilterRegion("filtermatch")," ").concat(getFilterField("join"))}},data:{fields:{byName:name=&gt;'[data-field-name="'.concat(name,'"]'),all:"".concat(getFilterRegion("filtertypedata")," [data-field-name]")},typeList:getFilterRegion("filtertypelist"),typeListSelect:"select".concat(getFilterRegion("filtertypelist"))}};return _exports.default=_default,_exports.default}));
define("core/datafilter/filtertypes/country",["exports","core/datafilter/filtertype"],(function(_exports,_filtertype){var obj;
/**
   * Country filter
   *
   * @module      core/datafilter/filtertypes/country
   * @copyright   2021 Paul Holden &lt;paulh@moodle.com&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_filtertype=(obj=_filtertype)&amp;&amp;obj.__esModule?obj:{default:obj};class _default extends _filtertype.default{get values(){return this.rawValues}}return _exports.default=_default,_exports.default}));
define("core/datafilter/filtertypes/courseid",["exports","core/datafilter/filtertype"],(function(_exports,_filtertype){var obj;
/**
   * Course ID filter.
   *
   * @module     core/datafilter/filtertypes/courseid
   * @copyright  2020 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_filtertype=(obj=_filtertype)&amp;&amp;obj.__esModule?obj:{default:obj};class _default extends _filtertype.default{constructor(filterType,filterSet){super(filterType,filterSet)}async addValueSelector(){}get filterValue(){return{name:this.name,jointype:1,values:[parseInt(this.rootNode.dataset.tableCourseId,10)]}}}return _exports.default=_default,_exports.default}));
define("core/datafilter/filtertypes/keyword",["exports","core/datafilter/filtertype","core/str"],(function(_exports,_filtertype,_str){var obj;
/**
   * Keyword filter.
   *
   * @module     core/datafilter/filtertypes/keyword
   * @copyright  2020 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_filtertype=(obj=_filtertype)&amp;&amp;obj.__esModule?obj:{default:obj};class _default extends _filtertype.default{get values(){return this.rawValues}get placeholder(){return(0,_str.get_string)("placeholdertype","core_user")}get showSuggestions(){return!1}}return _exports.default=_default,_exports.default}));
var root,definition;root=window,definition=function(){var noop=function(){},isIE="undefined"!=typeof window&amp;&amp;void 0!==window.navigator&amp;&amp;/Trident\/|MSIE /.test(window.navigator.userAgent),logMethods=["trace","debug","info","warn","error"];function bindMethod(obj,methodName){var method=obj[methodName];if("function"==typeof method.bind)return method.bind(obj);try{return Function.prototype.bind.call(method,obj)}catch(e){return function(){return Function.prototype.apply.apply(method,[obj,arguments])}}}function traceForIE(){console.log&amp;&amp;(console.log.apply?console.log.apply(console,arguments):Function.prototype.apply.apply(console.log,[console,arguments])),console.trace&amp;&amp;console.trace()}function realMethod(methodName){return"debug"===methodName&amp;&amp;(methodName="log"),"undefined"!=typeof console&amp;&amp;("trace"===methodName&amp;&amp;isIE?traceForIE:void 0!==console[methodName]?bindMethod(console,methodName):void 0!==console.log?bindMethod(console,"log"):noop)}function replaceLoggingMethods(level,loggerName){for(var i=0;i&lt;logMethods.length;i++){var methodName=logMethods[i];this[methodName]=i&lt;level?noop:this.methodFactory(methodName,level,loggerName)}this.log=this.debug}function enableLoggingWhenConsoleArrives(methodName,level,loggerName){return function(){"undefined"!=typeof console&amp;&amp;(replaceLoggingMethods.call(this,level,loggerName),this[methodName].apply(this,arguments))}}function defaultMethodFactory(methodName,level,loggerName){return realMethod(methodName)||enableLoggingWhenConsoleArrives.apply(this,arguments)}function Logger(name,defaultLevel,factory){var currentLevel,self=this;defaultLevel=null==defaultLevel?"WARN":defaultLevel;var storageKey="loglevel";function getPersistedLevel(){var storedLevel;if("undefined"!=typeof window&amp;&amp;storageKey){try{storedLevel=window.localStorage[storageKey]}catch(ignore){}if(void 0===storedLevel)try{var cookie=window.document.cookie,location=cookie.indexOf(encodeURIComponent(storageKey)+"=");-1!==location&amp;&amp;(storedLevel=/^([^;]+)/.exec(cookie.slice(location))[1])}catch(ignore){}return void 0===self.levels[storedLevel]&amp;&amp;(storedLevel=void 0),storedLevel}}"string"==typeof name?storageKey+=":"+name:"symbol"==typeof name&amp;&amp;(storageKey=void 0),self.name=name,self.levels={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,SILENT:5},self.methodFactory=factory||defaultMethodFactory,self.getLevel=function(){return currentLevel},self.setLevel=function(level,persist){if("string"==typeof level&amp;&amp;void 0!==self.levels[level.toUpperCase()]&amp;&amp;(level=self.levels[level.toUpperCase()]),!("number"==typeof level&amp;&amp;level&gt;=0&amp;&amp;level&lt;=self.levels.SILENT))throw"log.setLevel() called with invalid level: "+level;if(currentLevel=level,!1!==persist&amp;&amp;function(levelNum){var levelName=(logMethods[levelNum]||"silent").toUpperCase();if("undefined"!=typeof window&amp;&amp;storageKey){try{return void(window.localStorage[storageKey]=levelName)}catch(ignore){}try{window.document.cookie=encodeURIComponent(storageKey)+"="+levelName+";"}catch(ignore){}}}(level),replaceLoggingMethods.call(self,level,name),"undefined"==typeof console&amp;&amp;level&lt;self.levels.SILENT)return"No console available for logging"},self.setDefaultLevel=function(level){defaultLevel=level,getPersistedLevel()||self.setLevel(level,!1)},self.resetLevel=function(){self.setLevel(defaultLevel,!1),function(){if("undefined"!=typeof window&amp;&amp;storageKey){try{return void window.localStorage.removeItem(storageKey)}catch(ignore){}try{window.document.cookie=encodeURIComponent(storageKey)+"=; expires=Thu, 01 Jan 1970 00:00:00 UTC"}catch(ignore){}}}()},self.enableAll=function(persist){self.setLevel(self.levels.TRACE,persist)},self.disableAll=function(persist){self.setLevel(self.levels.SILENT,persist)};var initialLevel=getPersistedLevel();null==initialLevel&amp;&amp;(initialLevel=defaultLevel),self.setLevel(initialLevel,!1)}var defaultLogger=new Logger,_loggersByName={};defaultLogger.getLogger=function(name){if("symbol"!=typeof name&amp;&amp;"string"!=typeof name||""===name)throw new TypeError("You must supply a name when creating a logger.");var logger=_loggersByName[name];return logger||(logger=_loggersByName[name]=new Logger(name,defaultLogger.getLevel(),defaultLogger.methodFactory)),logger};var _log="undefined"!=typeof window?window.log:void 0;return defaultLogger.noConflict=function(){return"undefined"!=typeof window&amp;&amp;window.log===defaultLogger&amp;&amp;(window.log=_log),defaultLogger},defaultLogger.getLoggers=function(){return _loggersByName},defaultLogger.default=defaultLogger,defaultLogger},"function"==typeof define&amp;&amp;define.amd?define("core/loglevel",definition):"object"==typeof module&amp;&amp;module.exports?module.exports=definition():root.log=definition();
/**
 * Javascript for dynamically changing the page limits.
 *
 * @module     core/paged_content_paging_bar_limit_selector
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core/paged_content_paging_bar_limit_selector",["jquery","core/custom_interaction_events","core/paged_content_events","core/pubsub"],(function($,CustomEvents,PagedContentEvents,PubSub){var SELECTORS_LIMIT_OPTION="[data-limit]";return{init:function(root,id){root=$(root),CustomEvents.define(root,[CustomEvents.events.activate]),root.on(CustomEvents.events.activate,SELECTORS_LIMIT_OPTION,(function(e,data){var optionElement=$(e.target).closest(SELECTORS_LIMIT_OPTION);if(!optionElement.hasClass("active")){var limit=parseInt(optionElement.attr("data-limit"),10);PubSub.publish(id+PagedContentEvents.SET_ITEMS_PER_PAGE_LIMIT,limit),data.originalEvent.preventDefault()}}))},rootSelector:'[data-region="paging-control-limit-container"]'}}));
/**
 * URL utility functions.
 *
 * @module     core/url
 * @copyright  2015 Damyon Wiese &lt;damyon@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      2.9
 */
define("core/url",["jquery","core/config"],(function($,config){return{fileUrl:function(relativeScript,slashArg){var url=config.wwwroot+relativeScript;return"/"!=slashArg.charAt(0)&amp;&amp;(slashArg="/"+slashArg),config.slasharguments?url+=slashArg:url+="?file="+encodeURIComponent(slashArg),url},relativeUrl:function(relativePath,params,includeSessKey){if(0===relativePath.indexOf("http:")||0===relativePath.indexOf("https:")||relativePath.indexOf("://")&gt;=0)throw new Error("relativeUrl function does not accept absolute urls");"/"!=relativePath.charAt(0)&amp;&amp;(relativePath="/"+relativePath),"admin"!==config.admin&amp;&amp;(relativePath=relativePath.replace(/^\/admin\//,"/"+config.admin+"/")),params=params||{},includeSessKey&amp;&amp;(params.sesskey=config.sesskey);var queryString="";return Object.keys(params).length&amp;&amp;(queryString=$.map(params,(function(value,param){return param+"="+value})).join("&amp;")),""!==queryString?config.wwwroot+relativePath+"?"+queryString:config.wwwroot+relativePath},imageUrl:function(imagename,component){return M.util.image_url(imagename,component)}}}));
define("core/event",["exports","core_editor/events","core_filters/events","core_form/events","jquery","core/yui"],(function(_exports,_events,_events2,_events3,_jquery,_yui){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Global registry of core events that can be triggered/listened for.
   *
   * @module     core/event
   * @copyright  2015 Damyon Wiese &lt;damyon@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   * @since      3.0
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_jquery=_interopRequireDefault(_jquery),_yui=_interopRequireDefault(_yui);const getRenamedLegacyFunction=(oldFunctionName,newModule,newFunctionName,newFunctionRef)=&gt;function(){return window.console.warn("The core/event::".concat(oldFunctionName,"() function has been moved to ").concat(newModule,"::").concat(newFunctionName,". ")+"Please update your code to use the new module."),newFunctionRef(...arguments)};var _default={Events:{FORM_FIELD_VALIDATION:"core_form-field-validation"},getLegacyEvents:()=&gt;{const result=_jquery.default.Deferred();return window.console.warn("The getLegacyEvents function has been deprecated. Please update your code to use native events."),_yui.default.use("event","moodle-core-event",(function(){result.resolve(window.M.core.event)})),result.promise()},notifyEditorContentRestored:getRenamedLegacyFunction("notifyEditorContentRestored","core_editor/events","notifyEditorContentRestored",_events.notifyEditorContentRestored),notifyFilterContentUpdated:getRenamedLegacyFunction("notifyFilterContentUpdated","core_filters/events","notifyFilterContentUpdated",_events2.notifyFilterContentUpdated),notifyFormSubmitAjax:getRenamedLegacyFunction("notifyFormSubmitAjax","core_form/events","notifyFormSubmittedByJavascript",_events3.notifyFormSubmittedByJavascript)};return _exports.default=_default,_exports.default}));
/*
 * JavaScript to handle drag operations, including automatic scrolling.
 *
 * Note: this module is defined statically. It is a singleton. You
 * can only have one use of it active at any time. However, you
 * can only drag one thing at a time, this is not a problem in practice.
 *
 * @module     core/dragdrop
 * @copyright  2016 The Open University
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.6
 */
define("core/dragdrop",["jquery","core/autoscroll"],(function($,autoScroll){var dragdrop={eventCaptureOptions:{passive:!1,capture:!0},dragProxy:null,onMove:null,onDrop:null,initialPosition:null,initialX:null,initialY:null,touching:null,prepare:function(event){if(event.preventDefault(),"touchstart"===event.type?null===dragdrop.touching&amp;&amp;event.changedTouches.length&gt;0:1===event.which){var details=dragdrop.getEventXY(event);return details.start=!0,details}return{start:!1}},start:function(event,dragProxy,onMove,onDrop){var xy=dragdrop.getEventXY(event);switch(dragdrop.initialX=xy.x,dragdrop.initialY=xy.y,dragdrop.initialPosition=dragProxy.offset(),dragdrop.dragProxy=dragProxy,dragdrop.onMove=onMove,dragdrop.onDrop=onDrop,event.type){case"mousedown":dragdrop.addEventSpecial("mousemove",dragdrop.mouseMove),dragdrop.addEventSpecial("mouseup",dragdrop.mouseUp);break;case"touchstart":dragdrop.addEventSpecial("touchend",dragdrop.touchEnd),dragdrop.addEventSpecial("touchcancel",dragdrop.touchEnd),dragdrop.addEventSpecial("touchmove",dragdrop.touchMove),dragdrop.touching=event.changedTouches[0].identifier;break;default:throw new Error("Unexpected event type: "+event.type)}autoScroll.start(dragdrop.scroll)},addEventSpecial:function(event,handler){try{window.addEventListener(event,handler,dragdrop.eventCaptureOptions)}catch(ex){dragdrop.eventCaptureOptions=!0,window.addEventListener(event,handler,dragdrop.eventCaptureOptions)}},getEventXY:function(event){switch(event.type){case"touchstart":return{x:event.changedTouches[0].pageX,y:event.changedTouches[0].pageY};case"mousedown":return{x:event.pageX,y:event.pageY};default:throw new Error("Unexpected event type: "+event.type)}},touchMove:function(e){e.preventDefault();for(var i=0;i&lt;e.changedTouches.length;i++)e.changedTouches[i].identifier===dragdrop.touching&amp;&amp;dragdrop.handleMove(e.changedTouches[i].pageX,e.changedTouches[i].pageY)},mouseMove:function(e){dragdrop.handleMove(e.pageX,e.pageY)},handleMove:function(pageX,pageY){var current=dragdrop.dragProxy.offset(),topOffset=current.top-parseInt(dragdrop.dragProxy.css("top")),leftOffset=current.left-parseInt(dragdrop.dragProxy.css("left")),maxY=$(document).height()-dragdrop.dragProxy.outerHeight()-topOffset,maxX=$(document).width()-dragdrop.dragProxy.outerWidth()-leftOffset,minY=-topOffset,minX=-leftOffset,initial=dragdrop.initialPosition,position={top:Math.max(minY,Math.min(maxY,initial.top+(pageY-dragdrop.initialY)-topOffset)),left:Math.max(minX,Math.min(maxX,initial.left+(pageX-dragdrop.initialX)-leftOffset))};dragdrop.dragProxy.css(position),dragdrop.onMove(pageX,pageY,dragdrop.dragProxy)},touchEnd:function(e){e.preventDefault();for(var i=0;i&lt;e.changedTouches.length;i++)e.changedTouches[i].identifier===dragdrop.touching&amp;&amp;dragdrop.handleEnd(e.changedTouches[i].pageX,e.changedTouches[i].pageY)},mouseUp:function(e){dragdrop.handleEnd(e.pageX,e.pageY)},handleEnd:function(pageX,pageY){null!==dragdrop.touching?(window.removeEventListener("touchend",dragdrop.touchEnd,dragdrop.eventCaptureOptions),window.removeEventListener("touchcancel",dragdrop.touchEnd,dragdrop.eventCaptureOptions),window.removeEventListener("touchmove",dragdrop.touchMove,dragdrop.eventCaptureOptions),dragdrop.touching=null):(window.removeEventListener("mousemove",dragdrop.mouseMove,dragdrop.eventCaptureOptions),window.removeEventListener("mouseup",dragdrop.mouseUp,dragdrop.eventCaptureOptions)),autoScroll.stop(),dragdrop.onDrop(pageX,pageY,dragdrop.dragProxy)},scroll:function(offset){var maxY=$(document).height()-dragdrop.dragProxy.outerHeight(),currentPosition=dragdrop.dragProxy.offset();currentPosition.top=Math.min(maxY,currentPosition.top+offset),dragdrop.dragProxy.css(currentPosition)}};return{prepare:dragdrop.prepare,start:dragdrop.start}}));
/**
 * Contain the logic for the loading icon.
 *
 * @module     core/loading_icon
 * @class      loading_icon
 * @copyright  2019 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core/loadingicon",["jquery","core/templates"],(function($,Templates){var TEMPLATES_LOADING="core/loading",getIcon=function(){return Templates.render(TEMPLATES_LOADING,{})},addIconToContainerRemoveOnCompletion=function(container,loadingIconPromise){return getIcon().then((function(html){var loadingIcon=$(html).hide();return $(container).append(loadingIcon),loadingIcon.fadeIn(150),$.when(loadingIcon.promise(),loadingIconPromise)})).then((function(loadingIcon){return loadingIcon.fadeOut(100).promise()})).then((function(loadingIcon){loadingIcon.remove()}))};return{getIcon:getIcon,addIconToContainer:function(container){return getIcon().then((function(html){var loadingIcon=$(html).hide();return $(container).append(loadingIcon),loadingIcon.fadeIn(150),loadingIcon}))},addIconToContainerWithPromise:function(container){var loadingIconPromise=$.Deferred();return addIconToContainerRemoveOnCompletion(container,loadingIconPromise),loadingIconPromise},addIconToContainerRemoveOnCompletion:addIconToContainerRemoveOnCompletion}}));
/**
 * Chart base.
 *
 * @copyright  2016 Frédéric Massart - FMCorz.net
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @module     core/chart_base
 */
define("core/chart_base",["core/chart_series","core/chart_axis"],(function(Series,Axis){function Base(){this._series=[],this._labels=[],this._xaxes=[],this._yaxes=[],this._setDefaults()}return Base.prototype._series=null,Base.prototype._labels=null,Base.prototype._legendOptions=null,Base.prototype._title=null,Base.prototype._xaxes=null,Base.prototype._yaxes=null,Base.prototype.COLORSET=["#f3c300","#875692","#f38400","#a1caf1","#be0032","#c2b280","#7f180d","#008856","#e68fac","#0067a5"],Base.prototype._configColorSet=null,Base.prototype.TYPE=null,Base.prototype.addSeries=function(series){if(this._validateSeries(series),this._series.push(series),null===series.getColor()){var configColorSet=this.getConfigColorSet()||Base.prototype.COLORSET;series.setColor(configColorSet[this._series.length%configColorSet.length])}},Base.prototype.create=function(Klass,data){var Chart=new Klass;return Chart.setConfigColorSet(data.config_colorset),Chart.setLabels(data.labels),Chart.setTitle(data.title),data.legend_options&amp;&amp;Chart.setLegendOptions(data.legend_options),data.series.forEach((function(seriesData){Chart.addSeries(Series.prototype.create(seriesData))})),data.axes.x.forEach((function(axisData,i){Chart.setXAxis(Axis.prototype.create(axisData),i)})),data.axes.y.forEach((function(axisData,i){Chart.setYAxis(Axis.prototype.create(axisData),i)})),Chart},Base.prototype.__getAxis=function(xy,index,createIfNotExists){var axis,axes="x"===xy?this._xaxes:this._yaxes,setAxis=("x"===xy?this.setXAxis:this.setYAxis).bind(this);if(createIfNotExists=void 0!==createIfNotExists&amp;&amp;createIfNotExists,void 0===(axis=axes[index=void 0===index?0:index])){if(!createIfNotExists)throw new Error("Unknown axis.");setAxis(axis=new Axis,index)}return axis},Base.prototype.getConfigColorSet=function(){return this._configColorSet},Base.prototype.getLabels=function(){return this._labels},Base.prototype.getLegendOptions=function(){return this._legendOptions},Base.prototype.getSeries=function(){return this._series},Base.prototype.getTitle=function(){return this._title},Base.prototype.getType=function(){if(!this.TYPE)throw new Error("The TYPE property has not been set.");return this.TYPE},Base.prototype.getXAxes=function(){return this._xaxes},Base.prototype.getXAxis=function(index,createIfNotExists){return this.__getAxis("x",index,createIfNotExists)},Base.prototype.getYAxes=function(){return this._yaxes},Base.prototype.getYAxis=function(index,createIfNotExists){return this.__getAxis("y",index,createIfNotExists)},Base.prototype.setConfigColorSet=function(colorset){this._configColorSet=colorset},Base.prototype._setDefaults=function(){},Base.prototype.setLabels=function(labels){if(labels.length&amp;&amp;this._series.length&amp;&amp;this._series[0].length!=labels.length)throw new Error("Series must match label values.");this._labels=labels},Base.prototype.setLegendOptions=function(legendOptions){if("object"!=typeof legendOptions)throw new Error("Setting legend with non-object value:"+legendOptions);this._legendOptions=legendOptions},Base.prototype.setTitle=function(title){this._title=title},Base.prototype.setXAxis=function(axis,index){index=void 0===index?0:index,this._validateAxis("x",axis,index),this._xaxes[index]=axis},Base.prototype.setYAxis=function(axis,index){index=void 0===index?0:index,this._validateAxis("y",axis,index),this._yaxes[index]=axis},Base.prototype._validateAxis=function(xy,axis,index){if((index=void 0===index?0:index)&gt;0&amp;&amp;void 0===("x"==xy?this._xaxes:this._yaxes)[index-1])throw new Error("Missing "+xy+" axis at index lower than "+index)},Base.prototype._validateSeries=function(series){if(this._series.length&amp;&amp;this._series[0].getCount()!=series.getCount())throw new Error("Series do not have an equal number of values.");if(this._labels.length&amp;&amp;this._labels.length!=series.getCount())throw new Error("Series must match label values.")},Base}));
/**
 * Chart series.
 *
 * @copyright  2016 Frédéric Massart - FMCorz.net
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @module     core/chart_series
 */
define("core/chart_series",[],(function(){function Series(label,values){if("string"!=typeof label)throw new Error("Invalid label for series.");if("object"!=typeof values)throw new Error("Values for a series must be an array.");if(values.length&lt;1)throw new Error("Invalid values received for series.");this._colors=[],this._label=label,this._values=values}return Series.prototype.TYPE_DEFAULT=null,Series.prototype.TYPE_LINE="line",Series.prototype._colors=null,Series.prototype._fill=!1,Series.prototype._label=null,Series.prototype._labels=null,Series.prototype._smooth=!1,Series.prototype._type=Series.prototype.TYPE_DEFAULT,Series.prototype._values=null,Series.prototype._xaxis=null,Series.prototype._yaxis=null,Series.prototype.create=function(obj){var s=new Series(obj.label,obj.values);return s.setType(obj.type),s.setXAxis(obj.axes.x),s.setYAxis(obj.axes.y),s.setLabels(obj.labels),obj.colors&amp;&amp;obj.colors.length&gt;1?s.setColors(obj.colors):s.setColor(obj.colors[0]),s.setFill(obj.fill),s.setSmooth(obj.smooth),s},Series.prototype.getColor=function(){return this._colors[0]||null},Series.prototype.getColors=function(){return this._colors},Series.prototype.getCount=function(){return this._values.length},Series.prototype.getFill=function(){return this._fill},Series.prototype.getLabel=function(){return this._label},Series.prototype.getLabels=function(){return this._labels},Series.prototype.getSmooth=function(){return this._smooth},Series.prototype.getType=function(){return this._type},Series.prototype.getValues=function(){return this._values},Series.prototype.getXAxis=function(){return this._xaxis},Series.prototype.getYAxis=function(){return this._yaxis},Series.prototype.hasColoredValues=function(){return this._colors.length==this.getCount()},Series.prototype.setColor=function(color){this._colors=[color]},Series.prototype.setColors=function(colors){if(colors&amp;&amp;colors.length!=this.getCount())throw new Error("When setting multiple colors there must be one per value.");this._colors=colors||[]},Series.prototype.setFill=function(fill){this._fill=void 0===fill?null:fill},Series.prototype.setLabels=function(labels){this._validateLabels(labels),labels=void 0===labels?null:labels,this._labels=labels},Series.prototype.setSmooth=function(smooth){smooth=void 0===smooth?null:smooth,this._smooth=smooth},Series.prototype.setType=function(type){if(type!=this.TYPE_DEFAULT&amp;&amp;type!=this.TYPE_LINE)throw new Error("Invalid serie type.");this._type=type||null},Series.prototype.setXAxis=function(index){this._xaxis=index||null},Series.prototype.setYAxis=function(index){this._yaxis=index||null},Series.prototype._validateLabels=function(labels){if(labels&amp;&amp;labels.length&gt;0&amp;&amp;labels.length!=this.getCount())throw new Error("Series labels must match series values.")},Series}));
/**
 * Chart pie.
 *
 * @copyright  2016 Frédéric Massart - FMCorz.net
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @module     core/chart_pie
 */
define("core/chart_pie",["core/chart_base"],(function(Base){function Pie(){Base.prototype.constructor.apply(this,arguments)}return Pie.prototype=Object.create(Base.prototype),Pie.prototype.TYPE="pie",Pie.prototype._doughnut=null,Pie.prototype.create=function(Klass,data){var chart=Base.prototype.create.apply(this,arguments);return chart.setDoughnut(data.doughnut),chart},Pie.prototype.addSeries=function(series){if(null===series.getColor()){for(var colors=[],configColorSet=this.getConfigColorSet()||Base.prototype.COLORSET,i=0;i&lt;series.getCount();i++)colors.push(configColorSet[i%configColorSet.length]);series.setColors(colors)}return Base.prototype.addSeries.apply(this,arguments)},Pie.prototype.getDoughnut=function(){return this._doughnut},Pie.prototype.setDoughnut=function(doughnut){this._doughnut=Boolean(doughnut)},Pie.prototype._validateSeries=function(){if(this._series.length&gt;=1)throw new Error("Pie charts only support one serie.");return Base.prototype._validateSeries.apply(this,arguments)},Pie}));
/**
 * Poll the server to keep the session alive.
 *
 * @module     core/network
 * @copyright  2019 Damyon Wiese
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core/network",["jquery","core/ajax","core/config","core/notification","core/str"],(function($,Ajax,Config,Notification,Str){var started=!1,warningDisplayed=!1,keepAliveFrequency=0,requestTimeout=0,keepAliveMessage=!1,sessionTimeout=!1,checkFrequency=1e3*Math.min(Config.sessiontimeout/10,600),warningLimit=Config.sessiontimeoutwarning&gt;0?1e3*Config.sessiontimeoutwarning:2*checkFrequency,firstWait=Config.sessiontimeoutwarning&gt;0?Math.min(1e3*(Config.sessiontimeout-Config.sessiontimeoutwarning),5*checkFrequency):5*checkFrequency,timeoutSessionExpired=function(modal){sessionTimeout=!0,warningDisplayed=!1,closeModal(modal),displaySessionExpired()},closeModal=function(modal){modal.destroy()},displaySessionExpired=function(){return Ajax.call([{methodname:"core_session_time_remaining",args:{}}],!0,!0,!0)[0].then((function(args){return!(1e3*args.timeremaining&gt;warningLimit)&amp;&amp;Str.get_strings([{key:"sessionexpired",component:"error"},{key:"sessionerroruser",component:"error"},{key:"loginagain",component:"moodle"},{key:"cancel",component:"moodle"}]).then((function(strings){return Notification.confirm(strings[0],strings[1],strings[2],strings[3],(function(){return location.reload(),!0})),!0})).catch(Notification.exception)}))},touchSession=function(){return sessionTimeout?displaySessionExpired():Ajax.call([{methodname:"core_session_touch",args:{}}],!0,!0,!1,requestTimeout)[0].then((function(){return keepAliveFrequency&gt;0&amp;&amp;setTimeout(touchSession,keepAliveFrequency),!0})).catch((function(){Notification.alert("",keepAliveMessage)}))},checkSession=function(){return sessionTimeout=!1,Ajax.call([{methodname:"core_session_time_remaining",args:{}}],!0,!0,!0)[0].then((function(args){return!(args.userid&lt;=0)&amp;&amp;(args.timeremaining&lt;=0?displaySessionExpired():(1e3*args.timeremaining&lt;=warningLimit&amp;&amp;!warningDisplayed?(warningDisplayed=!0,Str.get_strings([{key:"norecentactivity",component:"moodle"},{key:"sessiontimeoutsoon",component:"moodle"},{key:"extendsession",component:"moodle"},{key:"cancel",component:"moodle"}]).then((function(strings){return Notification.confirm(strings[0],strings[1],strings[2],strings[3],(function(){return touchSession(),warningDisplayed=!1,setTimeout(checkSession,firstWait),!0}),(function(){setTimeout(checkSession,checkFrequency)}))})).then((modal=&gt;{setTimeout(timeoutSessionExpired,1e3*args.timeremaining,modal)})).catch(Notification.exception)):setTimeout(checkSession,checkFrequency),!0))}))},start=function(){keepAliveFrequency&gt;0?setTimeout(touchSession,keepAliveFrequency):setTimeout(checkSession,firstWait)};const isMoodleIframe=function(){if(window.parent===window)return!1;let parentUrl;try{parentUrl=window.parent.location.href}catch(e){return!1}return parentUrl.startsWith(M.cfg.wwwroot)};return{keepalive:async function(freq,timeout,identifier,component){started?window.console.warn("Ignoring session keep-alive. The core/network module was already initialised."):(started=!0,isMoodleIframe()?window.console.warn("Ignoring session keep-alive in this iframe inside another Moodle page."):(window.console.log("Starting Moodle session keep-alive."),keepAliveFrequency=1e3*freq,keepAliveMessage=await Str.get_string(identifier,component),requestTimeout=1e3*timeout,start()))},init:function(){started||(started=!0,isMoodleIframe()?window.console.log("Not starting Moodle session timeout warning in this iframe."):(window.console.log("Starting Moodle session timeout warning."),start()))}}}));
/**
 * Chart.js loader.
 *
 * @copyright  2016 Frédéric Massart - FMCorz.net
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core/chartjs",["core/chartjs-lazy"],(function(ChartJS){return ChartJS}));
define("core_availability/availability_more",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0;
/**
   * Show more action for availablity information.
   *
   * @module     core_availability/availability_more
   * @copyright  2021 Bas Brands &lt;bas@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */
const Selectors_regions={availability:'[data-region="availability-multiple"]'},Selectors_actions={showmorelink:'[data-action="showmore"]'},Selectors_classes={hidden:"d-none",visible:"d-block"},showMoreHandler=event=&gt;{const triggerElement=event.target.closest(Selectors_actions.showmorelink);if(null===triggerElement)return;const container=triggerElement.closest(Selectors_regions.availability);container.querySelectorAll("."+Selectors_classes.hidden).forEach((function(node){node.classList.remove(Selectors_classes.hidden)})),container.querySelectorAll("."+Selectors_classes.visible).forEach((function(node){node.classList.remove(Selectors_classes.visible),node.classList.add(Selectors_classes.hidden)})),event.preventDefault()};_exports.init=()=&gt;{const body=document.querySelector("body");body.dataset.showmoreactive||(document.addEventListener("click",showMoreHandler),body.dataset.showmoreactive=1)}}));
/**
 * This module updates the UI during an asynchronous
 * backup or restore process.
 *
 * @module     core_backup/async_backup
 * @copyright  2018 Matt Porritt &lt;mattp@catalyst-au.net&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.7
 */
define("core_backup/async_backup",["jquery","core/ajax","core/str","core/notification","core/templates"],(function($,ajax,Str,notification,Templates){var backupid,contextid,restoreurl,typeid,backupintervalid,allbackupintervalid,allcopyintervalid,Asyncbackup={},checkdelay=15e3;function updateElement(backupid,type,percentage){var percentagewidth=Math.round(percentage)+"%",elementbar=document.querySelectorAll("[data-"+type+"id="+CSS.escape(backupid)+"]")[0],percentagetext=percentage.toFixed(2)+"%";elementbar.setAttribute("aria-valuenow",percentagewidth),elementbar.style.width=percentagewidth,elementbar.innerHTML=percentagetext}function updateInterval(intervalid,callback,value){return clearInterval(intervalid),setInterval(callback,value)}function updateProgressAll(progress){progress.forEach((function(element){var percentage=100*element.progress,backupid=element.backupid,type=element.operation,elementbar=document.querySelectorAll("[data-"+type+"id="+CSS.escape(backupid)+"]")[0];800==element.status?(elementbar.classList.add("bg-success"),updateElement(backupid,type,percentage)):900==element.status?(elementbar.classList.add("bg-danger"),elementbar.classList.add("complete"),elementbar.classList.remove("bg-success"),updateElement(backupid,type,100)):1e3==element.status&amp;&amp;(elementbar.classList.add("bg-success"),elementbar.classList.add("complete"),updateElement(backupid,type,100),"backup"==type?function(backupid){var statuscell=$("#"+backupid+"_bar").parent().parent(),tablerow=statuscell.parent(),cellsiblings=statuscell.siblings(),timecell=cellsiblings[1],timevalue=$(timecell).text(),filenamecell=cellsiblings[0],filename=$(filenamecell).text();ajax.call([{methodname:"core_backup_get_async_backup_links_backup",args:{filename:filename,contextid:contextid,backupid:backupid}}])[0].done((function(response){var context={filename:filename,time:timevalue,size:response.filesize,fileurl:response.fileurl,restoreurl:response.restoreurl};Templates.render("core/async_backup_progress_row",context).then((function(html,js){Templates.replaceNodeContents(tablerow,html,js)})).fail((function(){notification.exception(new Error("Failed to load table row"))}))}))}(backupid):function(backupid){var statuscell=$("#"+backupid+"_bar").parent().parent(),tablerow=statuscell.parent(),cellsiblings=statuscell.siblings(),coursecell=cellsiblings[0],timecell=cellsiblings[1],timevalue=$(timecell).text();ajax.call([{methodname:"core_backup_get_async_backup_links_restore",args:{backupid:backupid,contextid:contextid}}])[0].done((function(response){var context={resourcename:$(coursecell).text(),restoreurl:response.restoreurl,time:timevalue};Templates.render("core/async_restore_progress_row",context).then((function(html,js){Templates.replaceNodeContents(tablerow,html,js)})).fail((function(){notification.exception(new Error("Failed to load table row"))}))}))}(backupid))}))}function updateProgressCopy(progress){progress.forEach((function(element){var percentage=100*element.progress,backupid=element.backupid,type=element.operation,elementbar=document.querySelectorAll("[data-"+type+"id="+CSS.escape(backupid)+"]")[0];if("restore"==type){let restorecell=elementbar.closest("tr").children[3];Str.get_string("restore").then((function(content){restorecell.innerHTML=content})).catch((function(){notification.exception(new Error("Failed to load string: restore"))}))}800==element.status?(elementbar.classList.add("bg-success"),updateElement(backupid,type,percentage)):900==element.status?(elementbar.classList.add("bg-danger"),elementbar.classList.add("complete"),elementbar.classList.remove("bg-success"),updateElement(backupid,type,100)):1e3==element.status&amp;&amp;"restore"==type&amp;&amp;(elementbar.classList.add("bg-success"),elementbar.classList.add("complete"),updateElement(backupid,type,100),function(backupid){var elementbar=document.querySelectorAll("[data-restoreid="+CSS.escape(backupid)+"]")[0],restorecourse=elementbar.closest("tr").children[1],coursename=restorecourse.innerHTML,courselink=document.createElement("a"),elementbarparent=elementbar.closest("td"),operation=elementbarparent.previousElementSibling;Str.get_string("complete").then((function(content){operation.innerHTML=content})).catch((function(){notification.exception(new Error("Failed to load string: complete"))})),Templates.render("core/async_copy_complete_cell",{}).then((function(html,js){Templates.replaceNodeContents(elementbarparent,html,js)})).fail((function(){notification.exception(new Error("Failed to load table cell"))})),ajax.call([{methodname:"core_backup_get_async_backup_links_restore",args:{backupid:backupid,contextid:0}}])[0].done((function(response){courselink.setAttribute("href",response.restoreurl),courselink.innerHTML=coursename,restorecourse.innerHTML=null,restorecourse.appendChild(courselink)})).fail((function(){notification.exception(new Error("Failed to update table row"))}))}(backupid))}))}function getBackupProgress(){ajax.call([{methodname:"core_backup_get_async_backup_progress",args:{backupids:[backupid],contextid:contextid}}],!0,!0,!1,2e3)[0].done((function(response){!function(progress){var stringRequests,percentage=100*progress.progress,type="backup",elementbar=document.querySelectorAll("[data-backupid="+CSS.escape(backupid)+"]")[0],elementstatus=$("#"+backupid+"_status"),elementdetail=$("#"+backupid+"_detail"),elementbutton=$("#"+backupid+"_button");if(800==progress.status){elementbar.classList.add("bg-success"),updateElement(backupid,type,percentage);var strProcessing="async"+typeid+"processing";Str.get_string(strProcessing,"backup").then((function(title){elementstatus.text(title)})).catch((function(){notification.exception(new Error("Failed to load string: backup "+strProcessing))}))}else if(900==progress.status)elementbar.classList.add("bg-danger"),elementbar.classList.remove("bg-success"),updateElement(backupid,type,100),stringRequests=[{key:"async"+typeid+"error",component:"backup"},{key:"async"+typeid+"errordetail",component:"backup"}],Str.get_strings(stringRequests).then((function(strings){elementstatus.text(strings[0]),elementdetail.text(strings[1])})).catch((function(){notification.exception(new Error("Failed to load string"))})),$(".backup_progress").children("span").removeClass("backup_stage_current"),$(".backup_progress").children("span").last().addClass("backup_stage_current"),clearInterval(backupintervalid);else if(1e3==progress.status){elementbar.classList.add("bg-success"),updateElement(backupid,type,100);var strComplete="async"+typeid+"complete";Str.get_string(strComplete,"backup").then((function(title){elementstatus.text(title)})).catch((function(){notification.exception(new Error("Failed to load string: backup "+strComplete))})),"restore"==typeid?ajax.call([{methodname:"core_backup_get_async_backup_links_restore",args:{backupid:backupid,contextid:contextid}}])[0].done((function(response){var strButton="async"+typeid+"completebutton",stringRequests=[{key:"async"+typeid+"completedetail",component:"backup",param:response.restoreurl},{key:strButton,component:"backup"}];Str.get_strings(stringRequests).then((function(strings){elementdetail.html(strings[0]),elementbutton.text(strings[1]),elementbutton.attr("href",response.restoreurl)})).catch((function(){notification.exception(new Error("Failed to load string"))}))})):(stringRequests=[{key:"async"+typeid+"completedetail",component:"backup",param:restoreurl},{key:"async"+typeid+"completebutton",component:"backup"}],Str.get_strings(stringRequests).then((function(strings){elementdetail.html(strings[0]),elementbutton.text(strings[1]),elementbutton.attr("href",restoreurl)})).catch((function(){notification.exception(new Error("Failed to load string"))}))),$(".backup_progress").children("span").removeClass("backup_stage_current"),$(".backup_progress").children("span").last().addClass("backup_stage_current"),clearInterval(backupintervalid)}}(response[0]),checkdelay=15e3,backupintervalid=updateInterval(backupintervalid,getBackupProgress,15e3)})).fail((function(){backupintervalid=updateInterval(backupintervalid,getBackupProgress,checkdelay*=1.5)}))}function getAllBackupProgress(){var backupids=[];$(".progress").find(".progress-bar").not(".complete").each((function(){backupids.push(this.id.substring(0,32))})),backupids.length&gt;0?ajax.call([{methodname:"core_backup_get_async_backup_progress",args:{backupids:backupids,contextid:contextid}}],!0,!0,!1,2e3)[0].done((function(response){updateProgressAll(response),checkdelay=15e3,allbackupintervalid=updateInterval(allbackupintervalid,getAllBackupProgress,15e3)})).fail((function(){allbackupintervalid=updateInterval(allbackupintervalid,getAllBackupProgress,checkdelay*=1.5)})):clearInterval(allbackupintervalid)}function getAllCopyProgress(){var copyids=[];$(".progress").find(".progress-bar[data-operation][data-backupid][data-restoreid]").not(".complete").each((function(){let progressvars={backupid:this.dataset.backupid,restoreid:this.dataset.restoreid,operation:this.dataset.operation};copyids.push(progressvars)})),copyids.length&gt;0?ajax.call([{methodname:"core_backup_get_copy_progress",args:{copies:copyids}}],!0,!0,!1,2e3)[0].done((function(response){updateProgressCopy(response),checkdelay=15e3,allcopyintervalid=updateInterval(allcopyintervalid,getAllCopyProgress,15e3)})).fail((function(){allcopyintervalid=updateInterval(allcopyintervalid,getAllCopyProgress,checkdelay*=1.5)})):clearInterval(allcopyintervalid)}return Asyncbackup.asyncBackupAllStatus=function(context){contextid=context,allbackupintervalid=setInterval(getAllBackupProgress,checkdelay)},Asyncbackup.asyncCopyAllStatus=function(){allcopyintervalid=setInterval(getAllCopyProgress,checkdelay)},Asyncbackup.asyncBackupStatus=function(backup,context,restore,type){backupid=backup,contextid=context,restoreurl=restore,typeid="backup"==type?"backup":"restore",$(".backup_progress").children("a").removeAttr("href"),backupintervalid=setInterval(getBackupProgress,checkdelay)},Asyncbackup}));
define("core_badges/selectors",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0;var name,value,_default={actions:{deletebackpack:(name="action",value="deletebackpack","[data-".concat(name,'="').concat(value,'"]'))},elements:{clearsearch:".input-group-append .clear-icon",main:"#backpacklist",backpackurl:"[data-backpackurl]"}};return _exports.default=_default,_exports.default}));
define("core_badges/backpackactions",["exports","jquery","core_badges/selectors","core/str","core/pending","core/modal_factory","core/modal_events","core/config"],(function(_exports,_jquery,_selectors,_str,_pending,_modal_factory,_modal_events,_config){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Action methods related to backpacks.
   *
   * @module     core_badges/backpackactions
   * @copyright  2020 Sara Arjona &lt;sara@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_jquery=_interopRequireDefault(_jquery),_selectors=_interopRequireDefault(_selectors),_pending=_interopRequireDefault(_pending),_modal_factory=_interopRequireDefault(_modal_factory),_modal_events=_interopRequireDefault(_modal_events),_config=_interopRequireDefault(_config);_exports.init=()=&gt;{const pendingPromise=new _pending.default,root=(0,_jquery.default)(_selectors.default.elements.main);registerListenerEvents(root),pendingPromise.resolve()};const registerListenerEvents=root=&gt;{root.on("click",_selectors.default.actions.deletebackpack,(async e=&gt;{e.preventDefault();const link=(0,_jquery.default)(e.currentTarget),modal=await buildModal(link);displayModal(modal,link)}))},buildModal=async link=&gt;{const backpackurl=link.closest(_selectors.default.elements.backpackurl).attr("data-backpackurl");return _modal_factory.default.create({title:await(0,_str.get_string)("delexternalbackpack","core_badges"),body:await(0,_str.get_string)("delexternalbackpackconfirm","core_badges",backpackurl),type:_modal_factory.default.types.SAVE_CANCEL})},displayModal=async(modal,link)=&gt;{modal.setSaveButtonText(await(0,_str.get_string)("delete","core")),modal.getRoot().on(_modal_events.default.save,(function(){window.location.href=link.attr("href")+"&amp;sesskey="+_config.default.sesskey+"&amp;confirm=1"})),modal.getRoot().on(_modal_events.default.hidden,(function(){modal.destroy()})),modal.show()}}));
define("core_block/events",["exports","core/event_dispatcher"],(function(_exports,_event_dispatcher){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.notifyBlockContentUpdated=_exports.eventTypes=void 0;
/**
   * Javascript events for the `core_block` subsystem.
   *
   * @module     core_block/events
   * @copyright  2021 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   * @since      4.0
   *
   * @example &lt;caption&gt;Example of listening to a block event.&lt;/caption&gt;
   * import {eventTypes as blockEventTypes} from 'core_block/events';
   *
   * document.addEventListener(blockEventTypes.blockContentUpdated, e =&gt; {
   *     window.console.log(e.target); // The HTMLElement relating to the block whose content was updated.
   *     window.console.log(e.detail.instanceId); // The instanceId of the block that was updated.
   * });
   */
const eventTypes={blockContentUpdated:"core_block/contentUpdated"};_exports.eventTypes=eventTypes;_exports.notifyBlockContentUpdated=element=&gt;(0,_event_dispatcher.dispatchEvent)(eventTypes.blockContentUpdated,{instanceId:element.dataset.instanceId},element);let legacyEventsRegistered=!1;legacyEventsRegistered||(Y.use("event","moodle-core-event",(Y=&gt;{document.addEventListener(eventTypes.blockContentUpdated,(e=&gt;{Y.Global.fire(M.core.event.BLOCK_CONTENT_UPDATED,{instanceid:e.detail.instanceId})}))})),legacyEventsRegistered=!0)}));
/**
 * This module is responsible for handle calendar day and upcoming view.
 *
 * @module     core_calendar/calendar
 * @copyright  2017 Simey Lameze &lt;simey@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core_calendar/calendar_view",["jquery","core/str","core/notification","core_calendar/selectors","core_calendar/events","core_calendar/view_manager","core_calendar/repository","core/modal_factory","core_calendar/modal_event_form","core/modal_events","core_calendar/crud"],(function($,Str,Notification,CalendarSelectors,CalendarEvents,CalendarViewManager,CalendarRepository,ModalFactory,ModalEventForm,ModalEvents,CalendarCrud){return{init:function(root,type){root=$(root),CalendarViewManager.init(root,type),function(root,type){var body=$("body");CalendarCrud.registerRemove(root);var reloadFunction="reloadCurrent"+type.charAt(0).toUpperCase()+type.slice(1);body.on(CalendarEvents.created,(function(){CalendarViewManager[reloadFunction](root)})),body.on(CalendarEvents.deleted,(function(){CalendarViewManager[reloadFunction](root)})),body.on(CalendarEvents.updated,(function(){CalendarViewManager[reloadFunction](root)})),root.on("change",CalendarSelectors.courseSelector,(function(){var courseId=$(this).val();CalendarViewManager[reloadFunction](root,courseId,null).then((function(){return root.find(CalendarSelectors.courseSelector).val(courseId)})).then((function(){CalendarViewManager.updateUrl("?view=upcoming&amp;course="+courseId)})).fail(Notification.exception)})),body.on(CalendarEvents.filterChanged,(function(e,data){var daysWithEvent=root.find(CalendarSelectors.eventType[data.type]);1==data.hidden?daysWithEvent.addClass("hidden"):daysWithEvent.removeClass("hidden"),CalendarViewManager.foldDayEvents(root)}));var eventFormPromise=CalendarCrud.registerEventFormModal(root);CalendarCrud.registerEditListeners(root,eventFormPromise)}(root,type)}}}));
/**
 * This module is responsible for the calendar filter.
 *
 * @module     core_calendar/calendar_filter
 * @copyright  2017 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core_calendar/calendar_filter",["jquery","core_calendar/selectors","core_calendar/events","core/str","core/templates"],(function($,CalendarSelectors,CalendarEvents,Str,Templates){var toggleFilter=function(target){var data=getFilterData(target);return data.hidden=!data.hidden,M.util.js_pending("core_calendar/calendar_filter:toggleFilter"),Str.get_string("eventtype"+data.eventtype,"calendar").then((function(nameStr){return data.name=nameStr,data.icon=!0,data.key="i/"+data.eventtype+"event",data.component="core",data})).then((function(context){return Templates.render("core_calendar/event_filter_key",context)})).then((function(html,js){return Templates.replaceNode(target,html,js)})).then((function(){fireFilterChangedEvent(data),M.util.js_complete("core_calendar/calendar_filter:toggleFilter")}))},fireFilterChangedEvent=function(data){M.util.js_pending("month-mini-filterChanged"),$("body").trigger(CalendarEvents.filterChanged,{type:data.eventtype,hidden:data.hidden}),M.util.js_complete("month-mini-filterChanged")},getFilterData=function(target){return{eventtype:target.data("eventtype"),hidden:target.data("eventtype-hidden")}};return{init:function(root){!function(root){root.on("click",CalendarSelectors.eventFilterItem,(function(e){var target=$(e.currentTarget);toggleFilter(target),e.preventDefault()})),$("body").on(CalendarEvents.viewUpdated,(function(){root.find(CalendarSelectors.eventFilterItem).each((function(i,filter){if((filter=$(filter)).data("eventtype-hidden")){var data=getFilterData(filter);fireFilterChangedEvent(data)}}))}))}(root=$(root))}}}));
/**
 * A javascript module to handle calendar drag and drop in the calendar
 * month view.
 *
 * @module     core_calendar/month_view_drag_drop
 * @copyright  2017 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core_calendar/month_view_drag_drop",["jquery","core/notification","core/str","core_calendar/events","core_calendar/drag_drop_data_store"],(function($,Notification,Str,CalendarEvents,DataStore){var SELECTORS_ROOT="[data-region='calendar']",SELECTORS_DRAGGABLE='[draggable="true"][data-region="event-item"]',SELECTORS_DROP_ZONE='[data-drop-zone="month-view-day"]',SELECTORS_WEEK='[data-region="month-view-week"]',ALL_CLASSES="bg-faded bg-danger text-white bg-primary text-white",registered=!1,getDropZoneFromEvent=function(e){var dropZone=$(e.target).closest(SELECTORS_DROP_ZONE);return dropZone.length?dropZone:null},isValidDropZone=function(dropZone){var dropTimestamp=dropZone.attr("data-day-timestamp"),minTimestart=DataStore.getMinTimestart(),maxTimestart=DataStore.getMaxTimestart();return!(minTimestart&amp;&amp;minTimestart&gt;dropTimestamp)&amp;&amp;!(maxTimestart&amp;&amp;maxTimestart&lt;dropTimestamp)},clearAllDropZonesState=function(){$(SELECTORS_ROOT).find(SELECTORS_DROP_ZONE).each((function(index,dropZone){(dropZone=$(dropZone)).removeClass(ALL_CLASSES)}))},updateHoverState=function(dropZone,hovered,count){void 0===count&amp;&amp;(count=DataStore.getDurationDays());var valid=isValidDropZone(dropZone);if(dropZone.removeClass(ALL_CLASSES),hovered?valid?dropZone.addClass("bg-primary text-white"):dropZone.addClass("bg-danger text-white"):(dropZone.removeClass("bg-primary text-white bg-danger text-white"),valid||dropZone.addClass("bg-faded")),--count&gt;0){var nextDropZone=dropZone.next();if(!nextDropZone.length){var nextWeek=dropZone.closest(SELECTORS_WEEK).next();nextWeek.length&amp;&amp;(nextDropZone=nextWeek.children(SELECTORS_DROP_ZONE).first())}nextDropZone.length&amp;&amp;updateHoverState(nextDropZone,hovered,count)}},updateAllDropZonesState=function(){$(SELECTORS_ROOT).find(SELECTORS_DROP_ZONE).each((function(index,dropZone){dropZone=$(dropZone),isValidDropZone(dropZone)||updateHoverState(dropZone,!1)}))},dragstartHandler=function(e){var draggableElement=$(e.target).closest(SELECTORS_DRAGGABLE);if(draggableElement.length){var eventId=draggableElement.find("[data-event-id]").attr("data-event-id"),minTimestart=draggableElement.attr("data-min-day-timestamp"),maxTimestart=draggableElement.attr("data-max-day-timestamp"),minError=draggableElement.attr("data-min-day-error"),maxError=draggableElement.attr("data-max-day-error"),duration=$(SELECTORS_ROOT+' [data-event-id="'+eventId+'"]').length;DataStore.setEventId(eventId),DataStore.setDurationDays(duration),minTimestart&amp;&amp;DataStore.setMinTimestart(minTimestart),maxTimestart&amp;&amp;DataStore.setMaxTimestart(maxTimestart),minError&amp;&amp;DataStore.setMinError(minError),maxError&amp;&amp;DataStore.setMaxError(maxError),e.dataTransfer.effectAllowed="move",e.dataTransfer.dropEffect="move",e.dataTransfer.setData("text/plain",eventId),e.dropEffect="move",updateAllDropZonesState()}},dragoverHandler=function(e){if(DataStore.hasEventId()){e.preventDefault();var dropZone=getDropZoneFromEvent(e);dropZone&amp;&amp;updateHoverState(dropZone,!0)}},dragleaveHandler=function(e){if(DataStore.hasEventId()){var dropZone=getDropZoneFromEvent(e);dropZone&amp;&amp;(updateHoverState(dropZone,!1),e.preventDefault())}},dropHandler=function(e){if(DataStore.hasEventId()){var dropZone=getDropZoneFromEvent(e);if(!dropZone)return DataStore.clearAll(),void clearAllDropZonesState();if(isValidDropZone(dropZone)){var eventId=DataStore.getEventId(),eventElement=$(SELECTORS_ROOT+' [data-event-id="'+eventId+'"]'),origin=null;eventElement.length&amp;&amp;(origin=eventElement.closest(SELECTORS_DROP_ZONE)),$("body").trigger(CalendarEvents.moveEvent,[eventId,origin,dropZone])}else{var message=function(dropZone){var dropTimestamp=dropZone.attr("data-day-timestamp"),minTimestart=DataStore.getMinTimestart(),maxTimestart=DataStore.getMaxTimestart();return minTimestart&amp;&amp;minTimestart&gt;dropTimestamp?DataStore.getMinError():maxTimestart&amp;&amp;maxTimestart&lt;dropTimestamp?DataStore.getMaxError():null}(dropZone);Str.get_string("errorinvaliddate","calendar").then((function(string){Notification.exception({name:string,message:message||string})}))}DataStore.clearAll(),clearAllDropZonesState(),e.preventDefault()}},dragendHandler=function(){DataStore.clearAll(),clearAllDropZonesState()},calendarMonthChangedHandler=function(){updateAllDropZonesState()};return{init:function(){registered||(document.addEventListener("dragstart",dragstartHandler,!1),document.addEventListener("dragover",dragoverHandler,!1),document.addEventListener("dragleave",dragleaveHandler,!1),document.addEventListener("drop",dropHandler,!1),document.addEventListener("dragend",dragendHandler,!1),$("body").on(CalendarEvents.monthChanged,calendarMonthChangedHandler),registered=!0)}}}));
/**
 * Contain the logic for the quick add or update event modal.
 *
 * @module     core_calendar/modal_quick_add_event
 * @copyright  2017 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core_calendar/modal_event_form",["jquery","core_form/events","core/str","core/notification","core/templates","core/custom_interaction_events","core/modal","core/modal_registry","core/fragment","core_calendar/events","core_calendar/repository"],(function($,FormEvents,Str,Notification,Templates,CustomEvents,Modal,ModalRegistry,Fragment,CalendarEvents,Repository){var registered=!1,SELECTORS_SAVE_BUTTON='[data-action="save"]',SELECTORS_LOADING_ICON_CONTAINER='[data-region="loading-icon-container"]',ModalEventForm=function(root){Modal.call(this,root),this.eventId=null,this.startTime=null,this.courseId=null,this.categoryId=null,this.contextId=null,this.reloadingBody=!1,this.reloadingTitle=!1,this.saveButton=this.getFooter().find(SELECTORS_SAVE_BUTTON)};return ModalEventForm.TYPE="core_calendar-modal_event_form",(ModalEventForm.prototype=Object.create(Modal.prototype)).constructor=ModalEventForm,ModalEventForm.prototype.setContextId=function(id){this.contextId=id},ModalEventForm.prototype.getContextId=function(){return this.contextId},ModalEventForm.prototype.setCourseId=function(id){this.courseId=id},ModalEventForm.prototype.getCourseId=function(){return this.courseId},ModalEventForm.prototype.setCategoryId=function(id){this.categoryId=id},ModalEventForm.prototype.getCategoryId=function(){return this.categoryId},ModalEventForm.prototype.hasCourseId=function(){return null!==this.courseId},ModalEventForm.prototype.hasCategoryId=function(){return null!==this.categoryId},ModalEventForm.prototype.setEventId=function(id){this.eventId=id},ModalEventForm.prototype.getEventId=function(){return this.eventId},ModalEventForm.prototype.hasEventId=function(){return null!==this.eventId},ModalEventForm.prototype.setStartTime=function(time){this.startTime=time},ModalEventForm.prototype.getStartTime=function(){return this.startTime},ModalEventForm.prototype.hasStartTime=function(){return null!==this.startTime},ModalEventForm.prototype.getForm=function(){return this.getBody().find("form")},ModalEventForm.prototype.disableButtons=function(){this.saveButton.prop("disabled",!0)},ModalEventForm.prototype.enableButtons=function(){this.saveButton.prop("disabled",!1)},ModalEventForm.prototype.reloadTitleContent=function(){return this.reloadingTitle||(this.reloadingTitle=!0,this.hasEventId()?this.titlePromise=Str.get_string("editevent","calendar"):this.titlePromise=Str.get_string("newevent","calendar"),this.titlePromise.then(function(string){return this.setTitle(string),string}.bind(this)).always(function(){this.reloadingTitle=!1}.bind(this)).fail(Notification.exception)),this.titlePromise},ModalEventForm.prototype.reloadBodyContent=function(formData){if(this.reloadingBody)return this.bodyPromise;this.reloadingBody=!0,this.disableButtons();var args={};return this.hasEventId()&amp;&amp;(args.eventid=this.getEventId()),this.hasStartTime()&amp;&amp;(args.starttime=this.getStartTime()),this.hasCourseId()&amp;&amp;(args.courseid=this.getCourseId()),this.hasCategoryId()&amp;&amp;(args.categoryid=this.getCategoryId()),void 0!==formData&amp;&amp;(args.formdata=formData),this.bodyPromise=Fragment.loadFragment("calendar","event_form",this.getContextId(),args),this.setBody(this.bodyPromise),this.bodyPromise.then(function(){this.enableButtons()}.bind(this)).fail(Notification.exception).always(function(){this.reloadingBody=!1}.bind(this)).fail(Notification.exception),this.bodyPromise},ModalEventForm.prototype.reloadAllContent=function(){return $.when(this.reloadTitleContent(),this.reloadBodyContent())},ModalEventForm.prototype.show=function(){this.reloadAllContent(),Modal.prototype.show.call(this)},ModalEventForm.prototype.hide=function(){Modal.prototype.hide.call(this),this.setEventId(null),this.setStartTime(null),this.setCourseId(null),this.setCategoryId(null)},ModalEventForm.prototype.getFormData=function(){return this.getForm().serialize()},ModalEventForm.prototype.save=function(){var invalid,loadingContainer=this.saveButton.find(SELECTORS_LOADING_ICON_CONTAINER);if((invalid=this.getForm().find('[aria-invalid="true"]')).length)return invalid.first().focus(),Promise.resolve();loadingContainer.removeClass("hidden"),this.disableButtons();var formData=this.getFormData();return Repository.submitCreateUpdateForm(formData).then(function(response){if(response.validationerror)this.reloadBodyContent(formData);else{var isExisting=this.hasEventId();this.hide(),isExisting?$("body").trigger(CalendarEvents.updated,[response.event]):$("body").trigger(CalendarEvents.created,[response.event])}}.bind(this)).always(function(){loadingContainer.addClass("hidden"),this.enableButtons()}.bind(this)).fail(Notification.exception)},ModalEventForm.prototype.registerEventListeners=function(){Modal.prototype.registerEventListeners.call(this),this.getModal().on(CustomEvents.events.activate,SELECTORS_SAVE_BUTTON,function(e,data){this.getForm().submit(),data.originalEvent.preventDefault(),e.stopPropagation()}.bind(this)),this.getModal().on("submit",function(e){FormEvents.notifyFormSubmittedByJavascript(this.getForm()[0]),this.save(),e.preventDefault(),e.stopPropagation()}.bind(this))},registered||(ModalRegistry.register(ModalEventForm.TYPE,ModalEventForm,"calendar/modal_event_form"),registered=!0),ModalEventForm}));
/**
 * This module is responsible for the calendar filter.
 *
 * @module     core_calendar/calendar_selectors
 * @copyright  2017 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core_calendar/selectors",[],(function(){return{eventFilterItem:"[data-action='filter-event-type']",eventType:{site:"[data-eventtype-site]",category:"[data-eventtype-category]",course:"[data-eventtype-course]",group:"[data-eventtype-group]",user:"[data-eventtype-user]",other:"[data-eventtype-other]"},popoverType:{site:"[data-popover-eventtype-site]",category:"[data-popover-eventtype-category]",course:"[data-popover-eventtype-course]",group:"[data-popover-eventtype-group]",user:"[data-popover-eventtype-user]",other:"[data-popover-eventtype-other]"},calendarPeriods:{month:"[data-period='month']"},courseSelector:'select[name="course"]',viewSelector:'div[data-region="view-selector"]',actions:{create:'[data-action="new-event-button"]',edit:'[data-action="edit"]',remove:'[data-action="delete"]',viewEvent:'[data-action="view-event"]',deleteSubscription:'[data-action="delete-subscription"]'},elements:{courseSelector:'select[name="course"]',dateContainer:".clickable.hasevent",dateContent:'[data-region="day-content"]',monthDetailed:".calendarmonth.calendartable"},today:".today",day:'[data-region="day"]',calendarMain:'[data-region="calendar"]',wrapper:".calendarwrapper",eventItem:'[data-type="event"]',links:{navLink:".calendarwrapper .arrow_link",eventLink:"[data-region='event-item']",miniDayLink:"[data-region='mini-day-link']"},containers:{loadingIcon:'[data-region="overlay-icon-container"]'},mainCalendar:".maincalendar .heightcontainer",fullCalendarView:"page-calendar-view"}}));
/**
 * This module is the highest level module for the calendar. It is
 * responsible for initialising all of the components required for
 * the calendar to run. It also coordinates the interaction between
 * components by listening for and responding to different events
 * triggered within the calendar UI.
 *
 * @module     core_calendar/calendar
 * @copyright  2017 Simey Lameze &lt;simey@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core_calendar/calendar",["jquery","core/ajax","core/str","core/templates","core/notification","core/custom_interaction_events","core/modal_events","core/modal_factory","core_calendar/modal_event_form","core_calendar/summary_modal","core_calendar/repository","core_calendar/events","core_calendar/view_manager","core_calendar/crud","core_calendar/selectors","core/config"],(function($,Ajax,Str,Templates,Notification,CustomEvents,ModalEvents,ModalFactory,ModalEventForm,SummaryModal,CalendarRepository,CalendarEvents,CalendarViewManager,CalendarCrud,CalendarSelectors,Config){var SELECTORS_DAY="[data-region='day']",SELECTORS_DAY_CONTENT="[data-region='day-content']",SELECTORS_LOADING_ICON=".loading-icon",SELECTORS_VIEW_DAY_LINK="[data-action='view-day-link']",SELECTORS_CALENDAR_MONTH_WRAPPER=".calendarwrapper",handleMoveEvent=function(e,eventId,originElement,destinationElement){var originTimestamp=null,destinationTimestamp=destinationElement.attr("data-day-timestamp");originElement&amp;&amp;(originTimestamp=originElement.attr("data-day-timestamp")),originElement&amp;&amp;originTimestamp==destinationTimestamp||Templates.render("core/loading",{}).then((function(html,js){destinationElement.find(SELECTORS_DAY_CONTENT).addClass("hidden"),Templates.appendNodeContents(destinationElement,html,js),originElement&amp;&amp;(originElement.find(SELECTORS_DAY_CONTENT).addClass("hidden"),Templates.appendNodeContents(originElement,html,js))})).then((function(){return CalendarRepository.updateEventStartDay(eventId,destinationTimestamp)})).then((function(){$("body").trigger(CalendarEvents.eventMoved,[eventId,originElement,destinationElement])})).always((function(){var destinationLoadingElement=destinationElement.find(SELECTORS_LOADING_ICON);if(destinationElement.find(SELECTORS_DAY_CONTENT).removeClass("hidden"),Templates.replaceNode(destinationLoadingElement,"",""),originElement){var originLoadingElement=originElement.find(SELECTORS_LOADING_ICON);originElement.find(SELECTORS_DAY_CONTENT).removeClass("hidden"),Templates.replaceNode(originLoadingElement,"","")}})).fail(Notification.exception)},registerEventListeners=function(root){const viewingFullCalendar=document.getElementById(CalendarSelectors.fullCalendarView);root.on("click",SELECTORS_VIEW_DAY_LINK,(function(e){var dayLink=$(e.target).closest(SELECTORS_VIEW_DAY_LINK),year=dayLink.data("year"),month=dayLink.data("month"),day=dayLink.data("day"),courseId=dayLink.data("courseid"),categoryId=dayLink.data("categoryid");const url="?view=day&amp;time="+dayLink.data("timestamp");viewingFullCalendar?CalendarViewManager.refreshDayContent(root,year,month,day,courseId,categoryId,root,"core_calendar/calendar_day").then((function(){return e.preventDefault(),CalendarViewManager.updateUrl(url)})).fail(Notification.exception):window.location.assign(Config.wwwroot+"/calendar/view.php"+url)})),root.on("change",CalendarSelectors.elements.courseSelector,(function(){var courseId=$(this).val();CalendarViewManager.reloadCurrentMonth(root,courseId,null).then((function(){return root.find(CalendarSelectors.elements.courseSelector).val(courseId)})).fail(Notification.exception)}));var eventFormPromise=CalendarCrud.registerEventFormModal(root),contextId=$(SELECTORS_CALENDAR_MONTH_WRAPPER).data("context-id");!function(root,eventFormModalPromise){var body=$("body");body.on(CalendarEvents.created,(function(){CalendarViewManager.reloadCurrentMonth(root)})),body.on(CalendarEvents.deleted,(function(){CalendarViewManager.reloadCurrentMonth(root)})),body.on(CalendarEvents.updated,(function(){CalendarViewManager.reloadCurrentMonth(root)})),body.on(CalendarEvents.editActionEvent,(function(e,url){window.location.assign(url)})),body.on(CalendarEvents.moveEvent,handleMoveEvent),body.on(CalendarEvents.eventMoved,(function(){CalendarViewManager.reloadCurrentMonth(root)})),CalendarCrud.registerEditListeners(root,eventFormModalPromise)}(root,eventFormPromise),contextId&amp;&amp;root.on("click",SELECTORS_DAY,(function(e){var target=$(e.target);const displayingSmallBlockCalendar="side-pre"===root.parents("aside").data("blockregion");if(!viewingFullCalendar&amp;&amp;displayingSmallBlockCalendar){const url="?view=day&amp;time="+target.closest(SELECTORS_DAY).data("day-timestamp");window.location.assign(Config.wwwroot+"/calendar/view.php"+url)}else{if(!target.closest(SELECTORS_VIEW_DAY_LINK).length){var startTime=$(this).attr("data-new-event-timestamp");eventFormPromise.then((function(modal){var wrapper=target.closest(CalendarSelectors.wrapper);modal.setCourseId(wrapper.data("courseid"));var categoryId=wrapper.data("categoryid");void 0!==categoryId&amp;&amp;modal.setCategoryId(categoryId),modal.setContextId(wrapper.data("contextId")),modal.setStartTime(startTime),modal.show()})).fail(Notification.exception)}}e.preventDefault()}))};return{init:function(root){root=$(root),CalendarViewManager.init(root),registerEventListeners(root)}}}));
/**
 * This module is the highest level module for the calendar. It is
 * responsible for initialising all of the components required for
 * the calendar to run. It also coordinates the interaction between
 * components by listening for and responding to different events
 * triggered within the calendar UI.
 *
 * @module     core_calendar/calendar_mini
 * @copyright  2017 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core_calendar/calendar_mini",["jquery","core_calendar/selectors","core_calendar/events","core_calendar/view_manager"],(function($,CalendarSelectors,CalendarEvents,CalendarViewManager){var reloadMonth=function(e){var root=e.data,body=$("body"),namespace="."+root.attr("id");root.is(":visible")?CalendarViewManager.reloadCurrentMonth(root):(body.off(CalendarEvents.created+namespace),body.off(CalendarEvents.deleted+namespace),body.off(CalendarEvents.updated+namespace),body.off(CalendarEvents.eventMoved+namespace))};return{init:function(root,loadOnInit){root=$(root),CalendarViewManager.init(root),function(root){$("body").on(CalendarEvents.filterChanged,(function(e,data){root.find(CalendarSelectors.eventType[data.type]).toggleClass("calendar_event_"+data.type,!data.hidden)}));var namespace="."+root.attr("id");$("body").on("change"+namespace,CalendarSelectors.elements.courseSelector,(function(){if(root.is(":visible")){var courseId=$(this).val();CalendarViewManager.reloadCurrentMonth(root,courseId,null)}else $("body").off("change"+namespace)}))}(root),function(root){var body=$("body"),namespace="."+root.attr("id");body.on(CalendarEvents.created+namespace,root,reloadMonth),body.on(CalendarEvents.deleted+namespace,root,reloadMonth),body.on(CalendarEvents.updated+namespace,root,reloadMonth),body.on(CalendarEvents.eventMoved+namespace,root,reloadMonth)}(root),loadOnInit&amp;&amp;CalendarViewManager.reloadCurrentMonth(root)}}}));
define("core_calendar/repository",["exports","core/ajax"],(function(_exports,_ajax){var obj;
/**
   * A javascript module to handle calendar ajax actions.
   *
   * @module     core_calendar/repository
   * @copyright  2017 Simey Lameze &lt;lameze@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.updateEventStartDay=_exports.submitCreateUpdateForm=_exports.getEventById=_exports.getCourseGroupsData=_exports.getCalendarUpcomingData=_exports.getCalendarMonthData=_exports.getCalendarDayData=_exports.deleteSubscription=_exports.deleteEvent=void 0,_ajax=(obj=_ajax)&amp;&amp;obj.__esModule?obj:{default:obj};_exports.deleteEvent=function(eventId){let deleteSeries=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]&amp;&amp;arguments[1];const request={methodname:"core_calendar_delete_calendar_events",args:{events:[{eventid:eventId,repeat:deleteSeries}]}};return _ajax.default.call([request])[0]};_exports.getEventById=eventId=&gt;{const request={methodname:"core_calendar_get_calendar_event_by_id",args:{eventid:eventId}};return _ajax.default.call([request])[0]};_exports.submitCreateUpdateForm=formData=&gt;{const request={methodname:"core_calendar_submit_create_update_form",args:{formdata:formData}};return _ajax.default.call([request])[0]};_exports.getCalendarMonthData=function(year,month,courseId,categoryId,includeNavigation,mini){let day=arguments.length&gt;6&amp;&amp;void 0!==arguments[6]?arguments[6]:1,view=arguments.length&gt;7&amp;&amp;void 0!==arguments[7]?arguments[7]:"month";const request={methodname:"core_calendar_get_calendar_monthly_view",args:{year:year,month:month,courseid:courseId,categoryid:categoryId,includenavigation:includeNavigation,mini:mini,day:day,view:view}};return _ajax.default.call([request])[0]};_exports.getCalendarDayData=(year,month,day,courseId,categoryId)=&gt;{const request={methodname:"core_calendar_get_calendar_day_view",args:{year:year,month:month,day:day,courseid:courseId,categoryid:categoryId}};return _ajax.default.call([request])[0]};_exports.updateEventStartDay=(eventId,dayTimestamp)=&gt;{const request={methodname:"core_calendar_update_event_start_day",args:{eventid:eventId,daytimestamp:dayTimestamp}};return _ajax.default.call([request])[0]};_exports.getCalendarUpcomingData=(courseId,categoryId)=&gt;{const request={methodname:"core_calendar_get_calendar_upcoming_view",args:{courseid:courseId,categoryid:categoryId}};return _ajax.default.call([request])[0]};_exports.getCourseGroupsData=courseId=&gt;{const request={methodname:"core_group_get_course_groups",args:{courseid:courseId}};return _ajax.default.call([request])[0]};_exports.deleteSubscription=subscriptionId=&gt;{const request={methodname:"core_calendar_delete_subscription",args:{subscriptionid:subscriptionId}};return _ajax.default.call([request])[0]}}));
define("core_calendar/export",["exports","core/copy_to_clipboard"],(function(_exports,_copy_to_clipboard){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0;
/**
   * A javascript module to enhance the calendar export form.
   *
   * @module     core_calendar/export
   * @copyright  2021 Jun Pataleta
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */
const selectors_copyUrlId="copyexporturl";_exports.init=()=&gt;{const copyUrl=document.getElementById(selectors_copyUrlId);copyUrl.removeAttribute("disabled"),copyUrl.focus()}}));
/**
 * A javascript module to handle summary modal.
 *
 * @module     core_calendar/summary_modal
 * @copyright  2017 Simey Lameze &lt;simey@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core_calendar/summary_modal",["jquery","core/str","core/notification","core/custom_interaction_events","core/modal","core/modal_registry","core/modal_factory","core/modal_events","core_calendar/repository","core_calendar/events","core_calendar/crud"],(function($,Str,Notification,CustomEvents,Modal,ModalRegistry,ModalFactory,ModalEvents,CalendarRepository,CalendarEvents,CalendarCrud){var registered=!1,SELECTORS_ROOT="[data-region='summary-modal-container']",SELECTORS_EDIT_BUTTON='[data-action="edit"]',SELECTORS_DELETE_BUTTON='[data-action="delete"]',ModalEventSummary=function(root){Modal.call(this,root)};return ModalEventSummary.TYPE="core_calendar-event_summary",(ModalEventSummary.prototype=Object.create(Modal.prototype)).constructor=ModalEventSummary,ModalEventSummary.prototype.getEditButton=function(){return void 0===this.editButton&amp;&amp;(this.editButton=this.getFooter().find(SELECTORS_EDIT_BUTTON)),this.editButton},ModalEventSummary.prototype.getDeleteButton=function(){return void 0===this.deleteButton&amp;&amp;(this.deleteButton=this.getFooter().find(SELECTORS_DELETE_BUTTON)),this.deleteButton},ModalEventSummary.prototype.getEventId=function(){return this.getBody().find(SELECTORS_ROOT).attr("data-event-id")},ModalEventSummary.prototype.getEventTitle=function(){return this.getBody().find(SELECTORS_ROOT).attr("data-event-title")},ModalEventSummary.prototype.getEventCount=function(){return this.getBody().find(SELECTORS_ROOT).attr("data-event-count")},ModalEventSummary.prototype.getEditUrl=function(){return this.getBody().find(SELECTORS_ROOT).attr("data-edit-url")},ModalEventSummary.prototype.isActionEvent=function(){return"true"==this.getBody().find(SELECTORS_ROOT).attr("data-action-event")},ModalEventSummary.prototype.registerEventListeners=function(){Modal.prototype.registerEventListeners.call(this),M.util.js_pending("core_calendar/summary_modal:registerEventListeners:bodyRendered"),this.getRoot().on(ModalEvents.bodyRendered,function(){this.getModal().data({eventTitle:this.getEventTitle(),eventId:this.getEventId(),eventCount:this.getEventCount()}).attr("data-type","event"),CalendarCrud.registerRemove(this.getModal()),M.util.js_complete("core_calendar/summary_modal:registerEventListeners:bodyRendered")}.bind(this)),$("body").on(CalendarEvents.deleted,function(){this.hide()}.bind(this)),CustomEvents.define(this.getEditButton(),[CustomEvents.events.activate]),this.getEditButton().on(CustomEvents.events.activate,function(e,data){this.isActionEvent()?$("body").trigger(CalendarEvents.editActionEvent,[this.getEditUrl()]):$("body").trigger(CalendarEvents.editEvent,[this.getEventId()]),this.hide(),e.preventDefault(),e.stopPropagation(),data.originalEvent.preventDefault(),data.originalEvent.stopPropagation()}.bind(this))},registered||(ModalRegistry.register(ModalEventSummary.TYPE,ModalEventSummary,"core_calendar/event_summary_modal"),registered=!0),ModalEventSummary}));
/**
 * A module to handle CRUD operations within the UI.
 *
 * @module     core_calendar/crud
 * @copyright  2017 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core_calendar/crud",["jquery","core/str","core/notification","core/custom_interaction_events","core/modal","core/modal_registry","core/modal_factory","core/modal_events","core_calendar/modal_event_form","core_calendar/repository","core_calendar/events","core_calendar/modal_delete","core_calendar/selectors","core/pending"],(function($,Str,Notification,CustomEvents,Modal,ModalRegistry,ModalFactory,ModalEvents,ModalEventForm,CalendarRepository,CalendarEvents,ModalDelete,CalendarSelectors,Pending){return{registerRemove:function(root){root.on("click",CalendarSelectors.actions.remove,(function(e){var eventSource=$(this).closest(CalendarSelectors.eventItem);!function(eventId,eventTitle,eventCount){var deletePromise,pendingPromise=new Pending("core_calendar/crud:confirmDeletion"),deleteStrings=[{key:"deleteevent",component:"calendar"}],isRepeatedEvent=(eventCount=parseInt(eventCount,10))&gt;1;isRepeatedEvent?(deleteStrings.push({key:"confirmeventseriesdelete",component:"calendar",param:{name:eventTitle,count:eventCount}}),deletePromise=ModalFactory.create({type:ModalDelete.TYPE})):(deleteStrings.push({key:"confirmeventdelete",component:"calendar",param:eventTitle}),deletePromise=ModalFactory.create({type:ModalFactory.types.SAVE_CANCEL}));var stringsPromise=Str.get_strings(deleteStrings);$.when(stringsPromise,deletePromise).then((function(strings,deleteModal){return deleteModal.setRemoveOnClose(!0),deleteModal.setTitle(strings[0]),deleteModal.setBody(strings[1]),isRepeatedEvent||deleteModal.setSaveButtonText(strings[0]),deleteModal.show(),deleteModal.getRoot().on(ModalEvents.save,(function(){var pendingPromise=new Pending("calendar/crud:initModal:deletedevent");CalendarRepository.deleteEvent(eventId,!1).then((function(){$("body").trigger(CalendarEvents.deleted,[eventId,!1])})).then(pendingPromise.resolve).catch(Notification.exception)})),deleteModal.getRoot().on(CalendarEvents.deleteAll,(function(){var pendingPromise=new Pending("calendar/crud:initModal:deletedallevent");CalendarRepository.deleteEvent(eventId,!0).then((function(){$("body").trigger(CalendarEvents.deleted,[eventId,!0])})).then(pendingPromise.resolve).catch(Notification.exception)})),deleteModal})).then((function(modal){return pendingPromise.resolve(),modal})).catch(Notification.exception)}(eventSource.data("eventId"),eventSource.data("eventTitle"),eventSource.data("eventCount")),e.preventDefault()}))},registerEditListeners:function(root,eventFormModalPromise){var pendingPromise=new Pending("core_calendar/crud:registerEditListeners");return eventFormModalPromise.then((function(modal){return $("body").on(CalendarEvents.editEvent,(function(e,eventId){var target=root.find("[data-event-id=".concat(eventId,"]")),calendarWrapper=root.find(CalendarSelectors.wrapper);modal.setEventId(eventId),modal.setContextId(calendarWrapper.data("contextId")),modal.setReturnElement(target),modal.show(),e.stopImmediatePropagation()})),modal})).then((function(modal){return pendingPromise.resolve(),modal})).catch(Notification.exception)},registerEventFormModal:function(root){var eventFormPromise=ModalFactory.create({type:ModalEventForm.TYPE,large:!0});return root.on("click",CalendarSelectors.actions.create,(function(e){eventFormPromise.then((function(modal){var wrapper=root.find(CalendarSelectors.wrapper),categoryId=wrapper.data("categoryid");void 0!==categoryId&amp;&amp;modal.setCategoryId(categoryId);var today=root.find(CalendarSelectors.today),firstDay=root.find(CalendarSelectors.day);!today.length&amp;&amp;firstDay.length&amp;&amp;modal.setStartTime(firstDay.data("newEventTimestamp")),modal.setContextId(wrapper.data("contextId")),modal.setCourseId(wrapper.data("courseid")),modal.show()})).fail(Notification.exception),e.preventDefault()})),root.on("click",CalendarSelectors.actions.edit,(function(e){e.preventDefault();var target=$(e.currentTarget),calendarWrapper=target.closest(CalendarSelectors.wrapper),eventWrapper=target.closest(CalendarSelectors.eventItem);eventFormPromise.then((function(modal){modal.setEventId(eventWrapper.data("eventId")),modal.setContextId(calendarWrapper.data("contextId")),modal.setCourseId(eventWrapper.data("courseId")),modal.show(),e.stopImmediatePropagation()})).fail(Notification.exception)})),eventFormPromise}}}));
/**
 * A javascript module to store calendar drag and drop data.
 *
 * This module is unfortunately required because of the limitations
 * of the HTML5 drag and drop API and it's ability to provide data
 * between the different stages of the drag/drop lifecycle.
 *
 * @module     core_calendar/drag_drop_data_store
 * @copyright  2017 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core_calendar/drag_drop_data_store",[],(function(){var eventId=null,durationDays=null,minTimestart=null,maxTimestart=null,minError=null,maxError=null,setEventId=function(id){eventId=id},setDurationDays=function(days){durationDays=days},setMinTimestart=function(timestamp){minTimestart=timestamp},setMaxTimestart=function(timestamp){maxTimestart=timestamp},setMinError=function(message){minError=message},setMaxError=function(message){maxError=message};return{setEventId:setEventId,getEventId:function(){return eventId},hasEventId:function(){return null!==eventId},setDurationDays:setDurationDays,getDurationDays:function(){return durationDays},setMinTimestart:setMinTimestart,getMinTimestart:function(){return minTimestart},hasMinTimestart:function(){return null!==minTimestart},setMaxTimestart:setMaxTimestart,getMaxTimestart:function(){return maxTimestart},hasMaxTimestart:function(){return null!==maxTimestart},setMinError:setMinError,getMinError:function(){return minError},setMaxError:setMaxError,getMaxError:function(){return maxError},clearAll:function(){setEventId(null),setDurationDays(null),setMinTimestart(null),setMaxTimestart(null),setMinError(null),setMaxError(null)}}}));
/**
 * A javascript module to handle calendar drag and drop in the calendar
 * month view navigation.
 *
 * This code is run each time the calendar month view is re-rendered. We
 * only register the event handlers once per page load so that the in place
 * DOM updates that happen on month change don't continue to register handlers.
 *
 * @module     core_calendar/month_navigation_drag_drop
 * @copyright  2017 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core_calendar/month_navigation_drag_drop",["jquery","core_calendar/drag_drop_data_store"],(function($,DataStore){var SELECTORS_DRAGGABLE='[draggable="true"][data-region="event-item"]',SELECTORS_DROP_ZONE='[data-drop-zone="nav-link"]',registered=!1,hoverTimer=null,root=null,updateHoverState=function(target,hovered){hovered?target.addClass("bg-primary text-white"):target.removeClass("bg-primary text-white")},addDropZoneIndicator=function(){root.find(SELECTORS_DROP_ZONE).addClass("drop-target")},removeDropZoneIndicator=function(){root.find(SELECTORS_DROP_ZONE).removeClass("drop-target")},getTargetFromEvent=function(e){var target=$(e.target).closest(SELECTORS_DROP_ZONE);return target.length?target:null},dragstartHandler=function(e){$(e.target).closest(SELECTORS_DRAGGABLE).length&amp;&amp;addDropZoneIndicator()},dragoverHandler=function(e){if(DataStore.hasEventId()){e.preventDefault();var target=getTargetFromEvent(e);target&amp;&amp;DataStore.hasEventId()&amp;&amp;(hoverTimer||(hoverTimer=setTimeout((function(){target.click(),hoverTimer=null}),1e3)),updateHoverState(target,!0),removeDropZoneIndicator())}},dragleaveHandler=function(e){if(DataStore.hasEventId()){var target=getTargetFromEvent(e);target&amp;&amp;(hoverTimer&amp;&amp;(clearTimeout(hoverTimer),hoverTimer=null),updateHoverState(target,!1),addDropZoneIndicator(),e.preventDefault())}},dropHandler=function(e){if(DataStore.hasEventId()){removeDropZoneIndicator();var target=getTargetFromEvent(e);target&amp;&amp;(updateHoverState(target,!1),e.preventDefault())}};return{init:function(rootElement){registered||(document.addEventListener("dragstart",dragstartHandler,!1),document.addEventListener("dragover",dragoverHandler,!1),document.addEventListener("dragleave",dragleaveHandler,!1),document.addEventListener("drop",dropHandler,!1),document.addEventListener("dragend",removeDropZoneIndicator,!1),registered=!0),root=$(rootElement),DataStore.hasEventId()&amp;&amp;addDropZoneIndicator()}}}));
/**
 * Contain the events the calendar component can fire.
 *
 * @module     core_calendar/events
 * @copyright  2017 Simey Lameze &lt;simey@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core_calendar/events",[],(function(){return{created:"calendar-events:created",deleted:"calendar-events:deleted",deleteAll:"calendar-events:delete_all",updated:"calendar-events:updated",editEvent:"calendar-events:edit_event",editActionEvent:"calendar-events:edit_action_event",eventMoved:"calendar-events:event_moved",dayChanged:"calendar-events:day_changed",monthChanged:"calendar-events:month_changed",moveEvent:"calendar-events:move_event",filterChanged:"calendar-events:filter_changed",courseChanged:"calendar-events:course_changed",viewUpdated:"calendar-events:view_updated"}}));
define("core_calendar/manage_subscriptions",["exports","core_calendar/selectors","core_calendar/repository","core/modal_factory","core/modal_events","core/notification","core/prefetch","core/str","core/local/inplace_editable/events"],(function(_exports,CalendarSelectors,CalendarRepository,Modal,ModalEvents,_notification,_prefetch,_str,_events){var obj;function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}
/**
   * A module to handle Delete/Update operations of the manage subscription page.
   *
   * @module core_calendar/manage_subscriptions
   * @copyright 2021 Huong Nguyen &lt;huongnv13@gmail.com&gt;
   * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   * @since 4.0
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,CalendarSelectors=_interopRequireWildcard(CalendarSelectors),CalendarRepository=_interopRequireWildcard(CalendarRepository),Modal=_interopRequireWildcard(Modal),ModalEvents=_interopRequireWildcard(ModalEvents),_prefetch=(obj=_prefetch)&amp;&amp;obj.__esModule?obj:{default:obj};const getSubscriptionName=element=&gt;element.closest("tr").dataset.subname,registerEventListeners=()=&gt;{document.addEventListener("click",(e=&gt;{const deleteAction=e.target.closest(CalendarSelectors.actions.deleteSubscription);if(deleteAction){e.preventDefault();((element,messageCode)=&gt;{const subscriptionName=getSubscriptionName(element);return Modal.create({type:Modal.types.SAVE_CANCEL,title:(0,_str.get_string)("confirmation","admin"),body:(0,_str.get_string)(messageCode,"calendar",subscriptionName),buttons:{save:(0,_str.get_string)("yes")}}).then((modal=&gt;(modal.getRoot().on(ModalEvents.hidden,(()=&gt;{element.focus()})),modal.show(),modal)))})(deleteAction,"confirmsubscriptiondelete").then((modal=&gt;(modal.getRoot().on(ModalEvents.save,(()=&gt;{const subscriptionId=parseInt(deleteAction.closest("tr").dataset.subid);CalendarRepository.deleteSubscription(subscriptionId).then((data=&gt;{const response=(async(element,data)=&gt;{const subscriptionName=getSubscriptionName(element),message=data.status?await(0,_str.get_string)("subscriptionremoved","calendar",subscriptionName):data.warnings[0].message,type=data.status?"info":"error";return(0,_notification.addNotification)({message:message,type:type})})(deleteAction,data);return response.then((()=&gt;{const subscriptionRow=(subscriptionId=&gt;document.querySelector('tr[data-subid="'.concat(subscriptionId,'"]')))(subscriptionId);return subscriptionRow.remove()}))})).catch(_notification.exception)})),modal))).catch(_notification.exception)}})),document.addEventListener(_events.eventTypes.elementUpdated,(e=&gt;{"core_calendar"==e.target.getAttribute("data-component")&amp;&amp;(0,_notification.fetchNotifications)()}))};_exports.init=()=&gt;{_prefetch.default.prefetchStrings("moodle",["yes"]),_prefetch.default.prefetchStrings("core_admin",["confirmation"]),_prefetch.default.prefetchStrings("core_calendar",["confirmsubscriptiondelete","subscriptionremoved"]),registerEventListeners()}}));
define("core_calendar/popover",["theme_boost/popover","jquery","core_calendar/selectors"],(function(_popover,_jquery,CalendarSelectors){var obj;
/**
   * Javascript popover for the `core_calendar` subsystem.
   *
   * @module core_calendar/popover
   * @copyright 2021 Huong Nguyen &lt;huongnv13@gmail.com&gt;
   * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   * @since 4.0
   */function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}_jquery=(obj=_jquery)&amp;&amp;obj.__esModule?obj:{default:obj},CalendarSelectors=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}(CalendarSelectors);const isPopoverConfigured=new Map,showPopover=target=&gt;{if(!isPopoverConfigured.has(target)){const dateEle=(0,_jquery.default)(target);dateEle.popover({trigger:"manual",placement:"top",html:!0,content:()=&gt;{const source=dateEle.find(CalendarSelectors.elements.dateContent),content=(0,_jquery.default)("&lt;div&gt;");if(source.length){const temptContent=source.find(".hidden").clone(!1);content.html(temptContent.html())}return content.html()}}),isPopoverConfigured.set(target,!0)}var dateContainer;dateContainer=target,"none"===window.getComputedStyle(dateContainer.querySelector(CalendarSelectors.elements.dateContent)).display&amp;&amp;((0,_jquery.default)(target).popover("show"),target.addEventListener("mouseleave",hidePopover),target.addEventListener("focusout",hidePopover))},hidePopover=e=&gt;{const target=e.target,dateContainer=e.target.closest(CalendarSelectors.elements.dateContainer);if(dateContainer&amp;&amp;isPopoverConfigured.has(dateContainer)){const isTargetActive=target.contains(document.activeElement),isTargetHover=target.matches(":hover");isTargetActive||isTargetHover||((0,_jquery.default)(dateContainer).popover("hide"),dateContainer.removeEventListener("mouseleave",hidePopover),dateContainer.removeEventListener("focusout",hidePopover))}};let listenersRegistered=!1;listenersRegistered||((()=&gt;{const showPopoverHandler=e=&gt;{const dateContainer=e.target.closest(CalendarSelectors.elements.dateContainer);dateContainer&amp;&amp;(e.preventDefault(),showPopover(dateContainer))};document.addEventListener("mouseover",showPopoverHandler),document.addEventListener("focusin",showPopoverHandler)})(),listenersRegistered=!0)}));
/**
 * This module handles display of multiple mini calendars in a view, and
 * movement through them.
 *
 * @deprecated since 4.0 MDL-72810.
 * @todo       MDL-73117 This will be deleted in Moodle 4.4.
 * @module     core_calendar/calendar_threemonth
 * @copyright  2017 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core_calendar/calendar_threemonth",["jquery","core/notification","core_calendar/selectors","core_calendar/events","core/templates","core_calendar/view_manager"],(function($,Notification,CalendarSelectors,CalendarEvents,Templates,CalendarViewManager){return{init:function(root){!function(root){$("body").on([CalendarEvents.monthChanged,CalendarEvents.dayChanged].join(" "),(function(e,year,month,courseId,categoryId){root.queue((function(next){return processRequest(e,year,month,courseId,categoryId).then((function(){return next()})).fail(Notification.exception)}))}));var processRequest=function(e,year,month,courseId,categoryId){var newParent=root.find('[data-year="'+year+'"][data-month="'+month+'"]').closest(CalendarSelectors.calendarPeriods.month),allMonths=root.find(CalendarSelectors.calendarPeriods.month),previousMonth=$(allMonths[0]),nextMonth=$(allMonths[2]),placeHolder=$("&lt;span&gt;");placeHolder.attr("data-template","core_calendar/threemonth_month"),placeHolder.attr("data-includenavigation",!1),placeHolder.attr("data-mini",!0);var requestYear,requestMonth,oldMonth,placeHolderContainer=$("&lt;div&gt;");if(placeHolderContainer.hide(),placeHolderContainer.append(placeHolder),newParent.is(previousMonth))placeHolderContainer.insertBefore(previousMonth),requestYear=previousMonth.data("previousYear"),requestMonth=previousMonth.data("previousMonth"),oldMonth=nextMonth;else{if(!newParent.is(nextMonth))return $.Deferred().resolve();placeHolderContainer.insertAfter(nextMonth),requestYear=nextMonth.data("nextYear"),requestMonth=nextMonth.data("nextMonth"),oldMonth=previousMonth}return CalendarViewManager.refreshMonthContent(placeHolder,requestYear,requestMonth,courseId,categoryId,placeHolder).then((function(){var slideUpPromise=$.Deferred(),slideDownPromise=$.Deferred();return oldMonth.slideUp("fast",(function(){$(this).remove(),slideUpPromise.resolve()})),placeHolderContainer.slideDown("fast",(function(){slideDownPromise.resolve()})),$.when(slideUpPromise,slideDownPromise)}))};root.on("click",CalendarSelectors.links.miniDayLink,(function(e){var miniDayLink=$(e.target),year=miniDayLink.data("year"),month=miniDayLink.data("month"),day=miniDayLink.text(),courseId=miniDayLink.data("courseid"),categoryId=miniDayLink.data("categoryid"),calendarRoot=$("body").find(CalendarSelectors.calendarMain);CalendarViewManager.refreshDayContent(calendarRoot,year,month,day,courseId,categoryId,calendarRoot.find('[id^="calendar-"][data-template^="core_calendar/"]'),"core_calendar/calendar_day"),e.preventDefault(),CalendarViewManager.updateUrl("?view=day")}))}(root=$(root))}}}));
define("core_calendar/view_manager",["exports","jquery","core/templates","core/notification","core_calendar/repository","core_calendar/events","core_calendar/selectors","core/modal_factory","core/modal_events","core_calendar/summary_modal","core/custom_interaction_events","core/str","core/pending","core/prefetch"],(function(_exports,_jquery,_templates,_notification,CalendarRepository,_events,CalendarSelectors,_modal_factory,_modal_events,_summary_modal,_custom_interaction_events,_str,_pending,_prefetch){function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * A javascript module to handler calendar view changes.
   *
   * @module     core_calendar/view_manager
   * @copyright  2017 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.updateUrl=_exports.reloadCurrentUpcoming=_exports.reloadCurrentMonth=_exports.reloadCurrentDay=_exports.registerEventListenersForMonthDetailed=_exports.refreshMonthContent=_exports.refreshDayContent=_exports.init=_exports.foldDayEvents=_exports.changeMonth=_exports.changeDay=void 0,_jquery=_interopRequireDefault(_jquery),_templates=_interopRequireDefault(_templates),_notification=_interopRequireDefault(_notification),CalendarRepository=_interopRequireWildcard(CalendarRepository),_events=_interopRequireDefault(_events),CalendarSelectors=_interopRequireWildcard(CalendarSelectors),_modal_factory=_interopRequireDefault(_modal_factory),_modal_events=_interopRequireDefault(_modal_events),_summary_modal=_interopRequireDefault(_summary_modal),_custom_interaction_events=_interopRequireDefault(_custom_interaction_events),_pending=_interopRequireDefault(_pending);const foldDayEvents=()=&gt;{const days=(0,_jquery.default)(CalendarSelectors.elements.monthDetailed).find(CalendarSelectors.day);0!==days.length&amp;&amp;days.each((function(){const dayContainer=(0,_jquery.default)(this),eventsSelector="".concat(CalendarSelectors.elements.dateContent," ul li[data-event-eventtype]"),filteredEventsSelector="".concat(CalendarSelectors.elements.dateContent,' ul li[data-event-filtered="true"]'),moreEventsSelector="".concat(CalendarSelectors.elements.dateContent,' [data-action="view-more-events"]'),events=dayContainer.find(eventsSelector);if(0===events.length)return;const numberOfFiltered=dayContainer.find(filteredEventsSelector).length,numberOfEvents=events.length-numberOfFiltered;let count=1;events.each((function(){const event=(0,_jquery.default)(this);"true"!==event.attr("data-event-filtered")?count&gt;5-(5===numberOfEvents?0:1)?(event.attr("data-event-folded","true"),event.hide()):(event.attr("data-event-folded","false"),event.show(),count++):event.attr("data-event-folded","false")}));const moreEventsLink=dayContainer.find(moreEventsSelector);if(numberOfEvents&gt;5){const numberOfHiddenEvents=numberOfEvents-5+1;moreEventsLink.show(),(0,_str.get_string)("moreevents","calendar",numberOfHiddenEvents).then((str=&gt;{const link=moreEventsLink.find("strong a");return moreEventsLink.attr("data-event-folded","false"),link.text(str),str})).fail()}else moreEventsLink.hide()}))};_exports.foldDayEvents=foldDayEvents;const registerEventListenersForMonthDetailed=pendingId=&gt;{const events="".concat(_events.default.viewUpdated);(0,_jquery.default)("body").on(events,(function(e){foldDayEvents()})),foldDayEvents(),(0,_jquery.default)("body").on(_events.default.filterChanged,(function(e,data){const root=(0,_jquery.default)(CalendarSelectors.elements.monthDetailed),pending=new _pending.default(pendingId),target=root.find(CalendarSelectors.eventType[data.type]),transitionPromise=_jquery.default.Deferred();data.hidden?transitionPromise.then((function(){return target.attr("data-event-filtered","true"),target.hide().promise()})).fail():transitionPromise.then((function(){return target.attr("data-event-filtered","false"),target.show().promise()})).fail(),transitionPromise.then((function(){foldDayEvents()})).always(pending.resolve).fail(),transitionPromise.resolve()}))};_exports.registerEventListenersForMonthDetailed=registerEventListenersForMonthDetailed;const refreshMonthContent=function(root,year,month,courseId,categoryId){let target=arguments.length&gt;5&amp;&amp;void 0!==arguments[5]?arguments[5]:null,template=arguments.length&gt;6&amp;&amp;void 0!==arguments[6]?arguments[6]:"",day=arguments.length&gt;7&amp;&amp;void 0!==arguments[7]?arguments[7]:1;startLoading(root),target=target||root.find(CalendarSelectors.wrapper),template=template||root.attr("data-template"),M.util.js_pending([root.get("id"),year,month,courseId].join("-"));const includenavigation=root.data("includenavigation"),mini=root.data("mini"),viewMode=target.data("view");return CalendarRepository.getCalendarMonthData(year,month,courseId,categoryId,includenavigation,mini,day,viewMode).then((context=&gt;_templates.default.render(template,context))).then(((html,js)=&gt;_templates.default.replaceNode(target,html,js))).then((()=&gt;{document.querySelector("body").dispatchEvent(new CustomEvent(_events.default.viewUpdated))})).always((()=&gt;(M.util.js_complete([root.get("id"),year,month,courseId].join("-")),stopLoading(root)))).fail(_notification.default.exception)};_exports.refreshMonthContent=refreshMonthContent;const changeMonth=function(root,url,year,month,courseId,categoryId){let day=arguments.length&gt;6&amp;&amp;void 0!==arguments[6]?arguments[6]:1;return refreshMonthContent(root,year,month,courseId,categoryId,null,"",day).then((function(){url.length&amp;&amp;"#"!==url&amp;&amp;updateUrl(url);for(var _len=arguments.length,args=new Array(_len),_key=0;_key&lt;_len;_key++)args[_key]=arguments[_key];return args})).then((function(){(0,_jquery.default)("body").trigger(_events.default.monthChanged,[year,month,courseId,categoryId]);for(var _len2=arguments.length,args=new Array(_len2),_key2=0;_key2&lt;_len2;_key2++)args[_key2]=arguments[_key2];return args}))};_exports.changeMonth=changeMonth;_exports.reloadCurrentMonth=function(root){let courseId=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]?arguments[1]:0,categoryId=arguments.length&gt;2&amp;&amp;void 0!==arguments[2]?arguments[2]:0;const year=root.find(CalendarSelectors.wrapper).data("year"),month=root.find(CalendarSelectors.wrapper).data("month"),day=root.find(CalendarSelectors.wrapper).data("day");return courseId=courseId||root.find(CalendarSelectors.wrapper).data("courseid"),categoryId=categoryId||root.find(CalendarSelectors.wrapper).data("categoryid"),refreshMonthContent(root,year,month,courseId,categoryId,null,"",day).then((function(){(0,_jquery.default)("body").trigger(_events.default.courseChanged,[year,month,courseId,categoryId]);for(var _len3=arguments.length,args=new Array(_len3),_key3=0;_key3&lt;_len3;_key3++)args[_key3]=arguments[_key3];return args}))};const refreshDayContent=function(root,year,month,day,courseId,categoryId){let target=arguments.length&gt;6&amp;&amp;void 0!==arguments[6]?arguments[6]:null,template=arguments.length&gt;7&amp;&amp;void 0!==arguments[7]?arguments[7]:"";startLoading(root),target&amp;&amp;0!=target.length||(target=root.find(CalendarSelectors.wrapper)),template=template||root.attr("data-template"),M.util.js_pending([root.get("id"),year,month,day,courseId,categoryId].join("-"));const includenavigation=root.data("includenavigation");return CalendarRepository.getCalendarDayData(year,month,day,courseId,categoryId,includenavigation).then((context=&gt;(context.viewingday=!0,context.showviewselector=!0,_templates.default.render(template,context)))).then(((html,js)=&gt;_templates.default.replaceNode(target,html,js))).then((()=&gt;{document.querySelector("body").dispatchEvent(new CustomEvent(_events.default.viewUpdated))})).always((()=&gt;(M.util.js_complete([root.get("id"),year,month,day,courseId,categoryId].join("-")),stopLoading(root)))).fail(_notification.default.exception)};_exports.refreshDayContent=refreshDayContent;_exports.reloadCurrentDay=function(root){let courseId=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]?arguments[1]:0,categoryId=arguments.length&gt;2&amp;&amp;void 0!==arguments[2]?arguments[2]:0;const wrapper=root.find(CalendarSelectors.wrapper),year=wrapper.data("year"),month=wrapper.data("month"),day=wrapper.data("day");return courseId=courseId||root.find(CalendarSelectors.wrapper).data("courseid"),categoryId=categoryId||root.find(CalendarSelectors.wrapper).data("categoryid"),refreshDayContent(root,year,month,day,courseId,categoryId)};const changeDay=(root,url,year,month,day,courseId,categoryId)=&gt;refreshDayContent(root,year,month,day,courseId,categoryId).then((function(){url.length&amp;&amp;"#"!==url&amp;&amp;updateUrl(url);for(var _len4=arguments.length,args=new Array(_len4),_key4=0;_key4&lt;_len4;_key4++)args[_key4]=arguments[_key4];return args})).then((function(){(0,_jquery.default)("body").trigger(_events.default.dayChanged,[year,month,courseId,categoryId]);for(var _len5=arguments.length,args=new Array(_len5),_key5=0;_key5&lt;_len5;_key5++)args[_key5]=arguments[_key5];return args}));_exports.changeDay=changeDay;const updateUrl=url=&gt;{document.getElementById(CalendarSelectors.fullCalendarView)&amp;&amp;window.history.pushState({},"",url)};_exports.updateUrl=updateUrl;const startLoading=root=&gt;{root.find(CalendarSelectors.containers.loadingIcon).removeClass("hidden")},stopLoading=root=&gt;{root.find(CalendarSelectors.containers.loadingIcon).addClass("hidden")},reloadCurrentUpcoming=function(root){let courseId=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]?arguments[1]:0,categoryId=arguments.length&gt;2&amp;&amp;void 0!==arguments[2]?arguments[2]:0,target=arguments.length&gt;3&amp;&amp;void 0!==arguments[3]?arguments[3]:null,template=arguments.length&gt;4&amp;&amp;void 0!==arguments[4]?arguments[4]:"";return startLoading(root),target=target||root.find(CalendarSelectors.wrapper),template=template||root.attr("data-template"),courseId=courseId||root.find(CalendarSelectors.wrapper).data("courseid"),categoryId=categoryId||root.find(CalendarSelectors.wrapper).data("categoryid"),CalendarRepository.getCalendarUpcomingData(courseId,categoryId).then((context=&gt;(context.viewingupcoming=!0,context.showviewselector=!0,_templates.default.render(template,context)))).then(((html,js)=&gt;_templates.default.replaceNode(target,html,js))).then((()=&gt;{document.querySelector("body").dispatchEvent(new CustomEvent(_events.default.viewUpdated))})).always((function(){return stopLoading(root)})).fail(_notification.default.exception)};_exports.reloadCurrentUpcoming=reloadCurrentUpcoming;const renderEventSummaryModal=eventId=&gt;{const pendingPromise=new _pending.default("core_calendar/view_manager:renderEventSummaryModal");return CalendarRepository.getEventById(eventId).then((getEventResponse=&gt;{if(!getEventResponse.event)throw new Error("Error encountered while trying to fetch calendar event with ID: "+eventId);return getEventResponse.event})).then((eventData=&gt;{const modalParams={title:eventData.name,type:_summary_modal.default.TYPE,body:_templates.default.render("core_calendar/event_summary_body",eventData),templateContext:{canedit:eventData.canedit,candelete:eventData.candelete,headerclasses:(eventType=eventData.normalisedeventtype,"calendar_event_"+eventType),isactionevent:eventData.isactionevent,url:eventData.url,action:eventData.action}};var eventType;return _modal_factory.default.create(modalParams)})).then((modal=&gt;(modal.getRoot().on(_modal_events.default.hidden,(function(){modal.destroy()})),modal.show(),modal))).then((modal=&gt;(pendingPromise.resolve(),modal))).catch(_notification.default.exception)};_exports.init=(root,view)=&gt;{(0,_prefetch.prefetchStrings)("calendar",["moreevents"]),foldDayEvents(),(root=&gt;{(root=(0,_jquery.default)(root)).on("click",CalendarSelectors.links.eventLink,(e=&gt;{const target=e.target;let eventLink=null,eventId=null;const pendingPromise=new _pending.default("core_calendar/view_manager:eventLink:click");eventLink=target.matches(CalendarSelectors.actions.viewEvent)?target:target.closest(CalendarSelectors.actions.viewEvent),eventId=eventLink?eventLink.dataset.eventId:target.querySelector(CalendarSelectors.actions.viewEvent).dataset.eventId,eventId?(e.preventDefault(),e.stopPropagation(),renderEventSummaryModal(eventId).then(pendingPromise.resolve).catch()):pendingPromise.resolve()})),root.on("click",CalendarSelectors.links.navLink,(e=&gt;{const wrapper=root.find(CalendarSelectors.wrapper),view=wrapper.data("view"),courseId=wrapper.data("courseid"),categoryId=wrapper.data("categoryid"),link=e.currentTarget;"month"===view||"monthblock"===view?(changeMonth(root,link.href,link.dataset.year,link.dataset.month,courseId,categoryId,link.dataset.day),e.preventDefault()):"day"===view&amp;&amp;(changeDay(root,link.href,link.dataset.year,link.dataset.month,link.dataset.day,courseId,categoryId),e.preventDefault())}));const viewSelector=root.find(CalendarSelectors.viewSelector);_custom_interaction_events.default.define(viewSelector,[_custom_interaction_events.default.events.activate]),viewSelector.on(_custom_interaction_events.default.events.activate,(e=&gt;{e.preventDefault();const option=e.target;if(option.classList.contains("active"))return;const view=option.dataset.view,year=option.dataset.year,month=option.dataset.month,day=option.dataset.day,courseId=option.dataset.courseid,categoryId=option.dataset.categoryid;"month"==view?refreshMonthContent(root,year,month,courseId,categoryId,root,"core_calendar/calendar_month",day).then((()=&gt;{updateUrl("?view=month")})).fail(_notification.default.exception):"day"==view?refreshDayContent(root,year,month,day,courseId,categoryId,root,"core_calendar/calendar_day").then((()=&gt;{updateUrl("?view=day")})).fail(_notification.default.exception):"upcoming"==view&amp;&amp;reloadCurrentUpcoming(root,courseId,categoryId,root,"core_calendar/calendar_upcoming").then((()=&gt;{updateUrl("?view=upcoming")})).fail(_notification.default.exception)}))})(root);const calendarTable=root.find(CalendarSelectors.elements.monthDetailed);if(calendarTable.length){"month-detailed-".concat(calendarTable.id,"-filterChanged");registerEventListenersForMonthDetailed(calendarTable)}}}));
/**
 * Contain the logic for the delete modal.
 *
 * @module     core_calendar/modal_delete
 * @copyright  2017 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core_calendar/modal_delete",["jquery","core/notification","core/custom_interaction_events","core/modal","core/modal_events","core/modal_registry","core_calendar/events"],(function($,Notification,CustomEvents,Modal,ModalEvents,ModalRegistry,CalendarEvents){var registered=!1,SELECTORS_DELETE_ONE_BUTTON='[data-action="deleteone"]',SELECTORS_DELETE_ALL_BUTTON='[data-action="deleteall"]',SELECTORS_CANCEL_BUTTON='[data-action="cancel"]',ModalDelete=function(root){Modal.call(this,root),this.setRemoveOnClose(!0)};return ModalDelete.TYPE="core_calendar-modal_delete",(ModalDelete.prototype=Object.create(Modal.prototype)).constructor=ModalDelete,ModalDelete.prototype.registerEventListeners=function(){Modal.prototype.registerEventListeners.call(this),this.getModal().on(CustomEvents.events.activate,SELECTORS_DELETE_ONE_BUTTON,function(e,data){var saveEvent=$.Event(ModalEvents.save);this.getRoot().trigger(saveEvent,this),saveEvent.isDefaultPrevented()||(this.hide(),data.originalEvent.preventDefault())}.bind(this)),this.getModal().on(CustomEvents.events.activate,SELECTORS_DELETE_ALL_BUTTON,function(e,data){var saveEvent=$.Event(CalendarEvents.deleteAll);this.getRoot().trigger(saveEvent,this),saveEvent.isDefaultPrevented()||(this.hide(),data.originalEvent.preventDefault())}.bind(this)),this.getModal().on(CustomEvents.events.activate,SELECTORS_CANCEL_BUTTON,function(e,data){var cancelEvent=$.Event(ModalEvents.cancel);this.getRoot().trigger(cancelEvent,this),cancelEvent.isDefaultPrevented()||(this.hide(),data.originalEvent.preventDefault())}.bind(this))},registered||(ModalRegistry.register(ModalDelete.TYPE,ModalDelete,"calendar/event_delete_modal"),registered=!0),ModalDelete}));
/**
 * A javascript module to enhance the event form.
 *
 * @module     core_calendar/event_form
 * @copyright  2017 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core_calendar/event_form",["jquery","core_calendar/repository","core/notification"],(function($,CalendarRepository,Notification){var SELECTORS_EVENT_GROUP_COURSE_ID='[name="groupcourseid"]',SELECTORS_EVENT_GROUP_ID='[name="groupid"]',SELECTORS_SELECT_OPTION="option",addCourseGroupSelectListeners=function(formElement){var courseGroupSelect=formElement.find(SELECTORS_EVENT_GROUP_COURSE_ID);courseGroupSelect.on("change",(function(){var courseId=formElement.find(SELECTORS_EVENT_GROUP_COURSE_ID).val();CalendarRepository.getCourseGroupsData(courseId).then((function(groups){return function(groups){var groupSelect=formElement.find(SELECTORS_EVENT_GROUP_ID),groupSelectOptions=groupSelect.find(SELECTORS_SELECT_OPTION),courseGroups=$(groups);groupSelectOptions.remove(),groupSelect.prop("disabled",!1),courseGroups.each((function(id,group){$(groupSelect).append($("&lt;option&gt;&lt;/option&gt;").attr("value",group.id).text(group.name))}))}(groups)})).catch(Notification.exception)}))};return{init:function(formId){var formElement=$("#"+formId);addCourseGroupSelectListeners(formElement)}}}));
define("core_contentbank/search",["exports","jquery","core_contentbank/selectors","core/str","core/pending","core/utils"],(function(_exports,_jquery,_selectors,_str,_pending,_utils){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Search methods for finding contents in the content bank.
   *
   * @module     core_contentbank/search
   * @copyright  2020 Sara Arjona &lt;sara@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_jquery=_interopRequireDefault(_jquery),_selectors=_interopRequireDefault(_selectors),_pending=_interopRequireDefault(_pending);_exports.init=()=&gt;{const pendingPromise=new _pending.default,root=(0,_jquery.default)(_selectors.default.regions.contentbank);registerListenerEvents(root),pendingPromise.resolve()};const registerListenerEvents=root=&gt;{const searchInput=root.find(_selectors.default.elements.searchinput)[0];root.on("click",_selectors.default.actions.search,(function(e){e.preventDefault(),toggleSearchResultsView(root,searchInput.value)})),root.on("click",_selectors.default.actions.clearSearch,(function(e){e.preventDefault(),searchInput.value="",searchInput.focus(),toggleSearchResultsView(root,searchInput.value)})),searchInput.addEventListener("input",(0,_utils.debounce)((()=&gt;{toggleSearchResultsView(root,searchInput.value)}),300))},toggleSearchResultsView=async(body,searchQuery)=&gt;{const clearSearchButton=body.find(_selectors.default.actions.clearSearch)[0],navbarBreadcrumb=body.find(_selectors.default.elements.cbnavbarbreadcrumb)[0],navbarTotal=body.find(_selectors.default.elements.cbnavbartotalsearch)[0],filteredContents=filterContents(body,searchQuery);searchQuery.length&gt;0?(clearSearchButton.classList.remove("d-none"),navbarBreadcrumb.classList.add("d-none"),navbarTotal.innerHTML=await(0,_str.get_string)("itemsfound","core_contentbank",filteredContents.length),navbarTotal.classList.remove("d-none")):(clearSearchButton.classList.add("d-none"),navbarBreadcrumb.classList.remove("d-none"),navbarTotal.classList.add("d-none"))},filterContents=(body,searchTerm)=&gt;{const contents=Array.from(body.find(_selectors.default.elements.listitem)),searchResults=[];return contents.forEach((content=&gt;{const contentName=content.getAttribute("data-name");if(""===searchTerm||contentName.toLowerCase().includes(searchTerm.toLowerCase())){searchResults.push(content);content.querySelector(_selectors.default.regions.cbcontentname).innerHTML=highlight(contentName,searchTerm),content.classList.remove("d-none")}else content.classList.add("d-none")})),searchResults},highlight=(text,highlightText)=&gt;{let result=text;if(""!==highlightText){const pos=text.toLowerCase().indexOf(highlightText.toLowerCase());pos&gt;-1&amp;&amp;(result=text.substr(0,pos)+'&lt;span class="matchtext"&gt;'+text.substr(pos,highlightText.length)+"&lt;/span&gt;"+text.substr(pos+highlightText.length))}return result}}));
define("core_contentbank/upload",["exports","core_form/modalform","core/str"],(function(_exports,_modalform,_str){var obj;
/**
   * Module to handle AJAX interactions with content bank upload files.
   *
   * @module     core_contentbank/upload
   * @copyright  2021 Sara Arjona &lt;sara@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.initModal=void 0,_modalform=(obj=_modalform)&amp;&amp;obj.__esModule?obj:{default:obj};_exports.initModal=(elementSelector,formClass,contextId,contentId)=&gt;{document.querySelector(elementSelector).addEventListener("click",(function(e){e.preventDefault();const form=new _modalform.default({formClass:formClass,args:{contextid:contextId,id:contentId},modalConfig:{title:(0,_str.get_string)("upload","contentbank")},returnFocus:e.target});form.addEventListener(form.events.FORM_SUBMITTED,(event=&gt;{document.location=event.detail.returnurl})),form.show()}))}}));
define("core_contentbank/selectors",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0;
/**
   * Define all of the selectors we will be using on the contentbank interface.
   *
   * @module     core_contentbank/selectors
   * @copyright  2020 Sara Arjona &lt;sara@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */
const getDataSelector=(name,value)=&gt;"[data-".concat(name,'="').concat(value,'"]');var _default={regions:{cbcontentname:getDataSelector("region","cb-content-name"),contentbank:getDataSelector("region","contentbank"),filearea:getDataSelector("region","filearea")},actions:{search:getDataSelector("action","searchcontent"),clearSearch:getDataSelector("action","clearsearch"),viewgrid:getDataSelector("action","viewgrid"),viewlist:getDataSelector("action","viewlist"),sortname:getDataSelector("action","sortname"),sortuses:getDataSelector("action","sortuses"),sortdate:getDataSelector("action","sortdate"),sortsize:getDataSelector("action","sortsize"),sorttype:getDataSelector("action","sorttype"),sortauthor:getDataSelector("action","sortauthor")},elements:{listitem:".cb-listitem",heading:".cb-heading",cell:".cb-column",cbnavbarbreadcrumb:".cb-navbar-breadbrumb",cbnavbartotalsearch:".cb-navbar-totalsearch",searchinput:'[role="searchbox"]',sortbutton:".cb-btnsort"}};return _exports.default=_default,_exports.default}));
/**
 * Module to manage content bank actions, such as delete or rename.
 *
 * @module     core_contentbank/actions
 * @copyright  2020 Sara Arjona &lt;sara@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core_contentbank/actions",["jquery","core/ajax","core/notification","core/str","core/templates","core/url","core/modal_factory","core/modal_events"],(function($,Ajax,Notification,Str,Templates,Url,ModalFactory,ModalEvents){var ACTIONS_DELETE_CONTENT='[data-action="deletecontent"]',ACTIONS_RENAME_CONTENT='[data-action="renamecontent"]',ACTIONS_SET_CONTENT_VISIBILITY='[data-action="setcontentvisibility"]',Actions=function(){this.registerEvents()};return Actions.prototype.registerEvents=function(){$(ACTIONS_DELETE_CONTENT).click((function(e){e.preventDefault();var contentname=$(this).data("contentname"),contentuses=$(this).data("uses"),contentid=$(this).data("contentid"),contextid=$(this).data("contextid"),strings=[{key:"deletecontent",component:"core_contentbank"},{key:"deletecontentconfirm",component:"core_contentbank",param:{name:contentname}},{key:"deletecontentconfirmlinked",component:"core_contentbank"},{key:"delete",component:"core"}],deleteButtonText="";Str.get_strings(strings).then((function(langStrings){var modalTitle=langStrings[0],modalContent=langStrings[1];return contentuses&gt;0&amp;&amp;(modalContent+=" "+langStrings[2]),deleteButtonText=langStrings[3],ModalFactory.create({title:modalTitle,body:modalContent,type:ModalFactory.types.SAVE_CANCEL,large:!0})})).done((function(modal){modal.setSaveButtonText(deleteButtonText),modal.getRoot().on(ModalEvents.save,(function(){return function(contentid,contextid){var request={methodname:"core_contentbank_delete_content",args:{contentids:{contentid:contentid}}},requestType="success";Ajax.call([request])[0].then((function(data){return data.result?"contentdeleted":(requestType="error","contentnotdeleted")})).done((function(message){var params={contextid:contextid};"success"==requestType?params.statusmsg=message:params.errormsg=message,window.location.href=Url.relativeUrl("contentbank/index.php",params,!1)})).fail(Notification.exception)}(contentid,contextid)})),modal.getRoot().on(ModalEvents.hidden,(function(){modal.destroy()})),modal.show()})).catch(Notification.exception)})),$(ACTIONS_RENAME_CONTENT).click((function(e){e.preventDefault();var contentname=$(this).data("contentname"),contentid=$(this).data("contentid"),saveButtonText="";Str.get_strings([{key:"renamecontent",component:"core_contentbank"},{key:"rename",component:"core_contentbank"}]).then((function(langStrings){var modalTitle=langStrings[0];return saveButtonText=langStrings[1],ModalFactory.create({title:modalTitle,body:Templates.render("core_contentbank/renamecontent",{contentid:contentid,name:contentname}),type:ModalFactory.types.SAVE_CANCEL})})).then((function(modal){modal.setSaveButtonText(saveButtonText),modal.getRoot().on(ModalEvents.save,(function(e){var newname=$("#newname").val().trim();if(newname)!function(contentid,name){var request={methodname:"core_contentbank_rename_content",args:{contentid:contentid,name:name}},requestType="success";Ajax.call([request])[0].then((function(data){return data.result?"contentrenamed":(requestType="error",data.warnings[0].message)})).then((function(message){var params=null;"success"==requestType?(params={id:contentid,statusmsg:message},window.location.href=Url.relativeUrl("contentbank/view.php",params,!1)):(Notification.addNotification({message:message,type:"error"}),Notification.fetchNotifications())})).catch(Notification.exception)}(contentid,newname);else{Str.get_strings([{key:"error"},{key:"emptynamenotallowed",component:"core_contentbank"}]).then((function(langStrings){Notification.alert(langStrings[0],langStrings[1])})).catch(Notification.exception),e.preventDefault()}})),modal.getRoot().on(ModalEvents.hidden,(function(){modal.destroy()})),modal.show()})).catch(Notification.exception)})),$(ACTIONS_SET_CONTENT_VISIBILITY).click((function(e){e.preventDefault(),function(contentid,visibility){var request={methodname:"core_contentbank_set_content_visibility",args:{contentid:contentid,visibility:visibility}},requestType="success";Ajax.call([request])[0].then((function(data){return data.result?"contentvisibilitychanged":(requestType="error",data.warnings[0].message)})).then((function(message){var params=null;"success"==requestType?(params={id:contentid,statusmsg:message},window.location.href=Url.relativeUrl("contentbank/view.php",params,!1)):(Notification.addNotification({message:message,type:"error"}),Notification.fetchNotifications())})).catch(Notification.exception)}($(this).data("contentid"),$(this).data("visibility"))}))},{init:function(){return new Actions}}}));
define("core_contentbank/sort",["exports","./selectors","core/str","core/prefetch","core/ajax","core/notification"],(function(_exports,_selectors,_str,_prefetch,_ajax,_notification){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Content bank UI actions.
   *
   * @module     core_contentbank/sort
   * @copyright  2020 Bas Brands &lt;bas@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_selectors=_interopRequireDefault(_selectors),_prefetch=_interopRequireDefault(_prefetch),_ajax=_interopRequireDefault(_ajax),_notification=_interopRequireDefault(_notification);_exports.init=()=&gt;{const contentBank=document.querySelector(_selectors.default.regions.contentbank);_prefetch.default.prefetchStrings("contentbank",["contentname","uses","lastmodified","size","type","author"]),_prefetch.default.prefetchStrings("moodle",["sortbyx","sortbyxreverse"]),registerListenerEvents(contentBank)};const registerListenerEvents=contentBank=&gt;{contentBank.addEventListener("click",(e=&gt;{const viewList=contentBank.querySelector(_selectors.default.actions.viewlist),viewGrid=contentBank.querySelector(_selectors.default.actions.viewgrid),fileArea=contentBank.querySelector(_selectors.default.regions.filearea),shownItems=fileArea.querySelectorAll(_selectors.default.elements.listitem);if(e.target.closest(_selectors.default.actions.viewgrid)){if(contentBank.classList.remove("view-list"),contentBank.classList.add("view-grid"),fileArea&amp;&amp;shownItems){fileArea.setAttribute("role","list"),shownItems.forEach((listItem=&gt;{listItem.setAttribute("role","listitem"),listItem.querySelectorAll(_selectors.default.elements.cell).forEach((cell=&gt;cell.removeAttribute("role")))}));const heading=fileArea.querySelector(_selectors.default.elements.heading);heading&amp;&amp;(heading.removeAttribute("role"),heading.querySelectorAll(_selectors.default.elements.cell).forEach((cell=&gt;cell.removeAttribute("role"))))}return viewGrid.classList.add("active"),viewList.classList.remove("active"),void setViewListPreference(!1)}if(e.target.closest(_selectors.default.actions.viewlist)){if(contentBank.classList.remove("view-grid"),contentBank.classList.add("view-list"),fileArea&amp;&amp;shownItems){fileArea.setAttribute("role","table"),shownItems.forEach((listItem=&gt;{listItem.setAttribute("role","row"),listItem.querySelectorAll(_selectors.default.elements.cell).forEach((cell=&gt;cell.setAttribute("role","cell")))}));const heading=fileArea.querySelector(_selectors.default.elements.heading);heading&amp;&amp;(heading.setAttribute("role","row"),heading.querySelectorAll(_selectors.default.elements.cell).forEach((cell=&gt;cell.setAttribute("role","columnheader"))))}return viewList.classList.add("active"),viewGrid.classList.remove("active"),void setViewListPreference(!0)}if(fileArea&amp;&amp;shownItems){const sortByName=e.target.closest(_selectors.default.actions.sortname);if(sortByName){const ascending=updateSortButtons(contentBank,sortByName);return void updateSortOrder(fileArea,shownItems,"data-file",ascending)}const sortByUses=e.target.closest(_selectors.default.actions.sortuses);if(sortByUses){const ascending=updateSortButtons(contentBank,sortByUses);return void updateSortOrder(fileArea,shownItems,"data-uses",ascending)}const sortByDate=e.target.closest(_selectors.default.actions.sortdate);if(sortByDate){const ascending=updateSortButtons(contentBank,sortByDate);return void updateSortOrder(fileArea,shownItems,"data-timemodified",ascending)}const sortBySize=e.target.closest(_selectors.default.actions.sortsize);if(sortBySize){const ascending=updateSortButtons(contentBank,sortBySize);return void updateSortOrder(fileArea,shownItems,"data-bytes",ascending)}const sortByType=e.target.closest(_selectors.default.actions.sorttype);if(sortByType){const ascending=updateSortButtons(contentBank,sortByType);return void updateSortOrder(fileArea,shownItems,"data-type",ascending)}const sortByAuthor=e.target.closest(_selectors.default.actions.sortauthor);if(sortByAuthor){const ascending=updateSortButtons(contentBank,sortByAuthor);updateSortOrder(fileArea,shownItems,"data-author",ascending)}}else;}))},setViewListPreference=function(viewList){!1===viewList&amp;&amp;(viewList=null);const request={methodname:"core_user_update_user_preferences",args:{preferences:[{type:"core_contentbank_view_list",value:viewList}]}};return _ajax.default.call([request])[0].catch(_notification.default.exception)},updateSortButtons=(contentBank,sortButton)=&gt;{contentBank.querySelectorAll(_selectors.default.elements.sortbutton).forEach((button=&gt;{button!==sortButton&amp;&amp;(button.classList.remove("dir-asc"),button.classList.remove("dir-desc"),button.classList.add("dir-none"),button.closest(_selectors.default.elements.cell).setAttribute("aria-sort","none"),updateButtonTitle(button,!1))}));let ascending=!0;return sortButton.classList.contains("dir-none")?(sortButton.classList.remove("dir-none"),sortButton.classList.add("dir-asc"),sortButton.closest(_selectors.default.elements.cell).setAttribute("aria-sort","ascending")):sortButton.classList.contains("dir-asc")?(sortButton.classList.remove("dir-asc"),sortButton.classList.add("dir-desc"),sortButton.closest(_selectors.default.elements.cell).setAttribute("aria-sort","descending"),ascending=!1):sortButton.classList.contains("dir-desc")&amp;&amp;(sortButton.classList.remove("dir-desc"),sortButton.classList.add("dir-asc"),sortButton.closest(_selectors.default.elements.cell).setAttribute("aria-sort","ascending")),updateButtonTitle(sortButton,ascending),ascending},updateButtonTitle=(button,ascending)=&gt;{const sortString=ascending?"sortbyxreverse":"sortbyx";return(0,_str.get_string)(button.dataset.string,"contentbank").then((columnName=&gt;(0,_str.get_string)(sortString,"core",columnName))).then((sortByString=&gt;(button.setAttribute("title",sortByString),sortByString))).catch()},updateSortOrder=(fileArea,itemList,attribute,ascending)=&gt;{[].slice.call(itemList).sort((function(a,b){let aa=a.getAttribute(attribute),bb=b.getAttribute(attribute);return isNaN(aa)||(aa=parseInt(aa),bb=parseInt(bb)),ascending?aa&gt;bb?1:-1:aa&lt;bb?1:-1})).forEach((listItem=&gt;fileArea.appendChild(listItem)))}}));
define("core_course/formatchooser",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0;
/**
   * Course format selection handler.
   *
   * @module     core_course/formatchooser
   * @copyright  2022 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   * @since      4.0
   */
const Selectors_fields={selector:'[data-formatchooser-field="selector"]',updateButton:'[data-formatchooser-field="updateButton"]'};_exports.init=()=&gt;{document.querySelector(Selectors_fields.selector).addEventListener("change",(e=&gt;{const form=e.target.closest("form"),updateButton=form.querySelector(Selectors_fields.updateButton),fieldset=updateButton.closest("fieldset"),url=new URL(form.action);url.hash=fieldset.id,form.action=url.toString(),updateButton.click()}))}}));
define("core_course/activitychooser",["exports","core_course/local/activitychooser/dialogue","core_course/local/activitychooser/repository","core_course/local/activitychooser/selectors","core/custom_interaction_events","core/templates","core/modal_factory","core/str","core/pending"],(function(_exports,ChooserDialogue,Repository,_selectors,_custom_interaction_events,Templates,ModalFactory,_str,_pending){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}
/**
   * A type of dialogue used as for choosing modules in a course.
   *
   * @module     core_course/activitychooser
   * @copyright  2020 Mathew May &lt;mathew.solutions&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,ChooserDialogue=_interopRequireWildcard(ChooserDialogue),Repository=_interopRequireWildcard(Repository),_selectors=_interopRequireDefault(_selectors),_custom_interaction_events=_interopRequireDefault(_custom_interaction_events),Templates=_interopRequireWildcard(Templates),ModalFactory=_interopRequireWildcard(ModalFactory),_pending=_interopRequireDefault(_pending);_exports.init=(courseId,chooserConfig)=&gt;{const pendingPromise=new _pending.default;registerListenerEvents(courseId,chooserConfig),pendingPromise.resolve()};const registerListenerEvents=(courseId,chooserConfig)=&gt;{const events=["click",_custom_interaction_events.default.events.activate,_custom_interaction_events.default.events.keyboardActivate],fetchModuleData=(()=&gt;{let innerPromise=null;return()=&gt;(innerPromise||(innerPromise=new Promise((resolve=&gt;{resolve(Repository.activityModules(courseId))}))),innerPromise)})(),fetchFooterData=(()=&gt;{let footerInnerPromise=null;return sectionId=&gt;(footerInnerPromise||(footerInnerPromise=new Promise((resolve=&gt;{resolve(Repository.fetchFooterData(courseId,sectionId))}))),footerInnerPromise)})();_custom_interaction_events.default.define(document,events),events.forEach((event=&gt;{document.addEventListener(event,(async e=&gt;{if(e.target.closest(_selectors.default.elements.sectionmodchooser)){let caller;const sectionDiv=e.target.closest(_selectors.default.elements.section),button=e.target.closest(_selectors.default.elements.sectionmodchooser);let bodyPromiseResolver;caller=null!==sectionDiv&amp;&amp;sectionDiv.hasAttribute("data-sectionid")?sectionDiv:button;const bodyPromise=new Promise((resolve=&gt;{bodyPromiseResolver=resolve})),footerData=await fetchFooterData(caller.dataset.sectionid),sectionModal=buildModal(bodyPromise,footerData),data=await fetchModuleData().catch((async e=&gt;{const errorTemplateData={errormessage:e.message};bodyPromiseResolver(await Templates.render("core_course/local/activitychooser/error",errorTemplateData))}));if(!data)return;const builtModuleData=sectionIdMapper(data,caller.dataset.sectionid,caller.dataset.sectionreturnid);ChooserDialogue.displayChooser(sectionModal,builtModuleData,partiallyAppliedFavouriteManager(data,caller.dataset.sectionid),footerData),bodyPromiseResolver(await Templates.render("core_course/activitychooser",templateDataBuilder(builtModuleData,chooserConfig)))}}))}))},sectionIdMapper=(webServiceData,id,sectionreturnid)=&gt;{const newData=JSON.parse(JSON.stringify(webServiceData));return newData.content_items.forEach((module=&gt;{module.link+="&amp;section="+id+"&amp;sr="+(null!=sectionreturnid?sectionreturnid:0)})),newData.content_items},templateDataBuilder=(data,chooserConfig)=&gt;{let activities=[],resources=[],showAll=!0,showActivities=!1,showResources=!1;const tabMode=parseInt(chooserConfig.tabmode),favourites=data.filter((mod=&gt;!0===mod.favourite)),recommended=data.filter((mod=&gt;!0===mod.recommended));0!==tabMode&amp;&amp;2!==tabMode||1===tabMode||(activities=data.filter((mod=&gt;0===mod.archetype)),resources=data.filter((mod=&gt;1===mod.archetype)),showActivities=!0,showResources=!0,2===tabMode&amp;&amp;(showAll=!1));const favouritesFirst=!!favourites.length;return{default:data,showAll:showAll,activities:activities,showActivities:showActivities,activitiesFirst:!1===showAll&amp;&amp;!1===favouritesFirst,resources:resources,showResources:showResources,favourites:favourites,recommended:recommended,favouritesFirst:favouritesFirst,fallback:!0===showAll&amp;&amp;!1===favouritesFirst}},buildModal=(bodyPromise,footer)=&gt;ModalFactory.create({type:ModalFactory.types.DEFAULT,title:(0,_str.get_string)("addresourceoractivity"),body:bodyPromise,footer:footer.customfootertemplate,large:!0,scrollable:!1,templateContext:{classes:"modchooser"}}).then((modal=&gt;(modal.show(),modal))),partiallyAppliedFavouriteManager=(moduleData,sectionId)=&gt;async(internal,favourite,modalBody)=&gt;{const favouriteArea=modalBody.querySelector(_selectors.default.render.favourites),favouriteButtons=modalBody.querySelectorAll('[data-internal="'.concat(internal,'"] ').concat(_selectors.default.actions.optionActions.manageFavourite)),favouriteTabNav=modalBody.querySelector(_selectors.default.regions.favouriteTabNav),result=moduleData.content_items.find((_ref=&gt;{let{name:name}=_ref;return name===internal})),newFaves={};if(result)if(favourite){result.favourite=!0,newFaves.content_items=moduleData.content_items.filter((mod=&gt;!0===mod.favourite));const builtFaves=sectionIdMapper(newFaves,sectionId),{html:html,js:js}=await Templates.renderForPromise("core_course/local/activitychooser/favourites",{favourites:builtFaves});await Templates.replaceNodeContents(favouriteArea,html,js),Array.from(favouriteButtons).forEach((element=&gt;{element.classList.remove("text-muted"),element.classList.add("text-primary"),element.dataset.favourited="true",element.setAttribute("aria-pressed",!0),element.firstElementChild.classList.remove("fa-star-o"),element.firstElementChild.classList.add("fa-star")})),favouriteTabNav.classList.remove("d-none")}else{result.favourite=!1;const nodeToRemove=favouriteArea.querySelector('[data-internal="'.concat(internal,'"]'));nodeToRemove.parentNode.removeChild(nodeToRemove),Array.from(favouriteButtons).forEach((element=&gt;{element.classList.add("text-muted"),element.classList.remove("text-primary"),element.dataset.favourited="false",element.setAttribute("aria-pressed",!1),element.firstElementChild.classList.remove("fa-star"),element.firstElementChild.classList.add("fa-star-o")}));0===moduleData.content_items.filter((mod=&gt;!0===mod.favourite)).length&amp;&amp;((favouriteTabNav,modalBody)=&gt;{if(favouriteTabNav.tabIndex=-1,favouriteTabNav.classList.add("d-none"),favouriteTabNav.classList.contains("active")){favouriteTabNav.classList.remove("active"),favouriteTabNav.setAttribute("aria-selected","false"),modalBody.querySelector(_selectors.default.regions.favouriteTab).classList.remove("active");const defaultTabNav=modalBody.querySelector(_selectors.default.regions.defaultTabNav),activitiesTabNav=modalBody.querySelector(_selectors.default.regions.activityTabNav);!1===defaultTabNav.classList.contains("d-none")?(defaultTabNav.classList.add("active"),defaultTabNav.setAttribute("aria-selected","true"),defaultTabNav.tabIndex=0,defaultTabNav.focus(),modalBody.querySelector(_selectors.default.regions.defaultTab).classList.add("active")):(activitiesTabNav.classList.add("active"),activitiesTabNav.setAttribute("aria-selected","true"),activitiesTabNav.tabIndex=0,activitiesTabNav.focus(),modalBody.querySelector(_selectors.default.regions.activityTab).classList.add("active"))}})(favouriteTabNav,modalBody)}}}));
define("core_course/local/activitychooser/selectors",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0;
/**
   * Define all of the selectors we will be using on the grading interface.
   *
   * @module     core_course/local/chooser/selectors
   * @copyright  2019 Mathew May &lt;mathew.solutions&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */
const getDataSelector=(name,value)=&gt;"[data-".concat(name,'="').concat(value,'"]');var _default={regions:{chooser:getDataSelector("region","chooser-container"),getSectionChooserOptions:containerid=&gt;"".concat(containerid," ").concat(getDataSelector("region","chooser-options-container")),chooserOption:{container:getDataSelector("region","chooser-option-container"),actions:getDataSelector("region","chooser-option-actions-container"),info:getDataSelector("region","chooser-option-info-container")},chooserSummary:{container:getDataSelector("region","chooser-option-summary-container"),content:getDataSelector("region","chooser-option-summary-content-container"),header:getDataSelector("region","summary-header"),actions:getDataSelector("region","chooser-option-summary-actions-container")},carousel:getDataSelector("region","carousel"),help:getDataSelector("region","help"),modules:getDataSelector("region","modules"),favouriteTabNav:getDataSelector("region","favourite-tab-nav"),defaultTabNav:getDataSelector("region","default-tab-nav"),activityTabNav:getDataSelector("region","activity-tab-nav"),favouriteTab:getDataSelector("region","favourites"),recommendedTab:getDataSelector("region","recommended"),defaultTab:getDataSelector("region","default"),activityTab:getDataSelector("region","activity"),resourceTab:getDataSelector("region","resources"),getModuleSelector:modname=&gt;'[role="menuitem"][data-modname="'.concat(modname,'"]'),searchResults:getDataSelector("region","search-results-container"),searchResultItems:getDataSelector("region","search-result-items-container")},actions:{optionActions:{showSummary:getDataSelector("action","show-option-summary"),manageFavourite:getDataSelector("action","manage-module-favourite")},addChooser:getDataSelector("action","add-chooser-option"),closeOption:getDataSelector("action","close-chooser-option-summary"),hide:getDataSelector("action","hide"),search:getDataSelector("action","search"),clearSearch:getDataSelector("action","clearsearch")},render:{favourites:getDataSelector("render","favourites-area")},elements:{section:".section",sectionmodchooser:"button.section-modchooser-link",sitemenu:".block_site_main_menu",sitetopic:"div.sitetopic",tab:'a[data-toggle="tab"]',activetab:'a[data-toggle="tab"][aria-selected="true"]',visibletabs:'a[data-toggle="tab"]:not(.d-none)'}};return _exports.default=_default,_exports.default}));
define("core_course/local/activitychooser/repository",["exports","core/ajax"],(function(_exports,_ajax){var obj;
/**
   *
   * @module     core_course/repository
   * @copyright  2019 Mathew May &lt;mathew.solutions&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.unfavouriteModule=_exports.fetchFooterData=_exports.favouriteModule=_exports.activityModules=void 0,_ajax=(obj=_ajax)&amp;&amp;obj.__esModule?obj:{default:obj};_exports.activityModules=courseid=&gt;{const request={methodname:"core_course_get_course_content_items",args:{courseid:courseid}};return _ajax.default.call([request])[0]};_exports.favouriteModule=(modName,modID)=&gt;{const request={methodname:"core_course_add_content_item_to_user_favourites",args:{componentname:modName,contentitemid:modID}};return _ajax.default.call([request])[0]};_exports.unfavouriteModule=(modName,modID)=&gt;{const request={methodname:"core_course_remove_content_item_from_user_favourites",args:{componentname:modName,contentitemid:modID}};return _ajax.default.call([request])[0]};_exports.fetchFooterData=(courseid,sectionid)=&gt;{const request={methodname:"core_course_get_activity_chooser_footer",args:{courseid:courseid,sectionid:sectionid}};return _ajax.default.call([request])[0]}}));
define("core_course/local/activitychooser/dialogue",["exports","jquery","core/modal_events","core_course/local/activitychooser/selectors","core/templates","core/key_codes","core/loadingicon","core_course/local/activitychooser/repository","core/notification","core/utils"],(function(_exports,_jquery,ModalEvents,_selectors,Templates,_key_codes,_loadingicon,Repository,_notification,_utils){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.displayChooser=void 0,_jquery=_interopRequireDefault(_jquery),ModalEvents=_interopRequireWildcard(ModalEvents),_selectors=_interopRequireDefault(_selectors),Templates=_interopRequireWildcard(Templates),Repository=_interopRequireWildcard(Repository),_notification=_interopRequireDefault(_notification);var _systemImportTransformerGlobalIdentifier="undefined"!=typeof window?window:"undefined"!=typeof self?self:"undefined"!=typeof global?global:{};function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}const showModuleHelp=function(carousel,moduleData){let modal=arguments.length&gt;2&amp;&amp;void 0!==arguments[2]?arguments[2]:null;null!==modal&amp;&amp;!0===moduleData.showFooter&amp;&amp;modal.setFooter(Templates.render("core_course/local/activitychooser/footer_partial",moduleData));const help=carousel.find(_selectors.default.regions.help)[0];help.innerHTML="",help.classList.add("m-auto");const spinnerPromise=(0,_loadingicon.addIconToContainer)(help);let transitionPromiseResolver=null;const transitionPromise=new Promise((resolve=&gt;{transitionPromiseResolver=resolve})),contentPromise=Templates.renderForPromise("core_course/local/activitychooser/help",moduleData);Promise.all([contentPromise,spinnerPromise,transitionPromise]).then((_ref=&gt;{let[{html:html,js:js}]=_ref;return Templates.replaceNodeContents(help,html,js)})).then((()=&gt;(help.querySelector(_selectors.default.regions.chooserSummary.header).focus(),help))).catch(_notification.default.exception),carousel.one("slid.bs.carousel",(()=&gt;{transitionPromiseResolver()})),carousel.carousel("next")},registerListenerEvents=(modal,mappedModules,partialFavourite,footerData)=&gt;{const bodyClickListener=async e=&gt;{if(e.target.closest(_selectors.default.actions.optionActions.showSummary)){const carousel=(0,_jquery.default)(modal.getBody()[0].querySelector(_selectors.default.regions.carousel)),moduleName=e.target.closest(_selectors.default.regions.chooserOption.container).dataset.modname,moduleData=mappedModules.get(moduleName);moduleData.showFooter=modal.hasFooterContent(),showModuleHelp(carousel,moduleData,modal)}if(e.target.closest(_selectors.default.actions.optionActions.manageFavourite)){const caller=e.target.closest(_selectors.default.actions.optionActions.manageFavourite);await(async(modalBody,caller,partialFavourite)=&gt;{const isFavourite=caller.dataset.favourited,id=caller.dataset.id,name=caller.dataset.name,internal=caller.dataset.internal;"true"===isFavourite?(await Repository.unfavouriteModule(name,id),partialFavourite(internal,!1,modalBody)):(await Repository.favouriteModule(name,id),partialFavourite(internal,!0,modalBody))})(modal.getBody()[0],caller,partialFavourite);const activeSectionId=modal.getBody()[0].querySelector(_selectors.default.elements.activetab).getAttribute("href"),sectionChooserOptions=modal.getBody()[0].querySelector(_selectors.default.regions.getSectionChooserOptions(activeSectionId)),firstChooserOption=sectionChooserOptions.querySelector(_selectors.default.regions.chooserOption.container);toggleFocusableChooserOption(firstChooserOption,!0),initChooserOptionsKeyboardNavigation(modal.getBody()[0],mappedModules,sectionChooserOptions,modal)}if(e.target.matches(_selectors.default.actions.closeOption)){const carousel=(0,_jquery.default)(modal.getBody()[0].querySelector(_selectors.default.regions.carousel));carousel.carousel("prev"),carousel.on("slid.bs.carousel",(()=&gt;{modal.getBody()[0].querySelector(_selectors.default.regions.modules).querySelector(_selectors.default.regions.getModuleSelector(e.target.dataset.modname)).focus()}))}if(e.target.closest(_selectors.default.actions.clearSearch)){const searchInput=modal.getBody()[0].querySelector(_selectors.default.actions.search);searchInput.value="",searchInput.focus(),toggleSearchResultsView(modal,mappedModules,searchInput.value)}},footerClickListener=async e=&gt;{if(!0===footerData.footer){const footerjs=await(pluginName=footerData.customfooterjs,"function"==typeof _systemImportTransformerGlobalIdentifier.define&amp;&amp;_systemImportTransformerGlobalIdentifier.define.amd?new Promise((function(resolve,reject){_systemImportTransformerGlobalIdentifier.require([pluginName],resolve,reject)})):"undefined"!=typeof module&amp;&amp;module.exports&amp;&amp;"undefined"!=typeof require||"undefined"!=typeof module&amp;&amp;module.component&amp;&amp;_systemImportTransformerGlobalIdentifier.require&amp;&amp;"component"===_systemImportTransformerGlobalIdentifier.require.loader?Promise.resolve(require(pluginName)):Promise.resolve(_systemImportTransformerGlobalIdentifier[pluginName]));await footerjs.footerClickListener(e,footerData,modal)}var pluginName};modal.getBodyPromise().then((body=&gt;body[0])).then((body=&gt;((0,_jquery.default)(body.querySelector(_selectors.default.regions.carousel)).carousel({interval:!1,pause:!0,keyboard:!1}),body))).then((body=&gt;(body.addEventListener("click",bodyClickListener),body))).then((body=&gt;{const searchInput=body.querySelector(_selectors.default.actions.search);return searchInput.addEventListener("input",(0,_utils.debounce)((()=&gt;{toggleSearchResultsView(modal,mappedModules,searchInput.value)}),300)),body})).then((body=&gt;{const activeSectionId=body.querySelector(_selectors.default.elements.activetab).getAttribute("href"),sectionChooserOptions=body.querySelector(_selectors.default.regions.getSectionChooserOptions(activeSectionId)),firstChooserOption=sectionChooserOptions.querySelector(_selectors.default.regions.chooserOption.container);return toggleFocusableChooserOption(firstChooserOption,!0),initChooserOptionsKeyboardNavigation(body,mappedModules,sectionChooserOptions,modal),body})).catch(),modal.getFooterPromise().then((footer=&gt;footer[0])).then((footer=&gt;(footer.addEventListener("click",footerClickListener),footer))).catch()},initChooserOptionsKeyboardNavigation=function(body,mappedModules,chooserOptionsContainer){let modal=arguments.length&gt;3&amp;&amp;void 0!==arguments[3]?arguments[3]:null;const chooserOptions=chooserOptionsContainer.querySelectorAll(_selectors.default.regions.chooserOption.container);Array.from(chooserOptions).forEach((element=&gt;element.addEventListener("keydown",(e=&gt;{if((e.keyCode===_key_codes.enter||e.keyCode===_key_codes.space)&amp;&amp;e.target.matches(_selectors.default.actions.optionActions.showSummary)){e.preventDefault();const moduleName=e.target.closest(_selectors.default.regions.chooserOption.container).dataset.modname,moduleData=mappedModules.get(moduleName),carousel=(0,_jquery.default)(body.querySelector(_selectors.default.regions.carousel));carousel.carousel({interval:!1,pause:!0,keyboard:!1}),moduleData.showFooter=modal.hasFooterContent(),showModuleHelp(carousel,moduleData,modal)}if(e.keyCode===_key_codes.arrowRight){e.preventDefault();const currentOption=e.target.closest(_selectors.default.regions.chooserOption.container),nextOption=currentOption.nextElementSibling,firstOption=chooserOptionsContainer.firstElementChild,toFocusOption=clickErrorHandler(nextOption,firstOption);focusChooserOption(toFocusOption,currentOption)}if(e.keyCode===_key_codes.arrowLeft){e.preventDefault();const currentOption=e.target.closest(_selectors.default.regions.chooserOption.container),previousOption=currentOption.previousElementSibling,lastOption=chooserOptionsContainer.lastElementChild,toFocusOption=clickErrorHandler(previousOption,lastOption);focusChooserOption(toFocusOption,currentOption)}if(e.keyCode===_key_codes.home){e.preventDefault();const currentOption=e.target.closest(_selectors.default.regions.chooserOption.container),firstOption=chooserOptionsContainer.firstElementChild;focusChooserOption(firstOption,currentOption)}if(e.keyCode===_key_codes.end){e.preventDefault();const currentOption=e.target.closest(_selectors.default.regions.chooserOption.container),lastOption=chooserOptionsContainer.lastElementChild;focusChooserOption(lastOption,currentOption)}}))))},focusChooserOption=function(currentChooserOption){let previousChooserOption=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]?arguments[1]:null;null!==previousChooserOption&amp;&amp;toggleFocusableChooserOption(previousChooserOption,!1),toggleFocusableChooserOption(currentChooserOption,!0),currentChooserOption.focus()},toggleFocusableChooserOption=(chooserOption,isFocusable)=&gt;{const chooserOptionLink=chooserOption.querySelector(_selectors.default.actions.addChooser),chooserOptionHelp=chooserOption.querySelector(_selectors.default.actions.optionActions.showSummary),chooserOptionFavourite=chooserOption.querySelector(_selectors.default.actions.optionActions.manageFavourite);isFocusable?(chooserOption.tabIndex=0,chooserOptionLink.tabIndex=0,chooserOptionHelp.tabIndex=0,chooserOptionFavourite.tabIndex=0):(chooserOption.tabIndex=-1,chooserOptionLink.tabIndex=-1,chooserOptionHelp.tabIndex=-1,chooserOptionFavourite.tabIndex=-1)},clickErrorHandler=(item,fallback)=&gt;null!==item?item:fallback,toggleSearchResultsView=async(modal,mappedModules,searchQuery)=&gt;{const modalBody=modal.getBody()[0],searchResultsContainer=modalBody.querySelector(_selectors.default.regions.searchResults),chooserContainer=modalBody.querySelector(_selectors.default.regions.chooser),clearSearchButton=modalBody.querySelector(_selectors.default.actions.clearSearch);if(searchQuery.length&gt;0){const searchResultsData=searchModules(mappedModules,searchQuery);await(async(searchResultsContainer,searchResultsData)=&gt;{const templateData={searchresultsnumber:searchResultsData.length,searchresults:searchResultsData},{html:html,js:js}=await Templates.renderForPromise("core_course/local/activitychooser/search_results",templateData);await Templates.replaceNodeContents(searchResultsContainer,html,js)})(searchResultsContainer,searchResultsData);const searchResultItemsContainer=searchResultsContainer.querySelector(_selectors.default.regions.searchResultItems),firstSearchResultItem=searchResultItemsContainer.querySelector(_selectors.default.regions.chooserOption.container);firstSearchResultItem&amp;&amp;(toggleFocusableChooserOption(firstSearchResultItem,!0),initChooserOptionsKeyboardNavigation(modalBody,mappedModules,searchResultItemsContainer,modal)),clearSearchButton.classList.remove("d-none"),chooserContainer.setAttribute("hidden","hidden"),searchResultsContainer.removeAttribute("hidden")}else clearSearchButton.classList.add("d-none"),searchResultsContainer.setAttribute("hidden","hidden"),chooserContainer.removeAttribute("hidden")},searchModules=(modules,searchTerm)=&gt;{if(""===searchTerm)return modules;searchTerm=searchTerm.toLowerCase();const searchResults=[];return modules.forEach((activity=&gt;{const activityName=activity.title.toLowerCase(),activityDesc=activity.help.toLowerCase();(activityName.includes(searchTerm)||activityDesc.includes(searchTerm))&amp;&amp;searchResults.push(activity)})),searchResults},disableFocusAllChooserOptions=sectionChooserOptions=&gt;{sectionChooserOptions.querySelectorAll(_selectors.default.regions.chooserOption.container).forEach((chooserOption=&gt;{toggleFocusableChooserOption(chooserOption,!1)}))};_exports.displayChooser=(modalPromise,sectionModules,partialFavourite,footerData)=&gt;{const mappedModules=new Map;sectionModules.forEach((module=&gt;{mappedModules.set(module.componentname+"_"+module.link,module)})),modalPromise.then((modal=&gt;(registerListenerEvents(modal,mappedModules,partialFavourite,footerData),((modal,mappedModules)=&gt;{modal.getModal()[0].tabIndex=-1,modal.getBodyPromise().then((body=&gt;{(0,_jquery.default)(_selectors.default.elements.tab).on("shown.bs.tab",(e=&gt;{const activeSectionId=e.target.getAttribute("href"),activeSectionChooserOptions=body[0].querySelector(_selectors.default.regions.getSectionChooserOptions(activeSectionId)),firstChooserOption=activeSectionChooserOptions.querySelector(_selectors.default.regions.chooserOption.container),prevActiveSectionId=e.relatedTarget.getAttribute("href"),prevActiveSectionChooserOptions=body[0].querySelector(_selectors.default.regions.getSectionChooserOptions(prevActiveSectionId));disableFocusAllChooserOptions(prevActiveSectionChooserOptions),toggleFocusableChooserOption(firstChooserOption,!0),initChooserOptionsKeyboardNavigation(body[0],mappedModules,activeSectionChooserOptions,modal)}))})).catch(_notification.default.exception)})(modal,mappedModules),modal.getRoot().on(ModalEvents.hidden,(()=&gt;{modal.destroy()})),modal))).catch()}}));
define("core_course/manual_completion_toggle",["exports","core/templates","core/notification","core_course/repository","core_course/events","core/pending"],(function(_exports,_templates,_notification,_repository,CourseEvents,_pending){function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Provides the functionality for toggling the manual completion state of a course module through
   * the manual completion button.
   *
   * @module      core_course/manual_completion_toggle
   * @copyright   2021 Jun Pataleta &lt;jun@moodle.com&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_templates=_interopRequireDefault(_templates),_notification=_interopRequireDefault(_notification),CourseEvents=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}(CourseEvents),_pending=_interopRequireDefault(_pending);const SELECTORS_MANUAL_TOGGLE="button[data-action=toggle-manual-completion]",TOGGLE_TYPES_TOGGLE_MARK_DONE="manual:mark-done";let registered=!1;_exports.init=()=&gt;{registered||(document.addEventListener("click",(e=&gt;{const toggleButton=e.target.closest(SELECTORS_MANUAL_TOGGLE);toggleButton&amp;&amp;(e.preventDefault(),toggleManualCompletionState(toggleButton).catch(_notification.default.exception))})),registered=!0)};const toggleManualCompletionState=async toggleButton=&gt;{const pendingPromise=new _pending.default("core_course:toggleManualCompletionState"),originalInnerHtml=toggleButton.innerHTML;toggleButton.setAttribute("disabled","disabled");const toggleType=toggleButton.getAttribute("data-toggletype"),cmid=toggleButton.getAttribute("data-cmid"),activityname=toggleButton.getAttribute("data-activityname"),completed=toggleType===TOGGLE_TYPES_TOGGLE_MARK_DONE;_templates.default.renderForPromise("core/loading",{}).then((loadingHtml=&gt;{_templates.default.replaceNodeContents(toggleButton,loadingHtml,"")})).catch((()=&gt;{}));try{await(0,_repository.toggleManualCompletion)(cmid,completed);const templateContext={cmid:cmid,activityname:activityname,overallcomplete:completed,overallincomplete:!completed,istrackeduser:!0},renderObject=await _templates.default.renderForPromise("core_course/completion_manual",templateContext),newToggleButton=(await _templates.default.replaceNode(toggleButton,renderObject.html,renderObject.js)).pop(),withAvailability=toggleButton.getAttribute("data-withavailability"),toggledEvent=new CustomEvent(CourseEvents.manualCompletionToggled,{bubbles:!0,detail:{cmid:cmid,activityname:activityname,completed:completed,withAvailability:withAvailability}});newToggleButton.dispatchEvent(toggledEvent)}catch(exception){toggleButton.removeAttribute("disabled"),toggleButton.innerHTML=originalInnerHtml,_notification.default.exception(exception)}pendingPromise.resolve()}}));
define("core_course/repository",["exports","core/ajax"],(function(_exports,_ajax){var obj;
/**
   * A javascript module to handle course ajax actions.
   *
   * @module     core_course/repository
   * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_ajax=(obj=_ajax)&amp;&amp;obj.__esModule?obj:{default:obj};var _default={getEnrolledCoursesByTimelineClassification:(classification,limit,offset,sort)=&gt;{const args={classification:classification};void 0!==limit&amp;&amp;(args.limit=limit),void 0!==offset&amp;&amp;(args.offset=offset),void 0!==sort&amp;&amp;(args.sort=sort);const request={methodname:"core_course_get_enrolled_courses_by_timeline_classification",args:args};return _ajax.default.call([request])[0]},getLastAccessedCourses:(userid,limit,offset,sort)=&gt;{const args={};void 0!==userid&amp;&amp;(args.userid=userid),void 0!==limit&amp;&amp;(args.limit=limit),void 0!==offset&amp;&amp;(args.offset=offset),void 0!==sort&amp;&amp;(args.sort=sort);const request={methodname:"core_course_get_recent_courses",args:args};return _ajax.default.call([request])[0]},getUsersFromCourseModuleID:function(cmid,groupID){let onlyActive=arguments.length&gt;2&amp;&amp;void 0!==arguments[2]&amp;&amp;arguments[2];var request={methodname:"core_course_get_enrolled_users_by_cmid",args:{cmid:cmid,groupid:groupID,onlyactive:onlyActive}};return _ajax.default.call([request])[0]},getGradableUsersFromCourseID:function(courseid,groupID){let onlyActive=arguments.length&gt;2&amp;&amp;void 0!==arguments[2]&amp;&amp;arguments[2];const request={methodname:"core_grades_get_gradable_users",args:{courseid:courseid,groupid:groupID,onlyactive:onlyActive}};return _ajax.default.call([request])[0]},toggleManualCompletion:(cmid,completed)=&gt;{const request={methodname:"core_completion_update_activity_completion_status_manually",args:{cmid:cmid,completed:completed}};return _ajax.default.call([request])[0]},getEnrolledCoursesWithEventsByTimelineClassification:function(classification){let limit=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]?arguments[1]:0,offset=arguments.length&gt;2&amp;&amp;void 0!==arguments[2]?arguments[2]:0,sort=arguments.length&gt;3&amp;&amp;void 0!==arguments[3]?arguments[3]:null,searchValue=arguments.length&gt;4&amp;&amp;void 0!==arguments[4]?arguments[4]:null,eventsFrom=arguments.length&gt;5&amp;&amp;void 0!==arguments[5]?arguments[5]:null,eventsTo=arguments.length&gt;6&amp;&amp;void 0!==arguments[6]?arguments[6]:null;const args={classification:classification,limit:limit,offset:offset,sort:sort,eventsfrom:eventsFrom,eventsto:eventsTo,searchvalue:searchValue},request={methodname:"core_course_get_enrolled_courses_with_action_events_by_timeline_classification",args:args};return _ajax.default.call([request])[0]}};return _exports.default=_default,_exports.default}));
define("core_course/downloadcontent",["exports","core/config","core/custom_interaction_events","core/modal_factory","jquery","core/pending","core/key_codes"],(function(_exports,_config,_custom_interaction_events,ModalFactory,_jquery,_pending,_key_codes){function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Functions related to downloading course content.
   *
   * @module     core_course/downloadcontent
   * @copyright  2020 Michael Hawkins &lt;michaelh@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_config=_interopRequireDefault(_config),_custom_interaction_events=_interopRequireDefault(_custom_interaction_events),ModalFactory=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}(ModalFactory),_jquery=_interopRequireDefault(_jquery),_pending=_interopRequireDefault(_pending);_exports.init=()=&gt;{const pendingPromise=new _pending.default;(0,_jquery.default)("[data-downloadcourse]").on("click keydown",(e=&gt;{"click"!==e.type&amp;&amp;e.which!==_key_codes.enter&amp;&amp;e.which!==_key_codes.space||(e.preventDefault(),displayDownloadConfirmation(e.currentTarget))})),pendingPromise.resolve()};const displayDownloadConfirmation=downloadModalTrigger=&gt;{ModalFactory.create({title:downloadModalTrigger.dataset.downloadTitle,type:ModalFactory.types.SAVE_CANCEL,body:"&lt;p&gt;".concat(downloadModalTrigger.dataset.downloadBody,"&lt;/p&gt;"),buttons:{save:downloadModalTrigger.dataset.downloadButtonText},templateContext:{classes:"downloadcoursecontentmodal"}}).then((modal=&gt;{modal.show();const saveButton=document.querySelector('.modal .downloadcoursecontentmodal [data-action="save"]'),cancelButton=document.querySelector('.modal .downloadcoursecontentmodal [data-action="cancel"]'),modalContainer=document.querySelector('.modal[data-region="modal-container"]');(0,_jquery.default)(saveButton).on(_custom_interaction_events.default.events.activate,(e=&gt;downloadContent(e,downloadModalTrigger,modal))),(0,_jquery.default)(cancelButton).on(_custom_interaction_events.default.events.activate,(()=&gt;{modal.destroy()})),modalContainer.querySelector(".downloadcoursecontentmodal")&amp;&amp;(0,_jquery.default)(modalContainer).on(_custom_interaction_events.default.events.activate,(()=&gt;{modal.destroy()}))}))},downloadContent=(e,downloadModalTrigger,modal)=&gt;{e.preventDefault();const downloadForm=document.createElement("form");downloadForm.action=downloadModalTrigger.dataset.downloadLink,downloadForm.method="POST",downloadForm.target="_blank";const downloadSesskey=document.createElement("input");downloadSesskey.name="sesskey",downloadSesskey.value=_config.default.sesskey,downloadForm.appendChild(downloadSesskey),downloadForm.style.display="none",document.body.appendChild(downloadForm),downloadForm.submit(),document.body.removeChild(downloadForm),modal.destroy()}}));
/**
 * This module provides the course copy modal from the course and
 * category management screen.
 *
 * @module     core_course/copy_modal
 * @copyright  2020 onward The Moodle Users Association &lt;https://moodleassociation.org/&gt;
 * @author     Matt Porritt &lt;mattp@catalyst-au.net&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.9
 */
define("core_course/copy_modal",["jquery","core/str","core/modal_factory","core/modal_events","core/ajax","core/fragment","core/notification","core/config"],(function($,Str,ModalFactory,ModalEvents,ajax,Fragment,Notification,Config){var contextid,course,modalObj,CopyModal={},spinner='&lt;p class="text-center"&gt;&lt;i class="fa fa-spinner fa-pulse fa-2x fa-fw"&gt;&lt;/i&gt;&lt;/p&gt;';function updateModalBody(formdata){void 0===formdata&amp;&amp;(formdata={});var params={jsonformdata:JSON.stringify(formdata),courseid:course.id};modalObj.setBody(spinner),Str.get_string("copycoursetitle","backup",course.shortname).then((function(title){modalObj.setTitle(title),modalObj.setBody(Fragment.loadFragment("course","new_base_form",contextid,params))})).catch((function(){Notification.exception(new Error("Failed to load string: copycoursetitle"))}))}function processModalForm(e){e.preventDefault();var copyform=modalObj.getRoot().find("form").serialize(),formjson=JSON.stringify(copyform),invalid=$.merge(modalObj.getRoot().find('[aria-invalid="true"]'),modalObj.getRoot().find(".error"));invalid.length?invalid.first().focus():ajax.call([{methodname:"core_backup_submit_copy_form",args:{jsonformdata:formjson}}])[0].done((function(){if(modalObj.setBody(spinner),modalObj.hide(),1==e.formredirect){let redirect=Config.wwwroot+"/backup/copyprogress.php?id="+course.id;window.location.assign(redirect)}})).fail((function(){updateModalBody(copyform)}))}return CopyModal.init=function(context){contextid=context,Str.get_string("loading").then((function(title){ModalFactory.create({type:ModalFactory.types.DEFAULT,title:title,body:spinner,large:!0}).done((function(modal){(modalObj=modal).getRoot().on("click","#id_submitreturn",processModalForm),modalObj.getRoot().on("click","#id_submitdisplay",(function(e){e.formredirect=!0,processModalForm(e)})),modalObj.getRoot().on("click","#id_cancel",(function(e){e.preventDefault(),modalObj.setBody(spinner),modalObj.hide()}))}))})).catch((function(){Notification.exception(new Error("Failed to load string: loading"))})),$(".action-copy").on("click",(function(e){e.preventDefault();let url=new URL(this.getAttribute("href")),courseid=new URLSearchParams(url.search).get("id");ajax.call([{methodname:"core_course_get_courses",args:{options:{ids:[courseid]}}}])[0].done((function(response){course=response[0],updateModalBody()})).fail((function(){Notification.exception(new Error("Failed to load course"))})),modalObj.show()}))},CopyModal}));
define("core_course/events",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0;return _exports.default={favourited:"core_course:favourited",unfavorited:"core_course:unfavorited",manualCompletionToggled:"core_course:manualcompletiontoggled",stateChanged:"core_course:stateChanged",sectionRefreshed:"core_course:sectionRefreshed"},_exports.default}));
/**
 * Various actions on modules and sections in the editing mode - hiding, duplicating, deleting, etc.
 *
 * @module     core_course/actions
 * @copyright  2016 Marina Glancy
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.3
 */
define("core_course/actions",["jquery","core/ajax","core/templates","core/notification","core/str","core/url","core/yui","core/modal_factory","core/modal_events","core/key_codes","core/log","core_courseformat/courseeditor","core/event_dispatcher","core_course/events"],(function($,ajax,templates,notification,str,url,Y,ModalFactory,ModalEvents,KeyCodes,log,editor,EventDispatcher,CourseEvents){const componentActions=["moveSection","moveCm","addSection","deleteSection","sectionHide","sectionShow","cmHide","cmShow","cmStealth","cmMoveRight","cmMoveLeft"],courseeditor=editor.getCurrentCourseEditor();let formatname;var CSS_EDITINPROGRESS="editinprogress",CSS_EDITINGMOVE="editing_move",SELECTOR={ACTIVITYLI:"li.activity",ACTIONAREA:".actions",ACTIVITYACTION:"a.cm-edit-action",MENU:".moodle-actionmenu[data-enhance=moodle-core-actionmenu]",TOGGLE:".toggle-display,.dropdown-toggle",SECTIONLI:"li.section",SECTIONACTIONMENU:".section_action_menu",SECTIONITEM:'[data-for="section_title"]',ADDSECTIONS:".changenumsections [data-add-sections]",SECTIONBADGES:'[data-region="sectionbadges"]'};Y.use("moodle-course-coursebase",(function(){var courseformatselector=M.course.format.get_section_selector();courseformatselector&amp;&amp;(SELECTOR.SECTIONLI=courseformatselector)}));const dispatchEvent=function(eventName,detail,container,options){return container instanceof Element||void 0===container.get||(container=container.get(0)),EventDispatcher.dispatchEvent(eventName,detail,container,options)};var getModuleId=function(element){const item=element.get(0);if(item.dataset.id)return item.dataset.id;let id;return Y.use("moodle-course-util",(function(Y){id=Y.Moodle.core_course.util.cm.getId(Y.Node(item))})),id},addActivitySpinner=function(activity){activity.addClass(CSS_EDITINPROGRESS);var actionarea=activity.find(SELECTOR.ACTIONAREA).get(0);if(actionarea){var spinner=M.util.add_spinner(Y,Y.Node(actionarea));return spinner.show(),void 0!==activity.data("id")&amp;&amp;courseeditor.dispatch("cmLock",[activity.data("id")],!0),spinner}return null},addSectionSpinner=function(sectionelement){sectionelement.addClass(CSS_EDITINPROGRESS);var actionarea=sectionelement.find(SELECTOR.SECTIONACTIONMENU).get(0);if(actionarea){var spinner=M.util.add_spinner(Y,Y.Node(actionarea));return spinner.show(),void 0!==sectionelement.data("id")&amp;&amp;courseeditor.dispatch("sectionLock",[sectionelement.data("id")],!0),spinner}return null},addSectionLightbox=function(sectionelement){const item=sectionelement.get(0);var lightbox=M.util.add_lightbox(Y,Y.Node(item));return"section"==item.dataset.for&amp;&amp;item.dataset.id&amp;&amp;(courseeditor.dispatch("sectionLock",[item.dataset.id],!0),lightbox.setAttribute("data-state","section"),lightbox.setAttribute("data-state-id",item.dataset.id)),lightbox.show(),lightbox},removeSpinner=function(element,spinner,delay){window.setTimeout((function(){if(element.removeClass(CSS_EDITINPROGRESS),spinner&amp;&amp;spinner.hide(),void 0!==element.data("id")){const mutation="section"===element.data("for")?"sectionLock":"cmLock";courseeditor.dispatch(mutation,[element.data("id")],!1)}}),delay)},removeLightbox=function(lightbox,delay){lightbox&amp;&amp;window.setTimeout((function(){lightbox.hide(),lightbox.getAttribute("data-state")&amp;&amp;courseeditor.dispatch("".concat(lightbox.getAttribute("data-state"),"Lock"),[lightbox.getAttribute("data-state-id")],!1)}),delay)},initActionMenu=function(elementid){Y.use("moodle-course-coursebase",(function(){M.course.coursebase.invoke_function("setup_for_resource","#"+elementid)})),M.core.actionmenu&amp;&amp;M.core.actionmenu.newDOMNode&amp;&amp;M.core.actionmenu.newDOMNode(Y.one("#"+elementid))},editModule=function(moduleElement,cmid,target){var lightbox,action=target.attr("data-action"),spinner=addActivitySpinner(moduleElement),promises=ajax.call([{methodname:"core_course_edit_module",args:{id:cmid,action:action,sectionreturn:target.attr("data-sectionreturn")?target.attr("data-sectionreturn"):0}}],!0);"duplicate"===action&amp;&amp;(lightbox=addSectionLightbox(target.closest(SELECTOR.SECTIONLI))),$.when.apply($,promises).done((function(data){var mainElement,tabables,isInside,foundElement,elementToFocus=(mainElement=moduleElement,tabables=$("a:visible"),isInside=!1,foundElement=null,tabables.each((function(){if($.contains(mainElement[0],this))isInside=!0;else if(isInside)return foundElement=this,!1;return!0})),foundElement);moduleElement.replaceWith(data);let affectedids=[];$("&lt;div&gt;"+data+"&lt;/div&gt;").find(SELECTOR.ACTIVITYLI).each((function(index){initActionMenu($(this).attr("id")),0===index&amp;&amp;(!function(elementId,action){var mainelement=$("#"+elementId),selector="[data-action="+action+"]";"groupsseparate"!==action&amp;&amp;"groupsvisible"!==action&amp;&amp;"groupsnone"!==action||(selector="[data-action=groupsseparate],[data-action=groupsvisible],[data-action=groupsnone]"),mainelement.find(selector).is(":visible")?mainelement.find(selector).focus():mainelement.find(SELECTOR.MENU).find(SELECTOR.TOGGLE).focus()}($(this).attr("id"),action),elementToFocus=null),affectedids.push(getModuleId($(this)))})),elementToFocus&amp;&amp;elementToFocus.focus(),removeSpinner(moduleElement,spinner,400),removeLightbox(lightbox,400),moduleElement.trigger($.Event("coursemoduleedited",{ajaxreturn:data,action:action})),courseeditor.dispatch("legacyActivityAction",action,cmid,affectedids)})).fail((function(ex){removeSpinner(moduleElement,spinner),removeLightbox(lightbox);var e=$.Event("coursemoduleeditfailed",{exception:ex,action:action});moduleElement.trigger(e),e.isDefaultPrevented()||notification.exception(ex)}))},refreshModule=function(element,cmid,sectionreturn){void 0===sectionreturn&amp;&amp;(sectionreturn=courseeditor.sectionReturn);const activityElement=$(element);var spinner=addActivitySpinner(activityElement),promises=ajax.call([{methodname:"core_course_get_module",args:{id:cmid,sectionreturn:sectionreturn}}],!0);return new Promise(((resolve,reject)=&gt;{$.when.apply($,promises).done((function(data){removeSpinner(activityElement,spinner,400),replaceActivityHtmlWith(data),resolve(data)})).fail((function(){removeSpinner(activityElement,spinner),reject()}))}))},confirmDeleteModule=function(mainelement,onconfirm){var modtypename=mainelement.attr("class").match(/modtype_([^\s]*)/)[1],modulename=function(element){var name;Y.use("moodle-course-util",(function(Y){name=Y.Moodle.core_course.util.cm.getName(Y.Node(element.get(0)))}));const state=courseeditor.state,cmid=getModuleId(element);var _state$cm$get;return!name&amp;&amp;state&amp;&amp;cmid&amp;&amp;(name=null===(_state$cm$get=state.cm.get(cmid))||void 0===_state$cm$get?void 0:_state$cm$get.name),name}(mainelement);str.get_string("pluginname",modtypename).done((function(pluginname){var plugindata={type:pluginname,name:modulename};str.get_strings([{key:"confirm",component:"core"},{key:null===modulename?"deletechecktype":"deletechecktypename",param:plugindata},{key:"yes"},{key:"no"}]).done((function(s){notification.confirm(s[0],s[1],s[2],s[3],onconfirm)}))}))},replaceActionItem=function(actionitem,image,stringname,stringcomponent,newaction){var stringRequests=[{key:stringname,component:stringcomponent}];return str.get_strings(stringRequests).then((function(strings){return actionitem.find("span.menu-action-text").html(strings[0]),templates.renderPix(image,"core")})).then((function(pixhtml){actionitem.find(".icon").replaceWith(pixhtml),actionitem.attr("data-action",newaction)})).catch(notification.exception)},defaultEditSectionHandler=function(sectionElement,actionItem,data,courseformat,sectionid){var action=actionItem.attr("data-action");if("hide"===action||"show"===action){if("hide"===action?(sectionElement.addClass("hidden"),setSectionBadge(sectionElement[0],"hiddenfromstudents",!0,!1),replaceActionItem(actionItem,"i/show","showfromothers","format_"+courseformat,"show")):(setSectionBadge(sectionElement[0],"hiddenfromstudents",!1,!1),sectionElement.removeClass("hidden"),replaceActionItem(actionItem,"i/hide","hidefromothers","format_"+courseformat,"hide")),void 0!==data.modules)for(var i in data.modules)replaceActivityHtmlWith(data.modules[i]);void 0!==data.section_availability&amp;&amp;sectionElement.find(".section_availability").first().replaceWith(data.section_availability);void 0!==courseeditor.state.section.get(sectionid)&amp;&amp;courseeditor.dispatch("sectionState",[sectionid])}else if("setmarker"===action){var oldmarker=$(SELECTOR.SECTIONLI+".current"),oldActionItem=oldmarker.find(SELECTOR.SECTIONACTIONMENU+" a[data-action=removemarker]");oldmarker.removeClass("current"),replaceActionItem(oldActionItem,"i/marker","highlight","core","setmarker"),sectionElement.addClass("current"),replaceActionItem(actionItem,"i/marked","highlightoff","core","removemarker"),courseeditor.dispatch("legacySectionAction",action,sectionid),setSectionBadge(sectionElement[0],"iscurrent",!0,!0)}else"removemarker"===action&amp;&amp;(sectionElement.removeClass("current"),replaceActionItem(actionItem,"i/marker","highlight","core","setmarker"),courseeditor.dispatch("legacySectionAction",action,sectionid),setSectionBadge(sectionElement[0],"iscurrent",!1,!0))};var replaceActivityHtmlWith=function(activityHTML){$("&lt;div&gt;"+activityHTML+"&lt;/div&gt;").find(SELECTOR.ACTIVITYLI).each((function(){var id=$(this).attr("id");let focusedPath=function(id){const element=document.getElementById(id);if(element&amp;&amp;element.contains(document.activeElement))return element.querySelector(SELECTOR.ACTIONAREA).contains(document.activeElement)?"".concat(SELECTOR.ACTIONAREA,' [tabindex="0"]'):document.activeElement.id?"#".concat(document.activeElement.id):void 0}(id);if($(SELECTOR.ACTIVITYLI+"#"+id).replaceWith(activityHTML),initActionMenu(id),focusedPath){var _newItem$querySelecto;null===(_newItem$querySelecto=document.getElementById(id).querySelector(focusedPath))||void 0===_newItem$querySelecto||_newItem$querySelecto.focus()}}))},editSection=function(sectionElement,sectionid,target,courseformat){var action=target.attr("data-action"),sectionreturn=target.attr("data-sectionreturn")?target.attr("data-sectionreturn"):0;if(courseeditor.supportComponents&amp;&amp;componentActions.includes(action))return!1;var spinner=addSectionSpinner(sectionElement),promises=ajax.call([{methodname:"core_course_edit_section",args:{id:sectionid,action:action,sectionreturn:sectionreturn}}],!0),lightbox=addSectionLightbox(sectionElement);return $.when.apply($,promises).done((function(dataencoded){var data=$.parseJSON(dataencoded);removeSpinner(sectionElement,spinner),removeLightbox(lightbox),sectionElement.find(SELECTOR.SECTIONACTIONMENU).find(SELECTOR.TOGGLE).focus();var e=$.Event("coursesectionedited",{ajaxreturn:data,action:action});sectionElement.trigger(e),e.isDefaultPrevented()||defaultEditSectionHandler(sectionElement,target,data,courseformat,sectionid)})).fail((function(ex){removeSpinner(sectionElement,spinner),removeLightbox(lightbox);var e=$.Event("coursesectioneditfailed",{exception:ex,action:action});sectionElement.trigger(e),e.isDefaultPrevented()||notification.exception(ex)})),!0},setSectionBadge=function(sectionElement,badgetype,add,removeOther){const sectionbadges=sectionElement.querySelector(SELECTOR.SECTIONBADGES);if(!sectionbadges)return;const badge=sectionbadges.querySelector('[data-type="'+badgetype+'"]');badge&amp;&amp;(add?(removeOther&amp;&amp;document.querySelectorAll('[data-type="'+badgetype+'"]').forEach((b=&gt;{b.classList.add("d-none")})),badge.classList.remove("d-none")):badge.classList.add("d-none"))};return Y.use("moodle-course-coursebase",(function(){M.course.coursebase.register_module({set_visibility_resource_ui:function(args){var mainelement=$(args.element.getDOMNode()),cmid=getModuleId(mainelement);if(cmid){var sectionreturn=mainelement.find("."+CSS_EDITINGMOVE).attr("data-sectionreturn");refreshModule(mainelement,cmid,sectionreturn)}},updateMovedCmState:params=&gt;{const cm=courseeditor.state.cm.get(params.cmid);void 0!==cm&amp;&amp;courseeditor.dispatch("sectionState",[cm.sectionid]),courseeditor.dispatch("cmState",[params.cmid])},updateMovedSectionState:()=&gt;{courseeditor.dispatch("courseState")}})})),courseeditor.addMutations({legacyActivityAction:function(statemanager,action,cmid,affectedids){const state=statemanager.state,cm=state.cm.get(cmid);if(void 0===cm)return;const section=state.section.get(cm.sectionid);if(void 0!==section){switch(courseeditor.dispatch("cmLock",[cm.id],!0),statemanager.setReadOnly(!1),cm.locked=!1,action){case"delete":section.cmlist=section.cmlist.reduce(((cmlist,current)=&gt;(current!=cmid&amp;&amp;cmlist.push(current),cmlist)),[]),state.cm.delete(cmid);break;case"hide":case"show":case"duplicate":courseeditor.dispatch("cmState",affectedids)}statemanager.setReadOnly(!0)}},legacySectionAction:function(statemanager,action,sectionid){const state=statemanager.state,section=state.section.get(sectionid);if(void 0!==section){switch(statemanager.setReadOnly(!1),section.locked=!0,statemanager.setReadOnly(!0),statemanager.setReadOnly(!1),section.locked=!1,action){case"setmarker":state.section.forEach((current=&gt;{current.id!=sectionid&amp;&amp;(current.current=!1)})),section.current=!0;break;case"removemarker":section.current=!1}statemanager.setReadOnly(!0)}}}),{initCoursePage:function(courseformat){formatname=courseformat,$("body").on("click keypress",SELECTOR.ACTIVITYLI+" "+SELECTOR.ACTIVITYACTION+"[data-action]",(function(e){if("keypress"!==e.type||13===e.keyCode){var actionItem=$(this),moduleElement=actionItem.closest(SELECTOR.ACTIVITYLI),action=actionItem.attr("data-action"),moduleId=getModuleId(moduleElement);switch(action){case"moveleft":case"moveright":case"delete":case"duplicate":case"hide":case"stealth":case"show":case"groupsseparate":case"groupsvisible":case"groupsnone":break;default:return}moduleId&amp;&amp;(e.preventDefault(),"delete"===action?confirmDeleteModule(moduleElement,(function(){editModule(moduleElement,moduleId,actionItem)})):editModule(moduleElement,moduleId,actionItem))}})),$("body").on("click keypress",SELECTOR.SECTIONLI+" "+SELECTOR.SECTIONACTIONMENU+"[data-sectionid] a[data-action]",(function(e){if("keypress"===e.type&amp;&amp;13!==e.keyCode)return;var actionItem=$(this),sectionElement=actionItem.closest(SELECTOR.SECTIONLI),sectionId=actionItem.closest(SELECTOR.SECTIONACTIONMENU).attr("data-sectionid");let isExecuted=!0;var message,onconfirm;actionItem.attr("data-confirm")?(message=actionItem.attr("data-confirm"),onconfirm=function(){isExecuted=editSection(sectionElement,sectionId,actionItem,courseformat)},str.get_strings([{key:"confirm"},{key:"yes"},{key:"no"}]).done((function(s){notification.confirm(s[0],message,s[1],s[2],onconfirm)}))):isExecuted=editSection(sectionElement,sectionId,actionItem,courseformat),isExecuted&amp;&amp;e.preventDefault()})),$("body").on("updated","".concat(SELECTOR.SECTIONLI," ").concat(SELECTOR.SECTIONITEM," [data-inplaceeditable]"),(function(e){if(e.ajaxreturn&amp;&amp;e.ajaxreturn.itemid){void 0!==courseeditor.state.section.get(e.ajaxreturn.itemid)&amp;&amp;courseeditor.dispatch("sectionState",[e.ajaxreturn.itemid])}})),$("body").on("updated","".concat(SELECTOR.ACTIVITYLI," [data-inplaceeditable]"),(function(e){e.ajaxreturn&amp;&amp;e.ajaxreturn.itemid&amp;&amp;courseeditor.dispatch("cmState",[e.ajaxreturn.itemid])})),courseeditor.supportComponents&amp;&amp;componentActions.includes("addSection")||str.get_string("numberweeks").done((function(strNumberSections){var trigger=$(SELECTOR.ADDSECTIONS),modalTitle=trigger.attr("data-add-sections"),newSections=trigger.attr("data-new-sections"),modalBody=$('&lt;div&gt;&lt;label for="add_section_numsections"&gt;&lt;/label&gt; &lt;input id="add_section_numsections" type="number" min="1" max="'+newSections+'" value="1"&gt;&lt;/div&gt;');modalBody.find("label").html(strNumberSections),ModalFactory.create({title:modalTitle,type:ModalFactory.types.SAVE_CANCEL,body:modalBody.html()},trigger).done((function(modal){var numSections=$(modal.getBody()).find("#add_section_numsections"),addSections=function(){""+parseInt(numSections.val())===numSections.val()&amp;&amp;parseInt(numSections.val())&gt;=1&amp;&amp;(document.location=trigger.attr("href")+"&amp;numsections="+parseInt(numSections.val()))};modal.setSaveButtonText(modalTitle),modal.getRoot().on(ModalEvents.shown,(function(){numSections.focus().select().on("keydown",(function(e){e.keyCode===KeyCodes.enter&amp;&amp;addSections()}))})),modal.getRoot().on(ModalEvents.save,(function(e){e.preventDefault(),addSections()}))}))}))},replaceSectionActionItem:function(sectionelement,selector,image,stringname,stringcomponent,newaction){log.debug("replaceSectionActionItem() is deprecated and will be removed.");var actionitem=sectionelement.find(SELECTOR.SECTIONACTIONMENU+" "+selector);replaceActionItem(actionitem,image,stringname,stringcomponent,newaction)},refreshModule:refreshModule,refreshSection:function(element,sectionid,sectionreturn){void 0===sectionreturn&amp;&amp;(sectionreturn=courseeditor.sectionReturn);const sectionElement=$(element),promises=ajax.call([{methodname:"core_course_edit_section",args:{id:sectionid,action:"refresh",sectionreturn:sectionreturn}}],!0);var spinner=addSectionSpinner(sectionElement);return new Promise(((resolve,reject)=&gt;{$.when.apply($,promises).done((dataencoded=&gt;{removeSpinner(sectionElement,spinner);const data=$.parseJSON(dataencoded),newSectionElement=$(data.content);sectionElement.replaceWith(newSectionElement),$("".concat(SELECTOR.SECTIONLI,"#").concat(sectionid," ").concat(SELECTOR.ACTIVITYLI)).each(((index,activity)=&gt;{initActionMenu(activity.data("id"))}));dispatchEvent(CourseEvents.sectionRefreshed,{ajaxreturn:data,action:"refresh",newSectionElement:newSectionElement.get(0)},newSectionElement).defaultPrevented||defaultEditSectionHandler(newSectionElement,$(SELECTOR.SECTIONLI+"#"+sectionid),data,formatname,sectionid),resolve(data)})).fail((ex=&gt;{dispatchEvent("coursesectionrefreshfailed",{exception:ex,action:"refresh"},sectionElement).defaultPrevented||notification.exception(ex),reject()}))}))}}}));
define("core_course/recommendations",["exports","core/ajax","core/notification"],(function(_exports,_ajax,_notification){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * A javascript module to handle toggling activity chooser recommendations.
   *
   * @module     core_course/recommendations
   * @copyright  2020 Adrian Greeve &lt;adrian@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_ajax=_interopRequireDefault(_ajax),_notification=_interopRequireDefault(_notification);const toggleRecommendation=e=&gt;{let data={methodname:"core_course_toggle_activity_recommendation",args:{area:e.currentTarget.dataset.area,id:e.currentTarget.dataset.id}};_ajax.default.call([data])[0].fail(_notification.default.exception)};_exports.init=()=&gt;{document.querySelectorAll("[data-area]").forEach((checkbox=&gt;{checkbox.addEventListener("change",toggleRecommendation)}))}}));
define("core_course/view",["exports","core_course/events"],(function(_exports,CourseEvents){function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,CourseEvents=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}
/**
   * JS module for the course homepage.
   *
   * @module      core_course/view
   * @copyright   2021 Jun Pataleta &lt;jun@moodle.com&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */(CourseEvents);let registered=!1;_exports.init=()=&gt;{registered||(document.addEventListener(CourseEvents.manualCompletionToggled,(e=&gt;{parseInt(e.detail.withAvailability)&amp;&amp;window.location.reload()})),registered=!0)}}));
define("core_courseformat/local/courseindex/drawer",["exports","core/reactive","core_courseformat/courseeditor"],(function(_exports,_reactive,_courseeditor){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0;
/**
   * Course index drawer wrap.
   *
   * This component is mostly used to ensure all subcomponents find a parent
   * compoment with a reactive instance defined.
   *
   * @module     core_courseformat/local/courseindex/drawer
   * @class     core_courseformat/local/courseindex/drawer
   * @copyright  2021 Ferran Recio &lt;ferran@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */
class Component extends _reactive.BaseComponent{create(){this.name="courseindex-drawer"}static init(target,selectors){return new Component({element:document.getElementById(target),reactive:(0,_courseeditor.getCurrentCourseEditor)(),selectors:selectors})}}return _exports.default=Component,_exports.default}));
define("core_courseformat/local/courseindex/placeholder",["exports","core/reactive","core/templates","core_courseformat/courseeditor","core/pending"],(function(_exports,_reactive,_templates,_courseeditor,_pending){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Course index placeholder replacer.
   *
   * @module     core_courseformat/local/courseindex/placeholder
   * @class      core_courseformat/local/courseindex/placeholder
   * @copyright  2021 Ferran Recio &lt;ferran@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_templates=_interopRequireDefault(_templates),_pending=_interopRequireDefault(_pending);class Component extends _reactive.BaseComponent{static init(target,selectors){return new Component({element:document.getElementById(target),reactive:(0,_courseeditor.getCurrentCourseEditor)(),selectors:selectors})}create(){this.pendingContent=new _pending.default("core_courseformat/placeholder:loadcourseindex")}async stateReady(state){this.loadStaticContent()||await this.loadTemplateContent(state)}loadStaticContent(){const index=this.reactive.getStorageValue("courseIndex");return!(!index.html||!index.js)&amp;&amp;(_templates.default.replaceNode(this.element,index.html,index.js),this.pendingContent.resolve(),!0)}async loadTemplateContent(state){const data=this.reactive.getExporter().course(state);try{const{html:html,js:js}=await _templates.default.renderForPromise("core_courseformat/local/courseindex/courseindex",data);_templates.default.replaceNode(this.element,html,js),this.pendingContent.resolve(),this.reactive.setStorageValue("courseIndex",{html:html,js:js})}catch(error){throw this.pendingContent.resolve(error),error}}}return _exports.default=Component,_exports.default}));
define("core_courseformat/local/courseindex/courseindex",["exports","core/reactive","core_courseformat/courseeditor","jquery","core_courseformat/local/courseeditor/contenttree"],(function(_exports,_reactive,_courseeditor,_jquery,_contenttree){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Course index main component.
   *
   * @module     core_courseformat/local/courseindex/courseindex
   * @class     core_courseformat/local/courseindex/courseindex
   * @copyright  2021 Ferran Recio &lt;ferran@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_jquery=_interopRequireDefault(_jquery),_contenttree=_interopRequireDefault(_contenttree);class Component extends _reactive.BaseComponent{create(){this.name="courseindex",this.selectors={SECTION:"[data-for='section']",SECTION_CMLIST:"[data-for='cmlist']",CM:"[data-for='cm']",TOGGLER:'[data-action="togglecourseindexsection"]',COLLAPSE:'[data-toggle="collapse"]',DRAWER:".drawer"},this.classes={SECTIONHIDDEN:"dimmed",CMHIDDEN:"dimmed",SECTIONCURRENT:"current",COLLAPSED:"collapsed",SHOW:"show"},this.sections={},this.cms={}}static init(target,selectors){return new Component({element:document.getElementById(target),reactive:(0,_courseeditor.getCurrentCourseEditor)(),selectors:selectors})}stateReady(state){this.addEventListener(this.element,"click",this._sectionTogglers);this.getElements(this.selectors.SECTION).forEach((section=&gt;{this.sections[section.dataset.id]=section}));this.getElements(this.selectors.CM).forEach((cm=&gt;{this.cms[cm.dataset.id]=cm})),this._refreshPageItem({element:state.course,state:state}),this.contentTree=new _contenttree.default(this.element,this.selectors,this.reactive.isEditing)}getWatchers(){return[{watch:"section.indexcollapsed:updated",handler:this._refreshSectionCollapsed},{watch:"cm:created",handler:this._createCm},{watch:"cm:deleted",handler:this._deleteCm},{watch:"section:created",handler:this._createSection},{watch:"section:deleted",handler:this._deleteSection},{watch:"course.pageItem:created",handler:this._refreshPageItem},{watch:"course.pageItem:updated",handler:this._refreshPageItem},{watch:"course.sectionlist:updated",handler:this._refreshCourseSectionlist},{watch:"section.cmlist:updated",handler:this._refreshSectionCmlist}]}_sectionTogglers(event){const sectionlink=event.target.closest(this.selectors.TOGGLER),isChevron=event.target.closest(this.selectors.COLLAPSE);if(sectionlink||isChevron){var _toggler$classList$co;const section=event.target.closest(this.selectors.SECTION),toggler=section.querySelector(this.selectors.COLLAPSE),isCollapsed=null!==(_toggler$classList$co=null==toggler?void 0:toggler.classList.contains(this.classes.COLLAPSED))&amp;&amp;void 0!==_toggler$classList$co&amp;&amp;_toggler$classList$co,sectionId=section.getAttribute("data-id");sectionlink?isCollapsed&amp;&amp;this.reactive.dispatch("sectionIndexCollapsed",[sectionId],!isCollapsed):this.reactive.dispatch("sectionIndexCollapsed",[sectionId],!isCollapsed)}}_refreshSectionCollapsed(_ref){var _toggler$classList$co2;let{element:element}=_ref;const target=this.getElement(this.selectors.SECTION,element.id);if(!target)throw new Error("Unkown section with ID ".concat(element.id));const toggler=target.querySelector(this.selectors.COLLAPSE),isCollapsed=null!==(_toggler$classList$co2=null==toggler?void 0:toggler.classList.contains(this.classes.COLLAPSED))&amp;&amp;void 0!==_toggler$classList$co2&amp;&amp;_toggler$classList$co2;element.indexcollapsed!==isCollapsed&amp;&amp;this._expandSectionNode(element)}_expandSectionNode(element,forceValue){var _toggler$dataset$targ;const toggler=this.getElement(this.selectors.SECTION,element.id).querySelector(this.selectors.COLLAPSE);let collapsibleId=null!==(_toggler$dataset$targ=toggler.dataset.target)&amp;&amp;void 0!==_toggler$dataset$targ?_toggler$dataset$targ:toggler.getAttribute("href");if(!collapsibleId)return;collapsibleId=collapsibleId.replace("#","");const collapsible=document.getElementById(collapsibleId);if(!collapsible)return;void 0===forceValue&amp;&amp;(forceValue=!element.indexcollapsed);const togglerValue=forceValue?"show":"hide";(0,_jquery.default)(collapsible).collapse(togglerValue)}_refreshPageItem(_ref2){var _element$pageItem;let{element:element,state:state}=_ref2;if(null==element||null===(_element$pageItem=element.pageItem)||void 0===_element$pageItem||!_element$pageItem.isStatic||"cm"!=element.pageItem.type)return;const section=state.section.get(element.pageItem.sectionId);section.indexcollapsed&amp;&amp;(this._expandSectionNode(section,!0),setTimeout((()=&gt;{var _this$cms$element$pag;return null===(_this$cms$element$pag=this.cms[element.pageItem.id])||void 0===_this$cms$element$pag?void 0:_this$cms$element$pag.scrollIntoView({block:"nearest"})}),250))}async _createCm(_ref3){let{state:state,element:element}=_ref3;const fakeelement=document.createElement("li");fakeelement.classList.add("bg-pulse-grey","w-100"),fakeelement.innerHTML="&amp;nbsp;",this.cms[element.id]=fakeelement,this._refreshSectionCmlist({state:state,element:state.section.get(element.sectionid)});const data=this.reactive.getExporter().cm(state,element),newelement=(await this.renderComponent(fakeelement,"core_courseformat/local/courseindex/cm",data)).getElement();this.cms[element.id]=newelement,fakeelement.parentNode.replaceChild(newelement,fakeelement)}async _createSection(_ref4){let{state:state,element:element}=_ref4;const fakeelement=document.createElement("div");fakeelement.classList.add("bg-pulse-grey","w-100"),fakeelement.innerHTML="&amp;nbsp;",this.sections[element.id]=fakeelement,this._refreshCourseSectionlist({state:state,element:state.course});const data=this.reactive.getExporter().section(state,element),newelement=(await this.renderComponent(fakeelement,"core_courseformat/local/courseindex/section",data)).getElement();this.sections[element.id]=newelement,fakeelement.parentNode.replaceChild(newelement,fakeelement)}_refreshSectionCmlist(_ref5){var _element$cmlist;let{element:element}=_ref5;const cmlist=null!==(_element$cmlist=element.cmlist)&amp;&amp;void 0!==_element$cmlist?_element$cmlist:[],listparent=this.getElement(this.selectors.SECTION_CMLIST,element.id);this._fixOrder(listparent,cmlist,this.cms)}_refreshCourseSectionlist(_ref6){var _element$sectionlist;let{element:element}=_ref6;const sectionlist=null!==(_element$sectionlist=element.sectionlist)&amp;&amp;void 0!==_element$sectionlist?_element$sectionlist:[];this._fixOrder(this.element,sectionlist,this.sections)}_fixOrder(container,neworder,allitems){if(!neworder.length)return container.classList.add("hidden"),void(container.innerHTML="");for(container.classList.remove("hidden"),neworder.forEach(((itemid,index)=&gt;{const item=allitems[itemid],currentitem=container.children[index];void 0!==currentitem?currentitem!==item&amp;&amp;container.insertBefore(item,currentitem):container.append(item)}));container.children.length&gt;neworder.length;)container.removeChild(container.lastChild)}_deleteCm(_ref7){let{element:element}=_ref7;delete this.cms[element.id]}_deleteSection(_ref8){let{element:element}=_ref8;delete this.sections[element.id]}}return _exports.default=Component,_exports.default}));
define("core_courseformat/local/courseindex/sectiontitle",["exports","core_courseformat/local/courseeditor/dndsectionitem"],(function(_exports,_dndsectionitem){var obj;
/**
   * Course index section title component.
   *
   * This component is used to control specific course section interactions like drag and drop.
   *
   * @module     core_courseformat/local/courseindex/sectiontitle
   * @class      core_courseformat/local/courseindex/sectiontitle
   * @copyright  2021 Ferran Recio &lt;ferran@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_dndsectionitem=(obj=_dndsectionitem)&amp;&amp;obj.__esModule?obj:{default:obj};class Component extends _dndsectionitem.default{create(descriptor){this.name="courseindex_sectiontitle",this.id=descriptor.id,this.section=descriptor.section,this.course=descriptor.course,this.fullregion=descriptor.fullregion,this.section.number&gt;0&amp;&amp;(this.getDraggableData=this._getDraggableData)}static init(target,selectors){return new Component({element:document.getElementById(target),selectors:selectors})}stateReady(state){this.configDragDrop(this.id,state,this.fullregion)}}return _exports.default=Component,_exports.default}));
define("core_courseformat/local/courseindex/cm",["exports","core_courseformat/local/courseeditor/dndcmitem","core/templates","core/prefetch","core/config"],(function(_exports,_dndcmitem,_templates,_prefetch,_config){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Course index cm component.
   *
   * This component is used to control specific course modules interactions like drag and drop.
   *
   * @module     core_courseformat/local/courseindex/cm
   * @class      core_courseformat/local/courseindex/cm
   * @copyright  2021 Ferran Recio &lt;ferran@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_dndcmitem=_interopRequireDefault(_dndcmitem),_templates=_interopRequireDefault(_templates),_prefetch=_interopRequireDefault(_prefetch),_config=_interopRequireDefault(_config);_prefetch.default.prefetchTemplate("core_courseformat/local/courseindex/cmcompletion");class Component extends _dndcmitem.default{create(){this.name="courseindex_cm",this.selectors={CM_NAME:"[data-for='cm_name']",CM_COMPLETION:"[data-for='cm_completion']"},this.classes={CMHIDDEN:"dimmed",LOCKED:"editinprogress",RESTRICTIONS:"restrictions",PAGEITEM:"pageitem",INDENTED:"indented"},this.id=this.element.dataset.id}static init(target,selectors){return new Component({element:document.getElementById(target),selectors:selectors})}stateReady(state){this.configDragDrop(this.id);const cm=state.cm.get(this.id),course=state.course;this._refreshCompletion({state:state,element:cm});const anchor=new URL(window.location.href).hash.replace("#","");(window.location.href==cm.url||window.location.href.includes(course.baseurl)&amp;&amp;anchor==cm.anchor)&amp;&amp;(this.reactive.dispatch("setPageItem","cm",this.id),this.element.scrollIntoView({block:"center"})),_config.default.contextid!=_config.default.courseContextId&amp;&amp;_config.default.contextInstanceId==this.id&amp;&amp;(this.reactive.dispatch("setPageItem","cm",this.id,!0),this.element.scrollIntoView({block:"center"})),cm.uservisible||this.addEventListener(this.getElement(this.selectors.CM_NAME),"click",this._activityAnchor)}getWatchers(){return[{watch:"cm[".concat(this.id,"]:deleted"),handler:this.remove},{watch:"cm[".concat(this.id,"]:updated"),handler:this._refreshCm},{watch:"cm[".concat(this.id,"].completionstate:updated"),handler:this._refreshCompletion},{watch:"course.pageItem:updated",handler:this._refreshPageItem}]}_refreshCm(_ref){var _element$dragging,_element$locked,_element$hascmrestric;let{element:element}=_ref;this.element.classList.toggle(this.classes.CMHIDDEN,!element.visible),this.getElement(this.selectors.CM_NAME).innerHTML=element.name,this.element.classList.toggle(this.classes.DRAGGING,null!==(_element$dragging=element.dragging)&amp;&amp;void 0!==_element$dragging&amp;&amp;_element$dragging),this.element.classList.toggle(this.classes.LOCKED,null!==(_element$locked=element.locked)&amp;&amp;void 0!==_element$locked&amp;&amp;_element$locked),this.element.classList.toggle(this.classes.RESTRICTIONS,null!==(_element$hascmrestric=element.hascmrestrictions)&amp;&amp;void 0!==_element$hascmrestric&amp;&amp;_element$hascmrestric),this.element.classList.toggle(this.classes.INDENTED,element.indent),this.locked=element.locked}_refreshPageItem(_ref2){let{element:element}=_ref2;if(!element.pageItem)return;const isPageId="cm"==element.pageItem.type&amp;&amp;element.pageItem.id==this.id;this.element.classList.toggle(this.classes.PAGEITEM,isPageId),isPageId&amp;&amp;!this.reactive.isEditing&amp;&amp;this.element.scrollIntoView({block:"nearest"})}async _refreshCompletion(_ref3){let{state:state,element:element}=_ref3;if(this.reactive.isEditing||!element.istrackeduser)return;const completionElement=this.getElement(this.selectors.CM_COMPLETION);if(completionElement.dataset.value==element.completionstate)return;const data=this.reactive.getExporter().cmCompletion(state,element),{html:html,js:js}=await _templates.default.renderForPromise("core_courseformat/local/courseindex/cmcompletion",data);_templates.default.replaceNode(completionElement,html,js)}_activityAnchor(event){const cm=this.reactive.get("cm",this.id);if(document.getElementById(cm.anchor))return void setTimeout((()=&gt;{this.reactive.dispatch("setPageItem","cm",cm.id)}),50);const course=this.reactive.get("course"),section=this.reactive.get("section",cm.sectionid);if(!section)return;const url="".concat(course.baseurl,"&amp;section=").concat(section.number,"#").concat(cm.anchor);event.preventDefault(),window.location=url}}return _exports.default=Component,_exports.default}));
define("core_courseformat/local/courseindex/section",["exports","core_courseformat/local/courseindex/sectiontitle","core_courseformat/local/courseeditor/dndsection"],(function(_exports,_sectiontitle,_dndsection){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Course index section component.
   *
   * This component is used to control specific course section interactions like drag and drop.
   *
   * @module     core_courseformat/local/courseindex/section
   * @class      core_courseformat/local/courseindex/section
   * @copyright  2021 Ferran Recio &lt;ferran@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_sectiontitle=_interopRequireDefault(_sectiontitle),_dndsection=_interopRequireDefault(_dndsection);class Component extends _dndsection.default{create(){this.name="courseindex_section",this.selectors={SECTION_ITEM:"[data-for='section_item']",SECTION_TITLE:"[data-for='section_title']",CM_LAST:'[data-for="cm"]:last-child'},this.classes={SECTIONHIDDEN:"dimmed",SECTIONCURRENT:"current",LOCKED:"editinprogress",RESTRICTIONS:"restrictions",PAGEITEM:"pageitem"},this.id=this.element.dataset.id,this.isPageItem=!1}static init(target,selectors){return new Component({element:document.getElementById(target),selectors:selectors})}stateReady(state){this.configState(state);const sectionItem=this.getElement(this.selectors.SECTION_ITEM);if(this.reactive.isEditing&amp;&amp;this.reactive.supportComponents){const titleitem=new _sectiontitle.default({...this,element:sectionItem,fullregion:this.element});this.configDragDrop(titleitem)}const section=state.section.get(this.id);window.location.href==section.sectionurl.replace(/&amp;amp;/g,"&amp;")&amp;&amp;(this.reactive.dispatch("setPageItem","section",this.id),sectionItem.scrollIntoView())}getWatchers(){return[{watch:"section[".concat(this.id,"]:deleted"),handler:this.remove},{watch:"section[".concat(this.id,"]:updated"),handler:this._refreshSection},{watch:"course.pageItem:updated",handler:this._refreshPageItem}]}getLastCm(){return this.getElement(this.selectors.CM_LAST)}_refreshSection(_ref){var _element$hasrestricti,_element$dragging,_element$locked;let{element:element}=_ref;const sectionItem=this.getElement(this.selectors.SECTION_ITEM);sectionItem.classList.toggle(this.classes.SECTIONHIDDEN,!element.visible),sectionItem.classList.toggle(this.classes.RESTRICTIONS,null!==(_element$hasrestricti=element.hasrestrictions)&amp;&amp;void 0!==_element$hasrestricti&amp;&amp;_element$hasrestricti),this.element.classList.toggle(this.classes.SECTIONCURRENT,element.current),this.element.classList.toggle(this.classes.DRAGGING,null!==(_element$dragging=element.dragging)&amp;&amp;void 0!==_element$dragging&amp;&amp;_element$dragging),this.element.classList.toggle(this.classes.LOCKED,null!==(_element$locked=element.locked)&amp;&amp;void 0!==_element$locked&amp;&amp;_element$locked),this.locked=element.locked,this.getElement(this.selectors.SECTION_TITLE).innerHTML=element.title}_refreshPageItem(_ref2){var _element$pageItem,_this$pageItem;let{element:element,state:state}=_ref2;if(!element.pageItem)return;if(element.pageItem.sectionId!==this.id&amp;&amp;this.isPageItem)return this.pageItem=!1,void this.getElement(this.selectors.SECTION_ITEM).classList.remove(this.classes.PAGEITEM);var _element$pageItem2;!state.section.get(this.id).indexcollapsed||null!==(_element$pageItem=element.pageItem)&amp;&amp;void 0!==_element$pageItem&amp;&amp;_element$pageItem.isStatic?this.pageItem="section"==element.pageItem.type&amp;&amp;element.pageItem.id==this.id:this.pageItem=(null===(_element$pageItem2=element.pageItem)||void 0===_element$pageItem2?void 0:_element$pageItem2.sectionId)==this.id;this.getElement(this.selectors.SECTION_ITEM).classList.toggle(this.classes.PAGEITEM,null!==(_this$pageItem=this.pageItem)&amp;&amp;void 0!==_this$pageItem&amp;&amp;_this$pageItem),this.pageItem&amp;&amp;!this.reactive.isEditing&amp;&amp;this.element.scrollIntoView({block:"nearest"})}}return _exports.default=Component,_exports.default}));
define("core_courseformat/local/content",["exports","core/reactive","core/utils","core_courseformat/courseeditor","core/inplace_editable","core_courseformat/local/content/section","core_courseformat/local/content/section/cmitem","core_course/actions","core_courseformat/local/content/actions","core_course/events","jquery","core/pending","core/log"],(function(_exports,_reactive,_utils,_courseeditor,_inplace_editable,_section,_cmitem,_actions,_actions2,CourseEvents,_jquery,_pending,_log){function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Course index main component.
   *
   * @module     core_courseformat/local/content
   * @class      core_courseformat/local/content
   * @copyright  2020 Ferran Recio &lt;ferran@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_inplace_editable=_interopRequireDefault(_inplace_editable),_section=_interopRequireDefault(_section),_cmitem=_interopRequireDefault(_cmitem),_actions=_interopRequireDefault(_actions),_actions2=_interopRequireDefault(_actions2),CourseEvents=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}(CourseEvents),_jquery=_interopRequireDefault(_jquery),_pending=_interopRequireDefault(_pending),_log=_interopRequireDefault(_log);class Component extends _reactive.BaseComponent{create(descriptor){var _descriptor$sectionRe;this.name="course_format",this.selectors={SECTION:"[data-for='section']",SECTION_ITEM:"[data-for='section_title']",SECTION_CMLIST:"[data-for='cmlist']",COURSE_SECTIONLIST:"[data-for='course_sectionlist']",CM:"[data-for='cmitem']",PAGE:"#page",TOGGLER:'[data-action="togglecoursecontentsection"]',COLLAPSE:'[data-toggle="collapse"]',TOGGLEALL:'[data-toggle="toggleall"]',ACTIVITYTAG:"li",SECTIONTAG:"li"},this.classes={COLLAPSED:"collapsed",ACTIVITY:"activity",STATEDREADY:"stateready",SECTION:"section"},this.dettachedCms={},this.dettachedSections={},this.sections={},this.cms={},this.sectionReturn=null!==(_descriptor$sectionRe=descriptor.sectionReturn)&amp;&amp;void 0!==_descriptor$sectionRe?_descriptor$sectionRe:0,this.debouncedReloads=new Map}static init(target,selectors,sectionReturn){return new Component({element:document.getElementById(target),reactive:(0,_courseeditor.getCurrentCourseEditor)(),selectors:selectors,sectionReturn:sectionReturn})}stateReady(state){this._indexContents(),this.addEventListener(this.element,"click",this._sectionTogglers);const toogleAll=this.getElement(this.selectors.TOGGLEALL);if(toogleAll){const collapseElementIds=[...this.getElements(this.selectors.COLLAPSE)].map((element=&gt;element.id));toogleAll.setAttribute("aria-controls",collapseElementIds.join(" ")),this.addEventListener(toogleAll,"click",this._allSectionToggler),this.addEventListener(toogleAll,"keydown",(e=&gt;{" "===e.key&amp;&amp;this._allSectionToggler(e)})),this._refreshAllSectionsToggler(state)}this.reactive.supportComponents&amp;&amp;(this.reactive.isEditing&amp;&amp;new _actions2.default(this),this.element.classList.add(this.classes.STATEDREADY)),this.addEventListener(this.element,CourseEvents.manualCompletionToggled,this._completionHandler),this.addEventListener(document.querySelector(this.selectors.PAGE),"scroll",this._scrollHandler)}_sectionTogglers(event){const sectionlink=event.target.closest(this.selectors.TOGGLER),closestCollapse=event.target.closest(this.selectors.COLLAPSE),isChevron=null==closestCollapse?void 0:closestCollapse.closest(this.selectors.SECTION_ITEM);if(sectionlink||isChevron){var _toggler$classList$co;const section=event.target.closest(this.selectors.SECTION),toggler=section.querySelector(this.selectors.COLLAPSE),isCollapsed=null!==(_toggler$classList$co=null==toggler?void 0:toggler.classList.contains(this.classes.COLLAPSED))&amp;&amp;void 0!==_toggler$classList$co&amp;&amp;_toggler$classList$co,sectionId=section.getAttribute("data-id");this.reactive.dispatch("sectionContentCollapsed",[sectionId],!isCollapsed)}}_allSectionToggler(event){var _course$sectionlist;event.preventDefault();const isAllCollapsed=event.target.closest(this.selectors.TOGGLEALL).classList.contains(this.classes.COLLAPSED),course=this.reactive.get("course");this.reactive.dispatch("sectionContentCollapsed",null!==(_course$sectionlist=course.sectionlist)&amp;&amp;void 0!==_course$sectionlist?_course$sectionlist:[],!isAllCollapsed)}getWatchers(){return this.reactive.sectionReturn=this.sectionReturn,this.reactive.supportComponents?[{watch:"cm.visible:updated",handler:this._reloadCm},{watch:"cm.stealth:updated",handler:this._reloadCm},{watch:"cm.indent:updated",handler:this._reloadCm},{watch:"section.number:updated",handler:this._refreshSectionNumber},{watch:"section.contentcollapsed:updated",handler:this._refreshSectionCollapsed},{watch:"transaction:start",handler:this._startProcessing},{watch:"course.sectionlist:updated",handler:this._refreshCourseSectionlist},{watch:"section.cmlist:updated",handler:this._refreshSectionCmlist},{watch:"section.visible:updated",handler:this._reloadSection},{watch:"state:updated",handler:this._indexContents},{watch:"cm.visible:updated",handler:this._reloadCm},{watch:"cm.sectionid:updated",handler:this._reloadCm}]:[]}_refreshSectionCollapsed(_ref){var _toggler$classList$co2;let{state:state,element:element}=_ref;const target=this.getElement(this.selectors.SECTION,element.id);if(!target)throw new Error("Unknown section with ID ".concat(element.id));const toggler=target.querySelector(this.selectors.COLLAPSE),isCollapsed=null!==(_toggler$classList$co2=null==toggler?void 0:toggler.classList.contains(this.classes.COLLAPSED))&amp;&amp;void 0!==_toggler$classList$co2&amp;&amp;_toggler$classList$co2;if(element.contentcollapsed!==isCollapsed){var _toggler$dataset$targ;let collapsibleId=null!==(_toggler$dataset$targ=toggler.dataset.target)&amp;&amp;void 0!==_toggler$dataset$targ?_toggler$dataset$targ:toggler.getAttribute("href");if(!collapsibleId)return;collapsibleId=collapsibleId.replace("#","");const collapsible=document.getElementById(collapsibleId);if(!collapsible)return;(0,_jquery.default)(collapsible).collapse(element.contentcollapsed?"hide":"show")}this._refreshAllSectionsToggler(state)}_refreshAllSectionsToggler(state){const target=this.getElement(this.selectors.TOGGLEALL);if(!target)return;let allcollapsed=!0,allexpanded=!0;state.section.forEach((section=&gt;{allcollapsed=allcollapsed&amp;&amp;section.contentcollapsed,allexpanded=allexpanded&amp;&amp;!section.contentcollapsed})),allcollapsed&amp;&amp;(target.classList.add(this.classes.COLLAPSED),target.setAttribute("aria-expanded",!1)),allexpanded&amp;&amp;(target.classList.remove(this.classes.COLLAPSED),target.setAttribute("aria-expanded",!0))}_startProcessing(){this.dettachedCms={},this.dettachedSections={}}_completionHandler(_ref2){let{detail:detail}=_ref2;void 0!==detail&amp;&amp;this.reactive.dispatch("cmCompletion",[detail.cmid],detail.completed)}_scrollHandler(){const pageOffset=document.querySelector(this.selectors.PAGE).scrollTop,items=this.reactive.getExporter().allItemsArray(this.reactive.state);let pageItem=null;items.every((item=&gt;{const index="section"===item.type?this.sections:this.cms;if(void 0===index[item.id])return!0;const element=index[item.id].element;return"cm"!==item.type||item.url||this.reactive.isEditing?(pageItem=item,pageOffset&gt;=element.offsetTop):pageOffset&gt;=element.offsetTop})),pageItem&amp;&amp;this.reactive.dispatch("setPageItem",pageItem.type,pageItem.id)}_refreshSectionNumber(_ref3){let{element:element}=_ref3;const target=this.getElement(this.selectors.SECTION,element.id);if(!target)return;target.id="section-".concat(element.number),target.dataset.sectionid=element.number,target.dataset.number=element.number;const inplace=_inplace_editable.default.getInplaceEditable(target.querySelector(this.selectors.SECTION_ITEM));if(inplace){const currentvalue=inplace.getValue(),currentitemid=inplace.getItemId();""===inplace.getValue()&amp;&amp;(currentitemid!=element.id||currentvalue==element.rawtitle&amp;&amp;""!=element.rawtitle||inplace.setValue(element.rawtitle))}}_refreshSectionCmlist(_ref4){var _element$cmlist;let{element:element}=_ref4;const cmlist=null!==(_element$cmlist=element.cmlist)&amp;&amp;void 0!==_element$cmlist?_element$cmlist:[],section=this.getElement(this.selectors.SECTION,element.id),listparent=null==section?void 0:section.querySelector(this.selectors.SECTION_CMLIST),createCm=this._createCmItem.bind(this);listparent&amp;&amp;this._fixOrder(listparent,cmlist,this.selectors.CM,this.dettachedCms,createCm)}_refreshCourseSectionlist(_ref5){var _element$sectionlist;let{element:element}=_ref5;if(0!=this.reactive.sectionReturn)return;const sectionlist=null!==(_element$sectionlist=element.sectionlist)&amp;&amp;void 0!==_element$sectionlist?_element$sectionlist:[],listparent=this.getElement(this.selectors.COURSE_SECTIONLIST),createSection=this._createSectionItem.bind(this);listparent&amp;&amp;this._fixOrder(listparent,sectionlist,this.selectors.SECTION,this.dettachedSections,createSection)}_indexContents(){this._scanIndex(this.selectors.SECTION,this.sections,(item=&gt;new _section.default(item))),this._scanIndex(this.selectors.CM,this.cms,(item=&gt;new _cmitem.default(item)))}_scanIndex(selector,index,creationhandler){this.getElements("".concat(selector,":not([data-indexed])")).forEach((item=&gt;{var _item$dataset;null!=item&amp;&amp;null!==(_item$dataset=item.dataset)&amp;&amp;void 0!==_item$dataset&amp;&amp;_item$dataset.id&amp;&amp;(void 0!==index[item.dataset.id]&amp;&amp;index[item.dataset.id].unregister(),index[item.dataset.id]=creationhandler({...this,element:item}),item.dataset.indexed=!0)}))}_reloadCm(_ref6){let{element:element}=_ref6;if(!this.getElement(this.selectors.CM,element.id))return;this._getDebouncedReloadCm(element.id)()}_getDebouncedReloadCm(cmId){const pendingKey="courseformat/content:reloadCm_".concat(cmId);let debouncedReload=this.debouncedReloads.get(pendingKey);if(debouncedReload)return debouncedReload;return debouncedReload=(0,_utils.debounce)((()=&gt;{const pendingReload=new _pending.default(pendingKey);this.debouncedReloads.delete(pendingKey);const cmitem=this.getElement(this.selectors.CM,cmId);if(!cmitem)return pendingReload.resolve();return _actions.default.refreshModule(cmitem,cmId).then((()=&gt;(this._indexContents(),!0))).catch((error=&gt;{_log.default.debug(error)})).finally((()=&gt;{pendingReload.resolve()})),pendingReload}),200,{cancel:!0,pending:!0}),this.debouncedReloads.set(pendingKey,debouncedReload),debouncedReload}_cancelDebouncedReloadCm(cmId){const pendingKey="courseformat/content:reloadCm_".concat(cmId),debouncedReload=this.debouncedReloads.get(pendingKey);debouncedReload&amp;&amp;(debouncedReload.cancel(),this.debouncedReloads.delete(pendingKey))}_reloadSection(_ref7){let{element:element}=_ref7;const pendingReload=new _pending.default("courseformat/content:reloadSection_".concat(element.id)),sectionitem=this.getElement(this.selectors.SECTION,element.id);if(sectionitem){for(const cmId of element.cmlist)this._cancelDebouncedReloadCm(cmId);_actions.default.refreshSection(sectionitem,element.id).then((()=&gt;(this._indexContents(),!0))).catch((error=&gt;{_log.default.debug(error)})).finally((()=&gt;{pendingReload.resolve()}))}}_createCmItem(container,cmid){const newItem=document.createElement(this.selectors.ACTIVITYTAG);return newItem.dataset.for="cmitem",newItem.dataset.id=cmid,newItem.id="module-".concat(cmid),newItem.classList.add(this.classes.ACTIVITY),container.append(newItem),this._reloadCm({element:this.reactive.get("cm",cmid)}),newItem}_createSectionItem(container,sectionid){const section=this.reactive.get("section",sectionid),newItem=document.createElement(this.selectors.SECTIONTAG);return newItem.dataset.for="section",newItem.dataset.id=sectionid,newItem.dataset.number=section.number,newItem.id="section-".concat(sectionid),newItem.classList.add(this.classes.SECTION),container.append(newItem),this._reloadSection({element:section}),newItem}async _fixOrder(container,neworder,selector,dettachedelements,createMethod){if(void 0===container)return;if(!neworder.length)return container.classList.add("hidden"),void(container.innerHTML="");let dndFakeActivity;for(container.classList.remove("hidden"),neworder.forEach(((itemid,index)=&gt;{var _ref8,_this$getElement;let item=null!==(_ref8=null!==(_this$getElement=this.getElement(selector,itemid))&amp;&amp;void 0!==_this$getElement?_this$getElement:dettachedelements[itemid])&amp;&amp;void 0!==_ref8?_ref8:createMethod(container,itemid);if(void 0===item)return;const currentitem=container.children[index];void 0!==currentitem?currentitem!==item&amp;&amp;container.insertBefore(item,currentitem):container.append(item)}));container.children.length&gt;neworder.length;){var _lastchild$classList;const lastchild=container.lastChild;var _lastchild$dataset$id,_lastchild$dataset;if(null!=lastchild&amp;&amp;null!==(_lastchild$classList=lastchild.classList)&amp;&amp;void 0!==_lastchild$classList&amp;&amp;_lastchild$classList.contains("dndupload-preview"))dndFakeActivity=lastchild;else dettachedelements[null!==(_lastchild$dataset$id=null==lastchild||null===(_lastchild$dataset=lastchild.dataset)||void 0===_lastchild$dataset?void 0:_lastchild$dataset.id)&amp;&amp;void 0!==_lastchild$dataset$id?_lastchild$dataset$id:0]=lastchild;container.removeChild(lastchild)}dndFakeActivity&amp;&amp;container.append(dndFakeActivity)}}return _exports.default=Component,_exports.default}));
define("core_courseformat/local/courseeditor/dndcmitem",["exports","core/reactive"],(function(_exports,_reactive){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0;
/**
   * Course index cm component.
   *
   * This component is used to control specific course modules interactions like drag and drop
   * in both course index and course content.
   *
   * @module     core_courseformat/local/courseeditor/dndcmitem
   * @class      core_courseformat/local/courseeditor/dndcmitem
   * @copyright  2021 Ferran Recio &lt;ferran@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */
class _default extends _reactive.BaseComponent{configDragDrop(cmid){this.id=cmid,this.reactive.isEditing&amp;&amp;this.reactive.supportComponents&amp;&amp;(this.dragdrop=new _reactive.DragDrop(this),this.classes=this.dragdrop.getClasses())}destroy(){void 0!==this.dragdrop&amp;&amp;this.dragdrop.unregister()}dragStart(dropdata){this.reactive.dispatch("cmDrag",[dropdata.id],!0)}dragEnd(dropdata){this.reactive.dispatch("cmDrag",[dropdata.id],!1)}getDraggableData(){return this.reactive.getExporter().cmDraggableData(this.reactive.state,this.id)}validateDropData(dropdata){return"cm"===(null==dropdata?void 0:dropdata.type)}showDropZone(dropdata){dropdata.nextcmid!=this.id&amp;&amp;dropdata.id!=this.id&amp;&amp;this.element.classList.add(this.classes.DROPUP)}hideDropZone(){this.element.classList.remove(this.classes.DROPUP)}drop(dropdata){dropdata.id!=this.id&amp;&amp;dropdata.nextcmid!=this.id&amp;&amp;this.reactive.dispatch("cmMove",[dropdata.id],null,this.id)}}return _exports.default=_default,_exports.default}));
define("core_courseformat/local/courseeditor/dndsection",["exports","core/reactive"],(function(_exports,_reactive){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0;
/**
   * Course index section component.
   *
   * This component is used to control specific course section interactions like drag and drop
   * in both course index and course content.
   *
   * @module     core_courseformat/local/courseeditor/dndsection
   * @class      core_courseformat/local/courseeditor/dndsection
   * @copyright  2021 Ferran Recio &lt;ferran@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */
class _default extends _reactive.BaseComponent{configState(state){this.id=this.element.dataset.id,this.section=state.section.get(this.id),this.course=state.course}configDragDrop(sectionitem){this.reactive.isEditing&amp;&amp;this.reactive.supportComponents&amp;&amp;(this.sectionitem=sectionitem,this.dragdrop=new _reactive.DragDrop(this),this.classes=this.dragdrop.getClasses())}destroy(){void 0!==this.sectionitem&amp;&amp;this.sectionitem.unregister(),void 0!==this.dragdrop&amp;&amp;this.dragdrop.unregister()}getLastCm(){return null}dragStart(dropdata){this.reactive.dispatch("sectionDrag",[dropdata.id],!0)}dragEnd(dropdata){this.reactive.dispatch("sectionDrag",[dropdata.id],!1)}validateDropData(dropdata){if("cm"===(null==dropdata?void 0:dropdata.type))return!0;if("section"===(null==dropdata?void 0:dropdata.type)){const sectionzeroid=this.course.sectionlist[0];return(null==dropdata?void 0:dropdata.id)!=this.id&amp;&amp;(null==dropdata?void 0:dropdata.id)!=sectionzeroid&amp;&amp;this.id!=sectionzeroid}return!1}showDropZone(dropdata){var _this$getLastCm;"cm"==dropdata.type&amp;&amp;(null===(_this$getLastCm=this.getLastCm())||void 0===_this$getLastCm||_this$getLastCm.classList.add(this.classes.DROPDOWN));"section"==dropdata.type&amp;&amp;(this.section.number&gt;dropdata.number?(this.element.classList.remove(this.classes.DROPUP),this.element.classList.add(this.classes.DROPDOWN)):(this.element.classList.add(this.classes.DROPUP),this.element.classList.remove(this.classes.DROPDOWN)))}hideDropZone(){var _this$getLastCm2;null===(_this$getLastCm2=this.getLastCm())||void 0===_this$getLastCm2||_this$getLastCm2.classList.remove(this.classes.DROPDOWN),this.element.classList.remove(this.classes.DROPUP),this.element.classList.remove(this.classes.DROPDOWN)}drop(dropdata){"cm"==dropdata.type&amp;&amp;this.reactive.dispatch("cmMove",[dropdata.id],this.id),"section"==dropdata.type&amp;&amp;this.reactive.dispatch("sectionMove",[dropdata.id],this.id)}}return _exports.default=_default,_exports.default}));
define("core_courseformat/local/courseeditor/courseeditor",["exports","core/reactive","core/notification","core_courseformat/local/courseeditor/exporter","core/log","core/ajax","core/sessionstorage"],(function(_exports,_reactive,_notification,_exporter,_log,_ajax,Storage){function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}function _defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}
/**
   * Main course editor module.
   *
   * All formats can register new components on this object to create new reactive
   * UI components that watch the current course state.
   *
   * @module     core_courseformat/local/courseeditor/courseeditor
   * @class     core_courseformat/local/courseeditor/courseeditor
   * @copyright  2021 Ferran Recio &lt;ferran@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_notification=_interopRequireDefault(_notification),_exporter=_interopRequireDefault(_exporter),_log=_interopRequireDefault(_log),_ajax=_interopRequireDefault(_ajax),Storage=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}(Storage);class _default extends _reactive.Reactive{constructor(){super(...arguments),_defineProperty(this,"stateKey",1),_defineProperty(this,"sectionReturn",0)}async loadCourse(courseId,serverStateKey){if(this.courseId)throw new Error("Cannot load ".concat(courseId,", course already loaded with id ").concat(this.courseId));let stateData;serverStateKey||(serverStateKey="invalidStateKey_".concat(Date.now())),this._editing=!1,this._supportscomponents=!1,this.courseId=courseId;const storeStateKey=Storage.get("course/".concat(courseId,"/stateKey"));try{this.isEditing||serverStateKey!=storeStateKey||(stateData=JSON.parse(Storage.get("course/".concat(courseId,"/staticState")))),stateData||(stateData=await this.getServerCourseState())}catch(error){return _log.default.error("EXCEPTION RAISED WHILE INIT COURSE EDITOR"),void _log.default.error(error)}if(this.setInitialState(stateData),this.isEditing)this.stateKey=null;else{const newState=JSON.stringify(stateData);var _stateData$course$sta,_stateData,_stateData$course;if(Storage.get("course/".concat(courseId,"/staticState"))!==newState||storeStateKey!==serverStateKey)Storage.set("course/".concat(courseId,"/staticState"),newState),Storage.set("course/".concat(courseId,"/stateKey"),null!==(_stateData$course$sta=null===(_stateData=stateData)||void 0===_stateData||null===(_stateData$course=_stateData.course)||void 0===_stateData$course?void 0:_stateData$course.statekey)&amp;&amp;void 0!==_stateData$course$sta?_stateData$course$sta:serverStateKey);this.stateKey=Storage.get("course/".concat(courseId,"/stateKey"))}}setViewFormat(setup){var _setup$editing,_setup$supportscompon;this._editing=null!==(_setup$editing=setup.editing)&amp;&amp;void 0!==_setup$editing&amp;&amp;_setup$editing,this._supportscomponents=null!==(_setup$supportscompon=setup.supportscomponents)&amp;&amp;void 0!==_setup$supportscompon&amp;&amp;_setup$supportscompon}async getServerCourseState(){const courseState=await _ajax.default.call([{methodname:"core_courseformat_get_state",args:{courseid:this.courseId}}])[0];return{course:{},section:[],cm:[],...JSON.parse(courseState)}}get isEditing(){var _this$_editing;return null!==(_this$_editing=this._editing)&amp;&amp;void 0!==_this$_editing&amp;&amp;_this$_editing}getExporter(){return new _exporter.default(this)}get supportComponents(){var _this$_supportscompon;return null!==(_this$_supportscompon=this._supportscomponents)&amp;&amp;void 0!==_this$_supportscompon&amp;&amp;_this$_supportscompon}getStorageValue(key){if(this.isEditing||!this.stateKey)return!1;const dataJson=Storage.get("course/".concat(this.courseId,"/").concat(key));if(!dataJson)return!1;try{const data=JSON.parse(dataJson);return(null==data?void 0:data.stateKey)===this.stateKey&amp;&amp;data.value}catch(error){return!1}}setStorageValue(key,value){if(this.isEditing)return!1;const data={stateKey:this.stateKey,value:value};return Storage.set("course/".concat(this.courseId,"/").concat(key),JSON.stringify(data))}async dispatch(){try{await super.dispatch(...arguments)}catch(error){_notification.default.exception(error),super.dispatch("unlockAll")}}}return _exports.default=_default,_exports.default}));
define("core_courseformat/local/courseeditor/contenttree",["exports","jquery","core/tree","core/normalise"],(function(_exports,_jquery,_tree,_normalise){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Course index keyboard navigation and aria-tree compatibility.
   *
   * Node tree and bootstrap collapsibles don't use the same HTML structure. However,
   * all keybindings and logic is compatible. This class translate the primitive opetations
   * to a bootstrap collapsible structure.
   *
   * @module     core_courseformat/local/courseindex/keyboardnav
   * @class      core_courseformat/local/courseindex/keyboardnav
   * @copyright  2021 Ferran Recio &lt;ferran@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_jquery=_interopRequireDefault(_jquery),_tree=_interopRequireDefault(_tree);class _default extends _tree.default{constructor(mainElement,selectors,preventcache){var _selectors$ENTER;super(mainElement),this.selectors={SECTION:selectors.SECTION,TOGGLER:selectors.TOGGLER,COLLAPSE:selectors.COLLAPSE,ENTER:null!==(_selectors$ENTER=selectors.ENTER)&amp;&amp;void 0!==_selectors$ENTER?_selectors$ENTER:selectors.TOGGLER},preventcache&amp;&amp;(this._getVisibleItems=this.getVisibleItems,this.getVisibleItems=()=&gt;(this.refreshVisibleItemsCache(),this._getVisibleItems())),this.treeRoot.on("hidden.bs.collapse shown.bs.collapse",(()=&gt;{this.refreshVisibleItemsCache()})),this.registerEnterCallback(this.enterCallback.bind(this))}getActiveItem(){const activeItem=this.treeRoot.data("activeItem");if(activeItem)return(0,_normalise.getList)(activeItem)[0]}enterCallback(jQueryItem){const item=(0,_normalise.getList)(jQueryItem)[0];if(this.isGroupItem(jQueryItem)){const enter=item.querySelector(this.selectors.ENTER);"#"!==enter.getAttribute("href")&amp;&amp;(window.location.href=enter.getAttribute("href")),enter.click()}else{const link=item.querySelector("a");"#"!==link.getAttribute("href")?window.location.href=link.getAttribute("href"):link.click()}}handleItemClick(event,jQueryItem){event.target.closest(this.selectors.COLLAPSE)?super.handleItemClick(event,jQueryItem):(jQueryItem.focus(),this.isGroupItem(jQueryItem)&amp;&amp;this.expandGroup(jQueryItem))}isGroupCollapsed(jQueryItem){return"false"===(0,_normalise.getList)(jQueryItem)[0].querySelector("[aria-expanded]").getAttribute("aria-expanded")}toggleGroup(item){var _toggler$data;const toggler=item.find(this.selectors.COLLAPSE);let collapsibleId=null!==(_toggler$data=toggler.data("target"))&amp;&amp;void 0!==_toggler$data?_toggler$data:toggler.attr("href");if(!collapsibleId)return;collapsibleId=collapsibleId.replace("#","");(0,_jquery.default)("#".concat(collapsibleId)).length&amp;&amp;(0,_jquery.default)("#".concat(collapsibleId)).collapse("toggle")}expandGroup(item){this.isGroupCollapsed(item)&amp;&amp;this.toggleGroup(item)}collapseGroup(item){this.isGroupCollapsed(item)||this.toggleGroup(item)}expandAllGroups(){(0,_normalise.getList)(this.treeRoot)[0].querySelectorAll(this.selectors.SECTION).forEach((item=&gt;{this.expandGroup((0,_jquery.default)(item))}))}}return _exports.default=_default,_exports.default}));
define("core_courseformat/local/courseeditor/dndsectionitem",["exports","core/reactive"],(function(_exports,_reactive){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0;
/**
   * Course index section title draggable component.
   *
   * This component is used to control specific course section interactions like drag and drop
   * in both course index and course content.
   *
   * @module     core_courseformat/local/courseeditor/dndsectionitem
   * @class      core_courseformat/local/courseeditor/dndsectionitem
   * @copyright  2021 Ferran Recio &lt;ferran@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */
class _default extends _reactive.BaseComponent{configDragDrop(sectionid,state,fullregion){this.id=sectionid,void 0===this.section&amp;&amp;(this.section=state.section.get(this.id)),void 0===this.course&amp;&amp;(this.course=state.course),this.section.number&gt;0&amp;&amp;(this.getDraggableData=this._getDraggableData),this.fullregion=fullregion,this.reactive.isEditing&amp;&amp;this.reactive.supportComponents&amp;&amp;(this.dragdrop=new _reactive.DragDrop(this),this.classes=this.dragdrop.getClasses())}destroy(){void 0!==this.dragdrop&amp;&amp;this.dragdrop.unregister()}dragStart(dropdata){this.reactive.dispatch("sectionDrag",[dropdata.id],!0)}dragEnd(dropdata){this.reactive.dispatch("sectionDrag",[dropdata.id],!1)}_getDraggableData(){return this.reactive.getExporter().sectionDraggableData(this.reactive.state,this.id)}validateDropData(dropdata){if("cm"===(null==dropdata?void 0:dropdata.type)){var _this$section;const firstcmid=null===(_this$section=this.section)||void 0===_this$section?void 0:_this$section.cmlist[0];return dropdata.id!==firstcmid}return!1}showDropZone(){this.element.classList.add(this.classes.DROPZONE)}hideDropZone(){this.element.classList.remove(this.classes.DROPZONE)}drop(dropdata){var _this$section2;"cm"==dropdata.type&amp;&amp;this.reactive.dispatch("cmMove",[dropdata.id],this.id,null===(_this$section2=this.section)||void 0===_this$section2?void 0:_this$section2.cmlist[0])}}return _exports.default=_default,_exports.default}));
define("core_courseformat/local/courseeditor/fileuploader",["exports","core/config","core/modal_factory","core/modal_events","core/templates","core/normalise","core/prefetch","core/str","core_courseformat/courseeditor","core/process_monitor","core/utils"],(function(_exports,_config,_modal_factory,_modal_events,_templates,_normalise,_prefetch,_str,_courseeditor,_process_monitor,_utils){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}function _defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.uploadFilesToCourse=void 0,_config=_interopRequireDefault(_config),_modal_factory=_interopRequireDefault(_modal_factory),_modal_events=_interopRequireDefault(_modal_events),_templates=_interopRequireDefault(_templates);const UPLOADURL=_config.default.wwwroot+"/course/dndupload.php";let uploadQueue=null,handlerManagers={},courseUpdates=new Map,errors=null;(0,_prefetch.prefetchStrings)("moodle",["addresourceoractivity","upload"]),(0,_prefetch.prefetchStrings)("core_error",["dndmaxbytes","dndread","dndupload","dndunkownfile"]);class FileUploader{constructor(courseId,sectionId,sectionNum,fileInfo,handler){this.courseId=courseId,this.sectionId=sectionId,this.sectionNum=sectionNum,this.fileInfo=fileInfo,this.handler=handler}execute(process){const fileInfo=this.fileInfo,xhr=this._createXhrRequest(process),formData=this._createUploadFormData(),reader=new FileReader;reader.onload=function(){xhr.open("POST",UPLOADURL,!0),xhr.send(formData)},reader.onerror=function(){process.setError(errors.dndread)},fileInfo.size&gt;0?reader.readAsText(fileInfo.slice(0,5)):reader.readAsText(fileInfo)}getExecutionFunction(){return this.execute.bind(this)}_createXhrRequest(process){const xhr=new XMLHttpRequest;return xhr.upload.addEventListener("progress",(event=&gt;{if(event.lengthComputable){const percent=Math.round(100*event.loaded/event.total);process.setPercentage(percent)}}),!1),xhr.onreadystatechange=()=&gt;{if(1==xhr.readyState&amp;&amp;process.setPercentage(1),4==xhr.readyState)if(200==xhr.status){var result=JSON.parse(xhr.responseText);result&amp;&amp;0==result.error?this._finishProcess(process):process.setError(result.error)}else process.setError(errors.dndupload)},xhr}_createUploadFormData(){const formData=new FormData;try{formData.append("repo_upload_file",this.fileInfo)}catch(error){throw Error(error.dndread)}return formData.append("sesskey",_config.default.sesskey),formData.append("course",this.courseId),formData.append("section",this.sectionNum),formData.append("module",this.handler.module),formData.append("type","Files"),formData}_finishProcess(process){!function(courseId,sectionId){let refresh=courseUpdates.get(courseId);refresh||(refresh=new Set);refresh.add(sectionId),courseUpdates.set(courseId,refresh),refreshCourseEditors()}(this.courseId,this.sectionId),process.setPercentage(100),process.finish()}}class HandlerManager{constructor(courseId){var _this$courseEditor$ge,_this$courseEditor$ge2;if(_defineProperty(this,"lastHandlers",{}),_defineProperty(this,"allHandlers",null),this.courseId=courseId,this.lastUploadId=0,this.courseEditor=(0,_courseeditor.getCourseEditor)(courseId),!this.courseEditor)throw Error("Unkown course editor");this.maxbytes=null!==(_this$courseEditor$ge=null===(_this$courseEditor$ge2=this.courseEditor.get("course"))||void 0===_this$courseEditor$ge2?void 0:_this$courseEditor$ge2.maxbytes)&amp;&amp;void 0!==_this$courseEditor$ge?_this$courseEditor$ge:0}async loadHandlers(){this.allHandlers=await this.courseEditor.getFileHandlersPromise()}getFileExtension(fileInfo){let extension="";const dotpos=fileInfo.name.lastIndexOf(".");return-1!=dotpos&amp;&amp;(extension=fileInfo.name.substring(dotpos+1,fileInfo.name.length).toLowerCase()),extension}validateFile(fileInfo){if(-1!==this.maxbytes&amp;&amp;fileInfo.size&gt;this.maxbytes)throw Error(errors.dndmaxbytes)}filterHandlers(fileInfo){const extension=this.getFileExtension(fileInfo);return this.allHandlers.filter((handler=&gt;"*"==handler.extension||handler.extension==extension))}async getFileHandler(fileInfo){const fileHandlers=this.filterHandlers(fileInfo);if(0==fileHandlers.length)throw Error(errors.dndunkownfile);let fileHandler=null;return fileHandler=1==fileHandlers.length?fileHandlers[0]:await this.askHandlerToUser(fileHandlers,fileInfo),fileHandler}async askHandlerToUser(fileHandlers,fileInfo){var _this$lastHandlers$ex;const extension=this.getFileExtension(fileInfo),modalParams={title:(0,_str.get_string)("addresourceoractivity","moodle"),body:_templates.default.render("core_courseformat/fileuploader",this.getModalData(fileHandlers,fileInfo,null!==(_this$lastHandlers$ex=this.lastHandlers[extension])&amp;&amp;void 0!==_this$lastHandlers$ex?_this$lastHandlers$ex:null)),type:_modal_factory.default.types.SAVE_CANCEL,saveButtonText:(0,_str.get_string)("upload","moodle")},modal=await this.modalBodyRenderedPromise(modalParams),selectedHandler=await this.modalUserAnswerPromise(modal,fileHandlers);return null===selectedHandler?null:(this.lastHandlers[extension]=selectedHandler.module,selectedHandler)}getModalData(fileHandlers,fileInfo,defaultModule){const data={filename:fileInfo.name,uploadid:++this.lastUploadId,handlers:[]};let hasDefault=!1;if(fileHandlers.forEach(((handler,index)=&gt;{const isDefault=defaultModule==handler.module;data.handlers.push({...handler,selected:isDefault,labelid:"fileuploader_".concat(data.uploadid),value:index}),hasDefault=hasDefault||isDefault})),!hasDefault&amp;&amp;data.handlers.length&gt;0){const lastHandler=data.handlers.pop();lastHandler.selected=!0,data.handlers.push(lastHandler)}return data}modalUserAnswerPromise(modal,fileHandlers){const modalBody=(0,_normalise.getFirst)(modal.getBody());return new Promise(((resolve,reject)=&gt;{modal.getRoot().on(_modal_events.default.save,(event=&gt;{const index=modalBody.querySelector("input:checked").value;event.preventDefault(),modal.destroy(),fileHandlers[index]||reject("Invalid handler selected"),resolve(fileHandlers[index])})),modal.getRoot().on(_modal_events.default.cancel,(()=&gt;{resolve(null)}))}))}modalBodyRenderedPromise(modalParams){return new Promise(((resolve,reject)=&gt;{_modal_factory.default.create(modalParams).then((modal=&gt;{modal.setRemoveOnClose(!0),modal.getRoot().on(_modal_events.default.bodyRendered,(()=&gt;{resolve(modal)})),void 0!==modalParams.saveButtonText&amp;&amp;modal.setSaveButtonText(modalParams.saveButtonText),modal.show()})).catch((()=&gt;{reject("Cannot load modal content")}))}))}}const refreshCourseEditors=(0,_utils.debounce)((()=&gt;{const refreshes=courseUpdates;courseUpdates=new Map,refreshes.forEach(((sectionIds,courseId)=&gt;{const courseEditor=(0,_courseeditor.getCourseEditor)(courseId);courseEditor&amp;&amp;courseEditor.dispatch("sectionState",[...sectionIds])}))}),500);const queueFileUpload=async function(courseId,sectionId,sectionNum,fileInfo,handlerManager){let handler;uploadQueue=await _process_monitor.processMonitor.createProcessQueue();try{handlerManager.validateFile(fileInfo),handler=await handlerManager.getFileHandler(fileInfo)}catch(error){return void uploadQueue.addError(fileInfo.name,error.message)}if(!handler)return;const fileProcessor=new FileUploader(courseId,sectionId,sectionNum,fileInfo,handler);uploadQueue.addPending(fileInfo.name,fileProcessor.getExecutionFunction())};_exports.uploadFilesToCourse=async function(courseId,sectionId,sectionNum,files){const handlerManager=await async function(courseId){if(void 0!==handlerManagers[courseId])return handlerManagers[courseId];const handlerManager=new HandlerManager(courseId);return await handlerManager.loadHandlers(),handlerManagers[courseId]=handlerManager,handlerManagers[courseId]}(courseId);await async function(courseId){var _courseEditor$get$max,_courseEditor$get;if(null!==errors)return;const maxbytestext=null!==(_courseEditor$get$max=null===(_courseEditor$get=(0,_courseeditor.getCourseEditor)(courseId).get("course"))||void 0===_courseEditor$get?void 0:_courseEditor$get.maxbytestext)&amp;&amp;void 0!==_courseEditor$get$max?_courseEditor$get$max:"0";errors={};const allStrings=[{key:"dndmaxbytes",component:"core_error",param:{size:maxbytestext}},{key:"dndread",component:"core_error"},{key:"dndupload",component:"core_error"},{key:"dndunkownfile",component:"core_error"}];window.console.log(allStrings);const loadedStrings=await(0,_str.get_strings)(allStrings);allStrings.forEach(((_ref,index)=&gt;{let{key:key}=_ref;errors[key]=loadedStrings[index]}))}(courseId);for(let index=0;index&lt;files.length;index++){const fileInfo=files[index];await queueFileUpload(courseId,sectionId,sectionNum,fileInfo,handlerManager)}}}));
define("core_courseformat/local/courseeditor/mutations",["exports","core/ajax","core/str","core/local/reactive/srlogger"],(function(_exports,_ajax,_str,_srlogger){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_ajax=_interopRequireDefault(_ajax),_srlogger=_interopRequireDefault(_srlogger);let isLoggerSet=!1;
/**
   * Default mutation manager
   *
   * @module     core_courseformat/local/courseeditor/mutations
   * @class     core_courseformat/local/courseeditor/mutations
   * @copyright  2021 Ferran Recio &lt;ferran@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */return _exports.default=class{async _callEditWebservice(action,courseId,ids,targetSectionId,targetCmId){const args={action:action,courseid:courseId,ids:ids};targetSectionId&amp;&amp;(args.targetsectionid=targetSectionId),targetCmId&amp;&amp;(args.targetcmid=targetCmId);let ajaxresult=await _ajax.default.call([{methodname:"core_courseformat_update_course",args:args}])[0];return JSON.parse(ajaxresult)}async _sectionBasicAction(stateManager,action,sectionIds,targetSectionId,targetCmId){const logEntry=this._getLoggerEntry(stateManager,action,sectionIds,{targetSectionId:targetSectionId,targetCmId:targetCmId,itemType:"section"}),course=stateManager.get("course");this.sectionLock(stateManager,sectionIds,!0);const updates=await this._callEditWebservice(action,course.id,sectionIds,targetSectionId,targetCmId);stateManager.processUpdates(updates),this.sectionLock(stateManager,sectionIds,!1),stateManager.addLoggerEntry(await logEntry)}async _cmBasicAction(stateManager,action,cmIds,targetSectionId,targetCmId){const logEntry=this._getLoggerEntry(stateManager,action,cmIds,{targetSectionId:targetSectionId,targetCmId:targetCmId,itemType:"cm"}),course=stateManager.get("course");this.cmLock(stateManager,cmIds,!0);const updates=await this._callEditWebservice(action,course.id,cmIds,targetSectionId,targetCmId);stateManager.processUpdates(updates),this.cmLock(stateManager,cmIds,!1),stateManager.addLoggerEntry(await logEntry)}async _getLoggerEntry(stateManager,action,itemIds){var _data$itemType,_data$component;let data=arguments.length&gt;3&amp;&amp;void 0!==arguments[3]?arguments[3]:{};isLoggerSet||(stateManager.setLogger(new _srlogger.default),isLoggerSet=!0);const feedbackParams={action:action,itemType:null!==(_data$itemType=data.itemType)&amp;&amp;void 0!==_data$itemType?_data$itemType:action.split("_")[0]};let batch="";if(itemIds.length&gt;1)feedbackParams.count=itemIds.length,batch="_batch";else if(1===itemIds.length){var _itemInfo$title;const itemInfo=stateManager.get(feedbackParams.itemType,itemIds[0]);feedbackParams.name=null!==(_itemInfo$title=itemInfo.title)&amp;&amp;void 0!==_itemInfo$title?_itemInfo$title:itemInfo.name}data.targetSectionId&amp;&amp;(feedbackParams.targetSectionName=stateManager.get("section",data.targetSectionId).title),data.targetCmId&amp;&amp;(feedbackParams.targetCmName=stateManager.get("cm",data.targetCmId).name);return{feedbackMessage:await(0,_str.get_string)("".concat(action.toLowerCase(),"_feedback").concat(batch),null!==(_data$component=data.component)&amp;&amp;void 0!==_data$component?_data$component:"core_courseformat",feedbackParams)}}init(stateManager){stateManager.addUpdateTypes({prepareFields:this._prepareFields}),stateManager.setLogger(new _srlogger.default),isLoggerSet=!0}_prepareFields(stateManager,updateName,fields){return fields.locked=!1,fields}async sectionHide(stateManager,sectionIds){await this._sectionBasicAction(stateManager,"section_hide",sectionIds)}async sectionShow(stateManager,sectionIds){await this._sectionBasicAction(stateManager,"section_show",sectionIds)}async cmShow(stateManager,cmIds){await this._cmBasicAction(stateManager,"cm_show",cmIds)}async cmHide(stateManager,cmIds){await this._cmBasicAction(stateManager,"cm_hide",cmIds)}async cmStealth(stateManager,cmIds){await this._cmBasicAction(stateManager,"cm_stealth",cmIds)}async cmMove(stateManager,cmids,targetSectionId,targetCmId){if(!targetSectionId&amp;&amp;!targetCmId)throw new Error("Mutation cmMove requires targetSectionId or targetCmId");const course=stateManager.get("course");this.cmLock(stateManager,cmids,!0);const updates=await this._callEditWebservice("cm_move",course.id,cmids,targetSectionId,targetCmId);stateManager.processUpdates(updates),this.cmLock(stateManager,cmids,!1)}async sectionMove(stateManager,sectionIds,targetSectionId){if(!targetSectionId)throw new Error("Mutation sectionMove requires targetSectionId");const course=stateManager.get("course");this.sectionLock(stateManager,sectionIds,!0);const updates=await this._callEditWebservice("section_move",course.id,sectionIds,targetSectionId);stateManager.processUpdates(updates),this.sectionLock(stateManager,sectionIds,!1)}async addSection(stateManager,targetSectionId){targetSectionId||(targetSectionId=0);const course=stateManager.get("course"),updates=await this._callEditWebservice("section_add",course.id,[],targetSectionId);stateManager.processUpdates(updates)}async sectionDelete(stateManager,sectionIds){const course=stateManager.get("course"),updates=await this._callEditWebservice("section_delete",course.id,sectionIds);stateManager.processUpdates(updates)}cmDrag(stateManager,cmIds,dragValue){this.setPageItem(stateManager),this._setElementsValue(stateManager,"cm",cmIds,"dragging",dragValue)}sectionDrag(stateManager,sectionIds,dragValue){this.setPageItem(stateManager),this._setElementsValue(stateManager,"section",sectionIds,"dragging",dragValue)}cmCompletion(stateManager,cmIds,complete){const newValue=complete?1:0;this._setElementsValue(stateManager,"cm",cmIds,"completionstate",newValue)}async cmMoveRight(stateManager,cmIds){await this._cmBasicAction(stateManager,"cm_moveright",cmIds)}async cmMoveLeft(stateManager,cmIds){await this._cmBasicAction(stateManager,"cm_moveleft",cmIds)}cmLock(stateManager,cmIds,lockValue){this._setElementsValue(stateManager,"cm",cmIds,"locked",lockValue)}sectionLock(stateManager,sectionIds,lockValue){this._setElementsValue(stateManager,"section",sectionIds,"locked",lockValue)}_setElementsValue(stateManager,name,ids,fieldName,newValue){stateManager.setReadOnly(!1),ids.forEach((id=&gt;{const element=stateManager.get(name,id);element&amp;&amp;(element[fieldName]=newValue)})),stateManager.setReadOnly(!0)}setPageItem(stateManager,type,id,isStatic){let newPageItem;if(void 0!==type&amp;&amp;(newPageItem=stateManager.get(type,id),!newPageItem))return;stateManager.setReadOnly(!1);const course=stateManager.get("course");course.pageItem=null,newPageItem&amp;&amp;(course.pageItem={id:id,type:type,sectionId:"section"==type?newPageItem.id:newPageItem.sectionid,isStatic:isStatic}),stateManager.setReadOnly(!0)}unlockAll(stateManager){const state=stateManager.state;stateManager.setReadOnly(!1),state.section.forEach((section=&gt;{section.locked=!1})),state.cm.forEach((cm=&gt;{cm.locked=!1})),stateManager.setReadOnly(!0)}async sectionIndexCollapsed(stateManager,sectionIds,collapsed){const affectedSections=this._updateStateSectionPreference(stateManager,"indexcollapsed",sectionIds,collapsed);if(!affectedSections)return;const course=stateManager.get("course");let actionName="section_index_collapsed";collapsed||(actionName="section_index_expanded"),await this._callEditWebservice(actionName,course.id,affectedSections)}async sectionContentCollapsed(stateManager,sectionIds,collapsed){const affectedSections=this._updateStateSectionPreference(stateManager,"contentcollapsed",sectionIds,collapsed);if(!affectedSections)return;const course=stateManager.get("course");let actionName="section_content_collapsed";collapsed||(actionName="section_content_expanded"),await this._callEditWebservice(actionName,course.id,affectedSections)}_updateStateSectionPreference(stateManager,preferenceName,sectionIds,preferenceValue){stateManager.setReadOnly(!1);const affectedSections=[];return sectionIds.forEach((sectionId=&gt;{const section=stateManager.get("section",sectionId);if(void 0===section)return stateManager.setReadOnly(!0),null;const newValue=null!=preferenceValue?preferenceValue:section[preferenceName];section[preferenceName]!=newValue&amp;&amp;(section[preferenceName]=newValue,affectedSections.push(section.id))})),stateManager.setReadOnly(!0),affectedSections}async cmState(stateManager,cmids){this.cmLock(stateManager,cmids,!0);const course=stateManager.get("course"),updates=await this._callEditWebservice("cm_state",course.id,cmids);stateManager.processUpdates(updates),this.cmLock(stateManager,cmids,!1)}async sectionState(stateManager,sectionIds){this.sectionLock(stateManager,sectionIds,!0);const course=stateManager.get("course"),updates=await this._callEditWebservice("section_state",course.id,sectionIds);stateManager.processUpdates(updates),this.sectionLock(stateManager,sectionIds,!1)}async courseState(stateManager){const course=stateManager.get("course"),updates=await this._callEditWebservice("course_state",course.id);stateManager.processUpdates(updates)}},_exports.default}));
define("core_courseformat/local/courseeditor/exporter",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0;return _exports.default=
/**
   * Module to export parts of the state and transform them to be used in templates
   * and as draggable data.
   *
   * @module     core_courseformat/local/courseeditor/exporter
   * @class      core_courseformat/local/courseeditor/exporter
   * @copyright  2021 Ferran Recio &lt;ferran@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */
class{constructor(reactive){this.reactive=reactive,this.COMPLETIONS=["incomplete","complete","complete","fail"]}course(state){var _state$course$highlig,_state$course$section;const data={sections:[],editmode:this.reactive.isEditing,highlighted:null!==(_state$course$highlig=state.course.highlighted)&amp;&amp;void 0!==_state$course$highlig?_state$course$highlig:""};return(null!==(_state$course$section=state.course.sectionlist)&amp;&amp;void 0!==_state$course$section?_state$course$section:[]).forEach((sectionid=&gt;{var _state$section$get;const sectioninfo=null!==(_state$section$get=state.section.get(sectionid))&amp;&amp;void 0!==_state$section$get?_state$section$get:{},section=this.section(state,sectioninfo);data.sections.push(section)})),data.hassections=0!=data.sections.length,data}section(state,sectioninfo){var _state$course$highlig2,_sectioninfo$cmlist;const section={...sectioninfo,highlighted:null!==(_state$course$highlig2=state.course.highlighted)&amp;&amp;void 0!==_state$course$highlig2?_state$course$highlig2:"",cms:[]};return(null!==(_sectioninfo$cmlist=sectioninfo.cmlist)&amp;&amp;void 0!==_sectioninfo$cmlist?_sectioninfo$cmlist:[]).forEach((cmid=&gt;{const cminfo=state.cm.get(cmid),cm=this.cm(state,cminfo);section.cms.push(cm)})),section.hascms=0!=section.cms.length,section}cm(state,cminfo){return{...cminfo,isactive:!1}}cmDraggableData(state,cmid){const cminfo=state.cm.get(cmid);if(!cminfo)return null;let nextcmid;const section=state.section.get(cminfo.sectionid),currentindex=null==section?void 0:section.cmlist.indexOf(cminfo.id);return void 0!==currentindex&amp;&amp;(nextcmid=null==section?void 0:section.cmlist[currentindex+1]),{type:"cm",id:cminfo.id,name:cminfo.name,sectionid:cminfo.sectionid,nextcmid:nextcmid}}sectionDraggableData(state,sectionid){const sectioninfo=state.section.get(sectionid);return sectioninfo?{type:"section",id:sectioninfo.id,name:sectioninfo.name,number:sectioninfo.number}:null}cmCompletion(state,cminfo){const data={statename:"",state:"NaN"};if(void 0!==cminfo.completionstate){var _this$COMPLETIONS$cmi;data.state=cminfo.completionstate,data.hasstate=!0;const statename=null!==(_this$COMPLETIONS$cmi=this.COMPLETIONS[cminfo.completionstate])&amp;&amp;void 0!==_this$COMPLETIONS$cmi?_this$COMPLETIONS$cmi:"NaN";data["is".concat(statename)]=!0}return data}allItemsArray(state){var _state$course$section2;const items=[];return(null!==(_state$course$section2=state.course.sectionlist)&amp;&amp;void 0!==_state$course$section2?_state$course$section2:[]).forEach((sectionid=&gt;{var _sectioninfo$cmlist2;const sectioninfo=state.section.get(sectionid);items.push({type:"section",id:sectioninfo.id,url:sectioninfo.sectionurl});(null!==(_sectioninfo$cmlist2=sectioninfo.cmlist)&amp;&amp;void 0!==_sectioninfo$cmlist2?_sectioninfo$cmlist2:[]).forEach((cmid=&gt;{const cminfo=state.cm.get(cmid);items.push({type:"cm",id:cminfo.id,url:cminfo.url})}))})),items}},_exports.default}));
define("core_courseformat/local/content/section/header",["exports","core_courseformat/local/courseeditor/dndsectionitem"],(function(_exports,_dndsectionitem){var obj;
/**
   * Course section header component.
   *
   * This component is used to control specific course section interactions like drag and drop.
   *
   * @module     core_courseformat/local/content/section/header
   * @class      core_courseformat/local/content/section/header
   * @copyright  2021 Ferran Recio &lt;ferran@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_dndsectionitem=(obj=_dndsectionitem)&amp;&amp;obj.__esModule?obj:{default:obj};class _default extends _dndsectionitem.default{create(descriptor){this.name="content_section_header",this.id=descriptor.id,this.section=descriptor.section,this.course=descriptor.course,this.fullregion=descriptor.fullregion}stateReady(state){this.configDragDrop(this.id,state,this.fullregion)}}return _exports.default=_default,_exports.default}));
define("core_courseformat/local/content/section/cmitem",["exports","core_courseformat/local/courseeditor/dndcmitem"],(function(_exports,_dndcmitem){var obj;
/**
   * Course course module item component.
   *
   * This component is used to control specific course modules interactions like drag and drop.
   *
   * @module     core_courseformat/local/content/section/cmitem
   * @class      core_courseformat/local/content/section/cmitem
   * @copyright  2021 Ferran Recio &lt;ferran@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_dndcmitem=(obj=_dndcmitem)&amp;&amp;obj.__esModule?obj:{default:obj};class _default extends _dndcmitem.default{create(){this.name="content_section_cmitem",this.selectors={DRAGICON:".editing_move"},this.classes={LOCKED:"editinprogress"},this.id=this.element.dataset.id}stateReady(){var _this$getElement;this.configDragDrop(this.id),null===(_this$getElement=this.getElement(this.selectors.DRAGICON))||void 0===_this$getElement||_this$getElement.classList.add(this.classes.DRAGICON)}getWatchers(){return[{watch:"cm[".concat(this.id,"]:deleted"),handler:this.unregister},{watch:"cm[".concat(this.id,"]:updated"),handler:this._refreshCm}]}_refreshCm(_ref){var _element$dragging,_element$locked;let{element:element}=_ref;this.element.classList.toggle(this.classes.DRAGGING,null!==(_element$dragging=element.dragging)&amp;&amp;void 0!==_element$dragging&amp;&amp;_element$dragging),this.element.classList.toggle(this.classes.LOCKED,null!==(_element$locked=element.locked)&amp;&amp;void 0!==_element$locked&amp;&amp;_element$locked),this.locked=element.locked}}return _exports.default=_default,_exports.default}));
define("core_courseformat/local/content/actions",["exports","core/reactive","core/modal_factory","core/modal_events","core/templates","core/prefetch","core/str","core/normalise","core_course/events","core/pending","core_courseformat/local/courseeditor/contenttree","jquery"],(function(_exports,_reactive,_modal_factory,_modal_events,_templates,_prefetch,_str,_normalise,CourseEvents,_pending,_contenttree,_jquery){function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Course state actions dispatcher.
   *
   * This module captures all data-dispatch links in the course content and dispatch the proper
   * state mutation, including any confirmation and modal required.
   *
   * @module     core_courseformat/local/content/actions
   * @class      core_courseformat/local/content/actions
   * @copyright  2021 Ferran Recio &lt;ferran@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_modal_factory=_interopRequireDefault(_modal_factory),_modal_events=_interopRequireDefault(_modal_events),_templates=_interopRequireDefault(_templates),CourseEvents=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}(CourseEvents),_pending=_interopRequireDefault(_pending),_contenttree=_interopRequireDefault(_contenttree),_jquery=_interopRequireDefault(_jquery),(0,_prefetch.prefetchStrings)("core",["movecoursesection","movecoursemodule","confirm","delete"]);const directMutations={sectionHide:"sectionHide",sectionShow:"sectionShow",cmHide:"cmHide",cmShow:"cmShow",cmStealth:"cmStealth",cmMoveRight:"cmMoveRight",cmMoveLeft:"cmMoveLeft"};class _default extends _reactive.BaseComponent{create(){this.name="content_actions",this.selectors={ACTIONLINK:"[data-action]",SECTIONLINK:"[data-for='section']",CMLINK:"[data-for='cm']",SECTIONNODE:"[data-for='sectionnode']",MODALTOGGLER:"[data-toggle='collapse']",ADDSECTION:"[data-action='addSection']",CONTENTTREE:"#destination-selector",ACTIONMENU:".action-menu",ACTIONMENUTOGGLER:'[data-toggle="dropdown"]'},this.classes={DISABLED:"text-body",ITALIC:"font-italic"}}static addActions(actions){for(const[action,mutationReference]of Object.entries(actions)){if("function"!=typeof mutationReference&amp;&amp;"string"!=typeof mutationReference)throw new Error("".concat(action," action must be a mutation name or a function"));directMutations[action]=mutationReference}}stateReady(state){this.addEventListener(this.element,"click",this._dispatchClick),this._checkSectionlist({state:state}),this.addEventListener(this.element,CourseEvents.sectionRefreshed,(()=&gt;this._checkSectionlist({state:state})))}getWatchers(){return[{watch:"course.sectionlist:updated",handler:this._checkSectionlist}]}_dispatchClick(event){const target=event.target.closest(this.selectors.ACTIONLINK);if(!target)return;if(target.classList.contains(this.classes.DISABLED))return void event.preventDefault();const actionName=target.dataset.action,methodName=this._actionMethodName(actionName);if(void 0===this[methodName])return void 0!==directMutations[actionName]?"function"==typeof directMutations[actionName]?void directMutations[actionName](target,event):void this._requestMutationAction(target,event,directMutations[actionName]):void 0;this[methodName](target,event)}_actionMethodName(name){const requestName=name.charAt(0).toUpperCase()+name.slice(1);return"_request".concat(requestName)}_checkSectionlist(_ref){let{state:state}=_ref;this._setAddSectionLocked(state.course.sectionlist.length&gt;state.course.maxsections)}async _requestMoveSection(target,event){const sectionId=target.dataset.id;if(!sectionId)return;const sectionInfo=this.reactive.get("section",sectionId);event.preventDefault();const pendingModalReady=new _pending.default("courseformat/actions:prepareMoveSectionModal"),editTools=this._getClosestActionMenuToogler(target),data=this.reactive.getExporter().course(this.reactive.state);data.sectionid=sectionInfo.id,data.sectiontitle=sectionInfo.title;const modalParams={title:(0,_str.get_string)("movecoursesection","core"),body:_templates.default.render("core_courseformat/local/content/movesection",data)},modal=await this._modalBodyRenderedPromise(modalParams),modalBody=(0,_normalise.getList)(modal.getBody())[0],currentElement=modalBody.querySelector("".concat(this.selectors.SECTIONLINK,"[data-id='").concat(sectionId,"']"));this._disableLink(currentElement);const generalSection=modalBody.querySelector("".concat(this.selectors.SECTIONLINK,"[data-number='0']"));this._disableLink(generalSection),new _contenttree.default(modalBody.querySelector(this.selectors.CONTENTTREE),{SECTION:this.selectors.SECTIONNODE,TOGGLER:this.selectors.MODALTOGGLER,COLLAPSE:this.selectors.MODALTOGGLER},!0),modalBody.addEventListener("click",(event=&gt;{const target=event.target;target.matches("a")&amp;&amp;"section"==target.dataset.for&amp;&amp;void 0!==target.dataset.id&amp;&amp;(target.getAttribute("aria-disabled")||(event.preventDefault(),this.reactive.dispatch("sectionMove",[sectionId],target.dataset.id),this._destroyModal(modal,editTools)))})),pendingModalReady.resolve()}async _requestMoveCm(target,event){var _toggler$data;const cmId=target.dataset.id;if(!cmId)return;const cmInfo=this.reactive.get("cm",cmId);event.preventDefault();const pendingModalReady=new _pending.default("courseformat/actions:prepareMoveCmModal"),editTools=this._getClosestActionMenuToogler(target),exporter=this.reactive.getExporter(),data=exporter.course(this.reactive.state);data.cmid=cmInfo.id,data.cmname=cmInfo.name;const modalParams={title:(0,_str.get_string)("movecoursemodule","core"),body:_templates.default.render("core_courseformat/local/content/movecm",data)},modal=await this._modalBodyRenderedPromise(modalParams),modalBody=(0,_normalise.getList)(modal.getBody())[0];let currentElement=modalBody.querySelector("".concat(this.selectors.CMLINK,"[data-id='").concat(cmId,"']"));this._disableLink(currentElement),new _contenttree.default(modalBody.querySelector(this.selectors.CONTENTTREE),{SECTION:this.selectors.SECTIONNODE,TOGGLER:this.selectors.MODALTOGGLER,COLLAPSE:this.selectors.MODALTOGGLER,ENTER:this.selectors.SECTIONLINK});const sectionnode=currentElement.closest(this.selectors.SECTIONNODE),toggler=(0,_jquery.default)(sectionnode).find(this.selectors.MODALTOGGLER);let collapsibleId=null!==(_toggler$data=toggler.data("target"))&amp;&amp;void 0!==_toggler$data?_toggler$data:toggler.attr("href");collapsibleId&amp;&amp;(collapsibleId=collapsibleId.replace("#",""),(0,_jquery.default)("#".concat(collapsibleId)).collapse("toggle")),modalBody.addEventListener("click",(event=&gt;{const target=event.target;if(!target.matches("a")||void 0===target.dataset.for||void 0===target.dataset.id)return;if(target.getAttribute("aria-disabled"))return;let targetSectionId,targetCmId;if(event.preventDefault(),"cm"==target.dataset.for){const dropData=exporter.cmDraggableData(this.reactive.state,target.dataset.id);targetSectionId=dropData.sectionid,targetCmId=dropData.nextcmid}else{const section=this.reactive.get("section",target.dataset.id);targetSectionId=target.dataset.id,targetCmId=null==section?void 0:section.cmlist[0]}this.reactive.dispatch("cmMove",[cmId],targetSectionId,targetCmId),this._destroyModal(modal,editTools)})),pendingModalReady.resolve()}async _requestAddSection(target,event){var _target$dataset$id;event.preventDefault(),this.reactive.dispatch("addSection",null!==(_target$dataset$id=target.dataset.id)&amp;&amp;void 0!==_target$dataset$id?_target$dataset$id:0)}async _requestDeleteSection(target,event){var _sectionInfo$cmlist;const sectionId=target.dataset.id;if(!sectionId)return;const sectionInfo=this.reactive.get("section",sectionId);event.preventDefault();if((null!==(_sectionInfo$cmlist=sectionInfo.cmlist)&amp;&amp;void 0!==_sectionInfo$cmlist?_sectionInfo$cmlist:[]).length||sectionInfo.hassummary||sectionInfo.rawtitle){const modalParams={title:(0,_str.get_string)("confirm","core"),body:(0,_str.get_string)("confirmdeletesection","moodle",sectionInfo.title),saveButtonText:(0,_str.get_string)("delete","core"),type:_modal_factory.default.types.SAVE_CANCEL},modal=await this._modalBodyRenderedPromise(modalParams);modal.getRoot().on(_modal_events.default.save,(e=&gt;{e.preventDefault(),modal.destroy(),this.reactive.dispatch("sectionDelete",[sectionId])}))}else this.reactive.dispatch("sectionDelete",[sectionId])}async _requestMutationAction(target,event,mutationName){target.dataset.id&amp;&amp;(event.preventDefault(),this.reactive.dispatch(mutationName,[target.dataset.id]))}_setAddSectionLocked(locked){this.getElements(this.selectors.ADDSECTION).forEach((element=&gt;{element.classList.toggle(this.classes.DISABLED,locked),element.classList.toggle(this.classes.ITALIC,locked),this.setElementLocked(element,locked)}))}_disableLink(element){element&amp;&amp;(element.style.pointerEvents="none",element.style.userSelect="none",element.classList.add(this.classes.DISABLED),element.classList.add(this.classes.ITALIC),element.setAttribute("aria-disabled",!0),element.addEventListener("click",(event=&gt;event.preventDefault())))}_modalBodyRenderedPromise(modalParams){return new Promise(((resolve,reject)=&gt;{_modal_factory.default.create(modalParams).then((modal=&gt;{modal.setRemoveOnClose(!0),modal.getRoot().on(_modal_events.default.bodyRendered,(()=&gt;{resolve(modal)})),void 0!==modalParams.saveButtonText&amp;&amp;modal.setSaveButtonText(modalParams.saveButtonText),modal.show()})).catch((()=&gt;{reject("Cannot load modal content")}))}))}_destroyModal(modal,element){modal.hide();const pendingDestroy=new _pending.default("courseformat/actions:destroyModal");element&amp;&amp;element.focus(),setTimeout((()=&gt;{modal.destroy(),pendingDestroy.resolve()}),500)}_getClosestActionMenuToogler(element){const actionMenu=element.closest(this.selectors.ACTIONMENU);if(actionMenu)return actionMenu.querySelector(this.selectors.ACTIONMENUTOGGLER)}}return _exports.default=_default,_exports.default}));
define("core_courseformat/local/content/activity_header",["exports","core/reactive","core_courseformat/courseeditor","core_course/events"],(function(_exports,_reactive,_courseeditor,CourseEvents){function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,CourseEvents=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}
/**
   * The activity header component.
   *
   * @module     core_courseformat/local/content/activity_header
   * @class      core_courseformat/local/content/activity_header
   * @copyright  2021 Ferran Recio &lt;ferran@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */(CourseEvents);const SELECTORS_ACTIVITY_HEADER="[data-for='page-activity-header']";class Component extends _reactive.BaseComponent{create(){this.name="activity_header"}static init(target,selectors){const elementselector=target||SELECTORS_ACTIVITY_HEADER;return new Component({element:document.querySelector(elementselector),reactive:(0,_courseeditor.getCurrentCourseEditor)(),selectors:selectors})}stateReady(){this.addEventListener(this.element,CourseEvents.manualCompletionToggled,this._completionHandler)}_completionHandler(_ref){let{detail:detail}=_ref;void 0!==detail&amp;&amp;this.reactive.dispatch("cmCompletion",[detail.cmid],detail.completed)}}return _exports.default=Component,_exports.default}));
define("core_courseformat/local/content/section",["exports","core_courseformat/local/content/section/header","core_courseformat/local/courseeditor/dndsection","core/templates"],(function(_exports,_header,_dndsection,_templates){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Course section format component.
   *
   * @module     core_courseformat/local/content/section
   * @class      core_courseformat/local/content/section
   * @copyright  2021 Ferran Recio &lt;ferran@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_header=_interopRequireDefault(_header),_dndsection=_interopRequireDefault(_dndsection),_templates=_interopRequireDefault(_templates);class _default extends _dndsection.default{create(){this.name="content_section",this.selectors={SECTION_ITEM:"[data-for='section_title']",CM:'[data-for="cmitem"]',SECTIONINFO:'[data-for="sectioninfo"]',SECTIONBADGES:'[data-region="sectionbadges"]',SHOWSECTION:'[data-action="sectionShow"]',HIDESECTION:'[data-action="sectionHide"]',ACTIONTEXT:".menu-action-text",ICON:".icon"},this.classes={LOCKED:"editinprogress",HASDESCRIPTION:"description",HIDE:"d-none",HIDDEN:"hidden"},this.id=this.element.dataset.id}stateReady(state){if(this.configState(state),this.reactive.isEditing&amp;&amp;this.reactive.supportComponents){const sectionItem=this.getElement(this.selectors.SECTION_ITEM);if(sectionItem){const headerComponent=new _header.default({...this,element:sectionItem,fullregion:this.element});this.configDragDrop(headerComponent)}}}getWatchers(){return[{watch:"section[".concat(this.id,"]:updated"),handler:this._refreshSection}]}validateDropData(dropdata){return("section"!==(null==dropdata?void 0:dropdata.type)||0==this.reactive.sectionReturn)&amp;&amp;super.validateDropData(dropdata)}getLastCm(){const cms=this.getElements(this.selectors.CM);return cms&amp;&amp;0!==cms.length?cms[cms.length-1]:null}_refreshSection(_ref){var _element$dragging,_element$locked,_element$visible;let{element:element}=_ref;this.element.classList.toggle(this.classes.DRAGGING,null!==(_element$dragging=element.dragging)&amp;&amp;void 0!==_element$dragging&amp;&amp;_element$dragging),this.element.classList.toggle(this.classes.LOCKED,null!==(_element$locked=element.locked)&amp;&amp;void 0!==_element$locked&amp;&amp;_element$locked),this.element.classList.toggle(this.classes.HIDDEN,null!==(_element$visible=!element.visible)&amp;&amp;void 0!==_element$visible&amp;&amp;_element$visible),this.locked=element.locked;const sectioninfo=this.getElement(this.selectors.SECTIONINFO);sectioninfo&amp;&amp;sectioninfo.classList.toggle(this.classes.HASDESCRIPTION,element.hasrestrictions),this._updateBadges(element),this._updateActionsMenu(element)}_updateBadges(section){const current=this.getElement("".concat(this.selectors.SECTIONBADGES," [data-type='iscurrent']"));null==current||current.classList.toggle(this.classes.HIDE,!section.current);const hiddenFromStudents=this.getElement("".concat(this.selectors.SECTIONBADGES," [data-type='hiddenfromstudents']"));null==hiddenFromStudents||hiddenFromStudents.classList.toggle(this.classes.HIDE,section.visible)}async _updateActionsMenu(section){var _affectedAction$datas,_affectedAction$datas2;let selector,newAction;section.visible?(selector=this.selectors.SHOWSECTION,newAction="sectionHide"):(selector=this.selectors.HIDESECTION,newAction="sectionShow");const affectedAction=this.getElement(selector);if(!affectedAction)return;affectedAction.dataset.action=newAction;const actionText=affectedAction.querySelector(this.selectors.ACTIONTEXT);if(null!==(_affectedAction$datas=affectedAction.dataset)&amp;&amp;void 0!==_affectedAction$datas&amp;&amp;_affectedAction$datas.swapname&amp;&amp;actionText){const oldText=null==actionText?void 0:actionText.innerText;actionText.innerText=affectedAction.dataset.swapname,affectedAction.dataset.swapname=oldText}const icon=affectedAction.querySelector(this.selectors.ICON);if(null!==(_affectedAction$datas2=affectedAction.dataset)&amp;&amp;void 0!==_affectedAction$datas2&amp;&amp;_affectedAction$datas2.swapicon&amp;&amp;icon){const newIcon=affectedAction.dataset.swapicon;if(newIcon){const pixHtml=await _templates.default.renderPix(newIcon,"core");_templates.default.replaceNode(icon,pixHtml,"")}}}}return _exports.default=_default,_exports.default}));
define("core_courseformat/courseeditor",["exports","core_courseformat/local/courseeditor/mutations","core_courseformat/local/courseeditor/courseeditor","core_course/events"],(function(_exports,_mutations,_courseeditor,_events){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Generic reactive module used in the course editor.
   *
   * @module     core_courseformat/courseeditor
   * @copyright  2021 Ferran Recio &lt;ferran@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.setViewFormat=_exports.getCurrentCourseEditor=_exports.getCourseEditor=void 0,_mutations=_interopRequireDefault(_mutations),_courseeditor=_interopRequireDefault(_courseeditor),_events=_interopRequireDefault(_events);const courseEditorMap=new Map,courseStateKeyMap=new Map;function dispatchStateChangedEvent(detail,target){void 0===target&amp;&amp;(target=document),target.dispatchEvent(new CustomEvent(_events.default.stateChanged,{bubbles:!0,detail:detail}))}_exports.setViewFormat=(courseId,setup)=&gt;{courseId=parseInt(courseId),setup.editing||courseStateKeyMap.set(courseId,setup.statekey);getCourseEditor(courseId).setViewFormat(setup)};const getCourseEditor=courseId=&gt;(courseId=parseInt(courseId),courseEditorMap.has(courseId)||(courseEditorMap.set(courseId,new _courseeditor.default({name:"CourseEditor".concat(courseId),eventName:_events.default.stateChanged,eventDispatch:dispatchStateChangedEvent,mutations:new _mutations.default})),courseEditorMap.get(courseId).loadCourse(courseId,courseStateKeyMap.get(courseId))),courseEditorMap.get(courseId));_exports.getCourseEditor=getCourseEditor;_exports.getCurrentCourseEditor=()=&gt;getCourseEditor(M.cfg.courseId)}));
define("core_customfield/form",["exports","core/inplace_editable","core/ajax","core/str","core_form/modalform","core/notification","core/pending","core/sortable_list","core/templates","jquery"],(function(_exports,_inplace_editable,_ajax,_str,_modalform,_notification,_pending,_sortable_list,_templates,_jquery){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Custom Field interaction management for Moodle.
   *
   * @module     core_customfield/form
   * @copyright  2018 Toni Barbera
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_modalform=_interopRequireDefault(_modalform),_notification=_interopRequireDefault(_notification),_pending=_interopRequireDefault(_pending),_sortable_list=_interopRequireDefault(_sortable_list),_templates=_interopRequireDefault(_templates),_jquery=_interopRequireDefault(_jquery);const confirmDelete=(id,type,component,area,itemid)=&gt;{const pendingPromise=new _pending.default("core_customfield/form:confirmDelete");(0,_str.get_strings)([{key:"confirm"},{key:"confirmdelete"+type,component:"core_customfield"},{key:"yes"},{key:"no"}]).then((strings=&gt;_notification.default.confirm(strings[0],strings[1],strings[2],strings[3],(function(){const pendingDeletePromise=new _pending.default("core_customfield/form:confirmDelete");(0,_ajax.call)([{methodname:"field"===type?"core_customfield_delete_field":"core_customfield_delete_category",args:{id:id}},{methodname:"core_customfield_reload_template",args:{component:component,area:area,itemid:itemid}}])[1].then((response=&gt;_templates.default.render("core_customfield/list",response))).then(((html,js)=&gt;_templates.default.replaceNode((0,_jquery.default)('[data-region="list-page"]'),html,js))).then(pendingDeletePromise.resolve).catch(_notification.default.exception)})))).then(pendingPromise.resolve).catch(_notification.default.exception)},getCategoryNameFor=nodeElement=&gt;nodeElement.closest("[data-category-id]").find("[data-inplaceeditable][data-itemtype=category][data-component=core_customfield]").attr("data-value");_exports.init=()=&gt;{const rootNode=document.querySelector("#customfield_catlist"),component=rootNode.dataset.component,area=rootNode.dataset.area,itemid=rootNode.dataset.itemid;rootNode.addEventListener("click",(e=&gt;{const roleHolder=e.target.closest("[data-role]");if(roleHolder)return"deletefield"===roleHolder.dataset.role?(e.preventDefault(),void confirmDelete(roleHolder.dataset.id,"field",component,area,itemid)):"deletecategory"===roleHolder.dataset.role?(e.preventDefault(),void confirmDelete(roleHolder.dataset.id,"category",component,area,itemid)):"addnewcategory"===roleHolder.dataset.role?(e.preventDefault(),void((component,area,itemid)=&gt;{const pendingPromise=new _pending.default("core_customfield/form:createNewCategory");(0,_ajax.call)([{methodname:"core_customfield_create_category",args:{component:component,area:area,itemid:itemid}},{methodname:"core_customfield_reload_template",args:{component:component,area:area,itemid:itemid}}])[1].then((response=&gt;_templates.default.render("core_customfield/list",response))).then(((html,js)=&gt;_templates.default.replaceNode((0,_jquery.default)('[data-region="list-page"]'),html,js))).then((()=&gt;pendingPromise.resolve())).catch(_notification.default.exception)})(component,area,itemid)):"addfield"===roleHolder.dataset.role?(e.preventDefault(),void((element,component,area,itemid)=&gt;{const pendingPromise=new _pending.default("core_customfield/form:createNewField"),returnFocus=element.closest(".action-menu").querySelector(".dropdown-toggle"),form=new _modalform.default({formClass:"core_customfield\\field_config_form",args:{categoryid:element.getAttribute("data-categoryid"),type:element.getAttribute("data-type")},modalConfig:{title:(0,_str.get_string)("addingnewcustomfield","core_customfield",element.getAttribute("data-typename"))},returnFocus:returnFocus});form.addEventListener(form.events.FORM_SUBMITTED,(()=&gt;{const pendingCreatedPromise=new _pending.default("core_customfield/form:createdNewField");(0,_ajax.call)([{methodname:"core_customfield_reload_template",args:{component:component,area:area,itemid:itemid}}])[0].then((response=&gt;_templates.default.render("core_customfield/list",response))).then(((html,js)=&gt;_templates.default.replaceNode((0,_jquery.default)('[data-region="list-page"]'),html,js))).then((()=&gt;pendingCreatedPromise.resolve())).catch((()=&gt;window.location.reload()))})),form.show(),pendingPromise.resolve()})(roleHolder,component,area,itemid)):"editfield"===roleHolder.dataset.role?(e.preventDefault(),void((element,component,area,itemid)=&gt;{const pendingPromise=new _pending.default("core_customfield/form:editField"),form=new _modalform.default({formClass:"core_customfield\\field_config_form",args:{id:element.getAttribute("data-id")},modalConfig:{title:(0,_str.get_string)("editingfield","core_customfield",element.getAttribute("data-name"))},returnFocus:element});form.addEventListener(form.events.FORM_SUBMITTED,(()=&gt;{const pendingCreatedPromise=new _pending.default("core_customfield/form:createdNewField");(0,_ajax.call)([{methodname:"core_customfield_reload_template",args:{component:component,area:area,itemid:itemid}}])[0].then((response=&gt;_templates.default.render("core_customfield/list",response))).then(((html,js)=&gt;_templates.default.replaceNode((0,_jquery.default)('[data-region="list-page"]'),html,js))).then((()=&gt;pendingCreatedPromise.resolve())).catch((()=&gt;window.location.reload()))})),form.show(),pendingPromise.resolve()})(roleHolder,component,area,itemid)):void 0})),(rootNode=&gt;{new _sortable_list.default("#customfield_catlist .categorieslist",{moveHandlerSelector:".movecategory [data-drag-type=move]"}).getElementName=nodeElement=&gt;Promise.resolve(getCategoryNameFor(nodeElement)),(0,_jquery.default)("[data-category-id]").on(_sortable_list.default.EVENTS.DROP,((evt,info)=&gt;{if(info.positionChanged){const pendingPromise=new _pending.default("core_customfield/form:categoryid:on:sortablelist-drop");(0,_ajax.call)([{methodname:"core_customfield_move_category",args:{id:info.element.data("category-id"),beforeid:info.targetNextElement.data("category-id")}}])[0].then(pendingPromise.resolve).catch(_notification.default.exception)}evt.stopPropagation()})),new _sortable_list.default("#customfield_catlist .fieldslist tbody",{moveHandlerSelector:".movefield [data-drag-type=move]"}).getDestinationName=(parentElement,afterElement)=&gt;afterElement.length?afterElement.attr("data-field-name")?(0,_str.get_string)("afterfield","customfield",afterElement.attr("data-field-name")):Promise.resolve(""):(0,_str.get_string)("totopofcategory","customfield",getCategoryNameFor(parentElement)),(0,_jquery.default)("[data-field-name]").on(_sortable_list.default.EVENTS.DROP,((evt,info)=&gt;{if(info.positionChanged){const pendingPromise=new _pending.default("core_customfield/form:fieldname:on:sortablelist-drop");(0,_ajax.call)([{methodname:"core_customfield_move_field",args:{id:info.element.data("field-id"),beforeid:info.targetNextElement.data("field-id"),categoryid:Number(info.targetList.closest("[data-category-id]").attr("data-category-id"))}}])[0].then(pendingPromise.resolve).catch(_notification.default.exception)}evt.stopPropagation()})),(0,_jquery.default)("[data-field-name]").on(_sortable_list.default.EVENTS.DRAG,(evt=&gt;{var pendingPromise=new _pending.default("core_customfield/form:fieldname:on:sortablelist-drag");evt.stopPropagation(),_templates.default.render("core_customfield/nofields",{}).then((html=&gt;{rootNode.querySelectorAll(".categorieslist &gt; *").forEach((category=&gt;{const fields=category.querySelectorAll(".field:not(.sortable-list-is-dragged)"),noFields=category.querySelector(".nofields");fields.length||noFields?fields.length&amp;&amp;noFields&amp;&amp;noFields.remove():category.querySelector("tbody").innerHTML=html}))})).then(pendingPromise.resolve).catch(_notification.default.exception)})),(0,_jquery.default)("[data-category-id], [data-field-name]").on(_sortable_list.default.EVENTS.DRAGSTART,((evt,info)=&gt;{setTimeout((()=&gt;{(0,_jquery.default)(".sortable-list-is-dragged").width(info.element.width())}),501)}))})(rootNode)}}));
define("core_editor/events",["exports","core/event_dispatcher","jquery","core/yui"],(function(_exports,_event_dispatcher,_jquery,_yui){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Javascript events for the `core_editor` subsystem.
   *
   * @module     core_editor/events
   * @copyright  2021 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   * @since      4.0
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.notifyEditorContentRestored=_exports.eventTypes=void 0,_jquery=_interopRequireDefault(_jquery),_yui=_interopRequireDefault(_yui);const eventTypes={editorContentRestored:"core_editor/contentRestored"};_exports.eventTypes=eventTypes;_exports.notifyEditorContentRestored=editor=&gt;(editor||window.console.warn("The HTMLElement representing the editor that was modified should be provided to notifyEditorContentRestored."),(0,_event_dispatcher.dispatchEvent)(eventTypes.editorContentRestored,{},editor||document));let legacyEventsRegistered=!1;legacyEventsRegistered||(_yui.default.use("event","moodle-core-event",(()=&gt;{document.addEventListener(eventTypes.editorContentRestored,(()=&gt;{(0,_jquery.default)(document).trigger(M.core.event.EDITOR_CONTENT_RESTORED),_yui.default.fire(M.core.event.EDITOR_CONTENT_RESTORED)}))})),legacyEventsRegistered=!0)}));
define("core_filters/events",["exports","core/event_dispatcher","core/normalise","jquery"],(function(_exports,_event_dispatcher,_normalise,_jquery){var obj;
/**
   * Javascript events for the `core_filters` subsystem.
   *
   * @module     core_filters/events
   * @copyright  2021 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   * @since      4.0
   *
   * @example &lt;caption&gt;Example of listening to a filter event.&lt;/caption&gt;
   * import {eventTypes as filterEventTypes} from 'core_filters/events';
   *
   * document.addEventListener(filterEventTypes.filterContentUpdated, e =&gt; {
   *     window.console.log(e.detail.nodes); // A list of the HTMLElements whose content was updated
   * });
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.notifyFilterContentUpdated=_exports.eventTypes=void 0,_jquery=(obj=_jquery)&amp;&amp;obj.__esModule?obj:{default:obj};const eventTypes={filterContentUpdated:"core_filters/contentUpdated"};_exports.eventTypes=eventTypes;_exports.notifyFilterContentUpdated=nodes=&gt;(nodes=(0,_normalise.getList)(nodes),(0,_event_dispatcher.dispatchEvent)(eventTypes.filterContentUpdated,{nodes:nodes}));let legacyEventsRegistered=!1;legacyEventsRegistered||(Y.use("event","moodle-core-event",(()=&gt;{document.addEventListener(eventTypes.filterContentUpdated,(e=&gt;{(0,_jquery.default)(document).trigger(M.core.event.FILTER_CONTENT_UPDATED,[(0,_jquery.default)(e.detail.nodes)]),Y.fire(M.core.event.FILTER_CONTENT_UPDATED,{nodes:new Y.NodeList(e.detail.nodes)})}))})),legacyEventsRegistered=!0)}));
/**
 * A class to help show and hide advanced form content.
 *
 * @module     core_form/showadvanced
 * @copyright  2016 Damyon Wiese &lt;damyon@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core_form/showadvanced",["jquery","core/log","core/str","core/notification"],(function($,Log,Strings,Notification){var SELECTORS_FIELDSETCONTAINSADVANCED="fieldset.containsadvancedelements",SELECTORS_DIVFITEMADVANCED="div.fitem.advanced",SELECTORS_DIVADVANCEDSECTION="div#form-advanced-div",SELECTORS_MORELESSLINK="fieldset.containsadvancedelements .moreless-toggler",CSS_SHOW="show",CSS_MORELESSACTIONS="moreless-actions",CSS_MORELESSTOGGLER="moreless-toggler",CSS_SHOWLESS="moreless-less",WRAPPERS_FITEM='&lt;div class="fitem"&gt;&lt;/div&gt;',WRAPPERS_FELEMENT='&lt;div class="felement"&gt;&lt;/div&gt;',WRAPPERS_ADVANCEDDIV='&lt;div id="form-advanced-div"&gt;&lt;/div&gt;',uniqIdSeed=0,ShowAdvanced=function(id){this.id=id;var form=$(document.getElementById(id));this.enhanceForm(form)};return ShowAdvanced.prototype.id="",ShowAdvanced.prototype.enhanceForm=function(form){return form.find(SELECTORS_FIELDSETCONTAINSADVANCED).each(function(index,item){this.enhanceFieldset($(item))}.bind(this)),form.on("click",SELECTORS_MORELESSLINK,this.switchState),form.on("keydown",SELECTORS_MORELESSLINK,function(e){return 13!=e.which&amp;&amp;32!=e.which||this.switchState(e)}.bind(this)),this},ShowAdvanced.prototype.generateId=function(node){var id=node.prop("id");return void 0===id&amp;&amp;(id="showadvancedid-"+uniqIdSeed++,node.prop("id",id)),id},ShowAdvanced.prototype.enhanceFieldset=function(fieldset){var statuselement=$("input[name=mform_showmore_"+fieldset.prop("id")+"]");return statuselement.length?(Strings.get_strings([{key:"showmore",component:"core_form"},{key:"showless",component:"core_form"}]).then(function(results){var showmore=results[0],showless=results[1],morelesslink=$('&lt;a href="#"&gt;&lt;/a&gt;');morelesslink.addClass(CSS_MORELESSTOGGLER),"0"===statuselement.val()?(morelesslink.html(showmore),morelesslink.attr("aria-expanded","false")):(morelesslink.html(showless),morelesslink.attr("aria-expanded","true"),morelesslink.addClass(CSS_SHOWLESS),fieldset.find(SELECTORS_DIVFITEMADVANCED).addClass(CSS_SHOW));var idlist=[];fieldset.find(SELECTORS_DIVFITEMADVANCED).each(function(index,node){idlist[idlist.length]=this.generateId($(node))}.bind(this)),morelesslink.attr("role","button"),morelesslink.attr("aria-controls","form-advanced-div");var formadvancedsection=$(WRAPPERS_ADVANCEDDIV);fieldset.find(SELECTORS_DIVFITEMADVANCED).wrapAll(formadvancedsection);var fitem=$(WRAPPERS_FITEM);fitem.addClass(CSS_MORELESSACTIONS);var felement=$(WRAPPERS_FELEMENT);return felement.append(morelesslink),fitem.append(felement),fieldset.find(SELECTORS_DIVADVANCEDSECTION).before(fitem),!0}.bind(this)).fail(Notification.exception),this):(Log.debug("M.form.showadvanced::processFieldset was called on an fieldset without a status field: '"+fieldset.prop("id")+"'"),this)},ShowAdvanced.prototype.switchState=function(e){return e.preventDefault(),Strings.get_strings([{key:"showmore",component:"core_form"},{key:"showless",component:"core_form"}]).then((function(results){var showmore=results[0],showless=results[1],fieldset=$(e.target).closest(SELECTORS_FIELDSETCONTAINSADVANCED);fieldset.find(SELECTORS_DIVFITEMADVANCED).toggleClass(CSS_SHOW);var statuselement=$("input[name=mform_showmore_"+fieldset.prop("id")+"]");return"0"===statuselement.val()?(statuselement.val(1),$(e.target).addClass(CSS_SHOWLESS),$(e.target).html(showless),$(e.target).attr("aria-expanded","true")):(statuselement.val(0),$(e.target).removeClass(CSS_SHOWLESS),$(e.target).html(showmore),$(e.target).attr("aria-expanded","false")),!0})).fail(Notification.exception),this},{init:function(formid){return new ShowAdvanced(formid)}}}));
define("core_form/dynamicform",["exports","core_form/changechecker","core_form/events","core/ajax","core/fragment","core/notification","core/pending","core/templates","core/str","./util"],(function(_exports,FormChangeChecker,FormEvents,_ajax,_fragment,_notification,_pending,_templates,_str,_util){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,FormChangeChecker=_interopRequireWildcard(FormChangeChecker),FormEvents=_interopRequireWildcard(FormEvents),_ajax=_interopRequireDefault(_ajax),_fragment=_interopRequireDefault(_fragment),_notification=_interopRequireDefault(_notification),_pending=_interopRequireDefault(_pending),_templates=_interopRequireDefault(_templates);return _exports.default=class{constructor(container,formClass){var obj,key,value;value={FORM_SUBMITTED:"core_form_dynamicform_formsubmitted",FORM_CANCELLED:"core_form_dynamicform_formcancelled",CLIENT_VALIDATION_ERROR:"core_form_dynamicform_clientvalidationerror",SERVER_VALIDATION_ERROR:"core_form_dynamicform_validationerror",ERROR:"core_form_dynamicform_error",NOSUBMIT_BUTTON_PRESSED:"core_form_dynamicform_nosubmitbutton",SUBMIT_BUTTON_PRESSED:"core_form_dynamicform_submitbutton",CANCEL_BUTTON_PRESSED:"core_form_dynamicform_cancelbutton"},(key="events")in(obj=this)?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,this.formClass=formClass,this.container=container,(0,_str.get_strings)([{key:"collapseall",component:"moodle"},{key:"expandall",component:"moodle"}]).catch(_notification.default.exception),this.container.addEventListener("click",(e=&gt;{if(e.target.matches("form input[type=submit][data-cancel]")){e.preventDefault();this.trigger(this.events.CANCEL_BUTTON_PRESSED,e.target).defaultPrevented||this.processCancelButton()}else if(e.target.matches('form input[type=submit][data-no-submit="1"]')){e.preventDefault();this.trigger(this.events.NOSUBMIT_BUTTON_PRESSED,e.target).defaultPrevented||this.processNoSubmitButton(e.target)}})),this.container.addEventListener("submit",(e=&gt;{if(e.target.matches("form")){e.preventDefault();this.trigger(this.events.SUBMIT_BUTTON_PRESSED).defaultPrevented||this.submitFormAjax()}}))}load(){let args=arguments.length&gt;0&amp;&amp;void 0!==arguments[0]?arguments[0]:null;const formData=(0,_util.serialize)(args||{}),pendingPromise=new _pending.default("core_form/dynamicform:load");return this.getBody(formData).then((resp=&gt;this.updateForm(resp))).then(pendingPromise.resolve)}trigger(eventName){const e=new CustomEvent(eventName,{detail:arguments.length&gt;1&amp;&amp;void 0!==arguments[1]?arguments[1]:null,cancelable:!(arguments.length&gt;2&amp;&amp;void 0!==arguments[2])||arguments[2]});return this.container.dispatchEvent(e),e}addEventListener(){this.container.addEventListener(...arguments)}getBody(formDataString){return _ajax.default.call([{methodname:"core_form_dynamic_form",args:{formdata:formDataString,form:this.formClass}}])[0].then((response=&gt;({html:response.html,js:_fragment.default.processCollectedJavascript(response.javascript)})))}onSubmitSuccess(response){this.trigger(this.events.FORM_SUBMITTED,response).defaultPrevented||(this.container.innerHTML="")}onSubmitError(exception){this.trigger(this.events.ERROR,exception).defaultPrevented||_notification.default.exception(exception)}processNoSubmitButton(button){const pendingPromise=new _pending.default("core_form/dynamicform:nosubmit"),form=this.getFormNode(),formData=new URLSearchParams([...new FormData(form).entries()]);formData.append(button.getAttribute("name"),button.getAttribute("value")),FormEvents.notifyFormSubmittedByJavascript(form,!0),this.disableButtons(),this.getBody(formData.toString()).then((resp=&gt;this.updateForm(resp))).then(pendingPromise.resolve).catch((exception=&gt;this.onSubmitError(exception)))}getFormNode(){return this.container.querySelector("form")}notifyResetFormChanges(){FormEvents.notifyFormSubmittedByJavascript(this.getFormNode(),!0),FormChangeChecker.resetFormDirtyState(this.getFormNode())}processCancelButton(){this.notifyResetFormChanges();this.trigger(this.events.FORM_CANCELLED).defaultPrevented||(this.container.innerHTML="")}updateForm(_ref){let{html:html,js:js}=_ref;return _templates.default.replaceNodeContents(this.container,html,js)}validateElements(){FormEvents.notifyFormSubmittedByJavascript(this.getFormNode());const invalid=[...this.container.querySelectorAll('[aria-invalid="true"], .error')];return!invalid.length||(invalid[0].focus(),!1)}disableButtons(){this.container.querySelectorAll('form input[type="submit"]').forEach((el=&gt;el.setAttribute("disabled",!0)))}enableButtons(){this.container.querySelectorAll('form input[type="submit"]').forEach((el=&gt;el.removeAttribute("disabled")))}async submitFormAjax(){if(!await this.validateElements())return void this.trigger(this.events.CLIENT_VALIDATION_ERROR,null,!1);this.disableButtons();const form=this.container.querySelector("form"),formData=new URLSearchParams([...new FormData(form).entries()]);_ajax.default.call([{methodname:"core_form_dynamic_form",args:{formdata:formData.toString(),form:this.formClass}}])[0].then((response=&gt;{if(response.submitted){const data=JSON.parse(response.data);this.enableButtons(),this.notifyResetFormChanges(),this.onSubmitSuccess(data)}else this.updateForm({html:response.html,js:_fragment.default.processCollectedJavascript(response.javascript)}),this.enableButtons(),this.trigger(this.events.SERVER_VALIDATION_ERROR,null,!1);return null})).catch((exception=&gt;this.onSubmitError(exception)))}},_exports.default}));
/**
 * Functionality for the form element defaultcustom
 *
 * @module     core_form/defaultcustom
 * @copyright  2017 Marina Glancy
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.3
 */
define("core_form/defaultcustom",["jquery"],(function($){$("body").on("change","input[data-defaultcustom=true]",(function(event){var element=$(event.target),defaultvalue=JSON.parse(element.attr("data-defaultvalue")),customvalue=JSON.parse(element.attr("data-customvalue")),type=element.attr("data-type"),form=element.closest("form"),elementName=element.attr("name").replace(/\[customize\]$/,"[value]"),newvalue=element.prop("checked")?customvalue:defaultvalue;"text"===type?form.find('[name="'+elementName+'"]').val(newvalue):"date_selector"===type?(form.find('[name="'+elementName+'[day]"]').val(newvalue.day),form.find('[name="'+elementName+'[month]"]').val(newvalue.month),form.find('[name="'+elementName+'[year]"]').val(newvalue.year)):"date_time_selector"===type&amp;&amp;(form.find('[name="'+elementName+'[day]"]').val(newvalue.day),form.find('[name="'+elementName+'[month]"]').val(newvalue.month),form.find('[name="'+elementName+'[year]"]').val(newvalue.year),form.find('[name="'+elementName+'[hour]"]').val(newvalue.hour),form.find('[name="'+elementName+'[minute]"]').val(newvalue.minute))}))}));
/**
 * Password Unmask functionality.
 *
 * @module     core_form/passwordunmask
 * @copyright  2016 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.2
 */
define("core_form/passwordunmask",["jquery","core/templates"],(function($,Template){var PasswordUnmask=function(elementid){this.wrapperSelector='[data-passwordunmask="wrapper"][data-passwordunmaskid="'+elementid+'"]',this.wrapper=$(this.wrapperSelector),this.editorSpace=this.wrapper.find('[data-passwordunmask="editor"]'),this.editLink=this.wrapper.find('a[data-passwordunmask="edit"]'),this.editInstructions=this.wrapper.find('[data-passwordunmask="instructions"]'),this.displayValue=this.wrapper.find('[data-passwordunmask="displayvalue"]'),this.inputFieldLabel=$('label[for="'+elementid+'"]'),this.inputField=this.editorSpace.find(document.getElementById(elementid)),this.inputField.addClass("d-none"),this.inputField.removeClass("hiddenifjs"),this.editInstructions.attr("id")||this.editInstructions.attr("id",elementid+"_instructions"),this.editInstructions.hide(),this.setDisplayValue(),this.addListeners()};return PasswordUnmask.prototype.addListeners=function(){return this.wrapper.on("click keypress",'[data-passwordunmask="edit"]',$.proxy((function(e){"keypress"===e.type&amp;&amp;13!==e.keyCode||(e.stopImmediatePropagation(),e.preventDefault(),this.isEditing()?"click"===e.type||$(e.relatedTarget).is(":input")?this.turnEditingOff(!1):this.turnEditingOff(!0):this.turnEditingOn())}),this)),this.wrapper.on("click keypress",'[data-passwordunmask="unmask"]',$.proxy((function(e){"keypress"===e.type&amp;&amp;13!==e.keyCode||(e.stopImmediatePropagation(),e.preventDefault(),this.wrapper.data("unmasked",!this.wrapper.data("unmasked")),this.setDisplayValue())}),this)),this.wrapper.on("keydown","input",$.proxy((function(e){"keydown"===e.type&amp;&amp;13!==e.keyCode||(e.stopImmediatePropagation(),e.preventDefault(),this.turnEditingOff(!0))}),this)),this.inputFieldLabel.on("click",$.proxy((function(e){e.preventDefault(),this.turnEditingOn()}),this)),this},PasswordUnmask.prototype.checkFocusOut=function(e){this.isEditing()&amp;&amp;window.setTimeout($.proxy((function(){var relatedTarget=e.relatedTarget||document.activeElement;this.wrapper.has($(relatedTarget)).length||this.turnEditingOff(!$(relatedTarget).is(":input,a"))}),this),100)},PasswordUnmask.prototype.passwordVisible=function(){return!!this.wrapper.data("unmasked")},PasswordUnmask.prototype.isEditing=function(){return this.inputField.hasClass("d-inline-block")},PasswordUnmask.prototype.turnEditingOn=function(){var value=this.getDisplayValue();return this.passwordVisible()?this.inputField.attr("type","text"):this.inputField.attr("type","password"),this.inputField.val(value),this.inputField.attr("size",this.inputField.attr("data-size")),this.inputField.addClass("d-inline-block"),this.editInstructions.length&amp;&amp;(this.inputField.attr("aria-describedby",this.editInstructions.attr("id")),this.editInstructions.show()),this.wrapper.attr("data-passwordunmask-visible",1),this.editLink.hide(),this.inputField.focus().select(),$("body").on("focusout",this.wrapperSelector,$.proxy(this.checkFocusOut,this)),this},PasswordUnmask.prototype.turnEditingOff=function(focusOnEditLink){$("body").off("focusout",this.wrapperSelector,this.checkFocusOut);var value=this.getDisplayValue();return this.inputField.attr("aria-describedby",null),this.inputField.val(value),this.inputField.removeClass("d-inline-block"),this.editInstructions.hide(),this.wrapper.removeAttr("data-passwordunmask-visible"),this.inputField.removeAttr("size"),this.editLink.show(),this.setDisplayValue(),focusOnEditLink&amp;&amp;this.editLink.focus(),this},PasswordUnmask.prototype.getDisplayValue=function(){return this.inputField.val()},PasswordUnmask.prototype.setDisplayValue=function(){var value=this.getDisplayValue();return this.isEditing()&amp;&amp;(this.wrapper.data("unmasked")?this.inputField.attr("type","text"):this.inputField.attr("type","password"),this.inputField.val(value)),value&amp;&amp;this.wrapper.data("unmasked")?this.displayValue.text(value):(value||(value=""),Template.render("core_form/element-passwordunmask-fill",{element:{frozen:this.inputField.is("[readonly]"),value:value,valuechars:value.split("")}}).done($.proxy((function(html,js){this.displayValue.html(html),Template.runTemplateJS(js)}),this))),this},PasswordUnmask}));
define("core_form/util",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.serialize=void 0;const serialize=function(data){let prefix=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]?arguments[1]:"";return[...Object.entries(data).map((_ref=&gt;{let[index,value]=_ref;const key=prefix?"".concat(prefix,"[").concat(index,"]"):index;return null!==value&amp;&amp;"object"==typeof value?serialize(value,key):"".concat(key,"=").concat(encodeURIComponent(value))}))].join("&amp;")};_exports.serialize=serialize}));
define("core_form/modalform",["exports","core/ajax","core_form/changechecker","core_form/events","core/fragment","core/modal_events","core/modal_factory","core/notification","core/pending","./util"],(function(_exports,_ajax,FormChangeChecker,FormEvents,_fragment,_modal_events,_modal_factory,_notification,_pending,_util){function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_ajax=_interopRequireDefault(_ajax),FormChangeChecker=_interopRequireWildcard(FormChangeChecker),FormEvents=_interopRequireWildcard(FormEvents),_fragment=_interopRequireDefault(_fragment),_modal_events=_interopRequireDefault(_modal_events),_modal_factory=_interopRequireDefault(_modal_factory),_notification=_interopRequireDefault(_notification),_pending=_interopRequireDefault(_pending);return _exports.default=class{constructor(config){var obj,key,value;value={FORM_SUBMITTED:"core_form_modalform_formsubmitted",FORM_CANCELLED:"core_form_modalform_formcancelled",CLIENT_VALIDATION_ERROR:"core_form_modalform_clientvalidationerror",SERVER_VALIDATION_ERROR:"core_form_modalform_validationerror",ERROR:"core_form_modalform_error",NOSUBMIT_BUTTON_PRESSED:"core_form_modalform_nosubmitbutton",SUBMIT_BUTTON_PRESSED:"core_form_modalform_submitbutton",CANCEL_BUTTON_PRESSED:"core_form_modalform_cancelbutton",LOADED:"core_form_modalform_loaded"},(key="events")in(obj=this)?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,this.modal=null,this.config=config,this.config.modalConfig={removeOnClose:!0,type:_modal_factory.default.types.SAVE_CANCEL,large:!0,...this.config.modalConfig||{}},this.config.args=this.config.args||{},this.futureListeners=[]}show(){const pendingPromise=new _pending.default("core_form/modalform:init");return _modal_factory.default.create(this.config.modalConfig).then((modal=&gt;{this.modal=modal;const formParams=(0,_util.serialize)(this.config.args||{}),bodyContent=this.getBody(formParams);return this.modal.setBodyContent(bodyContent),bodyContent.catch(_notification.default.exception),this.modal.getRoot().on(_modal_events.default.hidden,(()=&gt;{this.notifyResetFormChanges(),this.modal.destroy(),this.config.returnFocus&amp;&amp;this.config.returnFocus.focus()})),this.modal.getModal().addClass("modal-form-dialogue"),this.modal.getRoot().on("click","form input[type=submit][data-no-submit]",(e=&gt;{e.preventDefault();this.trigger(this.events.NOSUBMIT_BUTTON_PRESSED,e.target).defaultPrevented||this.processNoSubmitButton(e.target)})),this.modal.getRoot().on("submit","form",(e=&gt;{e.preventDefault();this.trigger(this.events.SUBMIT_BUTTON_PRESSED).defaultPrevented||this.submitFormAjax()})),void 0!==this.config.saveButtonText&amp;&amp;void 0!==this.modal.setSaveButtonText&amp;&amp;this.modal.setSaveButtonText(this.config.saveButtonText),void 0!==this.config.saveButtonClasses&amp;&amp;this.setSaveButtonClasses(this.config.saveButtonClasses),this.modal.getRoot().on(_modal_events.default.save,(e=&gt;{e.preventDefault(),this.modal.getRoot().find("form").submit()})),this.modal.getRoot().on(_modal_events.default.cancel,(e=&gt;{this.trigger(this.events.CANCEL_BUTTON_PRESSED).defaultPrevented&amp;&amp;e.preventDefault()})),this.futureListeners.forEach((args=&gt;this.modal.getRoot()[0].addEventListener(...args))),this.futureListeners=[],this.trigger(this.events.LOADED,null,!1),this.modal.show()})).then(pendingPromise.resolve)}trigger(eventName){const e=new CustomEvent(eventName,{detail:arguments.length&gt;1&amp;&amp;void 0!==arguments[1]?arguments[1]:null,cancelable:!(arguments.length&gt;2&amp;&amp;void 0!==arguments[2])||arguments[2]});return this.modal.getRoot()[0].dispatchEvent(e),e}addEventListener(){for(var _len=arguments.length,args=new Array(_len),_key=0;_key&lt;_len;_key++)args[_key]=arguments[_key];this.modal?this.modal.getRoot()[0].addEventListener(...args):this.futureListeners.push(args)}getBody(formDataString){const params={formdata:formDataString,form:this.config.formClass},pendingPromise=new _pending.default("core_form/modalform:form_body");return _ajax.default.call([{methodname:"core_form_dynamic_form",args:params}])[0].then((response=&gt;(pendingPromise.resolve(),{html:response.html,js:_fragment.default.processCollectedJavascript(response.javascript)})))}onSubmitError(exception){this.trigger(this.events.ERROR,exception).defaultPrevented||_notification.default.exception(exception)}notifyResetFormChanges(){const form=this.getFormNode();form&amp;&amp;(FormEvents.notifyFormSubmittedByJavascript(form,!0),FormChangeChecker.resetFormDirtyState(form))}getFormNode(){return this.modal.getRoot().find("form")[0]}processNoSubmitButton(button){const form=this.getFormNode();if(!form)return;FormEvents.notifyFormSubmittedByJavascript(form,!0);let formData=this.modal.getRoot().find("form").serialize();formData=formData+"&amp;"+encodeURIComponent(button.getAttribute("name"))+"="+encodeURIComponent(button.getAttribute("value"));const bodyContent=this.getBody(formData);this.modal.setBodyContent(bodyContent),bodyContent.catch(_notification.default.exception)}validateElements(){FormEvents.notifyFormSubmittedByJavascript(this.getFormNode());const invalid=this.modal.getRoot().find('[aria-invalid="true"], .error');return!invalid.length||(invalid.first().focus(),!1)}disableButtons(){this.modal.getFooter().find("[data-action]").attr("disabled",!0)}enableButtons(){this.modal.getFooter().find("[data-action]").removeAttr("disabled")}async submitFormAjax(){if(!this.validateElements())return void this.trigger(this.events.CLIENT_VALIDATION_ERROR,null,!1);this.disableButtons();const form=this.modal.getRoot().find("form"),formData=form.serialize();_ajax.default.call([{methodname:"core_form_dynamic_form",args:{formdata:formData,form:this.config.formClass}}])[0].then((response=&gt;{if(response.submitted){const data=JSON.parse(response.data);FormChangeChecker.markFormSubmitted(form[0]);this.trigger(this.events.FORM_SUBMITTED,data).defaultPrevented||this.modal.hide()}else{const promise=new Promise((resolve=&gt;resolve({html:response.html,js:_fragment.default.processCollectedJavascript(response.javascript)})));this.modal.setBodyContent(promise),this.enableButtons(),this.trigger(this.events.SERVER_VALIDATION_ERROR)}return null})).catch((exception=&gt;this.onSubmitError(exception)))}setSaveButtonClasses(value){const button=this.modal.getFooter().find("[data-action='save']");if(!button)throw new Error("Unable to find the 'save' button");button.removeClass().addClass(value)}},_exports.default}));
define("core_form/changechecker",["exports","core_editor/events","core/str"],(function(_exports,_events,_str){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.watchFormById=_exports.watchForm=_exports.unWatchForm=_exports.startWatching=_exports.resetFormDirtyStateById=_exports.resetFormDirtyState=_exports.resetAllFormDirtyStates=_exports.markFormSubmitted=_exports.markFormChangedFromNode=_exports.markFormAsDirtyById=_exports.markFormAsDirty=_exports.markAllFormsSubmitted=_exports.markAllFormsAsDirty=_exports.isAnyWatchedFormDirty=_exports.disableAllChecks=void 0;
/**
   * This module provides change detection to forms, allowing a browser to warn the user before navigating away if changes
   * have been made.
   *
   * Two flags are stored for each form:
   * * a 'dirty' flag; and
   * * a 'submitted' flag.
   *
   * When the page is unloaded each watched form is checked. If the 'dirty' flag is set for any form, and the 'submitted'
   * flag is not set for any form, then a warning is shown.
   *
   * The 'dirty' flag is set when any form element is modified within a watched form.
   * The flag can also be set programatically. This may be required for custom form elements.
   *
   * It is not possible to customise the warning message in any modern browser.
   *
   * Please note that some browsers have controls on when these alerts may or may not be shown.
   * See {@link https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onbeforeunload} for browser-specific
   * notes and references.
   *
   * @module     core_form/changechecker
   * @copyright  2021 Andrew Lyons &lt;andrew@nicols.co.uk&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   * @example &lt;caption&gt;Usage where the FormElement is already held&lt;/caption&gt;
   *
   * import {watchForm} from 'core_form/changechecker';
   *
   * // Fetch the form element somehow.
   * watchForm(formElement);
   *
   * @example &lt;caption&gt;Usage from the child of a form - i.e. an input, button, div, etc.&lt;/caption&gt;
   *
   * import {watchForm} from 'core_form/changechecker';
   *
   * // Watch the form by using a child of it.
   * watchForm(document.querySelector('input[data-foo="bar"]'););
   *
   * @example &lt;caption&gt;Usage from within a template&lt;/caption&gt;
   * &lt;form id="mod_example-entry-{{uniqid}}" ...&gt;
   *   &lt;!--
   *
   *   --&gt;
   * &lt;/form&gt;
   * {{#js}}
   * require(['core_form/changechecker'], function(changeChecker) {
   *     watchFormById('mod_example-entry-{{uniqid}}');
   * });
   * {{/js}}
   */
let warningString,watchedForms=[],formChangeCheckerDisabled=!1;const getFormFromChild=formChild=&gt;formChild.closest("form"),watchForm=formNode=&gt;{(formNode=getFormFromChild(formNode))&amp;&amp;(isWatchingForm(formNode)||watchedForms.push(formNode))};_exports.watchForm=watchForm;_exports.unWatchForm=formNode=&gt;{watchedForms=watchedForms.filter((watchedForm=&gt;!!watchedForm.contains(formNode)))};const resetAllFormDirtyStates=()=&gt;{watchedForms.forEach((watchedForm=&gt;{watchedForm.dataset.formSubmitted="false",watchedForm.dataset.formDirty="false"}))};_exports.resetAllFormDirtyStates=resetAllFormDirtyStates;const resetFormDirtyState=formNode=&gt;{(formNode=getFormFromChild(formNode))&amp;&amp;(formNode.dataset.formSubmitted="false",formNode.dataset.formDirty="false")};_exports.resetFormDirtyState=resetFormDirtyState;const markAllFormsAsDirty=()=&gt;{watchedForms.forEach((watchedForm=&gt;{watchedForm.dataset.formDirty="true"}))};_exports.markAllFormsAsDirty=markAllFormsAsDirty;const markFormAsDirty=formNode=&gt;{(formNode=getFormFromChild(formNode))&amp;&amp;(formNode.dataset.formDirty="true")};_exports.markFormAsDirty=markFormAsDirty;const disableAllChecks=()=&gt;{formChangeCheckerDisabled=!0};_exports.disableAllChecks=disableAllChecks;const isAnyWatchedFormDirty=()=&gt;{if(formChangeCheckerDisabled)return!1;if(watchedForms.some((watchedForm=&gt;"true"===watchedForm.dataset.formSubmitted)))return!1;return!!watchedForms.some((watchedForm=&gt;{if(!watchedForm.isConnected)return!1;if("true"===watchedForm.dataset.formDirty)return!0;if(document.activeElement&amp;&amp;document.activeElement.dataset.propertyIsEnumerable("initialValue")){const isActiveElementWatched=isWatchingForm(document.activeElement),hasValueChanged=document.activeElement.dataset.initialValue!==document.activeElement.value;if(isActiveElementWatched&amp;&amp;hasValueChanged)return!0}return!1}))||!(void 0===window.tinyMCE||!window.tinyMCE.editors||!window.tinyMCE.editors.some((editor=&gt;editor.isDirty())))};_exports.isAnyWatchedFormDirty=isAnyWatchedFormDirty;const isWatchingForm=target=&gt;watchedForms.some((watchedForm=&gt;watchedForm.contains(target))),markFormChangedFromNode=changedNode=&gt;{if(changedNode.dataset.formChangeCheckerOverride)return void disableAllChecks();if(!isWatchingForm(changedNode))return;if(changedNode.closest(".ignoredirty"))return;const formNode=(target=&gt;watchedForms.find((watchedForm=&gt;watchedForm.contains(target))))(changedNode);formNode.dataset.formDirty="true"};_exports.markFormChangedFromNode=markFormChangedFromNode;const markFormSubmitted=formNode=&gt;{(formNode=getFormFromChild(formNode))&amp;&amp;(formNode.dataset.formSubmitted="true")};_exports.markFormSubmitted=markFormSubmitted;const markAllFormsSubmitted=()=&gt;{watchedForms.forEach((watchedForm=&gt;markFormSubmitted(watchedForm)))};_exports.markAllFormsSubmitted=markAllFormsSubmitted;const beforeUnloadHandler=e=&gt;isAnyWatchedFormDirty()&amp;&amp;!M.cfg.behatsiterunning?(e.preventDefault(),e.returnValue=warningString,e.returnValue):(window.removeEventListener("beforeunload",beforeUnloadHandler),null),startWatching=()=&gt;{addLegacyFunctions(),document.addEventListener("change",(e=&gt;{isWatchingForm(e.target)&amp;&amp;markFormChangedFromNode(e.target)})),document.addEventListener("click",(e=&gt;{if(!e.target.closest("[data-formchangechecker-ignore-submit]"))return;const ownerForm=getFormFromChild(e.target);ownerForm&amp;&amp;(ownerForm.dataset.ignoreSubmission="true")})),document.addEventListener("focusin",(e=&gt;{if(e.target.matches("input, textarea, select")){if(e.target.dataset.propertyIsEnumerable("initialValue"))return;e.target.dataset.initialValue=e.target.value}})),document.addEventListener("submit",(e=&gt;{const formNode=getFormFromChild(e.target);formNode&amp;&amp;(formNode.dataset.ignoreSubmission?formNode.dataset.ignoreSubmission="false":markFormSubmitted(formNode))})),document.addEventListener(_events.eventTypes.editorContentRestored,(e=&gt;{e.target!=document?resetFormDirtyState(e.target):resetAllFormDirtyStates()})),(0,_str.get_string)("changesmadereallygoaway","moodle").then((changesMadeString=&gt;{warningString=changesMadeString})).catch(),window.addEventListener("beforeunload",beforeUnloadHandler)};_exports.startWatching=startWatching;const addLegacyFunctions=()=&gt;{const getLoggedLegacyFallback=(oldFunctionName,newFunctionName,newFunction)=&gt;function(){window.console.warn("The moodle-core-formchangechecker has been deprecated and replaced with core_form/changechecker. "+"The ".concat(oldFunctionName," function has been replaced with ").concat(newFunctionName,".")),newFunction(...arguments)};window.M.core_formchangechecker={init:getLoggedLegacyFallback("init","watchFormById",watchFormById),reset_form_dirty_state:getLoggedLegacyFallback("reset_form_dirty_state","resetFormDirtyState",resetAllFormDirtyStates),set_form_changed:getLoggedLegacyFallback("set_form_changed","markFormAsDirty",markAllFormsAsDirty),set_form_submitted:getLoggedLegacyFallback("set_form_submitted","markFormSubmitted",markAllFormsSubmitted)}},watchFormById=formId=&gt;{watchForm(document.getElementById(formId))};_exports.watchFormById=watchFormById;_exports.resetFormDirtyStateById=formId=&gt;{resetFormDirtyState(document.getElementById(formId))};_exports.markFormAsDirtyById=formId=&gt;{markFormAsDirty(document.getElementById(formId))},startWatching()}));
define("core_form/collapsesections",["exports","jquery","core/pending"],(function(_exports,_jquery,_pending){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Collapse or expand all form sections on clicking the expand all / collapse al link.
   *
   * @module core_form/collapsesections
   * @copyright 2021 Bas Brands
   * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   * @since 4.0
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_jquery=_interopRequireDefault(_jquery),_pending=_interopRequireDefault(_pending);const SELECTORS_FORM=".mform",SELECTORS_FORMHEADER=".fheader",SELECTORS_FORMCONTAINER="fieldset &gt; .fcontainer",CLASSES_SHOW="show",CLASSES_COLLAPSED="collapsed";_exports.init=collapsesections=&gt;{const pendingPromise=new _pending.default("core_form/collapsesections"),collapsemenu=document.querySelector(collapsesections),formParent=collapsemenu.closest(SELECTORS_FORM),formContainers=formParent.querySelectorAll(SELECTORS_FORMCONTAINER);collapsemenu.addEventListener("keydown",(e=&gt;{"Enter"!==e.key&amp;&amp;" "!==e.key||(e.preventDefault(),collapsemenu.click())}));let expandedcount=0;const formcontainercount=(0,_jquery.default)(SELECTORS_FORMCONTAINER).length;formContainers.forEach((container=&gt;{container.classList.contains(CLASSES_SHOW)&amp;&amp;expandedcount++})),formcontainercount===expandedcount&amp;&amp;(collapsemenu.classList.remove(CLASSES_COLLAPSED),collapsemenu.setAttribute("aria-expanded",!0)),collapsemenu.addEventListener("click",(()=&gt;{let action="hide";collapsemenu.classList.contains(CLASSES_COLLAPSED)&amp;&amp;(action="show"),formContainers.forEach((container=&gt;(0,_jquery.default)(container).collapse(action)))}));const collapseElementIds=[...formParent.querySelectorAll(SELECTORS_FORMHEADER)].map(((element,index)=&gt;(element.id=element.id||"collapseElement-".concat(index),element.id)));collapsemenu.setAttribute("aria-controls",collapseElementIds.join(" ")),(0,_jquery.default)(SELECTORS_FORMCONTAINER).on("hidden.bs.collapse",(()=&gt;{[...formContainers].every((container=&gt;!container.classList.contains(CLASSES_SHOW)))&amp;&amp;(collapsemenu.classList.add(CLASSES_COLLAPSED),collapsemenu.setAttribute("aria-expanded",!1))})),(0,_jquery.default)(SELECTORS_FORMCONTAINER).on("shown.bs.collapse",(()=&gt;{[...formContainers].every((container=&gt;container.classList.contains(CLASSES_SHOW)))&amp;&amp;(collapsemenu.classList.remove(CLASSES_COLLAPSED),collapsemenu.setAttribute("aria-expanded",!0))})),pendingPromise.resolve()}}));
define("core_form/encryptedpassword",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.EncryptedPassword=void 0;
/**
   * Encrypted password functionality.
   *
   * @module core_form/encryptedpassword
   * @copyright 2019 The Open University
   * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */
const EncryptedPassword=function(elementId){const wrapper=document.querySelector('div[data-encryptedpasswordid="'+elementId+'"]');this.spanOrLink=wrapper.querySelector("span, a"),this.input=wrapper.querySelector("input"),this.editButtonOrLink=wrapper.querySelector("button[data-editbutton], a"),this.cancelButton=wrapper.querySelector("button[data-cancelbutton]");var editHandler=e=&gt;{e.stopImmediatePropagation(),e.preventDefault(),this.startEditing(!0)};this.editButtonOrLink.addEventListener("click",editHandler),"A"===this.editButtonOrLink.nodeName&amp;&amp;wrapper.parentElement.previousElementSibling.querySelector("label").addEventListener("click",editHandler),this.cancelButton.addEventListener("click",(e=&gt;{e.stopImmediatePropagation(),e.preventDefault(),this.cancelEditing()})),"y"===wrapper.dataset.novalue&amp;&amp;(this.startEditing(!1),this.cancelButton.style.display="none")};_exports.EncryptedPassword=EncryptedPassword,EncryptedPassword.prototype.startEditing=function(moveFocus){this.input.style.display="inline",this.input.disabled=!1,this.spanOrLink.style.display="none",this.editButtonOrLink.style.display="none",this.cancelButton.style.display="inline";const id=this.editButtonOrLink.id;this.editButtonOrLink.removeAttribute("id"),this.input.id=id,moveFocus&amp;&amp;this.input.focus()},EncryptedPassword.prototype.cancelEditing=function(){this.input.style.display="none",this.input.value="",this.input.disabled=!0,this.spanOrLink.style.display="inline",this.editButtonOrLink.style.display="inline",this.cancelButton.style.display="none";const id=this.input.id;this.input.removeAttribute("id"),this.editButtonOrLink.id=id}}));
define("core_form/events",["exports","core/str","core/event_dispatcher","jquery","core/yui"],(function(_exports,_str,_event_dispatcher,_jquery,_yui){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Javascript events for the `core_form` subsystem.
   *
   * @module core_form/events
   * @copyright 2021 Huong Nguyen &lt;huongnv13@gmail.com&gt;
   * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   * @since 3.10
   *
   * @example &lt;caption&gt;Example of listening to a form event.&lt;/caption&gt;
   * import {eventTypes as formEventTypes} from 'core_form/events';
   *
   * document.addEventListener(formEventTypes.formSubmittedByJavascript, e =&gt; {
   *     window.console.log(e.target); // The form that was submitted.
   *     window.console.log(e.detail.skipValidation); // Whether form validation was skipped.
   * });
   */let changesMadeString;Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.types=_exports.triggerUploadStarted=_exports.triggerUploadCompleted=_exports.notifyUploadStarted=_exports.notifyUploadCompleted=_exports.notifyUploadChanged=_exports.notifyFormSubmittedByJavascript=_exports.notifyFormError=_exports.notifyFieldValidationFailure=_exports.eventTypes=void 0,_jquery=_interopRequireDefault(_jquery),_yui=_interopRequireDefault(_yui);const changesMadeCheck=e=&gt;{e&amp;&amp;(e.returnValue=changesMadeString)},eventTypes={formError:"core_form/error",formSubmittedByJavascript:"core_form/submittedByJavascript",formFieldValidationFailed:"core_form/fieldValidationFailed",uploadStarted:"core_form/uploadStarted",uploadCompleted:"core_form/uploadCompleted",uploadChanged:"core_form/uploadChanged"};_exports.eventTypes=eventTypes;_exports.notifyFormError=field=&gt;(0,_event_dispatcher.dispatchEvent)(eventTypes.formError,{},field);_exports.notifyFormSubmittedByJavascript=function(form){let skipValidation=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]&amp;&amp;arguments[1],fallbackHandled=arguments.length&gt;2&amp;&amp;void 0!==arguments[2]&amp;&amp;arguments[2];skipValidation&amp;&amp;(window.skipClientValidation=!0);const customEvent=(0,_event_dispatcher.dispatchEvent)(eventTypes.formSubmittedByJavascript,{skipValidation:skipValidation,fallbackHandled:fallbackHandled},form);return skipValidation&amp;&amp;(window.skipClientValidation=!1),customEvent};_exports.notifyFieldValidationFailure=(field,message)=&gt;(0,_event_dispatcher.dispatchEvent)(eventTypes.formFieldValidationFailed,{message:message},field,{cancelable:!0});const notifyUploadStarted=async elementId=&gt;(changesMadeString=await(0,_str.get_string)("changesmadereallygoaway","moodle"),window.addEventListener("beforeunload",changesMadeCheck),(0,_event_dispatcher.dispatchEvent)(eventTypes.uploadStarted,{},document.getElementById(elementId),{bubbles:!0,cancellable:!1}));_exports.notifyUploadStarted=notifyUploadStarted;const notifyUploadCompleted=elementId=&gt;(window.removeEventListener("beforeunload",changesMadeCheck),(0,_event_dispatcher.dispatchEvent)(eventTypes.uploadCompleted,{},document.getElementById(elementId),{bubbles:!0,cancellable:!1}));_exports.notifyUploadCompleted=notifyUploadCompleted;const triggerUploadStarted=notifyUploadStarted;_exports.triggerUploadStarted=triggerUploadStarted;const triggerUploadCompleted=notifyUploadCompleted;_exports.triggerUploadCompleted=triggerUploadCompleted;_exports.types={uploadStarted:"core_form/uploadStarted",uploadCompleted:"core_form/uploadCompleted"};let legacyEventsRegistered=!1;legacyEventsRegistered||(_yui.default.use("event","moodle-core-event",(()=&gt;{document.addEventListener(eventTypes.formError,(e=&gt;{const element=_yui.default.one(e.target),formElement=_yui.default.one(e.target.closest("form"));_yui.default.Global.fire(M.core.globalEvents.FORM_ERROR,{formid:formElement.generateID(),elementid:element.generateID()})})),document.addEventListener(eventTypes.formSubmittedByJavascript,(e=&gt;{if(e.detail.fallbackHandled)return;e.skipValidation&amp;&amp;(window.skipClientValidation=!0);const form=_yui.default.one(e.target);form.fire(M.core.event.FORM_SUBMIT_AJAX,{currentTarget:form,fallbackHandled:!0}),e.skipValidation&amp;&amp;(window.skipClientValidation=!1)}))})),document.addEventListener(eventTypes.formFieldValidationFailed,(e=&gt;{const legacyEvent=_jquery.default.Event("core_form-field-validation");(0,_jquery.default)(e.target).trigger(legacyEvent,e.detail.message)})),legacyEventsRegistered=!0);_exports.notifyUploadChanged=elementId=&gt;(0,_event_dispatcher.dispatchEvent)(eventTypes.uploadChanged,{},document.getElementById(elementId),{bubbles:!0,cancellable:!1})}));
/**
 * This module allows to enhance the form elements MoodleQuickForm_filetypes
 *
 * @module     core_form/filetypes
 * @copyright  2017 David Mudrak &lt;david@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.3
 */
define("core_form/filetypes",["jquery","core/log","core/str","core/modal_factory","core/modal_events","core/ajax","core/templates","core/tree"],(function($,Log,Str,ModalFactory,ModalEvents,Ajax,Templates,Tree){var FileTypes=function(elementId,elementLabel,onlyTypes,allowAll){this.elementId=elementId,this.elementLabel=elementLabel,this.onlyTypes=onlyTypes,this.allowAll=allowAll,this.inputField=$("#"+elementId),this.wrapperBrowserTrigger=$('[data-filetypesbrowser="'+elementId+'"]'),this.wrapperDescriptions=$('[data-filetypesdescriptions="'+elementId+'"]'),this.wrapperBrowserTrigger.length&amp;&amp;(this.inputField.length&amp;&amp;this.wrapperDescriptions.length?this.prepareBrowserTrigger().then(function(){return this.prepareBrowserModal()}.bind(this)).then(function(){return this.prepareBrowserTree()}.bind(this)):Log.error("core_form/filetypes: Unexpected DOM structure, unable to enhance filetypes field "+elementId))};return FileTypes.prototype.prepareBrowserTrigger=function(){return Templates.render("core_form/filetypes-trigger",{}).then(function(html){this.wrapperBrowserTrigger.html(html),this.browserTrigger=this.wrapperBrowserTrigger.find('[data-filetypeswidget="browsertrigger"]')}.bind(this))},FileTypes.prototype.prepareBrowserModal=function(){return ModalFactory.create({type:ModalFactory.types.SAVE_CANCEL,title:this.elementLabel}).then(function(modal){this.browserModal=modal}.bind(this)).then(function(){this.browserModal.getRoot().on(ModalEvents.hidden,function(){this.browserTrigger.focus()}.bind(this)),this.browserModal.getRoot().on(ModalEvents.save,function(){this.saveBrowserModal()}.bind(this))}.bind(this))},FileTypes.prototype.prepareBrowserTree=function(){return this.browserTrigger.on("click",function(e){if(e.preventDefault(),!this.inputField.is("[disabled]")){var bodyContent=this.loadBrowserModalBody();bodyContent.then(function(){this.browserTree=new Tree(this.browserModal.getBody()),this.browserTree.handleKeyDown=function(item,e){e.keyCode==this.browserTree.keys.enter||e.keyCode==this.browserTree.keys.space?(e.preventDefault(),e.stopPropagation(),this.toggleCheckbox(item.attr("data-filetypesbrowserkey"))):Tree.prototype.handleKeyDown.call(this.browserTree,item,e)}.bind(this),this.allowAll&amp;&amp;(this.hideOrShowItemsDependingOnAllowAll(this.browserModal.getRoot().find('input[type="checkbox"][data-filetypesbrowserkey="*"]').first()),this.browserModal.getRoot().on("change",'input[type="checkbox"][data-filetypesbrowserkey="*"]',function(e){this.hideOrShowItemsDependingOnAllowAll($(e.currentTarget))}.bind(this))),this.browserModal.getRoot().on("change",'input[type="checkbox"][data-filetypesbrowserkey]',function(e){var checkbox=$(e.currentTarget),key=checkbox.attr("data-filetypesbrowserkey");this.browserModal.getRoot().find('input[type="checkbox"][data-filetypesbrowserkey="'+key+'"]').prop("checked",checkbox.prop("checked"))}.bind(this))}.bind(this)).then(function(){this.browserModal.show()}.bind(this)),this.browserModal.setBody(bodyContent)}}.bind(this)),$.when()},FileTypes.prototype.loadBrowserModalBody=function(){var args={onlytypes:this.onlyTypes.join(),allowall:this.allowAll,current:this.inputField.val()};return Ajax.call([{methodname:"core_form_get_filetypes_browser_data",args:args}])[0].then(function(browserData){return Templates.render("core_form/filetypes-browser",{elementid:this.elementId,groups:browserData.groups})}.bind(this))},FileTypes.prototype.toggleCheckbox=function(key){var checkbox=this.browserModal.getRoot().find('input[type="checkbox"][data-filetypesbrowserkey="'+key+'"]').first();checkbox.prop("checked",!checkbox.prop("checked"))},FileTypes.prototype.saveBrowserModal=function(){if(this.allowAll){var allcheckbox=this.browserModal.getRoot().find('input[type="checkbox"][data-filetypesbrowserkey="*"]');if(allcheckbox.length&amp;&amp;allcheckbox.prop("checked"))return this.inputField.val("*"),void this.updateDescriptions(["*"])}var newvalue=[];this.browserModal.getRoot().find('input[type="checkbox"]').each((function(){var checkbox=$(this),key=checkbox.attr("data-filetypesbrowserkey");checkbox.prop("checked")&amp;&amp;newvalue.push(key)})),newvalue=newvalue.filter((function(x,i,a){return a.indexOf(x)==i})),this.inputField.val(newvalue.join(" ")),this.updateDescriptions(newvalue)},FileTypes.prototype.updateDescriptions=function(keys){var descriptions=[];keys.forEach(function(key){descriptions.push({description:this.browserModal.getRoot().find('[data-filetypesname="'+key+'"]').first().text().trim(),extensions:this.browserModal.getRoot().find('[data-filetypesextensions="'+key+'"]').first().text().trim()})}.bind(this));var templatedata={hasdescriptions:descriptions.length&gt;0,descriptions:descriptions};return Templates.render("core_form/filetypes-descriptions",templatedata).then(function(html){this.wrapperDescriptions.html(html)}.bind(this))},FileTypes.prototype.hideOrShowItemsDependingOnAllowAll=function(allcheckbox){var others=this.browserModal.getRoot().find('[role="treeitem"][data-filetypesbrowserkey!="*"]');allcheckbox.prop("checked")?others.hide():others.show()},{init:function(elementId,elementLabel,onlyTypes,allowAll){new FileTypes(elementId,elementLabel,onlyTypes,allowAll)}}}));
define("core_form/submit",["exports","core_form/events"],(function(_exports,_events){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0;
/**
   * Submit button JavaScript. All submit buttons will be automatically disabled once the form is
   * submitted, unless that submission results in an error/cancelling the submit.
   *
   * @module core_form/submit
   * @copyright 2019 The Open University
   * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   * @since 3.8
   */
let cookieListener=0;const cookieListeningButtons=[];let currentUploadCount=0;const uploadListeningButtons=[];let uploadListenersRegistered=!1;const getCookieName=()=&gt;"moodledownload_"+M.cfg.sesskey,clearDownloadCookie=()=&gt;{document.cookie=encodeURIComponent(getCookieName())+"=deleted; expires="+new Date(0).toUTCString()},checkUploadCount=()=&gt;{currentUploadCount?uploadListeningButtons.forEach((button=&gt;{button.disabled=!0})):uploadListeningButtons.forEach((button=&gt;{button.disabled=!1}))};_exports.init=elementId=&gt;{const button=document.getElementById(elementId);null!==button&amp;&amp;(button.disabled||uploadListeningButtons.push(button),uploadListenersRegistered||(document.addEventListener(_events.eventTypes.uploadStarted,(()=&gt;{currentUploadCount++,checkUploadCount()})),document.addEventListener(_events.eventTypes.uploadCompleted,(()=&gt;{currentUploadCount--,checkUploadCount()})),uploadListenersRegistered=!0),"off"!==button.form.dataset.doubleSubmitProtection&amp;&amp;button.form.addEventListener("submit",(function(event){const disableAction=function(){event.defaultPrevented||button.disabled||(button.disabled=!0,clearDownloadCookie(),(button=&gt;{cookieListeningButtons.push(button),cookieListener||(cookieListener=setInterval((()=&gt;{2==document.cookie.split(getCookieName()+"=").length&amp;&amp;(clearDownloadCookie(),clearInterval(cookieListener),cookieListener=0,cookieListeningButtons.forEach((button=&gt;{button.disabled=!1})))}),500))})(button))};window.addEventListener("beforeunload",disableAction),setTimeout((function(){window.removeEventListener("beforeunload",disableAction)}),0)}),!1))}}));
define("core_grades/searchwidget/selectors",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0;return _exports.default={regions:{searchResults:'[data-region="search-results-container-widget"]',unsearchableContent:'[data-region="unsearchable-content-container-widget"]'},actions:{search:'[data-action="search"]',clearSearch:'[data-action="clearsearch"]'},elements:{getSearchWidgetSelector:searchtype=&gt;'.search-widget[data-searchtype="'.concat(searchtype,'"]'),getSearchWidgetDropdownSelector:searchtype=&gt;'.search-widget[data-searchtype="'.concat(searchtype,'"] .dropdown-menu')}},_exports.default}));
define("core_grades/searchwidget/repository",["exports","core/ajax"],(function(_exports,_ajax){var obj;
/**
   * A repo for the search widget.
   *
   * @module    core_grades/searchwidget/repository
   * @copyright 2022 Mathew May &lt;mathew.solutions&gt;
   * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.userFetch=_exports.groupFetch=_exports.gradeitemFetch=void 0,_ajax=(obj=_ajax)&amp;&amp;obj.__esModule?obj:{default:obj};_exports.userFetch=(courseid,actionBaseUrl,groupId)=&gt;{const request={methodname:"core_grades_get_enrolled_users_for_search_widget",args:{courseid:courseid,actionbaseurl:actionBaseUrl,groupid:groupId}};return _ajax.default.call([request])[0]};_exports.groupFetch=(courseid,actionBaseUrl)=&gt;{const request={methodname:"core_grades_get_groups_for_search_widget",args:{courseid:courseid,actionbaseurl:actionBaseUrl}};return _ajax.default.call([request])[0]};_exports.gradeitemFetch=courseid=&gt;{const request={methodname:"gradereport_singleview_get_grade_items_for_search_widget",args:{courseid:courseid}};return _ajax.default.call([request])[0]}}));
define("core_grades/searchwidget/basewidget",["exports","core/utils","core/templates","core_grades/searchwidget/selectors","core/notification"],(function(_exports,_utils,Templates,Selectors,_notification){var obj;function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}
/**
   * A widget to search users or grade items within the gradebook.
   *
   * @module    core_grades/searchwidget/basewidget
   * @copyright 2022 Mathew May &lt;mathew.solutions&gt;
   * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.showLoader=_exports.registerListenerEvents=_exports.promisesAndResolvers=_exports.init=void 0,Templates=_interopRequireWildcard(Templates),Selectors=_interopRequireWildcard(Selectors),_notification=(obj=_notification)&amp;&amp;obj.__esModule?obj:{default:obj};_exports.init=async function(widgetContentContainer,bodyPromise,data,searchFunc){let unsearchableContent=arguments.length&gt;4&amp;&amp;void 0!==arguments[4]?arguments[4]:null;bodyPromise.then((async bodyContent=&gt;{if(widgetContentContainer.innerHTML=bodyContent,unsearchableContent){widgetContentContainer.querySelector(Selectors.regions.unsearchableContent).innerHTML+=unsearchableContent}const searchResultsContainer=widgetContentContainer.querySelector(Selectors.regions.searchResults);await showLoader(searchResultsContainer),await renderSearchResults(searchResultsContainer,data),registerListenerEvents(widgetContentContainer,data,searchFunc)})).catch(_notification.default.exception)};const registerListenerEvents=(widgetContentContainer,data,searchFunc)=&gt;{const searchResultsContainer=widgetContentContainer.querySelector(Selectors.regions.searchResults),searchInput=widgetContentContainer.querySelector(Selectors.actions.search);if(!searchInput)return;searchInput.focus();const clearSearchButton=widgetContentContainer.querySelector(Selectors.actions.clearSearch);searchInput.addEventListener("input",(0,_utils.debounce)((async()=&gt;{searchInput.value.length&gt;0?clearSearchButton.classList.remove("d-none"):clearSearchButton.classList.add("d-none"),await renderSearchResults(searchResultsContainer,debounceCallee(searchInput.value,data,searchFunc()))}),300)),clearSearchButton.addEventListener("click",(async e=&gt;{e.stopPropagation(),searchInput.value="",searchInput.focus(),clearSearchButton.classList.add("d-none"),await renderSearchResults(searchResultsContainer,debounceCallee(searchInput.value,data,searchFunc()))}))};_exports.registerListenerEvents=registerListenerEvents;const showLoader=async container=&gt;{const{html:html,js:js}=await Templates.renderForPromise("core_grades/searchwidget/loading",{});Templates.replaceNodeContents(container,html,js)};_exports.showLoader=showLoader;const debounceCallee=(searchValue,data,searchFunction)=&gt;searchValue.length&gt;0?searchFunction(data,searchValue):data,renderSearchResults=async(searchResultsContainer,searchResultsData)=&gt;{const templateData={searchresults:searchResultsData},{html:html,js:js}=await Templates.renderForPromise("core_grades/searchwidget/searchresults",templateData);await Templates.replaceNodeContents(searchResultsContainer,html,js)};_exports.promisesAndResolvers=()=&gt;{let bodyPromiseResolver;const bodyPromise=new Promise((resolve=&gt;{bodyPromiseResolver=resolve}));return{bodyPromiseResolver:bodyPromiseResolver,bodyPromise:bodyPromise}}}));
define("core_grades/searchwidget/group",["exports","core/pending","core/templates","core_grades/searchwidget/repository","core_grades/searchwidget/basewidget","jquery","core_grades/searchwidget/selectors"],(function(_exports,_pending,Templates,Repository,WidgetBase,_jquery,Selectors){function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * A widget to search groups within the gradebook.
   *
   * @module    core_grades/searchwidget/group
   * @copyright 2022 Mathew May &lt;mathew.solutions&gt;
   * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_pending=_interopRequireDefault(_pending),Templates=_interopRequireWildcard(Templates),Repository=_interopRequireWildcard(Repository),WidgetBase=_interopRequireWildcard(WidgetBase),_jquery=_interopRequireDefault(_jquery),Selectors=_interopRequireWildcard(Selectors);let registered=!1;_exports.init=()=&gt;{if(registered)return;const pendingPromise=new _pending.default;registerListenerEvents(),pendingPromise.resolve(),registered=!0};const registerListenerEvents=()=&gt;{let{bodyPromiseResolver:bodyPromiseResolver,bodyPromise:bodyPromise}=WidgetBase.promisesAndResolvers();const dropdownMenuContainer=document.querySelector(Selectors.elements.getSearchWidgetDropdownSelector("group"));(0,_jquery.default)(Selectors.elements.getSearchWidgetSelector("group")).on("show.bs.dropdown",(async e=&gt;{const courseID=e.relatedTarget.dataset.courseid,actionBaseUrl=e.relatedTarget.dataset.actionBaseUrl;await WidgetBase.showLoader(dropdownMenuContainer);const data=await Repository.groupFetch(courseID,actionBaseUrl).catch((async e=&gt;{const errorTemplateData={errormessage:e.message};bodyPromiseResolver(await Templates.render("core_grades/searchwidget/error",errorTemplateData))}));data!==[]&amp;&amp;await WidgetBase.init(dropdownMenuContainer,bodyPromise,data.groups,searchGroups())})),bodyPromiseResolver(Templates.render("core_grades/searchwidget/group/groupsearch_body",[])),(0,_jquery.default)(Selectors.elements.getSearchWidgetSelector("group")).on("hide.bs.dropdown",(()=&gt;{dropdownMenuContainer.innerHTML=""}))},searchGroups=()=&gt;()=&gt;(groups,searchTerm)=&gt;{if(""===searchTerm)return groups;searchTerm=searchTerm.toLowerCase();const searchResults=[];return groups.forEach((group=&gt;{group.name.toLowerCase().includes(searchTerm)&amp;&amp;searchResults.push(group)})),searchResults}}));
/**
 * Enhance the gradebook tree setup with various facilities.
 *
 * @module     core_grades/edittree_index
 * @copyright  2016 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core_grades/edittree_index",["jquery"],(function($){var edittree=function(){$("body").on("change",".weightoverride",edittree.toggleWeightInput),$("#menumoveafter").on("change",(function(){var form=$(this).closest("form");form.find("#bulkmoveinput").val(1),form.submit()}))};return edittree.toggleWeightInput=function(e){e.preventDefault();var node=$(this),row=node.closest("tr");$('input[name="weight_'+row.data("itemid")+'"]').prop("disabled",!node.prop("checked"))},{enhance:edittree}}));
define("core_grades/grades/grader/gradingpanel/scale",["exports","./repository","core_grades/grades/grader/gradingpanel/comparison","jquery","./normalise"],(function(_exports,_repository,_comparison,_jquery,_normalise){var obj;
/**
   * Grading panel for simple direct grading.
   *
   * @module     core_grades/grades/grader/gradingpanel/scale
   * @copyright  2019 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.storeCurrentGrade=_exports.fetchCurrentGrade=void 0,_jquery=(obj=_jquery)&amp;&amp;obj.__esModule?obj:{default:obj};_exports.fetchCurrentGrade=function(){return(0,_repository.fetchGrade)("scale")(...arguments)};_exports.storeCurrentGrade=(component,context,itemname,userId,notifyUser,rootNode)=&gt;{const form=rootNode.querySelector("form"),grade=form.querySelector('select[name="grade"]');return grade.checkValidity()&amp;&amp;grade.value.trim()?!0===(0,_comparison.compareData)(form)?(0,_repository.saveGrade)("scale")(component,context,itemname,userId,notifyUser,(0,_jquery.default)(form).serialize()):"":_normalise.invalidResult}}));
define("core_grades/grades/grader/gradingpanel/repository",["exports","core/ajax","./normalise"],(function(_exports,_ajax,_normalise){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.saveGrade=_exports.fetchGrade=void 0;_exports.fetchGrade=type=&gt;(component,contextid,itemname,gradeduserid)=&gt;(0,_ajax.call)([{methodname:"core_grades_grader_gradingpanel_".concat(type,"_fetch"),args:{component:component,contextid:contextid,itemname:itemname,gradeduserid:gradeduserid}}])[0];_exports.saveGrade=type=&gt;async(component,contextid,itemname,gradeduserid,notifyUser,formdata)=&gt;(0,_normalise.normaliseResult)(await(0,_ajax.call)([{methodname:"core_grades_grader_gradingpanel_".concat(type,"_store"),args:{component:component,contextid:contextid,itemname:itemname,gradeduserid:gradeduserid,notifyuser:notifyUser,formdata:formdata}}])[0])}));
define("core_grades/grades/grader/gradingpanel/normalise",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.normaliseResult=_exports.invalidResult=_exports.failedUpdate=void 0;_exports.normaliseResult=result=&gt;({result:result,failed:!!result.warnings.length,success:!result.warnings.length,error:null});_exports.invalidResult=()=&gt;({success:!1,failed:!1,result:{},error:null});_exports.failedUpdate=error=&gt;({success:!1,failed:!0,result:{},error:error})}));
define("core_grades/grades/grader/gradingpanel/point",["exports","./repository","core_grades/grades/grader/gradingpanel/comparison","jquery","./normalise"],(function(_exports,_repository,_comparison,_jquery,_normalise){var obj;
/**
   * Grading panel for simple direct grading.
   *
   * @module     core_grades/grades/grader/gradingpanel/point
   * @copyright  2019 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.storeCurrentGrade=_exports.fetchCurrentGrade=void 0,_jquery=(obj=_jquery)&amp;&amp;obj.__esModule?obj:{default:obj};_exports.fetchCurrentGrade=function(){return(0,_repository.fetchGrade)("point")(...arguments)};_exports.storeCurrentGrade=async(component,context,itemname,userId,notifyUser,rootNode)=&gt;{const form=rootNode.querySelector("form"),grade=form.querySelector('input[name="grade"]');return grade.checkValidity()&amp;&amp;grade.value.trim()?!0===(0,_comparison.compareData)(form)?await(0,_repository.saveGrade)("point")(component,context,itemname,userId,notifyUser,(0,_jquery.default)(form).serialize()):"":_normalise.invalidResult}}));
define("core_grades/grades/grader/gradingpanel/comparison",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.fillInitialValues=_exports.compareData=void 0;
/**
   * Compare a given form's values and its previously set data attributes.
   *
   * @module     core_grades/grades/grader/gradingpanel/comparison
   * @copyright  2019 Mathew May &lt;mathew.solutions&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */
const fillInitialValues=form=&gt;{Array.prototype.forEach.call(form.elements,(input=&gt;{"submit"!==input.type&amp;&amp;"button"!==input.type&amp;&amp;("radio"===input.type||"checkbox"===input.type?input.dataset.initialValue=JSON.stringify(input.checked):void 0!==input.value?input.dataset.initialValue=JSON.stringify(input.value):"select-one"===input.type&amp;&amp;Array.prototype.forEach.call(input.options,(option=&gt;{option.dataset.initialValue=JSON.stringify(option.selected)})))}))};_exports.fillInitialValues=fillInitialValues;_exports.compareData=form=&gt;{const result=Array.prototype.some.call(form.elements,(input=&gt;{if("submit"===input.type||"button"===input.type)return!1;if("radio"===input.type||"checkbox"===input.type){if(void 0!==input.dataset.initialValue)return input.dataset.initialValue!==JSON.stringify(input.checked)}else if(void 0!==input.value){if(void 0!==input.dataset.initialValue)return input.dataset.initialValue!==JSON.stringify(input.value)}else if("select-one"===input.type)return Array.prototype.some.call(input.options,(option=&gt;void 0!==option.dataset.initialValue&amp;&amp;option.dataset.initialValue!==JSON.stringify(option.selected)));return!0}));return fillInitialValues(form),result}}));
define("core_h5p/editor_display",["exports","jquery"],(function(_exports,_jquery){var obj;
/**
   * This module handles the display of the H5P authoring tool.
   *
   * @module     core_h5p/editor_display
   * @copyright  2020 Victor Deniz &lt;victor@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_jquery=(obj=_jquery)&amp;&amp;obj.__esModule?obj:{default:obj};_exports.init=elementId=&gt;{const editorwrapper=(0,_jquery.default)("#"+elementId),editor=(0,_jquery.default)(".h5p-editor"),mform=editor.closest("form"),editorupload=(0,_jquery.default)("h5p-editor-upload"),h5plibrary=(0,_jquery.default)('input[name="h5plibrary"]'),h5pparams=(0,_jquery.default)('input[name="h5pparams"]'),inputname=(0,_jquery.default)('input[name="name"]'),h5paction=(0,_jquery.default)('input[name="h5paction"]');h5paction.val("create"),H5PEditor.init(mform,h5paction,editorupload,editorwrapper,editor,h5plibrary,h5pparams,"",inputname,(function($button){return $button.is('[name="cancel"]')})),document.querySelector("#"+elementId+" iframe").setAttribute("name","h5p-editor")}}));
/**
 * Module to add/remove contact using ajax.
 *
 * @module     core_message/toggle_contact_button
 * @copyright  2016 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core_message/toggle_contact_button",["jquery","core/ajax","core/templates","core/notification","core/custom_interaction_events"],(function($,Ajax,Templates,Notification,CustomEvents){var getUserId=function(element){return element.attr("data-userid")},getCurrentUserId=function(element){return element.attr("data-currentuserid")},displayTextLabel=function(element){return"1"==element.attr("data-display-text-label")},isLoading=function(element){return element.hasClass("loading")||element.attr("disabled")},sendRequest=function(element,request){return isLoading(element)?$.Deferred():(element.addClass("loading"),element.attr("disabled","disabled"),Ajax.call([request])[0].fail(Notification.exception).always((function(){element.removeClass("loading"),element.removeAttr("disabled")})))};return{enhance:function(element){(element=$(element)).children(".loading-icon").length||Templates.render("core/loading",{}).done((function(html,js){element.append(html,js)})),CustomEvents.define(element,[CustomEvents.events.activate]),element.on(CustomEvents.events.activate,(function(e,data){!function(element){return"1"==element.attr("data-is-contact")}(element)?function(element){if(!isLoading(element)){var request={methodname:"core_message_create_contact_request",args:{userid:getCurrentUserId(element),requesteduserid:getUserId(element)}};sendRequest(element,request).done((function(){!function(element){element.attr("data-is-contact","1")}(element);const templateContext={displaytextlabel:displayTextLabel(element)};Templates.render("message/remove_contact_button",templateContext).done((function(html,js){Templates.replaceNodeContents(element,html,js)}))}))}}(element):function(element){if(!isLoading(element)){var request={methodname:"core_message_delete_contacts",args:{userids:[getUserId(element)]}};sendRequest(element,request).done((function(){!function(element){element.attr("data-is-contact","0")}(element);const templateContext={displaytextlabel:displayTextLabel(element)};Templates.render("message/add_contact_button",templateContext).done((function(html,js){Templates.replaceNodeContents(element,html,js)}))}))}}(element),e.preventDefault(),data.originalEvent.preventDefault()}))}}}));
/**
 * Controls the message preference page.
 *
 * @module     core_message/message_preferences
 * @copyright  2016 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core_message/message_preferences",["jquery","core/ajax","core/notification","core_message/message_notification_preference","core/custom_interaction_events"],(function($,Ajax,Notification,MessageNotificationPreference,CustomEvents){var SELECTORS_PREFERENCE="[data-state]",SELECTORS_PREFERENCES_CONTAINER='[data-region="preferences-container"]',SELECTORS_CONTACTABLE_PRIVACY_CONTAINER='[data-region="privacy-setting-container"]',MessagePreferences=function(element){this.root=$(element),this.userId=this.root.find(SELECTORS_PREFERENCES_CONTAINER).attr("data-user-id"),this.registerEventListeners()};return MessagePreferences.prototype.preferencesDisabled=function(){return this.root.find(SELECTORS_PREFERENCES_CONTAINER).hasClass("disabled")},MessagePreferences.prototype.saveContactablePrivacySetting=function(){var container=this.root.find(SELECTORS_CONTACTABLE_PRIVACY_CONTAINER),value=$("input[type='radio']:checked").val();if(container.hasClass("loading"))return $.Deferred().resolve();container.addClass("loading");var request={methodname:"core_user_update_user_preferences",args:{userid:this.userId,preferences:[{type:container.attr("data-preference-key"),value:value}]}};return Ajax.call([request])[0].fail(Notification.exception).always((function(){container.removeClass("loading")}))},MessagePreferences.prototype.registerEventListeners=function(){CustomEvents.define(this.root,[CustomEvents.events.activate]),this.root.on("change",function(e){if("message_blocknoncontacts"==e.target.name)this.saveContactablePrivacySetting();else if(!this.preferencesDisabled()){var preferencesContainer=$(e.target).closest(SELECTORS_PREFERENCES_CONTAINER),preferenceElement=$(e.target).closest(SELECTORS_PREFERENCE),messagePreference=new MessageNotificationPreference(preferencesContainer,this.userId);preferenceElement.addClass("loading"),messagePreference.save().always((function(){preferenceElement.removeClass("loading")}))}}.bind(this))},MessagePreferences}));
/**
 * Represents the notification processor (e.g. email, popup, jabber)
 *
 * @module     core_message/notification_processor
 * @copyright  2016 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core_message/notification_processor",["jquery"],(function($){const SELECTORS_STATE_INPUTS=".preference-state input.notification_enabled",NotificationProcessor=function(element){this.root=$(element)};return NotificationProcessor.prototype.getName=function(){return this.root.attr("data-processor-name")},NotificationProcessor.prototype.isEnabled=function(){return this.root.find(SELECTORS_STATE_INPUTS).prop("checked")},NotificationProcessor}));
/**
 * Constant values for the conversation page in the message drawer.
 *
 * @module     core_message/message_drawer_view_conversation_constants
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core_message/message_drawer_view_conversation_constants",[],(function(){return{SELECTORS:{ACTION_ACCEPT_CONTACT_REQUEST:'[data-action="accept-contact-request"]',ACTION_CANCEL_CONFIRM:'[data-action="cancel-confirm"]',ACTION_OKAY_CONFIRM:'[data-action="okay-confirm"]',ACTION_CANCEL_EDIT_MODE:'[data-action="cancel-edit-mode"]',ACTION_CONFIRM_ADD_CONTACT:'[data-action="confirm-add-contact"]',ACTION_CONFIRM_BLOCK:'[data-action="confirm-block"]',ACTION_CONFIRM_DELETE_SELECTED_MESSAGES:'[data-action="confirm-delete-selected-messages"]',ACTION_CONFIRM_DELETE_CONVERSATION:'[data-action="confirm-delete-conversation"]',ACTION_CONFIRM_FAVOURITE:'[data-action="confirm-favourite"]',ACTION_CONFIRM_MUTE:'[data-action="confirm-mute"]',ACTION_CONFIRM_UNFAVOURITE:'[data-action="confirm-unfavourite"]',ACTION_CONFIRM_REMOVE_CONTACT:'[data-action="confirm-remove-contact"]',ACTION_CONFIRM_UNBLOCK:'[data-action="confirm-unblock"]',ACTION_CONFIRM_UNMUTE:'[data-action="confirm-unmute"]',ACTION_DECLINE_CONTACT_REQUEST:'[data-action="decline-contact-request"]',ACTION_REQUEST_ADD_CONTACT:'[data-action="request-add-contact"]',ACTION_REQUEST_BLOCK:'[data-action="request-block"]',ACTION_REQUEST_DELETE_CONVERSATION:'[data-action="request-delete-conversation"]',ACTION_REQUEST_DELETE_SELECTED_MESSAGES:'[data-action="delete-selected-messages"]',ACTION_REQUEST_REMOVE_CONTACT:'[data-action="request-remove-contact"]',ACTION_REQUEST_UNBLOCK:'[data-action="request-unblock"]',ACTION_VIEW_CONTACT:'[data-action="view-contact"]',ACTION_VIEW_GROUP_INFO:'[data-action="view-group-info"]',CAN_RECEIVE_FOCUS:'input:not([type="hidden"]), a[href], button, textarea, select, [tabindex]',CONFIRM_DIALOGUE:'[data-region="confirm-dialogue"]',CONFIRM_DIALOGUE_BUTTON_TEXT:'[data-region="dialogue-button-text"]',CONFIRM_DIALOGUE_CANCEL_BUTTON:'[data-action="cancel-confirm"]',CONFIRM_DIALOGUE_CONTAINER:'[data-region="confirm-dialogue-container"]',CONFIRM_DIALOGUE_HEADER:'[data-region="dialogue-header"]',CONFIRM_DIALOGUE_OKAY_BUTTON:'[data-action="okay-confirm"]',CONFIRM_DIALOGUE_TEXT:'[data-region="dialogue-text"]',CONTACT_REQUEST_SENT_MESSAGE_CONTAINER:'[data-region="contact-request-sent-message-container"]',CONTENT_PLACEHOLDER_CONTAINER:'[data-region="content-placeholder"]',CONTENT_CONTAINER:'[data-region="content-container"]',CONTENT_MESSAGES_CONTAINER:'[data-region="content-message-container"]',CONTENT_MESSAGES_FOOTER_CONTAINER:'[data-region="content-messages-footer-container"]',CONTENT_MESSAGES_FOOTER_EDIT_MODE_CONTAINER:'[data-region="content-messages-footer-edit-mode-container"]',CONTENT_MESSAGES_FOOTER_REQUIRE_CONTACT_CONTAINER:'[data-region="content-messages-footer-require-contact-container"]',CONTENT_MESSAGES_FOOTER_REQUIRE_UNBLOCK_CONTAINER:'[data-region="content-messages-footer-require-unblock-container"]',CONTENT_MESSAGES_FOOTER_UNABLE_TO_MESSAGE_CONTAINER:'[data-region="content-messages-footer-unable-to-message"]',DAY_MESSAGES_CONTAINER:'[data-region="day-messages-container"]',DELETE_MESSAGES_FOR_ALL_USERS_TOGGLE:'[data-region="delete-messages-for-all-users-toggle"]',DELETE_MESSAGES_FOR_ALL_USERS_TOGGLE_CONTAINER:'[data-region="delete-messages-for-all-users-toggle-container"]',EMOJI_AUTO_COMPLETE_CONTAINER:'[data-region="emoji-auto-complete-container"]',EMOJI_PICKER_CONTAINER:'[data-region="emoji-picker-container"]',EMOJI_PICKER:'[data-region="emoji-picker"]',EMOJI_PICKER_SEARCH_INPUT:'[data-region="search-input"]',ERROR_MESSAGE_CONTAINER:'[data-region="error-message-container"]',ERROR_MESSAGE:'[data-region="error-message"]',FAVOURITE_ICON_CONTAINER:'[data-region="favourite-icon-container"]',FOOTER_CONTAINER:'[data-region="content-messages-footer-container"]',HEADER:'[data-region="header-content"]',HEADER_EDIT_MODE:'[data-region="header-edit-mode"]',HEADER_PLACEHOLDER_CONTAINER:'[data-region="header-placeholder"]',LOADING_ICON_CONTAINER:'[data-region="loading-icon-container"]',MESSAGE:'[data-region="message"]',MESSAGE_NOT_SELECTED:'[data-region="message"][aria-checked="false"]',MESSAGE_NOT_SELECTED_ICON:'[data-region="not-selected-icon"]',MESSAGE_SELECTED_ICON:'[data-region="selected-icon"]',MESSAGES:'[data-region="content-message-container"]',MESSAGES_CONTAINER:'[data-region="content-message-container"]',MESSAGES_SELECTED_COUNT:'[data-region="message-selected-court"]',MESSAGE_TEXT_AREA:'[data-region="send-message-txt"]',MORE_MESSAGES_LOADING_ICON_CONTAINER:'[data-region="more-messages-loading-icon-container"]',MUTED_ICON_CONTAINER:'[data-region="muted-icon-container"]',PLACEHOLDER_CONTAINER:'[data-region="placeholder-container"]',RETRY_SEND:'[data-region="retry-send"]',SELF_CONVERSATION_MESSAGE_CONTAINER:'[data-region="self-conversation-message-container"]',SEND_MESSAGE_BUTTON:'[data-action="send-message"]',SEND_MESSAGE_ICON_CONTAINER:'[data-region="send-icon-container"]',TEXT:'[data-region="text"]',TEXT_CONTAINER:'[data-region="text-container"]',TIME_CREATED:'[data-region="time-created"]',TITLE:'[data-region="title"]',TOGGLE_EMOJI_PICKER_BUTTON:'[data-action="toggle-emoji-picker"]'},TEMPLATES:{HEADER_PRIVATE:"core_message/message_drawer_view_conversation_header_content_type_private",HEADER_PRIVATE_NO_CONTROLS:"core_message/message_drawer_view_conversation_header_content_type_private_no_controls",HEADER_PUBLIC:"core_message/message_drawer_view_conversation_header_content_type_public",HEADER_SELF:"core_message/message_drawer_view_conversation_header_content_type_self",DAY:"core_message/message_drawer_view_conversation_body_day",MESSAGE:"core_message/message_drawer_view_conversation_body_message",MESSAGES:"core_message/message_drawer_view_conversation_body_messages"},CONVERSATION_TYPES:{PRIVATE:1,PUBLIC:2,SELF:3},NEWEST_MESSAGES_FIRST:!0,LOAD_MESSAGE_LIMIT:100,MILLISECONDS_IN_SEC:1e3}}));
/**
 * Lazy loaded list of items.
 *
 * @module     core_message/message_drawer_lazy_load_list
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core_message/message_drawer_lazy_load_list",["jquery","core/custom_interaction_events","core/pending"],(function($,CustomEvents,PendingPromise){var SELECTORS_ROOT='[data-region="lazy-load-list"]',SELECTORS_LOADING_ICON_CONTAINER='[data-region="loading-icon-container"]',SELECTORS_CONTENT_CONTAINER='[data-region="content-container"]',SELECTORS_EMPTY_MESSAGE='[data-region="empty-message-container"]',SELECTORS_PLACEHOLDER='[data-region="placeholder-container"]',stopLoading=function(root){root.attr("data-loading",!1)},getContentContainer=function(root){return root.find(SELECTORS_CONTENT_CONTAINER)},hideLoadingIcon=function(root){root.find(SELECTORS_LOADING_ICON_CONTAINER).addClass("hidden")},showEmptyMessage=function(root){root.find(SELECTORS_EMPTY_MESSAGE).removeClass("hidden")},hidePlaceholder=function(root){root.find(SELECTORS_PLACEHOLDER).addClass("hidden")},showContent=function(root){getContentContainer(root).removeClass("hidden")},hideContent=function(root){getContentContainer(root).addClass("hidden")},setLoadedAll=function(root,value){root.attr("data-loaded-all",value)},loadAndRender=function(root,loadCallback,renderCallback){var userId=function(root){return root.attr("data-user-id")}(root);return function(root){root.attr("data-loading",!0)}(root),loadCallback(root,userId).then((function(items){if(items.length&gt;0){var contentContainer=getContentContainer(root);return renderCallback(contentContainer,items,userId).then((function(){return items}))}return items})).then((function(items){return stopLoading(root),root.attr("data-seen",!0),items.length||setLoadedAll(root,!0),items})).catch((function(){stopLoading(root),root.attr("data-seen",!0)}))},initialLoadAndRender=function(root,loadCallback,renderCallback){const pendingPromise=new PendingPromise("initialLoadAndRender");return getContentContainer(root).empty(),function(root){root.find(SELECTORS_PLACEHOLDER).removeClass("hidden")}(root),hideContent(root),loadAndRender(root,loadCallback,renderCallback).then((function(items){hidePlaceholder(root),items.length?showContent(root):showEmptyMessage(root)})).catch((function(){hidePlaceholder(root),showContent(root)})).then((()=&gt;{pendingPromise.resolve()}))},registerEventListeners=function(root,loadCallback,renderCallback){CustomEvents.define(root,[CustomEvents.events.scrollBottom]),root.on(CustomEvents.events.scrollBottom,(function(){(function(root){return!function(root){return"true"==root.attr("data-loaded-all")}(root)&amp;&amp;!function(root){return"true"===root.attr("data-loading")}(root)})(root)&amp;&amp;(!function(root){root.find(SELECTORS_LOADING_ICON_CONTAINER).removeClass("hidden")}(root),loadAndRender(root,loadCallback,renderCallback).then((function(){return hideLoadingIcon(root)})).catch((function(){return hideLoadingIcon(root)})))}))};return{show:function(root,loadCallback,renderCallback){(root=$(root)).attr("data-init")||(registerEventListeners(root,loadCallback,renderCallback),initialLoadAndRender(root,loadCallback,renderCallback),root.attr("data-init",!0))},getContentContainer:getContentContainer,getRoot:function(containerElement){return containerElement.find(SELECTORS_ROOT)},setLoadedAll:setLoadedAll,showEmptyMessage:showEmptyMessage,hideEmptyMessage:function(root){root.find(SELECTORS_EMPTY_MESSAGE).addClass("hidden")},showContent:showContent,hideContent:hideContent}}));
/**
 * Module to message a user from their profile page.
 *
 * @module     core_message/message_user_button
 * @copyright  2019 Mark Nelson &lt;markn@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core_message/message_user_button",["jquery","core/custom_interaction_events","core_message/message_drawer_helper","core/templates"],(function($,CustomEvents,MessageDrawerHelper,Templates){var SELECTORS_MESSAGE_TEXTAREA='[data-region="send-message-txt"]',SELECTORS_MESSAGE_USER_BUTTON="#message-user-button",TEMPLATES_CONTENT="core_message/message_jumpto",getUserId=function(element){return parseInt(element.attr("data-userid"))},getConversationId=function(element){return parseInt(element.attr("data-conversationid"))};return{send:function(element){element=$(element);var args={conversationid:getConversationId(element),buttonid:$(element).attr("id"),userid:getUserId(element)};Templates.render(TEMPLATES_CONTENT,{}).then((function(html){element.after(html)})).then((function(){$(SELECTORS_MESSAGE_USER_BUTTON).next().focus((function(){$(SELECTORS_MESSAGE_TEXTAREA).focus()}))})),CustomEvents.define(element,[CustomEvents.events.activate]),element.on(CustomEvents.events.activate,(function(e,data){$(e.target).hasClass("active")?(MessageDrawerHelper.hide(),$(SELECTORS_MESSAGE_USER_BUTTON).next().attr("tabindex",-1)):($(SELECTORS_MESSAGE_USER_BUTTON).next().attr("tabindex",0),args.conversationid?MessageDrawerHelper.showConversation(args):MessageDrawerHelper.createConversationWithUser(args)),$(e.target).focus(),$(e.target).toggleClass("active"),e.preventDefault(),data.originalEvent.preventDefault()}))}}}));
/**
 * This module operates on the view states from the message_drawer_view_conversation module.
 * It exposes functions that can be used to generate new version of the state.
 *
 * Important notes for this module:
 * 1.) The existing state is always immutable. It should never be modified.
 * 2.) All functions that operate on the state should always clone the state and
 *     modify the cloned state before returning it.
 *
 * It's important that the states remain immutable because they are diff'd in
 * the message_drawer_view_conversation_patcher module in order to work out what
 * has changed.
 *
 * @module     core_message/message_drawer_view_conversation_state_manager
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core_message/message_drawer_view_conversation_state_manager",["jquery"],(function($){var cloneState=function(state){return $.extend(!0,{},state)},formatMessages=function(messages,loggedInUserId,members){return messages.map((function(message){var fromLoggedInUser=message.useridfrom==loggedInUserId;return{id:""+message.id,fromLoggedInUser:fromLoggedInUser,userFrom:members[message.useridfrom],text:message.text,timeCreated:message.timecreated?parseInt(message.timecreated,10):null}}))};return{buildInitialState:function(midnight,loggedInUserId,id,messagePollMin,messagePollMax,messagePollAfterMax){return{midnight:midnight,loggedInUserId:loggedInUserId,id:id,messagePollMin:messagePollMin,messagePollMax:messagePollMax,messagePollAfterMax:messagePollAfterMax,name:null,subname:null,type:null,totalMemberCount:null,imageUrl:null,isFavourite:null,isMuted:null,canDeleteMessagesForAllUsers:!1,deleteMessagesForAllUsers:!1,members:{},messages:[],hasTriedToLoadMessages:!1,loadingMessages:!0,loadingMembers:!0,loadingConfirmAction:!1,pendingBlockUserIds:[],pendingUnblockUserIds:[],pendingRemoveContactIds:[],pendingAddContactIds:[],pendingDeleteMessageIds:[],pendingSendMessageIds:[],pendingDeleteConversation:!1,selectedMessageIds:[],showEmojiAutoComplete:!1,showEmojiPicker:!1}},addMessages:function(state,messages){var newState=cloneState(state),formattedMessages=formatMessages(messages,state.loggedInUserId,state.members);formattedMessages=formattedMessages.map((function(message){return message.sendState=null,message.timeAdded=Date.now(),message.errorMessage=null,message}));var allMessages=state.messages.concat(formattedMessages);return allMessages.sort((function(a,b){if(null===a.timeCreated&amp;&amp;null===b.timeCreated){if(a.timeAdded&lt;b.timeAdded)return-1;if(a.timeAdded&gt;b.timeAdded)return 1}return null===a.timeCreated&amp;&amp;null!==b.timeCreated?1:null!==a.timeCreated&amp;&amp;null===b.timeCreated||a.timeCreated&lt;b.timeCreated?-1:a.timeCreated&gt;b.timeCreated?1:a.id&lt;b.id?-1:a.id&gt;b.id?1:0})),newState.messages=allMessages.filter((function(message,index,sortedMessages){return!index||message.id!=sortedMessages[index-1].id})),newState},updateMessages:function(state,data){var newState=cloneState(state),updatesById=data.reduce((function(carry,messageData){var oldMessage=messageData[0],newMessage=messageData[1],formattedMessage=formatMessages([newMessage],state.loggedInUserId,state.members)[0];return carry[oldMessage.id]=formattedMessage,carry}),{});return newState.messages=newState.messages.map((function(message){return message.id in updatesById?$.extend(message,updatesById[message.id]):message})),newState},removeMessages:function(state,messages){var newState=cloneState(state),removeMessageIds=messages.map((function(message){return""+message.id}));return newState.messages=newState.messages.filter((function(message){return removeMessageIds.indexOf(message.id)&lt;0})),newState},removeMessagesById:function(state,messageIds){var newState=cloneState(state);return messageIds=messageIds.map((function(id){return""+id})),newState.messages=newState.messages.filter((function(message){return messageIds.indexOf(message.id)&lt;0})),newState},addMembers:function(state,members){var newState=cloneState(state),formattedMembers=function(members){return members.map((function(member){return{id:member.id,fullname:member.fullname,profileurl:member.profileurl,profileimageurl:member.profileimageurl,profileimageurlsmall:member.profileimageurlsmall,isonline:member.isonline,showonlinestatus:member.showonlinestatus,isblocked:member.isblocked,iscontact:member.iscontact,isdeleted:member.isdeleted,canmessage:member.canmessage,canmessageevenifblocked:member.canmessageevenifblocked,requirescontact:member.requirescontact,contactrequests:member.contactrequests||[]}}))}(members);return formattedMembers.forEach((function(member){newState.members[member.id]=member})),newState},removeMembers:function(state,members){var newState=cloneState(state);return members.forEach((function(member){delete newState.members[member.id]})),newState},setLoadingMessages:function(state,value){var newState=cloneState(state);return newState.loadingMessages=value,state.loadingMessages&amp;&amp;!value&amp;&amp;(newState.hasTriedToLoadMessages=!0),newState},setLoadingMembers:function(state,value){var newState=cloneState(state);return newState.loadingMembers=value,newState},setId:function(state,value){var newState=cloneState(state);return newState.id=value,newState},setName:function(state,value){var newState=cloneState(state);return newState.name=value,newState},setSubname:function(state,value){var newState=cloneState(state);return newState.subname=value,newState},setType:function(state,type){var newState=cloneState(state);return newState.type=type,newState},setIsFavourite:function(state,isFavourite){var newState=cloneState(state);return newState.isFavourite=isFavourite,newState},setIsMuted:function(state,isMuted){var newState=cloneState(state);return newState.isMuted=isMuted,newState},setCanDeleteMessagesForAllUsers:function(state,value){var newState=cloneState(state);return newState.canDeleteMessagesForAllUsers=value,newState},setDeleteMessagesForAllUsers:function(state,value){var newState=cloneState(state);return newState.deleteMessagesForAllUsers=value,newState},setTotalMemberCount:function(state,count){var newState=cloneState(state);return newState.totalMemberCount=count,newState},setImageUrl:function(state,url){var newState=cloneState(state);return newState.imageUrl=url,newState},setLoadingConfirmAction:function(state,value){var newState=cloneState(state);return newState.loadingConfirmAction=value,newState},setPendingDeleteConversation:function(state,value){var newState=cloneState(state);return newState.pendingDeleteConversation=value,newState},setMessagesSendPendingById:function(state,messageIds){var newState=cloneState(state);return messageIds=messageIds.map((function(id){return""+id})),newState.messages.forEach((function(message){messageIds.indexOf(message.id)&gt;=0&amp;&amp;(message.sendState="pending",message.errorMessage=null)})),newState},setMessagesSendSuccessById:function(state,messageIds){var newState=cloneState(state);return messageIds=messageIds.map((function(id){return""+id})),newState.messages.forEach((function(message){messageIds.indexOf(message.id)&gt;=0&amp;&amp;(message.sendState="sent",message.errorMessage=null)})),newState},setMessagesSendFailById:function(state,messageIds,errorMessage){var newState=cloneState(state);return messageIds=messageIds.map((function(id){return""+id})),newState.messages.forEach((function(message){messageIds.indexOf(message.id)&gt;=0&amp;&amp;(message.sendState="error",message.errorMessage=errorMessage)})),newState},setShowEmojiAutoComplete:function(state,show){var newState=cloneState(state);return newState.showEmojiAutoComplete=show,newState},setShowEmojiPicker:function(state,show){var newState=cloneState(state);return newState.showEmojiPicker=show,newState},addPendingBlockUsersById:function(state,userIds){var newState=cloneState(state);return userIds.forEach((function(id){newState.pendingBlockUserIds.push(id)})),newState},addPendingRemoveContactsById:function(state,userIds){var newState=cloneState(state);return userIds.forEach((function(id){newState.pendingRemoveContactIds.push(id)})),newState},addPendingUnblockUsersById:function(state,userIds){var newState=cloneState(state);return userIds.forEach((function(id){newState.pendingUnblockUserIds.push(id)})),newState},addPendingAddContactsById:function(state,userIds){var newState=cloneState(state);return userIds.forEach((function(id){newState.pendingAddContactIds.push(id)})),newState},addPendingDeleteMessagesById:function(state,messageIds){var newState=cloneState(state);return messageIds.forEach((function(id){newState.pendingDeleteMessageIds.push(id)})),newState},removePendingBlockUsersById:function(state,userIds){var newState=cloneState(state);return newState.pendingBlockUserIds=newState.pendingBlockUserIds.filter((function(id){return userIds.indexOf(id)&lt;0})),newState},removePendingRemoveContactsById:function(state,userIds){var newState=cloneState(state);return newState.pendingRemoveContactIds=newState.pendingRemoveContactIds.filter((function(id){return userIds.indexOf(id)&lt;0})),newState},removePendingUnblockUsersById:function(state,userIds){var newState=cloneState(state);return newState.pendingUnblockUserIds=newState.pendingUnblockUserIds.filter((function(id){return userIds.indexOf(id)&lt;0})),newState},removePendingAddContactsById:function(state,userIds){var newState=cloneState(state);return newState.pendingAddContactIds=newState.pendingAddContactIds.filter((function(id){return userIds.indexOf(id)&lt;0})),newState},removePendingDeleteMessagesById:function(state,messageIds){var newState=cloneState(state);return messageIds=messageIds.map((function(id){return""+id})),newState.pendingDeleteMessageIds=newState.pendingDeleteMessageIds.filter((function(id){return messageIds.indexOf(id)&lt;0})),newState},addSelectedMessagesById:function(state,messageIds){var newState=cloneState(state);return messageIds=messageIds.map((function(id){return""+id})),newState.selectedMessageIds=newState.selectedMessageIds.concat(messageIds),newState},removeSelectedMessagesById:function(state,messageIds){var newState=cloneState(state);return messageIds=messageIds.map((function(id){return""+id})),newState.selectedMessageIds=newState.selectedMessageIds.filter((function(id){return messageIds.indexOf(id)&lt;0})),newState},markMessagesAsRead:function(state,readMessages){var newState=cloneState(state),readMessageIds=readMessages.map((function(message){return message.id}));return newState.messages=newState.messages.map((function(message){return readMessageIds.indexOf(message.id)&gt;=0&amp;&amp;(message.isRead=!0),message})),newState},addContactRequests:function(state,requests){var newState=cloneState(state);return requests.forEach((function(request){var fromUserId=request.userid,toUserId=request.requesteduserid;newState.members[fromUserId].contactrequests.push(request),newState.members[toUserId].contactrequests.push(request)})),newState},removeContactRequests:function(state,requests){var newState=cloneState(state);return requests.forEach((function(request){var fromUserId=request.userid,toUserId=request.requesteduserid;newState.members[fromUserId].contactrequests=newState.members[fromUserId].contactrequests.filter((function(existing){return existing.userid!=fromUserId})),newState.members[toUserId].contactrequests=newState.members[toUserId].contactrequests.filter((function(existing){return existing.requesteduserid!=toUserId}))})),newState}}}));
/**
 * Controls the contact page in the message drawer.
 *
 * @module     core_message/message_drawer_view_contact
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core_message/message_drawer_view_contact",["jquery","core/str","core/templates"],(function($,Str,Templates){var SELECTORS_CONTENT_CONTAINER='[data-region="content-container"]',TEMPLATES_CONTENT="core_message/message_drawer_view_contact_body_content",getContentContainer=function(root){return root.find(SELECTORS_CONTENT_CONTAINER)};return{show:function(namespace,header,body,footer,contact){var root=$(body);return getContentContainer(root).empty(),function(root,profile){return Templates.render(TEMPLATES_CONTENT,profile).then((function(html){return getContentContainer(root).append(html),html}))}(root,contact)},description:function(root,contact){return Str.get_string("messagedrawerviewcontact","core_message",contact.fullname)}}}));
define("core_message/default_notification_preferences",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0;
/**
   * Controls the default settings for the list of notification types on the
   * notifications admin page
   *
   * @module     core_message/default_notification_preferences
   * @class      default_notification_preferences
   * @copyright  2021 Moodle
   * @author     Pau Ferrer Ocaña &lt;pau@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */
const selectors_provider=".defaultmessageoutputs .provider_enabled",selectors_lockSetting=".locked_message_setting",selectors_allSettings=".locked_message_setting, .enabled_message_setting";var _default={init:()=&gt;{(()=&gt;{const toggleLockSetting=lockedElement=&gt;{const isEnabled=lockedElement.checked||!1,enabledId=lockedElement.id.replace("_locked[","_enabled[");document.getElementById(enabledId).closest("div.custom-control").classList.toggle("dimmed_text",isEnabled)},toggleEnableProviderSettings=providerEnabledElement=&gt;{const isEnabled=providerEnabledElement.checked||!1;providerEnabledElement.closest("tr").querySelectorAll(selectors_allSettings).forEach((element=&gt;{element.toggleAttribute("disabled",!isEnabled)}))},container=document.querySelector(".preferences-container");container.querySelectorAll(selectors_provider).forEach((providerEnabledElement=&gt;{providerEnabledElement.checked||toggleEnableProviderSettings(providerEnabledElement),providerEnabledElement.addEventListener("change",(e=&gt;{toggleEnableProviderSettings(e.target)}))})),container.querySelectorAll(selectors_lockSetting).forEach((lockedElement=&gt;{lockedElement.checked&amp;&amp;toggleLockSetting(lockedElement),lockedElement.addEventListener("change",(e=&gt;{toggleLockSetting(e.target)}))}))})()}};return _exports.default=_default,_exports.default}));
/**
 * Controls the search page of the message drawer.
 *
 * @module     core_message/message_drawer_view_search
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core_message/message_drawer_view_search",["jquery","core/custom_interaction_events","core/notification","core/pubsub","core/str","core/templates","core_message/message_repository","core_message/message_drawer_events"],(function($,CustomEvents,Notification,PubSub,Str,Templates,Repository,Events){var SELECTORS_BLOCK_ICON_CONTAINER='[data-region="block-icon-container"]',SELECTORS_CANCEL_SEARCH_BUTTON='[data-action="cancel-search"]',SELECTORS_CONTACTS_CONTAINER='[data-region="contacts-container"]',SELECTORS_CONTACTS_LIST='[data-region="contacts-container"] [data-region="list"]',SELECTORS_EMPTY_MESSAGE_CONTAINER='[data-region="empty-message-container"]',SELECTORS_LIST='[data-region="list"]',SELECTORS_LOADING_ICON_CONTAINER='[data-region="loading-icon-container"]',SELECTORS_LOADING_PLACEHOLDER='[data-region="loading-placeholder"]',SELECTORS_MESSAGES_LIST='[data-region="messages-container"] [data-region="list"]',SELECTORS_MESSAGES_CONTAINER='[data-region="messages-container"]',SELECTORS_NON_CONTACTS_CONTAINER='[data-region="non-contacts-container"]',SELECTORS_NON_CONTACTS_LIST='[data-region="non-contacts-container"] [data-region="list"]',SELECTORS_SEARCH_ICON_CONTAINER='[data-region="search-icon-container"]',SELECTORS_SEARCH_ACTION='[data-action="search"]',SELECTORS_SEARCH_INPUT='[data-region="search-input"]',SELECTORS_SEARCH_RESULTS_CONTAINER='[data-region="search-results-container"]',SELECTORS_LOAD_MORE_USERS='[data-action="load-more-users"]',SELECTORS_LOAD_MORE_MESSAGES='[data-action="load-more-messages"]',SELECTORS_BUTTON_TEXT='[data-region="button-text"]',SELECTORS_NO_RESULTS_CONTAINTER='[data-region="no-results-container"]',SELECTORS_ALL_CONTACTS_CONTAINER='[data-region="all-contacts-container"]',TEMPLATES_CONTACTS_LIST="core_message/message_drawer_contacts_list",TEMPLATES_NON_CONTACTS_LIST="core_message/message_drawer_non_contacts_list",TEMPLATES_MESSAGES_LIST="core_message/message_drawer_messages_list",getLoggedInUserId=function(body){return body.attr("data-user-id")},getEmptyMessageContainer=function(body){return body.find(SELECTORS_EMPTY_MESSAGE_CONTAINER)},getLoadingIconContainer=function(header){return header.find(SELECTORS_LOADING_ICON_CONTAINER)},getLoadingPlaceholder=function(body){return body.find(SELECTORS_LOADING_PLACEHOLDER)},getSearchIconContainer=function(header){return header.find(SELECTORS_SEARCH_ICON_CONTAINER)},getSearchInput=function(header){return header.find(SELECTORS_SEARCH_INPUT)},getSearchResultsContainer=function(body){return body.find(SELECTORS_SEARCH_RESULTS_CONTAINER)},getContactsContainer=function(body){return body.find(SELECTORS_CONTACTS_CONTAINER)},getNonContactsContainer=function(body){return body.find(SELECTORS_NON_CONTACTS_CONTAINER)},hideEmptyMessage=function(body){getEmptyMessageContainer(body).addClass("hidden")},hideLoadingIcon=function(header){getLoadingIconContainer(header).addClass("hidden")},hideLoadingPlaceholder=function(body){getLoadingPlaceholder(body).addClass("hidden")},showSearchIcon=function(header){getSearchIconContainer(header).removeClass("hidden")},hideSearchResults=function(body){getSearchResultsContainer(body).addClass("hidden")},clearAllSearchResults=function(body){body.find(SELECTORS_CONTACTS_LIST).empty(),body.find(SELECTORS_NON_CONTACTS_LIST).empty(),body.find(SELECTORS_MESSAGES_LIST).empty(),function(body){var container=getSearchResultsContainer(body);container.find(SELECTORS_ALL_CONTACTS_CONTAINER).removeClass("hidden"),container.find(SELECTORS_MESSAGES_CONTAINER).removeClass("hidden"),container.find(SELECTORS_NO_RESULTS_CONTAINTER).addClass("hidden")}(body),function(body){getSearchResultsContainer(body).find(SELECTORS_ALL_CONTACTS_CONTAINER).removeClass("hidden")}(body),function(body){getSearchResultsContainer(body).find(SELECTORS_CONTACTS_CONTAINER).removeClass("hidden")}(body),function(body){getSearchResultsContainer(body).find(SELECTORS_NON_CONTACTS_CONTAINER).removeClass("hidden")}(body),function(body){getSearchResultsContainer(body).find(SELECTORS_MESSAGES_CONTAINER).removeClass("hidden")}(body),showLoadMoreUsersButton(body),showLoadMoreMessagesButton(body)},startLoading=function(header,body){!function(header){getSearchIconContainer(header).addClass("hidden")}(header),hideEmptyMessage(body),hideSearchResults(body),function(header){getLoadingIconContainer(header).removeClass("hidden")}(header),function(body){getLoadingPlaceholder(body).removeClass("hidden")}(body),function(header){getSearchInput(header).prop("disabled",!0)}(header)},stopLoading=function(header,body){showSearchIcon(header),hideEmptyMessage(body),function(body){getSearchResultsContainer(body).removeClass("hidden")}(body),hideLoadingIcon(header),hideLoadingPlaceholder(body),function(header){getSearchInput(header).prop("disabled",!1)}(header)},hideUsersLoadingIcon=function(root){var button=root.find(SELECTORS_LOAD_MORE_USERS);button.prop("disabled",!1),button.find(SELECTORS_BUTTON_TEXT).removeClass("hidden"),button.find(SELECTORS_LOADING_ICON_CONTAINER).addClass("hidden")},showLoadMoreUsersButton=function(root){root.find(SELECTORS_LOAD_MORE_USERS).removeClass("hidden")},hideMessagesLoadingIcon=function(root){var button=root.find(SELECTORS_LOAD_MORE_MESSAGES);button.prop("disabled",!1),button.find(SELECTORS_BUTTON_TEXT).removeClass("hidden"),button.find(SELECTORS_LOADING_ICON_CONTAINER).addClass("hidden")},showLoadMoreMessagesButton=function(root){root.find(SELECTORS_LOAD_MORE_MESSAGES).removeClass("hidden")},findContact=function(root,userId){return root.find('[data-contact-user-id="'+userId+'"]')},highlightSearch=function(content,searchText){if(!content)return"";var regex=new RegExp("("+searchText+")","gi");return content.replace(regex,'&lt;span class="matchtext"&gt;$1&lt;/span&gt;')},renderMessages=function(root,messages){var container=root.find(SELECTORS_MESSAGES_CONTAINER),frompanel=root.attr("data-in-panel"),list=container.find(SELECTORS_LIST);return Templates.render(TEMPLATES_MESSAGES_LIST,{messages:messages,frompanel:frompanel}).then((function(html){return list.append(html),html}))},loadMoreUsers=function(root,loggedInUserId,text,limit,offset){var loadedAll=!1;return function(root){var button=root.find(SELECTORS_LOAD_MORE_USERS);button.prop("disabled",!0),button.find(SELECTORS_BUTTON_TEXT).addClass("hidden"),button.find(SELECTORS_LOADING_ICON_CONTAINER).removeClass("hidden")}(root),Repository.searchUsers(loggedInUserId,text,limit+1,offset).then((function(results){var contacts=results.contacts,noncontacts=results.noncontacts;return contacts.length&lt;=limit&amp;&amp;noncontacts.length&lt;=limit?(loadedAll=!0,{contacts:contacts,noncontacts:noncontacts}):{contacts:contacts.slice(0,limit),noncontacts:noncontacts.slice(0,limit)}})).then((function(results){var contactsCount=results.contacts.length,nonContactsCount=results.noncontacts.length;return contactsCount&amp;&amp;results.contacts.forEach((function(contact){contact.highlight=highlightSearch(contact.fullname,text)})),nonContactsCount&amp;&amp;results.noncontacts.forEach((function(contact){contact.highlight=highlightSearch(contact.fullname,text)})),$.when(!contactsCount||function(root,contacts){var container=getContactsContainer(root),frompanel=root.attr("data-in-panel"),list=container.find(SELECTORS_LIST);return Templates.render(TEMPLATES_CONTACTS_LIST,{contacts:contacts,frompanel:frompanel}).then((function(html){return list.append(html),html}))}(root,results.contacts),!nonContactsCount||function(root,nonContacts){var container=getNonContactsContainer(root),frompanel=root.attr("data-in-panel"),list=container.find(SELECTORS_LIST);return Templates.render(TEMPLATES_NON_CONTACTS_LIST,{noncontacts:nonContacts,frompanel:frompanel}).then((function(html){return list.append(html),html}))}(root,results.noncontacts)).then((function(){return{contactsCount:contactsCount,nonContactsCount:nonContactsCount}}))})).then((function(counts){return hideUsersLoadingIcon(root),loadedAll&amp;&amp;function(root){root.find(SELECTORS_LOAD_MORE_USERS).addClass("hidden")}(root),counts})).catch((function(error){throw hideUsersLoadingIcon(root),error}))},loadMoreMessages=function(root,loggedInUserId,text,limit,offset){var loadedAll=!1;return function(root){var button=root.find(SELECTORS_LOAD_MORE_MESSAGES);button.prop("disabled",!0),button.find(SELECTORS_BUTTON_TEXT).addClass("hidden"),button.find(SELECTORS_LOADING_ICON_CONTAINER).removeClass("hidden")}(root),Repository.searchMessages(loggedInUserId,text,limit+1,offset).then((function(results){var messages=results.contacts;return messages.length&lt;=limit?(loadedAll=!0,messages):messages.slice(0,limit)})).then((function(messages){return messages.length?(messages.forEach((function(message){message.lastmessage=highlightSearch(message.lastmessage,text)})),renderMessages(root,messages).then((function(){return messages.length}))):messages.length})).then((function(count){return hideMessagesLoadingIcon(root),loadedAll&amp;&amp;function(root){root.find(SELECTORS_LOAD_MORE_MESSAGES).addClass("hidden")}(root),count})).catch((function(error){throw hideMessagesLoadingIcon(root),error}))},search=function(header,body,searchText,usersLimit,usersOffset,messagesLimit,messagesOffset){var loggedInUserId=getLoggedInUserId(body);return startLoading(header,body),clearAllSearchResults(body),$.when(loadMoreUsers(body,loggedInUserId,searchText,usersLimit,usersOffset),loadMoreMessages(body,loggedInUserId,searchText,messagesLimit,messagesOffset)).then((function(userCounts,messagesCount){var contactsCount=userCounts.contactsCount,nonContactsCount=userCounts.nonContactsCount;stopLoading(header,body),contactsCount||nonContactsCount||messagesCount?(contactsCount||nonContactsCount?(contactsCount||function(body){getSearchResultsContainer(body).find(SELECTORS_CONTACTS_CONTAINER).addClass("hidden")}(body),nonContactsCount||function(body){getSearchResultsContainer(body).find(SELECTORS_NON_CONTACTS_CONTAINER).addClass("hidden")}(body)):function(body){getSearchResultsContainer(body).find(SELECTORS_ALL_CONTACTS_CONTAINER).addClass("hidden")}(body),messagesCount||function(body){getSearchResultsContainer(body).find(SELECTORS_MESSAGES_CONTAINER).addClass("hidden")}(body)):function(body){var container=getSearchResultsContainer(body);container.find(SELECTORS_ALL_CONTACTS_CONTAINER).addClass("hidden"),container.find(SELECTORS_MESSAGES_CONTAINER).addClass("hidden"),container.find(SELECTORS_NO_RESULTS_CONTAINTER).removeClass("hidden")}(body)}))},registerEventListeners=function(header,body){var loggedInUserId=getLoggedInUserId(body),searchInput=getSearchInput(header),searchText="",messagesOffset=0,usersOffset=0,searchEventHandler=function(e,data){""!==(searchText=searchInput.val().trim())&amp;&amp;search(header,body,searchText,3,usersOffset=0,50,messagesOffset=0).then((function(){searchInput.focus(),usersOffset+=3,messagesOffset+=50})).catch(Notification.exception),data.originalEvent.preventDefault()};CustomEvents.define(searchInput,[CustomEvents.events.enter]),CustomEvents.define(header,[CustomEvents.events.activate]),CustomEvents.define(body,[CustomEvents.events.activate]),searchInput.on(CustomEvents.events.enter,searchEventHandler),header.on(CustomEvents.events.activate,SELECTORS_SEARCH_ACTION,searchEventHandler),body.on(CustomEvents.events.activate,SELECTORS_LOAD_MORE_MESSAGES,(function(e,data){""!==searchText&amp;&amp;loadMoreMessages(body,loggedInUserId,searchText,50,messagesOffset).then((function(){messagesOffset+=50})).catch(Notification.exception),data.originalEvent.preventDefault()})),body.on(CustomEvents.events.activate,SELECTORS_LOAD_MORE_USERS,(function(e,data){""!==searchText&amp;&amp;loadMoreUsers(body,loggedInUserId,searchText,50,usersOffset).then((function(){usersOffset+=50})).catch(Notification.exception),data.originalEvent.preventDefault()})),header.on(CustomEvents.events.activate,SELECTORS_CANCEL_SEARCH_BUTTON,(function(){!function(header){getSearchInput(header).val("")}(header),function(body){getEmptyMessageContainer(body).removeClass("hidden")}(body),showSearchIcon(header),hideSearchResults(body),hideLoadingIcon(header),hideLoadingPlaceholder(body),usersOffset=0,messagesOffset=0})),PubSub.subscribe(Events.CONTACT_ADDED,(function(userId){!function(root,contact){var nonContactsContainer=getNonContactsContainer(root),nonContact=findContact(nonContactsContainer,contact.userid);if(nonContact.length){nonContact.remove();var contactsContainer=getContactsContainer(root);contactsContainer.removeClass("hidden"),contactsContainer.find(SELECTORS_LIST).append(nonContact)}nonContactsContainer.find(SELECTORS_LIST).children().length||nonContactsContainer.addClass("hidden")}(body,userId)})),PubSub.subscribe(Events.CONTACT_REMOVED,(function(userId){!function(root,userId){var contactsContainer=getContactsContainer(root),contact=findContact(contactsContainer,userId);if(contact.length){contact.remove();var nonContactsContainer=getNonContactsContainer(root);nonContactsContainer.removeClass("hidden"),nonContactsContainer.find(SELECTORS_LIST).append(contact)}contactsContainer.find(SELECTORS_LIST).children().length||contactsContainer.addClass("hidden")}(body,userId)})),PubSub.subscribe(Events.CONTACT_BLOCKED,(function(userId){!function(root,userId){var contact=findContact(root,userId);contact.length&amp;&amp;contact.find(SELECTORS_BLOCK_ICON_CONTAINER).removeClass("hidden")}(body,userId)})),PubSub.subscribe(Events.CONTACT_UNBLOCKED,(function(userId){!function(root,userId){var contact=findContact(root,userId);contact.length&amp;&amp;contact.find(SELECTORS_BLOCK_ICON_CONTAINER).addClass("hidden")}(body,userId)}))};return{show:function(namespace,header,body){return body.attr("data-init")||(registerEventListeners(header,body),body.attr("data-init",!0)),getSearchInput(header).focus(),$.Deferred().resolve().promise()},description:function(namespace,header){if("object"!=typeof header)return Str.get_string("messagedrawerviewsearch","core_message");var searchText=getSearchInput(header).val().trim();return Str.get_string("messagedrawerviewsearch","core_message",searchText)}}}));
/**
 * Manages the processor form on the message preferences page.
 *
 * @module     core_message/preferences_processor_form
 * @copyright  2016 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core_message/preferences_processor_form",["jquery","core/ajax","core/notification"],(function($,Ajax,Notification){var ProcessorForm=function(element){this.root=$(element),this.userId=this.root.attr("data-user-id"),this.name=this.root.attr("data-processor-name"),this.root.find("form").on("submit",function(e){e.preventDefault(),this.save().done((function(){$(element).trigger("mpp:formsubmitted")}))}.bind(this))};return ProcessorForm.prototype.startLoading=function(){this.root.addClass("loading")},ProcessorForm.prototype.stopLoading=function(){this.root.removeClass("loading")},ProcessorForm.prototype.isLoading=function(){return this.root.hasClass("loading")},ProcessorForm.prototype.save=function(){if(this.isLoading())return $.Deferred();this.startLoading();var data=this.root.find("form").serializeArray(),request={methodname:"core_message_message_processor_config_form",args:{userid:this.userId,name:this.name,formvalues:data}};return Ajax.call([request])[0].fail(Notification.exception).always(function(){this.stopLoading()}.bind(this))},ProcessorForm}));
/**
 * This module will take 2 view states from the message_drawer_view_conversation
 * module and generate a patch that can be given to the
 * message_drawer_view_conversation_renderer module to update the UI.
 *
 * This module should never modify either state. It's purely a read only
 * module.
 *
 * @module     core_message/message_drawer_view_conversation_patcher
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core_message/message_drawer_view_conversation_patcher",["jquery","core/user_date","core_message/message_drawer_view_conversation_constants"],(function($,UserDate,Constants){var sortMessagesByDay=function(messages,midnight){var messagesByDay=messages.reduce((function(carry,message){var timeCreated=message.timeCreated?message.timeCreated:midnight,dayTimestamp=UserDate.getUserMidnightForTimestamp(timeCreated,midnight);return carry.hasOwnProperty(dayTimestamp)?carry[dayTimestamp].push(message):carry[dayTimestamp]=[message],carry}),{});return Object.keys(messagesByDay).map((function(dayTimestamp){return{timestamp:dayTimestamp,messages:messagesByDay[dayTimestamp]}}))},diffArrays=function(a,b,matchFunction){b=b.slice();var missingFromB=[],matches=[];return a.forEach((function(current){for(var found=!1,index=0;index&lt;b.length;index++){var next=b[index];if(matchFunction(current,next)){found=!0,matches.push({a:current,b:next});break}}found?b.splice(index,1):missingFromB.push(current)})),{missingFromA:b,missingFromB:missingFromB,matches:matches}},findPositionInArray=function(array,breakFunction){for(var i=0;i&lt;array.length;i++){var candidate=array[i];if(breakFunction(candidate))return candidate}return null},isArrayEqual=function(a,b){a=a.slice(),b=b.slice(),a.sort(),b.sort();var aLength=a.length,bLength=b.length;return aLength&lt;1&amp;&amp;bLength&lt;1||aLength==bLength&amp;&amp;a.every((function(item,index){return item==b[index]}))},isObjectEqual=function(a,b){var aKeys=Object.keys(a),bKeys=Object.keys(b);return aKeys.length==bKeys.length&amp;&amp;aKeys.every((function(key){var aVal=a[key],bVal=b[key],aType=typeof aVal,bType=typeof bVal;if(bType=null===aVal?"null":bType,(aType="object"===(aType=null===aVal?"null":aType)&amp;&amp;Array.isArray(aType)?"array":aType)!==(bType="object"===bType&amp;&amp;Array.isArray(bType)?"array":bType))return!1;switch(aType){case"object":return isObjectEqual(aVal,bVal);case"array":return isArrayEqual(aVal,bVal);default:return a[key]==b[key]}}))},isMessageEqual=function(a,b){return isObjectEqual({id:a.id,state:a.sendState,text:a.text,timeCreated:a.timeCreated},{id:b.id,state:b.sendState,text:b.text,timeCreated:b.timeCreated})},buildDaysPatch=function(current,remove,add){return{remove:remove,add:add.map((function(day){return{before:findPositionInArray(current,(function(candidate){return day.timestamp&lt;candidate.timestamp})),value:day}}))}},buildConversationPatch=function(state,newState){var matchingDays,remove,add,update,diff=diffArrays(state.messages,newState.messages,isMessageEqual);if(diff.missingFromA.length||diff.missingFromB.length){var current=sortMessagesByDay(state.messages,state.midnight),next=sortMessagesByDay(newState.messages,newState.midnight),daysDiff=diffArrays(current,next,(function(dayCurrent,dayNext){return dayCurrent.timestamp==dayNext.timestamp}));return{days:buildDaysPatch(current,daysDiff.missingFromB,daysDiff.missingFromA),messages:(matchingDays=daysDiff.matches,remove=[],add=[],update=[],matchingDays.forEach((function(days){var dayCurrent=days.a,dayNext=days.b,messagesDiff=diffArrays(dayCurrent.messages,dayNext.messages,isMessageEqual),patch=diffArrays(messagesDiff.missingFromB,messagesDiff.missingFromA,(function(a,b){return a.id==b.id||a.sendState!=b.sendState&amp;&amp;a.timeAdded==b.timeAdded}));remove=remove.concat(patch.missingFromB),patch.missingFromA.forEach((function(message){var before=null;message.timeCreated&amp;&amp;(before=findPositionInArray(dayCurrent.messages,(function(candidate){return message.timeCreated==candidate.timeCreated?message.id&lt;candidate.id:message.timeCreated&lt;candidate.timeCreated}))),add.push({before:before,value:message,day:dayCurrent})})),update=update.concat(patch.matches.map((function(message){return{before:message.a,after:message.b}})))})),{add:add,remove:remove,update:update})}}return null},buildHeaderPatchTypePrivate=function(state,newState){var requireAddContact=buildRequireAddContact(state,newState),confirmContactRequest=buildConfirmContactRequest(state,newState),oldOtherUser=getOtherUserFromState(state),newOtherUser=getOtherUserFromState(newState),requiresAddContact=requireAddContact&amp;&amp;requireAddContact.show&amp;&amp;!requireAddContact.hasMessages,requiredAddContact=requireAddContact&amp;&amp;!requireAddContact.show,shouldRenderHeader=!oldOtherUser&amp;&amp;newOtherUser;return(shouldRenderHeader=(shouldRenderHeader=shouldRenderHeader||requiresAddContact||requiredAddContact)||null!==confirmContactRequest)?{type:Constants.CONVERSATION_TYPES.PRIVATE,showControls:!requiresAddContact&amp;&amp;!confirmContactRequest,context:{id:newState.id,name:newState.name,subname:newState.subname,totalmembercount:newState.totalMemberCount,imageurl:newState.imageUrl,isfavourite:newState.isFavourite,ismuted:newState.isMuted,showfavourite:null!==newState.id,userid:newOtherUser.id,showonlinestatus:newOtherUser.showonlinestatus,isonline:newOtherUser.isonline,isblocked:newOtherUser.isblocked,iscontact:newOtherUser.iscontact}}:null},buildHeaderPatchTypeSelf=function(state,newState){return null===state.name&amp;&amp;null!==newState.name?{type:Constants.CONVERSATION_TYPES.SELF,showControls:!1,context:{id:newState.id,name:newState.name,subname:newState.subname,imageurl:newState.imageUrl,isfavourite:newState.isFavourite,showfavourite:null!==newState.id,showonlinestatus:!0}}:null},buildHeaderPatchTypePublic=function(state,newState){return state.totalMemberCount!=newState.totalMemberCount?{type:Constants.CONVERSATION_TYPES.PUBLIC,showControls:!0,context:{id:newState.id,name:newState.name,subname:newState.subname,totalmembercount:newState.totalMemberCount,imageurl:newState.imageUrl,isfavourite:newState.isFavourite,ismuted:newState.isMuted,showfavourite:null!==newState.id}}:null},buildScrollToMessagePatch=function(state,newState){var oldMessages=state.messages,newMessages=newState.messages;if(newMessages.length&lt;1)return null;if(oldMessages.length&lt;1)return newMessages[newMessages.length-1].id;var previousNewest=oldMessages[state.messages.length-1],currentNewest=newMessages[newMessages.length-1],previousOldest=oldMessages[0],currentOldest=newMessages[0];return previousNewest.id!=currentNewest.id?currentNewest.id:previousOldest.id!=currentOldest.id?previousOldest.id:null},buildLoadingMembersPatch=function(state,newState){return!(state.loadingMembers||!newState.loadingMembers)||!(state.loadingMembers&amp;&amp;!newState.loadingMembers)&amp;&amp;null},buildLoadingFirstMessages=function(state,newState){return state.hasTriedToLoadMessages===newState.hasTriedToLoadMessages?null:!(newState.hasTriedToLoadMessages||!newState.loadingMessages)||!(newState.hasTriedToLoadMessages&amp;&amp;!newState.loadingMessages)&amp;&amp;null},buildLoadingMessages=function(state,newState){return!(state.loadingMessages||!newState.loadingMessages)||!(state.loadingMessages&amp;&amp;!newState.loadingMessages)&amp;&amp;null},buildShowEmojiPicker=function(state,newState){return!(state.showEmojiPicker||!newState.showEmojiPicker)||!(state.showEmojiPicker&amp;&amp;!newState.showEmojiPicker)&amp;&amp;null},buildShowEmojiAutoComplete=function(state,newState){return!(state.showEmojiAutoComplete||!newState.showEmojiAutoComplete)||!(state.showEmojiAutoComplete&amp;&amp;!newState.showEmojiAutoComplete)&amp;&amp;null},buildConfirmBlockUser=function(state,newState){if(newState.pendingBlockUserIds.length){var userId=newState.pendingBlockUserIds[0];return newState.members[userId]}return!state.pendingBlockUserIds.length&amp;&amp;null},buildConfirmUnblockUser=function(state,newState){if(newState.pendingUnblockUserIds.length){var userId=newState.pendingUnblockUserIds[0];return newState.members[userId]}return!state.pendingUnblockUserIds.length&amp;&amp;null},buildConfirmAddContact=function(state,newState){if(newState.pendingAddContactIds.length){var userId=newState.pendingAddContactIds[0];return newState.members[userId]}return!state.pendingAddContactIds.length&amp;&amp;null},buildConfirmRemoveContact=function(state,newState){if(newState.pendingRemoveContactIds.length){var userId=newState.pendingRemoveContactIds[0];return newState.members[userId]}return!state.pendingRemoveContactIds.length&amp;&amp;null},buildConfirmDeleteSelectedMessages=function(state,newState){var oldPendingCount=state.pendingDeleteMessageIds.length,newPendingCount=newState.pendingDeleteMessageIds.length;return newPendingCount&amp;&amp;!oldPendingCount?{show:!0,type:newState.type,canDeleteMessagesForAllUsers:newState.canDeleteMessagesForAllUsers}:oldPendingCount&amp;&amp;!newPendingCount?{show:!1}:null},buildConfirmDeleteConversation=function(state,newState){return!state.pendingDeleteConversation&amp;&amp;newState.pendingDeleteConversation?newState.type:!(state.pendingDeleteConversation&amp;&amp;!newState.pendingDeleteConversation)&amp;&amp;null},buildConfirmContactRequest=function(state,newState){var loggedInUserId=state.loggedInUserId,oldOtherUser=getOtherUserFromState(state),newOtherUser=getOtherUserFromState(newState),oldReceivedRequests=oldOtherUser?oldOtherUser.contactrequests.filter((function(request){return request.requesteduserid==loggedInUserId&amp;&amp;request.userid==oldOtherUser.id})):[],newReceivedRequests=newOtherUser?newOtherUser.contactrequests.filter((function(request){return request.requesteduserid==loggedInUserId&amp;&amp;request.userid==newOtherUser.id})):[],oldRequest=oldReceivedRequests.length?oldReceivedRequests[0]:null,newRequest=newReceivedRequests.length?newReceivedRequests[0]:null;return!oldRequest&amp;&amp;newRequest?newOtherUser:!(oldRequest&amp;&amp;!newRequest)&amp;&amp;null},buildIsBlocked=function(state,newState){var oldOtherUser=getOtherUserFromState(state),newOtherUser=getOtherUserFromState(newState);return oldOtherUser||newOtherUser?!oldOtherUser&amp;&amp;newOtherUser?!!newOtherUser.isblocked||null:!newOtherUser&amp;&amp;oldOtherUser?!oldOtherUser.isblocked&amp;&amp;null:!(oldOtherUser.isblocked&amp;&amp;!newOtherUser.isblocked)&amp;&amp;(!(oldOtherUser.isblocked||!newOtherUser.isblocked)||null):null},buildIsFavourite=function(state,newState){var oldIsFavourite=state.isFavourite,newIsFavourite=newState.isFavourite;return null===state.id&amp;&amp;null===newState.id?null:null===state.id&amp;&amp;null!==newState.id?"show-add":null!==state.id&amp;&amp;null===newState.id?"hide":oldIsFavourite==newIsFavourite?null:!oldIsFavourite&amp;&amp;newIsFavourite?"show-remove":oldIsFavourite&amp;&amp;!newIsFavourite?"show-add":null},buildIsMuted=function(state,newState){var oldIsMuted=state.isMuted,newIsMuted=newState.isMuted;return null===state.id&amp;&amp;null===newState.id?null:null===state.id&amp;&amp;null!==newState.id?"show-mute":null!==state.id&amp;&amp;null===newState.id?"hide":oldIsMuted==newIsMuted?null:!oldIsMuted&amp;&amp;newIsMuted?"show-unmute":oldIsMuted&amp;&amp;!newIsMuted?"show-mute":null},buildIsContact=function(state,newState){var loggedInUserId=state.loggedInUserId,oldOtherUser=getOtherUserFromState(state),newOtherUser=getOtherUserFromState(newState),oldContactRequests=oldOtherUser?oldOtherUser.contactrequests.filter((function(request){return request.userid==loggedInUserId&amp;&amp;request.requesteduserid==oldOtherUser.id||request.userid==oldOtherUser.id&amp;&amp;request.requesteduserid==loggedInUserId})):[],newContactRequests=newOtherUser?newOtherUser.contactrequests.filter((function(request){return request.userid==loggedInUserId&amp;&amp;request.requesteduserid==newOtherUser.id||request.userid==newOtherUser.id&amp;&amp;request.requesteduserid==loggedInUserId})):[],oldHasContactRequests=oldContactRequests.length&gt;0,newHasContactRequests=newContactRequests.length&gt;0;return oldOtherUser||newOtherUser?oldHasContactRequests&amp;&amp;newHasContactRequests?null:oldHasContactRequests||!newHasContactRequests||newOtherUser.iscontact?!oldOtherUser&amp;&amp;newOtherUser?newOtherUser.iscontact?"contact":null:!newOtherUser&amp;&amp;oldOtherUser?oldOtherUser.iscontact?"non-contact":null:oldOtherUser.iscontact&amp;&amp;!newOtherUser.iscontact?newHasContactRequests?"pending-contact":"non-contact":!oldOtherUser.iscontact&amp;&amp;newOtherUser.iscontact?"contact":null:"pending-contact":null},buildLoadingConfirmationAction=function(state,newState){return!(state.loadingConfirmAction||!newState.loadingConfirmAction)||!(state.loadingConfirmAction&amp;&amp;!newState.loadingConfirmAction)&amp;&amp;null},buildInEditMode=function(state,newState){var oldHasSelectedMessages=state.selectedMessageIds.length&gt;0,newHasSelectedMessages=newState.selectedMessageIds.length&gt;0,numberOfMessagesHasChanged=state.messages.length!=newState.messages.length;return!(oldHasSelectedMessages||!newHasSelectedMessages)||!(oldHasSelectedMessages&amp;&amp;!newHasSelectedMessages)&amp;&amp;(!(!oldHasSelectedMessages||!numberOfMessagesHasChanged)||null)},buildSelectedMessages=function(state,newState){var oldSelectedMessages=state.selectedMessageIds,newSelectedMessages=newState.selectedMessageIds;if(isArrayEqual(oldSelectedMessages,newSelectedMessages))return null;var diff=diffArrays(oldSelectedMessages,newSelectedMessages,(function(a,b){return a==b}));return{count:newSelectedMessages.length,add:diff.missingFromA,remove:diff.missingFromB}},getOtherUserFromState=function(state){return Object.keys(state.members).reduce((function(carry,userId){return userId==state.loggedInUserId||carry||(carry=state.members[userId]),carry}),null)},requiresContactRequest=function(loggedInUserId,user){if(user.canmessage)return!1;var hasSentContactRequest=user.contactrequests.filter((function(request){return request.userid==loggedInUserId||request.requesteduserid})).length&gt;0;return user.requirescontact&amp;&amp;!user.iscontact&amp;&amp;!hasSentContactRequest},buildRequireAddContact=function(state,newState){var oldOtherUser=getOtherUserFromState(state),newOtherUser=getOtherUserFromState(newState),hadMessages=state.messages.length&gt;0,hasMessages=newState.messages.length&gt;0,loggedInUserId=newState.loggedInUserId,prevRequiresContactRequest=oldOtherUser&amp;&amp;requiresContactRequest(loggedInUserId,oldOtherUser),nextRequiresContactRequest=newOtherUser&amp;&amp;requiresContactRequest(loggedInUserId,newOtherUser),finishedAddContact=!1===buildConfirmAddContact(state,newState);if(!state.hasTriedToLoadMessages&amp;&amp;!newState.hasTriedToLoadMessages)return null;if(!oldOtherUser&amp;&amp;!newOtherUser)return null;if(!oldOtherUser&amp;&amp;nextRequiresContactRequest)return{show:!0,hasMessages:hasMessages,user:newOtherUser};if(finishedAddContact&amp;&amp;nextRequiresContactRequest)return{show:!0,hasMessages:hasMessages,user:newOtherUser};if(state.hasTriedToLoadMessages&amp;&amp;newState.hasTriedToLoadMessages){if(!prevRequiresContactRequest&amp;&amp;nextRequiresContactRequest)return{show:!0,hasMessages:hasMessages,user:newOtherUser};if(prevRequiresContactRequest&amp;&amp;!nextRequiresContactRequest)return{show:!1,hasMessages:hasMessages}}return!state.hasTriedToLoadMessages&amp;&amp;newState.hasTriedToLoadMessages&amp;&amp;nextRequiresContactRequest?{show:!0,hasMessages:hasMessages,user:newOtherUser}:state.hasTriedToLoadMessages&amp;&amp;!newState.hasTriedToLoadMessages&amp;&amp;prevRequiresContactRequest?{show:!1,hasMessages:hadMessages}:null},buildFooterPatchTypePrivate=function(state,newState){var loadingFirstMessages=buildLoadingFirstMessages(state,newState),inEditMode=buildInEditMode(state,newState),requireAddContact=buildRequireAddContact(state,newState),requireUnblock=function(state,newState){var oldOtherUser=getOtherUserFromState(state),newOtherUser=getOtherUserFromState(newState);return oldOtherUser||newOtherUser?oldOtherUser&amp;&amp;!newOtherUser?!oldOtherUser.isblocked&amp;&amp;null:!oldOtherUser&amp;&amp;newOtherUser?!!newOtherUser.isblocked||null:!(oldOtherUser.isblocked||!newOtherUser.isblocked)||!(oldOtherUser.isblocked&amp;&amp;!newOtherUser.isblocked)&amp;&amp;null:null}(state,newState),unableToMessage=function(state,newState){var oldOtherUser=getOtherUserFromState(state),newOtherUser=getOtherUserFromState(newState);return newState.type==Constants.CONVERSATION_TYPES.SELF?null:oldOtherUser||newOtherUser?oldOtherUser&amp;&amp;!newOtherUser?!oldOtherUser.canmessage||null:!oldOtherUser&amp;&amp;newOtherUser?!newOtherUser.canmessage||null:!(!oldOtherUser.canmessage&amp;&amp;newOtherUser.canmessage)&amp;&amp;(!(!oldOtherUser.canmessage||newOtherUser.canmessage)||null):null}(state,newState),showRequireAddContact=null!==requireAddContact?requireAddContact.show&amp;&amp;requireAddContact.hasMessages:null,otherUser=getOtherUserFromState(newState),generateReturnValue=function(checkValue,successReturn){if(checkValue)return successReturn;if(null!==checkValue&amp;&amp;!checkValue){if(!otherUser)return{type:"content"};if(otherUser.isblocked)return{type:"unblock"};if(newState.messages.length&amp;&amp;requiresContactRequest(newState.loggedInUserId,otherUser))return{type:"add-contact",user:otherUser};if(!otherUser.canmessage&amp;&amp;otherUser.requirescontact&amp;&amp;!otherUser.iscontact)return{type:"unable-to-message"}}return null};if(null===loadingFirstMessages&amp;&amp;null===inEditMode&amp;&amp;null===requireAddContact&amp;&amp;null===requireUnblock)return null;for(var checks=[[loadingFirstMessages,{type:"placeholder"}],[inEditMode,{type:"edit-mode"}],[unableToMessage,{type:"unable-to-message"}],[requireUnblock,{type:"unblock"}],[showRequireAddContact,{type:"add-contact",user:otherUser}]],i=0;i&lt;checks.length;i++){var result=generateReturnValue(checks[i][0],checks[i][1]);if(null!==result)return result}return{type:"content"}},buildFooterPatchTypePublic=function(state,newState){var loadingFirstMessages=buildLoadingFirstMessages(state,newState),inEditMode=buildInEditMode(state,newState);return null===loadingFirstMessages&amp;&amp;null===inEditMode?null:loadingFirstMessages?{type:"placeholder"}:inEditMode?{type:"edit-mode"}:{type:"content"}},buildReset=function(state,newState){var oldType=state.type,newType=newState.type,oldConversationId=state.id,newConversationId=newState.id,oldMemberIds=Object.keys(state.members),newMemberIds=Object.keys(newState.members);oldMemberIds.sort(),newMemberIds.sort();var membersUnchanged=oldMemberIds.every((function(id,index){return id==newMemberIds[index]}));return oldType!=newType||(!(!oldConversationId||newConversationId)||(!(!oldConversationId||!newConversationId||oldConversationId==newConversationId)||(!(oldConversationId||newConversationId||membersUnchanged)||null)))},buildSelfConversationMessage=function(state,newState){return state.type!=newState.type?newState.type==Constants.CONVERSATION_TYPES.SELF:null},buildContactRequestSent=function(state,newState){var loggedInUserId=newState.loggedInUserId,oldOtherUser=getOtherUserFromState(state),newOtherUser=getOtherUserFromState(newState),oldSentRequests=oldOtherUser?oldOtherUser.contactrequests.filter((function(request){return request.userid==loggedInUserId})):[],newSentRequests=newOtherUser?newOtherUser.contactrequests.filter((function(request){return request.userid==loggedInUserId})):[],oldRequest=oldSentRequests.length&gt;0,newRequest=newSentRequests.length&gt;0;return oldRequest||!newRequest||newOtherUser.iscontact?!(oldOtherUser&amp;&amp;!oldOtherUser.iscontact&amp;&amp;newRequest&amp;&amp;newOtherUser.iscontact)&amp;&amp;(!(oldRequest&amp;&amp;!newRequest)&amp;&amp;null):newOtherUser.fullname};return{buildPatch:function(state,newState){var config={all:{reset:buildReset,conversation:buildConversationPatch,scrollToMessage:buildScrollToMessagePatch,loadingMembers:buildLoadingMembersPatch,loadingFirstMessages:buildLoadingFirstMessages,loadingMessages:buildLoadingMessages,confirmDeleteSelectedMessages:buildConfirmDeleteSelectedMessages,inEditMode:buildInEditMode,selectedMessages:buildSelectedMessages,isFavourite:buildIsFavourite,isMuted:buildIsMuted,showEmojiPicker:buildShowEmojiPicker,showEmojiAutoComplete:buildShowEmojiAutoComplete}};config[Constants.CONVERSATION_TYPES.PRIVATE]={header:buildHeaderPatchTypePrivate,footer:buildFooterPatchTypePrivate,confirmBlockUser:buildConfirmBlockUser,confirmUnblockUser:buildConfirmUnblockUser,confirmAddContact:buildConfirmAddContact,confirmRemoveContact:buildConfirmRemoveContact,confirmContactRequest:buildConfirmContactRequest,confirmDeleteConversation:buildConfirmDeleteConversation,isBlocked:buildIsBlocked,isContact:buildIsContact,loadingConfirmAction:buildLoadingConfirmationAction,requireAddContact:buildRequireAddContact,contactRequestSent:buildContactRequestSent},config[Constants.CONVERSATION_TYPES.PUBLIC]={header:buildHeaderPatchTypePublic,footer:buildFooterPatchTypePublic},config[Constants.CONVERSATION_TYPES.SELF]={header:buildHeaderPatchTypeSelf,footer:buildFooterPatchTypePublic,confirmDeleteConversation:buildConfirmDeleteConversation,selfConversationMessage:buildSelfConversationMessage};var patchConfig=$.extend({},config.all);return newState.type&amp;&amp;newState.type in config&amp;&amp;(patchConfig=$.extend(patchConfig,config[newState.type])),Object.keys(patchConfig).reduce((function(patch,key){var value=(0,patchConfig[key])(state,newState);return null!==value&amp;&amp;(patch[key]=value),patch}),{})}}}));
/**
 * Controls the preferences for the list of notification types on the
 * message preference page
 *
 * @module     core_message/preferences_notifications_list_controller
 * @copyright  2016 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core_message/preferences_notifications_list_controller",["jquery","core/ajax","core/notification","core/custom_interaction_events","core_message/notification_preference","core_message/notification_processor_settings","core/modal_factory"],(function($,Ajax,Notification,CustomEvents,NotificationPreference,NotificationProcessorSettings,ModalFactory){var SELECTORS_DISABLE_NOTIFICATIONS='[data-region="disable-notification-container"] [data-disable-notifications]',SELECTORS_DISABLE_NOTIFICATIONS_CONTAINER='[data-region="disable-notification-container"]',SELECTORS_PREFERENCE=".preference-state",SELECTORS_PREFERENCE_ROW='[data-region="preference-row"]',SELECTORS_PREFERENCE_INPUT=".preference-state input",SELECTORS_PROCESSOR_SETTING="[data-processor-setting]",PreferencesController=function(element){this.root=$(element),this.userId=this.root.attr("data-user-id"),this.registerEventListeners()};return PreferencesController.prototype.isDisabled=function(){return this.root.hasClass("disabled")},PreferencesController.prototype.setDisabled=function(){this.root.addClass("disabled"),this.root.find(SELECTORS_PREFERENCE_INPUT).prop("disabled",!0)},PreferencesController.prototype.setEnabled=function(){this.root.removeClass("disabled"),this.root.find(SELECTORS_PREFERENCE_INPUT).prop("disabled",!1)},PreferencesController.prototype.toggleDisableAllStatus=function(){var checkbox=$(SELECTORS_DISABLE_NOTIFICATIONS),container=$(SELECTORS_DISABLE_NOTIFICATIONS_CONTAINER),ischecked=checkbox.prop("checked");if(container.hasClass("loading"))return $.Deferred().resolve();container.addClass("loading");var request={methodname:"core_user_update_user_preferences",args:{userid:this.userId,emailstop:ischecked?1:0}};return Ajax.call([request])[0].done(function(){ischecked?this.setDisabled():this.setEnabled()}.bind(this)).always((function(){container.removeClass("loading")})).fail(Notification.exception)},PreferencesController.prototype.registerEventListeners=function(){var disabledNotificationsElement=$(SELECTORS_DISABLE_NOTIFICATIONS);CustomEvents.define(this.root,[CustomEvents.events.activate]),this.root.on("change",function(e){if(!this.isDisabled()){var preferenceElement=$(e.target).closest(SELECTORS_PREFERENCE),preferenceRow=$(e.target).closest(SELECTORS_PREFERENCE_ROW),preference=new NotificationPreference(preferenceRow,this.userId);preferenceElement.addClass("loading"),preference.save().always((function(){preferenceElement.removeClass("loading")}))}}.bind(this));var eventFormPromise=ModalFactory.create({type:NotificationProcessorSettings.TYPE});this.root.on(CustomEvents.events.activate,SELECTORS_PROCESSOR_SETTING,(function(e,data){var element=$(e.target).closest(SELECTORS_PROCESSOR_SETTING);data.originalEvent.preventDefault(),eventFormPromise.then((function(modal){modal.setUserId($(element).attr("data-user-id")),modal.setName($(element).attr("data-name")),modal.setContextId($(element).attr("data-context-id")),modal.setElement(element),modal.show(),e.stopImmediatePropagation()})).fail(Notification.exception)})),CustomEvents.define(disabledNotificationsElement,[CustomEvents.events.activate]),disabledNotificationsElement.on(CustomEvents.events.activate,function(){this.toggleDisableAllStatus()}.bind(this))},PreferencesController}));
/**
 * Controls the contacts page of the message drawer.
 *
 * @module     core_message/message_drawer_view_contacts
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core_message/message_drawer_view_contacts",["jquery","core/pubsub","core/str","core_message/message_drawer_events","core_message/message_drawer_view_contacts_section_contacts","core_message/message_drawer_view_contacts_section_requests"],(function($,PubSub,Str,MessageDrawerEvents,ContactsSection,RequestsSection){var SELECTORS_ACTION_SHOW_CONTACTS_SECTION='[data-action="show-contacts-section"]',SELECTORS_ACTION_SHOW_REQUESTS_SECTION='[data-action="show-requests-section"]',SELECTORS_CONTACT_REQUEST_COUNT='[data-region="contact-request-count"]',SELECTORS_CONTACTS_SECTION_CONTAINER='[data-section="contacts"]',SELECTORS_REQUESTS_SECTION_CONTAINER='[data-section="requests"]',getContactsSectionContainer=function(body){return body.find(SELECTORS_CONTACTS_SECTION_CONTAINER)},getRequestsSectionContainer=function(body){return body.find(SELECTORS_REQUESTS_SECTION_CONTAINER)},getShowContactsAction=function(body){return body.find(SELECTORS_ACTION_SHOW_CONTACTS_SECTION)},getShowRequestsAction=function(body){return body.find(SELECTORS_ACTION_SHOW_REQUESTS_SECTION)},decrementContactRequestCount=function(body){return function(){var countContainer=body.find(SELECTORS_CONTACT_REQUEST_COUNT),count=parseInt(countContainer.text(),10);(count=isNaN(count)?0:count-1)&lt;=0?countContainer.addClass("hidden"):countContainer.text(count)}};return{show:function(namespace,header,body,footer,tab){(body=$(body)).attr("data-contacts-init")||(!function(body){var contactsSection=getContactsSectionContainer(body),requestsSection=getRequestsSectionContainer(body),showContactsAction=getShowContactsAction(body),showRequestsAction=getShowRequestsAction(body);showContactsAction.on("show.bs.tab",(function(){ContactsSection.show(contactsSection)})),showRequestsAction.on("show.bs.tab",(function(){RequestsSection.show(requestsSection)})),PubSub.subscribe(MessageDrawerEvents.CONTACT_REQUEST_ACCEPTED,decrementContactRequestCount(body)),PubSub.subscribe(MessageDrawerEvents.CONTACT_REQUEST_DECLINED,decrementContactRequestCount(body))}(body),body.attr("data-contacts-init",!0));var contactsSection=getContactsSectionContainer(body),requestsSection=getRequestsSectionContainer(body);if(tab){var showContactsAction=getShowContactsAction(body),showRequestsAction=getShowRequestsAction(body);"requests"==tab?(showContactsAction.removeClass("active"),contactsSection.removeClass("show active"),showRequestsAction.addClass("active"),requestsSection.addClass("show active")):(showRequestsAction.removeClass("active"),requestsSection.removeClass("show active"),showContactsAction.addClass("active"),contactsSection.addClass("show active"))}return contactsSection.hasClass("active")?ContactsSection.show(contactsSection):RequestsSection.show(requestsSection),$.Deferred().resolve().promise()},description:function(){return Str.get_string("messagedrawerviewcontacts","core_message")}}}));
/**
 * Controls the message drawer.
 *
 * @module     core_message/message_drawer
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core_message/message_drawer",["jquery","core/custom_interaction_events","core/pubsub","core_message/message_drawer_view_contact","core_message/message_drawer_view_contacts","core_message/message_drawer_view_conversation","core_message/message_drawer_view_group_info","core_message/message_drawer_view_overview","core_message/message_drawer_view_search","core_message/message_drawer_view_settings","core_message/message_drawer_router","core_message/message_drawer_routes","core_message/message_drawer_events","core_message/message_drawer_helper","core/pending","core/drawer"],(function($,CustomEvents,PubSub,ViewContact,ViewContacts,ViewConversation,ViewGroupInfo,ViewOverview,ViewSearch,ViewSettings,Router,Routes,Events,Helper,Pending,Drawer){var SELECTORS_DRAWER='[data-region="right-hand-drawer"]',SELECTORS_JUMPTO='.popover-region [data-region="jumpto"]',SELECTORS_PANEL_BODY_CONTAINER='[data-region="panel-body-container"]',SELECTORS_PANEL_HEADER_CONTAINER='[data-region="panel-header-container"]',SELECTORS_VIEW_CONTACT='[data-region="view-contact"]',SELECTORS_VIEW_CONTACTS='[data-region="view-contacts"]',SELECTORS_VIEW_CONVERSATION='[data-region="view-conversation"]',SELECTORS_VIEW_GROUP_INFO='[data-region="view-group-info"]',SELECTORS_VIEW_OVERVIEW='[data-region="view-overview"]',SELECTORS_VIEW_SEARCH='[data-region="view-search"]',SELECTORS_VIEW_SETTINGS='[data-region="view-settings"]',SELECTORS_ROUTES="[data-route]",SELECTORS_ROUTES_BACK="[data-route-back]",SELECTORS_HEADER_CONTAINER='[data-region="header-container"]',SELECTORS_BODY_CONTAINER='[data-region="body-container"]',SELECTORS_FOOTER_CONTAINER='[data-region="footer-container"]',SELECTORS_CLOSE_BUTTON='[data-action="closedrawer"]',routes=[[Routes.VIEW_CONTACT,SELECTORS_VIEW_CONTACT,ViewContact.show,ViewContact.description],[Routes.VIEW_CONTACTS,SELECTORS_VIEW_CONTACTS,ViewContacts.show,ViewContacts.description],[Routes.VIEW_CONVERSATION,SELECTORS_VIEW_CONVERSATION,ViewConversation.show,ViewConversation.description],[Routes.VIEW_GROUP_INFO,SELECTORS_VIEW_GROUP_INFO,ViewGroupInfo.show,ViewGroupInfo.description],[Routes.VIEW_OVERVIEW,SELECTORS_VIEW_OVERVIEW,ViewOverview.show,ViewOverview.description],[Routes.VIEW_SEARCH,SELECTORS_VIEW_SEARCH,ViewSearch.show,ViewSearch.description],[Routes.VIEW_SETTINGS,SELECTORS_VIEW_SETTINGS,ViewSettings.show,ViewSettings.description]],createRoutes=function(namespace,root){routes.forEach((function(route){Router.add(namespace,route[0],function(namespace,root,selector){var header=root.find(SELECTORS_HEADER_CONTAINER).find(selector);header.length||(header=root.find(SELECTORS_PANEL_HEADER_CONTAINER).find(selector));var body=root.find(SELECTORS_BODY_CONTAINER).find(selector);body.length||(body=root.find(SELECTORS_PANEL_BODY_CONTAINER).find(selector));var footer=root.find(SELECTORS_FOOTER_CONTAINER).find(selector);return[namespace,header.length?header:null,body.length?body:null,footer.length?footer:null]}(namespace,root,route[1]),route[2],route[3])}))},show=function(namespace,root){root.attr("data-shown")||(Router.go(namespace,Routes.VIEW_OVERVIEW),root.attr("data-shown",!0));var drawerRoot=Drawer.getDrawerRoot(root);drawerRoot.length&amp;&amp;Drawer.show(drawerRoot)},hide=function(root){var drawerRoot=Drawer.getDrawerRoot(root);drawerRoot.length&amp;&amp;Drawer.hide(drawerRoot)},setJumpFrom=function(buttonid){$(SELECTORS_DRAWER).attr("data-origin",buttonid)},registerEventListeners=function(namespace,root,alwaysVisible){CustomEvents.define(root,[CustomEvents.events.activate]);var paramRegex=/^data-route-param-?(\d*)$/;root.on(CustomEvents.events.activate,SELECTORS_ROUTES,(function(e,data){for(var element=$(e.target).closest(SELECTORS_ROUTES),route=element.attr("data-route"),attributes=[],i=0;i&lt;element[0].attributes.length;i++)attributes.push(element[0].attributes[i]);var paramAttributes=attributes.filter((function(attribute){var name=attribute.nodeName;return paramRegex.test(name)}));paramAttributes.sort((function(a,b){var aParts=paramRegex.exec(a.nodeName),bParts=paramRegex.exec(b.nodeName),aIndex=aParts.length&gt;1?aParts[1]:0,bIndex=bParts.length&gt;1?bParts[1]:0;return aIndex&lt;bIndex?-1:bIndex&lt;aIndex?1:0}));var params=paramAttributes.map((function(attribute){return attribute.nodeValue})),routeParams=[namespace,route].concat(params);Router.go.apply(null,routeParams),data.originalEvent.preventDefault()})),root.on(CustomEvents.events.activate,SELECTORS_ROUTES_BACK,(function(e,data){Router.back(namespace),data.originalEvent.preventDefault()})),root.on("hide.bs.collapse",".collapse",(function(e){var pendingPromise=new Pending;$(e.target).one("hidden.bs.collapse",(function(){pendingPromise.resolve()}))})),root.on("show.bs.collapse",".collapse",(function(e){var pendingPromise=new Pending;$(e.target).one("shown.bs.collapse",(function(){pendingPromise.resolve()}))})),$(SELECTORS_JUMPTO).focus((function(){var firstInput=root.find(SELECTORS_CLOSE_BUTTON);firstInput.length?firstInput.focus():$(SELECTORS_HEADER_CONTAINER).find(SELECTORS_ROUTES_BACK).focus()})),$(SELECTORS_DRAWER).focus((function(){var button=$(this).attr("data-origin");button&amp;&amp;$("#"+button).focus()})),alwaysVisible||(PubSub.subscribe(Events.SHOW,(function(){show(namespace,root)})),PubSub.subscribe(Events.HIDE,(function(){hide(root)})),PubSub.subscribe(Events.TOGGLE_VISIBILITY,(function(buttonid){!function(root){var drawerRoot=Drawer.getDrawerRoot(root);return!drawerRoot.length||Drawer.isVisible(drawerRoot)}(root)?(show(namespace,root),setJumpFrom(buttonid),$(SELECTORS_JUMPTO).attr("tabindex",0)):(hide(root),$(SELECTORS_JUMPTO).attr("tabindex",-1))}))),PubSub.subscribe(Events.SHOW_CONVERSATION,(function(args){setJumpFrom(args.buttonid),show(namespace,root),Router.go(namespace,Routes.VIEW_CONVERSATION,args.conversationid)})),root.find(SELECTORS_CLOSE_BUTTON).on(CustomEvents.events.activate,(function(e,data){data.originalEvent.preventDefault();var button=$(SELECTORS_DRAWER).attr("data-origin");button&amp;&amp;$("#"+button).focus(),PubSub.publish(Events.TOGGLE_VISIBILITY)})),PubSub.subscribe(Events.CREATE_CONVERSATION_WITH_USER,(function(args){setJumpFrom(args.buttonid),show(namespace,root),Router.go(namespace,Routes.VIEW_CONVERSATION,null,"create",args.userid)})),PubSub.subscribe(Events.SHOW_SETTINGS,(function(){show(namespace,root),Router.go(namespace,Routes.VIEW_SETTINGS)})),PubSub.subscribe(Events.PREFERENCES_UPDATED,(function(preferences){var filteredPreferences=preferences.filter((function(preference){return"message_entertosend"==preference.type})),enterToSendPreference=filteredPreferences.length?filteredPreferences[0]:null;enterToSendPreference&amp;&amp;root.find(SELECTORS_FOOTER_CONTAINER).find(SELECTORS_VIEW_CONVERSATION).attr("data-enter-to-send",enterToSendPreference.value)}))};return{init:function(root,uniqueId,alwaysVisible,route){if(root=$(root),createRoutes(uniqueId,root),registerEventListeners(uniqueId,root,alwaysVisible),alwaysVisible&amp;&amp;(show(uniqueId,root),route)){var routeParams=route.params||[];routeParams=[uniqueId,route.path].concat(routeParams),Router.go.apply(null,routeParams)}Helper.markDrawerReady()}}}));
/**
 * Controls a section of the overview page in the message drawer.
 *
 * @module     core_message/message_drawer_view_overview_section
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core_message/message_drawer_view_overview_section",["jquery","core/custom_interaction_events","core/notification","core/pubsub","core/str","core/pending","core/templates","core/user_date","core_message/message_repository","core_message/message_drawer_events","core_message/message_drawer_router","core_message/message_drawer_routes","core_message/message_drawer_lazy_load_list","core_message/message_drawer_view_conversation_constants"],(function($,CustomEvents,Notification,PubSub,Str,Pending,Templates,UserDate,MessageRepository,MessageDrawerEvents,MessageDrawerRouter,MessageDrawerRoutes,LazyLoadList,MessageDrawerViewConversationContants){var SELECTORS_TOGGLE='[data-region="toggle"]',SELECTORS_CONVERSATION="[data-conversation-id]",SELECTORS_BLOCKED_ICON_CONTAINER='[data-region="contact-icon-blocked"]',SELECTORS_MUTED_ICON_CONTAINER='[data-region="muted-icon-container"]',SELECTORS_UNREAD_COUNT='[data-region="unread-count"]',SELECTORS_SECTION_TOTAL_COUNT='[data-region="section-total-count"]',SELECTORS_SECTION_TOTAL_COUNT_CONTAINER='[data-region="section-total-count-container"]',SELECTORS_SECTION_UNREAD_COUNT='[data-region="section-unread-count"]',SELECTORS_PLACEHOLDER_CONTAINER='[data-region="placeholder-container"]',TEMPLATES_CONVERSATIONS_LIST="core_message/message_drawer_conversations_list",TEMPLATES_CONVERSATIONS_LIST_ITEMS_PLACEHOLDER="core_message/message_drawer_conversations_list_items_placeholder",loadedConversationsById={},deletedConversationsById={},loadedTotalCounts=!1,loadedUnreadCounts=!1,isVisible=function(root){return LazyLoadList.getRoot(root).hasClass("show")},setExpanded=function(root){root.addClass("expanded")},formatConversationFromEvent=function(conversation){var recursivelyLowercaseKeys=function(object){return Object.keys(object).reduce((function(carry,key){return $.isArray(object[key])?carry[key.toLowerCase()]=object[key].map(recursivelyLowercaseKeys):carry[key.toLowerCase()]=object[key],carry}),{})},formatted=recursivelyLowercaseKeys(conversation);return formatted.messages=formatted.messages.map((function(message){return message.useridfrom=message.userfrom.id,message})),formatted},render=function(conversations,userId){var pending=new Pending,mapPromises=conversations.map((function(conversation){var lastMessage=conversation.messages.length?conversation.messages[conversation.messages.length-1]:null;return async function(lastMessage){if(!lastMessage)return null;var tmpElement=document.createElement("element");if(tmpElement.innerHTML=lastMessage.text.replace(/&lt;img /g,"&lt;noimg "),!tmpElement.querySelector("[src]")){var messagePreview=$(lastMessage.text).text();if(messagePreview&amp;&amp;-1==messagePreview.indexOf("&lt;"))return messagePreview}var pix="i/messagecontentmultimediageneral",label="messagecontentmultimediageneral";lastMessage.text.includes("&lt;img")?(pix="i/messagecontentimage",label="messagecontentimage"):lastMessage.text.includes("&lt;video")?(pix="i/messagecontentvideo",label="messagecontentvideo"):lastMessage.text.includes("&lt;audio")&amp;&amp;(pix="i/messagecontentaudio",label="messagecontentaudio");try{var labelString=await Str.get_string(label,"core_message");return await Templates.renderPix(pix,"core",labelString)+" "+labelString}catch(error){return Notification.exception(error),null}}(lastMessage).then((function(messagePreview){var formattedConversation={id:conversation.id,imageurl:conversation.imageurl,name:conversation.name,subname:conversation.subname,unreadcount:conversation.unreadcount,ismuted:conversation.ismuted,lastmessagedate:lastMessage?lastMessage.timecreated:null,sentfromcurrentuser:lastMessage?lastMessage.useridfrom==userId:null,lastmessage:messagePreview},otherUser=null;return conversation.type==MessageDrawerViewConversationContants.CONVERSATION_TYPES.SELF?otherUser=conversation.members[0]:conversation.type==MessageDrawerViewConversationContants.CONVERSATION_TYPES.PRIVATE&amp;&amp;(otherUser=conversation.members.reduce((function(carry,member){return carry||member.id==userId||(carry=member),carry}),null)),null!==otherUser&amp;&amp;(formattedConversation.userid=otherUser.id,formattedConversation.showonlinestatus=otherUser.showonlinestatus,formattedConversation.isonline=otherUser.isonline,formattedConversation.isblocked=otherUser.isblocked),conversation.type==MessageDrawerViewConversationContants.CONVERSATION_TYPES.PUBLIC&amp;&amp;(formattedConversation.lastsendername=conversation.members.reduce((function(carry,member){return!carry&amp;&amp;lastMessage&amp;&amp;member.id==lastMessage.useridfrom&amp;&amp;(carry=member.fullname),carry}),null)),formattedConversation})).catch(Notification.exception)}));return Promise.all(mapPromises).then((function(formattedConversations){return formattedConversations.forEach((function(conversation){(new Date).toDateString()==new Date(1e3*conversation.lastmessagedate).toDateString()&amp;&amp;(conversation.istoday=!0)})),Templates.render(TEMPLATES_CONVERSATIONS_LIST,{conversations:formattedConversations})})).then((function(html,js){return pending.resolve(),$.Deferred().resolve(html,js)})).catch((function(error){pending.resolve(),Notification.exception(error)}))},getTotalConversationCountElement=function(root){return root.find(SELECTORS_SECTION_TOTAL_COUNT)},decrementTotalUnreadConversationCount=function(root){if(loadedUnreadCounts){var element=function(root){return root.find(SELECTORS_SECTION_UNREAD_COUNT)}(root),count=parseInt(element.text());count-=1,element.text(count),count&lt;1&amp;&amp;element.addClass("hidden")}},getConversationElement=function(root,conversationId){return root.find('[data-conversation-id="'+conversationId+'"]')},getConversationElementFromUserId=function(root,userId){return root.find('[data-user-id="'+userId+'"]')},createNewConversationFromEvent=function(root,conversation,userId){if(!root.find(SELECTORS_CONVERSATION).length){var listRoot=LazyLoadList.getRoot(root);LazyLoadList.showContent(listRoot),LazyLoadList.hideEmptyMessage(listRoot)}return loadedConversationsById[conversation.id]=conversation,render([conversation],userId).then((function(html){return LazyLoadList.getContentContainer(root).prepend(html)})).then((function(){return function(root){if(loadedTotalCounts){var element=getTotalConversationCountElement(root),count=parseInt(element.text());count+=1,element.text(count)}}(root)})).catch(Notification.exception)},deleteConversation=function(root,conversationElement){if(conversationElement.remove(),function(root){if(loadedTotalCounts){var element=getTotalConversationCountElement(root),count=parseInt(element.text());count-=1,element.text(count)}}(root),!root.find(SELECTORS_CONVERSATION).length){var listRoot=LazyLoadList.getRoot(root);LazyLoadList.hideContent(listRoot),LazyLoadList.showEmptyMessage(listRoot)}},registerEventListeners=function(namespace,root,loadCallback,types,includeFavourites,fromPanel){var listRoot=LazyLoadList.getRoot(root),conversationBelongsToThisSection=function(conversation){var conversationType=parseInt(conversation.type,10);return!(types&amp;&amp;types.indexOf(conversationType)&lt;0||includeFavourites&amp;&amp;!conversation.isFavourite||!includeFavourites&amp;&amp;conversation.isFavourite)},toggle=root.find(SELECTORS_TOGGLE);root.css("min-height",toggle.outerHeight()),root.on("show.bs.collapse",(function(){setExpanded(root),LazyLoadList.show(listRoot,loadCallback,(function(contentContainer,conversations,userId){return render(conversations,userId).then((function(html){return contentContainer.append(html),html})).catch(Notification.exception)}))})),root.on("hidden.bs.collapse",(function(){!function(root){root.removeClass("expanded")}(root)})),PubSub.subscribe(MessageDrawerEvents.CONTACT_BLOCKED,(function(userId){var conversationElement=getConversationElementFromUserId(root,userId);conversationElement.length&amp;&amp;function(conversationElement){conversationElement.find(SELECTORS_BLOCKED_ICON_CONTAINER).removeClass("hidden")}(conversationElement)})),PubSub.subscribe(MessageDrawerEvents.CONTACT_UNBLOCKED,(function(userId){var conversationElement=getConversationElementFromUserId(root,userId);conversationElement.length&amp;&amp;function(conversationElement){conversationElement.find(SELECTORS_BLOCKED_ICON_CONTAINER).addClass("hidden")}(conversationElement)})),PubSub.subscribe(MessageDrawerEvents.CONVERSATION_SET_MUTED,(function(conversation){var conversationId=conversation.id,conversationElement=getConversationElement(root,conversationId);conversationElement.length&amp;&amp;function(conversationElement){conversationElement.find(SELECTORS_MUTED_ICON_CONTAINER).removeClass("hidden")}(conversationElement)})),PubSub.subscribe(MessageDrawerEvents.CONVERSATION_UNSET_MUTED,(function(conversation){var conversationId=conversation.id,conversationElement=getConversationElement(root,conversationId);conversationElement.length&amp;&amp;function(conversationElement){conversationElement.find(SELECTORS_MUTED_ICON_CONTAINER).addClass("hidden")}(conversationElement)})),PubSub.subscribe(MessageDrawerEvents.CONVERSATION_NEW_LAST_MESSAGE,(function(conversation){if(conversationBelongsToThisSection(conversation)){var pendingPromise=new Pending("core_message/message_drawer_view_overview_section:new"),loggedInUserId=conversation.loggedInUserId,conversationId=conversation.id,element=getConversationElement(root,conversationId);if(conversation=formatConversationFromEvent(conversation),element.length){var contentContainer=LazyLoadList.getContentContainer(root);render([conversation],loggedInUserId).then((function(html){deletedConversationsById[conversationId]&amp;&amp;conversation.messages[0].timeadded&lt;deletedConversationsById[conversationId]||(contentContainer.prepend(html),element.remove())})).then(pendingPromise.resolve).catch(Notification.exception)}else conversation.messages.length?createNewConversationFromEvent(root,conversation,loggedInUserId).then(pendingPromise.resolve).catch():pendingPromise.resolve()}})),PubSub.subscribe(MessageDrawerEvents.CONVERSATION_DELETED,(function(conversationId){var conversationElement=getConversationElement(root,conversationId);delete loadedConversationsById[conversationId],deletedConversationsById[conversationId]=new Date,conversationElement.length&amp;&amp;deleteConversation(root,conversationElement)})),PubSub.subscribe(MessageDrawerEvents.CONVERSATION_READ,(function(conversationId){var conversationElement=getConversationElement(root,conversationId);conversationElement.length&amp;&amp;function(root,conversationElement){var unreadCount=conversationElement.find(SELECTORS_UNREAD_COUNT);unreadCount.text("0"),unreadCount.addClass("hidden"),decrementTotalUnreadConversationCount(root)}(root,conversationElement)})),PubSub.subscribe(MessageDrawerEvents.CONVERSATION_SET_FAVOURITE,(function(conversation){var conversationElement=null;conversationBelongsToThisSection(conversation)?(conversationElement=getConversationElement(root,conversation.id)).length||createNewConversationFromEvent(root,formatConversationFromEvent(conversation),conversation.loggedInUserId):(conversationElement=getConversationElement(root,conversation.id)).length&amp;&amp;deleteConversation(root,conversationElement)})),PubSub.subscribe(MessageDrawerEvents.CONVERSATION_UNSET_FAVOURITE,(function(conversation){var conversationElement=null;conversationBelongsToThisSection(conversation)?(conversationElement=getConversationElement(root,conversation.id)).length||createNewConversationFromEvent(root,formatConversationFromEvent(conversation),conversation.loggedInUserId):(conversationElement=getConversationElement(root,conversation.id)).length&amp;&amp;deleteConversation(root,conversationElement)})),CustomEvents.define(root,[CustomEvents.events.activate]),root.on(CustomEvents.events.activate,SELECTORS_CONVERSATION,(function(e,data){var conversationId=$(e.target).closest(SELECTORS_CONVERSATION).attr("data-conversation-id"),conversation=loadedConversationsById[conversationId];MessageDrawerRouter.go(namespace,MessageDrawerRoutes.VIEW_CONVERSATION,conversation,fromPanel),data.originalEvent.preventDefault()}))};return{show:function(namespace,header,body,footer,types,includeFavourites,totalCountPromise,unreadCountPromise,fromPanel){var root=$(body);if(!root.attr("data-init")){var loadCallback=function(types,includeFavourites,offset){var type=null,includeSelfConversations=!0;if(types&amp;&amp;types.length){var nonSelfConversationTypes=types.filter((function(candidate){return candidate!=MessageDrawerViewConversationContants.CONVERSATION_TYPES.SELF}));includeSelfConversations=types.length!=nonSelfConversationTypes.length,type=nonSelfConversationTypes[0]}return function(root,userId){return MessageRepository.getConversations(userId,type,51,offset,includeFavourites,includeSelfConversations).then((function(response){var conversations=response.conversations;return conversations.length&gt;50?conversations=conversations.slice(0,-1):LazyLoadList.setLoadedAll(root,!0),offset+=50,conversations.forEach((function(conversation){loadedConversationsById[conversation.id]=conversation})),conversations})).catch(Notification.exception)}}(types,includeFavourites,0);if(registerEventListeners(namespace,root,loadCallback,types,includeFavourites,fromPanel),isVisible(root)){setExpanded(root);var listRoot=LazyLoadList.getRoot(root);LazyLoadList.show(listRoot,loadCallback,(function(contentContainer,conversations,userId){return render(conversations,userId).then((function(html){return contentContainer.append(html),html})).catch(Notification.exception)}))}totalCountPromise.then((function(count){!function(root,count){var container=root.find(SELECTORS_SECTION_TOTAL_COUNT_CONTAINER);container.find(SELECTORS_SECTION_TOTAL_COUNT).text(count),container.removeClass("hidden"),Str.get_string("totalconversations","core_message",count).done((function(string){container.attr("aria-label",string)}));var numPlaceholders=count&gt;20?20:count,placeholders=Array.apply(null,Array(numPlaceholders)).map((function(){return!0}));Templates.render(TEMPLATES_CONVERSATIONS_LIST_ITEMS_PLACEHOLDER,{placeholders:placeholders}).then((function(html){root.find(SELECTORS_PLACEHOLDER_CONTAINER).html(html)})).catch((function(){}))}(root,count),loadedTotalCounts=!0})).catch((function(){})),unreadCountPromise.then((function(count){!function(root,count){var countElement=root.find(SELECTORS_SECTION_UNREAD_COUNT);countElement.text(count),Str.get_string("unreadconversations","core_message",count).done((function(string){countElement.attr("aria-label",string)})),count&gt;0&amp;&amp;countElement.removeClass("hidden")}(root,count),loadedUnreadCounts=!0})).catch((function(){})),root.attr("data-init",!0)}},isVisible:isVisible}}));
define("core_message/message_send_bulk",["exports","core/str","core/modal_factory","core/templates","core/modal_events","core/ajax","core/notification"],(function(_exports,_str,_modal_factory,_templates,_modal_events,_ajax,_notification){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Send bulk message to the given user ids.
   *
   * @module     core_message/message_send_bulk
   * @copyright  2019 Shamim Rezaie &lt;shamim@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.showModal=_exports.sendMessage=void 0,_modal_factory=_interopRequireDefault(_modal_factory),_templates=_interopRequireDefault(_templates),_modal_events=_interopRequireDefault(_modal_events),_ajax=_interopRequireDefault(_ajax),_notification=_interopRequireDefault(_notification);_exports.showModal=function(users){let callback=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]?arguments[1]:null;if(!users.length)return Promise.resolve();let titlePromise=null;return titlePromise=1==users.length?(0,_str.get_string)("sendbulkmessagesingle","core_message"):(0,_str.get_string)("sendbulkmessage","core_message",users.length),_modal_factory.default.create({type:_modal_factory.default.types.SAVE_CANCEL,body:_templates.default.render("core_message/send_bulk_message",{}),title:titlePromise}).then((function(modal){return modal.setSaveButtonText(titlePromise),modal.getRoot().on(_modal_events.default.hidden,(function(){callback&amp;&amp;callback(),modal.getRoot().remove()})),modal.getRoot().on(_modal_events.default.save,(function(){let messageText=modal.getRoot().find("form textarea").val();sendMessage(messageText,users)})),modal.show(),modal}))};const sendMessage=(messageText,users)=&gt;{let messages=[];return users.forEach((user=&gt;{messages.push({touserid:user,text:messageText})})),_ajax.default.call([{methodname:"core_message_send_instant_messages",args:{messages:messages}}])[0].then((function(messageIds){return 1==messageIds.length?(0,_str.get_string)("sendbulkmessagesentsingle","core_message"):(0,_str.get_string)("sendbulkmessagesent","core_message",messageIds.length)})).then((function(msg){return _notification.default.addNotification({message:msg,type:"success"}),!0})).catch(_notification.default.exception)};_exports.sendMessage=sendMessage}));
/**
 * Available routes for the message drawer.
 *
 * @module     core_message/message_drawer_routes
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core_message/message_drawer_routes",[],(function(){return{VIEW_CONTACT:"view-contact",VIEW_CONTACTS:"view-contacts",VIEW_CONVERSATION:"view-conversation",VIEW_GROUP_INFO:"view-group-info",VIEW_OVERVIEW:"view-overview",VIEW_SEARCH:"view-search",VIEW_SETTINGS:"view-settings"}}));
/**
 * Controls the preference for an individual notification type on the
 * message preference page.
 *
 * @module     core_message/notification_preference
 * @copyright  2016 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core_message/notification_preference",["jquery","core/ajax","core/notification","core_message/notification_processor"],(function($,Ajax,Notification,NotificationProcessor){const SELECTORS_PROCESSOR="[data-processor-name]",SELECTORS_STATE_INPUTS="[data-state] input",NotificationPreference=function(element,userId){this.root=$(element),this.userId=userId};return NotificationPreference.prototype.getPreferenceKey=function(){return this.root.attr("data-preference-key")},NotificationPreference.prototype.getEnabledPreferenceKey=function(){return this.getPreferenceKey()+"_enabled"},NotificationPreference.prototype.getProcessors=function(){return this.root.find(SELECTORS_PROCESSOR).map((function(index,element){return new NotificationProcessor($(element))}))},NotificationPreference.prototype.startLoading=function(){this.root.addClass("loading"),this.root.find(SELECTORS_STATE_INPUTS).prop("disabled",!0)},NotificationPreference.prototype.stopLoading=function(){this.root.removeClass("loading"),this.root.find(SELECTORS_STATE_INPUTS).prop("disabled",!1)},NotificationPreference.prototype.isLoading=function(){return this.root.hasClass("loading")},NotificationPreference.prototype.save=function(){if(this.isLoading())return $.Deferred().resolve();this.startLoading();let enabledValue="";this.getProcessors().each((function(index,processor){processor.isEnabled()&amp;&amp;(""===enabledValue?enabledValue=processor.getName():enabledValue+=","+processor.getName())})),""===enabledValue&amp;&amp;(enabledValue="none");const request={methodname:"core_user_update_user_preferences",args:{userid:this.userId,preferences:[{type:this.getEnabledPreferenceKey(),value:enabledValue}]}};return Ajax.call([request])[0].fail(Notification.exception).always(function(){this.stopLoading()}.bind(this))},NotificationPreference}));
/**
 * A simple router for the message drawer that allows navigating between
 * the "pages" in the drawer.
 *
 * This module will maintain a linear history of the unique pages access
 * to allow navigating back.
 *
 * @module     core_message/message_drawer_router
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core_message/message_drawer_router",["jquery","core/pubsub","core/str","core_message/message_drawer_events","core/aria","core/pending"],(function($,PubSub,Str,MessageDrawerEvents,Aria,PendingPromise){var routes={},history={},SELECTORS_CAN_RECEIVE_FOCUS='input:not([type="hidden"]), a[href], button, textarea, select, [tabindex]',SELECTORS_ROUTES_BACK="[data-route-back]",changeRoute=function(namespace,newRoute){var newConfig,pendingPromise=new PendingPromise("message-drawer-router-".concat(namespace,"-").concat(newRoute)),fromPanel=[].slice.call(arguments).some((function(arg){return"frompanel"==arg})),args=[].slice.call(arguments,2),renderPromise=$.Deferred().resolve().promise();if(Object.keys(routes[namespace]).forEach((function(route){var config=routes[namespace][route],isMatch=route===newRoute;isMatch&amp;&amp;(newConfig=config),config.parameters.forEach((function(element){"object"==typeof element&amp;&amp;null!==element&amp;&amp;(element.removeClass("previous"),element.attr("data-from-panel",!1),isMatch?(fromPanel&amp;&amp;element.attr("data-from-panel",!0),element.removeClass("hidden"),Aria.unhide(element.get())):element.attr("data-in-panel")&amp;&amp;"view-search"!=newRoute&amp;&amp;"view-overview"!=newRoute||(element.addClass("hidden"),Aria.hide(element.get())))}))})),newConfig&amp;&amp;newConfig.onGo){renderPromise=newConfig.onGo.apply(void 0,newConfig.parameters.concat(args));for(var currentFocusElement=$(document.activeElement),hasFocus=!1,firstFocusable=null,i=1;i&lt;newConfig.parameters.length;i++){var element=newConfig.parameters[i];if("object"==typeof element&amp;&amp;null!==element&amp;&amp;(firstFocusable||(firstFocusable=element),element.has(currentFocusElement).length)){hasFocus=!0;break}}hasFocus||firstFocusable.find(SELECTORS_CAN_RECEIVE_FOCUS).filter(":visible").first().focus()}var record={route:newRoute,params:args,renderPromise:renderPromise};return PubSub.publish(MessageDrawerEvents.ROUTE_CHANGED,record),renderPromise.then((()=&gt;pendingPromise.resolve())),record},go=function(namespace){var currentFocusElement=$(document.activeElement),record=changeRoute.apply(namespace,arguments),inHistory=!1;history[namespace]||(history[namespace]=[]),history[namespace]=history[namespace].reduce((function(carry,previous){return previous.route===record.route&amp;&amp;(inHistory=!0),inHistory||carry.push(previous),carry}),[]);var historylength=history[namespace].length,previousRecord=historylength?history[namespace][historylength-1]:null;if(previousRecord){for(var prevConfig=routes[namespace][previousRecord.route],elements=prevConfig.parameters,i=1;i&lt;elements.length;i++)"object"==typeof elements[i]&amp;&amp;null!==elements[i]&amp;&amp;elements[i].addClass("previous");previousRecord.focusElement=currentFocusElement,prevConfig.getDescription&amp;&amp;prevConfig.getDescription.apply(null,prevConfig.parameters.concat(previousRecord.params)).then((function(description){return Str.get_string("backto","core_message",description)})).then((function(label){return record.renderPromise.then((function(){routes[namespace][record.route].parameters.forEach((function(element){"object"==typeof element&amp;&amp;element&amp;&amp;element.find(SELECTORS_ROUTES_BACK).attr("aria-label",label)}))}))})).catch((function(){}))}return history[namespace].push(record),record};return{add:function(namespace,route,parameters,onGo,getDescription){routes[namespace]||(routes[namespace]=[]),routes[namespace][route]={parameters:parameters,onGo:onGo,getDescription:getDescription}},go:go,back:function(namespace){if(history[namespace].length){history[namespace].pop();var previous=history[namespace].pop();previous&amp;&amp;(go.apply(void 0,[namespace,previous.route].concat(previous.params)),window.setTimeout((function(){previous.focusElement.focus()}),50))}}}}));
/**
 * Controls the overview page of the message drawer.
 *
 * @module     core_message/message_drawer_view_overview
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core_message/message_drawer_view_overview",["jquery","core/key_codes","core/pubsub","core/str","core_message/message_drawer_router","core_message/message_drawer_routes","core_message/message_drawer_events","core_message/message_drawer_view_overview_section","core_message/message_repository","core_message/message_drawer_view_conversation_constants"],(function($,KeyCodes,PubSub,Str,Router,Routes,MessageDrawerEvents,Section,MessageRepository,Constants){var SELECTORS_CONTACT_REQUEST_COUNT='[data-region="contact-request-count"]',SELECTORS_FAVOURITES='[data-region="view-overview-favourites"]',SELECTORS_GROUP_MESSAGES='[data-region="view-overview-group-messages"]',SELECTORS_MESSAGES='[data-region="view-overview-messages"]',SELECTORS_SEARCH_INPUT='[data-region="view-overview-search-input"]',SELECTORS_SECTION_TOGGLE_BUTTON="[data-toggle]",OVERVIEW_SECTION_TYPES={PRIVATE:[Constants.CONVERSATION_TYPES.PRIVATE,Constants.CONVERSATION_TYPES.SELF],PUBLIC:[Constants.CONVERSATION_TYPES.PUBLIC],FAVOURITE:null},loadAllCountsPromise=null,filterCountsByTypes=function(counts,types,includeFavourites){var total=0;return types&amp;&amp;types.length&amp;&amp;(total=types.reduce((function(carry,type){return carry+counts.types[type]}),total)),includeFavourites&amp;&amp;(total+=counts.favourites),total},getSearchInput=function(header){return header.find(SELECTORS_SEARCH_INPUT)},decrementContactRequestCount=function(header){return function(){var countContainer=header.find(SELECTORS_CONTACT_REQUEST_COUNT),count=parseInt(countContainer.text(),10);(count=isNaN(count)?0:count-1)&lt;=0?countContainer.addClass("hidden"):countContainer.text(count)}};return{show:function(namespace,header,body){header.attr("data-init")||(!function(namespace,header){var searchInput=getSearchInput(header),ignoredKeys=[KeyCodes.tab,KeyCodes.shift,KeyCodes.ctrl,KeyCodes.alt];searchInput.on("click",(function(){Router.go(namespace,Routes.VIEW_SEARCH)})),searchInput.on("keydown",(function(e){ignoredKeys.indexOf(e.keyCode)&lt;0&amp;&amp;"Meta"!=e.key&amp;&amp;Router.go(namespace,Routes.VIEW_SEARCH)})),PubSub.subscribe(MessageDrawerEvents.CONTACT_REQUEST_ACCEPTED,decrementContactRequestCount(header)),PubSub.subscribe(MessageDrawerEvents.CONTACT_REQUEST_DECLINED,decrementContactRequestCount(header))}(namespace,header),header.attr("data-init",!0));var fromPanel=header.attr("data-in-panel")?"frompanel":null;getSearchInput(header).val("");var loggedInUserId=function(body){return body.attr("data-user-id")}(body),allCounts=function(loggedInUserId){return null===loadAllCountsPromise&amp;&amp;(loadAllCountsPromise=MessageRepository.getAllConversationCounts(loggedInUserId)),loadAllCountsPromise}(loggedInUserId),sections=[[body.find(SELECTORS_FAVOURITES),OVERVIEW_SECTION_TYPES.FAVOURITE,!0],[body.find(SELECTORS_GROUP_MESSAGES),OVERVIEW_SECTION_TYPES.PUBLIC,!1],[body.find(SELECTORS_MESSAGES),OVERVIEW_SECTION_TYPES.PRIVATE,!1]];return sections.forEach((function(args){var sectionRoot=args[0],sectionTypes=args[1],includeFavourites=args[2],totalCountPromise=allCounts.then((function(result){return filterCountsByTypes(result.total,sectionTypes,includeFavourites)})),unreadCountPromise=allCounts.then((function(result){return filterCountsByTypes(result.unread,sectionTypes,includeFavourites)}));Section.show(namespace,null,sectionRoot,null,sectionTypes,includeFavourites,totalCountPromise,unreadCountPromise,fromPanel)})),allCounts.then((function(result){return function(sections){sections.some((function(section){var sectionRoot=section[0];return Section.isVisible(sectionRoot)}))||(sections.sort((function(a,b){var aTotal=a[1],aUnread=a[2],bTotal=b[1],bUnread=b[2];return aUnread&gt;0&amp;&amp;0==bUnread?-1:0==aUnread&amp;&amp;bUnread&gt;0?1:aTotal&gt;0&amp;&amp;0==bTotal?-1:0==aTotal&amp;&amp;bTotal&gt;0?1:0})),sections[0][0].find(SELECTORS_SECTION_TOGGLE_BUTTON).click())}(sections.map((function(section){var sectionRoot=section[0],sectionTypes=section[1],includeFavourites=section[2];return[sectionRoot,filterCountsByTypes(result.total,sectionTypes,includeFavourites),filterCountsByTypes(result.unread,sectionTypes,includeFavourites)]})))}))},description:function(){return Str.get_string("messagedrawerviewoverview","core_message")}}}));
/**
 * This module updates the UI for the conversation page in the message
 * drawer.
 *
 * The module will take a patch from the message_drawer_view_conversation_patcher
 * module and update the UI to reflect the changes.
 *
 * This is the only module that ever modifies the UI of the conversation page.
 *
 * @module     core_message/message_drawer_view_conversation_renderer
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core_message/message_drawer_view_conversation_renderer",["jquery","core/notification","core/str","core/templates","core/user_date","core_message/message_drawer_view_conversation_constants","core/aria"],(function($,Notification,Str,Templates,UserDate,Constants,Aria){var SELECTORS=Constants.SELECTORS,TEMPLATES=Constants.TEMPLATES,CONVERSATION_TYPES=Constants.CONVERSATION_TYPES,getMessagesContainer=function(body){return body.find(SELECTORS.CONTENT_MESSAGES_CONTAINER)},getSelfConversationMessageContainer=function(body){return body.find(SELECTORS.SELF_CONVERSATION_MESSAGE_CONTAINER)},getContactRequestSentContainer=function(body){return body.find(SELECTORS.CONTACT_REQUEST_SENT_MESSAGE_CONTAINER)},getFooterContentContainer=function(footer){return footer.find(SELECTORS.CONTENT_MESSAGES_FOOTER_CONTAINER)},getFooterEditModeContainer=function(footer){return footer.find(SELECTORS.CONTENT_MESSAGES_FOOTER_EDIT_MODE_CONTAINER)},getFooterPlaceholderContainer=function(footer){return footer.find(SELECTORS.PLACEHOLDER_CONTAINER)},showFooterPlaceholder=function(footer){getFooterPlaceholderContainer(footer).removeClass("hidden")},getFooterRequireContactContainer=function(footer){return footer.find(SELECTORS.CONTENT_MESSAGES_FOOTER_REQUIRE_CONTACT_CONTAINER)},getFooterRequireUnblockContainer=function(footer){return footer.find(SELECTORS.CONTENT_MESSAGES_FOOTER_REQUIRE_UNBLOCK_CONTAINER)},getFooterUnableToMessageContainer=function(footer){return footer.find(SELECTORS.CONTENT_MESSAGES_FOOTER_UNABLE_TO_MESSAGE_CONTAINER)},hideAllFooterElements=function(footer){!function(footer){getFooterContentContainer(footer).addClass("hidden")}(footer),function(footer){getFooterEditModeContainer(footer).addClass("hidden")}(footer),function(footer){getFooterPlaceholderContainer(footer).addClass("hidden")}(footer),function(footer){getFooterRequireContactContainer(footer).addClass("hidden")}(footer),function(footer){getFooterRequireUnblockContainer(footer).addClass("hidden")}(footer),function(footer){getFooterUnableToMessageContainer(footer).addClass("hidden")}(footer)},getContentPlaceholderContainer=function(body){return body.find(SELECTORS.CONTENT_PLACEHOLDER_CONTAINER)},getHeaderContent=function(header){return header.find(SELECTORS.HEADER)},showHeaderContent=function(header){getHeaderContent(header).removeClass("hidden")},hideHeaderContent=function(header){getHeaderContent(header).addClass("hidden")},getHeaderEditMode=function(header){return header.find(SELECTORS.HEADER_EDIT_MODE)},hideHeaderEditMode=function(header){getHeaderEditMode(header).addClass("hidden")},getHeaderPlaceholderContainer=function(header){return header.find(SELECTORS.HEADER_PLACEHOLDER_CONTAINER)},showHeaderPlaceholder=function(header){getHeaderPlaceholderContainer(header).removeClass("hidden")},hideHeaderPlaceholder=function(header){getHeaderPlaceholderContainer(header).addClass("hidden")},getMessageElement=function(body,messageId){return getMessagesContainer(body).find('[data-message-id="'+messageId+'"]')},getDayElement=function(body,dayTimeCreated){return getMessagesContainer(body).find('[data-day-id="'+dayTimeCreated+'"]')},getMoreMessagesLoadingIconContainer=function(body){return body.find(SELECTORS.MORE_MESSAGES_LOADING_ICON_CONTAINER)},getConfirmDialogueContainer=function(root){return root.find(SELECTORS.CONFIRM_DIALOGUE_CONTAINER)},showConfirmDialogueContainer=function(root){var container=getConfirmDialogueContainer(root),siblings=container.siblings(":not(.hidden)");Aria.hide(siblings.get()),siblings.attr("data-confirm-dialogue-hidden",!0),container.removeClass("hidden")},hideConfirmDialogueContainer=function(root){var container=getConfirmDialogueContainer(root),siblings=container.siblings('[data-confirm-dialogue-hidden="true"]');Aria.unhide(siblings.get()),siblings.removeAttr("data-confirm-dialogue-hidden"),container.addClass("hidden")},formatMessagesForTemplate=function(messages,datesCache){return messages.map((function(message){return{id:message.id,isread:message.isRead,fromloggedinuser:message.fromLoggedInUser,userfrom:message.userFrom,text:message.text,formattedtime:message.timeCreated?datesCache[message.timeCreated]:null}}))},renderConversation=function(header,body,footer,data){var renderingPromises=[],hasAddDays=data.days.add.length&gt;0,hasAddMessages=data.messages.add.length&gt;0,hasUpdateMessages=data.messages.update.length&gt;0,timestampsToFormat=[],datesCachePromise=$.Deferred().resolve({}).promise();return hasAddDays&amp;&amp;(timestampsToFormat=timestampsToFormat.concat(data.days.add.reduce((function(carry,day){return carry.concat(day.value.messages.reduce((function(timestamps,message){return message.timeCreated&amp;&amp;timestamps.push(message.timeCreated),timestamps}),[]))}),[]))),hasAddMessages&amp;&amp;(timestampsToFormat=timestampsToFormat.concat(data.messages.add.reduce((function(timestamps,message){return message.value.timeCreated&amp;&amp;timestamps.push(message.value.timeCreated),timestamps}),[]))),hasUpdateMessages&amp;&amp;(timestampsToFormat=timestampsToFormat.concat(data.messages.update.reduce((function(timestamps,message){return message.before.timeCreated!=message.after.timeCreated&amp;&amp;timestamps.push(message.after.timeCreated),timestamps}),[]))),timestampsToFormat.length&amp;&amp;(datesCachePromise=Str.get_string("strftimetime24","core_langconfig").then((function(format){var requests=timestampsToFormat.map((function(timestamp){return{timestamp:timestamp,format:format}}));return UserDate.get(requests)})).then((function(formattedTimes){return timestampsToFormat.reduce((function(carry,timestamp,index){return carry[timestamp]=formattedTimes[index],carry}),{})}))),hasAddDays&amp;&amp;renderingPromises.push(datesCachePromise.then((function(datesCache){return function(header,body,footer,days,datesCache){var messagesContainer=getMessagesContainer(body),daysRenderPromises=days.map((function(data){var timestampDate=new Date(1e3*data.value.timestamp);return Templates.render(TEMPLATES.DAY,{timestamp:data.value.timestamp,currentyear:timestampDate.getFullYear()===(new Date).getFullYear(),messages:formatMessagesForTemplate(data.value.messages,datesCache)})}));return $.when.apply($,daysRenderPromises).then((function(){days.forEach((function(data,index){daysRenderPromises[index].then((function(html){if(data.before){var element=getDayElement(body,data.before.timestamp);return $(html).insertBefore(element)}return messagesContainer.append(html)})).catch((function(){}))}))}))}(0,body,0,data.days.add,datesCache)}))),hasAddMessages&amp;&amp;renderingPromises.push(datesCachePromise.then((function(datesCache){return function(header,body,footer,messages,datesCache){var messagesData=messages.map((function(data){return data.value})),formattedMessages=formatMessagesForTemplate(messagesData,datesCache);return Templates.render(TEMPLATES.MESSAGES,{messages:formattedMessages}).then((function(html){var messageList=$(html);messages.forEach((function(data){var messageHtml=messageList.find('[data-message-id="'+data.value.id+'"]');if(data.before){var element=getMessageElement(body,data.before.id);return messageHtml.insertBefore(element)}return getDayElement(body,data.day.timestamp).find(SELECTORS.DAY_MESSAGES_CONTAINER).append(messageHtml)}))}))}(0,body,0,data.messages.add,datesCache)}))),hasUpdateMessages&amp;&amp;renderingPromises.push(datesCachePromise.then((function(datesCache){return function(header,body,footer,messages,datesCache){messages.forEach((function(message){var before=message.before,after=message.after,element=getMessageElement(body,before.id);if(before.id!=after.id&amp;&amp;element.attr("data-message-id",after.id),before.timeCreated!=after.timeCreated){var formattedTime=datesCache[after.timeCreated];element.find(SELECTORS.LOADING_ICON_CONTAINER).addClass("hidden"),element.find(SELECTORS.TIME_CREATED).text(formattedTime).removeClass("hidden")}if(before.sendState!=after.sendState){var loading=element.find(SELECTORS.LOADING_ICON_CONTAINER),time=element.find(SELECTORS.TIME_CREATED),retry=element.find(SELECTORS.RETRY_SEND);switch(loading.addClass("hidden"),Aria.hide(loading.get()),time.addClass("hidden"),Aria.hide(time.get()),retry.addClass("hidden"),Aria.hide(retry.get()),element.removeClass("border border-danger"),after.sendState){case"pending":loading.removeClass("hidden"),Aria.unhide(loading.get());break;case"error":retry.removeClass("hidden"),Aria.unhide(retry.get()),element.addClass("border border-danger");break;case"sent":time.removeClass("hidden"),Aria.unhide(time.get())}}if(before.text!=after.text&amp;&amp;element.find(SELECTORS.TEXT_CONTAINER).html(after.text),before.errorMessage!=after.errorMessage){var messageContainer=element.find(SELECTORS.ERROR_MESSAGE_CONTAINER);message=messageContainer.find(SELECTORS.ERROR_MESSAGE),after.errorMessage?(messageContainer.removeClass("hidden"),Aria.unhide(messageContainer.get()),message.text(after.errorMessage)):(messageContainer.addClass("hidden"),Aria.unhide(messageContainer.get()),message.text(""))}}))}(0,body,0,data.messages.update,datesCache)}))),data.days.remove.length&gt;0&amp;&amp;function(body,days){days.forEach((function(data){getDayElement(body,data.timestamp).remove()}))}(body,data.days.remove),data.messages.remove.length&gt;0&amp;&amp;function(body,messages){messages.forEach((function(data){getMessageElement(body,data.id).remove()}))}(body,data.messages.remove),$.when.apply($,renderingPromises)},renderHeader=function(header,body,footer,data){var headerContainer=getHeaderContent(header),template=TEMPLATES.HEADER_PUBLIC;return data.context.showrouteback="false"===header.attr("data-from-panel"),data.type==CONVERSATION_TYPES.PRIVATE?template=data.showControls?TEMPLATES.HEADER_PRIVATE:TEMPLATES.HEADER_PRIVATE_NO_CONTROLS:data.type==CONVERSATION_TYPES.SELF&amp;&amp;(template=TEMPLATES.HEADER_SELF),Templates.render(template,data.context).then((function(html,js){Templates.replaceNodeContents(headerContainer,html,js)}))},renderFooter=function(header,body,footer,data){switch(hideAllFooterElements(footer),data.type){case"placeholder":return showFooterPlaceholder(footer);case"add-contact":return Str.get_strings([{key:"requirecontacttomessage",component:"core_message",param:data.user.fullname},{key:"isnotinyourcontacts",component:"core_message",param:data.user.fullname}]).then((function(strings){var title=strings[1],text=strings[0],footerContainer=getFooterRequireContactContainer(footer);return footerContainer.find(SELECTORS.TITLE).text(title),footerContainer.find(SELECTORS.TEXT).text(text),function(footer){getFooterRequireContactContainer(footer).removeClass("hidden")}(footer),strings}));case"edit-mode":return function(footer){getFooterEditModeContainer(footer).removeClass("hidden")}(footer);case"content":return function(footer){getFooterContentContainer(footer).removeClass("hidden")}(footer);case"unblock":return function(footer){getFooterRequireUnblockContainer(footer).removeClass("hidden")}(footer);case"unable-to-message":return function(footer){getFooterUnableToMessageContainer(footer).removeClass("hidden")}(footer)}return!0},renderScrollToMessage=function(header,body,footer,messageId){var messagesContainer=getMessagesContainer(body),position=getMessageElement(body,messageId).position();if(position){var scrollTop=messagesContainer.scrollTop()+position.top;messagesContainer.scrollTop(scrollTop)}},renderLoadingMembers=function(header,body,footer,isLoadingMembers){isLoadingMembers?(hideHeaderContent(header),showHeaderPlaceholder(header)):(showHeaderContent(header),hideHeaderPlaceholder(header))},renderLoadingFirstMessages=function(header,body,footer,isLoadingFirstMessages){isLoadingFirstMessages?(function(body){getMessagesContainer(body).addClass("hidden")}(body),function(body){getContentPlaceholderContainer(body).removeClass("hidden")}(body)):(function(body){getMessagesContainer(body).removeClass("hidden")}(body),function(body){getContentPlaceholderContainer(body).addClass("hidden")}(body))},renderLoadingMessages=function(header,body,footer,isLoading){isLoading?function(body){getMoreMessagesLoadingIconContainer(body).removeClass("hidden")}(body):function(body){getMoreMessagesLoadingIconContainer(body).addClass("hidden")}(body)},renderShowEmojiPicker=function(header,body,footer,show){var container=function(footer){return footer.find(SELECTORS.EMOJI_PICKER_CONTAINER)}(footer);show?(container.removeClass("hidden"),Aria.unhide(container.get()),container.find(SELECTORS.EMOJI_PICKER_SEARCH_INPUT).focus()):(container.addClass("hidden"),Aria.hide(container.get()))},renderShowEmojiAutoComplete=function(header,body,footer,show){var container=function(footer){return footer.find(SELECTORS.EMOJI_AUTO_COMPLETE_CONTAINER)}(footer);show?(container.removeClass("hidden"),Aria.unhide(container.get())):(container.addClass("hidden"),Aria.hide(container.get()))},showConfirmDialogue=function(header,body,footer,buttonSelectors,bodyText,headerText,canCancel,skipHeader,showOk){var dialogue=getConfirmDialogueContainer(body),buttons=buttonSelectors.map((function(selector){return dialogue.find(selector)})),cancelButton=dialogue.find(SELECTORS.CONFIRM_DIALOGUE_CANCEL_BUTTON),okayButton=dialogue.find(SELECTORS.CONFIRM_DIALOGUE_OKAY_BUTTON),text=dialogue.find(SELECTORS.CONFIRM_DIALOGUE_TEXT),dialogueHeader=dialogue.find(SELECTORS.CONFIRM_DIALOGUE_HEADER);(dialogue.find("button").addClass("hidden"),canCancel?cancelButton.removeClass("hidden"):cancelButton.addClass("hidden"),showOk?okayButton.removeClass("hidden"):okayButton.addClass("hidden"),headerText)?((dialogueHeader=$('&lt;h3 class="h6" data-region="dialogue-header"&gt;&lt;/h3&gt;')).text(headerText),dialogue.find(SELECTORS.CONFIRM_DIALOGUE).prepend(dialogueHeader)):dialogueHeader.length&amp;&amp;dialogueHeader.remove();buttons.forEach((function(button){button.removeClass("hidden")})),text.text(bodyText),showConfirmDialogueContainer(footer),showConfirmDialogueContainer(body),skipHeader||showConfirmDialogueContainer(header),dialogue.find(SELECTORS.CAN_RECEIVE_FOCUS).filter(":visible").first().focus()},hideConfirmDialogue=function(header,body,footer){var dialogue=getConfirmDialogueContainer(body),cancelButton=dialogue.find(SELECTORS.CONFIRM_DIALOGUE_CANCEL_BUTTON),okayButton=dialogue.find(SELECTORS.CONFIRM_DIALOGUE_OKAY_BUTTON),text=dialogue.find(SELECTORS.CONFIRM_DIALOGUE_TEXT),dialogueHeader=dialogue.find(SELECTORS.CONFIRM_DIALOGUE_HEADER);return hideCheckDeleteDialogue(body),hideConfirmDialogueContainer(body),hideConfirmDialogueContainer(footer),hideConfirmDialogueContainer(header),dialogue.find("button").addClass("hidden"),cancelButton.removeClass("hidden"),okayButton.removeClass("hidden"),text.text(""),dialogueHeader.length&amp;&amp;dialogueHeader.remove(),header.find(SELECTORS.CAN_RECEIVE_FOCUS).first().focus(),!0},renderConfirmBlockUser=function(header,body,footer,user){return user?user.canmessageevenifblocked?Str.get_string("cantblockuser","core_message",user.fullname).then((function(string){return showConfirmDialogue(header,body,footer,[],string,"",!1,!1,!0)})):Str.get_string("blockuserconfirm","core_message",user.fullname).then((function(string){return showConfirmDialogue(header,body,footer,[SELECTORS.ACTION_CONFIRM_BLOCK],string,"",!0,!1)})):hideConfirmDialogue(header,body,footer)},renderConfirmUnblockUser=function(header,body,footer,user){return user?Str.get_string("unblockuserconfirm","core_message",user.fullname).then((function(string){return showConfirmDialogue(header,body,footer,[SELECTORS.ACTION_CONFIRM_UNBLOCK],string,"",!0,!1)})):hideConfirmDialogue(header,body,footer)},renderConfirmAddContact=function(header,body,footer,user){return user?Str.get_string("addcontactconfirm","core_message",user.fullname).then((function(string){return showConfirmDialogue(header,body,footer,[SELECTORS.ACTION_CONFIRM_ADD_CONTACT],string,"",!0,!1)})):hideConfirmDialogue(header,body,footer)},renderConfirmRemoveContact=function(header,body,footer,user){return user?Str.get_string("removecontactconfirm","core_message",user.fullname).then((function(string){return showConfirmDialogue(header,body,footer,[SELECTORS.ACTION_CONFIRM_REMOVE_CONTACT],string,"",!0,!1)})):hideConfirmDialogue(header,body,footer)},renderConfirmDeleteSelectedMessages=function(header,body,footer,data){var showmessage=null;return data.type==CONVERSATION_TYPES.SELF?showmessage="deleteselectedmessagesconfirmselfconversation":data.canDeleteMessagesForAllUsers?(showCheckDeleteDialogue(body),showmessage="deleteforeveryoneselectedmessagesconfirm"):showmessage="deleteselectedmessagesconfirm",data.show?Str.get_string(showmessage,"core_message").then((function(string){return showConfirmDialogue(header,body,footer,[SELECTORS.ACTION_CONFIRM_DELETE_SELECTED_MESSAGES],string,"",!0,!1)})):hideConfirmDialogue(header,body,footer)},renderConfirmDeleteConversation=function(header,body,footer,type){var showmessage=null;return type==CONVERSATION_TYPES.SELF?showmessage="deleteallselfconfirm":type&amp;&amp;(showmessage="deleteallconfirm"),showmessage?Str.get_string(showmessage,"core_message").then((function(string){return showConfirmDialogue(header,body,footer,[SELECTORS.ACTION_CONFIRM_DELETE_CONVERSATION],string,"",!0,!1)})):hideConfirmDialogue(header,body,footer)},renderConfirmContactRequest=function(header,body,footer,user){return user?Str.get_string("userwouldliketocontactyou","core_message",user.fullname).then((function(string){var buttonSelectors=[SELECTORS.ACTION_ACCEPT_CONTACT_REQUEST,SELECTORS.ACTION_DECLINE_CONTACT_REQUEST];return showConfirmDialogue(header,body,footer,buttonSelectors,string,"",!1,!0)})):hideConfirmDialogue(header,body,footer)},showCheckDeleteDialogue=function(body){getConfirmDialogueContainer(body).find(SELECTORS.DELETE_MESSAGES_FOR_ALL_USERS_TOGGLE_CONTAINER).removeClass("hidden")},hideCheckDeleteDialogue=function(body){var dialogue=getConfirmDialogueContainer(body),checkboxRegion=dialogue.find(SELECTORS.DELETE_MESSAGES_FOR_ALL_USERS_TOGGLE_CONTAINER);dialogue.find(SELECTORS.DELETE_MESSAGES_FOR_ALL_USERS_TOGGLE).prop("checked",!1),checkboxRegion.addClass("hidden")},renderIsBlocked=function(header,body,footer,isBlocked){isBlocked?(header.find(SELECTORS.ACTION_REQUEST_BLOCK).addClass("hidden"),header.find(SELECTORS.ACTION_REQUEST_UNBLOCK).removeClass("hidden")):(header.find(SELECTORS.ACTION_REQUEST_BLOCK).removeClass("hidden"),header.find(SELECTORS.ACTION_REQUEST_UNBLOCK).addClass("hidden"))},renderIsFavourite=function(header,body,footer,state){var favouriteIcon=header.find(SELECTORS.FAVOURITE_ICON_CONTAINER),addFavourite=header.find(SELECTORS.ACTION_CONFIRM_FAVOURITE),removeFavourite=header.find(SELECTORS.ACTION_CONFIRM_UNFAVOURITE);switch(state){case"hide":favouriteIcon.addClass("hidden"),addFavourite.addClass("hidden"),removeFavourite.addClass("hidden");break;case"show-add":favouriteIcon.addClass("hidden"),addFavourite.removeClass("hidden"),removeFavourite.addClass("hidden");break;case"show-remove":favouriteIcon.removeClass("hidden"),addFavourite.addClass("hidden"),removeFavourite.removeClass("hidden")}},renderIsMuted=function(header,body,footer,state){var muteIcon=header.find(SELECTORS.MUTED_ICON_CONTAINER),setMuted=header.find(SELECTORS.ACTION_CONFIRM_MUTE),unsetMuted=header.find(SELECTORS.ACTION_CONFIRM_UNMUTE);switch(state){case"hide":muteIcon.addClass("hidden"),setMuted.addClass("hidden"),unsetMuted.addClass("hidden");break;case"show-mute":muteIcon.addClass("hidden"),setMuted.removeClass("hidden"),unsetMuted.addClass("hidden");break;case"show-unmute":muteIcon.removeClass("hidden"),setMuted.addClass("hidden"),unsetMuted.removeClass("hidden")}},renderIsContact=function(header,body,footer,state){var addContact=header.find(SELECTORS.ACTION_REQUEST_ADD_CONTACT),removeContact=header.find(SELECTORS.ACTION_REQUEST_REMOVE_CONTACT);switch(state){case"pending-contact":addContact.addClass("hidden"),removeContact.addClass("hidden");break;case"contact":addContact.addClass("hidden"),removeContact.removeClass("hidden");break;case"non-contact":addContact.removeClass("hidden"),removeContact.addClass("hidden")}},renderLoadingConfirmAction=function(header,body,footer,isLoading){var dialogue=getConfirmDialogueContainer(body),buttons=dialogue.find("button"),buttonText=dialogue.find(SELECTORS.CONFIRM_DIALOGUE_BUTTON_TEXT),loadingIcon=dialogue.find(SELECTORS.LOADING_ICON_CONTAINER);isLoading?(buttons.prop("disabled",!0),buttonText.addClass("hidden"),loadingIcon.removeClass("hidden")):(buttons.prop("disabled",!1),buttonText.removeClass("hidden"),loadingIcon.addClass("hidden"))},renderInEditMode=function(header,body,footer,inEditMode){var messages=null;inEditMode?((messages=body.find(SELECTORS.MESSAGE_NOT_SELECTED)).find(SELECTORS.MESSAGE_NOT_SELECTED_ICON).removeClass("hidden"),hideHeaderContent(header),function(header){getHeaderEditMode(header).removeClass("hidden")}(header)):((messages=getMessagesContainer(body)).find(SELECTORS.MESSAGE_NOT_SELECTED_ICON).addClass("hidden"),messages.find(SELECTORS.MESSAGE_SELECTED_ICON).addClass("hidden"),showHeaderContent(header),hideHeaderEditMode(header))},renderSelectedMessages=function(header,body,footer,data){var hasSelectedMessages=data.count&gt;0;data.add.length&amp;&amp;data.add.forEach((function(messageId){var message=getMessageElement(body,messageId);message.find(SELECTORS.MESSAGE_NOT_SELECTED_ICON).addClass("hidden"),message.find(SELECTORS.MESSAGE_SELECTED_ICON).removeClass("hidden"),message.attr("aria-checked",!0)})),data.remove.length&amp;&amp;data.remove.forEach((function(messageId){var message=getMessageElement(body,messageId);hasSelectedMessages&amp;&amp;message.find(SELECTORS.MESSAGE_NOT_SELECTED_ICON).removeClass("hidden"),message.find(SELECTORS.MESSAGE_SELECTED_ICON).addClass("hidden"),message.attr("aria-checked",!1)})),function(header,value){getHeaderEditMode(header).find(SELECTORS.MESSAGES_SELECTED_COUNT).text(value)}(header,data.count)},renderRequireAddContact=function(header,body,footer,data){return data.show&amp;&amp;!data.hasMessages?Str.get_strings([{key:"requirecontacttomessage",component:"core_message",param:data.user.fullname},{key:"isnotinyourcontacts",component:"core_message",param:data.user.fullname}]).then((function(strings){var title=strings[1],text=strings[0];return showConfirmDialogue(header,body,footer,[SELECTORS.ACTION_REQUEST_ADD_CONTACT],text,title,!1,!0)})):hideConfirmDialogue(header,body,footer)},renderSelfConversationMessage=function(header,body,footer,displayMessage){var container=getSelfConversationMessageContainer(body);return displayMessage?container.removeClass("hidden"):container.addClass("hidden"),!0},renderContactRequestSent=function(header,body,footer,userFullName){var container=getContactRequestSentContainer(body);return userFullName?Str.get_string("yourcontactrequestpending","core_message",userFullName).then((function(string){return container.find(SELECTORS.TEXT).text(string),container.removeClass("hidden"),string})):(container.addClass("hidden"),!0)},renderReset=function(header,body,footer){return hideConfirmDialogue(header,body,footer),function(body){getContactRequestSentContainer(body).addClass("hidden")}(body),function(body){getSelfConversationMessageContainer(body).addClass("hidden")}(body),function(header){hideHeaderContent(header),hideHeaderEditMode(header),hideHeaderPlaceholder(header)}(header),showHeaderPlaceholder(header),hideAllFooterElements(footer),showFooterPlaceholder(footer),!0};return{render:function(header,body,footer,patch){var configs=[{reset:renderReset},{conversation:renderConversation,header:renderHeader,footer:renderFooter,confirmBlockUser:renderConfirmBlockUser,confirmUnblockUser:renderConfirmUnblockUser,confirmAddContact:renderConfirmAddContact,confirmRemoveContact:renderConfirmRemoveContact,confirmDeleteSelectedMessages:renderConfirmDeleteSelectedMessages,confirmDeleteConversation:renderConfirmDeleteConversation,confirmContactRequest:renderConfirmContactRequest,requireAddContact:renderRequireAddContact,selfConversationMessage:renderSelfConversationMessage,contactRequestSent:renderContactRequestSent},{loadingMembers:renderLoadingMembers,loadingFirstMessages:renderLoadingFirstMessages,loadingMessages:renderLoadingMessages,isBlocked:renderIsBlocked,isContact:renderIsContact,isFavourite:renderIsFavourite,isMuted:renderIsMuted,loadingConfirmAction:renderLoadingConfirmAction,inEditMode:renderInEditMode,showEmojiPicker:renderShowEmojiPicker,showEmojiAutoComplete:renderShowEmojiAutoComplete},{scrollToMessage:renderScrollToMessage,selectedMessages:renderSelectedMessages}],processConfig=function(config){var results=[];for(var key in patch)if(config.hasOwnProperty(key)){var renderFunc=config[key],patchValue=patch[key];results.push(renderFunc(header,body,footer,patchValue))}return results},renderingPromises=processConfig(configs[0]);return renderingPromises=renderingPromises.concat(processConfig(configs[1])),$.when.apply($,renderingPromises).then((function(){for(var i=2;i&lt;configs.length;i++)processConfig(configs[i])})).catch(Notification.exception)}}}));
/**
 * Controls the message popover in the nav bar.
 *
 * @module     core_message/message_popover
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core_message/message_popover",["jquery","core/custom_interaction_events","core/pubsub","core_message/message_drawer_events"],(function($,CustomEvents,PubSub,MessageDrawerEvents){var SELECTORS_COUNT_CONTAINER='[data-region="count-container"]',handleDecrementConversationCount=function(button){return function(){var countContainer=button.find(SELECTORS_COUNT_CONTAINER),count=parseInt(countContainer.text(),10);isNaN(count)||!count||count&lt;2?countContainer.addClass("hidden"):(count-=1,countContainer.text(count))}},registerEventListeners=function(button){CustomEvents.define(button,[CustomEvents.events.activate]),button.on(CustomEvents.events.activate,(function(e,data){var buttonid;buttonid=button.attr("id"),PubSub.publish(MessageDrawerEvents.TOGGLE_VISIBILITY,buttonid),button.focus(),data.originalEvent.preventDefault()})),PubSub.subscribe(MessageDrawerEvents.CONVERSATION_READ,handleDecrementConversationCount(button)),PubSub.subscribe(MessageDrawerEvents.CONTACT_REQUEST_ACCEPTED,handleDecrementConversationCount(button)),PubSub.subscribe(MessageDrawerEvents.CONTACT_REQUEST_DECLINED,handleDecrementConversationCount(button))};return{init:function(button){button=$(button),registerEventListeners(button)}}}));
define("core_message/message_drawer_events",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0;return _exports.default={CREATE_CONVERSATION_WITH_USER:"message-drawer-create-conversation-with-user",CONTACT_BLOCKED:"message-drawer-contact-blocked",CONTACT_UNBLOCKED:"message-drawer-contact-unblocked",CONTACT_ADDED:"message-drawer-contact-added",CONTACT_REMOVED:"message-drawer-contact-removed",CONTACT_REQUEST_ACCEPTED:"message-drawer-contact-request-accepted",CONTACT_REQUEST_DECLINED:"message-drawer-contact-request-declined",CONVERSATION_CREATED:"message-drawer-conversation-created",CONVERSATION_NEW_LAST_MESSAGE:"message-drawer-conversation-new-last-message",CONVERSATION_DELETED:"message-drawer-conversation-deleted",CONVERSATION_READ:"message-drawer-conversation-read",CONVERSATION_SET_FAVOURITE:"message-drawer-conversation-set-favourite",CONVERSATION_SET_MUTED:"message-drawer-conversation-set-muted",CONVERSATION_UNSET_FAVOURITE:"message-drawer-conversation-unset-favourite",CONVERSATION_UNSET_MUTED:"message-drawer-conversation-unset-muted",PREFERENCES_UPDATED:"message-drawer-preferences-updated",READY:"message-drawer-ready",ROUTE_CHANGED:"message-drawer-route-change",SHOW:"message-drawer-show",HIDE:"message-drawer-hide",TOGGLE_VISIBILITY:"message-drawer-toggle",SHOW_CONVERSATION:"message-drawer-show-conversation",SHOW_SETTINGS:"message-drawer-show-settings"},_exports.default}));
/**
 * Controls the conversation page in the message drawer.
 *
 * This function handles all of the user actions that the user can take
 * when interacting with the conversation page.
 *
 * It maintains a view state which is a data representation of the view
 * and only operates on that data.
 *
 * The view state is immutable and should never be modified directly. Instead
 * all changes to the view state should be done using the StateManager which
 * will generate a new version of the view state with the requested changes.
 *
 * After any changes to the view state the module will call the render function
 * to ask the renderer to update the UI.
 *
 * General rules for this module:
 * 1.) Never modify viewState directly. All changes should be via the StateManager.
 * 2.) Call render() with the new state when you want to update the UI
 * 3.) Never modify the UI directly in this module. This module is only concerned
 *     with the data in the view state.
 *
 * The general flow for a user interaction will be something like:
 * User interaction: User clicks "confirm block" button to block the other user
 *      1.) This module is hears the click
 *      2.) This module sends a request to the server to block the user
 *      3.) The server responds with the new user profile
 *      4.) This module generates a new state using the StateManager with the updated
 *          user profile.
 *      5.) This module asks the Patcher to generate a patch from the current state and
 *          the newly generated state. This patch tells the renderer what has changed
 *          between the states.
 *      6.) This module gives the Renderer the generated patch. The renderer updates
 *          the UI with changes according to the patch.
 *
 * @module     core_message/message_drawer_view_conversation
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core_message/message_drawer_view_conversation",["jquery","core/auto_rows","core/backoff_timer","core/custom_interaction_events","core/notification","core/pending","core/pubsub","core/str","core_message/message_repository","core_message/message_drawer_events","core_message/message_drawer_view_conversation_constants","core_message/message_drawer_view_conversation_patcher","core_message/message_drawer_view_conversation_renderer","core_message/message_drawer_view_conversation_state_manager","core_message/message_drawer_router","core_message/message_drawer_routes","core/emoji/auto_complete","core/emoji/picker"],(function($,AutoRows,BackOffTimer,CustomEvents,Notification,Pending,PubSub,Str,Repository,MessageDrawerEvents,Constants,Patcher,Renderer,StateManager,MessageDrawerRouter,MessageDrawerRoutes,initialiseEmojiAutoComplete,initialiseEmojiPicker){var stateCache={},viewState=null,loadedAllMessages=!1,messagesOffset=0,newMessagesPollTimer=null,isRendering=!1,renderBuffer=[],isResetting=!0,isSendingMessage=!1,isDeletingConversationContent=!1,sendMessageBuffer=[],render=null,renderers=[],NEWEST_FIRST=Constants.NEWEST_MESSAGES_FIRST,LOAD_MESSAGE_LIMIT=Constants.LOAD_MESSAGE_LIMIT,MILLISECONDS_IN_SEC=Constants.MILLISECONDS_IN_SEC,SELECTORS=Constants.SELECTORS,CONVERSATION_TYPES=Constants.CONVERSATION_TYPES,getOtherUserId=function(){if(!viewState||viewState.type==CONVERSATION_TYPES.PUBLIC)return null;var loggedInUserId=viewState.loggedInUserId;if(viewState.type==CONVERSATION_TYPES.SELF)return loggedInUserId;var otherUserIds=Object.keys(viewState.members).filter((function(userId){return loggedInUserId!=userId}));return otherUserIds.length?otherUserIds[0]:null},getMessagesOffset=function(){return messagesOffset},setMessagesOffset=function(value){messagesOffset=value,stateCache[viewState.id].messagesOffset=value},hasLoadedAllMessages=function(){return loadedAllMessages},setLoadedAllMessages=function(value){loadedAllMessages=value,stateCache[viewState.id].loadedAllMessages=value},formatConversationForEvent=function(state){return{id:state.id,name:state.name,subname:state.subname,imageUrl:state.imageUrl,isFavourite:state.isFavourite,isMuted:state.isMuted,type:state.type,totalMemberCount:state.totalMemberCount,loggedInUserId:state.loggedInUserId,messages:state.messages.map((function(message){return $.extend({},message)})),members:Object.keys(state.members).map((function(id){var formattedMember=$.extend({},state.members[id]);return formattedMember.contactrequests=state.members[id].contactrequests.map((function(request){return $.extend({},request)})),formattedMember}))}},updateStateFromConversation=function(conversation,loggedInUserId){var otherUser=null;if(conversation.type==CONVERSATION_TYPES.PRIVATE){var otherUsers=conversation.members.filter((function(member){return member.id!=loggedInUserId}));otherUser=otherUsers.length?otherUsers[0]:null}else conversation.type==CONVERSATION_TYPES.SELF&amp;&amp;(otherUser=conversation.members[0]);var name=conversation.name,imageUrl=conversation.imageurl;conversation.type!=CONVERSATION_TYPES.PUBLIC&amp;&amp;(name=name||otherUser?otherUser.fullname:"",imageUrl=imageUrl||otherUser?otherUser.profileimageurl:"");var newState=StateManager.addMembers(viewState,conversation.members);return newState=StateManager.setName(newState,name),newState=StateManager.setSubname(newState,conversation.subname),newState=StateManager.setType(newState,conversation.type),newState=StateManager.setImageUrl(newState,imageUrl),newState=StateManager.setTotalMemberCount(newState,conversation.membercount),newState=StateManager.setIsFavourite(newState,conversation.isfavourite),newState=StateManager.setIsMuted(newState,conversation.ismuted),newState=StateManager.addMessages(newState,conversation.messages),newState=StateManager.setCanDeleteMessagesForAllUsers(newState,conversation.candeletemessagesforallusers)},loadMessages=function(conversationId,limit,offset,newestFirst,ignoreList,timeFrom){return Repository.getMessages(viewState.loggedInUserId,conversationId,limit?limit+1:limit,offset,newestFirst,timeFrom).then((function(result){return result.id!=viewState.id&amp;&amp;(result.messages=[],result.id in stateCache&amp;&amp;delete stateCache[result.id]),result})).then((function(result){return result.messages.length&amp;&amp;ignoreList.length&amp;&amp;(result.messages=result.messages.filter((function(message){return ignoreList.indexOf(parseInt(message.id,10))&lt;0}))),result})).then((function(result){return limit?(result.messages.length&gt;limit?result.messages=result.messages.slice(0,-1):setLoadedAllMessages(!0),result):result})).then((function(result){var membersToAdd=result.members.filter((function(member){return!(member.id in viewState.members)})),newState=StateManager.addMembers(viewState,membersToAdd);return newState=StateManager.addMessages(newState,result.messages),newState=StateManager.setLoadingMessages(newState,!1),render(newState).then((function(){return result}))})).catch((function(error){var newState=StateManager.setLoadingMessages(viewState,!1);throw render(newState),error}))},markConversationAsRead=function(conversationId){var loggedInUserId=viewState.loggedInUserId,pendingPromise=new Pending("core_message/message_drawer_view_conversation:markConversationAsRead");return Repository.markAllConversationMessagesAsRead(loggedInUserId,conversationId).then((function(){var newState=StateManager.markMessagesAsRead(viewState,viewState.messages);return PubSub.publish(MessageDrawerEvents.CONVERSATION_READ,conversationId),render(newState)})).then((function(result){return pendingPromise.resolve(),result}))},requestBlockUser=function(userId){cancelRequest(userId);var newState=StateManager.addPendingBlockUsersById(viewState,[userId]);render(newState)},blockUser=function(userId){var newState=StateManager.setLoadingConfirmAction(viewState,!0),pendingPromise=new Pending("core_message/message_drawer_view_conversation:blockUser");return render(newState),Repository.blockUser(viewState.loggedInUserId,userId).then((function(profile){var newState=StateManager.addMembers(viewState,[profile]);return newState=StateManager.removePendingBlockUsersById(newState,[userId]),newState=StateManager.setLoadingConfirmAction(newState,!1),PubSub.publish(MessageDrawerEvents.CONTACT_BLOCKED,userId),render(newState)})).then((function(result){return pendingPromise.resolve(),result}))},requestUnblockUser=function(userId){cancelRequest(userId);var newState=StateManager.addPendingUnblockUsersById(viewState,[userId]);render(newState)},unblockUser=function(userId){var newState=StateManager.setLoadingConfirmAction(viewState,!0),pendingPromise=new Pending("core_message/message_drawer_view_conversation:unblockUser");return render(newState),Repository.unblockUser(viewState.loggedInUserId,userId).then((function(profile){var newState=StateManager.addMembers(viewState,[profile]);return newState=StateManager.removePendingUnblockUsersById(newState,[userId]),newState=StateManager.setLoadingConfirmAction(newState,!1),PubSub.publish(MessageDrawerEvents.CONTACT_UNBLOCKED,userId),render(newState)})).then((function(result){return pendingPromise.resolve(),result}))},requestRemoveContact=function(userId){cancelRequest(userId);var newState=StateManager.addPendingRemoveContactsById(viewState,[userId]);render(newState)},removeContact=function(userId){var newState=StateManager.setLoadingConfirmAction(viewState,!0),pendingPromise=new Pending("core_message/message_drawer_view_conversation:removeContact");return render(newState),Repository.deleteContacts(viewState.loggedInUserId,[userId]).then((function(profiles){var newState=StateManager.addMembers(viewState,profiles);return newState=StateManager.removePendingRemoveContactsById(newState,[userId]),newState=StateManager.setLoadingConfirmAction(newState,!1),PubSub.publish(MessageDrawerEvents.CONTACT_REMOVED,userId),render(newState)})).then((function(result){return pendingPromise.resolve(),result}))},requestAddContact=function(userId){cancelRequest(userId);var newState=StateManager.addPendingAddContactsById(viewState,[userId]);render(newState)},addContact=function(userId){var newState=StateManager.setLoadingConfirmAction(viewState,!0),pendingPromise=new Pending("core_message/message_drawer_view_conversation:addContactRequests");return render(newState),Repository.createContactRequest(viewState.loggedInUserId,userId).then((function(response){if(!response.request)throw new Error(response.warnings[0].message);return response.request})).then((function(request){var newState=StateManager.removePendingAddContactsById(viewState,[userId]);return newState=StateManager.addContactRequests(newState,[request]),newState=StateManager.setLoadingConfirmAction(newState,!1),render(newState)})).then((function(result){return pendingPromise.resolve(),result}))},requestDeleteSelectedMessages=function(userId){var selectedMessageIds=viewState.selectedMessageIds;cancelRequest(userId);var newState=StateManager.addPendingDeleteMessagesById(viewState,selectedMessageIds);render(newState)},deleteSelectedMessages=function(){var pendingPromise=new Pending("core_message/message_drawer_view_conversation:deleteSelectedMessages"),messageIds=viewState.pendingDeleteMessageIds,sentMessages=viewState.messages.filter((function(message){return messageIds.indexOf(message.id)&gt;=0&amp;&amp;("sent"==message.sendState||null===message.sendState)})),newState=StateManager.setLoadingConfirmAction(viewState,!0);render(newState);var deleteMessagesPromise=$.Deferred().resolve().promise();if(sentMessages.length){var sentMessageIds=sentMessages.map((function(message){return message.id}));deleteMessagesPromise=newState.deleteMessagesForAllUsers?Repository.deleteMessagesForAllUsers(viewState.loggedInUserId,sentMessageIds):Repository.deleteMessages(viewState.loggedInUserId,sentMessageIds)}return isDeletingConversationContent=!0,newMessagesPollTimer&amp;&amp;newMessagesPollTimer.stop(),deleteMessagesPromise.then((function(){var newState=StateManager.removeMessagesById(viewState,messageIds);newState=StateManager.removePendingDeleteMessagesById(newState,messageIds),newState=StateManager.removeSelectedMessagesById(newState,messageIds),newState=StateManager.setLoadingConfirmAction(newState,!1),newState=StateManager.setDeleteMessagesForAllUsers(newState,!1);var prevLastMessage=viewState.messages[viewState.messages.length-1],newLastMessage=newState.messages.length?newState.messages[newState.messages.length-1]:null;if(newLastMessage&amp;&amp;newLastMessage.id!=prevLastMessage.id){var conversation=formatConversationForEvent(newState);PubSub.publish(MessageDrawerEvents.CONVERSATION_NEW_LAST_MESSAGE,conversation)}else newState.messages.length||PubSub.publish(MessageDrawerEvents.CONVERSATION_DELETED,newState.id);return isDeletingConversationContent=!1,render(newState)})).then((function(result){return pendingPromise.resolve(),result})).catch(Notification.exception)},requestDeleteConversation=function(userId){cancelRequest(userId);var newState=StateManager.setPendingDeleteConversation(viewState,!0);render(newState)},deleteConversation=function(){var pendingPromise=new Pending("core_message/message_drawer_view_conversation:markConversationAsRead"),newState=StateManager.setLoadingConfirmAction(viewState,!0);return render(newState),isDeletingConversationContent=!0,newMessagesPollTimer&amp;&amp;newMessagesPollTimer.stop(),Repository.deleteConversation(viewState.loggedInUserId,viewState.id).then((function(){var newState=StateManager.removeMessages(viewState,viewState.messages);return newState=StateManager.removeSelectedMessagesById(newState,viewState.selectedMessageIds),newState=StateManager.setPendingDeleteConversation(newState,!1),newState=StateManager.setLoadingConfirmAction(newState,!1),PubSub.publish(MessageDrawerEvents.CONVERSATION_DELETED,newState.id),isDeletingConversationContent=!1,render(newState)})).then((function(result){return pendingPromise.resolve(),result}))},cancelRequest=function(userId){var pendingDeleteMessageIds=viewState.pendingDeleteMessageIds,newState=StateManager.removePendingAddContactsById(viewState,[userId]);newState=StateManager.removePendingRemoveContactsById(newState,[userId]),newState=StateManager.removePendingUnblockUsersById(newState,[userId]),newState=StateManager.removePendingBlockUsersById(newState,[userId]),newState=StateManager.removePendingDeleteMessagesById(newState,pendingDeleteMessageIds),newState=StateManager.setPendingDeleteConversation(newState,!1),newState=StateManager.setDeleteMessagesForAllUsers(newState,!1),render(newState)},acceptContactRequest=function(userId){var pendingPromise=new Pending("core_message/message_drawer_view_conversation:acceptContactRequest"),loggedInUserId=viewState.loggedInUserId,requests=viewState.members[userId].contactrequests.filter((function(request){return request.requesteduserid==loggedInUserId})),request=requests[0],newState=StateManager.setLoadingConfirmAction(viewState,!0);return render(newState),Repository.acceptContactRequest(userId,loggedInUserId).then((function(profile){var newState=StateManager.removeContactRequests(viewState,[request]);return newState=StateManager.addMembers(viewState,[profile]),newState=StateManager.setLoadingConfirmAction(newState,!1),render(newState)})).then((function(){PubSub.publish(MessageDrawerEvents.CONTACT_ADDED,viewState.members[userId]),PubSub.publish(MessageDrawerEvents.CONTACT_REQUEST_ACCEPTED,request)})).then((function(result){return pendingPromise.resolve(),result}))},declineContactRequest=function(userId){var pendingPromise=new Pending("core_message/message_drawer_view_conversation:declineContactRequest"),loggedInUserId=viewState.loggedInUserId,requests=viewState.members[userId].contactrequests.filter((function(request){return request.requesteduserid==loggedInUserId})),request=requests[0],newState=StateManager.setLoadingConfirmAction(viewState,!0);return render(newState),Repository.declineContactRequest(userId,loggedInUserId).then((function(profile){var newState=StateManager.removeContactRequests(viewState,[request]);return newState=StateManager.addMembers(viewState,[profile]),newState=StateManager.setLoadingConfirmAction(newState,!1),render(newState)})).then((function(){PubSub.publish(MessageDrawerEvents.CONTACT_REQUEST_DECLINED,request)})).then((function(result){return pendingPromise.resolve(),result}))},processSendMessageBuffer=function(){if(!isSendingMessage&amp;&amp;sendMessageBuffer.length){var pendingPromise=new Pending("core_message/message_drawer_view_conversation:processSendMessageBuffer");isSendingMessage=!0;var messagesToSend=sendMessageBuffer.slice();sendMessageBuffer=[];var conversationId=viewState.id,newConversationId=null,messagesText=messagesToSend.map((function(message){return message.text})),messageIds=messagesToSend.map((function(message){return message.id})),sendMessagePromise=null,newCanDeleteMessagesForAllUsers=null;if(conversationId||viewState.type==CONVERSATION_TYPES.PUBLIC)sendMessagePromise=Repository.sendMessagesToConversation(conversationId,messagesText);else{var otherUserId=getOtherUserId();sendMessagePromise=Repository.sendMessagesToUser(otherUserId,messagesText).then((function(messages){return messages.length&amp;&amp;(newConversationId=parseInt(messages[0].conversationid,10),newCanDeleteMessagesForAllUsers=messages[0].candeletemessagesforallusers),messages}))}sendMessagePromise.then((function(messages){var newMessageIds=messages.map((function(message){return message.id})),data=[],selectedToRemove=[],selectedToAdd=[];messagesToSend.forEach((function(oldMessage,index){var newMessage=messages[index];data.push([oldMessage,newMessage]),viewState.selectedMessageIds.indexOf(oldMessage.id)&gt;=0&amp;&amp;(selectedToRemove.push(oldMessage.id),selectedToAdd.push(newMessage.id))}));var newState=StateManager.updateMessages(viewState,data);newState=StateManager.setMessagesSendSuccessById(newState,newMessageIds),selectedToRemove.length&amp;&amp;(newState=StateManager.removeSelectedMessagesById(newState,selectedToRemove)),selectedToAdd.length&amp;&amp;(newState=StateManager.addSelectedMessagesById(newState,selectedToAdd));var conversation=formatConversationForEvent(newState);newState.id||(newState=StateManager.setId(newState,newConversationId),conversation.id=newConversationId,resetMessagePollTimer(newConversationId),PubSub.publish(MessageDrawerEvents.CONVERSATION_CREATED,conversation),newState=StateManager.setCanDeleteMessagesForAllUsers(newState,newCanDeleteMessagesForAllUsers)),render(newState),isSendingMessage=!1,processSendMessageBuffer(),PubSub.publish(MessageDrawerEvents.CONVERSATION_NEW_LAST_MESSAGE,conversation)})).then((function(result){return pendingPromise.resolve(),result})).catch((function(e){var errorMessage;errorMessage=e.message?$.Deferred().resolve(e.message).promise():Str.get_string("unknownerror","core");var handleFailedMessages=function(errorMessage){var newState=StateManager.setMessagesSendFailById(viewState,messageIds,errorMessage);render(newState),isSendingMessage=!1,processSendMessageBuffer()};errorMessage.then(handleFailedMessages).then((function(result){return pendingPromise.resolve(),result})).catch((function(e){var finalError=e.message||"Something went wrong!";handleFailedMessages(finalError)}))}))}};const previewText=function(text){let plaintext=text.replace(/&lt;style([\s\S]*?)&lt;\/style&gt;/gi,"");return plaintext=plaintext.replace(/&lt;script([\s\S]*?)&lt;\/script&gt;/gi,""),plaintext=plaintext.replace(/&lt;\/div&gt;/gi,"\n"),plaintext=plaintext.replace(/&lt;\/li&gt;/gi,"\n"),plaintext=plaintext.replace(/&lt;li&gt;/gi,"  *  "),plaintext=plaintext.replace(/&lt;\/ul&gt;/gi,"\n"),plaintext=plaintext.replace(/&lt;\/p&gt;/gi,"\n"),plaintext=plaintext.replace(/&lt;br[^&gt;]*&gt;/gi,"\n"),plaintext=plaintext.replace(/&lt;[^&gt;]+&gt;/gi,""),plaintext=plaintext.replace(/\n+/gi,"\n"),plaintext.replace(/\n/gi,"&lt;br&gt;")};var processRenderBuffer=function(header,body,footer){if(!isRendering&amp;&amp;renderBuffer.length){isRendering=!0;var renderable=renderBuffer.shift(),renderPromises=renderers.map((function(renderFunc){return renderFunc(renderable.patch)}));$.when.apply(null,renderPromises).then((function(){isRendering=!1,renderable.deferred.resolve(!0),processRenderBuffer(header,body,footer)})).catch((function(error){isRendering=!1,renderable.deferred.reject(error),Notification.exception(error)}))}},generateConfirmActionHandler=function(actionCallback){return function(e,data){if(!viewState.loadingConfirmAction){actionCallback(getOtherUserId());var newState=StateManager.setLoadingConfirmAction(viewState,!1);render(newState)}data.originalEvent.preventDefault()}},handleSendMessage=function(e,data){var textArea=$(e.target).closest(SELECTORS.FOOTER_CONTAINER).find(SELECTORS.MESSAGE_TEXT_AREA),text=textArea.val().trim();""!==text&amp;&amp;(!function(text){var id="temp"+Date.now();let loadingmessage={id:id,useridfrom:viewState.loggedInUserId,text:previewText(text),timecreated:null};var newState=StateManager.addMessages(viewState,[loadingmessage]);render(newState);var message={id:id,useridfrom:viewState.loggedInUserId,text:text,timecreated:null};sendMessageBuffer.push(message),processSendMessageBuffer()}(text),textArea.val(""),textArea.focus()),data.originalEvent.preventDefault()},handleSelectMessage=function(e,data){var selection=window.getSelection(),target=$(e.target);""==selection.toString()&amp;&amp;(target.is("a")||(!function(messageId){var newState=viewState;newState=viewState.selectedMessageIds.indexOf(messageId)&gt;-1?StateManager.removeSelectedMessagesById(viewState,[messageId]):StateManager.addSelectedMessagesById(viewState,[messageId]),render(newState)}(target.closest(SELECTORS.MESSAGE).attr("data-message-id")),data.originalEvent.preventDefault()))},handleRetrySendMessage=function(e,data){var messageId=$(e.target).closest(SELECTORS.MESSAGE).attr("data-message-id"),messages=viewState.messages.filter((function(message){return message.id==messageId})),message=messages.length?messages[0]:null;message&amp;&amp;function(message){var newState=StateManager.setMessagesSendPendingById(viewState,[message.id]);render(newState),sendMessageBuffer.push(message),processSendMessageBuffer()}(message),data.originalEvent.preventDefault(),data.originalEvent.stopPropagation(),e.stopPropagation()},handleCancelEditMode=function(e,data){!function(){cancelRequest(getOtherUserId());var newState=StateManager.removeSelectedMessagesById(viewState,viewState.selectedMessageIds);render(newState)}(),data.originalEvent.preventDefault()},generateHandleViewContact=function(namespace){return function(e,data){var otherUserId=getOtherUserId(),otherUser=viewState.members[otherUserId];MessageDrawerRouter.go(namespace,MessageDrawerRoutes.VIEW_CONTACT,otherUser),data.originalEvent.preventDefault()}},handleSetFavourite=function(e,data){var userId,conversationId,pendingPromise;(userId=viewState.loggedInUserId,conversationId=viewState.id,pendingPromise=new Pending("core_message/message_drawer_view_conversation:setFavourite"),Repository.setFavouriteConversations(userId,[conversationId]).then((function(){var newState=StateManager.setIsFavourite(viewState,!0);return render(newState)})).then((function(){return PubSub.publish(MessageDrawerEvents.CONVERSATION_SET_FAVOURITE,formatConversationForEvent(viewState))})).then((function(result){return pendingPromise.resolve(),result}))).catch(Notification.exception),data.originalEvent.preventDefault()},handleUnsetFavourite=function(e,data){var userId,conversationId,pendingPromise;(userId=viewState.loggedInUserId,conversationId=viewState.id,pendingPromise=new Pending("core_message/message_drawer_view_conversation:unsetFavourite"),Repository.unsetFavouriteConversations(userId,[conversationId]).then((function(){var newState=StateManager.setIsFavourite(viewState,!1);return render(newState)})).then((function(){return PubSub.publish(MessageDrawerEvents.CONVERSATION_UNSET_FAVOURITE,formatConversationForEvent(viewState))})).then((function(result){return pendingPromise.resolve(),result}))).catch(Notification.exception),data.originalEvent.preventDefault()},handleSetMuted=function(e,data){var userId,conversationId,pendingPromise;(userId=viewState.loggedInUserId,conversationId=viewState.id,pendingPromise=new Pending("core_message/message_drawer_view_conversation:markConversationAsRead"),Repository.setMutedConversations(userId,[conversationId]).then((function(){var newState=StateManager.setIsMuted(viewState,!0);return render(newState)})).then((function(){return PubSub.publish(MessageDrawerEvents.CONVERSATION_SET_MUTED,formatConversationForEvent(viewState))})).then((function(result){return pendingPromise.resolve(),result}))).catch(Notification.exception),data.originalEvent.preventDefault()},handleUnsetMuted=function(e,data){var userId,conversationId;(userId=viewState.loggedInUserId,conversationId=viewState.id,Repository.unsetMutedConversations(userId,[conversationId]).then((function(){var newState=StateManager.setIsMuted(viewState,!1);return render(newState)})).then((function(){return PubSub.publish(MessageDrawerEvents.CONVERSATION_UNSET_MUTED,formatConversationForEvent(viewState))}))).catch(Notification.exception),data.originalEvent.preventDefault()},handleDeleteMessagesForAllUsersToggle=function(e){var newValue=$(e.target).prop("checked"),newState=StateManager.setDeleteMessagesForAllUsers(viewState,newValue);render(newState)},generateHandleViewGroupInfo=function(namespace){return function(e,data){MessageDrawerRouter.go(namespace,MessageDrawerRoutes.VIEW_GROUP_INFO,{id:viewState.id,name:viewState.name,subname:viewState.subname,imageUrl:viewState.imageUrl,totalMemberCount:viewState.totalMemberCount},viewState.loggedInUserId),data.originalEvent.preventDefault()}},handleToggleEmojiPicker=function(e,data){var newState=StateManager.setShowEmojiPicker(viewState,!viewState.showEmojiPicker);render(newState),data.originalEvent.preventDefault()},handleCloseEmojiPicker=function(e){var target=$(e.target);if(viewState.showEmojiPicker&amp;&amp;!target.closest(SELECTORS.EMOJI_PICKER_CONTAINER).length&amp;&amp;!target.closest(SELECTORS.TOGGLE_EMOJI_PICKER_BUTTON).length){var newState=StateManager.setShowEmojiPicker(viewState,!1);render(newState)}},registerEventListeners=function(namespace,header,body,footer){var isLoadingMoreMessages=!1,messagesContainer=function(body){return body.find(SELECTORS.MESSAGES_CONTAINER)}(body),emojiPickerElement=footer.find(SELECTORS.EMOJI_PICKER),emojiAutoCompleteContainer=footer.find(SELECTORS.EMOJI_AUTO_COMPLETE_CONTAINER),messageTextArea=footer.find(SELECTORS.MESSAGE_TEXT_AREA),headerActivateHandlers=[[SELECTORS.ACTION_REQUEST_BLOCK,generateConfirmActionHandler(requestBlockUser)],[SELECTORS.ACTION_REQUEST_UNBLOCK,generateConfirmActionHandler(requestUnblockUser)],[SELECTORS.ACTION_REQUEST_ADD_CONTACT,generateConfirmActionHandler(requestAddContact)],[SELECTORS.ACTION_REQUEST_REMOVE_CONTACT,generateConfirmActionHandler(requestRemoveContact)],[SELECTORS.ACTION_REQUEST_DELETE_CONVERSATION,generateConfirmActionHandler(requestDeleteConversation)],[SELECTORS.ACTION_CANCEL_EDIT_MODE,handleCancelEditMode],[SELECTORS.ACTION_VIEW_CONTACT,generateHandleViewContact(namespace)],[SELECTORS.ACTION_VIEW_GROUP_INFO,generateHandleViewGroupInfo(namespace)],[SELECTORS.ACTION_CONFIRM_FAVOURITE,handleSetFavourite],[SELECTORS.ACTION_CONFIRM_MUTE,handleSetMuted],[SELECTORS.ACTION_CONFIRM_UNFAVOURITE,handleUnsetFavourite],[SELECTORS.ACTION_CONFIRM_UNMUTE,handleUnsetMuted]],bodyActivateHandlers=[[SELECTORS.ACTION_CANCEL_CONFIRM,generateConfirmActionHandler(cancelRequest)],[SELECTORS.ACTION_CONFIRM_BLOCK,generateConfirmActionHandler(blockUser)],[SELECTORS.ACTION_CONFIRM_UNBLOCK,generateConfirmActionHandler(unblockUser)],[SELECTORS.ACTION_CONFIRM_ADD_CONTACT,generateConfirmActionHandler(addContact)],[SELECTORS.ACTION_CONFIRM_REMOVE_CONTACT,generateConfirmActionHandler(removeContact)],[SELECTORS.ACTION_CONFIRM_DELETE_SELECTED_MESSAGES,generateConfirmActionHandler(deleteSelectedMessages)],[SELECTORS.ACTION_CONFIRM_DELETE_CONVERSATION,generateConfirmActionHandler(deleteConversation)],[SELECTORS.ACTION_OKAY_CONFIRM,generateConfirmActionHandler(cancelRequest)],[SELECTORS.ACTION_REQUEST_ADD_CONTACT,generateConfirmActionHandler(requestAddContact)],[SELECTORS.ACTION_ACCEPT_CONTACT_REQUEST,generateConfirmActionHandler(acceptContactRequest)],[SELECTORS.ACTION_DECLINE_CONTACT_REQUEST,generateConfirmActionHandler(declineContactRequest)],[SELECTORS.MESSAGE,handleSelectMessage],[SELECTORS.DELETE_MESSAGES_FOR_ALL_USERS_TOGGLE,handleDeleteMessagesForAllUsersToggle],[SELECTORS.RETRY_SEND,handleRetrySendMessage]],footerActivateHandlers=[[SELECTORS.SEND_MESSAGE_BUTTON,handleSendMessage],[SELECTORS.TOGGLE_EMOJI_PICKER_BUTTON,handleToggleEmojiPicker],[SELECTORS.ACTION_REQUEST_DELETE_SELECTED_MESSAGES,generateConfirmActionHandler(requestDeleteSelectedMessages)],[SELECTORS.ACTION_REQUEST_ADD_CONTACT,generateConfirmActionHandler(requestAddContact)],[SELECTORS.ACTION_REQUEST_UNBLOCK,generateConfirmActionHandler(requestUnblockUser)]];AutoRows.init(footer),emojiAutoCompleteContainer.length&amp;&amp;initialiseEmojiAutoComplete(emojiAutoCompleteContainer[0],messageTextArea[0],(function(hasSuggestions){var newState=StateManager.setShowEmojiAutoComplete(viewState,hasSuggestions);render(newState)}),(function(emoji){var newState=StateManager.setShowEmojiAutoComplete(viewState,!1);render(newState),messageTextArea.focus();var cursorPos=messageTextArea.prop("selectionStart"),currentText=messageTextArea.val(),textBefore=currentText.substring(0,cursorPos).replace(/\S*$/,""),textAfter=currentText.substring(cursorPos).replace(/^\S*/,"");messageTextArea.val(textBefore+emoji+textAfter),messageTextArea.prop("selectionStart",textBefore.length+emoji.length),messageTextArea.prop("selectionEnd",textBefore.length+emoji.length)})),emojiPickerElement.length&amp;&amp;initialiseEmojiPicker(emojiPickerElement[0],(function(emoji){var newState=StateManager.setShowEmojiPicker(viewState,!viewState.showEmojiPicker);render(newState),messageTextArea.focus();var cursorPos=messageTextArea.prop("selectionStart"),currentText=messageTextArea.val(),textBefore=currentText.substring(0,cursorPos),textAfter=currentText.substring(cursorPos,currentText.length);messageTextArea.val(textBefore+emoji+textAfter),messageTextArea.prop("selectionStart",cursorPos+emoji.length),messageTextArea.prop("selectionEnd",cursorPos+emoji.length)})),CustomEvents.define(header,[CustomEvents.events.activate]),CustomEvents.define(body,[CustomEvents.events.activate]),CustomEvents.define(footer,[CustomEvents.events.activate,CustomEvents.events.enter,CustomEvents.events.escape]),CustomEvents.define(messagesContainer,[CustomEvents.events.scrollTop,CustomEvents.events.scrollLock]),messagesContainer.on(CustomEvents.events.scrollTop,(function(e,data){var hasMembers=Object.keys(viewState.members).length&gt;1;if(!isResetting&amp;&amp;!isLoadingMoreMessages&amp;&amp;!hasLoadedAllMessages()&amp;&amp;hasMembers){isLoadingMoreMessages=!0;var newState=StateManager.setLoadingMessages(viewState,!0);render(newState),loadMessages(viewState.id,LOAD_MESSAGE_LIMIT,getMessagesOffset(),NEWEST_FIRST,[]).then((function(){isLoadingMoreMessages=!1,setMessagesOffset(getMessagesOffset()+LOAD_MESSAGE_LIMIT)})).catch((function(error){isLoadingMoreMessages=!1,Notification.exception(error)}))}data.originalEvent.preventDefault()})),headerActivateHandlers.forEach((function(handler){var selector=handler[0],handlerFunction=handler[1];header.on(CustomEvents.events.activate,selector,handlerFunction)})),bodyActivateHandlers.forEach((function(handler){var selector=handler[0],handlerFunction=handler[1];body.on(CustomEvents.events.activate,selector,handlerFunction)})),footerActivateHandlers.forEach((function(handler){var selector=handler[0],handlerFunction=handler[1];footer.on(CustomEvents.events.activate,selector,handlerFunction)})),footer.on(CustomEvents.events.enter,SELECTORS.MESSAGE_TEXT_AREA,(function(e,data){var enterToSend=footer.attr("data-enter-to-send");enterToSend&amp;&amp;"false"!=enterToSend&amp;&amp;"0"!=enterToSend&amp;&amp;handleSendMessage(e,data)})),footer.on(CustomEvents.events.escape,SELECTORS.EMOJI_PICKER_CONTAINER,handleToggleEmojiPicker),$(document.body).on("click",handleCloseEmojiPicker),PubSub.subscribe(MessageDrawerEvents.ROUTE_CHANGED,(function(newRouteData){newMessagesPollTimer&amp;&amp;newRouteData.route!=MessageDrawerRoutes.VIEW_CONVERSATION&amp;&amp;newMessagesPollTimer.stop()}))},resetMessagePollTimer=function(conversationId){newMessagesPollTimer&amp;&amp;newMessagesPollTimer.stop(),newMessagesPollTimer=new BackOffTimer(function(conversationId,newestFirst){return function(){var messages=viewState.messages,mostRecentMessage=messages.length?messages[messages.length-1]:null,lastTimeCreated=mostRecentMessage?mostRecentMessage.timeCreated:null;if(lastTimeCreated&amp;&amp;!isResetting&amp;&amp;!isSendingMessage&amp;&amp;!isDeletingConversationContent){for(var ignoreMessageIds=[],i=messages.length-1;i&gt;=0;i--){var message=messages[i];if(message.timeCreated!==lastTimeCreated)break;ignoreMessageIds.push(message.id)}return loadMessages(conversationId,0,0,newestFirst,ignoreMessageIds,lastTimeCreated).then((function(result){if(result.messages.length){newMessagesPollTimer.restart();var conversation=formatConversationForEvent(viewState);return PubSub.publish(MessageDrawerEvents.CONVERSATION_NEW_LAST_MESSAGE,conversation),markConversationAsRead(conversationId)}return result}))}return $.Deferred().resolve().promise()}}(conversationId,NEWEST_FIRST),BackOffTimer.getIncrementalCallback(viewState.messagePollMin*MILLISECONDS_IN_SEC,MILLISECONDS_IN_SEC,viewState.messagePollMax*MILLISECONDS_IN_SEC,viewState.messagePollAfterMax*MILLISECONDS_IN_SEC)),newMessagesPollTimer.start()},resetState=function(body,conversationId,loggedInUserProfile){newMessagesPollTimer&amp;&amp;newMessagesPollTimer.stop(),loadedAllMessages=!1,messagesOffset=0,newMessagesPollTimer=null,isRendering=!1,renderBuffer=[],isResetting=!0,isSendingMessage=!1,isDeletingConversationContent=!1,sendMessageBuffer=[];var loggedInUserId=loggedInUserProfile.id,midnight=parseInt(body.attr("data-midnight"),10),messagePollMin=parseInt(body.attr("data-message-poll-min"),10),messagePollMax=parseInt(body.attr("data-message-poll-max"),10),messagePollAfterMax=parseInt(body.attr("data-message-poll-after-max"),10),initialState=StateManager.buildInitialState(midnight,loggedInUserId,conversationId,messagePollMin,messagePollMax,messagePollAfterMax);viewState||(viewState=initialState),render(initialState)},resetNoConversation=function(body,loggedInUserProfile,otherUserId){resetState(body,null,loggedInUserProfile);return(loggedInUserProfile.id!=otherUserId?Repository.getConversationBetweenUsers(loggedInUserProfile.id,otherUserId,!0,!0,0,0,LOAD_MESSAGE_LIMIT,0,NEWEST_FIRST):Repository.getSelfConversation(loggedInUserProfile.id,LOAD_MESSAGE_LIMIT,0,NEWEST_FIRST)).then((function(conversation){return resetByConversation(body,conversation,loggedInUserProfile)})).catch((function(){return function(loggedInUserProfile,otherUserId){var loggedInUserId=loggedInUserProfile.id,conversationType=loggedInUserId==otherUserId?CONVERSATION_TYPES.SELF:CONVERSATION_TYPES.PRIVATE,newState=StateManager.setLoadingMembers(viewState,!0);return newState=StateManager.setLoadingMessages(newState,!0),render(newState),Repository.getMemberInfo(loggedInUserId,[otherUserId],!0,!0).then((function(profiles){if(profiles.length)return profiles[0];throw new Error("Unable to load other user profile")})).then((function(profile){var members=conversationType==CONVERSATION_TYPES.SELF?[profile]:[profile,loggedInUserProfile],newState=StateManager.addMembers(viewState,members);return newState=StateManager.setLoadingMembers(newState,!1),newState=StateManager.setLoadingMessages(newState,!1),newState=StateManager.setName(newState,profile.fullname),newState=StateManager.setType(newState,conversationType),newState=StateManager.setImageUrl(newState,profile.profileimageurl),newState=StateManager.setTotalMemberCount(newState,members.length),render(newState),profile})).catch((function(error){var newState=StateManager.setLoadingMembers(viewState,!1);render(newState),Notification.exception(error)}))}(loggedInUserProfile,otherUserId)}))},resetById=function(body,conversationId,loggedInUserProfile){var cache=null;conversationId in stateCache&amp;&amp;(cache=stateCache[conversationId]),resetState(body,conversationId,loggedInUserProfile);var promise=$.Deferred().resolve({}).promise();if(cache){var newState=cache.state;newState=StateManager.setLoadingMessages(newState,!1),newState=StateManager.setLoadingMembers(newState,!1),setMessagesOffset(cache.messagesOffset),setLoadedAllMessages(cache.loadedAllMessages),render(newState)}else promise=function(conversationId,loggedInUserProfile,messageLimit,messageOffset,newestFirst){var loggedInUserId=loggedInUserProfile.id,newState=StateManager.setLoadingMembers(viewState,!0);return newState=StateManager.setLoadingMessages(newState,!0),render(newState),Repository.getConversation(loggedInUserId,conversationId,!0,!0,0,0,messageLimit+1,messageOffset,newestFirst).then((function(conversation){return conversation.messages.length&gt;messageLimit?conversation.messages=conversation.messages.slice(1):setLoadedAllMessages(!0),setMessagesOffset(messageOffset+messageLimit),conversation})).then((function(conversation){conversation.members.filter((function(member){return member.id==loggedInUserProfile.id})).length&lt;1&amp;&amp;(conversation.members=conversation.members.concat([loggedInUserProfile]));var newState=updateStateFromConversation(conversation,loggedInUserProfile.id);return newState=StateManager.setLoadingMembers(newState,!1),newState=StateManager.setLoadingMessages(newState,!1),render(newState).then((function(){return conversation}))})).then((function(){return markConversationAsRead(conversationId)})).catch((function(error){var newState=StateManager.setLoadingMembers(viewState,!1);newState=StateManager.setLoadingMessages(newState,!1),render(newState),Notification.exception(error)}))}(conversationId,loggedInUserProfile,LOAD_MESSAGE_LIMIT,0,NEWEST_FIRST);return promise.then((function(){return resetMessagePollTimer(conversationId)}))},resetByConversation=function(body,conversation,loggedInUserProfile){var cache=null;conversation.id in stateCache&amp;&amp;(cache=stateCache[conversation.id]),resetState(body,conversation.id,loggedInUserProfile);var promise=$.Deferred().resolve({}).promise();if(cache){var newState=cache.state;newState=StateManager.setLoadingMessages(newState,!1),newState=StateManager.setLoadingMembers(newState,!1),setMessagesOffset(cache.messagesOffset),setLoadedAllMessages(cache.loadedAllMessages),render(newState)}else promise=function(conversation,loggedInUserProfile,messageLimit,newestFirst){conversation.members.filter((function(member){return member.id==loggedInUserProfile.id})).length&lt;1&amp;&amp;(conversation.members=conversation.members.concat([loggedInUserProfile]));var messageCount=conversation.messages.length,hasLoadedEnoughMessages=messageCount&gt;=messageLimit,newState=updateStateFromConversation(conversation,loggedInUserProfile.id);return newState=StateManager.setLoadingMembers(newState,!1),newState=StateManager.setLoadingMessages(newState,!hasLoadedEnoughMessages),render(newState).then((function(){return hasLoadedEnoughMessages?{messages:conversation.messages}:loadMessages(conversation.id,messageLimit,messageCount,newestFirst,[])})).then((function(){var messages=viewState.messages;return setMessagesOffset(messages.length),markConversationAsRead(viewState.id),messages})).catch(Notification.exception)}(conversation,loggedInUserProfile,LOAD_MESSAGE_LIMIT,NEWEST_FIRST);return promise.then((function(){return resetMessagePollTimer(conversation.id)}))};return{show:function(namespace,header,body,footer,conversationOrId,action,otherUserId){var userId,conversation=null,conversationId=null;conversationOrId&amp;&amp;null!==conversationOrId&amp;&amp;"object"==typeof conversationOrId?(conversation=conversationOrId,conversationId=parseInt(conversation.id,10)):(conversation=null,conversationId=parseInt(conversationOrId,10),conversationId=isNaN(conversationId)?null:conversationId),!conversationId&amp;&amp;action&amp;&amp;otherUserId&amp;&amp;(userId=otherUserId,conversationId=Object.keys(stateCache).reduce((function(carry,id){if(!carry){var state=stateCache[id].state;state.type!=CONVERSATION_TYPES.PUBLIC&amp;&amp;userId in state.members&amp;&amp;(carry=state.id)}return carry}),null));var isNewConversation=!viewState||viewState.id!=conversationId||otherUserId&amp;&amp;otherUserId!=getOtherUserId();if(body.attr("data-init")||(render=function(header,body,footer,isNewConversation){var rendererFunc=function(patch){return Renderer.render(header,body,footer,patch)};if(!isNewConversation){var initialState=StateManager.buildInitialState(viewState.midnight,viewState.loggedInUserId,viewState.id);rendererFunc(Patcher.buildPatch(initialState,viewState))}return renderers.push(rendererFunc),function(newState){var patch=Patcher.buildPatch(viewState,newState),deferred=$.Deferred();return Object.keys(patch).length?renderBuffer.push({patch:patch,deferred:deferred}):deferred.resolve(!0),viewState=newState,newState.id&amp;&amp;(stateCache[newState.id]={state:newState,messagesOffset:getMessagesOffset(),loadedAllMessages:hasLoadedAllMessages()}),processRenderBuffer(header,body,footer),deferred.promise()}}(header,body,footer,isNewConversation),registerEventListeners(namespace,header,body,footer),body.attr("data-init",!0)),isNewConversation){var loggedInUserProfile=function(body){return{id:parseInt(body.attr("data-user-id"),10),fullname:null,profileimageurl:null,profileimageurlsmall:null,isonline:null,showonlinestatus:null,isblocked:null,iscontact:null,isdeleted:null,canmessage:null,canmessageevenifblocked:null,requirescontact:null,contactrequests:[]}}(body);return(conversation?resetByConversation(body,conversation,loggedInUserProfile,otherUserId):conversationId?resetById(body,conversationId,loggedInUserProfile):resetNoConversation(body,loggedInUserProfile,otherUserId)).then((function(){isResetting=!1,header.find(Constants.SELECTORS.CAN_RECEIVE_FOCUS).first().focus()})).catch((function(error){isResetting=!1,Notification.exception(error)}))}if(resetMessagePollTimer(conversationId),viewState.type==CONVERSATION_TYPES.PRIVATE&amp;&amp;action){var currentOtherUserId=getOtherUserId();switch(action){case"block":return requestBlockUser(currentOtherUserId);case"unblock":return requestUnblockUser(currentOtherUserId);case"add-contact":return requestAddContact(currentOtherUserId);case"remove-contact":return requestRemoveContact(currentOtherUserId)}}return $.Deferred().resolve().promise()},description:function(){return Str.get_string("messagedrawerviewconversation","core_message",viewState.name)}}}));
/**
 * Controls the settings page in the message drawer.
 *
 * @module     core_message/message_drawer_view_settings
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core_message/message_drawer_view_settings",["jquery","core/notification","core/str","core/pubsub","core/templates","core_message/message_repository","core/custom_interaction_events","core_message/message_drawer_events"],(function($,Notification,Str,PubSub,Templates,Repository,CustomEvents,MessageDrawerEvents){var SELECTORS_CHECKBOX='input[type="checkbox"]',SELECTORS_SETTINGS='[data-region="settings"]',SELECTORS_PRIVACY_PREFERENCE='[data-preference="blocknoncontacts"] input[type="radio"]',SELECTORS_NOTIFICATIONS_PREFERENCE='[data-preference="notifications"] input[type="checkbox"]',SELECTORS_ENTER_TO_SEND_PREFERENCE='[data-preference="entertosend"] input[type="checkbox"]',SELECTORS_NOTIFICATION_PREFERENCES_CONTAINER='[data-region="notification-preference-container"]',SELECTORS_CONTENT_CONTAINER='[data-region="content-container"]',SELECTORS_PLACEHOLDER_CONTAINER='[data-region="placeholder-container"]',TEMPLATES_NOTIFICATION_PREFERENCES="core_message/message_drawer_view_settings_body_content_notification_preferences",savePreferences=function(loggedInUserId,preferences){return Repository.savePreferences(loggedInUserId,preferences).then((function(){PubSub.publish(MessageDrawerEvents.PREFERENCES_UPDATED,preferences)})).catch(Notification.exception)},init=function(body,loggedInUserId){Repository.getUserMessagePreferences(loggedInUserId).then((function(response){!function(body,value){body.find(SELECTORS_PRIVACY_PREFERENCE).each((function(index,input){(input=$(input)).val()==value?input.prop("checked",!0):input.prop("checked",!1)}))}(body,response.blocknoncontacts),function(body,value){var checkbox=body.find(SELECTORS_ENTER_TO_SEND_PREFERENCE);value?checkbox.prop("checked",!0):checkbox.prop("checked",!1)}(body,response.entertosend);var notificationProcessors=[];response.preferences.components.length&amp;&amp;response.preferences.components.forEach((function(component){if(component.notifications.length&amp;&amp;component.notifications.filter((function(notification){return"message_provider_moodle_instantmessage"==notification.preferencekey})).length){var configuration=component.notifications[0];notificationProcessors=configuration.processors.map((function(processor){var checked=processor.enabled;return{displayname:processor.displayname,name:processor.name,checked:checked,locked:processor.locked,lockedmessage:processor.lockedmessage||null}}))}}));var container=body.find(SELECTORS_NOTIFICATION_PREFERENCES_CONTAINER);return!notificationProcessors.length||(container.removeClass("hidden"),Templates.render(TEMPLATES_NOTIFICATION_PREFERENCES,{processors:notificationProcessors}).then((function(html){return container.append(html),html})))})).then((function(){body.find(SELECTORS_CONTENT_CONTAINER).removeClass("hidden"),body.find(SELECTORS_PLACEHOLDER_CONTAINER).addClass("hidden"),function(body,loggedInUserId){var settingsContainer=body.find(SELECTORS_SETTINGS);CustomEvents.define(settingsContainer,[CustomEvents.events.activate]),settingsContainer.on(CustomEvents.events.activate,SELECTORS_NOTIFICATIONS_PREFERENCE,(function(e){var checkboxes=$(e.target).closest(SELECTORS_NOTIFICATION_PREFERENCES_CONTAINER).find(SELECTORS_CHECKBOX);if(checkboxes.length){var values=checkboxes.toArray().reduce((function(carry,checkbox){return(checkbox=$(checkbox)).prop("checked")&amp;&amp;carry.push(checkbox.attr("data-name")),carry}),[]),newValue=values.length?values.join(","):"none";savePreferences(loggedInUserId,[{type:"message_provider_moodle_instantmessage_enabled",value:newValue}])}})),settingsContainer.on("change",SELECTORS_PRIVACY_PREFERENCE,(function(e){var newValue=$(e.target).val();savePreferences(loggedInUserId,[{type:"message_blocknoncontacts",value:newValue}])})),settingsContainer.on(CustomEvents.events.activate,SELECTORS_ENTER_TO_SEND_PREFERENCE,(function(e){var newValue=$(e.target).prop("checked");savePreferences(loggedInUserId,[{type:"message_entertosend",value:newValue}])}))}(body,loggedInUserId)})).catch(Notification.exception)};return{show:function(namespace,header,body,footer,loggedInUserId){return body.attr("data-init")||(init(body,loggedInUserId),body.attr("data-init",!0)),$.Deferred().resolve().promise()},description:function(){return Str.get_string("messagedrawerviewsettings","core_message")}}}));
/**
 * Retrieves messages from the server.
 *
 * @module     core_message/message_repository
 * @copyright  2016 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core_message/message_repository",["jquery","core/ajax","core/notification","core_message/message_drawer_view_conversation_constants"],(function($,Ajax,Notification,Constants){var CONVERSATION_TYPES=Constants.CONVERSATION_TYPES,sendMessagesToUser=function(toUserId,messages){var request={methodname:"core_message_send_instant_messages",args:{messages:messages.map((function(message){return{touserid:toUserId,text:message}}))}};return Ajax.call([request])[0].then((function(results){var errors=results.reduce((function(carry,result){return result.errormessage&amp;&amp;carry.push(result.errormessage),carry}),[]);if(errors.length)throw new Error(errors.join("\n"));return results})).then((function(results){return results.map((function(result){return{id:result.msgid,text:result.text,timecreated:result.timecreated,useridfrom:result.useridfrom,conversationid:result.conversationid,candeletemessagesforallusers:result.candeletemessagesforallusers}}))}))},sendMessagesToConversation=function(conversationId,messages){var request={methodname:"core_message_send_messages_to_conversation",args:{conversationid:conversationId,messages:messages.map((function(message){return{text:message}}))}};return Ajax.call([request])[0]};return{countUnreadConversations:function(args){var request={methodname:"core_message_get_unread_conversations_count",args:args},promise=Ajax.call([request])[0];return promise.fail(Notification.exception),promise},getContacts:function(userId,limit,offset){var args={userid:userId};void 0!==limit&amp;&amp;(args.limitnum=limit),void 0!==offset&amp;&amp;(args.limitfrom=offset);var request={methodname:"core_message_get_user_contacts",args:args};return Ajax.call([request])[0]},blockUser:function(userId,blockedUserId){var requests=[{methodname:"core_message_block_user",args:{userid:userId,blockeduserid:blockedUserId}},{methodname:"core_message_get_member_info",args:{referenceuserid:userId,userids:[blockedUserId],includecontactrequests:!0,includeprivacyinfo:!0}}];return $.when.apply(null,Ajax.call(requests)).then((function(reponse1,profiles){return profiles.length?profiles[0]:{}}))},unblockUser:function(userId,unblockedUserId){var requests=[{methodname:"core_message_unblock_user",args:{userid:userId,unblockeduserid:unblockedUserId}},{methodname:"core_message_get_member_info",args:{referenceuserid:userId,userids:[unblockedUserId],includecontactrequests:!0,includeprivacyinfo:!0}}];return $.when.apply(null,Ajax.call(requests)).then((function(reponse1,profiles){return profiles.length?profiles[0]:{}}))},createContactRequest:function(userId,requestUserIds){var request={methodname:"core_message_create_contact_request",args:{userid:userId,requesteduserid:requestUserIds}};return Ajax.call([request])[0]},deleteContacts:function(userId,contactUserIds){var requests=[{methodname:"core_message_delete_contacts",args:{userid:userId,userids:contactUserIds}},{methodname:"core_message_get_member_info",args:{referenceuserid:userId,userids:contactUserIds,includecontactrequests:!0,includeprivacyinfo:!0}}];return $.when.apply(null,Ajax.call(requests)).then((function(response1,profiles){return profiles}))},getMessages:function(currentUserId,conversationId,limit,offset,newestFirst,timeFrom){var args={currentuserid:currentUserId,convid:conversationId,newest:!!newestFirst};void 0!==limit&amp;&amp;(args.limitnum=limit),void 0!==offset&amp;&amp;(args.limitfrom=offset),void 0!==timeFrom&amp;&amp;(args.timefrom=timeFrom);var request={methodname:"core_message_get_conversation_messages",args:args};return Ajax.call([request])[0]},searchUsers:function(userId,searchString,limit,offset){var args={userid:userId,search:searchString};void 0!==limit&amp;&amp;(args.limitnum=limit),void 0!==offset&amp;&amp;(args.limitfrom=offset);var request={methodname:"core_message_message_search_users",args:args};return Ajax.call([request])[0]},searchMessages:function(userId,searchString,limit,offset){var args={userid:userId,search:searchString};void 0!==limit&amp;&amp;(args.limitnum=limit),void 0!==offset&amp;&amp;(args.limitfrom=offset);var request={methodname:"core_message_data_for_messagearea_search_messages",args:args};return Ajax.call([request])[0]},sendMessagesToUser:sendMessagesToUser,sendMessageToUser:function(toUserId,text){return sendMessagesToUser(toUserId,[text]).then((function(results){return results[0]}))},sendMessagesToConversation:sendMessagesToConversation,sendMessageToConversation:function(conversationId,text){return sendMessagesToConversation(conversationId,[text]).then((function(result){return result[0]}))},savePreferences:function(userId,preferences){var request={methodname:"core_user_update_user_preferences",args:{userid:userId,preferences:preferences}};return Ajax.call([request])[0]},getPreferences:function(userId){var request={methodname:"core_user_get_user_preferences",args:{userid:userId}};return Ajax.call([request])[0]},deleteMessages:function(userId,messageIds){return $.when.apply(null,Ajax.call(messageIds.map((function(messageId){return{methodname:"core_message_delete_message",args:{messageid:messageId,userid:userId}}}))))},deleteMessagesForAllUsers:function(userId,messageIds){return $.when.apply(null,Ajax.call(messageIds.map((function(messageId){return{methodname:"core_message_delete_message_for_all_users",args:{messageid:messageId,userid:userId}}}))))},deleteConversation:function(userId,conversationId){var request={methodname:"core_message_delete_conversations_by_id",args:{userid:userId,conversationids:[conversationId]}};return Ajax.call([request])[0]},getContactRequests:function(userId){var request={methodname:"core_message_get_contact_requests",args:{userid:userId}};return Ajax.call([request])[0]},acceptContactRequest:function(sendingUserId,recipientUserId){var requests=[{methodname:"core_message_confirm_contact_request",args:{userid:sendingUserId,requesteduserid:recipientUserId}},{methodname:"core_message_get_member_info",args:{referenceuserid:recipientUserId,userids:[sendingUserId],includecontactrequests:!0,includeprivacyinfo:!0}}];return $.when.apply(null,Ajax.call(requests)).then((function(reponse1,profiles){return profiles.length?profiles[0]:{}}))},declineContactRequest:function(sendingUserId,recipientUserId){var requests=[{methodname:"core_message_decline_contact_request",args:{userid:sendingUserId,requesteduserid:recipientUserId}},{methodname:"core_message_get_member_info",args:{referenceuserid:recipientUserId,userids:[sendingUserId],includecontactrequests:!0,includeprivacyinfo:!0}}];return $.when.apply(null,Ajax.call(requests)).then((function(reponse1,profiles){return profiles.length?profiles[0]:{}}))},getConversation:function(loggedInUserId,conversationId,includeContactRequests,includePrivacyInfo,memberLimit,memberOffset,messageLimit,messageOffset,newestMessagesFirst){var args={userid:loggedInUserId,conversationid:conversationId};null!=includeContactRequests&amp;&amp;(args.includecontactrequests=includeContactRequests),null!=includePrivacyInfo&amp;&amp;(args.includeprivacyinfo=includePrivacyInfo),null!=memberLimit&amp;&amp;(args.memberlimit=memberLimit),null!=memberOffset&amp;&amp;(args.memberoffset=memberOffset),null!=messageLimit&amp;&amp;(args.messagelimit=messageLimit),null!=messageOffset&amp;&amp;(args.messageoffset=messageOffset),null!=newestMessagesFirst&amp;&amp;(args.newestmessagesfirst=newestMessagesFirst);var request={methodname:"core_message_get_conversation",args:args};return Ajax.call([request])[0]},getConversationBetweenUsers:function(loggedInUserId,otherUserId,includeContactRequests,includePrivacyInfo,memberLimit,memberOffset,messageLimit,messageOffset,newestMessagesFirst){var args={userid:loggedInUserId,otheruserid:otherUserId};null!=includeContactRequests&amp;&amp;(args.includecontactrequests=includeContactRequests),null!=includePrivacyInfo&amp;&amp;(args.includeprivacyinfo=includePrivacyInfo),null!=memberLimit&amp;&amp;(args.memberlimit=memberLimit),null!=memberOffset&amp;&amp;(args.memberoffset=memberOffset),null!=messageLimit&amp;&amp;(args.messagelimit=messageLimit),null!=messageOffset&amp;&amp;(args.messageoffset=messageOffset),null!=newestMessagesFirst&amp;&amp;(args.newestmessagesfirst=newestMessagesFirst);var request={methodname:"core_message_get_conversation_between_users",args:args};return Ajax.call([request])[0]},getSelfConversation:function(loggedInUserId,messageLimit,messageOffset,newestMessagesFirst){var args={userid:loggedInUserId};null!=messageLimit&amp;&amp;(args.messagelimit=messageLimit),null!=messageOffset&amp;&amp;(args.messageoffset=messageOffset),null!=newestMessagesFirst&amp;&amp;(args.newestmessagesfirst=newestMessagesFirst);var request={methodname:"core_message_get_self_conversation",args:args};return Ajax.call([request])[0]},getConversations:function(userId,type,limit,offset,favourites,mergeself){var args={userid:userId,type:type};null!=limit&amp;&amp;(args.limitnum=limit),null!=offset&amp;&amp;(args.limitfrom=offset),null!=favourites&amp;&amp;(args.favourites=favourites),null!=mergeself&amp;&amp;(args.mergeself=mergeself);var request={methodname:"core_message_get_conversations",args:args};return Ajax.call([request])[0].then((function(result){return result.conversations.length&amp;&amp;(result.conversations=result.conversations.map((function(conversation){if(conversation.type==CONVERSATION_TYPES.PRIVATE||conversation.type==CONVERSATION_TYPES.SELF){var otherUser=conversation.members.length?conversation.members[0]:null;otherUser&amp;&amp;(conversation.name=conversation.name?conversation.name:otherUser.fullname,conversation.imageurl=conversation.imageurl?conversation.imageurl:otherUser.profileimageurl)}return conversation}))),result}))},getConversationMembers:function(conversationId,loggedInUserId,limit,offset,includeContactRequests){var args={userid:loggedInUserId,conversationid:conversationId};null!=limit&amp;&amp;(args.limitnum=limit),null!=offset&amp;&amp;(args.limitfrom=offset),null!=includeContactRequests&amp;&amp;(args.includecontactrequests=includeContactRequests);var request={methodname:"core_message_get_conversation_members",args:args};return Ajax.call([request])[0]},setFavouriteConversations:function(userId,conversationIds){var request={methodname:"core_message_set_favourite_conversations",args:{userid:userId,conversations:conversationIds}};return Ajax.call([request])[0]},setMutedConversations:function(userId,conversationIds){var request={methodname:"core_message_mute_conversations",args:{userid:userId,conversationids:conversationIds}};return Ajax.call([request])[0]},unsetFavouriteConversations:function(userId,conversationIds){var request={methodname:"core_message_unset_favourite_conversations",args:{userid:userId,conversations:conversationIds}};return Ajax.call([request])[0]},unsetMutedConversations:function(userId,conversationIds){var request={methodname:"core_message_unmute_conversations",args:{userid:userId,conversationids:conversationIds}};return Ajax.call([request])[0]},getMemberInfo:function(referenceUserId,userIds,includeContactRequests,includePrivacyInfo){var args={referenceuserid:referenceUserId,userids:userIds};void 0!==includeContactRequests&amp;&amp;(args.includecontactrequests=includeContactRequests),void 0!==includePrivacyInfo&amp;&amp;(args.includeprivacyinfo=includePrivacyInfo);var request={methodname:"core_message_get_member_info",args:args};return Ajax.call([request])[0]},markAllConversationMessagesAsRead:function(userId,conversationId){var request={methodname:"core_message_mark_all_conversation_messages_as_read",args:{userid:userId,conversationid:conversationId}};return Ajax.call([request])[0]},getUserMessagePreferences:function(userId){var request={methodname:"core_message_get_user_message_preferences",args:{userid:userId}};return Ajax.call([request])[0]},getTotalConversationCounts:function(userId){var request={methodname:"core_message_get_conversation_counts",args:{userid:userId}};return Ajax.call([request])[0]},getUnreadConversationCounts:function(userId){var request={methodname:"core_message_get_unread_conversation_counts",args:{userid:userId}};return Ajax.call([request])[0]},getAllConversationCounts:function(userId){var requests=[{methodname:"core_message_get_conversation_counts",args:{userid:userId}},{methodname:"core_message_get_unread_conversation_counts",args:{userid:userId}}];return $.when.apply(null,Ajax.call(requests)).then((function(total,unread){return{total:total,unread:unread}}))}}}));
/**
 * Load the settings for a message processor.
 *
 * @module     core_message/notification_processor_settings
 * @copyright  2016 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core_message/notification_processor_settings",["jquery","core/ajax","core/str","core/notification","core/custom_interaction_events","core/modal","core/modal_registry","core/fragment"],(function($,Ajax,Str,Notification,CustomEvents,Modal,ModalRegistry,Fragment){var registered=!1,SELECTORS_SAVE_BUTTON='[data-action="save"]',SELECTORS_CANCEL_BUTTON='[data-action="cancel"]',SELECTORS_PROCESSOR="[data-processor-name]",SELECTORS_PREFERENCE_ROW='[data-region="preference-row"]',NotificationProcessorSettings=function(root){Modal.call(this,root),this.name=null,this.userId=null,this.contextId=null,this.element=null,this.saveButton=this.getFooter().find(SELECTORS_SAVE_BUTTON),this.cancelButton=this.getFooter().find(SELECTORS_CANCEL_BUTTON)};return NotificationProcessorSettings.TYPE="core_message-notification_processor_settings",(NotificationProcessorSettings.prototype=Object.create(Modal.prototype)).constructor=NotificationProcessorSettings,NotificationProcessorSettings.prototype.setUserId=function(id){this.userId=id},NotificationProcessorSettings.prototype.getUserId=function(){return this.userId},NotificationProcessorSettings.prototype.setElement=function(element){this.element=element},NotificationProcessorSettings.prototype.getElement=function(){return this.element},NotificationProcessorSettings.prototype.setName=function(name){this.name=name},NotificationProcessorSettings.prototype.getName=function(){return this.name},NotificationProcessorSettings.prototype.setContextId=function(id){this.contextId=id},NotificationProcessorSettings.prototype.getContextId=function(){return this.contextId},NotificationProcessorSettings.prototype.getForm=function(){return this.getBody().find("form")},NotificationProcessorSettings.prototype.disableButtons=function(){this.saveButton.prop("disabled",!0),this.cancelButton.prop("disabled",!0)},NotificationProcessorSettings.prototype.enableButtons=function(){this.saveButton.prop("disabled",!1),this.cancelButton.prop("disabled",!1)},NotificationProcessorSettings.prototype.loadTitleContent=function(){return this.titlePromise=Str.get_string("processorsettings","message"),this.setTitle(this.titlePromise),this.titlePromise},NotificationProcessorSettings.prototype.loadBodyContent=function(){this.disableButtons();var args={userid:this.getUserId(),type:this.getName()};return this.bodyPromise=Fragment.loadFragment("message","processor_settings",this.getContextId(),args),this.setBody(this.bodyPromise),this.bodyPromise.then(function(){this.enableButtons()}.bind(this)).fail(Notification.exception),this.bodyPromise},NotificationProcessorSettings.prototype.loadAllContent=function(){return $.when(this.loadTitleContent(),this.loadBodyContent())},NotificationProcessorSettings.prototype.show=function(){this.loadAllContent(),Modal.prototype.show.call(this)},NotificationProcessorSettings.prototype.hide=function(){Modal.prototype.hide.call(this),this.setContextId(null),this.setName(null),this.setUserId(null)},NotificationProcessorSettings.prototype.updateConfiguredStatus=function(){var processorHeader=$(this.getElement()).closest(SELECTORS_PROCESSOR);if(!processorHeader.hasClass("unconfigured"))return!1;var processorName=processorHeader.attr("data-processor-name"),request={methodname:"core_message_get_message_processor",args:{name:processorName,userid:this.userId}};return Ajax.call([request])[0].fail(Notification.exception).done((function(result){if(result.userconfigured){var notifications=$(SELECTORS_PREFERENCE_ROW+' [data-processor-name="'+processorName+'"]');processorHeader.removeClass("unconfigured"),notifications.removeClass("disabled")}}))},NotificationProcessorSettings.prototype.registerEventListeners=function(){Modal.prototype.registerEventListeners.call(this),this.getModal().on(CustomEvents.events.activate,SELECTORS_SAVE_BUTTON,function(e,data){this.getForm().submit(),data.originalEvent.preventDefault()}.bind(this)),this.getModal().on("mpp:formsubmitted",function(e){this.hide(),this.updateConfiguredStatus(),e.stopPropagation()}.bind(this)),this.getModal().on(CustomEvents.events.activate,SELECTORS_CANCEL_BUTTON,function(e,data){this.hide(),data.originalEvent.preventDefault(),e.stopPropagation()}.bind(this))},registered||(ModalRegistry.register(NotificationProcessorSettings.TYPE,NotificationProcessorSettings,"core/modal_save_cancel"),registered=!0),NotificationProcessorSettings}));
/**
 * Controls the contacts section of the contacts page.
 *
 * @module     core_message/message_drawer_view_contacts_section_contacts
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core_message/message_drawer_view_contacts_section_contacts",["jquery","core/notification","core/pubsub","core/templates","core_message/message_repository","core_message/message_drawer_events","core_message/message_drawer_lazy_load_list"],(function($,Notification,PubSub,Templates,MessageRepository,Events,LazyLoadList){var SELECTORS_BLOCK_ICON_CONTAINER='[data-region="block-icon-container"]',SELECTORS_CONTACT='[data-region="contact"]',TEMPLATES_CONTACTS_LIST="core_message/message_drawer_contacts_list",findContact=function(body,userId){return body.find('[data-contact-user-id="'+userId+'"]')},render=function(contentContainer,contacts){var formattedContacts=contacts.map((function(contact){return $.extend(contact,{id:contact.userid})}));return Templates.render(TEMPLATES_CONTACTS_LIST,{contacts:formattedContacts}).then((function(html){return contentContainer.append(html),html})).catch(Notification.exception)},registerEventListeners=function(root){PubSub.subscribe(Events.CONTACT_ADDED,(function(profile){var listContentContainer=LazyLoadList.getContentContainer(root);render(listContentContainer,[profile]),LazyLoadList.hideEmptyMessage(root),LazyLoadList.showContent(root)})),PubSub.subscribe(Events.CONTACT_REMOVED,(function(userId){!function(body,userId){findContact(body,userId).remove()}(root,userId),root.find(SELECTORS_CONTACT).length||(LazyLoadList.hideContent(root),LazyLoadList.showEmptyMessage(root))})),PubSub.subscribe(Events.CONTACT_BLOCKED,(function(userId){!function(body,userId){var contact=findContact(body,userId);contact.length&amp;&amp;contact.find(SELECTORS_BLOCK_ICON_CONTAINER).removeClass("hidden")}(root,userId)})),PubSub.subscribe(Events.CONTACT_UNBLOCKED,(function(userId){!function(body,userId){var contact=findContact(body,userId);contact.length&amp;&amp;contact.find(SELECTORS_BLOCK_ICON_CONTAINER).addClass("hidden")}(root,userId)}))};return{show:function(root){var offset;root.attr("data-contacts-init")||(registerEventListeners(root),root.attr("data-contacts-init",!0)),LazyLoadList.show(root,(offset=0,function(listRoot,userId){return MessageRepository.getContacts(userId,101,offset).then((function(result){return result})).then((function(contacts){return contacts.length&gt;100?contacts.pop():LazyLoadList.setLoadedAll(listRoot,!0),contacts})).then((function(contacts){return offset+=100,contacts})).catch(Notification.exception)}),render)}}}));
/**
 * Controls the group info page of the message drawer.
 *
 * @module     core_message/message_drawer_view_group_info
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core_message/message_drawer_view_group_info",["jquery","core/str","core/templates","core_message/message_repository","core_message/message_drawer_lazy_load_list"],(function($,Str,Templates,Repository,LazyLoadList){var SELECTORS_CONTENT_CONTAINER='[data-region="group-info-content-container"]',TEMPLATES_CONTENT="core_message/message_drawer_view_group_info_body_content",TEMPLATES_MEMBERS_LIST="core_message/message_drawer_view_group_info_participants_list",getContentContainer=function(root){return root.find(SELECTORS_CONTENT_CONTAINER)},renderMembersCallback=function(contentContainer,members){return Templates.render(TEMPLATES_MEMBERS_LIST,{contacts:members}).then((function(html){return contentContainer.append(html),html}))};return{show:function(namespace,header,body,footer,conversation,loggedInUserId){var root=$(body);return getContentContainer(root).empty(),function(root,conversation,loggedInUserId){var placeholderCount=conversation.totalMemberCount&gt;50?50:conversation.totalMemberCount,placeholders=Array.apply(null,Array(placeholderCount)).map((function(){return!0})),templateContext={name:conversation.name,subname:conversation.subname,imageurl:conversation.imageUrl,placeholders:placeholders,loggedinuser:{id:loggedInUserId}};return Templates.render(TEMPLATES_CONTENT,templateContext).then((function(html){return getContentContainer(root).append(html),html}))}(root,conversation,loggedInUserId).then((function(){var listRoot=LazyLoadList.getRoot(root);LazyLoadList.show(listRoot,function(conversation,limit,offset){return function(root,userId){return Repository.getConversationMembers(conversation.id,userId,limit+1,offset).then((function(members){return members.length&gt;limit?members=members.slice(0,-1):LazyLoadList.setLoadedAll(root,!0),offset+=limit,members.filter((function(member){return member.id!=userId}))}))}}(conversation,50,0),renderMembersCallback)}))},description:function(root,conversation){return Str.get_string("messagedrawerviewgroupinfo","core_message",conversation.name)}}}));
/**
 * Controls the requests section of the contacts page.
 *
 * @module     core_message/message_drawer_view_contacts_section_requests
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core_message/message_drawer_view_contacts_section_requests",["jquery","core/notification","core/pubsub","core/templates","core_message/message_repository","core_message/message_drawer_events","core_message/message_drawer_lazy_load_list"],(function($,Notification,PubSub,Templates,MessageRepository,MessageDrawerEvents,LazyLoadList){var SELECTORS_CONTACT_REQUEST='[data-region="contact-request"]',TEMPLATES_REQUESTS_LIST="core_message/message_drawer_view_contacts_body_section_requests_list",render=function(contentContainer,requests){var formattedRequests=requests.map((function(request){return{id:request.id,profileimageurl:request.profileimageurl,fullname:request.fullname}}));return Templates.render(TEMPLATES_REQUESTS_LIST,{requests:formattedRequests}).then((function(html){return contentContainer.append(html),html})).catch(Notification.exception)},load=function(listRoot,userId){return MessageRepository.getContactRequests(userId).then((function(requests){return LazyLoadList.setLoadedAll(listRoot,!0),requests})).catch(Notification.exception)},handleContactRequestProcessed=function(root){return function(request){root.find('[data-request-id="'+request.userid+'"]').remove(),root.find(SELECTORS_CONTACT_REQUEST).length||(LazyLoadList.showEmptyMessage(root),LazyLoadList.hideContent(root))}};return{show:function(root){root.attr("data-contacts-init")||(!function(root){PubSub.subscribe(MessageDrawerEvents.CONTACT_REQUEST_ACCEPTED,handleContactRequestProcessed(root)),PubSub.subscribe(MessageDrawerEvents.CONTACT_REQUEST_DECLINED,handleContactRequestProcessed(root))}(root),root.attr("data-contacts-init",!0)),LazyLoadList.show(root,load,render)}}}));
/**
 * Controls the preference for an individual notification type on the
 * message preference page.
 *
 * @module     core_message/message_notification_preference
 * @copyright  2016 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core_message/message_notification_preference",["jquery","core_message/notification_preference"],(function($,NotificationPreference){var SELECTORS_PREFERENCE_KEY="[data-preference-key]",MessageNotificationPreference=function(element,userId){NotificationPreference.call(this,element,userId)};return(MessageNotificationPreference.prototype=Object.create(NotificationPreference.prototype)).constructor=MessageNotificationPreference,MessageNotificationPreference.prototype.getPreferenceKey=function(){return this.root.find(SELECTORS_PREFERENCE_KEY).attr("data-preference-key")},MessageNotificationPreference}));
define("core_message/message_drawer_helper",["exports","core/pubsub","core_message/message_drawer_events"],(function(_exports,_pubsub,_message_drawer_events){var obj;
/**
   * Provides some helper functions to trigger actions in the message drawer.
   *
   * @module     core_message/message_drawer_helper
   * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.waitForDrawerToLoad=_exports.showSettings=_exports.showConversation=_exports.show=_exports.markDrawerReady=_exports.hide=_exports.createConversationWithUser=void 0,_message_drawer_events=(obj=_message_drawer_events)&amp;&amp;obj.__esModule?obj:{default:obj};let drawerMarkedReady=!1;_exports.createConversationWithUser=async args=&gt;{await waitForDrawerToLoad(),(0,_pubsub.publish)(_message_drawer_events.default.CREATE_CONVERSATION_WITH_USER,args)};_exports.hide=async()=&gt;{await waitForDrawerToLoad(),(0,_pubsub.publish)(_message_drawer_events.default.HIDE)};_exports.show=async()=&gt;{await waitForDrawerToLoad(),(0,_pubsub.publish)(_message_drawer_events.default.SHOW)};_exports.showConversation=async args=&gt;{await waitForDrawerToLoad(),(0,_pubsub.publish)(_message_drawer_events.default.SHOW_CONVERSATION,args)};_exports.showSettings=async()=&gt;{await waitForDrawerToLoad(),(0,_pubsub.publish)(_message_drawer_events.default.SHOW_SETTINGS)};const waitForDrawerToLoad=()=&gt;new Promise((resolve=&gt;{drawerMarkedReady?resolve():(0,_pubsub.subscribe)(_message_drawer_events.default.READY,resolve)}));_exports.waitForDrawerToLoad=waitForDrawerToLoad;_exports.markDrawerReady=()=&gt;{drawerMarkedReady=!0,(0,_pubsub.publish)(_message_drawer_events.default.READY)}}));
define("core_payment/gateways_modal",["exports","core/modal_factory","core/templates","core/str","./repository","./selectors","core/modal_events","core_payment/events","core/toast","core/notification","./modal_gateways"],(function(_exports,_modal_factory,_templates,_str,_repository,_selectors,_modal_events,_events,_toast,_notification,_modal_gateways){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_modal_factory=_interopRequireDefault(_modal_factory),_templates=_interopRequireDefault(_templates),_selectors=_interopRequireDefault(_selectors),_modal_events=_interopRequireDefault(_modal_events),_events=_interopRequireDefault(_events),_notification=_interopRequireDefault(_notification),_modal_gateways=_interopRequireDefault(_modal_gateways);var _systemImportTransformerGlobalIdentifier="undefined"!=typeof window?window:"undefined"!=typeof self?self:"undefined"!=typeof global?global:{};function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}const show=async function(rootNode){let{focusOnClose:focusOnClose=null}=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]?arguments[1]:{};const modal=await _modal_factory.default.create({type:_modal_gateways.default.TYPE,title:await(0,_str.get_string)("selectpaymenttype","core_payment"),body:await _templates.default.render("core_payment/gateways_modal",{})}),rootElement=modal.getRoot()[0];(0,_toast.addToastRegion)(rootElement),modal.show(),modal.getRoot().on(_modal_events.default.hidden,(()=&gt;{modal.destroy();try{focusOnClose.focus()}catch(e){}})),modal.getRoot().on(_events.default.proceed,(e=&gt;{const gateway=(rootElement.querySelector(_selectors.default.values.gateway)||{value:""}).value;gateway?processPayment(gateway,rootNode.dataset.component,rootNode.dataset.paymentarea,rootNode.dataset.itemid,rootNode.dataset.description).then((message=&gt;(modal.hide(),_notification.default.addNotification({message:message,type:"success"}),location.href=rootNode.dataset.successurl,message))).catch((message=&gt;_notification.default.alert("",message))):(0,_str.get_string)("nogatewayselected","core_payment").then((message=&gt;(0,_toast.add)(message,{type:"warning"}))).catch(),e.preventDefault()})),rootElement.addEventListener("change",(e=&gt;{e.target.matches(_selectors.default.elements.gateways)&amp;&amp;updateCostRegion(rootElement,rootNode.dataset.cost)}));const gateways=await(0,_repository.getAvailableGateways)(rootNode.dataset.component,rootNode.dataset.paymentarea,rootNode.dataset.itemid),context={gateways:gateways},{html:html,js:js}=await _templates.default.renderForPromise("core_payment/gateways",context);_templates.default.replaceNodeContents(rootElement.querySelector(_selectors.default.regions.gatewaysContainer),html,js),selectSingleGateway(rootElement),await updateCostRegion(rootElement,rootNode.dataset.cost)},selectSingleGateway=root=&gt;{const gateways=root.querySelectorAll(_selectors.default.elements.gateways);1==gateways.length&amp;&amp;(gateways[0].checked=!0)},updateCostRegion=async function(root){let defaultCost=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]?arguments[1]:"";const gatewayElement=root.querySelector(_selectors.default.values.gateway),surcharge=parseInt((gatewayElement||{dataset:{surcharge:0}}).dataset.surcharge),cost=(gatewayElement||{dataset:{cost:defaultCost}}).dataset.cost,{html:html,js:js}=await _templates.default.renderForPromise("core_payment/fee_breakdown",{fee:cost,surcharge:surcharge});_templates.default.replaceNodeContents(root.querySelector(_selectors.default.regions.costContainer),html,js)},processPayment=async(gateway,component,paymentArea,itemId,description)=&gt;(await("function"==typeof _systemImportTransformerGlobalIdentifier.define&amp;&amp;_systemImportTransformerGlobalIdentifier.define.amd?new Promise((function(resolve,reject){_systemImportTransformerGlobalIdentifier.require(["paygw_".concat(gateway,"/gateways_modal")],resolve,reject)})):"undefined"!=typeof module&amp;&amp;module.exports&amp;&amp;"undefined"!=typeof require||"undefined"!=typeof module&amp;&amp;module.component&amp;&amp;_systemImportTransformerGlobalIdentifier.require&amp;&amp;"component"===_systemImportTransformerGlobalIdentifier.require.loader?Promise.resolve(require("paygw_".concat(gateway,"/gateways_modal"))):Promise.resolve(_systemImportTransformerGlobalIdentifier["paygw_".concat(gateway,"/gateways_modal")]))).process(component,paymentArea,itemId,description),init=()=&gt;{init.initialised||(init.initialised=!0,document.addEventListener("click",(e=&gt;{const gatewayTrigger=e.target.closest('[data-action="core_payment/triggerPayment"]');gatewayTrigger&amp;&amp;(e.preventDefault(),show(gatewayTrigger,{focusOnClose:e.target}))})))};_exports.init=init,init.initialised=!1}));
define("core_payment/selectors",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0;return _exports.default={elements:{gateways:'[data-region="gateways-container"] input[type="radio"]'},regions:{gatewaysContainer:'[data-region="gateways-container"]',costContainer:'[data-region="fee-breakdown-container"]'},values:{gateway:'[data-region="gateways-container"] input[type="radio"]:checked'}},_exports.default}));
define("core_payment/modal_gateways",["exports","jquery","core/custom_interaction_events","core/modal","core/modal_events","core_payment/events","core/modal_registry"],(function(_exports,_jquery,_custom_interaction_events,_modal,_modal_events,_events,_modal_registry){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Contain the logic for the gateways modal: A modal with proceed and cancel buttons.
   *
   * @module     core_payment/modal_gateways
   * @copyright  2020 Shamim Rezaie &lt;shamim@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_jquery=_interopRequireDefault(_jquery),_custom_interaction_events=_interopRequireDefault(_custom_interaction_events),_modal=_interopRequireDefault(_modal),_modal_events=_interopRequireDefault(_modal_events),_events=_interopRequireDefault(_events),_modal_registry=_interopRequireDefault(_modal_registry);let registered=!1;const SELECTORS_PROCEED_BUTTON='[data-action="proceed"]',SELECTORS_CANCEL_BUTTON='[data-action="cancel"]';class ModalGateways extends _modal.default{constructor(root){super(root)}registerEventListeners(){super.registerEventListeners(),this.getModal().on(_custom_interaction_events.default.events.activate,SELECTORS_PROCEED_BUTTON,((e,data)=&gt;{var proceedEvent=_jquery.default.Event(_events.default.proceed);this.getRoot().trigger(proceedEvent,this),proceedEvent.isDefaultPrevented()||(this.hide(),data.originalEvent.preventDefault())})),this.getModal().on(_custom_interaction_events.default.events.activate,SELECTORS_CANCEL_BUTTON,((e,data)=&gt;{var cancelEvent=_jquery.default.Event(_modal_events.default.cancel);this.getRoot().trigger(cancelEvent,this),cancelEvent.isDefaultPrevented()||(this.hide(),data.originalEvent.preventDefault())}))}}return _exports.default=ModalGateways,ModalGateways.TYPE="core_payment-modal_gateways",registered||(_modal_registry.default.register(ModalGateways.TYPE,ModalGateways,"core_payment/modal_gateways"),registered=!0),_exports.default}));
define("core_payment/repository",["exports","core/ajax"],(function(_exports,_ajax){var obj;
/**
   * Repository for payment subsystem.
   *
   * @module     core_payment/repository
   * @copyright  2020 Shamim Rezaie &lt;shamim@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.getAvailableGateways=void 0,_ajax=(obj=_ajax)&amp;&amp;obj.__esModule?obj:{default:obj};_exports.getAvailableGateways=(component,paymentArea,itemId)=&gt;{const request={methodname:"core_payment_get_available_gateways",args:{component:component,paymentarea:paymentArea,itemid:itemId}};return _ajax.default.call([request])[0]}}));
define("core_payment/events",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0;return _exports.default={proceed:"core_payment-modal_gateways:proceed"},_exports.default}));
/**
 * The purpose of this module is to centralize selectors related to question.
 *
 * @deprecated since Moodle 4.0
 * @todo Final deprecation on Moodle 4.4 MDL-72438
 * @module     core_question/question_selectors
 * @copyright  2018 Simey Lameze &lt;lameze@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core_question/selectors",[],(function(){return window.console.warn("warn: The core_question/selectors has been deprecated. Please use qbank_tagquestion/selectors instead."),{actions:{save:'[data-action="save"]',edittags:'[data-action="edittags"]'},containers:{loadingIcon:'[data-region="overlay-icon-container"]'}}}));
/**
 * A javascript module to handle question ajax actions.
 *
 * @deprecated since Moodle 4.0
 * @todo Final deprecation on Moodle 4.4 MDL-72438
 * @module     core_question/repository
 * @copyright  2017 Simey Lameze &lt;lameze@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core_question/repository",["jquery","core/ajax"],(function($,Ajax){return{submitTagCreateUpdateForm:function(questionId,contextId,formdata){window.console.warn("warn: The core_question/repository has been deprecated.Please use qbank_tagquestion/repository instead.");var request={methodname:"core_question_submit_tags_form",args:{questionid:questionId,contextid:contextId,formdata:formdata}};return Ajax.call([request])[0]}}}));
/**
 * A javascript module to handle question tags editing.
 *
 * @deprecated since Moodle 4.0
 * @todo Final deprecation on Moodle 4.4 MDL-72438
 * @module     core_question/edit_tags
 * @copyright  2018 Simey Lameze &lt;simey@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core_question/edit_tags",["jquery","core/fragment","core/str","core/modal_events","core/modal_factory","core/notification","core/custom_interaction_events","core_question/repository","core_question/selectors"],(function($,Fragment,Str,ModalEvents,ModalFactory,Notification,CustomEvents,Repository,QuestionSelectors){var enableSaveButton=function(root){root.find(QuestionSelectors.actions.save).prop("disabled",!1)},disableSaveButton=function(root){root.find(QuestionSelectors.actions.save).prop("disabled",!0)},startLoading=function(root){root.find(QuestionSelectors.containers.loadingIcon).removeClass("hidden")},stopLoading=function(root){root.find(QuestionSelectors.containers.loadingIcon).addClass("hidden")},save=function(modal,root){disableSaveButton(root),startLoading(root);var formData=function(modal){return modal.getBody().find("form").serialize()}(modal),questionId=function(modal){return modal.getBody().data("questionid")}(modal),contextId=function(modal){return modal.getBody().data("contextid")}(modal);return Repository.submitTagCreateUpdateForm(questionId,contextId,formData).always((function(){stopLoading(root),enableSaveButton(root)})).fail(Notification.exception)};return{init:function(root){window.console.warn("warn: The core_question/repository has been deprecated.Please use qbank_tagquestion/repository instead."),function(root){var modalPromise=ModalFactory.create({type:ModalFactory.types.SAVE_CANCEL,large:!1},[root,QuestionSelectors.actions.edittags]).then((function(modal){return Str.get_string("questiontags","question").then((function(string){return modal.setTitle(string),string})).fail(Notification.exception),modal.getRoot().on(ModalEvents.save,(function(e){modal.getBody().find("form").submit(),e.preventDefault()})),modal.getRoot().on("submit","form",(function(e){save(modal,root).then((function(){modal.hide(),location.reload()})).fail(Notification.exception),e.preventDefault(),e.stopPropagation()})),modal}));root.on(CustomEvents.events.activate,QuestionSelectors.actions.edittags,(function(e){var currentTarget=$(e.currentTarget),questionId=currentTarget.data("questionid"),canTag=!!currentTarget.data("cantag"),contextId=currentTarget.data("contextid");modalPromise.then((function(modal){disableSaveButton(root),startLoading(root);var args={id:questionId},tagsFragment=Fragment.loadFragment("question","tags_form",contextId,args);return modal.setBody(tagsFragment),tagsFragment.then((function(){enableSaveButton(root)})).always((function(){stopLoading(root)})).fail(Notification.exception),canTag?modal.getRoot().find(QuestionSelectors.actions.save).show():modal.getRoot().find(QuestionSelectors.actions.save).hide(),function(modal,questionId){modal.getBody().attr("data-questionid",questionId)}(modal,questionId),function(modal,contextId){modal.getBody().attr("data-contextid",contextId)}(modal,contextId),modal})).fail(Notification.exception),e.preventDefault()}))}(root=$(root))}}}));
define("core_reportbuilder/sidebar",["exports","core/pending","core/utils","core_reportbuilder/local/selectors"],(function(_exports,_pending,_utils,reportSelectors){var obj;
/**
   * Report builder sidebar component
   *
   * @module      core_reportbuilder/sidebar
   * @copyright   2021 Paul Holden &lt;paulh@moodle.com&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_pending=(obj=_pending)&amp;&amp;obj.__esModule?obj:{default:obj},reportSelectors=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}(reportSelectors);const CLASSES_EXPANDED="show",CLASSES_COLLAPSED="collapsed",CLASSES_HIDE="d-none",sidebarCardFilter=(event,sidebarMenu)=&gt;{const pendingPromise=new _pending.default("core_reportbuilder/sidebar:cardFilter"),sidebarCards=sidebarMenu.querySelectorAll(reportSelectors.regions.sidebarCard),sidebarItems=sidebarMenu.querySelectorAll(reportSelectors.regions.sidebarItem),searchTerm=event.target.value.toLowerCase();sidebarItems.forEach((item=&gt;{const itemContent=item.textContent.toLowerCase();item.classList.toggle(CLASSES_HIDE,!itemContent.includes(searchTerm))})),sidebarCards.forEach((card=&gt;{const visibleItems=card.querySelectorAll("".concat(reportSelectors.regions.sidebarItem,":not(.").concat(CLASSES_HIDE,")"));card.classList.toggle(CLASSES_HIDE,!visibleItems.length),expandCard(card)})),pendingPromise.resolve()},expandCard=card=&gt;{let cardButton=card.querySelector('[data-toggle="collapse"]');if(cardButton.classList.contains(CLASSES_COLLAPSED)){cardButton.classList.remove(CLASSES_COLLAPSED),cardButton.setAttribute("aria-expanded","true"),card.querySelector(cardButton.dataset.target).classList.add(CLASSES_EXPANDED)}};_exports.init=selectorId=&gt;{const sidebarMenu=document.querySelector(selectorId+reportSelectors.regions.sidebarMenu),sidebarSearch=sidebarMenu.querySelector(reportSelectors.actions.sidebarSearch),sidebarSearchDebounce=(0,_utils.debounce)(sidebarCardFilter,250);sidebarSearch.addEventListener("keyup",(event=&gt;{const pendingPromise=new _pending.default("core_reportbuilder/sidebar:keyup");sidebarSearchDebounce(event,sidebarMenu),setTimeout((()=&gt;{pendingPromise.resolve()}),250)}))}}));
define("core_reportbuilder/local/selectors",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0;
/**
   * Report builder selectors
   *
   * @module      core_reportbuilder/local/selectors
   * @copyright   2021 Paul Holden &lt;paulh@moodle.com&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */
const SELECTORS={regions:{report:'[data-region="core_reportbuilder/report"]',reportTable:'[data-region="reportbuilder-table"]',columnHeader:'[data-region="column-header"]',filterButtonLabel:'[data-region="filter-button-label"]',filtersForm:'[data-region="filters-form"]',sidebarMenu:'[data-region="sidebar-menu"]',sidebarCard:'[data-region="sidebar-card"]',sidebarItem:'[data-region="sidebar-item"]',settingsConditions:'[data-region="settings-conditions"]',activeConditions:'[data-region="active-conditions"]',activeCondition:'[data-region="active-condition"]',settingsFilters:'[data-region="settings-filters"]',activeFilters:'[data-region="active-filters"]',activeFilter:'[data-region="active-filter"]',settingsSorting:'[data-region="settings-sorting"]',audiencesContainer:'[data-region="audiences"]',audienceFormContainer:'[data-region="audience-form-container"]',audienceCard:'[data-region="audience-card"]',audienceHeading:'[data-region="audience-heading"]',audienceForm:'[data-region="audience-form"]',audienceEmptyMessage:"[data-region=no-instances-message]",audienceDescription:"[data-region=audience-description]",audienceNotSavedLabel:"[data-region=audience-not-saved]",settingsCardView:'[data-region="settings-cardview"]'},actions:{reportActionPopup:'[data-action="report-action-popup"]',reportCreate:'[data-action="report-create"]',reportEdit:'[data-action="report-edit"]',reportDelete:'[data-action="report-delete"]',reportAddColumn:'[data-action="report-add-column"]',reportRemoveColumn:'[data-action="report-remove-column"]',reportAddCondition:'[data-action="report-add-condition"]',reportRemoveCondition:'[data-action="report-remove-condition"]',reportAddFilter:'[data-action="report-add-filter"]',reportRemoveFilter:'[data-action="report-remove-filter"]',reportToggleColumnSort:'[data-action="report-toggle-column-sorting"]',reportToggleColumnSortDirection:'[data-action="report-toggle-sort-direction"]',sidebarSearch:'[data-action="sidebar-search"]',toggleEditPreview:'[data-action="toggle-edit-preview"]',audienceAdd:'[data-action="add-audience"]',audienceEdit:'[data-action="edit-audience"]',audienceDelete:'[data-action="delete-audience"]',toggleCardView:'[data-action="toggle-card"]',scheduleCreate:'[data-action="schedule-create"]',scheduleToggle:'[data-action="schedule-toggle"]',scheduleEdit:'[data-action="schedule-edit"]',scheduleSend:'[data-action="schedule-send"]',scheduleDelete:'[data-action="schedule-delete"]'},forReport:reportId=&gt;"".concat(SELECTORS.regions.report,'[data-report-id="').concat(reportId,'"]')};var _default=SELECTORS;return _exports.default=_default,_exports.default}));
define("core_reportbuilder/local/repository/columns",["exports","core/ajax"],(function(_exports,_ajax){var obj;
/**
   * Module to handle column AJAX requests
   *
   * @module      core_reportbuilder/local/repository/columns
   * @copyright   2021 Paul Holden &lt;paulh@moodle.com&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.reorderColumn=_exports.deleteColumn=_exports.addColumn=void 0,_ajax=(obj=_ajax)&amp;&amp;obj.__esModule?obj:{default:obj};_exports.addColumn=(reportId,uniqueIdentifier)=&gt;{const request={methodname:"core_reportbuilder_columns_add",args:{reportid:reportId,uniqueidentifier:uniqueIdentifier}};return _ajax.default.call([request])[0]};_exports.deleteColumn=(reportId,columnId)=&gt;{const request={methodname:"core_reportbuilder_columns_delete",args:{reportid:reportId,columnid:columnId}};return _ajax.default.call([request])[0]};_exports.reorderColumn=(reportId,columnId,position)=&gt;{const request={methodname:"core_reportbuilder_columns_reorder",args:{reportid:reportId,columnid:columnId,position:position}};return _ajax.default.call([request])[0]}}));
define("core_reportbuilder/local/repository/modals",["exports","core_form/modalform","core/str"],(function(_exports,_modalform,_str){var obj;
/**
   * Module to handle modal form requests
   *
   * @module      core_reportbuilder/local/repository/modals
   * @copyright   2021 David Matamoros &lt;davidmc@moodle.com&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.createScheduleModal=_exports.createReportModal=void 0,_modalform=(obj=_modalform)&amp;&amp;obj.__esModule?obj:{default:obj};const createModalForm=(triggerElement,modalTitle,formClass,formArgs)=&gt;new _modalform.default({modalConfig:{title:modalTitle},formClass:formClass,args:formArgs,saveButtonText:(0,_str.get_string)("save","moodle"),returnFocus:triggerElement});_exports.createReportModal=function(triggerElement,modalTitle){let reportId=arguments.length&gt;2&amp;&amp;void 0!==arguments[2]?arguments[2]:0;return createModalForm(triggerElement,modalTitle,"core_reportbuilder\\form\\report",{id:reportId})};_exports.createScheduleModal=function(triggerElement,modalTitle,reportId){let scheduleId=arguments.length&gt;3&amp;&amp;void 0!==arguments[3]?arguments[3]:0;return createModalForm(triggerElement,modalTitle,"core_reportbuilder\\form\\schedule",{reportid:reportId,id:scheduleId})}}));
define("core_reportbuilder/local/repository/reports",["exports","core/ajax"],(function(_exports,_ajax){var obj;
/**
   * Module to handle report AJAX requests
   *
   * @module      core_reportbuilder/local/repository/reports
   * @copyright   2021 Paul Holden &lt;paulh@moodle.com&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.getReport=_exports.deleteReport=void 0,_ajax=(obj=_ajax)&amp;&amp;obj.__esModule?obj:{default:obj};_exports.deleteReport=reportId=&gt;{const request={methodname:"core_reportbuilder_reports_delete",args:{reportid:reportId}};return _ajax.default.call([request])[0]};_exports.getReport=(reportId,editMode)=&gt;{const request={methodname:"core_reportbuilder_reports_get",args:{reportid:reportId,editmode:editMode}};return _ajax.default.call([request])[0]}}));
define("core_reportbuilder/local/repository/sorting",["exports","core/ajax"],(function(_exports,_ajax){var obj;
/**
   * Module to handle column sorting AJAX requests
   *
   * @module      core_reportbuilder/local/repository/sorting
   * @copyright   2021 David Matamoros &lt;davidmc@moodle.com&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.toggleColumnSorting=_exports.reorderColumnSorting=_exports.getColumnSorting=void 0,_ajax=(obj=_ajax)&amp;&amp;obj.__esModule?obj:{default:obj};_exports.getColumnSorting=reportId=&gt;{const request={methodname:"core_reportbuilder_columns_sort_get",args:{reportid:reportId}};return _ajax.default.call([request])[0]};_exports.reorderColumnSorting=(reportId,columnId,position)=&gt;{const request={methodname:"core_reportbuilder_columns_sort_reorder",args:{reportid:reportId,columnid:columnId,position:position}};return _ajax.default.call([request])[0]};_exports.toggleColumnSorting=(reportId,columnId,enabled,direction)=&gt;{const request={methodname:"core_reportbuilder_columns_sort_toggle",args:{reportid:reportId,columnid:columnId,enabled:enabled,direction:direction}};return _ajax.default.call([request])[0]}}));
define("core_reportbuilder/local/repository/filters",["exports","core/ajax"],(function(_exports,_ajax){var obj;
/**
   * Module to handle filter AJAX requests
   *
   * @module      core_reportbuilder/local/repository/filters
   * @copyright   2021 Paul Holden &lt;paulh@moodle.com&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.setFilters=_exports.resetFilters=_exports.reorderFilter=_exports.deleteFilter=_exports.addFilter=void 0,_ajax=(obj=_ajax)&amp;&amp;obj.__esModule?obj:{default:obj};_exports.resetFilters=(reportId,reportParameters)=&gt;{const request={methodname:"core_reportbuilder_filters_reset",args:{reportid:reportId,parameters:reportParameters}};return _ajax.default.call([request])[0]};_exports.setFilters=(reportId,reportParameters,filterValues)=&gt;{const request={methodname:"core_reportbuilder_set_filters",args:{reportid:reportId,parameters:reportParameters,values:filterValues}};return _ajax.default.call([request])[0]};_exports.addFilter=(reportId,uniqueIdentifier)=&gt;{const request={methodname:"core_reportbuilder_filters_add",args:{reportid:reportId,uniqueidentifier:uniqueIdentifier}};return _ajax.default.call([request])[0]};_exports.deleteFilter=(reportId,filterId)=&gt;{const request={methodname:"core_reportbuilder_filters_delete",args:{reportid:reportId,filterid:filterId}};return _ajax.default.call([request])[0]};_exports.reorderFilter=(reportId,filterId,position)=&gt;{const request={methodname:"core_reportbuilder_filters_reorder",args:{reportid:reportId,filterid:filterId,position:position}};return _ajax.default.call([request])[0]}}));
define("core_reportbuilder/local/repository/conditions",["exports","core/ajax"],(function(_exports,_ajax){var obj;
/**
   * Module to handle condition AJAX requests
   *
   * @module      core_reportbuilder/local/repository/conditions
   * @copyright   2021 Paul Holden &lt;paulh@moodle.com&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.resetConditions=_exports.reorderCondition=_exports.deleteCondition=_exports.addCondition=void 0,_ajax=(obj=_ajax)&amp;&amp;obj.__esModule?obj:{default:obj};_exports.resetConditions=reportId=&gt;{const request={methodname:"core_reportbuilder_conditions_reset",args:{reportid:reportId}};return _ajax.default.call([request])[0]};_exports.addCondition=(reportId,uniqueIdentifier)=&gt;{const request={methodname:"core_reportbuilder_conditions_add",args:{reportid:reportId,uniqueidentifier:uniqueIdentifier}};return _ajax.default.call([request])[0]};_exports.deleteCondition=(reportId,conditionId)=&gt;{const request={methodname:"core_reportbuilder_conditions_delete",args:{reportid:reportId,conditionid:conditionId}};return _ajax.default.call([request])[0]};_exports.reorderCondition=(reportId,conditionId,position)=&gt;{const request={methodname:"core_reportbuilder_conditions_reorder",args:{reportid:reportId,conditionid:conditionId,position:position}};return _ajax.default.call([request])[0]}}));
define("core_reportbuilder/local/repository/audiences",["exports","core/ajax"],(function(_exports,_ajax){var obj;
/**
   * Module to handle audiences AJAX requests
   *
   * @module      core_reportbuilder/local/repository/audiences
   * @copyright   2021 David Matamoros &lt;davidmc@moodle.com&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.deleteAudience=void 0,_ajax=(obj=_ajax)&amp;&amp;obj.__esModule?obj:{default:obj};_exports.deleteAudience=(reportId,instanceId)=&gt;{const request={methodname:"core_reportbuilder_audiences_delete",args:{reportid:reportId,instanceid:instanceId}};return _ajax.default.call([request])[0]}}));
define("core_reportbuilder/local/repository/schedules",["exports","core/ajax"],(function(_exports,_ajax){var obj;
/**
   * Module to handle schedule AJAX requests
   *
   * @module      core_reportbuilder/local/repository/schedules
   * @copyright   2021 Paul Holden &lt;paulh@moodle.com&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.toggleSchedule=_exports.sendSchedule=_exports.deleteSchedule=void 0,_ajax=(obj=_ajax)&amp;&amp;obj.__esModule?obj:{default:obj};_exports.deleteSchedule=(reportId,scheduleId)=&gt;{const request={methodname:"core_reportbuilder_schedules_delete",args:{reportid:reportId,scheduleid:scheduleId}};return _ajax.default.call([request])[0]};_exports.sendSchedule=(reportId,scheduleId)=&gt;{const request={methodname:"core_reportbuilder_schedules_send",args:{reportid:reportId,scheduleid:scheduleId}};return _ajax.default.call([request])[0]};_exports.toggleSchedule=(reportId,scheduleId,scheduleEnabled)=&gt;{const request={methodname:"core_reportbuilder_schedules_toggle",args:{reportid:reportId,scheduleid:scheduleId,enabled:scheduleEnabled}};return _ajax.default.call([request])[0]}}));
define("core_reportbuilder/local/events",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0;return _exports.default={tableReload:"core_reportbuilder_table_reload",publish:{reportColumnsUpdated:"core_reportbuilder_report_columns_updated"}},_exports.default}));
define("core_reportbuilder/local/editor/columns",["exports","jquery","core/event_dispatcher","core/inplace_editable","core/local/inplace_editable/events","core/notification","core/pending","core/prefetch","core/pubsub","core/sortable_list","core/str","core/toast","core_reportbuilder/local/events","core_reportbuilder/local/selectors","core_reportbuilder/local/repository/columns","core_reportbuilder/local/repository/sorting"],(function(_exports,_jquery,_event_dispatcher,_inplace_editable,_events,_notification,_pending,_prefetch,_pubsub,_sortable_list,_str,_toast,reportEvents,reportSelectors,_columns,_sorting){function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_jquery=_interopRequireDefault(_jquery),_notification=_interopRequireDefault(_notification),_pending=_interopRequireDefault(_pending),_sortable_list=_interopRequireDefault(_sortable_list),reportEvents=_interopRequireWildcard(reportEvents),reportSelectors=_interopRequireWildcard(reportSelectors);_exports.init=initialized=&gt;{((0,_prefetch.prefetchStrings)("core_reportbuilder",["columnadded","columnaggregated","columndeleted","columnmoved","deletecolumn","deletecolumnconfirm"]),(0,_prefetch.prefetchStrings)("core",["delete"]),initialized)||(document.addEventListener("click",(event=&gt;{const reportAddColumn=event.target.closest(reportSelectors.actions.reportAddColumn);if(reportAddColumn){event.preventDefault();const pendingPromise=new _pending.default("core_reportbuilder/columns:add"),reportElement=reportAddColumn.closest(reportSelectors.regions.report);(0,_columns.addColumn)(reportElement.dataset.reportId,reportAddColumn.dataset.uniqueIdentifier).then((data=&gt;(0,_pubsub.publish)(reportEvents.publish.reportColumnsUpdated,data))).then((()=&gt;(0,_str.get_string)("columnadded","core_reportbuilder",reportAddColumn.dataset.name))).then(_toast.add).then((()=&gt;((0,_event_dispatcher.dispatchEvent)(reportEvents.tableReload,{preservePagination:!0},reportElement),pendingPromise.resolve()))).catch(_notification.default.exception)}const reportRemoveColumn=event.target.closest(reportSelectors.actions.reportRemoveColumn);if(reportRemoveColumn){event.preventDefault();const reportElement=reportRemoveColumn.closest(reportSelectors.regions.report),columnHeader=reportRemoveColumn.closest(reportSelectors.regions.columnHeader),columnName=columnHeader.dataset.columnName;_notification.default.saveCancelPromise((0,_str.get_string)("deletecolumn","core_reportbuilder",columnName),(0,_str.get_string)("deletecolumnconfirm","core_reportbuilder",columnName),(0,_str.get_string)("delete","core"),{triggerElement:reportRemoveColumn}).then((()=&gt;{const pendingPromise=new _pending.default("core_reportbuilder/columns:remove");return(0,_columns.deleteColumn)(reportElement.dataset.reportId,columnHeader.dataset.columnId).then((data=&gt;(0,_pubsub.publish)(reportEvents.publish.reportColumnsUpdated,data))).then((()=&gt;(0,_toast.add)((0,_str.get_string)("columndeleted","core_reportbuilder",columnName)))).then((()=&gt;((0,_event_dispatcher.dispatchEvent)(reportEvents.tableReload,{preservePagination:!0},reportElement),pendingPromise.resolve()))).catch(_notification.default.exception)})).catch((()=&gt;{}))}})),new _sortable_list.default("".concat(reportSelectors.regions.reportTable," thead tr"),{isHorizontal:!0}).getElementName=element=&gt;Promise.resolve(element.data("columnName")),(0,_jquery.default)(document).on(_sortable_list.default.EVENTS.DRAG,"".concat(reportSelectors.regions.report," th[data-column-id]"),((event,info)=&gt;{const reportElement=event.target.closest(reportSelectors.regions.report),columnPosition=info.element.data("columnPosition"),targetColumnPosition=info.targetNextElement.data("columnPosition");(0,_jquery.default)(reportElement).find("tbody tr").each((function(){const cell=(0,_jquery.default)(this).children("td.c".concat(columnPosition-1))[0];if(targetColumnPosition){var beforeCell=(0,_jquery.default)(this).children("td.c".concat(targetColumnPosition-1))[0];this.insertBefore(cell,beforeCell)}else this.appendChild(cell)}))})),(0,_jquery.default)(document).on(_sortable_list.default.EVENTS.DROP,"".concat(reportSelectors.regions.report," th[data-column-id]"),((event,info)=&gt;{if(info.positionChanged){const pendingPromise=new _pending.default("core_reportbuilder/columns:reorder"),reportElement=event.target.closest(reportSelectors.regions.report),columnId=info.element.data("columnId"),columnName=info.element.data("columnName"),columnPosition=info.element.data("columnPosition");let targetColumnPosition=info.targetNextElement.data("columnPosition")||info.element.siblings().length+2;targetColumnPosition&gt;columnPosition&amp;&amp;targetColumnPosition--,(0,_columns.reorderColumn)(reportElement.dataset.reportId,columnId,targetColumnPosition).then((()=&gt;(0,_str.get_string)("columnmoved","core_reportbuilder",columnName))).then(_toast.add).then((()=&gt;((0,_event_dispatcher.dispatchEvent)(reportEvents.tableReload,{preservePagination:!0},reportElement),pendingPromise.resolve()))).catch(_notification.default.exception)}})),document.addEventListener(_events.eventTypes.elementUpdated,(event=&gt;{const columnAggregation=event.target.closest('[data-itemtype="columnaggregation"]');if(columnAggregation){const pendingPromise=new _pending.default("core_reportbuilder/columns:aggregate"),reportElement=columnAggregation.closest(reportSelectors.regions.report),columnHeader=columnAggregation.closest(reportSelectors.regions.columnHeader);(0,_str.get_string)("columnaggregated","core_reportbuilder",columnHeader.dataset.columnName).then(_toast.add).then((()=&gt;{const columnAggregationLink='[data-itemtype="columnaggregation"][data-itemid="'+"".concat(columnAggregation.dataset.itemid,'"] &gt; a');return(0,_event_dispatcher.dispatchEvent)(reportEvents.tableReload,{preserveTriggerElement:columnAggregationLink},reportElement),(0,_sorting.getColumnSorting)(reportElement.dataset.reportId)})).then((data=&gt;(0,_pubsub.publish)(reportEvents.publish.reportColumnsUpdated,data))).then((()=&gt;pendingPromise.resolve())).catch(_notification.default.exception)}})))}}));
define("core_reportbuilder/local/editor/sorting",["exports","jquery","core/inplace_editable","core/notification","core/pending","core/pubsub","core/sortable_list","core/str","core/toast","core_reportbuilder/local/selectors","core_reportbuilder/local/repository/sorting","core/templates","core/event_dispatcher","core_reportbuilder/local/events"],(function(_exports,_jquery,_inplace_editable,_notification,_pending,_pubsub,_sortable_list,_str,_toast,reportSelectors,_sorting,_templates,_event_dispatcher,reportEvents){function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_jquery=_interopRequireDefault(_jquery),_notification=_interopRequireDefault(_notification),_pending=_interopRequireDefault(_pending),_sortable_list=_interopRequireDefault(_sortable_list),reportSelectors=_interopRequireWildcard(reportSelectors),_templates=_interopRequireDefault(_templates),reportEvents=_interopRequireWildcard(reportEvents);const SORTORDER_ASCENDING=4,SORTORDER_DESCENDING=3,reloadSettingsSortingRegion=context=&gt;{const pendingPromise=new _pending.default("core_reportbuilder/sorting:reload"),settingsSortingRegion=document.querySelector(reportSelectors.regions.settingsSorting);return _templates.default.renderForPromise("core_reportbuilder/local/settings/sorting",{sorting:context}).then((_ref=&gt;{let{html:html,js:js}=_ref;return _templates.default.replaceNode(settingsSortingRegion,html,js),pendingPromise.resolve()}))},updateSorting=(reportElement,element,sortenabled,sortdirection)=&gt;{const reportId=reportElement.dataset.reportId,listElement=element.closest("li"),columnId=listElement.dataset.columnSortId,columnName=listElement.dataset.columnSortName;return(0,_sorting.toggleColumnSorting)(reportId,columnId,sortenabled,sortdirection).then(reloadSettingsSortingRegion).then((()=&gt;(0,_str.get_string)("columnsortupdated","core_reportbuilder",columnName))).then(_toast.add).then((()=&gt;((0,_event_dispatcher.dispatchEvent)(reportEvents.tableReload,{},reportElement),null)))};_exports.init=initialized=&gt;{initialized||((0,_pubsub.subscribe)(reportEvents.publish.reportColumnsUpdated,(data=&gt;reloadSettingsSortingRegion(data).catch(_notification.default.exception))),document.addEventListener("click",(event=&gt;{const toggleSorting=event.target.closest(reportSelectors.actions.reportToggleColumnSort);if(toggleSorting){event.preventDefault();const pendingPromise=new _pending.default("core_reportbuilder/sorting:toggle"),reportElement=toggleSorting.closest(reportSelectors.regions.report),sortdirection=parseInt(toggleSorting.closest("li").dataset.columnSortDirection);updateSorting(reportElement,toggleSorting,toggleSorting.checked,sortdirection).then((()=&gt;{const toggleSortingElement=document.getElementById(toggleSorting.id);return null==toggleSortingElement||toggleSortingElement.focus(),pendingPromise.resolve()})).catch(_notification.default.exception)}const toggleSortDirection=event.target.closest(reportSelectors.actions.reportToggleColumnSortDirection);if(toggleSortDirection){event.preventDefault();const pendingPromise=new _pending.default("core_reportbuilder/sorting:direction"),reportElement=toggleSortDirection.closest(reportSelectors.regions.report),listElement=toggleSortDirection.closest("li"),toggleSorting=listElement.querySelector(reportSelectors.actions.reportToggleColumnSort);let sortdirection=parseInt(listElement.dataset.columnSortDirection);sortdirection===SORTORDER_ASCENDING?sortdirection=SORTORDER_DESCENDING:sortdirection===SORTORDER_DESCENDING&amp;&amp;(sortdirection=SORTORDER_ASCENDING),updateSorting(reportElement,toggleSortDirection,toggleSorting.checked,sortdirection).then((()=&gt;{const toggleSortDirectionElement=document.getElementById(toggleSortDirection.id);return null==toggleSortDirectionElement||toggleSortDirectionElement.focus(),pendingPromise.resolve()})).catch(_notification.default.exception)}})),new _sortable_list.default("".concat(reportSelectors.regions.settingsSorting," ul"),{isHorizontal:!1}).getElementName=element=&gt;Promise.resolve(element.data("columnSortName")),(0,_jquery.default)(document).on(_sortable_list.default.EVENTS.DROP,"".concat(reportSelectors.regions.report," li[data-column-sort-id]"),((event,info)=&gt;{if(info.positionChanged){const pendingPromise=new _pending.default("core_reportbuilder/sorting:reorder"),reportElement=event.target.closest(reportSelectors.regions.report),columnId=info.element.data("columnSortId"),columnPosition=info.element.data("columnSortPosition");let targetColumnSortPosition=info.targetNextElement.data("columnSortPosition")||info.element.siblings().length+2;targetColumnSortPosition&gt;columnPosition&amp;&amp;targetColumnSortPosition--,(0,_sorting.reorderColumnSorting)(reportElement.dataset.reportId,columnId,targetColumnSortPosition).then(reloadSettingsSortingRegion).then((()=&gt;(0,_str.get_string)("columnsortupdated","core_reportbuilder",info.element.data("columnSortName")))).then(_toast.add).then((()=&gt;((0,_event_dispatcher.dispatchEvent)(reportEvents.tableReload,{},reportElement),null))).then((()=&gt;pendingPromise.resolve())).catch(_notification.default.exception)}})))}}));
define("core_reportbuilder/local/editor/filters",["exports","jquery","core/custom_interaction_events","core/inplace_editable","core/notification","core/pending","core/prefetch","core/sortable_list","core/str","core/templates","core/toast","core_reportbuilder/local/selectors","core_reportbuilder/local/repository/filters"],(function(_exports,_jquery,_custom_interaction_events,_inplace_editable,_notification,_pending,_prefetch,_sortable_list,_str,_templates,_toast,reportSelectors,_filters){function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_jquery=_interopRequireDefault(_jquery),_custom_interaction_events=_interopRequireDefault(_custom_interaction_events),_notification=_interopRequireDefault(_notification),_pending=_interopRequireDefault(_pending),_sortable_list=_interopRequireDefault(_sortable_list),_templates=_interopRequireDefault(_templates),reportSelectors=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}(reportSelectors);const reloadSettingsFiltersRegion=(reportElement,templateContext)=&gt;{const pendingPromise=new _pending.default("core_reportbuilder/filters:reload"),settingsFiltersRegion=reportElement.querySelector(reportSelectors.regions.settingsFilters);return _templates.default.renderForPromise("core_reportbuilder/local/settings/filters",{filters:templateContext}).then((_ref=&gt;{let{html:html,js:js}=_ref;_templates.default.replaceNode(settingsFiltersRegion,html,js),initFiltersForm();const reportAddFilter=reportElement.querySelector(reportSelectors.actions.reportAddFilter);return null==reportAddFilter||reportAddFilter.focus(),pendingPromise.resolve()}))},initFiltersForm=()=&gt;{_custom_interaction_events.default.define(reportSelectors.actions.reportAddFilter,[_custom_interaction_events.default.events.accessibleChange])};_exports.init=initialized=&gt;{((0,_prefetch.prefetchStrings)("core_reportbuilder",["deletefilter","deletefilterconfirm","filteradded","filterdeleted","filtermoved"]),(0,_prefetch.prefetchStrings)("core",["delete"]),initFiltersForm(),initialized)||((0,_jquery.default)(document).on(_custom_interaction_events.default.events.accessibleChange,reportSelectors.actions.reportAddFilter,(event=&gt;{const reportAddFilter=event.target.closest(reportSelectors.actions.reportAddFilter);if(reportAddFilter){if(event.preventDefault(),0===reportAddFilter.selectedIndex)return;const reportElement=reportAddFilter.closest(reportSelectors.regions.report),pendingPromise=new _pending.default("core_reportbuilder/filters:add");(0,_filters.addFilter)(reportElement.dataset.reportId,reportAddFilter.value).then((data=&gt;reloadSettingsFiltersRegion(reportElement,data))).then((()=&gt;(0,_str.get_string)("filteradded","core_reportbuilder",reportAddFilter.options[reportAddFilter.selectedIndex].text))).then(_toast.add).then((()=&gt;pendingPromise.resolve())).catch(_notification.default.exception)}})),document.addEventListener("click",(event=&gt;{const reportRemoveFilter=event.target.closest(reportSelectors.actions.reportRemoveFilter);if(reportRemoveFilter){event.preventDefault();const reportElement=reportRemoveFilter.closest(reportSelectors.regions.report),filterContainer=reportRemoveFilter.closest(reportSelectors.regions.activeFilter),filterName=filterContainer.dataset.filterName;_notification.default.saveCancelPromise((0,_str.get_string)("deletefilter","core_reportbuilder",filterName),(0,_str.get_string)("deletefilterconfirm","core_reportbuilder",filterName),(0,_str.get_string)("delete","core"),{triggerElement:reportRemoveFilter}).then((()=&gt;{const pendingPromise=new _pending.default("core_reportbuilder/filters:remove");return(0,_filters.deleteFilter)(reportElement.dataset.reportId,filterContainer.dataset.filterId).then((data=&gt;reloadSettingsFiltersRegion(reportElement,data))).then((()=&gt;(0,_toast.add)((0,_str.get_string)("filterdeleted","core_reportbuilder",filterName)))).then((()=&gt;pendingPromise.resolve())).catch(_notification.default.exception)})).catch((()=&gt;{}))}})),new _sortable_list.default("".concat(reportSelectors.regions.activeFilters," ul"),{isHorizontal:!1}).getElementName=element=&gt;Promise.resolve(element.data("filterName")),(0,_jquery.default)(document).on(_sortable_list.default.EVENTS.DROP,"".concat(reportSelectors.regions.report," li[data-filter-id]"),((event,info)=&gt;{if(info.positionChanged){const pendingPromise=new _pending.default("core_reportbuilder/filters:reorder"),reportElement=event.target.closest(reportSelectors.regions.report),filterId=info.element.data("filterId"),filterPosition=info.element.data("filterPosition");let targetFilterPosition=info.targetNextElement.data("filterPosition")||info.element.siblings().length+2;targetFilterPosition&gt;filterPosition&amp;&amp;targetFilterPosition--,(0,_filters.reorderFilter)(reportElement.dataset.reportId,filterId,targetFilterPosition).then((data=&gt;reloadSettingsFiltersRegion(reportElement,data))).then((()=&gt;(0,_str.get_string)("filtermoved","core_reportbuilder",info.element.data("filterName")))).then(_toast.add).then((()=&gt;pendingPromise.resolve())).catch(_notification.default.exception)}})))}}));
define("core_reportbuilder/local/editor/conditions",["exports","jquery","core/custom_interaction_events","core/event_dispatcher","core/inplace_editable","core/notification","core/pending","core/prefetch","core/sortable_list","core/str","core/templates","core/toast","core_form/dynamicform","core_reportbuilder/local/events","core_reportbuilder/local/selectors","core_reportbuilder/local/repository/conditions"],(function(_exports,_jquery,_custom_interaction_events,_event_dispatcher,_inplace_editable,_notification,_pending,_prefetch,_sortable_list,_str,_templates,_toast,_dynamicform,reportEvents,reportSelectors,_conditions){function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_jquery=_interopRequireDefault(_jquery),_custom_interaction_events=_interopRequireDefault(_custom_interaction_events),_notification=_interopRequireDefault(_notification),_pending=_interopRequireDefault(_pending),_sortable_list=_interopRequireDefault(_sortable_list),_templates=_interopRequireDefault(_templates),_dynamicform=_interopRequireDefault(_dynamicform),reportEvents=_interopRequireWildcard(reportEvents),reportSelectors=_interopRequireWildcard(reportSelectors);const reloadSettingsConditionsRegion=(reportElement,templateContext)=&gt;{const pendingPromise=new _pending.default("core_reportbuilder/conditions:reload"),settingsConditionsRegion=reportElement.querySelector(reportSelectors.regions.settingsConditions);return _templates.default.renderForPromise("core_reportbuilder/local/settings/conditions",{conditions:templateContext}).then((_ref=&gt;{let{html:html,js:js}=_ref;const conditionsjs=_jquery.default.parseHTML(templateContext.javascript,null,!0).map((node=&gt;node.innerHTML)).join("\n");_templates.default.replaceNode(settingsConditionsRegion,html,js+conditionsjs),initConditionsForm();const reportAddCondition=reportElement.querySelector(reportSelectors.actions.reportAddCondition);return null==reportAddCondition||reportAddCondition.focus(),pendingPromise.resolve()}))},initConditionsForm=()=&gt;{_custom_interaction_events.default.define(reportSelectors.actions.reportAddCondition,[_custom_interaction_events.default.events.accessibleChange]);const reportElement=document.querySelector(reportSelectors.regions.report),conditionFormContainer=reportElement.querySelector(reportSelectors.regions.settingsConditions);if(!conditionFormContainer)return;const conditionForm=new _dynamicform.default(conditionFormContainer,"\\core_reportbuilder\\form\\condition");conditionForm.addEventListener(conditionForm.events.FORM_SUBMITTED,(event=&gt;{event.preventDefault(),(0,_str.get_string)("conditionsapplied","core_reportbuilder").then(_toast.add).catch(_notification.default.exception),(0,_event_dispatcher.dispatchEvent)(reportEvents.tableReload,{},reportElement)})),conditionForm.addEventListener(conditionForm.events.NOSUBMIT_BUTTON_PRESSED,(event=&gt;{event.preventDefault(),_notification.default.saveCancelPromise((0,_str.get_string)("resetconditions","core_reportbuilder"),(0,_str.get_string)("resetconditionsconfirm","core_reportbuilder"),(0,_str.get_string)("resetall","core_reportbuilder"),{triggerElement:event.detail}).then((()=&gt;{const pendingPromise=new _pending.default("core_reportbuilder/conditions:reset");return(0,_conditions.resetConditions)(reportElement.dataset.reportId).then((data=&gt;reloadSettingsConditionsRegion(reportElement,data))).then((()=&gt;(0,_toast.add)((0,_str.get_string)("conditionsreset","core_reportbuilder")))).then((()=&gt;((0,_event_dispatcher.dispatchEvent)(reportEvents.tableReload,{},reportElement),pendingPromise.resolve()))).catch(_notification.default.exception)})).catch((()=&gt;{}))}))};_exports.init=initialized=&gt;{((0,_prefetch.prefetchStrings)("core_reportbuilder",["conditionadded","conditiondeleted","conditionmoved","conditionsapplied","conditionsreset","deletecondition","deleteconditionconfirm","resetall","resetconditions","resetconditionsconfirm"]),(0,_prefetch.prefetchStrings)("core",["delete"]),initConditionsForm(),initialized)||((0,_jquery.default)(document).on(_custom_interaction_events.default.events.accessibleChange,reportSelectors.actions.reportAddCondition,(event=&gt;{const reportAddCondition=event.target.closest(reportSelectors.actions.reportAddCondition);if(reportAddCondition){if(event.preventDefault(),0===reportAddCondition.selectedIndex)return;const reportElement=reportAddCondition.closest(reportSelectors.regions.report),pendingPromise=new _pending.default("core_reportbuilder/conditions:add");(0,_conditions.addCondition)(reportElement.dataset.reportId,reportAddCondition.value).then((data=&gt;reloadSettingsConditionsRegion(reportElement,data))).then((()=&gt;(0,_str.get_string)("conditionadded","core_reportbuilder",reportAddCondition.options[reportAddCondition.selectedIndex].text))).then(_toast.add).then((()=&gt;((0,_event_dispatcher.dispatchEvent)(reportEvents.tableReload,{},reportElement),pendingPromise.resolve()))).catch(_notification.default.exception)}})),document.addEventListener("click",(event=&gt;{const reportRemoveCondition=event.target.closest(reportSelectors.actions.reportRemoveCondition);if(reportRemoveCondition){event.preventDefault();const reportElement=reportRemoveCondition.closest(reportSelectors.regions.report),conditionContainer=reportRemoveCondition.closest(reportSelectors.regions.activeCondition),conditionName=conditionContainer.dataset.conditionName;_notification.default.saveCancelPromise((0,_str.get_string)("deletecondition","core_reportbuilder",conditionName),(0,_str.get_string)("deleteconditionconfirm","core_reportbuilder",conditionName),(0,_str.get_string)("delete","core"),{triggerElement:reportRemoveCondition}).then((()=&gt;{const pendingPromise=new _pending.default("core_reportbuilder/conditions:remove");return(0,_conditions.deleteCondition)(reportElement.dataset.reportId,conditionContainer.dataset.conditionId).then((data=&gt;reloadSettingsConditionsRegion(reportElement,data))).then((()=&gt;(0,_toast.add)((0,_str.get_string)("conditiondeleted","core_reportbuilder",conditionName)))).then((()=&gt;((0,_event_dispatcher.dispatchEvent)(reportEvents.tableReload,{},reportElement),pendingPromise.resolve()))).catch(_notification.default.exception)})).catch((()=&gt;{}))}})),new _sortable_list.default("".concat(reportSelectors.regions.activeConditions),{isHorizontal:!1}).getElementName=element=&gt;Promise.resolve(element.data("conditionName")),(0,_jquery.default)(document).on(_sortable_list.default.EVENTS.DROP,reportSelectors.regions.activeCondition,((event,info)=&gt;{if(info.positionChanged){const pendingPromise=new _pending.default("core_reportbuilder/conditions:reorder"),reportElement=event.target.closest(reportSelectors.regions.report),conditionId=info.element.data("conditionId"),conditionPosition=info.element.data("conditionPosition");let targetConditionPosition=info.targetNextElement.data("conditionPosition")||info.element.siblings().length+2;targetConditionPosition&gt;conditionPosition&amp;&amp;targetConditionPosition--,(0,_conditions.reorderCondition)(reportElement.dataset.reportId,conditionId,targetConditionPosition).then((data=&gt;reloadSettingsConditionsRegion(reportElement,data))).then((()=&gt;(0,_str.get_string)("conditionmoved","core_reportbuilder",info.element.data("conditionName")))).then(_toast.add).then((()=&gt;((0,_event_dispatcher.dispatchEvent)(reportEvents.tableReload,{},reportElement),pendingPromise.resolve()))).catch(_notification.default.exception)}})))}}));
define("core_reportbuilder/local/editor/card_view",["exports","core_form/dynamicform","core/toast","core/str","core/pubsub","core/notification","core_reportbuilder/local/events","core_reportbuilder/local/selectors"],(function(_exports,_dynamicform,_toast,_str,_pubsub,_notification,reportEvents,reportSelectors){function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_dynamicform=_interopRequireDefault(_dynamicform),_notification=_interopRequireDefault(_notification),reportEvents=_interopRequireWildcard(reportEvents),reportSelectors=_interopRequireWildcard(reportSelectors);let cardViewForm=null;_exports.init=initialized=&gt;{(()=&gt;{const cardViewFormContainer=document.querySelector(reportSelectors.regions.settingsCardView);cardViewFormContainer&amp;&amp;(cardViewForm=new _dynamicform.default(cardViewFormContainer,"\\core_reportbuilder\\form\\card_view"),cardViewForm.addEventListener(cardViewForm.events.FORM_SUBMITTED,(event=&gt;{event.preventDefault(),(0,_str.get_string)("cardviewsettingssaved","core_reportbuilder").then(_toast.add).catch(_notification.default.exception)})))})(),initialized||(0,_pubsub.subscribe)(reportEvents.publish.reportColumnsUpdated,(()=&gt;{const reportElement=document.querySelector(reportSelectors.regions.report);cardViewForm.load({reportid:reportElement.dataset.reportId})}))}}));
define("core_reportbuilder/audience",["exports","core/inplace_editable","core/templates","core/notification","core/pending","core/prefetch","core/str","core_form/dynamicform","core/toast","core_reportbuilder/local/repository/audiences","core_reportbuilder/local/selectors","core/fragment","core_form/changechecker"],(function(_exports,_inplace_editable,_templates,_notification,_pending,_prefetch,_str,_dynamicform,_toast,_audiences,reportSelectors,_fragment,_changechecker){function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_templates=_interopRequireDefault(_templates),_notification=_interopRequireDefault(_notification),_pending=_interopRequireDefault(_pending),_dynamicform=_interopRequireDefault(_dynamicform),reportSelectors=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}(reportSelectors);let reportId=0,contextId=0;const initAudienceCardForm=audienceCard=&gt;{const audienceFormContainer=audienceCard.querySelector(reportSelectors.regions.audienceFormContainer),audienceForm=new _dynamicform.default(audienceFormContainer,"\\core_reportbuilder\\form\\audience");return audienceForm.addEventListener(audienceForm.events.FORM_SUBMITTED,(data=&gt;{const audienceHeading=audienceCard.querySelector(reportSelectors.regions.audienceHeading),audienceDescription=audienceCard.querySelector(reportSelectors.regions.audienceDescription);return audienceCard.dataset.instanceid=data.detail.instanceid,audienceHeading.innerHTML=data.detail.heading,audienceDescription.innerHTML=data.detail.description,closeAudienceCardForm(audienceCard),(0,_str.get_string)("audiencesaved","core_reportbuilder").then(_toast.add)})),audienceForm.addEventListener(audienceForm.events.FORM_CANCELLED,(()=&gt;{audienceCard.dataset.instanceid&gt;0?closeAudienceCardForm(audienceCard):removeAudienceCard(audienceCard)})),audienceForm},closeAudienceCardForm=audienceCard=&gt;{const audienceFormContainer=audienceCard.querySelector(reportSelectors.regions.audienceFormContainer),NewAudienceFormContainer=audienceFormContainer.cloneNode(!1);audienceCard.querySelector(reportSelectors.regions.audienceForm).replaceChild(NewAudienceFormContainer,audienceFormContainer),audienceCard.querySelector(reportSelectors.regions.audienceDescription).classList.remove("hidden"),audienceCard.querySelector(reportSelectors.actions.audienceEdit).disabled=!1,audienceCard.querySelector(reportSelectors.actions.audienceDelete).disabled=!1},removeAudienceCard=audienceCard=&gt;{audienceCard.remove();const audienceCards=document.querySelector(reportSelectors.regions.audiencesContainer).querySelectorAll(reportSelectors.regions.audienceCard);if(0===audienceCards.length){document.querySelector(reportSelectors.regions.audienceEmptyMessage).classList.remove("hidden")}else{const audienceFirstCardSeparator=audienceCards[0].querySelector(".audience-separator");null==audienceFirstCardSeparator||audienceFirstCardSeparator.remove()}};let initialized=!1;_exports.init=(id,contextid)=&gt;{(0,_prefetch.prefetchStrings)("core_reportbuilder",["audienceadded","audiencedeleted","audiencesaved","deleteaudience","deleteaudienceconfirm"]),(0,_prefetch.prefetchStrings)("core",["delete"]),reportId=id,contextId=contextid,initialized||(document.addEventListener("click",(event=&gt;{const audienceAdd=event.target.closest(reportSelectors.actions.audienceAdd);audienceAdd&amp;&amp;(event.preventDefault(),((className,title)=&gt;{const pendingPromise=new _pending.default("core_reportbuilder/audience:add"),audiencesContainer=document.querySelector(reportSelectors.regions.audiencesContainer),audienceCardLength=audiencesContainer.querySelectorAll(reportSelectors.regions.audienceCard).length,params={classname:className,reportid:reportId,showormessage:audienceCardLength&gt;0,title:title};(0,_fragment.loadFragment)("core_reportbuilder","audience_form",contextId,params).then(((html,js)=&gt;{const audienceCard=_templates.default.appendNodeContents(audiencesContainer,html,js)[0],audienceEmptyMessage=audiencesContainer.querySelector(reportSelectors.regions.audienceEmptyMessage),audienceForm=initAudienceCardForm(audienceCard);return(0,_changechecker.markFormAsDirty)(audienceForm.getFormNode()),audienceEmptyMessage.classList.add("hidden"),(0,_str.get_string)("audienceadded","core_reportbuilder",title)})).then(_toast.add).then((()=&gt;pendingPromise.resolve())).catch(_notification.default.exception)})(audienceAdd.dataset.uniqueIdentifier,audienceAdd.dataset.name));const audienceEdit=event.target.closest(reportSelectors.actions.audienceEdit);if(audienceEdit){const audienceEditCard=audienceEdit.closest(reportSelectors.regions.audienceCard);event.preventDefault(),(audienceCard=&gt;{const pendingPromise=new _pending.default("core_reportbuilder/audience:edit");initAudienceCardForm(audienceCard).load({id:audienceCard.dataset.instanceid}).then((()=&gt;{const audienceFormContainer=audienceCard.querySelector(reportSelectors.regions.audienceFormContainer),audienceDescription=audienceCard.querySelector(reportSelectors.regions.audienceDescription),audienceEdit=audienceCard.querySelector(reportSelectors.actions.audienceEdit);return audienceFormContainer.classList.remove("hidden"),audienceDescription.classList.add("hidden"),audienceEdit.disabled=!0,pendingPromise.resolve()})).catch(_notification.default.exception)})(audienceEditCard)}const audienceDelete=event.target.closest(reportSelectors.actions.audienceDelete);audienceDelete&amp;&amp;(event.preventDefault(),(audienceDelete=&gt;{const audienceCard=audienceDelete.closest(reportSelectors.regions.audienceCard),audienceTitle=audienceCard.dataset.title;_notification.default.saveCancelPromise((0,_str.get_string)("deleteaudience","core_reportbuilder",audienceTitle),(0,_str.get_string)("deleteaudienceconfirm","core_reportbuilder",audienceTitle),(0,_str.get_string)("delete","core"),{triggerElement:audienceDelete}).then((()=&gt;{const pendingPromise=new _pending.default("core_reportbuilder/audience:delete");return(0,_audiences.deleteAudience)(reportId,audienceCard.dataset.instanceid).then((()=&gt;(0,_toast.add)((0,_str.get_string)("audiencedeleted","core_reportbuilder",audienceTitle)))).then((()=&gt;(removeAudienceCard(audienceCard),pendingPromise.resolve()))).catch(_notification.default.exception)})).catch((()=&gt;{}))})(audienceDelete))})),initialized=!0)}}));
define("core_reportbuilder/report",["exports","core/notification","core_reportbuilder/local/events","core_reportbuilder/local/selectors","core_table/dynamic","core_table/local/dynamic/selectors"],(function(_exports,_notification,reportEvents,reportSelectors,_dynamic,tableSelectors){var obj;
/**
   * Report builder report management
   *
   * @module      core_reportbuilder/report
   * @copyright   2021 Paul Holden &lt;paulh@moodle.com&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_notification=(obj=_notification)&amp;&amp;obj.__esModule?obj:{default:obj},reportEvents=_interopRequireWildcard(reportEvents),reportSelectors=_interopRequireWildcard(reportSelectors),tableSelectors=_interopRequireWildcard(tableSelectors);const CLASSES_COLLAPSED="collapsed",CLASSES_EXPANDED="show",CLASSES_ICONUP="fa-angle-up",CLASSES_ICONDOWN="fa-angle-down";let initialized=!1;_exports.init=()=&gt;{initialized||(document.addEventListener(reportEvents.tableReload,(async event=&gt;{var _event$detail;const reportElement=event.target.closest(reportSelectors.regions.report);if(null===reportElement)return;const tableRoot=reportElement.querySelector(tableSelectors.main.region),pageNumber=null!==(_event$detail=event.detail)&amp;&amp;void 0!==_event$detail&amp;&amp;_event$detail.preservePagination?null:1;await(0,_dynamic.setPageNumber)(tableRoot,pageNumber,!1).then(_dynamic.refreshTableContent).then((()=&gt;{var _event$detail2;const preserveTriggerElement=null===(_event$detail2=event.detail)||void 0===_event$detail2?void 0:_event$detail2.preserveTriggerElement;var _reportElement$queryS;preserveTriggerElement&amp;&amp;(null===(_reportElement$queryS=reportElement.querySelector(preserveTriggerElement))||void 0===_reportElement$queryS||_reportElement$queryS.focus())})).catch(_notification.default.exception)})),document.addEventListener("click",(event=&gt;{const reportActionPopup=event.target.closest(reportSelectors.actions.reportActionPopup);if(null===reportActionPopup)return;event.preventDefault();const popupAction=JSON.parse(reportActionPopup.dataset.popupAction);window.openpopup(event,popupAction.jsfunctionargs)})),document.addEventListener("click",(event=&gt;{const toggleCard=event.target.closest(reportSelectors.actions.toggleCardView);if(toggleCard){const tableCard=toggleCard.closest("tr"),toggleIcon=toggleCard.querySelector("i");event.preventDefault(),toggleCard.classList.contains(CLASSES_COLLAPSED)?(tableCard.classList.add(CLASSES_EXPANDED),toggleIcon.classList.replace(CLASSES_ICONDOWN,CLASSES_ICONUP),toggleCard.classList.remove(CLASSES_COLLAPSED),toggleCard.setAttribute("aria-expanded","true")):(tableCard.classList.remove(CLASSES_EXPANDED),toggleIcon.classList.replace(CLASSES_ICONUP,CLASSES_ICONDOWN),toggleCard.classList.add(CLASSES_COLLAPSED),toggleCard.removeAttribute("aria-expanded"))}})),initialized=!0)}}));
define("core_reportbuilder/editor",["exports","jquery","core/inplace_editable","core/loadingicon","core/notification","core/pending","core/templates","core/str","core/toast","core_reportbuilder/local/selectors","core_reportbuilder/local/editor/columns","core_reportbuilder/local/editor/conditions","core_reportbuilder/local/editor/filters","core_reportbuilder/local/editor/sorting","core_reportbuilder/local/editor/card_view","core_reportbuilder/local/repository/reports","core_reportbuilder/local/repository/modals"],(function(_exports,_jquery,_inplace_editable,_loadingicon,_notification,_pending,_templates,_str,_toast,reportSelectors,_columns,_conditions,_filters,_sorting,_card_view,_reports,_modals){function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_jquery=_interopRequireDefault(_jquery),_notification=_interopRequireDefault(_notification),_pending=_interopRequireDefault(_pending),_templates=_interopRequireDefault(_templates),reportSelectors=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}(reportSelectors);let initialized=!1;_exports.init=()=&gt;{(0,_columns.init)(initialized),(0,_conditions.init)(initialized),(0,_filters.init)(initialized),(0,_sorting.init)(initialized),(0,_card_view.init)(initialized),initialized||(document.addEventListener("click",(event=&gt;{const toggleEditViewMode=event.target.closest(reportSelectors.actions.toggleEditPreview);if(toggleEditViewMode){event.preventDefault();const reportElement=event.target.closest(reportSelectors.regions.report),pendingPromise=new _pending.default("core_reportbuilder/reports:get"),toggledEditMode="1"!==toggleEditViewMode.dataset.editMode;(0,_loadingicon.addIconToContainer)(toggleEditViewMode).then((()=&gt;(0,_reports.getReport)(reportElement.dataset.reportId,toggledEditMode))).then((response=&gt;Promise.all([_jquery.default.parseHTML(response.javascript,null,!0).map((node=&gt;node.innerHTML)).join("\n"),_templates.default.renderForPromise("core_reportbuilder/local/dynamictabs/editor",response)]))).then((_ref=&gt;{let[responseJs,{html:html,js:js}]=_ref;return _templates.default.replaceNode(reportElement,html,js+responseJs)})).then((()=&gt;pendingPromise.resolve())).catch(_notification.default.exception)}const reportEdit=event.target.closest(reportSelectors.actions.reportEdit);if(reportEdit){event.preventDefault();const reportModal=(0,_modals.createReportModal)(event.target,(0,_str.get_string)("editreportdetails","core_reportbuilder"),reportEdit.dataset.reportId);reportModal.addEventListener(reportModal.events.FORM_SUBMITTED,(()=&gt;{(0,_str.get_string)("reportupdated","core_reportbuilder").then(_toast.add).then((()=&gt;window.location.reload())).catch(_notification.default.exception)})),reportModal.show()}})),initialized=!0)}}));
define("core_reportbuilder/filters",["exports","core/event_dispatcher","core/fragment","core/notification","core/pending","core/str","core/templates","core/toast","core_form/dynamicform","core_reportbuilder/local/events","core_reportbuilder/local/selectors","core_reportbuilder/local/repository/filters"],(function(_exports,_event_dispatcher,_fragment,_notification,_pending,_str,_templates,_toast,_dynamicform,reportEvents,reportSelectors,_filters){function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Report builder filter management
   *
   * @module      core_reportbuilder/filters
   * @copyright   2021 Paul Holden &lt;paulh@moodle.com&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_notification=_interopRequireDefault(_notification),_pending=_interopRequireDefault(_pending),_templates=_interopRequireDefault(_templates),_dynamicform=_interopRequireDefault(_dynamicform),reportEvents=_interopRequireWildcard(reportEvents),reportSelectors=_interopRequireWildcard(reportSelectors);const setFilterButtonCount=async(reportElement,filterCount)=&gt;{const filterButtonLabel=reportElement.querySelector(reportSelectors.regions.filterButtonLabel);filterButtonLabel.textContent=filterCount&gt;0?await(0,_str.get_string)("filtersappliedx","core_reportbuilder",filterCount):await(0,_str.get_string)("filters","moodle")};_exports.init=(reportId,contextId)=&gt;{const reportElement=document.querySelector(reportSelectors.forReport(reportId)),filterFormContainer=reportElement.querySelector(reportSelectors.regions.filtersForm);if(filterFormContainer.dataset.initialized)return;filterFormContainer.dataset.initialized=!0;const filterForm=new _dynamicform.default(filterFormContainer,"\\core_reportbuilder\\form\\filter");filterForm.addEventListener(filterForm.events.FORM_SUBMITTED,(event=&gt;{event.preventDefault(),(0,_event_dispatcher.dispatchEvent)(reportEvents.tableReload,{},reportElement),setFilterButtonCount(reportElement,event.detail),(0,_str.get_string)("filtersapplied","core_reportbuilder").then(_toast.add).catch(_notification.default.exception)})),filterForm.addEventListener(filterForm.events.NOSUBMIT_BUTTON_PRESSED,(event=&gt;{event.preventDefault();const pendingPromise=new _pending.default("core_reportbuilder/filters:reset"),reportParameters=reportElement.dataset.parameter;(0,_filters.resetFilters)(reportId,reportParameters).then((()=&gt;(0,_str.get_string)("filtersreset","core_reportbuilder"))).then(_toast.add).then((()=&gt;(0,_fragment.loadFragment)("core_reportbuilder","filters_form",contextId,{reportid:reportId,parameters:reportParameters}))).then(((html,js)=&gt;(_templates.default.replaceNodeContents(filterFormContainer,html,js),(0,_event_dispatcher.dispatchEvent)(reportEvents.tableReload,{},reportElement),setFilterButtonCount(reportElement,0),pendingPromise.resolve()))).catch(_notification.default.exception)})),document.querySelector("#region-main").style.overflowX="visible"}}));
define("core_reportbuilder/reports_list",["exports","core/event_dispatcher","core/notification","core/pending","core/prefetch","core/str","core/toast","core_reportbuilder/local/events","core_reportbuilder/local/selectors","core_reportbuilder/local/repository/reports","core_reportbuilder/local/repository/modals"],(function(_exports,_event_dispatcher,_notification,_pending,_prefetch,_str,_toast,reportEvents,reportSelectors,_reports,_modals){function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_notification=_interopRequireDefault(_notification),_pending=_interopRequireDefault(_pending),reportEvents=_interopRequireWildcard(reportEvents),reportSelectors=_interopRequireWildcard(reportSelectors);_exports.init=()=&gt;{(0,_prefetch.prefetchStrings)("core_reportbuilder",["deletereport","deletereportconfirm","editreportdetails","newreport","reportdeleted","reportupdated"]),(0,_prefetch.prefetchStrings)("core",["delete"]),document.addEventListener("click",(event=&gt;{if(event.target.closest(reportSelectors.actions.reportCreate)){event.preventDefault();const reportModal=(0,_modals.createReportModal)(event.target,(0,_str.get_string)("newreport","core_reportbuilder"));reportModal.addEventListener(reportModal.events.FORM_SUBMITTED,(event=&gt;{window.location.href=event.detail})),reportModal.show()}const reportEdit=event.target.closest(reportSelectors.actions.reportEdit);if(reportEdit){event.preventDefault();const triggerElement=reportEdit.closest(".dropdown").querySelector(".dropdown-toggle"),reportModal=(0,_modals.createReportModal)(triggerElement,(0,_str.get_string)("editreportdetails","core_reportbuilder"),reportEdit.dataset.reportId);reportModal.addEventListener(reportModal.events.FORM_SUBMITTED,(()=&gt;{const reportElement=event.target.closest(reportSelectors.regions.report);(0,_str.get_string)("reportupdated","core_reportbuilder").then(_toast.add).then((()=&gt;{(0,_event_dispatcher.dispatchEvent)(reportEvents.tableReload,{preservePagination:!0},reportElement)})).catch(_notification.default.exception)})),reportModal.show()}const reportDelete=event.target.closest(reportSelectors.actions.reportDelete);if(reportDelete){event.preventDefault();const triggerElement=reportDelete.closest(".dropdown").querySelector(".dropdown-toggle");_notification.default.saveCancelPromise((0,_str.get_string)("deletereport","core_reportbuilder"),(0,_str.get_string)("deletereportconfirm","core_reportbuilder",reportDelete.dataset.reportName),(0,_str.get_string)("delete","core"),{triggerElement:triggerElement}).then((()=&gt;{const pendingPromise=new _pending.default("core_reportbuilder/reports:delete"),reportElement=event.target.closest(reportSelectors.regions.report);return(0,_reports.deleteReport)(reportDelete.dataset.reportId).then((()=&gt;(0,_toast.add)((0,_str.get_string)("reportdeleted","core_reportbuilder")))).then((()=&gt;((0,_event_dispatcher.dispatchEvent)(reportEvents.tableReload,{preservePagination:!0},reportElement),pendingPromise.resolve()))).catch(_notification.default.exception)})).catch((()=&gt;{}))}}))}}));
define("core_reportbuilder/schedules",["exports","core/event_dispatcher","core/inplace_editable","core/notification","core/pending","core/prefetch","core/str","core/toast","core_reportbuilder/local/events","core_reportbuilder/local/selectors","core_reportbuilder/local/repository/modals","core_reportbuilder/local/repository/schedules"],(function(_exports,_event_dispatcher,_inplace_editable,_notification,_pending,_prefetch,_str,_toast,reportEvents,reportSelectors,_modals,_schedules){function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_notification=_interopRequireDefault(_notification),_pending=_interopRequireDefault(_pending),reportEvents=_interopRequireWildcard(reportEvents),reportSelectors=_interopRequireWildcard(reportSelectors);let initialized=!1;_exports.init=reportId=&gt;{(0,_prefetch.prefetchStrings)("core_reportbuilder",["deleteschedule","deletescheduleconfirm","disableschedule","editscheduledetails","enableschedule","newschedule","schedulecreated","scheduledeleted","schedulesent","scheduleupdated","sendschedule","sendscheduleconfirm"]),(0,_prefetch.prefetchStrings)("core",["confirm","delete"]),initialized||(document.addEventListener("click",(event=&gt;{if(event.target.closest(reportSelectors.actions.scheduleCreate)){event.preventDefault();const scheduleModal=(0,_modals.createScheduleModal)(event.target,(0,_str.get_string)("newschedule","core_reportbuilder"),reportId);scheduleModal.addEventListener(scheduleModal.events.FORM_SUBMITTED,(()=&gt;{(0,_str.get_string)("schedulecreated","core_reportbuilder").then(_toast.add).then((()=&gt;{const reportElement=document.querySelector(reportSelectors.regions.report);(0,_event_dispatcher.dispatchEvent)(reportEvents.tableReload,{},reportElement)})).catch(_notification.default.exception)})),scheduleModal.show()}const scheduleToggle=event.target.closest(reportSelectors.actions.scheduleToggle);if(scheduleToggle){const pendingPromise=new _pending.default("core_reportbuilder/schedules:toggle"),scheduleStateToggle=+!Number(scheduleToggle.dataset.state);(0,_schedules.toggleSchedule)(reportId,scheduleToggle.dataset.id,scheduleStateToggle).then((()=&gt;{scheduleToggle.closest("tr").classList.toggle("text-muted"),scheduleToggle.dataset.state=scheduleStateToggle;const stringKey=scheduleStateToggle?"disableschedule":"enableschedule";return(0,_str.get_string)(stringKey,"core_reportbuilder")})).then((toggleLabel=&gt;(scheduleToggle.parentElement.querySelector('label[for="'.concat(scheduleToggle.id,'"] &gt; span')).innerHTML=toggleLabel,pendingPromise.resolve()))).catch(_notification.default.exception)}const scheduleEdit=event.target.closest(reportSelectors.actions.scheduleEdit);if(scheduleEdit){event.preventDefault();const triggerElement=scheduleEdit.closest(".dropdown").querySelector(".dropdown-toggle"),scheduleModal=(0,_modals.createScheduleModal)(triggerElement,(0,_str.get_string)("editscheduledetails","core_reportbuilder"),reportId,scheduleEdit.dataset.scheduleId);scheduleModal.addEventListener(scheduleModal.events.FORM_SUBMITTED,(()=&gt;{(0,_str.get_string)("scheduleupdated","core_reportbuilder").then(_toast.add).then((()=&gt;{const reportElement=scheduleEdit.closest(reportSelectors.regions.report);(0,_event_dispatcher.dispatchEvent)(reportEvents.tableReload,{},reportElement)})).catch(_notification.default.exception)})),scheduleModal.show()}const scheduleSend=event.target.closest(reportSelectors.actions.scheduleSend);if(scheduleSend){event.preventDefault();const triggerElement=scheduleSend.closest(".dropdown").querySelector(".dropdown-toggle");_notification.default.saveCancelPromise((0,_str.get_string)("sendschedule","core_reportbuilder"),(0,_str.get_string)("sendscheduleconfirm","core_reportbuilder",scheduleSend.dataset.scheduleName),(0,_str.get_string)("confirm","core"),{triggerElement:triggerElement}).then((()=&gt;{const pendingPromise=new _pending.default("core_reportbuilder/schedules:send");return(0,_schedules.sendSchedule)(reportId,scheduleSend.dataset.scheduleId).then((0,_toast.add)((0,_str.get_string)("schedulesent","core_reportbuilder"))).then((()=&gt;pendingPromise.resolve())).catch(_notification.default.exception)})).catch((()=&gt;{}))}const scheduleDelete=event.target.closest(reportSelectors.actions.scheduleDelete);if(scheduleDelete){event.preventDefault();const triggerElement=scheduleDelete.closest(".dropdown").querySelector(".dropdown-toggle");_notification.default.saveCancelPromise((0,_str.get_string)("deleteschedule","core_reportbuilder"),(0,_str.get_string)("deletescheduleconfirm","core_reportbuilder",scheduleDelete.dataset.scheduleName),(0,_str.get_string)("delete","core"),{triggerElement:triggerElement}).then((()=&gt;{const pendingPromise=new _pending.default("core_reportbuilder/schedules:delete");return(0,_schedules.deleteSchedule)(reportId,scheduleDelete.dataset.scheduleId).then((0,_toast.add)((0,_str.get_string)("scheduledeleted","core_reportbuilder"))).then((()=&gt;{const reportElement=scheduleDelete.closest(reportSelectors.regions.report);return(0,_event_dispatcher.dispatchEvent)(reportEvents.tableReload,{preservePagination:!0},reportElement),pendingPromise.resolve()})).catch(_notification.default.exception)})).catch((()=&gt;{}))}})),initialized=!0)}}));
/**
 * Search user selector module.
 *
 * @module core_search/form-search-user-selector
 * @copyright 2017 The Open University
 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("core_search/form-search-user-selector",["jquery","core/ajax","core/templates"],(function($,Ajax,Templates){return{processResults:function(selector,results){var users=[];return $.each(results,(function(index,user){users.push({value:user.id,label:user._label})})),users},transport:function(selector,query,success,failure){var args={query:query},courseid=$(selector).attr("withincourseid");void 0!==courseid&amp;&amp;""!==$("#id_searchwithin").val()?args.courseid=courseid:args.courseid=0,Ajax.call([{methodname:"core_search_get_relevant_users",args:args}])[0].then((function(results){var promises=[];return $.each(results,(function(index,user){promises.push(Templates.render("core_search/form-user-selector-suggestion",user))})),$.when.apply($.when,promises).then((function(){var args=arguments,i=0;$.each(results,(function(index,user){user._label=args[i++]})),success(results)}))})).fail(failure)}}}));
define("core_table/local/dynamic/selectors",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0;return _exports.default={main:{region:'[data-region="core_table/dynamic"]',fromRegionId:regionId=&gt;'[data-region="core_table/dynamic"][data-table-uniqueid="'.concat(regionId,'"]')},table:{links:{sortableColumn:'a[data-sortable="1"]',hide:'a[data-action="hide"]',show:'a[data-action="show"]'}},initialsBar:{links:{firstInitial:".firstinitial [data-initial]",lastInitial:".lastinitial [data-initial]"}},paginationBar:{links:{pageItem:".pagination [data-page-number]"}},showCount:{links:{toggle:'[data-action="showcount"]'}}},_exports.default}));
define("core_table/local/dynamic/repository",["exports","core/ajax"],(function(_exports,_ajax){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.fetch=void 0;_exports.fetch=function(component,handler,uniqueid){let{sortData:sortData=[],joinType:joinType=null,filters:filters={},firstinitial:firstinitial=null,lastinitial:lastinitial=null,pageNumber:pageNumber=null,pageSize:pageSize=null,hiddenColumns:hiddenColumns={}}=arguments.length&gt;3&amp;&amp;void 0!==arguments[3]?arguments[3]:{},resetPreferences=arguments.length&gt;4&amp;&amp;void 0!==arguments[4]&amp;&amp;arguments[4];return(0,_ajax.call)([{methodname:"core_table_get_dynamic_table_content",args:{component:component,handler:handler,uniqueid:uniqueid,sortdata:sortData,jointype:joinType,filters:filters,firstinitial:firstinitial,lastinitial:lastinitial,pagenumber:pageNumber,pagesize:pageSize,hiddencolumns:hiddenColumns,resetpreferences:resetPreferences}}])[0]}}));
define("core_table/local/dynamic/events",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0;var eventName,_default={tableContentRefreshed:(eventName="tableContentRefreshed","core_table/dynamic:".concat(eventName))};return _exports.default=_default,_exports.default}));
define("core_table/dynamic",["exports","core_table/local/dynamic/selectors","./local/dynamic/events","core/pending","core/loadingicon","core_table/local/dynamic/repository","core/notification"],(function(_exports,Selectors,_events,_pending,_loadingicon,_repository,_notification){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}Object.defineProperty(_exports,"__esModule",{value:!0}),Object.defineProperty(_exports,"Events",{enumerable:!0,get:function(){return _events.default}}),_exports.updateTable=_exports.showColumn=_exports.setSortOrder=_exports.setPageSize=_exports.setPageNumber=_exports.setLastInitial=_exports.setFirstInitial=_exports.setFilters=_exports.refreshTableContent=_exports.init=_exports.hideColumn=_exports.getTableFromId=_exports.getPageSize=_exports.getPageNumber=_exports.getLastInitial=_exports.getFirstInitial=_exports.getFilters=void 0,Selectors=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}
/**
   * Module to handle dynamic table features.
   *
   * @module     core_table/dynamic
   * @copyright  2020 Simey Lameze &lt;simey@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */(Selectors),_events=_interopRequireDefault(_events),_pending=_interopRequireDefault(_pending),_notification=_interopRequireDefault(_notification);let watching=!1;const checkTableIsDynamic=tableRoot=&gt;{if(!tableRoot)throw new Error("The table specified is not a dynamic table and cannot be updated");if(!tableRoot.matches(Selectors.main.region))throw new Error("The table specified is not a dynamic table and cannot be updated");return!0},getFiltersetFromTable=tableRoot=&gt;JSON.parse(tableRoot.dataset.tableFilters),refreshTableContent=function(tableRoot){let resetContent=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]&amp;&amp;arguments[1];const filterset=getFiltersetFromTable(tableRoot);(0,_loadingicon.addIconToContainer)(tableRoot);const pendingPromise=new _pending.default("core_table/dynamic:refreshTableContent");return(0,_repository.fetch)(tableRoot.dataset.tableComponent,tableRoot.dataset.tableHandler,tableRoot.dataset.tableUniqueid,{sortData:JSON.parse(tableRoot.dataset.tableSortData),joinType:filterset.jointype,filters:filterset.filters,firstinitial:tableRoot.dataset.tableFirstInitial,lastinitial:tableRoot.dataset.tableLastInitial,pageNumber:tableRoot.dataset.tablePageNumber,pageSize:tableRoot.dataset.tablePageSize,hiddenColumns:JSON.parse(tableRoot.dataset.tableHiddenColumns)},resetContent).then((data=&gt;{const placeholder=document.createElement("div");return placeholder.innerHTML=data.html,tableRoot.replaceWith(...placeholder.childNodes),getTableFromId(tableRoot.dataset.tableUniqueid)})).then((tableRoot=&gt;(tableRoot.dispatchEvent(new CustomEvent(_events.default.tableContentRefreshed,{bubbles:!0})),tableRoot))).then((tableRoot=&gt;(pendingPromise.resolve(),tableRoot)))};_exports.refreshTableContent=refreshTableContent;const updateTable=function(tableRoot){let{sortBy:sortBy=null,sortOrder:sortOrder=null,filters:filters=null,firstInitial:firstInitial=null,lastInitial:lastInitial=null,pageNumber:pageNumber=null,pageSize:pageSize=null,hiddenColumns:hiddenColumns=null}=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]?arguments[1]:{},refreshContent=!(arguments.length&gt;2&amp;&amp;void 0!==arguments[2])||arguments[2];checkTableIsDynamic(tableRoot);const pendingPromise=new _pending.default("core_table/dynamic:updateTable");let tableConfigChanged=!1;if(sortBy&amp;&amp;sortOrder){tableConfigChanged=!0;const sortData=JSON.parse(tableRoot.dataset.tableSortData);sortData.unshift({sortby:sortBy,sortorder:parseInt(sortOrder,10)}),tableRoot.dataset.tableSortData=JSON.stringify(sortData)}if(null!==firstInitial&amp;&amp;(tableRoot.dataset.tableFirstInitial!==firstInitial&amp;&amp;(tableConfigChanged=!0),tableRoot.dataset.tableFirstInitial=firstInitial),null!==lastInitial&amp;&amp;(tableRoot.dataset.tableLastInitial!==lastInitial&amp;&amp;(tableConfigChanged=!0),tableRoot.dataset.tableLastInitial=lastInitial),null!==pageSize&amp;&amp;(tableRoot.dataset.tablePageSize!=pageSize&amp;&amp;(tableConfigChanged=!0),tableRoot.dataset.tablePageSize=pageSize),filters){const filterJson=JSON.stringify(filters);tableRoot.dataset.tableFilters!==filterJson&amp;&amp;(tableConfigChanged=!0),tableRoot.dataset.tableFilters=filterJson}if(tableConfigChanged&amp;&amp;(pageNumber=1),hiddenColumns){const columnJson=JSON.stringify(hiddenColumns);tableRoot.dataset.tableHiddenColumns!==columnJson&amp;&amp;(tableConfigChanged=!0),tableRoot.dataset.tableHiddenColumns=columnJson}return null!==pageNumber&amp;&amp;(tableRoot.dataset.tablePageNumber!=pageNumber&amp;&amp;(tableConfigChanged=!0),tableRoot.dataset.tablePageNumber=pageNumber),refreshContent&amp;&amp;tableConfigChanged?refreshTableContent(tableRoot).then((tableRoot=&gt;(pendingPromise.resolve(),tableRoot))):(pendingPromise.resolve(),Promise.resolve(tableRoot))};_exports.updateTable=updateTable;const getTableData=tableRoot=&gt;(checkTableIsDynamic(tableRoot),tableRoot.dataset);_exports.setFilters=function(tableRoot,filters){let refreshContent=!(arguments.length&gt;2&amp;&amp;void 0!==arguments[2])||arguments[2];return updateTable(tableRoot,{filters:filters},refreshContent)};_exports.getFilters=tableRoot=&gt;(checkTableIsDynamic(tableRoot),getFiltersetFromTable(tableRoot));const setSortOrder=function(tableRoot,sortBy,sortOrder){let refreshContent=!(arguments.length&gt;3&amp;&amp;void 0!==arguments[3])||arguments[3];return updateTable(tableRoot,{sortBy:sortBy,sortOrder:sortOrder},refreshContent)};_exports.setSortOrder=setSortOrder;const setPageNumber=function(tableRoot,pageNumber){let refreshContent=!(arguments.length&gt;2&amp;&amp;void 0!==arguments[2])||arguments[2];return updateTable(tableRoot,{pageNumber:pageNumber},refreshContent)};_exports.setPageNumber=setPageNumber;_exports.getPageNumber=tableRoot=&gt;getTableData(tableRoot).tablePageNumber;const setPageSize=function(tableRoot,pageSize){let refreshContent=!(arguments.length&gt;2&amp;&amp;void 0!==arguments[2])||arguments[2];return updateTable(tableRoot,{pageSize:pageSize,pageNumber:1},refreshContent)};_exports.setPageSize=setPageSize;_exports.getPageSize=tableRoot=&gt;getTableData(tableRoot).tablePageSize;const setFirstInitial=function(tableRoot,firstInitial){let refreshContent=!(arguments.length&gt;2&amp;&amp;void 0!==arguments[2])||arguments[2];return updateTable(tableRoot,{firstInitial:firstInitial},refreshContent)};_exports.setFirstInitial=setFirstInitial;_exports.getFirstInitial=tableRoot=&gt;getTableData(tableRoot).tableFirstInitial;const setLastInitial=function(tableRoot,lastInitial){let refreshContent=!(arguments.length&gt;2&amp;&amp;void 0!==arguments[2])||arguments[2];return updateTable(tableRoot,{lastInitial:lastInitial},refreshContent)};_exports.setLastInitial=setLastInitial;_exports.getLastInitial=tableRoot=&gt;getTableData(tableRoot).tableLastInitial;const hideColumn=function(tableRoot,columnToHide){let refreshContent=!(arguments.length&gt;2&amp;&amp;void 0!==arguments[2])||arguments[2];const hiddenColumns=JSON.parse(tableRoot.dataset.tableHiddenColumns);return hiddenColumns.push(columnToHide),updateTable(tableRoot,{hiddenColumns:hiddenColumns},refreshContent)};_exports.hideColumn=hideColumn;const showColumn=function(tableRoot,columnToShow){let refreshContent=!(arguments.length&gt;2&amp;&amp;void 0!==arguments[2])||arguments[2],hiddenColumns=JSON.parse(tableRoot.dataset.tableHiddenColumns);return hiddenColumns=hiddenColumns.filter((columnName=&gt;columnName!==columnToShow)),updateTable(tableRoot,{hiddenColumns:hiddenColumns},refreshContent)};_exports.showColumn=showColumn;_exports.init=()=&gt;{watching||(watching=!0,document.addEventListener("click",(e=&gt;{const tableRoot=e.target.closest(Selectors.main.region);if(!tableRoot)return;const sortableLink=e.target.closest(Selectors.table.links.sortableColumn);sortableLink&amp;&amp;(e.preventDefault(),setSortOrder(tableRoot,sortableLink.dataset.sortby,sortableLink.dataset.sortorder).catch(_notification.default.exception));const firstInitialLink=e.target.closest(Selectors.initialsBar.links.firstInitial);null!==firstInitialLink&amp;&amp;(e.preventDefault(),setFirstInitial(tableRoot,firstInitialLink.dataset.initial).catch(_notification.default.exception));const lastInitialLink=e.target.closest(Selectors.initialsBar.links.lastInitial);null!==lastInitialLink&amp;&amp;(e.preventDefault(),setLastInitial(tableRoot,lastInitialLink.dataset.initial).catch(_notification.default.exception));const pageItem=e.target.closest(Selectors.paginationBar.links.pageItem);pageItem&amp;&amp;(e.preventDefault(),setPageNumber(tableRoot,pageItem.dataset.pageNumber).catch(_notification.default.exception));const hide=e.target.closest(Selectors.table.links.hide);hide&amp;&amp;(e.preventDefault(),hideColumn(tableRoot,hide.dataset.column).catch(_notification.default.exception));const show=e.target.closest(Selectors.table.links.show);show&amp;&amp;(e.preventDefault(),showColumn(tableRoot,show.dataset.column).catch(_notification.default.exception));e.target.closest(".resettable a")&amp;&amp;(e.preventDefault(),(tableRoot=&gt;refreshTableContent(tableRoot,!0))(tableRoot).catch(_notification.default.exception));const showCountLink=e.target.closest(Selectors.showCount.links.toggle);showCountLink&amp;&amp;(e.preventDefault(),setPageSize(tableRoot,showCountLink.dataset.targetPageSize).catch(_notification.default.exception))})))};const getTableFromId=tableRegionId=&gt;{const tableRoot=document.querySelector(Selectors.main.fromRegionId(tableRegionId));if(!tableRoot)throw new Error("The table specified is not a dynamic table and cannot be updated");return tableRoot};_exports.getTableFromId=getTableFromId}));
define("core_user/form_user_selector",["exports","core/ajax","core/templates","core/str"],(function(_exports,_ajax,_templates,_str){var obj;
/**
   * Provides the required functionality for an autocomplete element to select a user.
   *
   * @module      core_user/form_user_selector
   * @copyright   2020 David Mudrák &lt;david@moodle.com&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.processResults=function(selector,results){return Array.isArray(results)?results.map((result=&gt;({value:result.id,label:result.label}))):results},_exports.transport=async function(selector,query,callback,failure){const request={methodname:"core_user_search_identity",args:{query:query}};try{const response=await _ajax.default.call([request])[0];if(response.overflow){const msg=await(0,_str.get_string)("toomanyuserstoshow","core","&gt;"+response.maxusersperpage);callback(msg)}else{let labels=[];response.list.forEach((user=&gt;{labels.push((0,_templates.render)("core_user/form_user_selector_suggestion",user))})),labels=await Promise.all(labels),response.list.forEach(((user,index)=&gt;{user.label=labels[index]})),callback(response.list)}}catch(e){failure(e)}},_ajax=(obj=_ajax)&amp;&amp;obj.__esModule?obj:{default:obj}}));
define("core_user/local/participants/bulkactions",["exports","core_user/repository","core/str","core/modal_events","core/modal_factory","core/notification","core/templates","core/toast"],(function(_exports,Repository,Str,_modal_events,_modal_factory,_notification,_templates,_toast){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}
/**
   * Bulk actions for lists of participants.
   *
   * @module     core_user/local/participants/bulkactions
   * @copyright  2020 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.showSendMessage=_exports.showAddNote=void 0,Repository=_interopRequireWildcard(Repository),Str=_interopRequireWildcard(Str),_modal_events=_interopRequireDefault(_modal_events),_modal_factory=_interopRequireDefault(_modal_factory),_notification=_interopRequireDefault(_notification),_templates=_interopRequireDefault(_templates);_exports.showAddNote=(courseid,users,noteStateNames,stateHelpIcon)=&gt;{if(!users.length)return Promise.resolve();const states=[];for(let key in noteStateNames)switch(key){case"draft":states.push({value:"personal",label:noteStateNames[key]});break;case"public":states.push({value:"course",label:noteStateNames[key],selected:1});break;case"site":states.push({value:key,label:noteStateNames[key]})}const context={stateNames:states,stateHelpIcon:stateHelpIcon.innerHTML};let titlePromise=null;return titlePromise=1===users.length?Str.get_string("addbulknotesingle","core_notes"):Str.get_string("addbulknote","core_notes",users.length),_modal_factory.default.create({type:_modal_factory.default.types.SAVE_CANCEL,body:_templates.default.render("core_user/add_bulk_note",context),title:titlePromise,buttons:{save:titlePromise},removeOnClose:!0}).then((modal=&gt;(modal.getRoot().on(_modal_events.default.save,(()=&gt;submitAddNote(courseid,users,modal))),modal.show(),modal)))};const submitAddNote=(courseid,users,modal)=&gt;{const text=modal.getRoot().find("form textarea").val(),publishstate=modal.getRoot().find("form select").val(),notes=users.map((userid=&gt;({userid:userid,text:text,courseid:courseid,publishstate:publishstate})));return Repository.createNotesForUsers(notes).then((noteIds=&gt;1===noteIds.length?Str.get_string("addbulknotedonesingle","core_notes"):Str.get_string("addbulknotedone","core_notes",noteIds.length))).then((msg=&gt;(0,_toast.add)(msg))).catch(_notification.default.exception)};_exports.showSendMessage=users=&gt;{if(!users.length)return Promise.resolve();let titlePromise;return titlePromise=1===users.length?Str.get_string("sendbulkmessagesingle","core_message"):Str.get_string("sendbulkmessage","core_message",users.length),_modal_factory.default.create({type:_modal_factory.default.types.SAVE_CANCEL,body:_templates.default.render("core_user/send_bulk_message",{}),title:titlePromise,buttons:{save:titlePromise},removeOnClose:!0}).then((modal=&gt;(modal.getRoot().on(_modal_events.default.save,(e=&gt;{const text=modal.getRoot().find("form textarea").val();if(""===text.trim())return modal.getRoot().find('[data-role="messagetextrequired"]').removeAttr("hidden"),void e.preventDefault();submitSendMessage(modal,users,text)})),modal.show(),modal)))};const submitSendMessage=(modal,users,text)=&gt;{const messages=users.map((touserid=&gt;({touserid:touserid,text:text})));return Repository.sendMessagesToUsers(messages).then((messageIds=&gt;1==messageIds.length?Str.get_string("sendbulkmessagesentsingle","core_message"):Str.get_string("sendbulkmessagesent","core_message",messageIds.length))).then((msg=&gt;(0,_toast.add)(msg))).catch(_notification.default.exception)}}));
define("core_user/participants_filter",["exports","core/datafilter","core_table/dynamic","core/datafilter/selectors","core/notification","core/pending"],(function(_exports,_datafilter,DynamicTable,_selectors,_notification,_pending){function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Participants filter management.
   *
   * @module     core_user/participants_filter
   * @copyright  2021 Tomo Tsuyuki &lt;tomotsuyuki@catalyst-au.net&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_datafilter=_interopRequireDefault(_datafilter),DynamicTable=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}(DynamicTable),_selectors=_interopRequireDefault(_selectors),_notification=_interopRequireDefault(_notification),_pending=_interopRequireDefault(_pending);_exports.init=filterRegionId=&gt;{const filterSet=document.getElementById(filterRegionId),coreFilter=new _datafilter.default(filterSet,(function(filters,pendingPromise){DynamicTable.setFilters(DynamicTable.getTableFromId(filterSet.dataset.tableRegion),{jointype:parseInt(filterSet.querySelector(_selectors.default.filterset.fields.join).value,10),filters:filters}).then((result=&gt;(pendingPromise.resolve(),result))).catch(_notification.default.exception)}));coreFilter.init();const tableRoot=DynamicTable.getTableFromId(filterSet.dataset.tableRegion),initialFilters=DynamicTable.getFilters(tableRoot);if(initialFilters){const initialFilterPromise=new _pending.default("core/filter:setFilterFromConfig");(config=&gt;{const filterConfig=Object.entries(config.filters);if(!filterConfig.length)return Promise.resolve();filterSet.querySelector(_selectors.default.filterset.fields.join).value=config.jointype;const filterPromises=filterConfig.map((_ref=&gt;{let[filterType,filterData]=_ref;if("courseid"===filterType)return!1;const filterValues=filterData.values;return!!filterValues.length&amp;&amp;coreFilter.addFilterRow().then((_ref2=&gt;{let[filterRow]=_ref2;coreFilter.addFilter(filterRow,filterType,filterValues)}))})).filter((promise=&gt;promise));return filterPromises.length?Promise.all(filterPromises).then((()=&gt;coreFilter.removeEmptyFilters())).then((()=&gt;{coreFilter.updateFiltersOptions()})).then((()=&gt;{coreFilter.updateTableFromFilter()})):Promise.resolve()})(initialFilters).then((()=&gt;initialFilterPromise.resolve())).catch()}}}));
define("core_user/repository",["exports","core/ajax"],(function(_exports,_ajax){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.unenrolUser=_exports.submitUserEnrolmentForm=_exports.sendMessagesToUsers=_exports.createNotesForUsers=void 0;_exports.unenrolUser=userEnrolmentId=&gt;(0,_ajax.call)([{methodname:"core_enrol_unenrol_user_enrolment",args:{ueid:userEnrolmentId}}])[0];_exports.submitUserEnrolmentForm=formdata=&gt;(0,_ajax.call)([{methodname:"core_enrol_submit_user_enrolment_form",args:{formdata:formdata}}])[0];_exports.createNotesForUsers=notes=&gt;(0,_ajax.call)([{methodname:"core_notes_create_notes",args:{notes:notes}}])[0];_exports.sendMessagesToUsers=messages=&gt;(0,_ajax.call)([{methodname:"core_message_send_instant_messages",args:{messages:messages}}])[0]}));
define("core_user/private_files",["exports","core_form/dynamicform","core_form/modalform","core/str","core/toast"],(function(_exports,_dynamicform,_modalform,_str,_toast){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Module to handle AJAX interactions with user private files
   *
   * @module     core_user/private_files
   * @copyright  2020 Marina Glancy
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.initModal=_exports.initDynamicForm=void 0,_dynamicform=_interopRequireDefault(_dynamicform),_modalform=_interopRequireDefault(_modalform);_exports.initDynamicForm=(containerSelector,formClass)=&gt;{const form=new _dynamicform.default(document.querySelector(containerSelector),formClass);form.addEventListener(form.events.FORM_SUBMITTED,(()=&gt;{form.load(),(0,_str.get_string)("changessaved").then(_toast.add).catch(null)})),form.addEventListener(form.events.CANCEL_BUTTON_PRESSED,(()=&gt;window.location.reload()))};_exports.initModal=(elementSelector,formClass)=&gt;{document.querySelector(elementSelector).addEventListener("click",(function(e){e.preventDefault();const form=new _modalform.default({formClass:formClass,args:{nosubmit:!0},modalConfig:{title:(0,_str.get_string)("privatefilesmanage")},returnFocus:e.target});form.addEventListener(form.events.FORM_SUBMITTED,(()=&gt;window.location.reload())),form.show()}))}}));
define("core_user/edit_profile_fields",["exports","core_form/modalform","core/str"],(function(_exports,_modalform,_str){var obj;
/**
   * User profile fields editor
   *
   * @module     core_user/edit_profile_fields
   * @copyright  2021 Marina Glancy
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_modalform=(obj=_modalform)&amp;&amp;obj.__esModule?obj:{default:obj};const Selectors_actions={editCategory:'[data-action="editcategory"]',editField:'[data-action="editfield"]',createField:'[data-action="createfield"]'};_exports.init=()=&gt;{document.addEventListener("click",(function(e){let element=e.target.closest(Selectors_actions.editCategory);if(element){e.preventDefault();const title=element.getAttribute("data-id")?(0,_str.get_string)("profileeditcategory","admin",element.getAttribute("data-name")):(0,_str.get_string)("profilecreatenewcategory","admin"),form=new _modalform.default({formClass:"core_user\\form\\profile_category_form",args:{id:element.getAttribute("data-id")},modalConfig:{title:title},returnFocus:element});form.addEventListener(form.events.FORM_SUBMITTED,(()=&gt;window.location.reload())),form.show()}if(element=e.target.closest(Selectors_actions.editField),element){e.preventDefault();const form=new _modalform.default({formClass:"core_user\\form\\profile_field_form",args:{id:element.getAttribute("data-id")},modalConfig:{title:(0,_str.get_string)("profileeditfield","admin",element.getAttribute("data-name"))},returnFocus:element});form.addEventListener(form.events.FORM_SUBMITTED,(()=&gt;window.location.reload())),form.show()}if(element=e.target.closest(Selectors_actions.createField),element){e.preventDefault();const form=new _modalform.default({formClass:"core_user\\form\\profile_field_form",args:{datatype:element.getAttribute("data-datatype"),categoryid:element.getAttribute("data-categoryid")},modalConfig:{title:(0,_str.get_string)("profilecreatenewfield","admin",element.getAttribute("data-datatypename"))},returnFocus:element});form.addEventListener(form.events.FORM_SUBMITTED,(()=&gt;window.location.reload())),form.show()}}))}}));
define("core_user/status_field",["exports","core_table/dynamic","./repository","core/str","core_table/local/dynamic/selectors","core/fragment","core/modal_events","core/modal_factory","core/notification","core/templates","core/toast"],(function(_exports,DynamicTable,Repository,Str,_selectors,_fragment,_modal_events,_modal_factory,_notification,_templates,_toast){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}
/**
   * AMD module for the user enrolment status field in the course participants page.
   *
   * @module     core_user/status_field
   * @copyright  2017 Jun Pataleta
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,DynamicTable=_interopRequireWildcard(DynamicTable),Repository=_interopRequireWildcard(Repository),Str=_interopRequireWildcard(Str),_selectors=_interopRequireDefault(_selectors),_fragment=_interopRequireDefault(_fragment),_modal_events=_interopRequireDefault(_modal_events),_modal_factory=_interopRequireDefault(_modal_factory),_notification=_interopRequireDefault(_notification),_templates=_interopRequireDefault(_templates);const Selectors_editEnrolment='[data-action="editenrolment"]',Selectors_showDetails='[data-action="showdetails"]',Selectors_unenrol='[data-action="unenrol"]',Selectors_statusElement="[data-status]",getDynamicTableFromLink=link=&gt;link.closest(_selectors.default.main.region),getStatusContainer=link=&gt;link.closest(Selectors_statusElement),getUserEnrolmentIdFromLink=link=&gt;link.getAttribute("rel"),showEditDialogue=(link,getBody)=&gt;{const container=getStatusContainer(link),userEnrolmentId=getUserEnrolmentIdFromLink(link);_modal_factory.default.create({large:!0,title:Str.get_string("edituserenrolment","enrol",container.dataset.fullname),type:_modal_factory.default.types.SAVE_CANCEL,body:getBody(userEnrolmentId)}).then((modal=&gt;(modal.getRoot().on(_modal_events.default.save,(e=&gt;{e.preventDefault(),submitEditFormAjax(link,getBody,modal,userEnrolmentId,container.dataset)})),modal.getRoot().on(_modal_events.default.hidden,(()=&gt;{modal.destroy()})),modal.show(),modal))).catch(_notification.default.exception)},showUnenrolConfirmation=link=&gt;{const container=getStatusContainer(link),userEnrolmentId=getUserEnrolmentIdFromLink(link);_modal_factory.default.create({type:_modal_factory.default.types.SAVE_CANCEL}).then((modal=&gt;{modal.getRoot().on(_modal_events.default.save,(e=&gt;{e.preventDefault(),submitUnenrolFormAjax(link,modal,{ueid:userEnrolmentId},container.dataset)})),modal.getRoot().on(_modal_events.default.hidden,(()=&gt;{modal.destroy()})),modal.show();const stringData=[{key:"unenrol",component:"enrol"},{key:"unenrolconfirm",component:"enrol",param:{user:container.dataset.fullname,course:container.dataset.coursename,enrolinstancename:container.dataset.enrolinstancename}}];return Promise.all([Str.get_strings(stringData),modal])})).then((_ref=&gt;{let[strings,modal]=_ref;return modal.setTitle(strings[0]),modal.setSaveButtonText(strings[0]),modal.setBody(strings[1]),modal})).catch(_notification.default.exception)},showStatusDetails=link=&gt;{const container=getStatusContainer(link),context={editenrollink:"",statusclass:container.querySelector("span.badge").getAttribute("class"),...container.dataset},editEnrolLink=container.querySelector(Selectors_editEnrolment);editEnrolLink&amp;&amp;(context.editenrollink=editEnrolLink.outerHTML),_modal_factory.default.create({large:!0,type:_modal_factory.default.types.CANCEL,title:Str.get_string("enroldetails","enrol"),body:_templates.default.render("core_user/status_details",context)}).then((modal=&gt;(editEnrolLink&amp;&amp;modal.getRoot().on("click",Selectors_editEnrolment,(e=&gt;{e.preventDefault(),modal.hide(),editEnrolLink.click()})),modal.show(),modal.getRoot().on(_modal_events.default.hidden,(()=&gt;modal.destroy())),modal))).catch(_notification.default.exception)},submitEditFormAjax=(clickedLink,getBody,modal,userEnrolmentId,userData)=&gt;{const form=modal.getRoot().find("form");Repository.submitUserEnrolmentForm(form.serialize()).then((data=&gt;{if(!data.result)throw data.result;return modal.hide(),modal.destroy(),data})).then((()=&gt;(DynamicTable.refreshTableContent(getDynamicTableFromLink(clickedLink)).catch(_notification.default.exception),Str.get_string("enrolmentupdatedforuser","core_enrol",userData)))).then((notificationString=&gt;{(0,_toast.add)(notificationString)})).catch((()=&gt;(modal.setBody(getBody(userEnrolmentId,JSON.stringify(form.serialize()))),modal)))},submitUnenrolFormAjax=(clickedLink,modal,args,userData)=&gt;{Repository.unenrolUser(args.ueid).then((data=&gt;data.result?(modal.hide(),modal.destroy(),data):(_notification.default.alert(data.errors[0].key,data.errors[0].message),data))).then((()=&gt;(DynamicTable.refreshTableContent(getDynamicTableFromLink(clickedLink)).catch(_notification.default.exception),Str.get_string("unenrolleduser","core_enrol",userData)))).then((notificationString=&gt;{(0,_toast.add)(notificationString)})).catch(_notification.default.exception)},getBody=function(contextId,ueid){let formdata=arguments.length&gt;2&amp;&amp;void 0!==arguments[2]?arguments[2]:null;return _fragment.default.loadFragment("enrol","user_enrolment_form",contextId,{ueid:ueid,formdata:formdata})};_exports.init=_ref2=&gt;{let{contextid:contextid,uniqueid:uniqueid}=_ref2;((contextId,uniqueId)=&gt;{const getBodyFunction=(userEnrolmentId,formData)=&gt;getBody(contextId,userEnrolmentId,formData);document.addEventListener("click",(e=&gt;{if(!e.target.closest(_selectors.default.main.fromRegionId(uniqueId)))return;const editLink=e.target.closest(Selectors_editEnrolment);editLink&amp;&amp;(e.preventDefault(),showEditDialogue(editLink,getBodyFunction));const unenrolLink=e.target.closest(Selectors_unenrol);unenrolLink&amp;&amp;(e.preventDefault(),showUnenrolConfirmation(unenrolLink));const showDetailsLink=e.target.closest(Selectors_showDetails);showDetailsLink&amp;&amp;(e.preventDefault(),showStatusDetails(showDetailsLink))}))})(contextid,uniqueid)}}));
define("core_user/participants",["exports","core_table/dynamic","core/str","core/checkbox-toggleall","core/custom_interaction_events","core_table/local/dynamic/selectors","core/modal_events","core/notification","core/pending","jquery","core_user/local/participants/bulkactions","core/inplace_editable"],(function(_exports,DynamicTable,Str,_checkboxToggleall,_custom_interaction_events,_selectors,_modal_events,_notification,_pending,_jquery,_bulkactions,_inplace_editable){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}
/**
   * Some UI stuff for participants page.
   * This is also used by the report/participants/index.php because it has the same functionality.
   *
   * @module     core_user/participants
   * @copyright  2017 Damyon Wiese
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,DynamicTable=_interopRequireWildcard(DynamicTable),Str=_interopRequireWildcard(Str),_checkboxToggleall=_interopRequireDefault(_checkboxToggleall),_custom_interaction_events=_interopRequireDefault(_custom_interaction_events),_selectors=_interopRequireDefault(_selectors),_modal_events=_interopRequireDefault(_modal_events),_notification=_interopRequireDefault(_notification),_pending=_interopRequireDefault(_pending),_jquery=_interopRequireDefault(_jquery);const Selectors_bulkActionSelect="#formactionid",Selectors_bulkUserSelectedCheckBoxes="input[data-togglegroup='participants-table'][data-toggle='slave']:checked",Selectors_checkCountButton="#checkall",Selectors_showCountText='[data-region="participant-count"]',Selectors_stateHelpIcon='[data-region="state-help-icon"]',Selectors_tableForm=uniqueId=&gt;'form[data-table-unique-id="'.concat(uniqueId,'"]');_exports.init=_ref=&gt;{let{uniqueid:uniqueid,noteStateNames:noteStateNames={}}=_ref;const root=document.querySelector(Selectors_tableForm(uniqueid)),getTableFromUniqueId=uniqueId=&gt;root.querySelector(_selectors.default.main.fromRegionId(uniqueId)),resetBulkAction=bulkActionSelect=&gt;{bulkActionSelect.value=""};_custom_interaction_events.default.define(Selectors_bulkActionSelect,[_custom_interaction_events.default.events.accessibleChange]),(0,_jquery.default)(Selectors_bulkActionSelect).on(_custom_interaction_events.default.events.accessibleChange,(e=&gt;{const bulkActionSelect=e.target.closest("select"),action=bulkActionSelect.value,checkboxes=getTableFromUniqueId(uniqueid).querySelectorAll(Selectors_bulkUserSelectedCheckBoxes),pendingPromise=new _pending.default("core_user/participants:bulkActionSelect");if(-1!==action.indexOf("#")){e.preventDefault();const ids=[];let bulkAction;if(checkboxes.forEach((checkbox=&gt;{ids.push(checkbox.getAttribute("name").replace("user",""))})),"#messageselect"===action?bulkAction=(0,_bulkactions.showSendMessage)(ids):"#addgroupnote"===action&amp;&amp;(bulkAction=(0,_bulkactions.showAddNote)(root.dataset.courseId,ids,noteStateNames,root.querySelector(Selectors_stateHelpIcon))),bulkAction){const pendingBulkAction=new _pending.default("core_user/participants:bulkActionSelected");bulkAction.then((modal=&gt;(modal.getRoot().on(_modal_events.default.hidden,(()=&gt;{bulkActionSelect.focus()})),pendingBulkAction.resolve(),modal))).catch(_notification.default.exception)}}else""!==action&amp;&amp;checkboxes.length&amp;&amp;bulkActionSelect.form.submit();resetBulkAction(bulkActionSelect),pendingPromise.resolve()})),root.addEventListener("click",(e=&gt;{const checkCountButton=root.querySelector(Selectors_checkCountButton);if(checkCountButton&amp;&amp;checkCountButton.contains(e.target)){e.preventDefault();const tableRoot=getTableFromUniqueId(uniqueid);DynamicTable.setPageSize(tableRoot,checkCountButton.dataset.targetPageSize).then((tableRoot=&gt;(_checkboxToggleall.default.setGroupState(root,"participants-table",!0),tableRoot))).catch(_notification.default.exception)}})),root.addEventListener(DynamicTable.Events.tableContentRefreshed,(e=&gt;{const checkCountButton=root.querySelector(Selectors_checkCountButton),tableRoot=e.target,defaultPageSize=parseInt(tableRoot.dataset.tableDefaultPerPage,10),currentPageSize=parseInt(tableRoot.dataset.tablePageSize,10),totalRowCount=parseInt(tableRoot.dataset.tableTotalRows,10);_checkboxToggleall.default.updateSlavesFromMasterState(root,"participants-table");const pageCountStrings=[{key:"countparticipantsfound",component:"core_user",param:totalRowCount}];totalRowCount&lt;=defaultPageSize?checkCountButton&amp;&amp;checkCountButton.classList.add("hidden"):totalRowCount&lt;=currentPageSize?(pageCountStrings.push({key:"selectalluserswithcount",component:"core",param:defaultPageSize}),checkCountButton&amp;&amp;checkCountButton.classList.add("hidden")):(pageCountStrings.push({key:"selectalluserswithcount",component:"core",param:totalRowCount}),checkCountButton&amp;&amp;checkCountButton.classList.remove("hidden")),Str.get_strings(pageCountStrings).then((_ref2=&gt;{let[showingParticipantCountString,selectCountString]=_ref2;root.querySelector(Selectors_showCountText).innerHTML=showingParticipantCountString,selectCountString&amp;&amp;checkCountButton&amp;&amp;(checkCountButton.value=selectCountString)})).catch(_notification.default.exception)}))}}));
/******************************************************************************
 *
 * A module for use by ui_graph, defining classes Node, Link, SelfLink,
 * StartLink and TemporaryLink
 *
 * @module qtype_coderunner/graphelements
 * @copyright  Richard Lobb, 2015, The University of Canterbury
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("qtype_coderunner/graphelements",["qtype_coderunner/graphutil"],(function(util){function Node(parent,x,y){this.parent=parent,this.x=x,this.y=y,this.mouseOffsetX=0,this.mouseOffsetY=0,this.isAcceptState=!1,this.textBox=new TextBox("",this),this.caretPosition=0}function Link(parent,a,b){this.parent=parent,this.nodeA=a,this.nodeB=b,this.textBox=new TextBox("",this),this.lineAngleAdjust=0,this.caretPosition=0,this.parallelPart=.5,this.perpendicularPart=0}function SelfLink(parent,node,mouse){this.parent=parent,this.node=node,this.anchorAngle=0,this.mouseOffsetAngle=0,this.textBox=new TextBox("",this),mouse&amp;&amp;this.setAnchorPoint(mouse.x,mouse.y)}function StartLink(parent,node,start){this.parent=parent,this.node=node,this.deltaX=0,this.deltaY=0,start&amp;&amp;this.setAnchorPoint(start.x,start.y)}function TemporaryLink(parent,from,to){this.parent=parent,this.from=from,this.to=to}function Button(parent,topX,topY,text){this.BUTTON_WIDTH=60,this.BUTTON_HEIGHT=25,this.TEXT_OFFSET_X=30,this.TEXT_OFFSET_Y=17,this.topX=topX,this.topY=topY,this.parent=parent,this.text=text,this.highLighted=!1}function HelpBox(parent,topX,topY){Button.call(this,parent,topX,topY,"Help"),this.helpOpen=!1,this.LINE_HEIGHT=18,this.HELP_INDENT=5}function TextBox(text,parent){this.text=text,this.parent=parent,this.caretPosition=text.length,this.relDist=.5,this.offset=parent.parent.textOffset(),this.dragged=!1,this.boundingBox={}}return Node.prototype.setMouseStart=function(mouseX,mouseY){this.mouseOffsetX=this.x-mouseX,this.mouseOffsetY=this.y-mouseY},Node.prototype.setAnchorPoint=function(x,y){this.x=x+this.mouseOffsetX,this.y=y+this.mouseOffsetY},Node.prototype.trackMouse=function(mouseX,mouseY){this.x=this.mouseOffsetX+mouseX,this.y=this.mouseOffsetY+mouseY},Node.prototype.draw=function(c){c.beginPath(),c.arc(this.x,this.y,this.parent.nodeRadius(),0,2*Math.PI,!1),c.stroke(),this.textBox.draw(this.x,this.y,null,this),this.isAcceptState&amp;&amp;(c.beginPath(),c.arc(this.x,this.y,this.parent.nodeRadius()-6,0,2*Math.PI,!1),c.stroke())},Node.prototype.closestPointOnCircle=function(x,y){var dx=x-this.x,dy=y-this.y,scale=Math.sqrt(dx*dx+dy*dy);return{x:this.x+dx*this.parent.nodeRadius()/scale,y:this.y+dy*this.parent.nodeRadius()/scale}},Node.prototype.containsPoint=function(x,y){return(x-this.x)*(x-this.x)+(y-this.y)*(y-this.y)&lt;this.parent.nodeRadius()*this.parent.nodeRadius()},Node.prototype.neighbours=function(links){for(var link,neighbours=[],i=0;i&lt;links.length;i++)(link=links[i])instanceof Link&amp;&amp;(link.nodeA!==this||neighbours.includes(link.nodeB)?link.nodeB!==this||neighbours.includes(link.nodeA)||neighbours.push(link.nodeA):neighbours.push(link.nodeB));return neighbours},Node.prototype.traverseGraph=function(links,visited){var neighbours,neighbour;if(!visited.includes(this)){visited.push(this),neighbours=this.neighbours(links);for(var i=0;i&lt;neighbours.length;i++)neighbour=neighbours[i],visited.includes(neighbour)||neighbour.traverseGraph(links,visited)}return visited},Link.prototype.getAnchorPoint=function(){var dx=this.nodeB.x-this.nodeA.x,dy=this.nodeB.y-this.nodeA.y,scale=Math.sqrt(dx*dx+dy*dy);return{x:this.nodeA.x+dx*this.parallelPart-dy*this.perpendicularPart/scale,y:this.nodeA.y+dy*this.parallelPart+dx*this.perpendicularPart/scale}},Link.prototype.setAnchorPoint=function(x,y){var dx=this.nodeB.x-this.nodeA.x,dy=this.nodeB.y-this.nodeA.y,scale=Math.sqrt(dx*dx+dy*dy);this.parallelPart=(dx*(x-this.nodeA.x)+dy*(y-this.nodeA.y))/(scale*scale),this.perpendicularPart=(dx*(y-this.nodeA.y)-dy*(x-this.nodeA.x))/scale,this.parallelPart&gt;0&amp;&amp;this.parallelPart&lt;1&amp;&amp;Math.abs(this.perpendicularPart)&lt;this.parent.SNAP_TO_PADDING&amp;&amp;(this.lineAngleAdjust=(this.perpendicularPart&lt;0)*Math.PI,this.perpendicularPart=0)},Link.prototype.getEndPointsAndCircle=function(){if(0===this.perpendicularPart){var midX=(this.nodeA.x+this.nodeB.x)/2,midY=(this.nodeA.y+this.nodeB.y)/2,start=this.nodeA.closestPointOnCircle(midX,midY),end=this.nodeB.closestPointOnCircle(midX,midY);return{hasCircle:!1,startX:start.x,startY:start.y,endX:end.x,endY:end.y}}var anchor=this.getAnchorPoint(),circle=util.circleFromThreePoints(this.nodeA.x,this.nodeA.y,this.nodeB.x,this.nodeB.y,anchor.x,anchor.y),isReversed=this.perpendicularPart&gt;0,reverseScale=isReversed?1:-1,rRatio=reverseScale*this.parent.nodeRadius()/circle.radius,startAngle=Math.atan2(this.nodeA.y-circle.y,this.nodeA.x-circle.x)-rRatio,endAngle=Math.atan2(this.nodeB.y-circle.y,this.nodeB.x-circle.x)+rRatio;return{hasCircle:!0,startX:circle.x+circle.radius*Math.cos(startAngle),startY:circle.y+circle.radius*Math.sin(startAngle),endX:circle.x+circle.radius*Math.cos(endAngle),endY:circle.y+circle.radius*Math.sin(endAngle),startAngle:startAngle,endAngle:endAngle,circleX:circle.x,circleY:circle.y,circleRadius:circle.radius,reverseScale:reverseScale,isReversed:isReversed}},Link.prototype.draw=function(c){var textX,textY,textAngle,relDist,linkInfo=this.getEndPointsAndCircle();if(c.beginPath(),linkInfo.hasCircle?c.arc(linkInfo.circleX,linkInfo.circleY,linkInfo.circleRadius,linkInfo.startAngle,linkInfo.endAngle,linkInfo.isReversed):(c.moveTo(linkInfo.startX,linkInfo.startY),c.lineTo(linkInfo.endX,linkInfo.endY)),c.stroke(),linkInfo.hasCircle?this.parent.arrowIfReqd(c,linkInfo.endX,linkInfo.endY,linkInfo.endAngle-linkInfo.reverseScale*(Math.PI/2)):this.parent.arrowIfReqd(c,linkInfo.endX,linkInfo.endY,Math.atan2(linkInfo.endY-linkInfo.startY,linkInfo.endX-linkInfo.startX)),relDist=this.textBox.relDist,linkInfo.hasCircle){var startAngle=linkInfo.startAngle,endAngle=linkInfo.endAngle;endAngle&lt;startAngle&amp;&amp;(endAngle+=2*Math.PI),textAngle=(1-relDist)*startAngle+relDist*endAngle,linkInfo.isReversed&amp;&amp;(textAngle+=(1-relDist)*(2*Math.PI)),textX=linkInfo.circleX+linkInfo.circleRadius*Math.cos(textAngle),textY=linkInfo.circleY+linkInfo.circleRadius*Math.sin(textAngle),this.textBox.draw(textX,textY,textAngle,this)}else textX=(1-relDist)*linkInfo.startX+relDist*linkInfo.endX,textY=(1-relDist)*linkInfo.startY+relDist*linkInfo.endY,textAngle=Math.atan2(linkInfo.endX-linkInfo.startX,linkInfo.startY-linkInfo.endY),this.textBox.draw(textX,textY,textAngle+this.lineAngleAdjust,this)},Link.prototype.containsPoint=function(x,y){var dx,dy,distance,linkInfo=this.getEndPointsAndCircle();if(!linkInfo.hasCircle){dx=linkInfo.endX-linkInfo.startX,dy=linkInfo.endY-linkInfo.startY;var length=Math.sqrt(dx*dx+dy*dy),percent=(dx*(x-linkInfo.startX)+dy*(y-linkInfo.startY))/(length*length);return distance=(dx*(y-linkInfo.startY)-dy*(x-linkInfo.startX))/length,percent&gt;0&amp;&amp;percent&lt;1&amp;&amp;Math.abs(distance)&lt;this.parent.HIT_TARGET_PADDING}if(dx=x-linkInfo.circleX,dy=y-linkInfo.circleY,distance=Math.sqrt(dx*dx+dy*dy)-linkInfo.circleRadius,Math.abs(distance)&lt;this.parent.HIT_TARGET_PADDING){var angle=Math.atan2(dy,dx),startAngle=linkInfo.startAngle,endAngle=linkInfo.endAngle;if(linkInfo.isReversed){var temp=startAngle;startAngle=endAngle,endAngle=temp}return endAngle&lt;startAngle&amp;&amp;(endAngle+=2*Math.PI),angle&lt;startAngle?angle+=2*Math.PI:angle&gt;endAngle&amp;&amp;(angle-=2*Math.PI),angle&gt;startAngle&amp;&amp;angle&lt;endAngle}return!1},SelfLink.prototype.setMouseStart=function(x,y){this.mouseStartX=x,this.mouseStartY=y},SelfLink.prototype.setAnchorPoint=function(x,y){this.anchorAngle=Math.atan2(y-this.node.y,x-this.node.x)+this.mouseOffsetAngle;var snap=Math.round(this.anchorAngle/(Math.PI/2))*(Math.PI/2);Math.abs(this.anchorAngle-snap)&lt;.1&amp;&amp;(this.anchorAngle=snap),this.anchorAngle&lt;-Math.PI&amp;&amp;(this.anchorAngle+=2*Math.PI),this.anchorAngle&gt;Math.PI&amp;&amp;(this.anchorAngle-=2*Math.PI)},SelfLink.prototype.getEndPointsAndCircle=function(){var circleX=this.node.x+1.5*this.parent.nodeRadius()*Math.cos(this.anchorAngle),circleY=this.node.y+1.5*this.parent.nodeRadius()*Math.sin(this.anchorAngle),circleRadius=.75*this.parent.nodeRadius(),startAngle=this.anchorAngle-.8*Math.PI,endAngle=this.anchorAngle+.8*Math.PI;return{hasCircle:!0,startX:circleX+circleRadius*Math.cos(startAngle),startY:circleY+circleRadius*Math.sin(startAngle),endX:circleX+circleRadius*Math.cos(endAngle),endY:circleY+circleRadius*Math.sin(endAngle),startAngle:startAngle,endAngle:endAngle,circleX:circleX,circleY:circleY,circleRadius:circleRadius}},SelfLink.prototype.draw=function(c){var linkInfo=this.getEndPointsAndCircle();c.beginPath(),c.arc(linkInfo.circleX,linkInfo.circleY,linkInfo.circleRadius,linkInfo.startAngle,linkInfo.endAngle,!1),c.stroke();var relDist=this.textBox.relDist,textAngle=linkInfo.startAngle*(1-relDist)+linkInfo.endAngle*relDist,textX=linkInfo.circleX+linkInfo.circleRadius*Math.cos(textAngle),textY=linkInfo.circleY+linkInfo.circleRadius*Math.sin(textAngle);this.textBox.draw(textX,textY,textAngle,this),this.parent.arrowIfReqd(c,linkInfo.endX,linkInfo.endY,linkInfo.endAngle+.4*Math.PI)},SelfLink.prototype.containsPoint=function(x,y){var linkInfo=this.getEndPointsAndCircle(),dx=x-linkInfo.circleX,dy=y-linkInfo.circleY,distance=Math.sqrt(dx*dx+dy*dy)-linkInfo.circleRadius;return Math.abs(distance)&lt;this.parent.HIT_TARGET_PADDING},StartLink.prototype.setAnchorPoint=function(x,y){this.deltaX=x-this.node.x,this.deltaY=y-this.node.y,Math.abs(this.deltaX)&lt;this.parent.SNAP_TO_PADDING&amp;&amp;(this.deltaX=0),Math.abs(this.deltaY)&lt;this.parent.SNAP_TO_PADDING&amp;&amp;(this.deltaY=0)},StartLink.prototype.getEndPoints=function(){var startX=this.node.x+this.deltaX,startY=this.node.y+this.deltaY,end=this.node.closestPointOnCircle(startX,startY);return{startX:startX,startY:startY,endX:end.x,endY:end.y}},StartLink.prototype.draw=function(c){var endPoints=this.getEndPoints();c.beginPath(),c.moveTo(endPoints.startX,endPoints.startY),c.lineTo(endPoints.endX,endPoints.endY),c.stroke(),this.parent.arrowIfReqd(c,endPoints.endX,endPoints.endY,Math.atan2(-this.deltaY,-this.deltaX))},StartLink.prototype.containsPoint=function(x,y){var endPoints=this.getEndPoints(),dx=endPoints.endX-endPoints.startX,dy=endPoints.endY-endPoints.startY,length=Math.sqrt(dx*dx+dy*dy),percent=(dx*(x-endPoints.startX)+dy*(y-endPoints.startY))/(length*length),distance=(dx*(y-endPoints.startY)-dy*(x-endPoints.startX))/length;return percent&gt;0&amp;&amp;percent&lt;1&amp;&amp;Math.abs(distance)&lt;this.parent.HIT_TARGET_PADDING},TemporaryLink.prototype.draw=function(c){c.beginPath(),c.moveTo(this.to.x,this.to.y),c.lineTo(this.from.x,this.from.y),c.stroke(),this.parent.arrowIfReqd(c,this.to.x,this.to.y,Math.atan2(this.to.y-this.from.y,this.to.x-this.from.x))},Button.prototype.containsPoint=function(x,y){return util.isInside({x:x,y:y},{x:this.topX,y:this.topY,width:this.BUTTON_WIDTH,height:this.BUTTON_HEIGHT})},Button.prototype.draw=function(c){this.highLighted?c.fillStyle="#FFFFFF":c.fillStyle="#F0F0F0",c.fillRect(this.topX,this.topY,this.BUTTON_WIDTH,this.BUTTON_HEIGHT),c.lineWidth=.5,c.strokeStyle="#000000",c.strokeRect(this.topX,this.topY,this.BUTTON_WIDTH,this.BUTTON_HEIGHT),c.font="12pt Arial",c.fillStyle="#000000",c.textAlign="center",c.fillText(this.text,this.topX+this.TEXT_OFFSET_X,this.topY+this.TEXT_OFFSET_Y),c.textAlign="left"},Button.prototype.onClick=function(){},HelpBox.prototype=new Button,HelpBox.prototype.draw=function(c){var lines,i,y,helpText;if(Button.prototype.draw.call(this,c),this.helpOpen)for(helpText=this.parent.helpText,c.font="12pt Arial",lines=helpText.split("\n"),y=this.topY+this.BUTTON_HEIGHT,i=0;i&lt;lines.length;i+=1)y+=this.LINE_HEIGHT,c.fillText(lines[i],this.topX+this.HELP_INDENT,y)},HelpBox.prototype.onClick=function(){this.helpOpen=!this.helpOpen,this.parent.draw()},TextBox.prototype.insertChar=function(char){this.text=this.text.slice(0,this.caretPosition)+char+this.text.slice(this.caretPosition),this.caretRight()},TextBox.prototype.deleteChar=function(){this.caretPosition&gt;0&amp;&amp;(this.text=this.text.slice(0,this.caretPosition-1)+this.text.slice(this.caretPosition),this.caretLeft())},TextBox.prototype.caretLeft=function(){this.caretPosition&gt;0&amp;&amp;this.caretPosition--},TextBox.prototype.caretRight=function(){this.caretPosition&lt;this.text.length&amp;&amp;this.caretPosition++},TextBox.prototype.containsPoint=function(x,y){var point={x:x,y:y};return util.isInside(point,this.boundingBox)},TextBox.prototype.setMouseStart=function(x,y){this.mouseOffsetX=this.position.x-x,this.mouseOffsetY=this.position.y-y},TextBox.prototype.setAnchorPoint=function(x,y){x+=this.mouseOffsetX||0,y+=this.mouseOffsetY||0;var relDist,offset,linkInfo=this.parent.getEndPointsAndCircle();if(linkInfo.hasCircle){var textAngle=Math.atan2(y-linkInfo.circleY,x-linkInfo.circleX);textAngle&lt;linkInfo.startAngle&amp;&amp;(textAngle+=2*Math.PI),linkInfo.endAngle&lt;linkInfo.startAngle&amp;&amp;(linkInfo.endAngle+=2*Math.PI),relDist=linkInfo.isReversed?(textAngle-linkInfo.startAngle-2*Math.PI)/(linkInfo.endAngle-linkInfo.startAngle-2*Math.PI):(textAngle-linkInfo.startAngle)/(linkInfo.endAngle-linkInfo.startAngle),offset=util.vectorMagnitude({x:x-linkInfo.circleX,y:y-linkInfo.circleY})-linkInfo.circleRadius}else{var textVector={x:x-linkInfo.startX,y:y-linkInfo.startY},linkVector={x:linkInfo.endX-linkInfo.startX,y:linkInfo.endY-linkInfo.startY},projection=util.scalarProjection(textVector,linkVector);relDist=projection/util.vectorMagnitude(linkVector),offset=Math.sqrt(Math.pow(util.vectorMagnitude(textVector),2)-Math.pow(projection,2));var ccw=util.isCCW(textVector,linkVector),reversed=0!=this.parent.lineAngleAdjust;(!ccw&amp;&amp;reversed||ccw&amp;&amp;!reversed)&amp;&amp;(offset*=-1)}relDist&gt;0&amp;&amp;relDist&lt;1&amp;&amp;(this.relDist=relDist,this.offset=Math.round(offset),this.dragged=!0)},TextBox.prototype.draw=function(x,y,angleOrNull,parentObject){var graph=parentObject.parent,c=graph.getCanvas().getContext("2d");c.font=graph.fontSize()+"px Arial";var beforeCaretText=util.convertLatexShortcuts(this.text.slice(0,this.caretPosition)),afterCaretText=util.convertLatexShortcuts(this.text.slice(this.caretPosition)),width=c.measureText(beforeCaretText+afterCaretText).width,dy=Math.round(graph.fontSize()/2);if(null!==angleOrNull){var cos=Math.cos(angleOrNull),sin=Math.sin(angleOrNull);if(x+=this.offset*cos,y+=this.offset*sin,!this.dragged){var cornerPointX=width/2*(cos&gt;0?1:-1),cornerPointY=dy/2*(sin&gt;0?1:-1),slide=sin*Math.pow(Math.abs(sin),40)*cornerPointX-cos*Math.pow(Math.abs(cos),10)*cornerPointY;x+=cornerPointX-sin*slide,y+=cornerPointY+cos*slide}this.position={x:Math.round(x),y:Math.round(y)}}if(x-=width/2,x=Math.round(x),y=Math.round(y),"advancedFillText"in c)c.advancedFillText(this.text,this.text,x+width/2,y,angleOrNull);else{var prevStyle=c.fillStyle;c.fillStyle="rgba(255, 255, 255, 0.7)",c.fillRect(x,y-dy,width,2*dy),c.fillStyle=prevStyle,dy=Math.round(graph.fontSize()/3),c.fillText(beforeCaretText,x,y+dy);var caretX=x+c.measureText(beforeCaretText).width;c.fillText(afterCaretText,caretX,y+dy),dy=Math.round(graph.fontSize()/2),parentObject==graph.selectedObject&amp;&amp;graph.caretVisible&amp;&amp;graph.hasFocus()&amp;&amp;document.hasFocus()&amp;&amp;(c.beginPath(),c.moveTo(caretX,y-dy),c.lineTo(caretX,y+dy),c.stroke())}this.boundingBox={x:x,y:y-dy,height:2*dy,width:width}},{Node:Node,Link:Link,SelfLink:SelfLink,TemporaryLink:TemporaryLink,StartLink:StartLink,Button:Button,HelpBox:HelpBox,TextBox:TextBox}}));
/**
 * JavaScript to interface to the Graph editor, which is used both in
 * the author editing page and by the student question submission page.
 *
 * @module qtype_coderunner/ui_graph
 * @copyright  Richard Lobb, 2015, The University of Canterbury
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("qtype_coderunner/ui_graph",["jquery","qtype_coderunner/graphutil","qtype_coderunner/graphelements"],(function($,util,elements){function GraphCanvas(parent,canvasId,w,h){this.HANDLE_SIZE=10,this.parent=parent,this.canvas=$(document.createElement("canvas")),this.canvas.attr({id:canvasId,class:"coderunner_graphcanvas",tabindex:1}),this.canvas.css({"background-color":"white"}),this.canvas.on("mousedown",(function(e){return parent.mousedown(e)})),this.canvas.on("mouseup",(function(e){return parent.mouseup(e)})),this.canvas.on("dblclick",(function(e){return parent.dblclick(e)})),this.canvas.on("keydown",(function(e){return parent.keydown(e)})),this.canvas.on("mousemove",(function(e){return parent.mousemove(e)})),this.canvas.on("keypress",(function(e){return parent.keypress(e)})),this.resize=function(w,h){this.canvas.attr("width",w),this.canvas.attr("height",h)},this.resize(w,h)}function Graph(textareaId,width,height,uiParams){var save_this=this;this.SNAP_TO_PADDING=6,this.DUPLICATE_LINK_OFFSET=16,this.HIT_TARGET_PADDING=6,this.DEFAULT_NODE_RADIUS=26,this.DEFAULT_FONT_SIZE=20,this.DEFAULT_TEXT_OFFSET=5,this.DEFAULT_LINK_LABEL_REL_DIST=.5,this.MAX_VERSIONS=30,this.canvasId="graphcanvas_"+textareaId,this.textArea=$(document.getElementById(textareaId)),this.helpText="",this.readOnly=this.textArea.prop("readonly"),this.uiParams=uiParams,this.graphCanvas=new GraphCanvas(this,this.canvasId,width,height),this.caretVisible=!0,this.caretTimer=0,this.originalClick=null,this.nodes=[],this.links=[],this.selectedObject=null,this.currentLink=null,this.movingObject=!1,this.fail=!1,this.failString=null,this.versions=[],this.versionIndex=-1,this.helpBox=new elements.HelpBox(this,0,0),this.clearButton=new elements.Button(this,60,0,"Clear"),this.clearButton.onClick=function(){confirm("Are you sure you want to clear the diagram?")&amp;&amp;this.parent.clear()},this.buttons=[this.helpBox,this.clearButton],"locknodes"in uiParams&amp;&amp;(uiParams.locknodepositions=uiParams.locknodes),"lockedges"in uiParams&amp;&amp;(uiParams.lockedgepositions=uiParams.lockedges),"helpmenutext"in uiParams?this.helpText=uiParams.helpmenutext:require(["core/str"],(function(str){var helpPresent=str.get_string("graphhelp","qtype_coderunner");$.when(helpPresent).done((function(graphhelp){save_this.helpText=graphhelp}))})),this.reload(),this.fail||this.draw()}return Graph.prototype.failed=function(){return this.fail},Graph.prototype.failMessage=function(){return this.failString},Graph.prototype.getElement=function(){return this.getCanvas()},Graph.prototype.hasFocus=function(){return document.activeElement==this.getCanvas()},Graph.prototype.getCanvas=function(){return this.graphCanvas.canvas[0]},Graph.prototype.nodeRadius=function(){return this.uiParams.noderadius?this.uiParams.noderadius:this.DEFAULT_NODE_RADIUS},Graph.prototype.fontSize=function(){return this.uiParams.fontsize?this.uiParams.fontsize:this.DEFAULT_FONT_SIZE},Graph.prototype.isFsm=function(){return void 0===this.uiParams.isfsm||this.uiParams.isfsm},Graph.prototype.textOffset=function(){return this.uiParams.textoffset?this.uiParams.textoffset:this.DEFAULT_TEXT_OFFSET},Graph.prototype.arrowIfReqd=function(c,x,y,angle){(void 0===this.uiParams.isdirected||this.uiParams.isdirected)&amp;&amp;util.drawArrow(c,x,y,angle)},Graph.prototype.sync=function(){},Graph.prototype.syncIntervalSecs=function(){return 0},Graph.prototype.keypress=function(e){var key=util.crossBrowserKey(e);if(!this.readOnly)return key&gt;=32&amp;&amp;key&lt;=126&amp;&amp;!e.metaKey&amp;&amp;!e.altKey&amp;&amp;!e.ctrlKey&amp;&amp;37!==key&amp;&amp;39!==key&amp;&amp;null!==this.selectedObject&amp;&amp;this.canEditText()?(this.selectedObject.justMoved&amp;&amp;this.saveVersion(),this.selectedObject.justMoved=!1,this.selectedObject.textBox.insertChar(String.fromCharCode(key)),this.resetCaret(),this.draw(),!1):8!==key&amp;&amp;32!==key&amp;&amp;9!==key&amp;&amp;void 0},Graph.prototype.mousedown=function(e){var mouse=util.crossBrowserRelativeMousePos(e);if(!this.readOnly){if(this.selectedObject=this.selectObject(mouse.x,mouse.y),this.movingObject=!1,this.movingGraph=!1,this.movingText=!1,this.originalClick=mouse,this.saveVersion(),this.selectedObject!==this.helpBox&amp;&amp;(this.helpBox.helpOpen=!1),null!==this.selectedObject){if(this.selectedObject instanceof elements.Button)this.selectedObject.onClick();else if(e.shiftKey&amp;&amp;this.selectedObject instanceof elements.Node)this.uiParams.lockedgeset||(this.currentLink=new elements.SelfLink(this,this.selectedObject,mouse));else if(e.altKey&amp;&amp;this.selectedObject instanceof elements.Node){if(!this.uiParams.locknodepositions){this.movingGraph=!0,this.movingNodes=this.selectedObject.traverseGraph(this.links,[]);for(var i=0;i&lt;this.movingNodes.length;i++)this.movingNodes[i].setMouseStart(mouse.x,mouse.y)}}else this.selectedObject instanceof elements.TextBox?this.uiParams.lockedgelabels||(this.movingText=!0,this.selectedObject.setMouseStart(mouse.x,mouse.y),this.selectedObject=this.selectedObject.parent):this.uiParams.locknodepositions&amp;&amp;this.selectedObject instanceof elements.Node||this.uiParams.lockedgepositions&amp;&amp;this.selectedObject instanceof elements.Link||(this.movingObject=!0,this.selectedObject.setMouseStart&amp;&amp;this.selectedObject.setMouseStart(mouse.x,mouse.y));this.selectedObject.justMoved=!0,this.resetCaret()}else e.shiftKey&amp;&amp;this.isFsm()&amp;&amp;(this.currentLink=new elements.TemporaryLink(this,mouse,mouse));return this.draw(),!this.hasFocus()&amp;&amp;(this.resetCaret(),!0)}},Graph.prototype.canEditText=function(){var isNode=this.selectedObject instanceof elements.Node,isLink=this.selectedObject instanceof elements.Link||this.selectedObject instanceof elements.SelfLink;return"textBox"in this.selectedObject&amp;&amp;(isNode&amp;&amp;!this.uiParams.locknodelabels||isLink&amp;&amp;!this.uiParams.lockedgelabels)},Graph.prototype.keydown=function(e){var i,key=util.crossBrowserKey(e),nodeDeleted=!1;if(!this.readOnly){if(8===key)return null!==this.selectedObject&amp;&amp;this.canEditText()&amp;&amp;(this.selectedObject.textBox.deleteChar(),this.resetCaret(),this.draw()),!1;if(46===key&amp;&amp;null!==this.selectedObject){for(this.saveVersion(),i=0;i&lt;this.nodes.length;i++)this.nodes[i]!==this.selectedObject||this.uiParams.locknodeset||(this.nodes.splice(i--,1),nodeDeleted=!0);for(i=0;i&lt;this.links.length;i++)(this.links[i]===this.selectedObject&amp;&amp;!this.uiParams.lockedgeset||nodeDeleted&amp;&amp;(this.links[i].node===this.selectedObject||this.links[i].nodeA===this.selectedObject||this.links[i].nodeB===this.selectedObject))&amp;&amp;this.links.splice(i--,1);this.selectedObject=null,this.draw()}else 13===key?null!==this.selectedObject&amp;&amp;(this.selectedObject=null,this.draw()):37===key?null!==this.selectedObject&amp;&amp;this.canEditText()&amp;&amp;(this.selectedObject.textBox.caretLeft(),this.resetCaret(),this.draw()):39===key?null!==this.selectedObject&amp;&amp;this.canEditText()&amp;&amp;(this.selectedObject.textBox.caretRight(),this.resetCaret(),this.draw()):90==e.keyCode&amp;&amp;e.ctrlKey&amp;&amp;e.shiftKey||89==e.keyCode&amp;&amp;e.ctrlKey?this.redo():90==e.keyCode&amp;&amp;e.ctrlKey&amp;&amp;this.undo()}},Graph.prototype.dblclick=function(e){var mouse=util.crossBrowserRelativeMousePos(e);this.readOnly||this.uiParams.locknodeset||(this.selectedObject=this.selectObject(mouse.x,mouse.y),this.saveVersion(),null===this.selectedObject?(this.selectedObject=new elements.Node(this,mouse.x,mouse.y),this.nodes.push(this.selectedObject),this.selectedObject.justMoved=!0,this.resetCaret(),this.draw()):this.selectedObject instanceof elements.Node&amp;&amp;this.isFsm()&amp;&amp;(this.selectedObject.isAcceptState=!this.selectedObject.isAcceptState,this.draw()))},Graph.prototype.resize=function(w,h){this.graphCanvas.resize(w,h),this.draw()},Graph.prototype.mousemove=function(e){var closestPoint,mouse=util.crossBrowserRelativeMousePos(e);if(!this.readOnly){for(i=0;i&lt;this.buttons.length;i++)this.buttons[i].containsPoint(mouse.x,mouse.y)?this.buttons[i].highLighted=!0:this.buttons[i].highLighted=!1,this.draw();if(null!==this.currentLink){var targetNode=this.selectObject(mouse.x,mouse.y);targetNode instanceof elements.Node||(targetNode=null),null===this.selectedObject?this.currentLink=null!==targetNode?new elements.StartLink(this,targetNode,this.originalClick):new elements.TemporaryLink(this,this.originalClick,mouse):targetNode===this.selectedObject?this.currentLink=new elements.SelfLink(this,this.selectedObject,mouse):null!==targetNode?this.currentLink=new elements.Link(this,this.selectedObject,targetNode):(closestPoint=this.selectedObject.closestPointOnCircle(mouse.x,mouse.y),this.currentLink=new elements.TemporaryLink(this,closestPoint,mouse)),this.draw()}if(this.movingGraph){for(var nodes=this.movingNodes,i=0;i&lt;nodes.length;i++)nodes[i].trackMouse(mouse.x,mouse.y),this.snapNode(nodes[i]);this.draw()}else this.movingText?(this.selectedObject.textBox.setAnchorPoint(mouse.x,mouse.y),this.draw()):this.movingObject&amp;&amp;(this.selectedObject.setAnchorPoint(mouse.x,mouse.y),this.selectedObject instanceof elements.Node&amp;&amp;this.snapNode(this.selectedObject),this.draw())}},Graph.prototype.mouseup=function(){this.readOnly||(this.movingObject=!1,this.movingGraph=!1,this.movingText=!1,null!==this.currentLink&amp;&amp;(this.currentLink instanceof elements.TemporaryLink||(this.selectedObject=this.currentLink,this.addLink(this.currentLink),this.resetCaret()),this.currentLink=null,this.draw()))},Graph.prototype.selectObject=function(x,y){for(i=0;i&lt;this.buttons.length;i++)if(this.buttons[i].containsPoint(x,y))return this.buttons[i];var i;for(i=0;i&lt;this.nodes.length;i++)if(this.nodes[i].containsPoint(x,y))return this.nodes[i];for(i=0;i&lt;this.links.length;i++){if(this.links[i].containsPoint(x,y))return this.links[i];if("textBox"in this.links[i]&amp;&amp;this.links[i].textBox.containsPoint(x,y))return this.links[i].textBox}return null},Graph.prototype.snapNode=function(node){for(var i=0;i&lt;this.nodes.length;i++)this.nodes[i]!==node&amp;&amp;(Math.abs(node.x-this.nodes[i].x)&lt;this.SNAP_TO_PADDING&amp;&amp;(node.x=this.nodes[i].x),Math.abs(node.y-this.nodes[i].y)&lt;this.SNAP_TO_PADDING&amp;&amp;(node.y=this.nodes[i].y))},Graph.prototype.addLink=function(newLink){for(var maxPerpRHS=null,i=0;i&lt;this.links.length;i++){var link=this.links[i];link.nodeA===newLink.nodeA&amp;&amp;link.nodeB===newLink.nodeB&amp;&amp;(null===maxPerpRHS||link.perpendicularPart&gt;maxPerpRHS)&amp;&amp;(maxPerpRHS=link.perpendicularPart),link.nodeA===newLink.nodeB&amp;&amp;link.nodeB===newLink.nodeA&amp;&amp;(null===maxPerpRHS||-link.perpendicularPart&gt;maxPerpRHS)&amp;&amp;(maxPerpRHS=-link.perpendicularPart)}null!==maxPerpRHS&amp;&amp;(newLink.perpendicularPart=maxPerpRHS+this.DUPLICATE_LINK_OFFSET),this.links.push(newLink)},Graph.prototype.reload=function(){var content=$(this.textArea).val();if(content)try{var i,backup=JSON.parse(content);for(i=0;i&lt;backup.nodes.length;i++){var backupNode=backup.nodes[i],backupNodeLayout=backup.nodeGeometry[i],node=new elements.Node(this,backupNodeLayout[0],backupNodeLayout[1]);node.isAcceptState=backupNode[1],node.textBox=new elements.TextBox(backupNode[0].toString(),node),this.nodes.push(node)}for(i=0;i&lt;backup.edges.length;i++){var backupLink=backup.edges[i],backupLinkLayout=backup.edgeGeometry[i],link=null;backupLink[0]===backupLink[1]?((link=new elements.SelfLink(this,this.nodes[backupLink[0]])).anchorAngle=backupLinkLayout.anchorAngle,link.textBox=new elements.TextBox(backupLink[2].toString(),link),backupLink.length&gt;3&amp;&amp;link.textBox.setAnchorPoint(backupLink[3].x,backupLink[3].y)):-1===backupLink[0]?((link=new elements.StartLink(this,this.nodes[backupLink[1]])).deltaX=backupLinkLayout.deltaX,link.deltaY=backupLinkLayout.deltaY):((link=new elements.Link(this,this.nodes[backupLink[0]],this.nodes[backupLink[1]])).parallelPart=backupLinkLayout.parallelPart,link.perpendicularPart=backupLinkLayout.perpendicularPart,link.lineAngleAdjust=backupLinkLayout.lineAngleAdjust,link.textBox=new elements.TextBox(backupLink[2].toString(),link),backupLink.length&gt;3&amp;&amp;link.textBox.setAnchorPoint(backupLink[3].x,backupLink[3].y)),null!==link&amp;&amp;this.links.push(link)}}catch(e){this.fail=!0,this.failString="graph_ui_invalidserialisation"}},Graph.prototype.save=function(){var i,backup={edgeGeometry:[],nodeGeometry:[],nodes:[],edges:[]};if(JSON&amp;&amp;(""!==this.textArea.val().trim()||0!==this.nodes.length)){for(i=0;i&lt;this.nodes.length;i++){var node=this.nodes[i],nodeData=[node.textBox.text,node.isAcceptState],nodeLayout=[node.x,node.y];backup.nodeGeometry.push(nodeLayout),backup.nodes.push(nodeData)}for(i=0;i&lt;this.links.length;i++){var link=this.links[i],linkData=null,linkLayout=null;link instanceof elements.SelfLink?(linkLayout={anchorAngle:link.anchorAngle},linkData=[this.nodes.indexOf(link.node),this.nodes.indexOf(link.node),link.textBox.text],link.textBox.dragged&amp;&amp;linkData.push(link.textBox.position)):link instanceof elements.StartLink?(linkLayout={deltaX:link.deltaX,deltaY:link.deltaY},linkData=[-1,this.nodes.indexOf(link.node),""]):link instanceof elements.Link&amp;&amp;(linkLayout={lineAngleAdjust:link.lineAngleAdjust,parallelPart:link.parallelPart,perpendicularPart:link.perpendicularPart},linkData=[this.nodes.indexOf(link.nodeA),this.nodes.indexOf(link.nodeB),link.textBox.text],link.textBox.dragged&amp;&amp;linkData.push(link.textBox.position)),null!==linkData&amp;&amp;null!==linkLayout&amp;&amp;(backup.edges.push(linkData),backup.edgeGeometry.push(linkLayout))}this.textArea.val(JSON.stringify(backup))}},Graph.prototype.saveVersion=function(){var curState=this.textArea.val();if(0==this.versions.length||0!=curState.localeCompare(this.versions[this.versionIndex])){for(this.versionIndex++;this.versionIndex&lt;this.versions.length;)this.versions.pop();this.versions.push(curState),this.versions.length&gt;this.MAX_VERSIONS&amp;&amp;(this.versions.shift(),this.versionIndex--)}},Graph.prototype.undo=function(){this.saveVersion(),this.versionIndex&gt;0&amp;&amp;(this.versionIndex--,this.textArea.val(this.versions[this.versionIndex]),this.nodes=[],this.links=[],this.reload(),this.draw())},Graph.prototype.redo=function(){this.versionIndex&lt;this.versions.length-1&amp;&amp;(this.versionIndex++,this.textArea.val(this.versions[this.versionIndex]),this.nodes=[],this.links=[],this.reload(),this.draw())},Graph.prototype.clear=function(){this.saveVersion(),this.nodes=[],this.links=[],this.save(),this.draw()},Graph.prototype.destroy=function(){clearInterval(this.caretTimer),this.graphCanvas.canvas.off(),this.graphCanvas.canvas.remove()},Graph.prototype.resetCaret=function(){var t=this;clearInterval(this.caretTimer),this.caretTimer=setInterval((function(){t.caretVisible=!t.caretVisible,t.draw()}),500),this.caretVisible=!0},Graph.prototype.draw=function(){var i,c=this.getCanvas().getContext("2d");for(c.clearRect(0,0,this.getCanvas().width,this.getCanvas().height),c.save(),c.translate(.5,.5),i=0;i&lt;this.buttons.length;i++)this.buttons[i].draw(c);if(!this.helpBox.helpOpen){for(i=0;i&lt;this.nodes.length;i++)c.lineWidth=1,c.fillStyle=c.strokeStyle=this.nodes[i]===this.selectedObject?"blue":"black",this.nodes[i].draw(c);for(i=0;i&lt;this.links.length;i++)c.lineWidth=1,c.fillStyle=c.strokeStyle=this.links[i]===this.selectedObject||this.links[i].textBox===this.selectedObject?"blue":"black",this.links[i].draw(c);null!==this.currentLink&amp;&amp;(c.lineWidth=1,c.fillStyle=c.strokeStyle="black",this.currentLink.draw(c))}c.restore(),this.save()},{Constructor:Graph}}));
/**
 * JavaScript for handling UI actions in the question authoring form.
 *
 * @module qtype_coderunner/authorform
 * @copyright  Richard Lobb, 2015, The University of Canterbury
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("qtype_coderunner/authorform",["jquery","qtype_coderunner/userinterfacewrapper","core/str"],(function($,ui,str){let currentQtype="";var JSON_TO_FORM_MAP={template:["#id_template","value",""],iscombinatortemplate:["#id_iscombinatortemplate","checked","",function(value){return"1"===value}],cputimelimitsecs:["#id_cputimelimitsecs","value",""],memlimitmb:["#id_memlimitmb","value",""],sandbox:["#id_sandbox","value","DEFAULT"],sandboxparams:["#id_sandboxparams","value",""],testsplitterre:["#id_testsplitterre","value","",function(splitter){return splitter.replace("\n","\\n")}],allowmultiplestdins:["#id_allowmultiplestdins","checked","",function(value){return"1"===value}],grader:["#id_grader","value","EqualityGrader"],resultcolumns:["#id_resultcolumns","value",""],language:["#id_language","value",""],acelang:["#id_acelang","value",""],uiplugin:["#id_uiplugin","value","ace"]};return{initEditForm:function(){var typeCombo=$("#id_coderunnertype"),prototypeDisplay=$("#id_isprototype"),template=$("#id_template"),evaluatePerStudent=$("#id_templateparamsevalpertry"),globalextra=$("#id_globalextra"),prototypeextra=$("#id_prototypeextra"),useace=$("#id_useace"),language=$("#id_language"),acelang=$("#id_acelang"),customise=$("#id_customise"),isCombinator=$("#id_iscombinatortemplate"),testSplitterRe=$("#id_testsplitterre"),allowMultipleStdins=$("#id_allowmultiplestdins"),customisationFieldSet=$("#id_customisationheader"),advancedCustomisation=$("#id_advancedcustomisationheader"),isCustomised=customise.prop("checked"),prototypeType=$("#id_prototypetype"),preloadHdr=$("#id_answerpreloadhdr"),courseId=$('input[name="courseid"]').prop("value"),questiontypeHelpDiv=$("#qtype-help"),precheck=$("select#id_precheck"),testtypedivs=$("div.testtype"),testsection=$("#id_testcasehdr"),brokenQuestion=$("#id_broken_question"),badQuestionLoad=$("#id_bad_question_load"),uiplugin=$("#id_uiplugin"),uiparameters=$("#id_uiparameters");function setUi(taId,uiname){var lang,uiWrapper,ta=$(document.getElementById(taId)),currentLang=ta.attr("data-lang"),paramsJson=ta.attr("data-params"),params={};ta.attr("data-prototypeextra",prototypeextra.val()),ta.attr("data-globalextra",globalextra.val()),ta.attr("data-test0",$("#id_testcode_0").val());try{params=JSON.parse(paramsJson)}catch(err){}"none"===(uiname=uiname.toLowerCase())&amp;&amp;(uiname=""),"id_templateparams"==taId||"id_uiparameters"==taId?lang="":(lang=language.prop("value"),"id_template"!==taId&amp;&amp;acelang.prop("value")&amp;&amp;(lang=function(acelang){var langs,i;if(acelang.indexOf(",")&lt;0)return acelang;for(langs=acelang.split(","),i=0;i&lt;langs.length;i++)if(langs[i].endsWith("*"))return langs[i].substr(0,langs[i].length-1);return langs.length&gt;0?langs[0]:""}(acelang.prop("value")))),(uiWrapper=ta.data("current-ui-wrapper"))&amp;&amp;uiWrapper.uiname===uiname&amp;&amp;currentLang==lang||(ta.attr("data-lang",lang),uiWrapper?(params.lang=lang,uiWrapper.loadUi(uiname,params)):uiWrapper=new ui.InterfaceWrapper(uiname,taId))}function setUis(){let uiname=uiplugin.val(),answer=$("#id_answer"),enableUi=!0;if("html"===uiname&amp;&amp;""!==answer.attr("data-params"))try{!1===JSON.parse(answer.attr("data-params")).enable_in_editor&amp;&amp;(enableUi=!1)}catch(error){alert("Invalid UI parameters.")}enableUi&amp;&amp;(setUi("id_answer",uiname),setUi("id_answerpreload",uiname))}function setCustomisationVisibility(isVisible){var display=isVisible?"block":"none";customisationFieldSet.css("display",display),advancedCustomisation.css("display",display),isVisible&amp;&amp;useace.prop("checked")&amp;&amp;setUi("id_template","ace")}function copyFieldsFromQuestionType(newType,response){var formspecifier,attrval,isCombinatorEnabled;for(var key in function(stateOn){var uiWrapper,taIds=["id_template","id_uiparameters"];if(useace.prop("checked"))for(var i=0;i&lt;taIds.length;i++)(uiWrapper=$(document.getElementById(taIds[i])).data("current-ui-wrapper"))&amp;&amp;stateOn?uiWrapper.restart():uiWrapper&amp;&amp;!stateOn&amp;&amp;uiWrapper.stop()}(!1),JSON_TO_FORM_MAP)formspecifier=JSON_TO_FORM_MAP[key],attrval=response[key]?response[key]:formspecifier[2],formspecifier.length&gt;3&amp;&amp;(attrval=(0,formspecifier[3])(attrval)),$(formspecifier[0]).prop(formspecifier[1],attrval);customise.prop("checked",!1),str.get_string("coderunner_question_type","qtype_coderunner").then((function(s){var title,coderunner_descr,html,resultHtml;questiontypeHelpDiv.html((title=newType,coderunner_descr=s,html=response.questiontext,resultHtml='&lt;p class="question-type-details-header"&gt;',resultHtml+=coderunner_descr,resultHtml+=title+"&lt;/p&gt;\n"+html))})),setCustomisationVisibility(!1),isCombinatorEnabled=isCombinator.prop("checked"),testSplitterRe.prop("disabled",!isCombinatorEnabled),allowMultipleStdins.prop("disabled",!isCombinatorEnabled)}function langStringAlert(key,extra){window.hasOwnProperty("behattesting")&amp;&amp;window.behattesting||str.get_string(key,"qtype_coderunner").then((function(s){var message=s.replace(/\n/g," ");extra&amp;&amp;(message+="\n"+extra),alert(message)}))}function loadCustomisationFields(){let newType=typeCombo.children("option:selected").text();""!==newType&amp;&amp;"Undefined"!==newType&amp;&amp;(typeCombo.children("option:first-child").prop("disabled","disabled"),$.getJSON(M.cfg.wwwroot+"/question/type/coderunner/ajax.php",{qtype:newType,courseid:courseId,sesskey:M.cfg.sesskey},(function(outcome){if($("#id_qtype_coderunner_warning_div").empty(),outcome.success)copyFieldsFromQuestionType(newType,outcome),setUis(),loadUiParametersDescription(),currentQtype=newType,$("#id_qtype_coderunner_error_div").empty();else{const errorObject=function(questionType,error){const errorObject=JSON.parse(error);return str.get_string("prototype_error","qtype_coderunner").then((function(s){str.get_string(errorObject.alert,"qtype_coderunner",questionType).then((function(str){langStringAlert("prototype_load_failure",str);let errorMessage=s+"\n";errorMessage+=str+"\n",errorMessage+="CourseId: "+courseId+", qtype: "+questionType,template.prop("value",errorMessage)}))})),errorObject}(newType,outcome.error);currentQtype!==newType&amp;&amp;"duplicateprototype"===errorObject.error&amp;&amp;(!function(currentType,errorObject,newType){str.get_string("loadprototypeerror","qtype_coderunner",{oldtype:currentType,crtype:newType,outputstring:errorObject.extras}).then((function(str){$("#id_qtype_coderunner_warning_div").append($("&lt;p&gt;"+str+"&lt;/p&gt;"))}))}(currentQtype,errorObject,newType),$("#id_coderunnertype").val(currentQtype))}})).fail((function(){langStringAlert("error_loading_prototype"),template.prop("value","*** AJAX ERROR. DON'T SAVE THIS! ***"),str.get_string("ajax_error","qtype_coderunner").then((function(s){template.prop("value",s)}))})))}function loadUiParametersDescription(){let newUi=uiplugin.children("option:selected").text();$.getJSON(M.cfg.wwwroot+"/question/type/coderunner/ajax.php",{uiplugin:newUi,courseid:courseId,sesskey:M.cfg.sesskey},(function(uiInfo){var table,currentuiparameters=uiparameters.val(),paramDescriptionDiv=$(".ui_parameters_descr"),showhidebutton=$('&lt;button type="button" class="toggleuidetails"&gt;'+uiInfo.showdetails+"&lt;/button&gt;");paramDescriptionDiv.empty(),paramDescriptionDiv.append(uiInfo.header),0==uiInfo.uiparamstable.length&amp;&amp;""===currentuiparameters.trim()?(uiparameters.val(""),$("#fgroup_id_uiparametergroup").hide()):(0!=uiInfo.uiparamstable.length&amp;&amp;(paramDescriptionDiv.append(showhidebutton),table=$(function(uiParamInfo){var param,i,html='&lt;div class="uiparamtablediv"&gt;&lt;table class="uiparamtable"&gt;\n',hdrs=uiParamInfo.columnheaders;for(html+="&lt;tr&gt;&lt;th&gt;"+hdrs[0]+"&lt;/th&gt;&lt;th&gt;"+hdrs[1]+"&lt;/th&gt;&lt;th&gt;"+hdrs[2]+"&lt;/th&gt;&lt;/tr&gt;\n",i=0;i&lt;uiParamInfo.uiparamstable.length;i++)html+="&lt;tr&gt;&lt;td&gt;"+(param=uiParamInfo.uiparamstable[i])[0]+"&lt;/td&gt;&lt;td&gt;"+param[1]+"&lt;/td&gt;&lt;td&gt;"+param[2]+"&lt;/td&gt;&lt;/tr&gt;\n";return html+"&lt;/table&gt;&lt;/div&gt;\n"}(uiInfo)),paramDescriptionDiv.append(table),table.hide(),showhidebutton.click((function(){showhidebutton.html()==uiInfo.showdetails?(table.show(),showhidebutton.html(uiInfo.hidedetails)):(table.hide(),showhidebutton.html(uiInfo.showdetails))}))),$("#fgroup_id_uiparametergroup").show(),useace.prop("checked")&amp;&amp;setUi("id_uiparameters","ace"))})).fail((function(){langStringAlert("error_loading_ui_descr")}))}function set_testtype_visibilities(){"3"===precheck.val()?testtypedivs.show():testtypedivs.hide()}function check_ace_lang(){"ace"===uiplugin.val()&amp;&amp;setUis()}0!=prototypeType.prop("value")&amp;&amp;(testsection.css("display","none"),prototypeDisplay.removeAttr("hidden"),1==prototypeType.prop("value")&amp;&amp;(str.get_string("proceed_at_own_risk","qtype_coderunner").then((function(s){alert(s)})),prototypeType.prop("disabled",!0),customise.prop("disabled",!0))),function(){let messagePara=null;""!==brokenQuestion.prop("value")&amp;&amp;(messagePara=$("&lt;p&gt;"+brokenQuestion.prop("value")+"&lt;/p&gt;"),$("#id_qtype_coderunner_error_div").append(messagePara))}(),badQuestionLoad.prop("hidden"),currentQtype=typeCombo.children("option:selected").text(),setCustomisationVisibility(isCustomised),isCustomised?(setUis(),str.get_string("info_unavailable","qtype_coderunner").then((function(s){questiontypeHelpDiv.html("&lt;p&gt;"+s+"&lt;/p&gt;")}))):loadCustomisationFields(),set_testtype_visibilities(),useace.prop("checked")&amp;&amp;(setUi("id_templateparams","ace"),setUi("id_uiparameters","ace")),loadUiParametersDescription(),customise.on("change",(function(){customise.prop("checked")?setCustomisationVisibility(!0):str.get_string("confirm_proceed","qtype_coderunner").then((function(s){window.confirm(s)?setCustomisationVisibility(!1):customise.prop("checked",!0)}))})),acelang.on("change",check_ace_lang),language.on("change",(function(){useace.prop("checked")&amp;&amp;setUi("id_template","ace"),check_ace_lang()})),typeCombo.on("change",(function(){customise.prop("checked")?str.get_string("question_type_changed","qtype_coderunner").then((function(s){window.confirm(s)&amp;&amp;loadCustomisationFields()})):loadCustomisationFields()})),useace.on("change",(function(){useace.prop("checked")?(setUi("id_template","ace"),setUi("id_templateparams","ace"),setUi("id_uiparameters","ace")):(setUi("id_template",""),setUi("id_templateparams",""),setUi("id_uiparameters",""))})),evaluatePerStudent.on("change",(function(){evaluatePerStudent.is(":checked")&amp;&amp;langStringAlert("templateparamsusingsandbox")})),uiplugin.on("change",(function(){setUis(),loadUiParametersDescription()})),precheck.on("change",set_testtype_visibilities),prototypeType.on("change",(function(){"0"==prototypeType.prop("value")?(testsection.css("display","block"),prototypeDisplay.attr("hidden","1")):(testsection.css("display","none"),prototypeDisplay.removeAttr("hidden"))})),new MutationObserver((function(){setUis()})).observe(preloadHdr.get(0),{attributes:!0}),$("button.replaceexpectedwithgot").click((function(){var gotPre=$(this).prev('pre[id^="id_got_"]'),testCaseId=gotPre.attr("id").replace("id_got_","");$("#id_expected_"+testCaseId).val(gotPre.text()),$("#id_fail_expected_"+testCaseId).html(gotPre.text()),$(".failrow_"+testCaseId).addClass("fixed"),$(this).prop("disabled",!0)})),$(".btn-primary").click((function(){typeCombo.prop("disabled",!1)}))}}}));
define("qtype_coderunner/outputdisplayarea",["exports","core/ajax","core/str"],(function(_exports,_ajax,_str){var obj;
/**
   * A module used for running code using the Coderunner webservice (CRWS) and displaying output. Originally
   * developed for use in the Scratchpad UI. It has three modes of operation:
   * - 'text': Just display the output as text, html escaped.
   * - 'json': The recommended way to display programs that use stdin or output images (or both).
   *      - Accepts JSON in the CRWS response output with fields:
   *          - "returncode": Error/return code from running program.
   *          - "stdout": Stdout text from running program.
   *          - "stderr": Error text from running program.
   *          - "files": An object containing filenames mapped to base64 encoded images.
   *                     These will be displayed below any stdout text.
   *      - When input from stdin is required the returncode 42 should be returned, raise this
   *        any time the program asks for input. An (html) input will be added after the last stdout received.
   *        When enter is pressed, runCode is called with value of the input added to the stdin string.
   *        This repeats until returncode is no longer 42.
   * - 'html': Display program output as raw html inside the output area.
   *      - This can be used to show images and insert other HTML tags (and beyond).
   *      - Giving an &lt;input&gt; tag the class 'coderunner-run-input' will add an event that
   *        on pressing enter will call the runCode method again with the value of that input field added to stdin.
   *        This method of receiving stdin is harder to use but more flexible than JSON, enter at your own risk.
   *
   * @module qtype_coderunner/outputdisplayarea
   * @copyright  James Napier, 2023, The University of Canterbury
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.OutputDisplayArea=void 0,_ajax=(obj=_ajax)&amp;&amp;obj.__esModule?obj:{default:obj};const JSON_DISPLAY_PROPS=["returncode","stdout","stderr","files"],setLangString=async function(langStringName,node,callback){let additionalText=arguments.length&gt;3&amp;&amp;void 0!==arguments[3]?arguments[3]:"",message=await(0,_str.get_string)(langStringName,"qtype_coderunner");langStringName.includes("error")&amp;&amp;(message="*** "+message+" ***\n"),additionalText&amp;&amp;(message+=additionalText),callback instanceof Function?callback(node,message):node.innerText=message},combinedOutput=response=&gt;response.cmpinfo+response.output+response.stderr,getImage=function(base64){let type=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]?arguments[1]:"png";const image=document.createElement("img");return image.src="data:image/".concat(type,";base64,").concat(base64),image};_exports.OutputDisplayArea=class{constructor(displayAreaId,outputMode,lang,sandboxParams){this.displayAreaId=displayAreaId,this.lang=lang,this.mode=outputMode,this.sandboxParams=sandboxParams,this.textDisplay=document.getElementById(displayAreaId+"-text"),this.imageDisplay=document.getElementById(displayAreaId+"-images"),this.prevRunSettings=null}clearDisplay(){this.textDisplay.innerHTML="",this.imageDisplay.innerHTML=""}displayText(response){this.textDisplay.innerText=combinedOutput(response)}displayHtml(response){this.textDisplay.innerHTML=combinedOutput(response);const inputEl=this.textDisplay.querySelector(".coderunner-run-input");inputEl&amp;&amp;this.addInputEvents(inputEl)}displayJson(response){const result=this.validateJson(response.output);let text=result.stdout;42!==result.returncode&amp;&amp;(text+=result.stderr),13==result.returncode&amp;&amp;setLangString("error_timeout",this.textDisplay,((node,msg)=&gt;{node.innerText+=msg}));const numImages=this.displayImages(result.files);""===text.trim()&amp;&amp;42!==result.returncode?0==numImages&amp;&amp;this.displayNoOutput(null):this.textDisplay.innerText=text,42===result.returncode&amp;&amp;this.addInput()}validateJson(jsonString){let result=null;try{result=JSON.parse(jsonString)}catch(e){window.alert("Error parsing display JSON output: \n"+"'".concat(jsonString,"\n'")+"Error Msg: \n"+" ".concat(e.message," \n")+"The question author must fix this!")}const missing=((obj,props)=&gt;props.filter((prop=&gt;!obj.hasOwnProperty(prop))))(result,JSON_DISPLAY_PROPS);return missing.length&gt;0&amp;&amp;window.alert("Display JSON (in response.result) is missing the following fields: \n"+"".concat(missing.join()," \n")+"The question author must fix this!"),result}displayNoOutput(response){const isNoOutput=!response||0===combinedOutput(response).length;if(isNoOutput||null===response){const span=document.createElement("span");span.style.color="red",setLangString("nooutput",span),this.clearDisplay(),this.textDisplay.append(span)}return isNoOutput}display(response){const error=(response=&gt;{const ERROR_RESPONSES=[[1,0,"error_access_denied"],[2,0,"error_unknown_language"],[3,0,"error_access_denied"],[4,0,"error_submission_limit_reached"],[5,0,"error_sandbox_server_overload"],[0,11,""],[0,12,""],[0,13,"error_timeout"],[0,15,""],[0,17,"error_memory_limit"],[0,21,"error_sandbox_server_overload"],[0,30,"error_excessive_output"]];for(let i=0;i&lt;ERROR_RESPONSES.length;i++){let row=ERROR_RESPONSES[i];if(row[0]==response.error&amp;&amp;(0!=response.error||response.result==row[1]))return row[2]}return"error_unknown_runtime"})(response);if(""===error){if(!this.displayNoOutput(response))if("json"===this.mode)this.displayJson(response);else if("html"===this.mode)this.displayHtml(response);else{if("text"!==this.mode)throw Error('Invalid outputMode given: "'.concat(this.mode,'"'));this.displayText(response)}}else setLangString(error,this.textDisplay)}runCode(code,stdin){let shouldClearDisplay=arguments.length&gt;2&amp;&amp;void 0!==arguments[2]&amp;&amp;arguments[2];this.prevRunSettings=[code,stdin],shouldClearDisplay&amp;&amp;this.clearDisplay(),_ajax.default.call([{methodname:"qtype_coderunner_run_in_sandbox",args:{contextid:M.cfg.contextid,sourcecode:code,language:this.lang,stdin:stdin,params:JSON.stringify(this.sandboxParams)},done:responseJson=&gt;{const response=JSON.parse(responseJson);this.display(response)},fail:error=&gt;{alert(error.message)}}])}addInput(){const inputId="".concat(this.displayAreaId,"-input-field");this.textDisplay.innerHTML+='&lt;input type="text" id="'.concat(inputId,'" class="').concat("coderunner-run-input",'"&gt;');const inputEl=document.getElementById(inputId);setLangString("enter_to_submit",inputEl,((node,msg)=&gt;{node.placeholder+=msg})),this.addInputEvents(inputEl)}addInputEvents(inputEl){inputEl.focus(),inputEl.addEventListener("keydown",(e=&gt;{13===e.keyCode&amp;&amp;e.preventDefault()})),inputEl.addEventListener("keyup",(e=&gt;{if(13===e.keyCode){const line=inputEl.value;inputEl.remove(),this.textDisplay.innterHTML+=line,this.prevRunSettings[1]+=line+"\n",this.runCode(...this.prevRunSettings,!1)}}))}displayImages(files){let numImages=0;for(const[fname,fcontents]of Object.entries(files)){const fileType=fname.split(".")[1];if(fileType){const image=getImage(fcontents,fileType);this.imageDisplay.append(image),numImages+=1}else window.alert('Could not read filename correctly: "'.concat(fname,'"'))}return numImages}}}));
/******************************************************************************
 *
 * This module simply handles changes in the Language selection dropdown for
 * multilanguage questions as seen by students. It switches the Ace language
 * accordingly.
 * It should only be loaded in conjunction with the ui_ace module.
 *
 * @module qtype_coderunner/multilanguagequestion
 * @copyright  Richard Lobb, 2018, The University of Canterbury
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 *
 */
define("qtype_coderunner/multilanguagequestion",["jquery","core/str"],(function($,str){let NO_LANGUAGE_MESSAGE="";return{initLangSelector:function(taId){$().ready((function(){!function(taId){const ta=$(document.getElementById(taId)),langSelectorId=taId.replace("answer","language"),selector=document.getElementById(langSelectorId),uiWrapperId=taId+"_wrapper";function hasAncestorWithId(element,id){for(;element;){if(element.id===id)return!0;element=element.parentElement}return!1}function setAceLang(){const lang=selector.value,uiWrapper=ta.data("current-ui-wrapper");uiWrapper&amp;&amp;uiWrapper.uiInstance&amp;&amp;"function"==typeof uiWrapper.uiInstance.setLanguage&amp;&amp;uiWrapper.uiInstance.setLanguage(lang)}selector.onchange=setAceLang,document.body.onkeydown=function(event){event.target&amp;&amp;hasAncestorWithId(event.target,uiWrapperId)&amp;&amp;""===selector.value&amp;&amp;NO_LANGUAGE_MESSAGE&amp;&amp;(alert(NO_LANGUAGE_MESSAGE),event.preventDefault())}}(taId)}));const promise=str.get_string("nolanguage","qtype_coderunner");$.when(promise).done((function(message){NO_LANGUAGE_MESSAGE=message}))}}}));
/**
 * JavaScript to interface to the Ace editor, which is used both in
 * the author editing page and by the student question submission page.
 * The class defined in this module is a plugin for the InterfaceWrapper class
 * declared in userinterfacewrapper.js. See that file for an explanation of
 * the interface to this module.
 *
 * A special case behaviour of the AceWrapper is that it needs to know
 * the Programming language that is being edited. This MUST be provided in
 * the constructor params parameter (an associative array) as a string
 * with key 'lang'.
 *
 * @module qtype_coderunner/ui_ace
 * @copyright  Richard Lobb, 2015, 2017, The University of Canterbury
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("qtype_coderunner/ui_ace",["jquery"],(function($){function AceWrapper(textareaId,w,h,params){var session,code,textarea=$(document.getElementById(textareaId)),wrapper=$(document.getElementById(textareaId+"_wrapper")),focused=textarea[0]===document.activeElement,lang=params.lang,t=this;try{window.ace.require("ace/ext/language_tools"),this.modelist=window.ace.require("ace/ext/modelist"),this.textareaId=textareaId,this.textarea=textarea,this.enabled=!1,this.contents_changed=!1,this.capturingTab=!1,this.clickInProgress=!1,this.editNode=$("&lt;div&gt;&lt;/div&gt;"),this.editNode.css({resize:"none",height:h,width:"100%"}),this.editor=window.ace.edit(this.editNode.get(0)),textarea.prop("readonly")&amp;&amp;this.editor.setReadOnly(!0),this.editor.setOptions({enableBasicAutocompletion:!0,enableLiveAutocompletion:params.live_autocompletion,fontSize:params.font_size?params.font_size:"14px",newLineMode:"unix"}),this.editor.$blockScrolling=1/0,session=this.editor.getSession(),code=this.textarea.val(),(void 0===params.import_from_scratchpad||params.import_from_scratchpad)&amp;&amp;(code=this.extract_from_json_maybe(code)),session.setValue(code);const userTheme=window.localStorage.getItem("qtype_coderunner.ace.theme"),consider_prefers=params.auto_switch_light_dark&amp;&amp;window.matchMedia;null!==userTheme?this.editor.setTheme(userTheme):consider_prefers&amp;&amp;window.matchMedia("(prefers-color-scheme: dark)").matches?this.editor.setTheme("ace/theme/tomorrow_night"):consider_prefers&amp;&amp;window.matchMedia("(prefers-color-scheme: light)").matches?this.editor.setTheme("ace/theme/textmate"):params.theme?this.editor.setTheme("ace/theme/"+params.theme):this.editor.setTheme("ace/theme/textmate"),this.currentTheme=this.editor.getTheme(),this.fixSlowLoad(),this.setLanguage(lang),this.setEventHandlers(textarea),this.captureTab(),this.editor.renderer.on("afterRender",(function(){var gutter=wrapper.find(".ace_gutter");gutter.hasClass("moodle-has-zindex")||(gutter.addClass("moodle-has-zindex"),focused&amp;&amp;(t.editor.focus(),t.editor.navigateFileEnd()),t.aceLabel=wrapper.find(".answerprompt"),t.aceLabel.attr("for","ace_"+textareaId),t.aceTextarea=wrapper.find(".ace_text-input"),t.aceTextarea.attr("id","ace_"+textareaId))})),this.fail=!1}catch(err){this.fail=!0}}return AceWrapper.prototype.extract_from_json_maybe=function(code){try{code=JSON.parse(code).answer_code[0]}catch(err){}return code},AceWrapper.prototype.failed=function(){return this.fail},AceWrapper.prototype.failMessage=function(){return"ace_ui_notready"},AceWrapper.prototype.sync=function(){const thisThemeNow=this.editor.getTheme(),globalTheme=window.localStorage.getItem("qtype_coderunner.ace.theme");thisThemeNow!==this.currentTheme?(this.currentTheme=thisThemeNow,window.localStorage.setItem("qtype_coderunner.ace.theme",thisThemeNow)):globalTheme&amp;&amp;thisThemeNow!=globalTheme&amp;&amp;(this.editor.setTheme(globalTheme),this.currentTheme=globalTheme)},AceWrapper.prototype.syncIntervalSecs=function(){return 2},AceWrapper.prototype.setLanguage=function(language){var session=this.editor.getSession(),mode=this.findMode(language);mode&amp;&amp;session.setMode(mode.mode)},AceWrapper.prototype.getElement=function(){return this.editNode},AceWrapper.prototype.captureTab=function(){this.capturingTab=!0,this.editor.commands.bindKeys({Tab:"indent","Shift-Tab":"outdent"})},AceWrapper.prototype.releaseTab=function(){this.capturingTab=!1,this.editor.commands.bindKeys({Tab:null,"Shift-Tab":null})},AceWrapper.prototype.fixSlowLoad=function(){const observer=new IntersectionObserver((()=&gt;{$(document).trigger("mousemove")})),editNode=this.editNode.get(0);observer.observe(editNode)},AceWrapper.prototype.setEventHandlers=function(){var t=this;this.editor.getSession().on("change",(function(){t.textarea.val(t.editor.getSession().getValue()),t.contents_changed=!0})),this.editor.on("blur",(function(){t.contents_changed&amp;&amp;t.textarea.trigger("change")})),this.editor.on("mousedown",(function(){t.clickInProgress=!0})),this.editor.on("focus",(function(){t.clickInProgress?t.captureTab():t.releaseTab()})),this.editor.on("click",(function(){t.clickInProgress=!1})),this.editor.container.addEventListener("keydown",(function(e){void 0!==e.which&amp;&amp;0===e.which||(77===e.keyCode&amp;&amp;e.ctrlKey&amp;&amp;!e.altKey?(t.capturingTab?t.releaseTab():t.captureTab(),e.preventDefault()):27===e.keyCode?t.releaseTab():e.shiftKey||e.ctrlKey||e.altKey||9==e.keyCode||t.captureTab())}),!0)},AceWrapper.prototype.destroy=function(){var focused;this.fail||(focused=this.editor.isFocused(),this.textarea.val(this.editor.getSession().getValue()),this.editor.destroy(),$(this.editNode).remove(),focused&amp;&amp;(this.textarea.focus(),this.textarea[0].selectionStart=this.textarea[0].value.length))},AceWrapper.prototype.hasFocus=function(){return this.editor.isFocused()},AceWrapper.prototype.findMode=function(language){var candidate,filename,result,candidates,nameMap={octave:"matlab",nodejs:"javascript","c#":"cs"};if("string"==typeof language){language.toLowerCase()in nameMap&amp;&amp;(language=nameMap[language.toLowerCase()]),candidates=[language,language.replace(/\d+$/,"")];for(var i=0;i&lt;candidates.length;i++)if(filename="input."+(candidate=candidates[i]),(result=this.modelist.modesByName[candidate]||this.modelist.modesByName[candidate.toLowerCase()]||this.modelist.getModeForPath(filename)||this.modelist.getModeForPath(filename.toLowerCase()))&amp;&amp;"text"!==result.name)return result}},AceWrapper.prototype.resize=function(w,h){this.editNode.outerHeight(h),this.editNode.outerWidth(w),this.editor.resize()},{Constructor:AceWrapper}}));
/**
 * This AMD module provides the functionality for the "Reset"
 * button that is shown just below the student answer field if the question is
 * defined to have preloaded text.
 * If clicked, the button reloads the student answer field with the original
 * preloaded text (after a Confirm dialogue, of course).
 *
 * @module qtype_coderunner/resetbutton
 * @copyright  Richard Lobb, 2016, The University of Canterbury
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("qtype_coderunner/resetbutton",["jquery"],(function($){return{initResetButton:function(buttonId,answerId,confirmText){var uiWrapper,resetButton=$('[id="'+buttonId+'"]'),studentAnswer=$('[id="'+answerId+'"]');resetButton.on("click",(function(){if(window.behattesting||window.confirm(confirmText)){var reloadText=resetButton.attr("data-reload-text");(uiWrapper=studentAnswer.data("current-ui-wrapper"))&amp;&amp;uiWrapper.uiInstance?(uiWrapper.stop(),studentAnswer.val(reloadText),uiWrapper.restart()):studentAnswer.val(reloadText)}}))}}}));
/**
 * This AMD module provides the functionality for the "Show differences"
 * button that is shown in the student's result page if their answer
 * isn't right and an "exact-match" (or near equivalent) grader is being used.
 *
 * @module qtype_coderunner/showdiff
 * @copyright  Richard Lobb, 2016, The University of Canterbury
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("qtype_coderunner/showdiff",["jquery"],(function($){function lcss(items1,items2){var M,i,j,n,result,length;for(M=function(items1,items2){var lengths,i,j,n1=items1.length,n2=items2.length,has_fill="function"==typeof[1].fill;for(lengths=[],i=0;i&lt;=n1;i+=1)if(lengths[i]=new Array(n2+1),has_fill)lengths[i].fill(0);else for(j=0;j&lt;n2+1;j++)lengths[i][j]=0;for(i=0;i&lt;n1;i+=1)for(j=0;j&lt;n2;j+=1)items1[i]==items2[j]?lengths[i+1][j+1]=1+lengths[i][j]:lengths[i+1][j+1]=Math.max(lengths[i][j+1],lengths[i+1][j]);return lengths}(items1,items2),length=M[items1.length][items2.length],result=[],i=items1.length,j=items2.length,n=length-1;n&gt;=0;)items1[i-1]==items2[j-1]?(result[n]=items1[i-1],n-=1,i-=1,j-=1):M[i-1][j]==M[i][j]?i-=1:j-=1;return result}function insertDels(tokens,subSeq,startDel,endDel){var i,html="",deleting=!1,ssi=0;for(void 0===startDel&amp;&amp;(startDel="&lt;del&gt;"),void 0===endDel&amp;&amp;(endDel="&lt;/del&gt;"),i=0;i&lt;tokens.length;i+=1)ssi&lt;subSeq.length&amp;&amp;tokens[i]==subSeq[ssi]?(deleting&amp;&amp;(html+=endDel,deleting=!1),ssi+=1):deleting||(html+=startDel,deleting=!0),html+=tokens[i];return deleting&amp;&amp;(html+=endDel),html}function getTokens(element){var seq,token,match,isPre="pre"===element.tagName.toLowerCase(),text=element.innerHTML,i=0;for(isPre&amp;&amp;(text=text.replace(/\n/g,"↩\n")),text=text.replace(/(&lt;br ?.*?&gt;)/g,"↩$1"),seq=[],i=0;i&lt;text.length;)seq.push((token=void 0,match=void 0,"&amp;"!=text[i]||null===(match=text.substring(i,text.length).match(/(^&amp;[a-zA-Z]+;)|(^&amp;#[0-9]+;)|(^&amp;#[xX][0-9a-fA-F]+;)/))?(token=text[i],i+=1):(token=match[0],i+=token.length),token));return seq}function showDifferences(firstEl,secondEl){var seq1,seq2,css;css=lcss(seq1=getTokens(firstEl),seq2=getTokens(secondEl)),firstEl.innerHTML=insertDels(seq1,css,"&lt;del&gt;","&lt;/del&gt;"),secondEl.innerHTML=insertDels(seq2,css,"&lt;del&gt;","&lt;/del&gt;")}function hideDifferences(firstEl,secondEl){var replPat=new RegExp("(&lt;/?del[^&gt;]*&gt;)|(↩)","g");firstEl.innerHTML=firstEl.innerHTML.replace(replPat,""),secondEl.innerHTML=secondEl.innerHTML.replace(replPat,"")}function processAllRows(tableRows,gotCol,expectedCol,f){for(var cells,i=0;i&lt;tableRows.length;i++)f((cells=tableRows[i].getElementsByTagName("td"))[expectedCol].children[0],cells[gotCol].children[0])}return{initDiffButton:function(buttonId,showValue,hideValue,expectedString,gotString){var table,tableRows,thEls,diffButton=$('[id="'+buttonId+'"]'),columnCount=0,gotCol=-1,expectedCol=-1;thEls=(table=diffButton.closest("div.coderunner-test-results")).find("thead tr").children(),tableRows=table.find("tbody tr"),thEls.each((function(){$(this).html()===gotString?gotCol=columnCount:$(this).html()===expectedString&amp;&amp;(expectedCol=columnCount),columnCount+=1})),-1!==gotCol&amp;&amp;-1!==expectedCol?diffButton.on("click",(function(){diffButton.prop("value")===showValue?(processAllRows(tableRows.toArray(),gotCol,expectedCol,showDifferences),diffButton.prop("value",hideValue)):(processAllRows(tableRows.toArray(),gotCol,expectedCol,hideDifferences),diffButton.prop("value",showValue))})):(diffButton.enabled=!1,diffButton.hide())}}}));
define("qtype_coderunner/graphutil",(function(){function Util(){this.greekLetterNames=["Alpha","Beta","Gamma","Delta","Epsilon","Zeta","Eta","Theta","Iota","Kappa","Lambda","Mu","Nu","Xi","Omicron","Pi","Rho","Sigma","Tau","Upsilon","Phi","Chi","Psi","Omega"]}return Util.prototype.convertLatexShortcuts=function(text){for(var i=0;i&lt;this.greekLetterNames.length;i++){var name=this.greekLetterNames[i];text=(text=text.replace(new RegExp("\\\\"+name,"g"),String.fromCharCode(913+i+(i&gt;16)))).replace(new RegExp("\\\\"+name.toLowerCase(),"g"),String.fromCharCode(945+i+(i&gt;16)))}for(i=0;i&lt;10;i++)text=text.replace(new RegExp("_"+i,"g"),String.fromCharCode(8320+i));return text=text.replace(new RegExp("_a","g"),String.fromCharCode(8336))},Util.prototype.drawArrow=function(c,x,y,angle){var dx=Math.cos(angle),dy=Math.sin(angle);c.beginPath(),c.moveTo(x,y),c.lineTo(x-8*dx+5*dy,y-8*dy-5*dx),c.lineTo(x-8*dx-5*dy,y-8*dy+5*dx),c.fill()},Util.prototype.det=function(a,b,c,d,e,f,g,h,i){return a*e*i+b*f*g+c*d*h-a*f*h-b*d*i-c*e*g},Util.prototype.vectorMagnitude=function(v){return Math.sqrt(v.x*v.x+v.y*v.y)},Util.prototype.scalarProjection=function(a,b){return(a.x*b.x+a.y*b.y)/this.vectorMagnitude(b)},Util.prototype.isCCW=function(a,b){return a.x*b.y-b.x*a.y&gt;0},Util.prototype.circleFromThreePoints=function(x1,y1,x2,y2,x3,y3){var a=this.det(x1,y1,1,x2,y2,1,x3,y3,1),bx=-this.det(x1*x1+y1*y1,y1,1,x2*x2+y2*y2,y2,1,x3*x3+y3*y3,y3,1),by=this.det(x1*x1+y1*y1,x1,1,x2*x2+y2*y2,x2,1,x3*x3+y3*y3,x3,1),c=-this.det(x1*x1+y1*y1,x1,y1,x2*x2+y2*y2,x2,y2,x3*x3+y3*y3,x3,y3);return{x:-bx/(2*a),y:-by/(2*a),radius:Math.sqrt(bx*bx+by*by-4*a*c)/(2*Math.abs(a))}},Util.prototype.isInside=function(pos,rect){return pos.x&gt;rect.x&amp;&amp;pos.x&lt;rect.x+rect.width&amp;&amp;pos.y&lt;rect.y+rect.height&amp;&amp;pos.y&gt;rect.y},Util.prototype.crossBrowserKey=function(e){return(e=e||window.event).which||e.keyCode},Util.prototype.crossBrowserRelativeMousePos=function(e){const rect=e.target.getBoundingClientRect();return{x:e.clientX-rect.left,y:e.clientY-rect.top}},new Util}));
/**
 * Implementation of the table_ui user interface plugin. For overall details
 * of the UI plugin architecture, see userinterfacewrapper.js.
 *
 * This plugin replaces the usual textarea answer element with a div
 * containing an HTML table. The number of columns, and
 * the initial number of rows are specified by required UI parameters
 * num_columns and num_rows respectively.
 * Optional additional UI parameters are:
 *   1. column_headers: a list of strings that can be used to provide a
 *      fixed header row at the top.
 *   2. row_labels: a list of strings that can be used to provide a
 *      fixed row label column at the left.
 *   3. dynamic_rows, which, if true, allows the user to add rows.
 *   4. locked_cells: a list of [row, column] pairs, being the coordinates
 *      of table cells that cannot be changed by the user. row and column numbers
 *      are zero origin and do not include the header row or the row labels.
 *   5. width_percents: a list of the percentages of the width occupied
 *      by each column. This list must include a value for the row labels, if present.
 *
 * Individual cells are textareas except when the number of rows per cell is set to
 * 1, in which case input elements are used instead.
 *
 * The serialisation of the table, which is what is essentially copied back
 * into the original answer box textarea for submissions as the answer, is a JSON array. Each
 * element in the array is itself an array containing the values of one row
 * of the table. Empty cells are empty strings. The table header row and row
 * label columns are not provided in the serialisation.
 *
 * To preload the table with data, simply set the answer_preload of the question
 * to a json array of row values (each itself an array). If the number of rows
 * in the preload exceeds the number set by num_rows, extra rows are
 * added. If the number is less than num_rows, or if there is no
 * answer preload, undefined rows are simply left blank.
 *
 * As a special case of the serialisation, if all cells in the serialisation
 * are empty strings, the serialisation is itself the empty string.
 *
 * @module qtype_coderunner/ui_table
 * @copyright  Richard Lobb, 2018, The University of Canterbury
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("qtype_coderunner/ui_table",["jquery"],(function($){function TableUi(textareaId,width,height,uiParams){if(this.textArea=$(document.getElementById(textareaId)),this.readOnly=this.textArea.prop("readonly"),this.tableDiv=null,this.uiParams=uiParams,!uiParams.num_columns||!uiParams.num_rows)return this.fail=!0,void(this.failString="table_ui_missingparams");this.fail=!1,this.lockedCells=uiParams.locked_cells||[],this.hasHeader=!!(uiParams.column_headers&amp;&amp;uiParams.column_headers.length&gt;0),this.hasRowLabels=!!(uiParams.row_labels&amp;&amp;uiParams.row_labels.length&gt;0),this.numDataColumns=uiParams.num_columns,this.rowsPerCell=uiParams.lines_per_cell||2,this.totNumColumns=this.numDataColumns+(this.hasRowLabels?1:0),this.columnWidths=this.computeColumnWidths(),this.reload()}return TableUi.prototype.computeColumnWidths=function(){var defaultWidth=Math.trunc(100/this.totNumColumns),columnWidths=[];if(this.uiParams.column_width_percents&amp;&amp;this.uiParams.column_width_percents.length&gt;0)return this.uiParams.column_width_percents;if(Array.prototype.fill)return new Array(this.totNumColumns).fill(defaultWidth);for(var i=0;i&lt;this.totNumColumns;i++)columnWidths.push(defaultWidth);return columnWidths},TableUi.prototype.isLockedCell=function(row,col){for(var i=0;i&lt;this.lockedCells.length;i++)if(this.lockedCells[i][0]==row&amp;&amp;this.lockedCells[i][1]==col)return!0;return!1},TableUi.prototype.getElement=function(){return this.tableDiv},TableUi.prototype.failed=function(){return this.fail},TableUi.prototype.failMessage=function(){return this.failString},TableUi.prototype.sync=function(){var serialisation=[],empty=!0;$(this.tableDiv).find("table tbody tr").each((function(){var rowValues=[];$(this).find(".table_ui_cell").each((function(){var cellVal=$(this).val();rowValues.push(cellVal),cellVal&amp;&amp;(empty=!1)})),serialisation.push(rowValues)})),empty?this.textArea.val(""):this.textArea.val(JSON.stringify(serialisation))},TableUi.prototype.tableRow=function(iRow,preload){const cellStyle="width:100%;padding:0;font-family:monospace;";let width,disabled,value,html="&lt;tr&gt;",widthIndex=0;this.hasRowLabels&amp;&amp;(width=this.columnWidths[0],widthIndex=1,html+="&lt;th style='padding-top:8px;text-align:center;width:"+width+"%' scope='row'&gt;",iRow&lt;this.uiParams.row_labels.length&amp;&amp;(html+=this.uiParams.row_labels[iRow]),html+="&lt;/th&gt;");for(let iCol=0;iCol&lt;this.numDataColumns;iCol++)width=this.columnWidths[widthIndex++],disabled=this.isLockedCell(iRow,iCol)?" disabled;":"",value=iRow&lt;preload.length?preload[iRow][iCol]:"",iRow&lt;preload.length&amp;&amp;(value=preload[iRow][iCol]),html+="&lt;td style='padding:2px;margin:0,width:"+width+"'%&gt;",1==this.rowsPerCell?html+='&lt;input type="text" class="table_ui_cell" style="'.concat(cellStyle,'" value="').concat(value,'"').concat(disabled,"&gt;"):(html+='&lt;textarea class="table_ui_cell" rows="'.concat(this.rowsPerCell,'"'),html+=' style="'.concat(cellStyle,'resize:vertical;"').concat(disabled,"&gt;").concat(value,"&lt;/textarea&gt;")),html+="&lt;/td&gt;";return html+="&lt;/tr&gt;",html},TableUi.prototype.tableHeadSection=function(){let html="&lt;thead&gt;\n",colIndex=0;if(this.hasHeader){html+="&lt;tr&gt;",this.hasRowLabels&amp;&amp;(html+="&lt;th style='width:"+this.columnWidths[0]+"%'&gt;&lt;/th&gt;",colIndex+=1);for(let iCol=0;iCol&lt;this.numDataColumns;iCol++)html+="&lt;th style='width:"+this.columnWidths[colIndex]+"%'&gt;",iCol&lt;this.uiParams.column_headers.length&amp;&amp;(html+=this.uiParams.column_headers[iCol]),colIndex++,html+="&lt;/th&gt;";html+="&lt;/tr&gt;\n"}return html+="&lt;/thead&gt;\n",html},TableUi.prototype.reload=function(){var preloadJson=$(this.textArea).val(),preload=[],divHtml="&lt;div style='height:fit-content' class='qtype-coderunner-table-outer-div'&gt;\n&lt;table class='table table-bordered qtype-coderunner_table'&gt;\n";if(preloadJson)try{preload=JSON.parse(preloadJson)}catch(error){return this.fail=!0,void(this.failString="table_ui_invalidjson")}try{divHtml+=this.tableHeadSection(),divHtml+="&lt;tbody&gt;\n";for(var num_rows_required=Math.max(this.uiParams.num_rows,preload.length),iRow=0;iRow&lt;num_rows_required;iRow++)divHtml+=this.tableRow(iRow,preload);if(divHtml+="&lt;/tbody&gt;\n&lt;/table&gt;\n&lt;/div&gt;",this.tableDiv=$(divHtml),this.uiParams.dynamic_rows&amp;&amp;this.addButtons(),1==this.rowsPerCell){const ENTER=13;$(this.tableDiv).find(".table_ui_cell").each((function(){$(this).on("keydown",(e=&gt;{e.keyCode===ENTER&amp;&amp;e.preventDefault()}))}))}}catch(error){this.fail=!0,this.failString="table_ui_invalidserialisation"}},TableUi.prototype.addButtons=function(){var deleteButton=$('&lt;button type="button"style="float:right;margin-right:6px" disabled&gt;Delete row&lt;/button&gt;'),t=this;this.tableDiv.append(deleteButton),deleteButton.click((function(){var numRows=t.tableDiv.find("table tbody tr").length,lastRow=t.tableDiv.find("tr:last");numRows&gt;t.uiParams.num_rows&amp;&amp;lastRow.remove(),lastRow=t.tableDiv.find("tr:last"),numRows==t.uiParams.num_rows+1&amp;&amp;$(this).prop("disabled",!0)}));var addButton=$('&lt;button type="button"style="float:right;margin-right:6px"&gt;Add row&lt;/button&gt;');t.tableDiv.append(addButton),addButton.click((function(){var lastRow,newRow;(newRow=(lastRow=t.tableDiv.find("table tbody tr:last")).clone()).find(".table_ui_cell").each((function(){$(this).val("")})),lastRow.after(newRow),$(this).prev().prop("disabled",!1)}))},TableUi.prototype.resize=function(){},TableUi.prototype.hasFocus=function(){var focused=!1;return $(this.tableDiv).find(".table_ui_cell").each((function(){this===document.activeElement&amp;&amp;(focused=!0)})),focused},TableUi.prototype.destroy=function(){this.sync(),$(this.tableDiv).remove(),this.tableDiv=null},{Constructor:TableUi}}));
/**
 * Implementation of the gapfiller_ui user interface plugin. For overall details
 * of the UI plugin architecture, see userinterfacewrapper.js.
 *
 * This plugin replaces the usual textarea answer box with a div
 * consisting of pre-formatted text supplied by the question author in either the
 * "globalextra" field or the testcode field of the first test case, according
 * to the ui parameter ui_source (default: globalextra).  HTML
 * entry or textarea elements are then inserted at
 * specified points. It is intended primarily for use with coding questions
 * where the answerbox presents the students with code that has smallish bits
 * missing.
 *
 * The locations within the globalextra text at which the input elements are
 * to be inserted are denoted by "tags" of the form
 *
 *     {[ size ]}
 *
 * for an HTML input element
 *
 * or
 *
 *     {[ rows, columns ]}
 *
 * for a textarea element
 *
 * where size, rows and column are integer literals. These respectively
 * inject an HTML input element or a textarea element of the
 * specified size.
 *
 * The serialisation of the answer box contents, i.e. the text that
 * copied back into the textarea for submissions
 * as the answer, is simply a list of all the field values (strings), in order.
 *
 * As a special case of the serialisation, if the value list is empty, the
 * serialisation itself is the empty string.
 *
 * The delimiters for the input element insertion tags are by default '{[' and
 * ']}', but can be changed by an optional ui parameter gap_filler_delimiters,
 * which must be a 2-element array of strings. For example:
 *
 *     {"gap_filler_delimiters": ["{{", "}}"]}
 *
 * Note that the double-brace delimiters in that example are the same as those
 * used by Twig, so using them instead of the default would prevent you from
 * ever adding Twig expansion (e.g. for randomisation) to the question.
 *
 * @module qtype_coderunner/ui_gapfiller
 * @copyright  Richard Lobb, 2019, The University of Canterbury
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("qtype_coderunner/ui_gapfiller",["jquery"],(function($){function GapfillerUi(textareaId,width,height,uiParams){var html;this.textArea=$(document.getElementById(textareaId)),this.readOnly=this.textArea.prop("readonly"),this.uiParams=uiParams,this.fail=!1,this.htmlDiv=null,this.source=uiParams.ui_source||"globalextra","globalextra"!==this.source&amp;&amp;"test0"!==this.source&amp;&amp;(alert("Invalid source for HTML in ui_gapfiller"),this.source="globalextra"),html="globalextra"==this.source?this.textArea.attr("data-globalextra"):this.textArea.attr("data-test0"),this.html=html.replace("&lt;","&amp;lt;"),this.reload()}return GapfillerUi.prototype.failed=function(){return this.fail},GapfillerUi.prototype.sync=function(){var serialisation=[],empty=!0;this.getFields().each((function(){var value;"cr_gapfiller_field"!==$(this).attr("name")?alert("Unexpected UI element found in answer box"):(value=$(this).val(),serialisation.push(value),""!==value&amp;&amp;(empty=!1))})),empty?this.textArea.val(""):this.textArea.val(JSON.stringify(serialisation))},GapfillerUi.prototype.getElement=function(){return this.htmlDiv},GapfillerUi.prototype.getFields=function(){return $(this.htmlDiv).find(".coderunner-ui-element")},GapfillerUi.prototype.setField=function(field,value){"checkbox"===field.attr("type")||"radio"===field.attr("type")?field.prop("checked",field.val()===value):field.val(value)},GapfillerUi.prototype.markedUpHtml=function(){function reEscape(s){for(var c,result="",i=0;i&lt;s.length;i++){c=s[i];for(var j=0;j&lt;"{[(*+\\".length;j++)c==="{[(*+\\"[j]&amp;&amp;(c="\\"+c);result+=c}return result}var i,sepLeft=reEscape("{["),sepRight=reEscape("]}"),splitter=new RegExp(sepLeft+" *((?:\\d+)|(?:\\d+, *\\d+)) *"+sepRight),bits=this.html.split(splitter),result="&lt;pre&gt;"+bits[0];for(i=1;i&lt;bits.length;i+=2)result+=this.markUp(bits[i]),i+1&lt;bits.length&amp;&amp;(result+=bits[i+1]);return result+="&lt;/pre&gt;"},GapfillerUi.prototype.markUp=function(tagContents){var numbers,rows,cols,result="";return 1==(numbers=tagContents.split(",")).length?result='&lt;input name="cr_gapfiller_field" class="coderunner-ui-element" size="'+parseInt(numbers[0])+'"&gt;':(rows=parseInt(numbers[0]),cols=parseInt(numbers[1]),result='&lt;textarea name="cr_gapfiller_field" class ="coderunner-ui-element" rows="'+rows+'" cols="'+cols+'" style="width:auto;"&gt;&lt;/textarea&gt;'),result},GapfillerUi.prototype.reload=function(){var value,values,i,fields,content=$(this.textArea).val();if(this.htmlDiv=$("&lt;div style='height:fit-content' class='qtype-coderunner-html-outer-div'&gt;"+this.markedUpHtml()+"&lt;/div&gt;"),content)try{for(values=JSON.parse(content),fields=this.getFields(),i=0;i&lt;fields.length;i++)value=i&lt;values.length?values[i]:"???",this.setField($(fields[i]),value)}catch(e){}},GapfillerUi.prototype.resize=function(){},GapfillerUi.prototype.hasFocus=function(){var focused=!1;return this.getFields().each((function(){this===document.activeElement&amp;&amp;(focused=!0)})),focused},GapfillerUi.prototype.destroy=function(){this.sync(),$(this.htmlDiv).remove(),this.htmlDiv=null},{Constructor:GapfillerUi}}));
/**
 * JavaScript for filling in the question text with the contents of one
 * of the question's support files. Intended primarily for program contest
 * problems, where the support file is a single domjudge or ICPC problem zip,
 * with the problem spec within it.
 *
 * @module qtype_coderunner/ajaxquestionloader
 * @copyright  Richard Lobb, 2019, The University of Canterbury
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("qtype_coderunner/ajaxquestionloader",["jquery"],(function($){return{loadQuestionText:function(qid,divId,questionFilename){var questionTextDiv=$("#"+divId),errorDiv='&lt;div style="colour:red"&gt;Failed to load problem spec&lt;div&gt;';1==questionTextDiv.length?$.getJSON(M.cfg.wwwroot+"/question/type/coderunner/problemspec.php",{questionid:qid,sesskey:M.cfg.sesskey,filename:questionFilename},(function(response){response.filecontentsb64?questionTextDiv.append('&lt;div&gt;&lt;a download href="data:application/pdf;base64,'+response.filecontentsb64+'"&gt;Problem spec&lt;/a&gt;&lt;/div&gt;'):questionTextDiv.append(errorDiv)})).fail((function(){questionTextDiv.append(errorDiv)})):questionTextDiv.append(errorDiv)}}}));
/**
 * Implementation of the ace_gapfiller_ui user interface plugin. For overall details
 * of the UI plugin architecture, see userinterfacewrapper.js.
 *
 * This plugin uses the usual ace editor but only makes some portions of the text editable.
 * The pre-formatted text is supplied by the question author in either the
 * "globalextra" field or the testcode field of the first test case, according
 * to the ui parameter ui_source (default: globalextra).
 * Editable "gaps" are inserted into the ace editor at specified points.
 * It is intended primarily for use with coding questions where the answerbox presents
 * the students with code that has smallish bits missing.
 *
 * The locations within the globalextra text at which the gaps are
 * to be inserted are denoted by "tags" of the form
 *
 *     {[ size ]}
 *
 * or
 *
 *     {[ size-maxSize ]}
 *
 * where size and maxSize are integer literals. These respectively inject a "gap" into
 * the editor of the specified size and maxSize. If maxSize is not specified then the
 * "gap" has no maximum size and can grow without bound.
 *
 * The serialisation of the answer box contents, i.e. the text that
 * copied back into the textarea for submissions
 * as the answer, is simply a list of all the field values (strings), in order.
 *
 * As a special case of the serialisation, if the value list is empty, the
 * serialisation itself is the empty string.
 *
 * The delimiters for the gap tags are by default '{[' and
 * ']}'.
 *
 * @module qtype_coderunner/ui_ace_gapfiller
 * @copyright  Richard Lobb, 2019, The University of Canterbury
 * @copyright  Matthew Toohey, 2021, The University of Canterbury
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("qtype_coderunner/ui_ace_gapfiller",["jquery"],(function($){var Range;const validChars=/[ !"#$%&amp;'()*+,`\-./0-9:;&lt;=&gt;?@A-Z\[\]\\^_a-z{}|~]/;function AceGapfillerUi(textareaId,w,h,uiParams){this.textArea=$(document.getElementById(textareaId));var wrapper=$(document.getElementById(textareaId+"_wrapper")),focused=this.textArea[0]===document.activeElement,lang=uiParams.lang,t=this;let code="";this.uiParams=uiParams,this.gaps=[],this.source=uiParams.ui_source||"globalextra",this.nextGapIndex=0,"globalextra"!==this.source&amp;&amp;"test0"!==this.source&amp;&amp;(alert("Invalid source for code in ui_ace_gapfiller"),this.source="globalextra"),code="globalextra"==this.source?this.textArea.attr("data-globalextra"):this.textArea.attr("data-test0");try{window.ace.require("ace/ext/language_tools"),Range=window.ace.require("ace/range").Range,this.modelist=window.ace.require("ace/ext/modelist"),this.enabled=!1,this.contents_changed=!1,this.capturingTab=!1,this.clickInProgress=!1,this.editNode=$("&lt;div&gt;&lt;/div&gt;"),this.editNode.css({resize:"none",height:h,width:"100%"}),this.editor=window.ace.edit(this.editNode.get(0)),this.textArea.prop("readonly")&amp;&amp;this.editor.setReadOnly(!0),this.editor.setOptions({displayIndentGuides:!1,dragEnabled:!1,enableBasicAutocompletion:!0,newLineMode:"unix"}),this.editor.$blockScrolling=1/0,uiParams.theme?this.editor.setTheme("ace/theme/"+uiParams.theme):this.editor.setTheme("ace/theme/textmate"),this.setLanguage(lang),this.setEventHandlers(this.textArea),this.captureTab(),this.editor.renderer.on("afterRender",(function(){var gutter=wrapper.find(".ace_gutter");gutter.hasClass("moodle-has-zindex")||(gutter.addClass("moodle-has-zindex"),focused&amp;&amp;(t.editor.focus(),t.editor.navigateFileEnd()),t.aceLabel=wrapper.find(".answerprompt"),t.aceLabel.attr("for","ace_"+textareaId),t.aceTextarea=wrapper.find(".ace_text-input"),t.aceTextarea.attr("id","ace_"+textareaId))})),this.createGaps(code),this.editor.commands.on("exec",(function(e){let cursor=t.editor.selection.getCursor(),commandName=e.command.name,selectionRange=t.editor.getSelectionRange(),gap=t.findCursorGap(cursor);if(commandName.startsWith("go")){if(null===gap||"gotoright"!==commandName||cursor.column!==gap.range.start.column+gap.textSize)return;t.editor.moveCursorTo(cursor.row,gap.range.end.column+1)}if(null===gap)"selectall"===commandName&amp;&amp;t.editor.selection.selectAll();else if("indent"===commandName){let nextGap=t.gaps[(gap.index+1)%t.gaps.length];t.editor.moveCursorTo(nextGap.range.start.row,nextGap.range.start.column+nextGap.textSize),t.editor.selection.clearSelection()}else if("selectall"===commandName)t.editor.selection.setSelectionRange(new Range(gap.range.start.row,gap.range.start.column,gap.range.start.row,gap.range.end.column),!1);else if(t.editor.selection.isEmpty()){if("insertstring"===commandName){let char=e.args;validChars.test(char)&amp;&amp;gap.insertChar(t.gaps,cursor,char)}else"backspace"===commandName?cursor.column&gt;gap.range.start.column&amp;&amp;gap.textSize&gt;0&amp;&amp;gap.deleteChar(t.gaps,{row:cursor.row,column:cursor.column-1}):"del"===commandName&amp;&amp;cursor.column&lt;gap.range.start.column+gap.textSize&amp;&amp;gap.textSize&gt;0&amp;&amp;gap.deleteChar(t.gaps,cursor);t.editor.selection.clearSelection()}else if(!t.editor.selection.isEmpty()&amp;&amp;gap.cursorInGap(selectionRange.start)&amp;&amp;gap.cursorInGap(selectionRange.end)&amp;&amp;("insertstring"!==commandName&amp;&amp;"backspace"!==commandName&amp;&amp;"del"!==commandName&amp;&amp;"paste"!==commandName&amp;&amp;"cut"!==commandName||(gap.deleteRange(t.gaps,selectionRange.start.column,selectionRange.end.column),t.editor.selection.clearSelection()),"insertstring"===commandName)){let char=e.args;validChars.test(char)&amp;&amp;gap.insertChar(t.gaps,selectionRange.start,char)}null!==gap&amp;&amp;"paste"===commandName&amp;&amp;gap.insertText(t.gaps,selectionRange.start.column,e.args.text),e.preventDefault(),e.stopPropagation()})),t.editor.selection.on("changeCursor",(function(){let cursor=t.editor.selection.getCursor(),gap=t.findCursorGap(cursor);null!==gap&amp;&amp;cursor.column&gt;gap.range.start.column+gap.textSize&amp;&amp;t.editor.moveCursorTo(gap.range.start.row,gap.range.start.column+gap.textSize)})),this.gapToSelect=null,this.editor.on("tripleclick",(function(e){let cursor=t.editor.selection.getCursor(),gap=t.findCursorGap(cursor);null!==gap&amp;&amp;(t.editor.selection.setSelectionRange(new Range(gap.range.start.row,gap.range.start.column,gap.range.start.row,gap.range.end.column),!1),t.gapToSelect=gap,e.preventDefault(),e.stopPropagation())})),this.editor.on("click",(function(e){t.gapToSelect&amp;&amp;(t.editor.moveCursorTo(t.gapToSelect.range.start.row,t.gapToSelect.range.start.column+t.gapToSelect.textSize),t.gapToSelect=null,e.preventDefault(),e.stopPropagation())})),this.fail=!1,this.reload()}catch(err){this.fail=!0}}function Gap(editor,row,column,minWidth){let maxWidth=arguments.length&gt;4&amp;&amp;void 0!==arguments[4]?arguments[4]:1/0;this.editor=editor,this.minWidth=minWidth,this.maxWidth=maxWidth,this.range=new Range(row,column,row,column+minWidth),this.textSize=0,this.editor.session.addMarker(this.range,"ace-gap-outline","text",!0),this.editor.session.addMarker(this.range,"ace-gap-background","text",!1)}return AceGapfillerUi.prototype.createGaps=function(code){function reEscape(s){for(var c,result="",i=0;i&lt;s.length;i++){c=s[i];for(var j=0;j&lt;"{[(*+\\".length;j++)c==="{[(*+\\"[j]&amp;&amp;(c="\\"+c);result+=c}return result}this.gaps=[];let lines=code.split(/\r?\n/),sepLeft=reEscape("{["),sepRight=reEscape("]}"),splitter=new RegExp(sepLeft+" *((?:\\d+)|(?:\\d+- *\\d+)) *"+sepRight),editorContent="";for(let i=0;i&lt;lines.length;i++){let bits=lines[i].split(splitter);editorContent+=bits[0];let columnPos=bits[0].length;for(let j=1;j&lt;bits.length;j+=2){let values=bits[j].split("-"),minWidth=parseInt(values[0]),maxWidth=values.length&gt;1?parseInt(values[1]):1/0,gap=new Gap(this.editor,i,columnPos,minWidth,maxWidth);gap.index=this.nextGapIndex,this.nextGapIndex+=1,this.gaps.push(gap),columnPos+=minWidth,editorContent+=" ".repeat(minWidth),j+1&lt;bits.length&amp;&amp;(editorContent+=bits[j+1],columnPos+=bits[j+1].length)}i&lt;lines.length-1&amp;&amp;(editorContent+="\n")}this.editor.session.setValue(editorContent)},AceGapfillerUi.prototype.findCursorGap=function(cursor){for(let i=0;i&lt;this.gaps.length;i++){let gap=this.gaps[i];if(gap.cursorInGap(cursor))return gap}return null},AceGapfillerUi.prototype.failed=function(){return this.fail},AceGapfillerUi.prototype.failMessage=function(){return"ace_ui_notready"},AceGapfillerUi.prototype.sync=function(){if(this.fail)return;let serialisation=[],empty=!0;for(let i=0;i&lt;this.gaps.length;i++){let value=this.gaps[i].getText();serialisation.push(value),""!==value&amp;&amp;(empty=!1)}empty?this.textArea.val(""):this.textArea.val(JSON.stringify(serialisation))},AceGapfillerUi.prototype.syncIntervalSecs=()=&gt;2,AceGapfillerUi.prototype.reload=function(){let content=this.textArea.val();if(content)try{let values=JSON.parse(content);for(let i=0;i&lt;this.gaps.length;i++){let value=i&lt;values.length?values[i]:"???";this.gaps[i].insertText(this.gaps,this.gaps[i].range.start.column,value)}}catch(e){}},AceGapfillerUi.prototype.setLanguage=function(language){var session=this.editor.getSession(),mode=this.findMode(language);mode&amp;&amp;session.setMode(mode.mode)},AceGapfillerUi.prototype.getElement=function(){return this.editNode},AceGapfillerUi.prototype.captureTab=function(){this.capturingTab=!0,this.editor.commands.bindKeys({Tab:"indent","Shift-Tab":"outdent"})},AceGapfillerUi.prototype.releaseTab=function(){this.capturingTab=!1,this.editor.commands.bindKeys({Tab:null,"Shift-Tab":null})},AceGapfillerUi.prototype.setEventHandlers=function(){var t=this;this.editor.getSession().on("change",(function(){t.contents_changed=!0})),this.editor.on("blur",(function(){t.contents_changed&amp;&amp;t.textArea.trigger("change")})),this.editor.on("mousedown",(function(){t.clickInProgress=!0})),this.editor.on("focus",(function(){t.clickInProgress?t.captureTab():t.releaseTab()})),this.editor.on("click",(function(){t.clickInProgress=!1})),this.editor.container.addEventListener("keydown",(function(e){void 0!==e.which&amp;&amp;0===e.which||(77===e.keyCode&amp;&amp;e.ctrlKey&amp;&amp;!e.altKey?(t.capturingTab?t.releaseTab():t.captureTab(),e.preventDefault()):27===e.keyCode?t.releaseTab():e.shiftKey||e.ctrlKey||e.altKey||9==e.keyCode||t.captureTab())}),!0)},AceGapfillerUi.prototype.destroy=function(){var focused;this.sync(),this.fail||(focused=this.editor.isFocused(),this.editor.destroy(),$(this.editNode).remove(),focused&amp;&amp;(this.textArea.focus(),this.textArea[0].selectionStart=this.textArea[0].value.length))},AceGapfillerUi.prototype.hasFocus=function(){return this.editor.isFocused()},AceGapfillerUi.prototype.findMode=function(language){var candidate,filename,result,candidates,nameMap={octave:"matlab",nodejs:"javascript","c#":"cs"};if("string"==typeof language){language.toLowerCase()in nameMap&amp;&amp;(language=nameMap[language.toLowerCase()]),candidates=[language,language.replace(/\d+$/,"")];for(var i=0;i&lt;candidates.length;i++)if(filename="input."+(candidate=candidates[i]),(result=this.modelist.modesByName[candidate]||this.modelist.modesByName[candidate.toLowerCase()]||this.modelist.getModeForPath(filename)||this.modelist.getModeForPath(filename.toLowerCase()))&amp;&amp;"text"!==result.name)return result}},AceGapfillerUi.prototype.resize=function(w,h){this.editNode.outerHeight(h),this.editNode.outerWidth(w),this.editor.resize()},Gap.prototype.cursorInGap=function(cursor){return cursor.row&gt;=this.range.start.row&amp;&amp;cursor.column&gt;=this.range.start.column&amp;&amp;cursor.row&lt;=this.range.end.row&amp;&amp;cursor.column&lt;=this.range.end.column},Gap.prototype.getWidth=function(){return this.range.end.column-this.range.start.column},Gap.prototype.changeWidth=function(gaps,delta){this.range.end.column+=delta;for(let i=0;i&lt;gaps.length;i++){let other=gaps[i];other.range.start.row===this.range.start.row&amp;&amp;other.range.start.column&gt;this.range.end.column&amp;&amp;(other.range.start.column+=delta,other.range.end.column+=delta)}this.editor.$onChangeBackMarker(),this.editor.$onChangeFrontMarker()},Gap.prototype.insertChar=function(gaps,pos,char){this.textSize===this.getWidth()&amp;&amp;this.getWidth()&lt;this.maxWidth?(this.changeWidth(gaps,1),this.textSize+=1,this.editor.session.insert(pos,char)):this.textSize&lt;this.maxWidth&amp;&amp;(this.editor.session.remove(new Range(pos.row,this.range.end.column-1,pos.row,this.range.end.column)),this.textSize+=1,this.editor.session.insert(pos,char))},Gap.prototype.deleteChar=function(gaps,pos){this.textSize-=1,this.editor.session.remove(new Range(pos.row,pos.column,pos.row,pos.column+1)),this.textSize&gt;=this.minWidth?this.changeWidth(gaps,-1):this.editor.session.insert({row:pos.row,column:this.range.end.column-1}," ")},Gap.prototype.deleteRange=function(gaps,start,end){for(let i=start;i&lt;end;i++)start&lt;this.range.start.column+this.textSize&amp;&amp;this.deleteChar(gaps,{row:this.range.start.row,column:start})},Gap.prototype.insertText=function(gaps,start,text){for(let i=0;i&lt;text.length;i++)start+i&lt;this.range.start.column+this.maxWidth&amp;&amp;this.insertChar(gaps,{row:this.range.start.row,column:start+i},text[i])},Gap.prototype.getText=function(){return this.editor.session.getTextRange(new Range(this.range.start.row,this.range.start.column,this.range.end.row,this.range.start.column+this.textSize))},{Constructor:AceGapfillerUi}}));
define("qtype_coderunner/ui_scratchpad",["exports","core/templates","qtype_coderunner/userinterfacewrapper","qtype_coderunner/outputdisplayarea"],(function(_exports,_templates,_userinterfacewrapper,_outputdisplayarea){var obj;
/**
   * Implementation of the scratchpad_ui user interface plugin. For overall details
   * of the UI plugin architecture, see userinterfacewrapper.js.
   *
   * This plugin replaces the usual textarea answer element with a UI is designed to
   * allow the execution of code in the CodeRunner question in a manner similar to an IDE.
   * It contains two editor boxes, one on top of another, allowing users to enter and
   * edit code in both. It contains two embedded Ace UIs.
   *  By default, only the top editor is visible and the bottom editor (Scratchpad Area) is hidden,
   * clicking the Scratchpad button shows it. The Scratchpad area contains a second editor,
   * a Run button and a Prefix with Answer checkbox. Additionally, there is a help button that
   * provides information about how to use the Scratchpad.
   *  It's possible to run code 'in-browser' by clicking the Run Button,
   * without making a submission via the Check Button:
   *          If Prefix with Answer is not checked, only the code in the Scratchpad is run --
   *      allowing for a rough working spot to quickly check the result of code.
   *          Otherwise, when Prefix with Answer is checked, the code in the Scratchpad is
   *      appended to the code in the first editor before being run.
   *  The Run Button has some limitations when using its default configuration:
   *     Does not support programs that use STDIN (by default);
   *     Only supports textual STDOUT (by default).
   * Note: These features can be supported, see the README section on wrappers...
   *  The serialisation of this UI is a JSON object with the fields
   * with fields:
   *      answer_code: [""] A list containing a string with answer code from the first editor;
   *      test_code: [""] A list containing a string with containing answer code from the second editor;
   *      show_hide: ["1"] when scratchpad is visible, otherwise [""];
   *      prefix_ans: ["1"] when Prefix with Answer is checked, otherwise [""].
   *
   * UI Parameters:
   *    - scratchpad_name: display name of the scratchpad, used to hide/un-hide the scratchpad.
   *    - button_name: run button text.
   *    - prefix_name: prefix with answer check-box label text.
   *    - help_text: help text to show.
   *    - run_lang: language used to run code when the run button is clicked,
   *      this should be the language your wrapper is written in (if applicable).
   *    - wrapper_src: location of wrapper code to be used by the run button, if applicable:
   *      setting to globalextra will use text in global extra field,
   *    - prototypeextra will use the prototype extra field.
   *    - output_display_mode: control how program output is displayed on runs, there are three modes:
   *          - text: display program output as text, html escaped;
   *          - json: display program output, when it is json,
   *          - html: display program output as raw html.
   *      NOTE: see qtype_coderunner/outputdisplayarea.js for more info...
   *    - disable_scratchpad: disable the scratchpad, effectively reverting to the Ace UI
   *      from student perspective.
   *    - invert_prefix: inverts meaning of prefix_ans serialisation -- '1' means un-ticked, vice versa.
   *      This can be used to swap the default state.
   *
   * @module qtype_coderunner/ui_scratchpad
   * @copyright  Richard Lobb, 2022, The University of Canterbury
   * @copyright  James Napier, 2022, The University of Canterbury
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.Constructor=void 0,_templates=(obj=_templates)&amp;&amp;obj.__esModule?obj:{default:obj};const invertSerial=current=&gt;"1"===current[0]?[""]:["1"],escapeRegExp=string=&gt;string.replace(/[.*+?^${}()|[\]\\]/g,"\\$&amp;"),overwriteValues=(defaults,prescribed)=&gt;{let overwritten={...defaults};if(prescribed)for(const[key,value]of Object.entries(defaults))overwritten[key]=prescribed[key]||value;return overwritten};_exports.Constructor=class{constructor(textAreaId,width,height,uiParams){const DEF_UI_PARAMS={scratchpad_name:"",button_name:"",prefix_name:"",help_text:"",params:{},run_lang:uiParams.lang,output_display_mode:"text",disable_scratchpad:!1,wrapper_src:null,open_delimiter:"{|",close_delimiter:"|}",escape:!1};this.textArea=document.getElementById(textAreaId),this.textAreaId=textAreaId,this.height=height,this.readOnly=this.textArea.readonly,this.fail=!1,this.outerDiv=null,this.outputDisplay=null,this.invertPreload=uiParams.invert_prefix,this.lang=uiParams.lang,this.numRows=this.textArea.rows,this.uiParams=overwriteValues(DEF_UI_PARAMS,uiParams),this.runWrapper=this.getRunWrapper();const preloadString=this.textArea.value;let preload;try{preload=this.readJson(preloadString)}catch(error){return this.fail=!0,void(this.failString="scratchpad_ui_invalidserialisation")}this.updateContext(preload),this.reload()}getRunWrapper(){const wrapperSrc=this.uiParams.wrapper_src;let runWrapper=null;return wrapperSrc&amp;&amp;("globalextra"===wrapperSrc||"prototypeextra"===wrapperSrc?runWrapper=this.textArea.dataset[wrapperSrc]:(this.fail=!0,this.failString="scratchpad_ui_badrunwrappersrc")),runWrapper}failed(){return this.fail}failMessage(){return this.failString}sync(){if(!this.context)return;const serialisation=this.getSerialisation();this.setSerialisation(serialisation)}getSerialisation(){const prefixAns=document.getElementById(this.context.prefix_ans.id),showHide=document.getElementById(this.context.show_hide.id);let serialisation={answer_code:[this.context.answer_code.text],test_code:[this.context.test_code.text],show_hide:[this.context.show_hide.show],prefix_ans:[invertSerial(this.context.prefix_ans.checked)]};return this.answerTextarea&amp;&amp;(serialisation.answer_code=[this.answerTextarea.value]),this.testTextarea&amp;&amp;(serialisation.test_code=[this.testTextarea.value]),showHide&amp;&amp;!(el=&gt;{if(!el.classList.contains("collapse")&amp;&amp;!el.classList.contains("collapsing"))throw Error("Element does not have collapse class");return!el.classList.contains("show")})(showHide)?serialisation.show_hide=["1"]:serialisation.show_hide=[""],null!=prefixAns&amp;&amp;prefixAns.checked||this.context.disable_scratchpad?serialisation.prefix_ans=["1"]:serialisation.prefix_ans=[""],this.invertPreload&amp;&amp;(serialisation.prefix_ans=invertSerial(serialisation.prefix_ans)),serialisation}setSerialisation(serialisation){serialisation.prefix_ans=invertSerial(serialisation.prefix_ans),Object.values(serialisation).some((val=&gt;1===val.length&amp;&amp;val[0].length&gt;0))?(serialisation.prefix_ans=invertSerial(serialisation.prefix_ans),this.textArea.value=JSON.stringify(serialisation)):this.textArea.value=""}getElement(){return this.outerDiv}handleRunButtonClick(){if(null===this.outputDisplay)return;this.sync();const preloadString=this.textArea.value,serial=this.readJson(preloadString),escape=code=&gt;this.uiParams.escape?JSON.stringify(code).slice(1,-1):code,code=function(answerCode,testCode,prefixAns,template){let open=arguments.length&gt;4&amp;&amp;void 0!==arguments[4]?arguments[4]:"\\(",close=arguments.length&gt;5&amp;&amp;void 0!==arguments[5]?arguments[5]:"\\)";template||(template="".concat(open," ANSWER_CODE ").concat(close,"\n")+"".concat(open," SCRATCHPAD_CODE ").concat(close)),prefixAns||(answerCode="");const escOpen=escapeRegExp(open),escClose=escapeRegExp(close),answerRegex=new RegExp("".concat(escOpen,"\\s*ANSWER_CODE\\s*").concat(escClose),"g"),scratchpadRegex=new RegExp("".concat(escOpen,"\\s*SCRATCHPAD_CODE\\s*").concat(escClose),"g");return(template=template.replaceAll(answerRegex,(()=&gt;answerCode))).replaceAll(scratchpadRegex,(()=&gt;testCode))}(escape(serial.answer_code[0]),escape(serial.test_code[0]),serial.prefix_ans[0],this.runWrapper,this.uiParams.open_delimiter,this.uiParams.close_delimiter);this.outputDisplay.runCode(code,"",!0)}updateContext(preload){this.context={id:this.textAreaId,disable_scratchpad:this.uiParams.disable_scratchpad,scratchpad_name:this.uiParams.scratchpad_name,button_name:this.uiParams.button_name,help_text:{text:this.uiParams.help_text},answer_code:{id:this.textAreaId+"_answer-code",name:"answer_code",text:preload.answer_code[0],lang:this.lang,rows:this.numRows},test_code:{id:this.textAreaId+"_test-code",name:"test_code",text:preload.test_code[0],lang:this.lang,rows:6},show_hide:{id:this.textAreaId+"_scratchpad",show:preload.show_hide[0]},prefix_ans:{id:this.textAreaId+"_prefix-ans",label:this.uiParams.prefix_name,checked:preload.prefix_ans[0]},output_display:{id:this.textAreaId+"_run-output"},jquery_escape:function(){return function(text,render){return CSS.escape(render(text))}}}}readJson(preloadString){let serial;if(""!==preloadString){try{serial=JSON.parse(preloadString)}catch{serial={answer_code:[preloadString]}}if(!serial.hasOwnProperty("answer_code"))throw TypeError("JSON has wrong signature, missing answer_code field.")}return serial=overwriteValues({answer_code:[""],test_code:[""],show_hide:[""],prefix_ans:["1"]},serial),this.invertPreload&amp;&amp;(serial.prefix_ans=invertSerial(serial.prefix_ans)),serial}async reload(){try{const{html:html}=await _templates.default.renderForPromise("qtype_coderunner/scratchpad_ui",this.context);this.drawUi(html),this.addAceUis(),this.outputDisplay=new _outputdisplayarea.OutputDisplayArea(this.context.output_display.id,this.uiParams.output_display_mode,this.uiParams.run_lang,this.uiParams.params),this.addEventListeners()}catch(e){this.fail=!0,this.failString="scratchpad_ui_templateloadfail"}}drawUi(html){const wrapperDiv=document.getElementById(this.textAreaId).nextSibling;wrapperDiv.innerHTML=html,this.outerDiv=wrapperDiv.firstChild,wrapperDiv.style.resize="none"}addAceUis(){this.answerTextarea=document.getElementById(this.context.answer_code.id),this.testTextarea=document.getElementById(this.context.test_code.id),this.answerCodeUi=(0,_userinterfacewrapper.newUiWrapper)("ace",this.context.answer_code.id),this.testTextarea&amp;&amp;(this.testCodeUi=(0,_userinterfacewrapper.newUiWrapper)("ace",this.context.test_code.id))}addEventListeners(){const runButton=document.getElementById(this.textAreaId+"_run-btn");runButton&amp;&amp;runButton.addEventListener("click",(()=&gt;this.handleRunButtonClick()))}resize(){}hasFocus(){var _this$answerCodeUi,_this$testCodeUi;let focused=!1;return null!==(_this$answerCodeUi=this.answerCodeUi)&amp;&amp;void 0!==_this$answerCodeUi&amp;&amp;_this$answerCodeUi.uiInstance.hasFocus()&amp;&amp;(focused=!0),null!==(_this$testCodeUi=this.testCodeUi)&amp;&amp;void 0!==_this$testCodeUi&amp;&amp;_this$testCodeUi.uiInstance.hasFocus()&amp;&amp;(focused=!0),focused}destroy(){var _this$answerCodeUi2,_this$testCodeUiCodeU,_this$outerDiv;this.sync(),null===(_this$answerCodeUi2=this.answerCodeUi)||void 0===_this$answerCodeUi2||_this$answerCodeUi2.uiInstance.destroy(),null===(_this$testCodeUiCodeU=this.testCodeUiCodeUi)||void 0===_this$testCodeUiCodeU||_this$testCodeUiCodeU.uiInstance.destroy(),null===(_this$outerDiv=this.outerDiv)||void 0===_this$outerDiv||_this$outerDiv.remove(),this.outerDiv=null}}}));
/******************************************************************************
 *
 * This module provides a wrapper for user-interface modules, handling hiding
 * of the textArea that is being replaced by the UI element,
 * resizing of the UI component, and support of such usability functions as
 * ctrl-alt-M to disable/re-enable the entire user interface, including the
 * wrapper.
 *
 * @module coderunner/userinterfacewrapper
 * @copyright  Richard Lobb, 2015, The University of Canterbury
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 *
 * The InterfaceWrapper class is constructed either by Moodle PHP calls of
 * the form
 *
 * $PAGE-&gt;requires-&gt;js_call_amd($modulename, $functionname, $params)
 *
 * (e.g. from within render.php) or by JavaScript require calls, e.g. from
 * authorform.js when the question author changes UI type.
 *
 * The InterfaceWrapper provides:
 *
 * 1. A constructor InterfaceWrapper(uiname, textareaId) which
 *    hides the given text area, replaces it with a wrapper div (resizable in
 *    height by the user but with width resizing managed by changes in window
 *    width), created an instance of nameInstance as defined in the file
 *    ui_name.js (see below).
 *    params is a record containing the decoded value of
 *
 * 2. A stop() method that destroys the embedded UI and hides the wrapper.
 *
 * 3. A restart() method that shows the wrapper again and re-creates the prior
 *    embedded UI component within it.
 *
 * 4. A loadUi(uiname, params) method that kills any currently running UI element
 *    (if there is one) and (re)loads the specified one. The params parameter
 *    is a record that allows additional parameters to be passed in, such as
 *    those from the question's uiParams field and, in the case of the
 *    Ace UI, the 'lang' (language) that the editor is editing. This data
 *    is supplied by the PHP via the data-params attribute of the answer's
 *    base textarea.
 *
 * 5. Regular checking for any resizing of the wrapper, which are passed on to
 *    the embedded UI element's resize() method.
 *
 * 6. Monitoring of alt-ctrl-M key presses which toggle the visibility of the
 *    wrapper plus UI element and the syncronised textArea by calls to stop()
 *    and restart
 *
 * =========================================================================
 *
 * The embedded user-interface module must be defined in a JavaScript file
 * of the form ui_name.js which must define a class nameInstance with
 * the following functionality:
 *
 * 1. A constructor SomeUiName(textareaId, width, height, params) that
 *    builds an HTML component of the given width and height. textareaId is the
 *    ID of the textArea from which the UI element should obtain its initial
 *    serialisation and to which it should write the serialisation when its save
 *    or destroy methods are called. params is a JavaScript object,
 *    decoded from the JSON uiParams defined by the question plus any
 *    additional data required, such as the 'lang' in the case of Ace.
 *
 * 2. A getElement() method that returns the HTML element that the
 *    InterfaceWrapper is to insert into the document tree.
 *
 * 3. A method failed() that should return true unless the constructor
 *    failed (e.g. because it was not able to de-serialise the text area's
 *    contents). The wrapper will call destroy() on the object if failed()
 *    returns true and abort the use of the UI element. The text area will
 *    have the uiloadfailed class added, which CSS will display in some
 *    error mode (e.g. a red border).
 *
 * 4. A method failMessage() that will be called only when failed() returns
 *    True. It should be a defined CodeRunner language string key.
 *
 * 5. A sync() method that copies the serialised represention of the UI plugin's
 *    data to the related TextArea. This is used when submit is clicked.
 *
 * 6. A destroy() method that should sync the contents to the text area then
 *    destroy any HTML elements or other created content. This method is called
 *    when CTRL-ALT-M is typed by the user to turn off all UI plugins
 *
 * 7. A resize(width, height) method that should resize the entire UI element
 *    to the given dimensions.
 *
 * 8. A hasFocus() method that returns true if the UI element has focus.
 *
 * 9. A syncIntervalSecs() method that returns the time interval between
 *    calls to the sync() method. 0 for no sync calls. The userinterfacewrapper
 *    provides all instances with a generic (base-class) version that returns
 *    the value of a UI parameter sync_interval_secs if given else uses the
 *    UI interface wrapper default (currently 5).
 *
 * The return value from the module define is a record with a single field
 * 'Constructor' that references the constructor (e.g. Graph, AceWrapper etc)
 *
 *****************************************************************************/
define("qtype_coderunner/userinterfacewrapper",["jquery"],(function($){function InterfaceWrapper(uiname,textareaId){let t=this;this.GUTTER=14,this.DEFAULT_SYNC_INTERVAL_SECS=5;this.taId=textareaId,this.loadFailId=textareaId+"_loadfailerr";const ta=document.getElementById(textareaId);this.textArea=$(ta);const params=this.textArea.attr("data-params");this.uiParams=params?JSON.parse(params):{},this.uiParams.lang=this.textArea.attr("data-lang"),this.readOnly=this.textArea.prop("readonly"),this.isLoading=!1,this.loadFailed=!1,this.retries=0;let h=parseInt(this.textArea.css("height")),content_lines=this.textArea.val().split("\n").length,rows=ta.rows;content_lines&gt;rows&amp;&amp;(rows=Math.min(content_lines,50)),h=Math.max(h,19*rows,50),this.wrapperNode=$("&lt;div id='"+this.taId+"_wrapper' class='ui_wrapper'&gt;&lt;/div&gt;"),this.textArea.after(this.wrapperNode),this.wrapperNode.hide(),this.wrapperNode.css({resize:"vertical",overflow:"hidden",minHeight:h,width:"100%",border:"1px solid darkgrey"}),this.textArea.data("current-ui-wrapper",this),this.uiInstance=null,this.loadUi(uiname,this.uiParams),$(document).mousemove((function(){t.checkForResize()})),$(window).resize((function(){t.checkForResize()})),this.textArea.closest("form").submit((function(){null!==t.uiInstance&amp;&amp;t.uiInstance.sync()})),$(document.body).on("keydown",(function(e){77===e.keyCode&amp;&amp;e.ctrlKey&amp;&amp;e.altKey&amp;&amp;(null!==t.uiInstance||t.loadFailed?t.stop():t.restart())}))}return InterfaceWrapper.prototype.loadUi=function(uiname,params){const t=this;function syncIntervalSecsBase(){return params.hasOwnProperty("sync_interval_secs")?parseInt(params.sync_interval_secs):t.DEFAULT_SYNC_INTERVAL_SECS}if(this.isLoading)return this.retries+=1,void(this.retries&gt;20?(alert("Failed to load "+uiname+" UI component. If this error persists, please report it to the forum on coderunner.org.nz"),this.retries=0,this.loading=0):setTimeout((function(){t.loadUi(uiname,params)}),200));this.retries=0,this.params=params,this.stop(),this.uiname=uiname,""===this.uiname||"none"===this.uiname||sessionStorage.getItem("disableUis")?this.uiInstance=null:(this.isLoading=!0,require(["qtype_coderunner/ui_"+this.uiname],(function(ui){const h=t.wrapperNode.innerHeight()-t.GUTTER,w=t.wrapperNode.innerWidth(),uiInstance=new ui.Constructor(t.taId,w,h,params);if(uiInstance.failed()){t.loadFailed=!0,t.wrapperNode.hide(),uiInstance.destroy(),t.uiInstance=null,t.textArea.addClass("uiloadfailed");const loadFailDiv='&lt;div id="'+t.loadFailId+'"class="uiloadfailed"&gt;&lt;/div&gt;';let jqLoadFailDiv=$(loadFailDiv);jqLoadFailDiv.insertBefore(t.textArea),langString=uiInstance.failMessage(),errorDiv=jqLoadFailDiv,require(["core/str"],(function(str){const s=str.get_string(langString,"qtype_coderunner"),fallback=str.get_string("ui_fallback","qtype_coderunner");$.when(s,fallback).done((function(s,fallback){errorDiv.html(s+"&lt;br&gt;"+fallback)}))}))}else{t.hLast=0,t.wLast=0,t.textArea.hide(),t.wrapperNode.show(),t.wrapperNode.append(uiInstance.getElement()),t.uiInstance=uiInstance,t.loadFailed=!1,t.checkForResize();let uiInstancePrototype=Object.getPrototypeOf(uiInstance);uiInstancePrototype.syncIntervalSecs=uiInstancePrototype.syncIntervalSecs||syncIntervalSecsBase,t.startSyncTimer(uiInstance)}var langString,errorDiv;t.isLoading=!1})))},InterfaceWrapper.prototype.startSyncTimer=function(uiInstance){const timeout=uiInstance.syncIntervalSecs();this.uiInstance.timer=timeout?setInterval((function(){uiInstance.sync()}),1e3*timeout):null},InterfaceWrapper.prototype.stopSyncTimer=function(uiInstance){uiInstance.timer&amp;&amp;clearTimeout(uiInstance.timer)},InterfaceWrapper.prototype.stop=function(){null!==this.uiInstance&amp;&amp;(this.stopSyncTimer(this.uiInstance),this.textArea.show(),this.uiInstance.hasFocus()&amp;&amp;(this.textArea.focus(),this.textArea[0].selectionStart=this.textArea[0].value.length),this.uiInstance.destroy(),this.uiInstance=null,this.wrapperNode.hide()),this.loadFailed=!1,this.textArea.removeClass("uiloadfailed"),$(document.getElementById(this.loadFailId)).remove()},InterfaceWrapper.prototype.restart=function(){null===this.uiInstance&amp;&amp;this.loadUi(this.uiname,this.params)},InterfaceWrapper.prototype.checkForResize=function(){if(this.uiInstance){const h=this.wrapperNode.innerHeight(),w=this.wrapperNode.innerWidth();if(h!=this.hLast||w!=this.wLast){const xLeft=this.wrapperNode.offset().left,maxWidth=$(window).innerWidth()-xLeft-25,hAdjusted=h-this.GUTTER,wAdjusted=Math.min(maxWidth,w);this.uiInstance.resize(wAdjusted,hAdjusted),this.hLast=this.wrapperNode.innerHeight(),this.wLast=this.wrapperNode.innerWidth()}}},{newUiWrapper:function(uiname,textareaId){return uiname?new InterfaceWrapper(uiname,textareaId):null},InterfaceWrapper:InterfaceWrapper}}));
/**
 * Implementation of the html_ui user interface plugin. For overall details
 * of the UI plugin architecture, see userinterfacewrapper.js.
 *
 * This plugin replaces the usual textarea answer element with a div
 * containing the author-supplied HTML. The serialisation of that HTML,
 * which is what is essentially copied back into the textarea for submissions
 * as the answer, is a JSON object. The fields of that object are the names
 * of all author-supplied HTML elements with a class 'coderunner-ui-element';
 * all such objects are expected to have a 'name' attribute as well. The
 * associated field values are lists. Each list contains all the values, in
 * document order, of the results of calling the jquery val() method in turn
 * on each of the UI elements with that name.
 * This means that at least input, select and textarea
 * elements are supported. The author is responsible for checking the
 * compatibility of other elements with jquery's val() method.
 *
 * The HTML to use in the answer area must be provided as the contents of
 * either the globalextra field or the prototypeextra field in the question
 * authoring form. The choice of which is set by the html_src UI parameter, which
 * must be either 'globalextra' or 'prototypeextra'.
 *
 * If any fields of the answer html are to be preloaded, these should be specified
 * in the answer preload with json of the form '{"&lt;fieldName&gt;": "&lt;fieldValueList&gt;",...}'
 * where fieldValueList is a list of all the values to be assigned to the fields
 * with the given name, in document order.
 *
 * To accommodate the possibility of dynamic HTML, any leftover preload values,
 * that is, values that cannot be positioned within the HTML either because
 * there is no field of the required name or because, in the case of a list,
 * there are insufficient elements, are assigned to the data['leftovers']
 * attribute of the outer html div, as a sub-object of the original object.
 * This outer div can be located as the 'closest' (in a jQuery sense)
 * div.qtype-coderunner-html-outer-div. The author-supplied HTML must include
 * JavaScript to make use of the 'leftovers'.
 *
 * As a special case of the serialisation, if all values in the serialisation
 * are either empty strings or a list of empty strings, the serialisation is
 * itself the empty string.
 *
 * @module coderunner/ui_html
 * @copyright  Richard Lobb, 2018, The University of Canterbury
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("qtype_coderunner/ui_html",["jquery"],(function($){function HtmlUi(textareaId,width,height,uiParams){this.textArea=$(document.getElementById(textareaId)),this.textareaId=textareaId;var srcField=uiParams.html_src||"globalextra";this.html=this.textArea.attr("data-"+srcField),this.html=this.html.replace(/___textareaId___/gm,textareaId),this.readOnly=this.textArea.prop("readonly"),this.uiParams=uiParams,this.fail=!1,this.htmlDiv=null,this.reload()}return HtmlUi.prototype.failed=function(){return this.fail},HtmlUi.prototype.failMessage=function(){return"htmluiloadfail"},HtmlUi.prototype.sync=function(){var name,serialisation={},empty=!0;this.getFields().each((function(){var value,type;type=$(this).attr("type"),name=$(this).attr("name"),value="checkbox"!==type&amp;&amp;"radio"!==type||$(this).is(":checked")?$(this).val():"",serialisation.hasOwnProperty(name)?serialisation[name].push(value):serialisation[name]=[value],""!==value&amp;&amp;(empty=!1)})),empty?this.textArea.val(""):this.textArea.val(JSON.stringify(serialisation))},HtmlUi.prototype.getElement=function(){return this.htmlDiv},HtmlUi.prototype.getFields=function(){return $(this.htmlDiv).find(".coderunner-ui-element")},HtmlUi.prototype.setField=function(field,value){"checkbox"===field.attr("type")||"radio"===field.attr("type")?field.prop("checked",field.val()===value):field.val(value)},HtmlUi.prototype.reload=function(){var valuesToLoad,values,i,fields,leftOvers,content=$(this.textArea).val(),outerDiv="&lt;div style='height:fit-content' class='qtype-coderunner-html-outer-div' id='"+("qtype-coderunner-outer-div-"+this.textareaId)+"'&gt;";if(this.htmlDiv=$(outerDiv+this.html+"&lt;/div&gt;"),this.htmlDiv.data("uiparams",this.uiParams),this.htmlDiv.data("templateparams",this.uiParams),content)try{for(var name in valuesToLoad=JSON.parse(content),leftOvers={},valuesToLoad){for(values=valuesToLoad[name],fields=this.getFields().filter("[name='"+name+"']"),leftOvers[name]=[],i=0;i&lt;values.length;i++)i&lt;fields.length?this.setField($(fields[i]),values[i]):leftOvers[name].push(values[i]);0===leftOvers[name].length&amp;&amp;delete leftOvers[name]}$.isEmptyObject(leftOvers)||this.htmlDiv.attr("data-leftovers",JSON.stringify(leftOvers))}catch(e){this.fail=!0}},HtmlUi.prototype.resize=function(){},HtmlUi.prototype.hasFocus=function(){var focused=!1;return this.getFields().each((function(){this===document.activeElement&amp;&amp;(focused=!0)})),focused},HtmlUi.prototype.destroy=function(){this.sync(),$(this.htmlDiv).remove(),this.htmlDiv=null},{Constructor:HtmlUi}}));
/**
 * JavaScript for handling textareas and form actions in CodeRunner question
 * editing forms and student question answering forms.
 *
 * @module qtype_coderunner/textareas
 * @copyright  Richard Lobb, 2015, The University of Canterbury
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("qtype_coderunner/textareas",["jquery"],(function($){function initTextArea(){$(this).data("clickInProgress",!1),$(this).data("capturingTab",!0),$(this).on("mousedown",(function(){$(this).data("clickInProgress",!0)})),$(this).on("focusin",(function(){$(this).data("capturingTab",$(this).data("clickInProgress"))})),$(this).on("click",(function(){$(this).data("clickInProgress",!1)})),$(this).on("keydown",(function(e){if(!(window.hasOwnProperty("behattesting")&amp;&amp;window.behattesting||void 0!==e.which&amp;&amp;0===e.which))if(9==e.keyCode&amp;&amp;$(this).data("capturingTab"))(e.shiftKey||insertString(this,"    "))&amp;&amp;e.preventDefault();else if(13===e.keyCode&amp;&amp;void 0!==this.selectionStart){for(var before=this.value.substring(0,this.selectionStart),eol=before.lastIndexOf("\n"),line=before.substring(eol+1),indent="",i=0;i&lt;line.length&amp;&amp;" "===line.charAt(i);i++)indent+=" ";insertString(this,"\n"+indent)&amp;&amp;e.preventDefault(),$(this).data("capturingTab",!0)}else 77===e.keyCode&amp;&amp;e.ctrlKey&amp;&amp;!e.altKey?($(this).data("capturingTab",!$(this).data("capturingTab")),e.preventDefault()):27===e.keyCode?$(this).data("capturingTab",!1):e.ctrlKey||e.altKey||$(this).data("capturingTab",!0)}))}function insertString(ta,sToInsert){if(void 0!==ta.selectionStart){var before=ta.value.substring(0,ta.selectionStart),selSave=ta.selectionEnd,after=ta.value.substring(ta.selectionEnd,ta.value.length),tmp=ta.scrollTop;ta.value=before+sToInsert+after;var pos=selSave+sToInsert.length;return ta.selectionStart=pos,ta.selectionEnd=pos,ta.scrollTop=tmp,!0}if(document.selection&amp;&amp;document.selection.createRange){var r=document.selection.createRange(),dr=r.duplicate();return dr.moveToElementText(ta),dr.setEndPoint("EndToEnd",r),r.text=sToInsert,!0}return!1}return{setupAllTAs:function(){$("textarea.edit_code").each(initTextArea)},initQuestionTA:function(taId){$(document.getElementById(taId)).each(initTextArea)},setupShowHideAnswer:function(linkId,divId){let link=$(document.getElementById(linkId)),div=$(document.getElementById(divId)),hdr=link.children()[0],hdrText=hdr.innerText;link.click((()=&gt;{div.is(":visible")?(div.hide(),hdr.innerText=hdrText.replace("▾","▸")):(div.show(),div.trigger("mousemove"),hdr.innerText=hdrText.replace("▸","▾"))}))}}}));
/*
 * JavaScript to allow dragging options to slots (using mouse down or touch) or tab through slots using keyboard.
 *
 * @module     qtype_ddimageortext/form
 * @copyright  2018 The Open University
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("qtype_ddimageortext/form",["jquery","core/dragdrop"],(function($,dragDrop){var dragDropToImageForm={maxBgImageSize:null,maxDragImageSize:null,fp:null,init:function(){dragDropToImageForm.fp=dragDropToImageForm.filePickers(),dragDropToImageForm.updateVisibilityOfFilePickers(),dragDropToImageForm.setOptionsForDragItemSelectors(),dragDropToImageForm.setupEventHandlers(),dragDropToImageForm.waitForFilePickerToInitialise()},setupPreviewArea:function(){$("#id_previewareaheader").append('&lt;div class="ddarea que ddimageortext"&gt;  &lt;div id="id_droparea" class="droparea"&gt;    &lt;img class="dropbackground" /&gt;    &lt;div class="dropzones"&gt;&lt;/div&gt;  &lt;/div&gt;  &lt;div class="dragitems"&gt;&lt;/div&gt;&lt;/div&gt;')},waitForFilePickerToInitialise:function(){null!==dragDropToImageForm.fp.file("bgimage").href?(M.util.js_pending("dragDropToImageForm"),$('form.mform[data-qtype="ddimageortext"]').on("change",".filepickerhidden",(function(){M.util.js_pending("dragDropToImageForm"),dragDropToImageForm.loadPreviewImage()})),$("#id_droparea").length||dragDropToImageForm.setupPreviewArea(),dragDropToImageForm.loadPreviewImage()):setTimeout(dragDropToImageForm.waitForFilePickerToInitialise,1e3)},loadPreviewImage:function(){$("fieldset#id_previewareaheader .dropbackground").one("load",dragDropToImageForm.afterPreviewImageLoaded).attr("src",dragDropToImageForm.fp.file("bgimage").href)},afterPreviewImageLoaded:function(){dragDropToImageForm.createDropZones(),M.util.js_complete("dragDropToImageForm")},createDropZones:function(){var dropZoneHolder=$(".dropzones");if(dropZoneHolder.empty(),null!==dragDropToImageForm.fp.file("bgimage").href){for(var numDrops=dragDropToImageForm.form.getFormValue("nodropzone",[]),dropNo=0;dropNo&lt;numDrops;dropNo++){var dragNo=dragDropToImageForm.form.getFormValue("drops",[dropNo,"choice"]);if("0"!==dragNo){dragNo-=1;var group=dragDropToImageForm.form.getFormValue("drags",[dragNo,"draggroup"]),label=dragDropToImageForm.form.getFormValue("draglabel",[dragNo]);if("image"===dragDropToImageForm.form.getFormValue("drags",[dragNo,"dragitemtype"])){var imgUrl=dragDropToImageForm.fp.file("dragitem["+dragNo+"]").href;if(null===imgUrl)continue;dropZoneHolder.append('&lt;img class="droppreview group'+group+" drop"+dropNo+'" src="'+imgUrl+'" alt="'+label+'" data-drop-no="'+dropNo+'"&gt;')}else""!==label&amp;&amp;dropZoneHolder.append('&lt;div class="droppreview group'+group+" drop"+dropNo+'"  data-drop-no="'+dropNo+'"&gt;'+label+"&lt;/div&gt;")}}dragDropToImageForm.waitForAllDropImagesToBeLoaded()}},waitForAllDropImagesToBeLoaded:function(){$(".dropzones img").not((function(i,imgNode){return dragDropToImageForm.imageIsLoaded(imgNode)})).length&gt;0?setTimeout((function(){dragDropToImageForm.waitForAllDropImagesToBeLoaded()}),100):dragDropToImageForm.updateDropZones()},imageIsLoaded:function(imgElement){return imgElement.complete&amp;&amp;0!==imgElement.naturalHeight},updateDropZones:function(){if(null!==dragDropToImageForm.fp.file("bgimage").href){for(var dropBackgroundPosition=$("fieldset#id_previewareaheader .dropbackground").offset(),numDrops=dragDropToImageForm.form.getFormValue("nodropzone",[]),dropNo=0;dropNo&lt;numDrops;dropNo++){var drop=$(".dropzones .drop"+dropNo);if(0!==drop.length){var dragNo=dragDropToImageForm.form.getFormValue("drops",[dropNo,"choice"])-1;drop.offset({left:dropBackgroundPosition.left+parseInt(dragDropToImageForm.form.getFormValue("drops",[dropNo,"xleft"])),top:dropBackgroundPosition.top+parseInt(dragDropToImageForm.form.getFormValue("drops",[dropNo,"ytop"]))});var label=dragDropToImageForm.form.getFormValue("draglabel",[dragNo]);drop.is("img")?drop.attr("alt",label):drop.html(label)}}$(".dropzones .droppreview").css("padding","0");for(var numGroups=$(".draggroup select").first().find("option").length,group=1;group&lt;=numGroups;group++)dragDropToImageForm.resizeAllDragsAndDropsInGroup(group)}},resizeAllDragsAndDropsInGroup:function(group){var drops=$(".dropzones .droppreview.group"+group),maxWidth=0,maxHeight=0;drops.each((function(i,drop){maxWidth=Math.max(maxWidth,Math.ceil(drop.offsetWidth)),maxHeight=Math.max(maxHeight,Math.ceil(drop.offsetHeight))})),maxWidth+=10,maxHeight+=10,drops.each((function(i,drop){var left=Math.round((maxWidth-drop.offsetWidth)/2),top=Math.floor((maxHeight-drop.offsetHeight)/2);$(drop).css({"padding-left":left+"px","padding-right":maxWidth-drop.offsetWidth-left+"px","padding-top":top+"px","padding-bottom":maxHeight-drop.offsetHeight-top+"px"})}))},setupEventHandlers:function(){$("fieldset#id_draggableitemheader").on("change input","input, select",(function(e){var input=$(e.target).closest("select, input");input.hasClass("dragitemtype")&amp;&amp;dragDropToImageForm.updateVisibilityOfFilePickers(),dragDropToImageForm.setOptionsForDragItemSelectors(),input.is(".dragitemtype, .draggroup")?dragDropToImageForm.createDropZones():input.is(".draglabel")&amp;&amp;dragDropToImageForm.updateDropZones()})),$("fieldset#id_dropzoneheader").on("change input","input, select",(function(e){$(e.target).closest("select, input").is("select")?dragDropToImageForm.createDropZones():dragDropToImageForm.updateDropZones()})),$("fieldset#id_previewareaheader").on("mousedown touchstart",".droppreview",(function(e){dragDropToImageForm.dragStart(e)})),$(window).on("resize",(function(){dragDropToImageForm.updateDropZones()}))},updateVisibilityOfFilePickers:function(){for(var numDrags=dragDropToImageForm.form.getFormValue("noitems",[]),dragNo=0;dragNo&lt;numDrags;dragNo++){var picker=$("input#id_dragitem_"+dragNo).closest(".fitem_ffilepicker");"image"===dragDropToImageForm.form.getFormValue("drags",[dragNo,"dragitemtype"])?picker.show():picker.hide()}},setOptionsForDragItemSelectors:function(){for(var dragItemOptions={0:""},numDrags=dragDropToImageForm.form.getFormValue("noitems",[]),numDrops=dragDropToImageForm.form.getFormValue("nodropzone",[]),dragNo=0;dragNo&lt;numDrags;dragNo++){var label=dragDropToImageForm.form.getFormValue("draglabel",[dragNo]),file=dragDropToImageForm.fp.file(dragDropToImageForm.form.toNameWithIndex("dragitem",[dragNo]));"image"===dragDropToImageForm.form.getFormValue("drags",[dragNo,"dragitemtype"])&amp;&amp;null!==file.name?dragItemOptions[dragNo+1]=dragNo+1+". "+label+" ("+file.name+")":""!==label&amp;&amp;(dragItemOptions[dragNo+1]=dragNo+1+". "+label)}for(var dropNo=0;dropNo&lt;numDrops;dropNo++){var selector=$("#id_drops_"+dropNo+"_choice"),selectedvalue=selector.val();for(var value in selector.find("option").remove(),dragItemOptions)if(dragItemOptions.hasOwnProperty(value)){selector.append('&lt;option value="'+value+'"&gt;'+dragItemOptions[value]+"&lt;/option&gt;");var optionnode=selector.find('option[value="'+value+'"]');parseInt(value)===parseInt(selectedvalue)?optionnode.attr("selected",!0):dragDropToImageForm.isItemUsed(parseInt(value))&amp;&amp;optionnode.attr("disabled",!0)}}},isItemUsed:function(value){return 0!==value&amp;&amp;(!dragDropToImageForm.form.getFormValue("drags",[value-1,"infinite"])&amp;&amp;0!==$("fieldset#id_dropzoneheader select").filter((function(i,selectNode){return parseInt($(selectNode).val())===value})).length)},dragStart:function(e){var drop=$(e.target).closest(".droppreview");dragDrop.prepare(e).start&amp;&amp;dragDrop.start(e,drop,(function(x,y,drop){dragDropToImageForm.dragMove(drop)}),(function(){dragDropToImageForm.dragEnd()}))},dragMove:function(drop){var backgroundImage=$("fieldset#id_previewareaheader .dropbackground"),backgroundPosition=backgroundImage.offset(),dropNo=drop.data("dropNo"),dropPosition=drop.offset(),left=Math.round(dropPosition.left-backgroundPosition.left),top=Math.round(dropPosition.top-backgroundPosition.top);left=Math.round(Math.max(0,Math.min(left,backgroundImage.outerWidth()-drop.outerWidth()))),top=Math.round(Math.max(0,Math.min(top,backgroundImage.outerHeight()-drop.outerHeight()))),dragDropToImageForm.form.setFormValue("drops",[dropNo,"xleft"],left),dragDropToImageForm.form.setFormValue("drops",[dropNo,"ytop"],top)},dragEnd:function(){dragDropToImageForm.updateDropZones()},form:{toNameWithIndex:function(name,indexes){for(var indexString=name,i=0;i&lt;indexes.length;i++)indexString=indexString+"["+indexes[i]+"]";return indexString},getEl:function(name,indexes){return $('form.mform[data-qtype="ddimageortext"]')[0].elements[this.toNameWithIndex(name,indexes)]},getFormValue:function(name,indexes){var el=this.getEl(name,indexes);return el.type||(el=el[el.length-1]),"checkbox"===el.type?el.checked:el.value},setFormValue:function(name,indexes,value){var el=this.getEl(name,indexes);"checkbox"===el.type?el.checked=value:el.value=value}},filePickers:function(){var draftItemIdsToName,nameToParentNode;void 0===draftItemIdsToName&amp;&amp;(draftItemIdsToName={},nameToParentNode={},$('form.mform[data-qtype="ddimageortext"] input.filepickerhidden').each((function(index,filepicker){draftItemIdsToName[filepicker.value]=filepicker.name,nameToParentNode[filepicker.name]=filepicker.parentNode})));return{file:function(name){var fileAnchor=$(nameToParentNode[name]).find("div.filepicker-filelist a");return fileAnchor.length?{href:fileAnchor.get(0).href,name:fileAnchor.get(0).innerHTML}:{href:null,name:null}},name:function(draftitemid){return draftItemIdsToName[draftitemid]}}}};return{init:dragDropToImageForm.init}}));
/*
 * JavaScript to allow dragging options to slots (using mouse down or touch) or tab through slots using keyboard.
 *
 * @module     qtype_ddimageortext/question
 * @copyright  2018 The Open University
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("qtype_ddimageortext/question",["jquery","core/dragdrop","core/key_codes","core_form/changechecker"],(function($,dragDrop,keys,FormChangeChecker){function DragDropOntoImageQuestion(containerId,readOnly,places){this.containerId=containerId,this.questionAnswer={},M.util.js_pending("qtype_ddimageortext-init-"+this.containerId),this.places=places,this.allImagesLoaded=!1,this.imageLoadingTimeoutId=null,this.isPrinting=!1,readOnly&amp;&amp;this.getRoot().addClass("qtype_ddimageortext-readonly");var thisQ=this;this.getNotYetLoadedImages().one("load",(function(){thisQ.waitForAllImagesToBeLoaded()})),this.waitForAllImagesToBeLoaded()}DragDropOntoImageQuestion.prototype.waitForAllImagesToBeLoaded=function(){var thisQ=this;this.allImagesLoaded||(null!==this.imageLoadingTimeoutId&amp;&amp;clearTimeout(this.imageLoadingTimeoutId),this.getNotYetLoadedImages().length&gt;0?this.imageLoadingTimeoutId=setTimeout((function(){thisQ.waitForAllImagesToBeLoaded()}),100):(this.allImagesLoaded=!0,thisQ.setupQuestion()))},DragDropOntoImageQuestion.prototype.getNotYetLoadedImages=function(){var thisQ=this;return this.getRoot().find(".ddarea img").not((function(i,imgNode){return thisQ.imageIsLoaded(imgNode)}))},DragDropOntoImageQuestion.prototype.imageIsLoaded=function(imgElement){return imgElement.complete&amp;&amp;0!==imgElement.naturalHeight},DragDropOntoImageQuestion.prototype.setupQuestion=function(){this.resizeAllDragsAndDrops(),this.cloneDrags(),this.positionDragsAndDrops(),M.util.js_complete("qtype_ddimageortext-init-"+this.containerId)},DragDropOntoImageQuestion.prototype.resizeAllDragsAndDrops=function(){var thisQ=this;this.getRoot().find(".draghomes &gt; div").each((function(i,node){thisQ.resizeAllDragsAndDropsInGroup(thisQ.getClassnameNumericSuffix($(node),"dragitemgroup"))}))},DragDropOntoImageQuestion.prototype.resizeAllDragsAndDropsInGroup=function(group){var root=this.getRoot(),dragHomes=root.find(".dragitemgroup"+group+" .draghome"),maxWidth=0,maxHeight=0;for(var i in dragHomes.each((function(i,drag){maxWidth=Math.max(maxWidth,Math.ceil(drag.offsetWidth)),maxHeight=Math.max(maxHeight,Math.ceil(drag.offsetHeight))})),maxWidth+=10,maxHeight+=10,dragHomes.each((function(i,drag){var left=Math.round((maxWidth-drag.offsetWidth)/2),top=Math.floor((maxHeight-drag.offsetHeight)/2);$(drag).css({"padding-left":left+"px","padding-right":maxWidth-drag.offsetWidth-left+"px","padding-top":top+"px","padding-bottom":maxHeight-drag.offsetHeight-top+"px"})})),this.places)if(this.places.hasOwnProperty(i)){var place=this.places[i],label=place.text;parseInt(place.group)===group&amp;&amp;(""===label&amp;&amp;(label=M.util.get_string("blank","qtype_ddimageortext")),root.find(".dropzones").append('&lt;div class="dropzone active group'+place.group+" place"+i+'" tabindex="0"&gt;&lt;span class="accesshide"&gt;'+label+"&lt;/span&gt;&amp;nbsp;&lt;/div&gt;"),root.find(".dropzone.place"+i).width(maxWidth-2).height(maxHeight-2))}},DragDropOntoImageQuestion.prototype.cloneDrags=function(){var thisQ=this;thisQ.getRoot().find(".draghome").each((function(index,dragHome){var drag=$(dragHome),placeHolder=drag.clone();placeHolder.removeClass(),placeHolder.addClass("draghome choice"+thisQ.getChoice(drag)+" group"+thisQ.getGroup(drag)+" dragplaceholder"),drag.before(placeHolder)}))},DragDropOntoImageQuestion.prototype.cloneDragsForOneChoice=function(dragHome){if(dragHome.hasClass("infinite"))for(var noOfDrags=this.noOfDropsInGroup(this.getGroup(dragHome)),i=0;i&lt;noOfDrags;i++)this.cloneDrag(dragHome);else this.cloneDrag(dragHome)},DragDropOntoImageQuestion.prototype.cloneDrag=function(dragHome){var drag=dragHome.clone();drag.removeClass("draghome").addClass("drag unplaced moodle-has-zindex").offset(dragHome.offset()),this.getRoot().find(".dragitems").append(drag)},DragDropOntoImageQuestion.prototype.positionDragsAndDrops=function(){var thisQ=this,root=this.getRoot(),bgRatio=this.bgRatio();root.find(".ddarea .dropzone").each((function(i,dropNode){var drop=$(dropNode),place=thisQ.places[thisQ.getPlace(drop)];drop.css("left",parseInt(place.xy[0])*bgRatio).css("top",parseInt(place.xy[1])*bgRatio),drop.data("originX",parseInt(place.xy[0])).data("originY",parseInt(place.xy[1])),thisQ.handleElementScale(drop,"left top")})),root.find(".draghome").not(".dragplaceholder").each((function(i,dragNode){var drag=$(dragNode),currentPlace=thisQ.getClassnameNumericSuffix(drag,"inplace");drag.addClass("unplaced").removeClass("placed"),drag.removeAttr("tabindex"),null!==currentPlace&amp;&amp;drag.removeClass("inplace"+currentPlace)})),root.find("input.placeinput").each((function(i,inputNode){var input=$(inputNode),choice=input.val();if(!(0===choice.length||choice.length&gt;0&amp;&amp;"0"===choice)){var place=thisQ.getPlace(input),unplacedDrag=thisQ.getUnplacedChoice(thisQ.getGroup(input),choice),hiddenDrag=thisQ.getDragClone(unplacedDrag);if(hiddenDrag.length)if(unplacedDrag.hasClass("infinite")){var noOfDrags=thisQ.noOfDropsInGroup(thisQ.getGroup(unplacedDrag));if(thisQ.getInfiniteDragClones(unplacedDrag,!1).length&lt;noOfDrags){var cloneDrag=unplacedDrag.clone();cloneDrag.removeClass("beingdragged"),cloneDrag.removeAttr("tabindex"),hiddenDrag.after(cloneDrag),questionManager.addEventHandlersToDrag(cloneDrag)}else hiddenDrag.addClass("active")}else hiddenDrag.addClass("active");var drop=root.find(".dropzone.place"+place);thisQ.sendDragToDrop(unplacedDrag,drop)}})),thisQ.questionAnswer=thisQ.getQuestionAnsweredValues()},DragDropOntoImageQuestion.prototype.getQuestionAnsweredValues=function(){let result={};return this.getRoot().find("input.placeinput").each(((i,inputNode)=&gt;{result[inputNode.id]=inputNode.value})),result},DragDropOntoImageQuestion.prototype.isQuestionInteracted=function(){const oldAnswer=this.questionAnswer,newAnswer=this.getQuestionAnsweredValues();let isInteracted=!1;return JSON.stringify(newAnswer)!==JSON.stringify(oldAnswer)?(isInteracted=!0,isInteracted):(Object.keys(newAnswer).forEach((key=&gt;{newAnswer[key]!==oldAnswer[key]&amp;&amp;(isInteracted=!0)})),isInteracted)},DragDropOntoImageQuestion.prototype.handleDragStart=function(e){var thisQ=this,drag=$(e.target).closest(".draghome"),newIndex=this.calculateZIndex()+2;if(dragDrop.prepare(e).start&amp;&amp;!drag.hasClass("beingdragged")){drag.addClass("beingdragged").css("transform","").css("z-index",newIndex);var currentPlace=this.getClassnameNumericSuffix(drag,"inplace");if(null!==currentPlace){this.setInputValue(currentPlace,0),drag.removeClass("inplace"+currentPlace);var hiddenDrop=thisQ.getDrop(drag,currentPlace);hiddenDrop.length&amp;&amp;(hiddenDrop.addClass("active"),drag.offset(hiddenDrop.offset()))}else{var hiddenDrag=thisQ.getDragClone(drag);if(hiddenDrag.length)if(drag.hasClass("infinite")){var noOfDrags=this.noOfDropsInGroup(thisQ.getGroup(drag));if(this.getInfiniteDragClones(drag,!1).length&lt;noOfDrags){var cloneDrag=drag.clone();cloneDrag.removeClass("beingdragged"),cloneDrag.removeAttr("tabindex"),hiddenDrag.after(cloneDrag),questionManager.addEventHandlersToDrag(cloneDrag),drag.offset(cloneDrag.offset())}else hiddenDrag.addClass("active"),drag.offset(hiddenDrag.offset())}else hiddenDrag.addClass("active"),drag.offset(hiddenDrag.offset())}dragDrop.start(e,drag,(function(x,y,drag){thisQ.dragMove(x,y,drag)}),(function(x,y,drag){thisQ.dragEnd(x,y,drag)}))}},DragDropOntoImageQuestion.prototype.dragMove=function(pageX,pageY,drag){var thisQ=this,highlighted=!1;this.getRoot().find(".dropzone.group"+this.getGroup(drag)).each((function(i,dropNode){var drop=$(dropNode);thisQ.isPointInDrop(pageX,pageY,drop)&amp;&amp;!highlighted?(highlighted=!0,drop.addClass("valid-drag-over-drop")):drop.removeClass("valid-drag-over-drop")})),this.getRoot().find(".draghome.placed.group"+this.getGroup(drag)).not(".beingdragged").each((function(i,dropNode){var drop=$(dropNode);!thisQ.isPointInDrop(pageX,pageY,drop)||highlighted||thisQ.isDragSameAsDrop(drag,drop)?drop.removeClass("valid-drag-over-drop"):(highlighted=!0,drop.addClass("valid-drag-over-drop"))}))},DragDropOntoImageQuestion.prototype.dragEnd=function(pageX,pageY,drag){var thisQ=this,root=this.getRoot(),placed=!1;root.find(".dropzone.group"+this.getGroup(drag)).each((function(i,dropNode){var drop=$(dropNode);return!thisQ.isPointInDrop(pageX,pageY,drop)||(drop.removeClass("valid-drag-over-drop"),thisQ.sendDragToDrop(drag,drop),placed=!0,!1)})),placed||root.find(".draghome.placed.group"+this.getGroup(drag)).not(".beingdragged").each((function(i,placedNode){var placedDrag=$(placedNode);if(!thisQ.isPointInDrop(pageX,pageY,placedDrag)||thisQ.isDragSameAsDrop(drag,placedDrag))return!0;placedDrag.removeClass("valid-drag-over-drop");var currentPlace=thisQ.getClassnameNumericSuffix(placedDrag,"inplace"),drop=thisQ.getDrop(drag,currentPlace);return thisQ.sendDragToDrop(drag,drop),placed=!0,!1})),placed||this.sendDragHome(drag)},DragDropOntoImageQuestion.prototype.sendDragToDrop=function(drag,drop){var oldDrag=this.getCurrentDragInPlace(this.getPlace(drop));if(0!==oldDrag.length){oldDrag.addClass("beingdragged"),oldDrag.offset(oldDrag.offset());var currentPlace=this.getClassnameNumericSuffix(oldDrag,"inplace");this.getDrop(oldDrag,currentPlace).addClass("active"),this.sendDragHome(oldDrag)}0===drag.length?(this.setInputValue(this.getPlace(drop),0),drop.data("isfocus")&amp;&amp;drop.focus()):(this.setInputValue(this.getPlace(drop),this.getChoice(drag)),drag.removeClass("unplaced").addClass("placed inplace"+this.getPlace(drop)),drag.attr("tabindex",0),this.animateTo(drag,drop))},DragDropOntoImageQuestion.prototype.sendDragHome=function(drag){var currentPlace=this.getClassnameNumericSuffix(drag,"inplace");null!==currentPlace&amp;&amp;drag.removeClass("inplace"+currentPlace),drag.data("unplaced",!0),this.animateTo(drag,this.getDragHome(this.getGroup(drag),this.getChoice(drag)))},DragDropOntoImageQuestion.prototype.handleKeyPress=function(e){var drop=$(e.target).closest(".dropzone");if(0===drop.length){var placedDrag=$(e.target),currentPlace=this.getClassnameNumericSuffix(placedDrag,"inplace");null!==currentPlace&amp;&amp;(drop=this.getDrop(placedDrag,currentPlace))}var currentDrag=this.getCurrentDragInPlace(this.getPlace(drop)),nextDrag=$();switch(e.keyCode){case keys.space:case keys.arrowRight:case keys.arrowDown:nextDrag=this.getNextDrag(this.getGroup(drop),currentDrag);break;case keys.arrowLeft:case keys.arrowUp:nextDrag=this.getPreviousDrag(this.getGroup(drop),currentDrag);break;case keys.escape:questionManager.isKeyboardNavigation=!1;break;default:return void(questionManager.isKeyboardNavigation=!1)}if(nextDrag.length){nextDrag.data("isfocus",!0),nextDrag.addClass("beingdragged");var hiddenDrag=this.getDragClone(nextDrag);if(hiddenDrag.length)if(nextDrag.hasClass("infinite")){var noOfDrags=this.noOfDropsInGroup(this.getGroup(nextDrag));if(this.getInfiniteDragClones(nextDrag,!1).length&lt;noOfDrags){var cloneDrag=nextDrag.clone();cloneDrag.removeClass("beingdragged"),cloneDrag.removeAttr("tabindex"),hiddenDrag.after(cloneDrag),questionManager.addEventHandlersToDrag(cloneDrag),nextDrag.offset(cloneDrag.offset())}else hiddenDrag.addClass("active"),nextDrag.offset(hiddenDrag.offset())}else hiddenDrag.addClass("active"),nextDrag.offset(hiddenDrag.offset())}else drop.data("isfocus",!0);e.preventDefault(),this.sendDragToDrop(nextDrag,drop)},DragDropOntoImageQuestion.prototype.getNextDrag=function(group,drag){var choice,numChoices=this.noOfChoicesInGroup(group);choice=0===drag.length?1:this.getChoice(drag)+1;for(var next=this.getUnplacedChoice(group,choice);0===next.length&amp;&amp;choice&lt;numChoices;)choice++,next=this.getUnplacedChoice(group,choice);return next},DragDropOntoImageQuestion.prototype.getPreviousDrag=function(group,drag){var choice;choice=0===drag.length?this.noOfChoicesInGroup(group):this.getChoice(drag)-1;for(var previous=this.getUnplacedChoice(group,choice);0===previous.length&amp;&amp;choice&gt;1;)choice--,previous=this.getUnplacedChoice(group,choice);return previous},DragDropOntoImageQuestion.prototype.animateTo=function(drag,target){var currentPos=drag.offset(),targetPos=target.offset(),thisQ=this;M.util.js_pending("qtype_ddimageortext-animate-"+thisQ.containerId),drag.animate({left:parseInt(drag.css("left"))+targetPos.left-currentPos.left,top:parseInt(drag.css("top"))+targetPos.top-currentPos.top},{duration:"fast",done:function(){$("body").trigger("qtype_ddimageortext-dragmoved",[drag,target,thisQ]),M.util.js_complete("qtype_ddimageortext-animate-"+thisQ.containerId)}})},DragDropOntoImageQuestion.prototype.isPointInDrop=function(pageX,pageY,drop){var position=drop.offset();return drop.hasClass("draghome")?pageX&gt;=position.left&amp;&amp;pageX&lt;position.left+drop.outerWidth()&amp;&amp;pageY&gt;=position.top&amp;&amp;pageY&lt;position.top+drop.outerHeight():pageX&gt;=position.left&amp;&amp;pageX&lt;position.left+drop.width()&amp;&amp;pageY&gt;=position.top&amp;&amp;pageY&lt;position.top+drop.height()},DragDropOntoImageQuestion.prototype.setInputValue=function(place,choice){this.getRoot().find("input.placeinput.place"+place).val(choice)},DragDropOntoImageQuestion.prototype.getRoot=function(){return $(document.getElementById(this.containerId))},DragDropOntoImageQuestion.prototype.bgImage=function(){return this.getRoot().find("img.dropbackground")},DragDropOntoImageQuestion.prototype.getDragHome=function(group,choice){return this.getRoot().find(".draghome.dragplaceholder.group"+group+".choice"+choice).is(":visible")?this.getRoot().find(".draghome.dragplaceholder.group"+group+".choice"+choice):this.getRoot().find(".dragitemgroup"+group+" .draghome.infinite.choice"+choice+".group"+group)},DragDropOntoImageQuestion.prototype.getUnplacedChoice=function(group,choice){return this.getRoot().find(".ddarea .draghome.group"+group+".choice"+choice+".unplaced").slice(0,1)},DragDropOntoImageQuestion.prototype.getCurrentDragInPlace=function(place){return this.getRoot().find(".ddarea .draghome.inplace"+place)},DragDropOntoImageQuestion.prototype.noOfDropsInGroup=function(group){return this.getRoot().find(".dropzone.group"+group).length},DragDropOntoImageQuestion.prototype.noOfChoicesInGroup=function(group){return this.getRoot().find(".dragitemgroup"+group+" .draghome").length},DragDropOntoImageQuestion.prototype.getClassnameNumericSuffix=function(node,prefix){var classes=node.attr("class");if(""!==classes)for(var classesArr=classes.split(" "),index=0;index&lt;classesArr.length;index++){if(new RegExp("^"+prefix+"([0-9])+$").test(classesArr[index])){var match=new RegExp("([0-9])+$").exec(classesArr[index]);return Number(match[0])}}return null},DragDropOntoImageQuestion.prototype.getChoice=function(drag){return this.getClassnameNumericSuffix(drag,"choice")},DragDropOntoImageQuestion.prototype.getGroup=function(node){return this.getClassnameNumericSuffix(node,"group")},DragDropOntoImageQuestion.prototype.getPlace=function(node){return this.getClassnameNumericSuffix(node,"place")},DragDropOntoImageQuestion.prototype.getDragClone=function(drag){return this.getRoot().find(".dragitemgroup"+this.getGroup(drag)+" .draghome.choice"+this.getChoice(drag)+".group"+this.getGroup(drag)+".dragplaceholder")},DragDropOntoImageQuestion.prototype.getInfiniteDragClones=function(drag,inHome){return inHome?this.getRoot().find(".dragitemgroup"+this.getGroup(drag)+" .draghome.choice"+this.getChoice(drag)+".group"+this.getGroup(drag)+".infinite").not(".dragplaceholder"):this.getRoot().find(".draghome.choice"+this.getChoice(drag)+".group"+this.getGroup(drag)+".infinite").not(".dragplaceholder")},DragDropOntoImageQuestion.prototype.getDrop=function(drag,currentPlace){return this.getRoot().find(".dropzone.group"+this.getGroup(drag)+".place"+currentPlace)},DragDropOntoImageQuestion.prototype.handleResize=function(){var thisQ=this,bgRatio=this.bgRatio();this.isPrinting&amp;&amp;(bgRatio=1),this.getRoot().find(".ddarea .dropzone").each((function(i,dropNode){$(dropNode).css("left",parseInt($(dropNode).data("originX"))*parseFloat(bgRatio)).css("top",parseInt($(dropNode).data("originY"))*parseFloat(bgRatio)),thisQ.handleElementScale(dropNode,"left top")})),this.getRoot().find("div.droparea .draghome").not(".beingdragged").each((function(key,drag){$(drag).css("left",parseFloat($(drag).data("originX"))*parseFloat(bgRatio)).css("top",parseFloat($(drag).data("originY"))*parseFloat(bgRatio)),thisQ.handleElementScale(drag,"left top")}))},DragDropOntoImageQuestion.prototype.bgRatio=function(){var bgImg=this.bgImage(),bgImgNaturalWidth=bgImg.get(0).naturalWidth;return bgImg.width()/bgImgNaturalWidth},DragDropOntoImageQuestion.prototype.handleElementScale=function(element,type){var bgRatio=parseFloat(this.bgRatio());this.isPrinting&amp;&amp;(bgRatio=1),$(element).css({"-webkit-transform":"scale("+bgRatio+")","-moz-transform":"scale("+bgRatio+")","-ms-transform":"scale("+bgRatio+")","-o-transform":"scale("+bgRatio+")",transform:"scale("+bgRatio+")","transform-origin":type})},DragDropOntoImageQuestion.prototype.calculateZIndex=function(){var zIndex=0;return this.getRoot().find(".ddarea .dropzone, div.droparea .draghome").each((function(i,dropNode){var itemZIndex=(dropNode=$(dropNode)).css("z-index")?parseInt(dropNode.css("z-index")):0;itemZIndex&gt;zIndex&amp;&amp;(zIndex=itemZIndex)})),zIndex},DragDropOntoImageQuestion.prototype.isDragSameAsDrop=function(drag,drop){return this.getChoice(drag)===this.getChoice(drop)&amp;&amp;this.getGroup(drag)===this.getGroup(drop)};var questionManager={eventHandlersInitialised:!1,dragEventHandlersInitialised:{},isPrinting:!1,isKeyboardNavigation:!1,questions:{},init:function(containerId,readOnly,places){if(questionManager.questions[containerId]=new DragDropOntoImageQuestion(containerId,readOnly,places),questionManager.eventHandlersInitialised||(questionManager.setupEventHandlers(),questionManager.eventHandlersInitialised=!0),!questionManager.dragEventHandlersInitialised.hasOwnProperty(containerId)){questionManager.dragEventHandlersInitialised[containerId]=!0;var questionContainer=document.getElementById(containerId);questionContainer.classList.contains("ddimageortext")&amp;&amp;!questionContainer.classList.contains("qtype_ddimageortext-readonly")&amp;&amp;questionManager.addEventHandlersToDrag($(questionContainer).find(".draghome"))}},setupEventHandlers:function(){$("body").on("keydown",".que.ddimageortext:not(.qtype_ddimageortext-readonly) .dropzones .dropzone",questionManager.handleKeyPress).on("keydown",".que.ddimageortext:not(.qtype_ddimageortext-readonly) .draghome.placed:not(.beingdragged)",questionManager.handleKeyPress).on("qtype_ddimageortext-dragmoved",questionManager.handleDragMoved),$(window).on("resize",(function(){questionManager.handleWindowResize(!1)})),window.addEventListener("beforeprint",(function(){questionManager.isPrinting=!0,questionManager.handleWindowResize(questionManager.isPrinting)})),window.addEventListener("afterprint",(function(){questionManager.isPrinting=!1,questionManager.handleWindowResize(questionManager.isPrinting)})),setTimeout((function(){questionManager.fixLayoutIfThingsMoved()}),100)},addEventHandlersToDrag:function(element){element.unbind("mousedown touchstart"),element.on("mousedown touchstart",questionManager.handleDragStart)},handleDragStart:function(e){e.preventDefault();var question=questionManager.getQuestionForEvent(e);question&amp;&amp;question.handleDragStart(e)},handleKeyPress:function(e){if(!questionManager.isKeyboardNavigation){questionManager.isKeyboardNavigation=!0;var question=questionManager.getQuestionForEvent(e);question&amp;&amp;question.handleKeyPress(e)}},handleWindowResize:function(isPrinting){for(var containerId in questionManager.questions)questionManager.questions.hasOwnProperty(containerId)&amp;&amp;(questionManager.questions[containerId].isPrinting=isPrinting,questionManager.questions[containerId].handleResize())},fixLayoutIfThingsMoved:function(){this.handleWindowResize(questionManager.isPrinting),setTimeout((function(){questionManager.fixLayoutIfThingsMoved(questionManager.isPrinting)}),100)},handleDragMoved:function(e,drag,target,thisQ){drag.removeClass("beingdragged").css("z-index",""),drag.css("top",target.position().top).css("left",target.position().left),target.after(drag),target.removeClass("active"),void 0!==drag.data("unplaced")&amp;&amp;!0===drag.data("unplaced")?(drag.removeClass("placed").addClass("unplaced"),drag.removeAttr("tabindex"),drag.removeData("unplaced"),drag.css("top","").css("left","").css("transform",""),drag.hasClass("infinite")&amp;&amp;thisQ.getInfiniteDragClones(drag,!0).length&gt;1&amp;&amp;thisQ.getInfiniteDragClones(drag,!0).first().remove()):(drag.data("originX",target.data("originX")).data("originY",target.data("originY")),thisQ.handleElementScale(drag,"left top")),void 0!==drag.data("isfocus")&amp;&amp;!0===drag.data("isfocus")&amp;&amp;(drag.focus(),drag.removeData("isfocus")),void 0!==target.data("isfocus")&amp;&amp;!0===target.data("isfocus")&amp;&amp;target.removeData("isfocus"),questionManager.isKeyboardNavigation&amp;&amp;(questionManager.isKeyboardNavigation=!1),thisQ.isQuestionInteracted()&amp;&amp;(questionManager.handleFormDirty(),thisQ.questionAnswer=thisQ.getQuestionAnsweredValues())},getQuestionForEvent:function(e){var containerId=$(e.currentTarget).closest(".que.ddimageortext").attr("id");return questionManager.questions[containerId]},handleFormDirty:function(){const responseForm=document.getElementById("responseform");FormChangeChecker.markFormAsDirty(responseForm)}};return{init:questionManager.init}}));
/**
 * Library of classes for handling simple shapes.
 *
 * These classes can represent shapes, let you alter them, can go to and from a string
 * representation, and can give you an SVG representation.
 *
 * @module qtype_ddmarker/shapes
 * @copyright  2018 The Open University
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("qtype_ddmarker/shapes",(function(){function Point(x,y){this.x=x,this.y=y}function Shape(label,x,y){this.label=label,this.centre=new Point(x||0,y||0)}function Circle(label,x,y,radius){x=x||15,y=y||15,Shape.call(this,label,x,y),this.radius=radius||15}function Rectangle(label,x,y,width,height){Shape.call(this,label,x,y),this.width=width||30,this.height=height||30}function Polygon(label,points){Shape.call(this,label,0,0),this.points=points?points.slice():[new Point(10,10),new Point(40,10),new Point(10,40)],this.normalizeShape(),this.ratio=1}function NullShape(label){Shape.call(this,label)}function createSvgElement(svg,tagName){var svgEl=svg.ownerDocument.createElementNS("http://www.w3.org/2000/svg",tagName);return svg.appendChild(svgEl),svgEl}function createSvgShapeGroup(svg,tagName){var svgEl=createSvgElement(svg,"g");return createSvgElement(svgEl,tagName).setAttribute("class","shape"),createSvgElement(svgEl,"text").setAttribute("class","shapeLabel"),svgEl}return Point.prototype.toString=function(){return this.x+","+this.y},Point.prototype.move=function(dx,dy){this.x+=dx,this.y+=dy},Point.prototype.offset=function(offsetX,offsetY){return offsetX instanceof Point&amp;&amp;(offsetY=offsetX.y,offsetX=offsetX.x),new Point(this.x+offsetX,this.y+offsetY)},Point.parse=function(coordinates){var bits=coordinates.split(",");if(2!==bits.length)throw new Error(coordinates+" is not a valid point");return new Point(Math.round(bits[0]),Math.round(bits[1]))},Shape.prototype.getType=function(){throw new Error("Not implemented.")},Shape.prototype.getCoordinates=function(){throw new Error("Not implemented.")},Shape.prototype.parse=function(coordinates,ratio){throw new Error("Not implemented.")},Shape.prototype.move=function(dx,dy,maxX,maxY){},Shape.prototype.edit=function(handleIndex,dx,dy,maxX,maxY){},Shape.prototype.normalizeShape=function(){},Shape.prototype.makeSvg=function(svg){throw new Error("Not implemented.")},Shape.prototype.updateSvg=function(svgEl){},Shape.prototype.makeSimilarCircle=function(){throw new Error("Not implemented.")},Shape.prototype.makeSimilarRectangle=function(){throw new Error("Not implemented.")},Shape.prototype.makeSimilarPolygon=function(){throw new Error("Not implemented.")},Shape.prototype.getHandlePositions=function(){return null},Circle.prototype=new Shape,Circle.prototype.getType=function(){return"circle"},Circle.prototype.getCoordinates=function(){return this.centre+";"+Math.abs(this.radius)},Circle.prototype.makeSvg=function(svg){var svgEl=createSvgShapeGroup(svg,"circle");return this.updateSvg(svgEl),svgEl},Circle.prototype.updateSvg=function(svgEl){svgEl.childNodes[0].setAttribute("cx",this.centre.x),svgEl.childNodes[0].setAttribute("cy",this.centre.y),svgEl.childNodes[0].setAttribute("r",Math.abs(this.radius)),svgEl.childNodes[1].setAttribute("x",this.centre.x),svgEl.childNodes[1].setAttribute("y",this.centre.y+15),svgEl.childNodes[1].textContent=this.label},Circle.prototype.parse=function(coordinates,ratio){if(!coordinates.match(/^\d+(\.\d+)?,\d+(\.\d+)?;\d+(\.\d+)?$/))return!1;var bits=coordinates.split(";");return this.centre=Point.parse(bits[0]),this.centre.x=this.centre.x*parseFloat(ratio),this.centre.y=this.centre.y*parseFloat(ratio),this.radius=Math.round(bits[1])*parseFloat(ratio),!0},Circle.prototype.move=function(dx,dy,maxX,maxY){this.centre.move(dx,dy),this.centre.x&lt;this.radius&amp;&amp;(this.centre.x=this.radius),this.centre.x&gt;maxX-this.radius&amp;&amp;(this.centre.x=maxX-this.radius),this.centre.y&lt;this.radius&amp;&amp;(this.centre.y=this.radius),this.centre.y&gt;maxY-this.radius&amp;&amp;(this.centre.y=maxY-this.radius)},Circle.prototype.edit=function(handleIndex,dx,dy,maxX,maxY){this.radius+=dx;var limit=Math.min(this.centre.x,this.centre.y,maxX-this.centre.x,maxY-this.centre.y);this.radius&gt;limit&amp;&amp;(this.radius=limit),this.radius&lt;-limit&amp;&amp;(this.radius=-limit)},Circle.prototype.normalizeShape=function(){this.radius=Math.abs(this.radius)},Circle.prototype.makeSimilarRectangle=function(){return new Rectangle(this.label,this.centre.x-this.radius,this.centre.y-this.radius,2*this.radius,2*this.radius)},Circle.prototype.makeSimilarPolygon=function(){return new Polygon(this.label,[this.centre.offset(-this.radius,-this.radius),this.centre.offset(-this.radius,this.radius),this.centre.offset(this.radius,this.radius),this.centre.offset(this.radius,-this.radius)])},Circle.prototype.getHandlePositions=function(){return{moveHandle:this.centre,editHandles:[this.centre.offset(this.radius,0)]}},Rectangle.prototype=new Shape,Rectangle.prototype.getType=function(){return"rectangle"},Rectangle.prototype.getCoordinates=function(){return this.centre+";"+this.width+","+this.height},Rectangle.prototype.makeSvg=function(svg){var svgEl=createSvgShapeGroup(svg,"rect");return this.updateSvg(svgEl),svgEl},Rectangle.prototype.updateSvg=function(svgEl){this.width&gt;=0?(svgEl.childNodes[0].setAttribute("x",this.centre.x),svgEl.childNodes[0].setAttribute("width",this.width)):(svgEl.childNodes[0].setAttribute("x",this.centre.x+this.width),svgEl.childNodes[0].setAttribute("width",-this.width)),this.height&gt;=0?(svgEl.childNodes[0].setAttribute("y",this.centre.y),svgEl.childNodes[0].setAttribute("height",this.height)):(svgEl.childNodes[0].setAttribute("y",this.centre.y+this.height),svgEl.childNodes[0].setAttribute("height",-this.height)),svgEl.childNodes[1].setAttribute("x",this.centre.x+this.width/2),svgEl.childNodes[1].setAttribute("y",this.centre.y+this.height/2+15),svgEl.childNodes[1].textContent=this.label},Rectangle.prototype.parse=function(coordinates,ratio){if(!coordinates.match(/^\d+(\.\d+)?,\d+(\.\d+)?;\d+(\.\d+)?,\d+(\.\d+)?$/))return!1;var bits=coordinates.split(";");this.centre=Point.parse(bits[0]),this.centre.x=this.centre.x*parseFloat(ratio),this.centre.y=this.centre.y*parseFloat(ratio);var size=Point.parse(bits[1]);return this.width=size.x*parseFloat(ratio),this.height=size.y*parseFloat(ratio),!0},Rectangle.prototype.move=function(dx,dy,maxX,maxY){this.centre.move(dx,dy),this.centre.x&lt;0&amp;&amp;(this.centre.x=0),this.centre.x&gt;maxX-this.width&amp;&amp;(this.centre.x=maxX-this.width),this.centre.y&lt;0&amp;&amp;(this.centre.y=0),this.centre.y&gt;maxY-this.height&amp;&amp;(this.centre.y=maxY-this.height)},Rectangle.prototype.edit=function(handleIndex,dx,dy,maxX,maxY){this.width+=dx,this.height+=dy,this.width&lt;-this.centre.x&amp;&amp;(this.width=-this.centre.x),this.width&gt;maxX-this.centre.x&amp;&amp;(this.width=maxX-this.centre.x),this.height&lt;-this.centre.y&amp;&amp;(this.height=-this.centre.y),this.height&gt;maxY-this.centre.y&amp;&amp;(this.height=maxY-this.centre.y)},Rectangle.prototype.normalizeShape=function(){this.width&lt;0&amp;&amp;(this.centre.x+=this.width,this.width=-this.width),this.height&lt;0&amp;&amp;(this.centre.y+=this.height,this.height=-this.height)},Rectangle.prototype.makeSimilarCircle=function(){return new Circle(this.label,Math.round(this.centre.x+this.width/2),Math.round(this.centre.y+this.height/2),Math.round((this.width+this.height)/4))},Rectangle.prototype.makeSimilarPolygon=function(){return new Polygon(this.label,[this.centre,this.centre.offset(0,this.height),this.centre.offset(this.width,this.height),this.centre.offset(this.width,0)])},Rectangle.prototype.getHandlePositions=function(){return{moveHandle:this.centre.offset(this.width/2,this.height/2),editHandles:[this.centre.offset(this.width,this.height)]}},Polygon.prototype=new Shape,Polygon.prototype.getType=function(){return"polygon"},Polygon.prototype.getCoordinates=function(){for(var coordinates="",i=0;i&lt;this.points.length;i++)coordinates+=this.centre.offset(this.points[i])+";";return coordinates.slice(0,coordinates.length-1)},Polygon.prototype.makeSvg=function(svg){var svgEl=createSvgShapeGroup(svg,"polygon");return this.updateSvg(svgEl),svgEl},Polygon.prototype.updateSvg=function(svgEl){svgEl.childNodes[0].setAttribute("points",this.getCoordinates().replace(/[,;]/g," ")),svgEl.childNodes[0].setAttribute("transform","scale("+parseFloat(this.ratio)+")"),svgEl.childNodes[1].setAttribute("x",this.centre.x),svgEl.childNodes[1].setAttribute("y",this.centre.y+15),svgEl.childNodes[1].textContent=this.label},Polygon.prototype.parse=function(coordinates,ratio){if(!coordinates.match(/^\d+(\.\d+)?,\d+(\.\d+)?(?:;\d+(\.\d+)?,\d+(\.\d+)?)*$/))return!1;for(var bits=coordinates.split(";"),points=[],i=0;i&lt;bits.length;i++)points.push(Point.parse(bits[i]));return this.points=points,this.centre.x=0,this.centre.y=0,this.ratio=ratio,this.normalizeShape(),!0},Polygon.prototype.move=function(dx,dy,maxX,maxY){this.centre.move(dx,dy);for(var bbXMin=maxX,bbXMax=0,bbYMin=maxY,bbYMax=0,i=0;i&lt;this.points.length;i++)bbXMin=Math.min(bbXMin,this.points[i].x),bbXMax=Math.max(bbXMax,this.points[i].x),bbYMin=Math.min(bbYMin,this.points[i].y),bbYMax=Math.max(bbYMax,this.points[i].y);this.centre.x&lt;-bbXMin&amp;&amp;(this.centre.x=-bbXMin),this.centre.x&gt;maxX-bbXMax&amp;&amp;(this.centre.x=maxX-bbXMax),this.centre.y&lt;-bbYMin&amp;&amp;(this.centre.y=-bbYMin),this.centre.y&gt;maxY-bbYMax&amp;&amp;(this.centre.y=maxY-bbYMax)},Polygon.prototype.edit=function(handleIndex,dx,dy,maxX,maxY){this.points[handleIndex].move(dx,dy),this.points[handleIndex].x&lt;-this.centre.x&amp;&amp;(this.points[handleIndex].x=-this.centre.x),this.points[handleIndex].x&gt;maxX-this.centre.x&amp;&amp;(this.points[handleIndex].x=maxX-this.centre.x),this.points[handleIndex].y&lt;-this.centre.y&amp;&amp;(this.points[handleIndex].y=-this.centre.y),this.points[handleIndex].y&gt;maxY-this.centre.y&amp;&amp;(this.points[handleIndex].y=maxY-this.centre.y)},Polygon.prototype.addNewPointAfter=function(pointIndex){this.points.splice(pointIndex,0,new Point(this.points[pointIndex].x,this.points[pointIndex].y))},Polygon.prototype.normalizeShape=function(){var i,x=0,y=0;if(0!==this.points.length){for(i=0;i&lt;this.points.length;i++)x+=this.points[i].x,y+=this.points[i].y;if(x=Math.round(x/this.points.length),y=Math.round(y/this.points.length),0!==x||0!==y){for(i=0;i&lt;this.points.length;i++)this.points[i].move(-x,-y);this.centre.move(x,y)}}},Polygon.prototype.makeSimilarCircle=function(){return this.makeSimilarRectangle().makeSimilarCircle()},Polygon.prototype.makeSimilarRectangle=function(){for(var p,minX=0,maxX=0,minY=0,maxY=0,i=0;i&lt;this.points.length;i++)p=this.points[i],minX=Math.min(minX,p.x),maxX=Math.max(maxX,p.x),minY=Math.min(minY,p.y),maxY=Math.max(maxY,p.y);return new Rectangle(this.label,this.centre.x+minX,this.centre.y+minY,Math.max(maxX-minX,10),Math.max(maxY-minY,10))},Polygon.prototype.getHandlePositions=function(){for(var editHandles=[],i=0;i&lt;this.points.length;i++)editHandles.push(this.points[i].offset(this.centre.x,this.centre.y));return this.centre.x=this.centre.x*parseFloat(this.ratio),this.centre.y=this.centre.y*parseFloat(this.ratio),{moveHandle:this.centre,editHandles:editHandles}},NullShape.prototype=new Shape,NullShape.prototype.getType=function(){return"null"},NullShape.prototype.getCoordinates=function(){return""},NullShape.prototype.makeSvg=function(svg){return null},NullShape.prototype.updateSvg=function(svgEl){},NullShape.prototype.parse=function(coordinates){return!1},NullShape.prototype.makeSimilarCircle=function(){return new Circle(this.label)},NullShape.prototype.makeSimilarRectangle=function(){return new Rectangle(this.label)},NullShape.prototype.makeSimilarPolygon=function(){return new Polygon(this.label)},{Point:Point,Shape:Shape,Circle:Circle,Rectangle:Rectangle,Polygon:Polygon,NullShape:NullShape,createSvgElement:createSvgElement,make:function(shapeType,label){switch(shapeType){case"circle":return new Circle(label);case"rectangle":return new Rectangle(label);case"polygon":return new Polygon(label);default:return new NullShape(label)}},getSimilar:function(shapeType,shape){if(shapeType===shape.getType())return shape;switch(shapeType){case"circle":return shape.makeSimilarCircle();case"rectangle":return shape.makeSimilarRectangle();case"polygon":return shape.makeSimilarPolygon();default:return new NullShape(shape.label)}}}}));
/**
 * This class provides the enhancements to the drag-drop marker editing form.
 *
 * @module     qtype_ddmarker/form
 * @copyright  2018 The Open University
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("qtype_ddmarker/form",["jquery","core/dragdrop","qtype_ddmarker/shapes"],(function($,dragDrop,Shapes){function DropZoneManager(dropzoneNo){this.dropzoneNo=dropzoneNo,this.svgEl=null,this.shape=Shapes.make(this.getShapeType(),this.getLabel()),this.updateCoordinatesFromForm()}DropZoneManager.prototype.updateCoordinatesFromForm=function(svg){var coordinates=this.getCoordinates(),currentNumPoints="polygon"===this.shape.getType()&amp;&amp;this.shape.points.length;if(this.shape.getCoordinates()!==coordinates&amp;&amp;this.shape.parse(coordinates,1)){if("polygon"===this.shape.getType()&amp;&amp;currentNumPoints!==this.shape.points.length){var currentyActive=this.isActive();this.removeFromSvg(),svg&amp;&amp;(this.addToSvg(svg),currentyActive&amp;&amp;this.setActive())}else this.updateSvgEl();this.setCoordinatesInForm()}},DropZoneManager.prototype.updateLabel=function(){var label=this.getLabel();this.shape.label!==label&amp;&amp;(this.shape.label=label,this.updateSvgEl())},DropZoneManager.prototype.changeShape=function(svg){var newShapeType=this.getShapeType(),currentyActive=this.isActive();newShapeType!==this.shape.getType()&amp;&amp;(this.removeFromSvg(),this.shape=Shapes.getSimilar(newShapeType,this.shape),svg&amp;&amp;(this.addToSvg(svg),currentyActive&amp;&amp;this.setActive()),this.setCoordinatesInForm())},DropZoneManager.prototype.addToSvg=function(svg){if(null!==this.svgEl)throw new Error("this.svgEl already set");if(this.svgEl=this.shape.makeSvg(svg),this.svgEl){this.svgEl.setAttribute("class","dropzone"),this.svgEl.setAttribute("data-dropzone-no",this.dropzoneNo);var handles=this.shape.getHandlePositions();if(null!==handles){var moveHandle=Shapes.createSvgElement(this.svgEl,"circle");moveHandle.setAttribute("cx",handles.moveHandle.x),moveHandle.setAttribute("cy",handles.moveHandle.y),moveHandle.setAttribute("r",7),moveHandle.setAttribute("class","handle move");for(var i=0;i&lt;handles.editHandles.length;++i)this.makeEditHandle(i,handles.editHandles[i])}}},DropZoneManager.prototype.makeEditHandle=function(index,point){var editHandle=Shapes.createSvgElement(this.svgEl,"rect");editHandle.setAttribute("x",point.x-6),editHandle.setAttribute("y",point.y-6),editHandle.setAttribute("width",11),editHandle.setAttribute("height",11),editHandle.setAttribute("class","handle edit"),editHandle.setAttribute("data-edit-handle-no",index)},DropZoneManager.prototype.removeFromSvg=function(){null!==this.svgEl&amp;&amp;(this.svgEl.parentNode.removeChild(this.svgEl),this.svgEl=null)},DropZoneManager.prototype.updateSvgEl=function(){if(null!==this.svgEl){this.shape.updateSvg(this.svgEl);var handles=this.shape.getHandlePositions();if(null!==handles){this.svgEl.childNodes[2].setAttribute("cx",handles.moveHandle.x),this.svgEl.childNodes[2].setAttribute("cy",handles.moveHandle.y);for(var i=0;i&lt;handles.editHandles.length;++i)this.svgEl.childNodes[3+i].setAttribute("x",handles.editHandles[i].x-6),this.svgEl.childNodes[3+i].setAttribute("y",handles.editHandles[i].y-6)}}},DropZoneManager.prototype.isActive=function(){return null!==this.svgEl&amp;&amp;this.svgEl.getAttribute("class").match(/\bactive\b/)},DropZoneManager.prototype.setActive=function(){var parent=this.svgEl.parentNode;parent.removeChild(this.svgEl),parent.appendChild(this.svgEl),this.svgEl.setAttribute("class",this.svgEl.getAttribute("class")+" active")},DropZoneManager.prototype.setCoordinatesInForm=function(){dragDropForm.form.setFormValue("drops",[this.dropzoneNo,"coords"],this.shape.getCoordinates())},DropZoneManager.prototype.getCoordinates=function(){return dragDropForm.form.getFormValue("drops",[this.dropzoneNo,"coords"]).replace(/\s*/g,"")},DropZoneManager.prototype.getChoiceNo=function(){return dragDropForm.form.getFormValue("drops",[this.dropzoneNo,"choice"])},DropZoneManager.prototype.getLabel=function(){return dragDropForm.form.getMarkerText(this.getChoiceNo())},DropZoneManager.prototype.getShapeType=function(){return dragDropForm.form.getFormValue("drops",[this.dropzoneNo,"shape"])},DropZoneManager.prototype.handleMove=function(e){var info=dragDrop.prepare(e);if(info.start){var movingDropZone=this,lastX=info.x,lastY=info.y,dragProxy=this.makeDragProxy(info.x,info.y),bgImg=$("fieldset#id_previewareaheader .dropbackground"),maxX=bgImg.width(),maxY=bgImg.height();dragDrop.start(e,$(dragProxy),(function(pageX,pageY){movingDropZone.shape.move(pageX-lastX,pageY-lastY,maxX,maxY),lastX=pageX,lastY=pageY,movingDropZone.updateSvgEl(),movingDropZone.setCoordinatesInForm()}),(function(){document.body.removeChild(dragProxy)}))}},DropZoneManager.prototype.handleEdit=function(e,handleIndex,svg){var info=dragDrop.prepare(e);if(info.start){"polygon"===this.shape.getType()&amp;&amp;(e.ctrlKey||e.metaKey)&amp;&amp;(this.shape.addNewPointAfter(handleIndex),this.removeFromSvg(),this.addToSvg(svg),this.setActive());var changingDropZone=this,lastX=info.x,lastY=info.y,dragProxy=this.makeDragProxy(info.x,info.y),bgImg=$("fieldset#id_previewareaheader .dropbackground"),maxX=bgImg.width(),maxY=bgImg.height();dragDrop.start(e,$(dragProxy),(function(pageX,pageY){changingDropZone.shape.edit(handleIndex,pageX-lastX,pageY-lastY,maxX,maxY),lastX=pageX,lastY=pageY,changingDropZone.updateSvgEl(),changingDropZone.setCoordinatesInForm()}),(function(){document.body.removeChild(dragProxy),changingDropZone.shape.normalizeShape(),changingDropZone.updateSvgEl(),changingDropZone.setCoordinatesInForm()}))}},DropZoneManager.prototype.makeDragProxy=function(x,y){var dragProxy=document.createElement("div");return dragProxy.style.position="absolute",dragProxy.style.top=y+"px",dragProxy.style.left=x+"px",dragProxy.style.width="1px",dragProxy.style.height="1px",document.body.appendChild(dragProxy),dragProxy};var dragDropForm={fp:null,noDropZones:null,dropZones:[],init:function(){dragDropForm.fp=dragDropForm.filePickers(),dragDropForm.noDropZones=dragDropForm.form.getFormValue("nodropzone",[]),dragDropForm.setOptionsForDragItemSelectors(),dragDropForm.createShapes(),dragDropForm.setupEventHandlers(),dragDropForm.waitForFilePickerToInitialise()},setupPreviewArea:function(){$("fieldset#id_previewareaheader div.fcontainer").append('&lt;div class="ddarea que ddmarker"&gt;   &lt;div id="ddm-droparea" class="droparea"&gt;       &lt;img class="dropbackground" /&gt;       &lt;div id="ddm-dropzone" class="dropzones"&gt;       &lt;/div&gt;   &lt;/div&gt;&lt;/div&gt;')},setOptionsForDragItemSelectors:function(){var selector,i,label,dragItemsOptions={0:""},noItems=dragDropForm.form.getFormValue("noitems",[]),selectedValues=[];for(i=1;i&lt;=noItems;i++)""!==(label=dragDropForm.form.getMarkerText(i))&amp;&amp;(dragItemsOptions[i]=$("&lt;div/&gt;").text(label).html());for(i=0;i&lt;dragDropForm.noDropZones;i++)selector=$("#id_drops_"+i+"_choice"),selectedValues[i]=Number(selector.val());for(i=0;i&lt;dragDropForm.noDropZones;i++){for(var value in(selector=$("#id_drops_"+i+"_choice")).find("option").remove(),dragItemsOptions){var option='&lt;option value="'+(value=Number(value))+'"&gt;'+dragItemsOptions[value]+"&lt;/option&gt;";selector.append(option);var optionnode=selector.find('option[value="'+value+'"]');if(0!==value)if(value!==selectedValues[i]){var noofdrags=dragDropForm.form.getFormValue("drags",[value-1,"noofdrags"]);if(0!==Number(noofdrags))for(var k in selectedValues)if(Number(selectedValues[k])===value){if(1===Number(noofdrags)){optionnode.attr("disabled",!0);break}noofdrags--}}else optionnode.attr("selected",!0)}dragDropForm.dropZones.length&gt;0&amp;&amp;dragDropForm.dropZones[i].updateLabel()}},createShapes:function(){for(var dropzoneNo=0;dropzoneNo&lt;dragDropForm.noDropZones;dropzoneNo++)dragDropForm.dropZones[dropzoneNo]=new DropZoneManager(dropzoneNo)},setupEventHandlers:function(){$("fieldset#id_draggableitemheader").on("change input","input, select",(function(){dragDropForm.setOptionsForDragItemSelectors()})),$("fieldset#id_dropzoneheader").on("change input","input, select",(function(e){var ids=e.currentTarget.name.match(/^drops\[(\d+)]\[([a-z]*)]$/);if(ids){var dropzoneNo=ids[1],inputType=ids[2],dropZone=dragDropForm.dropZones[dropzoneNo];switch(inputType){case"shape":dropZone.changeShape(dragDropForm.form.getSvg());break;case"coords":dropZone.updateCoordinatesFromForm(dragDropForm.form.getSvg());break;case"choice":dropZone.updateLabel()}}}));var previewArea=$("fieldset#id_previewareaheader");previewArea.on("click","g.dropzone",(function(e){var dropzoneNo=$(e.currentTarget).data("dropzone-no"),currentlyActive=dragDropForm.dropZones[dropzoneNo].isActive();$(dragDropForm.form.getSvg()).find(".dropzone.active").removeClass("active"),currentlyActive||dragDropForm.dropZones[dropzoneNo].setActive()})),previewArea.on("mousedown touchstart",".dropzone .handle.move",(function(e){var dropzoneNo=$(e.currentTarget).closest("g").data("dropzoneNo");dragDropForm.dropZones[dropzoneNo].handleMove(e)})),previewArea.on("mousedown touchstart",".dropzone .handle.edit",(function(e){var dropzoneNo=$(e.currentTarget).closest("g").data("dropzoneNo"),handleIndex=e.currentTarget.getAttribute("data-edit-handle-no");dragDropForm.dropZones[dropzoneNo].handleEdit(e,handleIndex,dragDropForm.form.getSvg())}))},waitForFilePickerToInitialise:function(){null!==dragDropForm.fp.file("bgimage").href?($('form.mform[data-qtype="ddmarker"]').on("change","#id_bgimage",dragDropForm.loadPreviewImage),$("#ddm-droparea").length||dragDropForm.setupPreviewArea(),dragDropForm.loadPreviewImage()):setTimeout(dragDropForm.waitForFilePickerToInitialise,1e3)},loadPreviewImage:function(){$("fieldset#id_previewareaheader .dropbackground").one("load",dragDropForm.afterPreviewImageLoaded).attr("src",dragDropForm.fp.file("bgimage").href)},afterPreviewImageLoaded:function(){var bgImg=$("fieldset#id_previewareaheader .dropbackground");$("#ddm-dropzone").css("position","relative").css("top",-1*(bgImg.height()+1)),$("#ddm-droparea").css("height",bgImg.height()+20),dragDropForm.updateSvgDisplay()},updateSvgDisplay:function(){var dropzoneNo,bgImg=$("fieldset#id_previewareaheader .dropbackground");if(dragDropForm.form.getSvg())for(dropzoneNo=0;dropzoneNo&lt;dragDropForm.noDropZones;dropzoneNo++)dragDropForm.dropZones[dropzoneNo].updateSvgEl();else for($("#ddm-dropzone").html('&lt;svg xmlns="http://www.w3.org/2000/svg" class="dropzones" width="'+bgImg.outerWidth()+'" height="'+bgImg.outerHeight()+'"&gt;&lt;/svg&gt;'),dropzoneNo=0;dropzoneNo&lt;dragDropForm.noDropZones;dropzoneNo++)dragDropForm.dropZones[dropzoneNo].addToSvg(dragDropForm.form.getSvg())},form:{getMarkerText:function(markerNo){return 0!==Number(markerNo)?dragDropForm.form.getFormValue("drags",[markerNo-1,"label"]).replace(new RegExp("^\\s*(.*)\\s*$"),"$1"):""},getSvg:function(){var svg=$("fieldset#id_previewareaheader svg");return 0===svg.length?null:svg[0]},toNameWithIndex:function(name,indexes){for(var indexString=name,i=0;i&lt;indexes.length;i++)indexString=indexString+"["+indexes[i]+"]";return indexString},getEl:function(name,indexes){return $('form.mform[data-qtype="ddmarker"]')[0].elements[this.toNameWithIndex(name,indexes)]},getFormValue:function(name,indexes){var el=this.getEl(name,indexes);return"checkbox"===el.type?el.checked:el.value},setFormValue:function(name,indexes,value){var el=this.getEl(name,indexes);"checkbox"===el.type?el.checked=value:el.value=value}},filePickers:function(){var draftItemIdsToName,nameToParentNode;return void 0===draftItemIdsToName&amp;&amp;(draftItemIdsToName={},nameToParentNode={},$("form.mform input.filepickerhidden").each((function(key,filepicker){draftItemIdsToName[filepicker.value]=filepicker.name,nameToParentNode[filepicker.name]=filepicker.parentNode}))),{file:function(name){var fileAnchor=$(nameToParentNode[name]).find("div.filepicker-filelist a");return fileAnchor.length?{href:fileAnchor.get(0).href,name:fileAnchor.get(0).innerHTML}:{href:null,name:null}},name:function(draftitemid){return draftItemIdsToName[draftitemid]}}}};return{init:dragDropForm.init}}));
/**
 * Question class for drag and drop marker question type, used to support the question and preview pages.
 *
 * @module     qtype_ddmarker/question
 * @copyright  2018 The Open University
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("qtype_ddmarker/question",["jquery","core/dragdrop","qtype_ddmarker/shapes","core/key_codes","core_form/changechecker"],(function($,dragDrop,Shapes,keys,FormChangeChecker){function DragDropMarkersQuestion(containerId,readOnly,visibleDropZones){var thisQ=this;this.containerId=containerId,this.visibleDropZones=visibleDropZones,this.shapes=[],this.shapeSVGs=[],this.isPrinting=!1,this.questionAnswer={},readOnly&amp;&amp;this.getRoot().addClass("qtype_ddmarker-readonly"),thisQ.allImagesLoaded=!1,thisQ.getNotYetLoadedImages().one("load",(function(){thisQ.waitForAllImagesToBeLoaded()})),thisQ.waitForAllImagesToBeLoaded()}DragDropMarkersQuestion.prototype.drawDropzones=function(){if(this.visibleDropZones.length&gt;0){var bgImage=this.bgImage();this.getRoot().find("div.dropzones").html('&lt;svg xmlns="http://www.w3.org/2000/svg" class="dropzones" width="'+bgImage.outerWidth()+'" height="'+bgImage.outerHeight()+'"&gt;&lt;/svg&gt;');for(var svg=this.getRoot().find("svg.dropzones"),nextColourIndex=0,dropZoneNo=0;dropZoneNo&lt;this.visibleDropZones.length;dropZoneNo++){var colourClass="color"+nextColourIndex;nextColourIndex=(nextColourIndex+1)%8,this.addDropzone(svg,dropZoneNo,colourClass)}}},DragDropMarkersQuestion.prototype.addDropzone=function(svg,dropZoneNo,colourClass){var existingmarkertext,dropZone=this.visibleDropZones[dropZoneNo],shape=Shapes.make(dropZone.shape,""),bgRatio=this.bgRatio();if(shape.parse(dropZone.coords,bgRatio)){if((existingmarkertext=this.getRoot().find("div.markertexts span.markertext"+dropZoneNo)).length)""!==dropZone.markertext?existingmarkertext.html(dropZone.markertext):existingmarkertext.remove();else if(""!==dropZone.markertext){var classnames="markertext markertext"+dropZoneNo;this.getRoot().find("div.markertexts").append('&lt;span class="'+classnames+'"&gt;'+dropZone.markertext+"&lt;/span&gt;");var markerspan=this.getRoot().find("div.ddarea div.markertexts span.markertext"+dropZoneNo);if(markerspan.length){var handles=shape.getHandlePositions(),positionLeft=handles.moveHandle.x-markerspan.outerWidth()/2-4,positionTop=handles.moveHandle.y-markerspan.outerHeight()/2;markerspan.css("left",positionLeft).css("top",positionTop),markerspan.data("originX",markerspan.position().left/bgRatio).data("originY",markerspan.position().top/bgRatio),this.handleElementScale(markerspan,"center")}}var shapeSVG=shape.makeSvg(svg[0]);shapeSVG.setAttribute("class","dropzone "+colourClass),this.shapes[this.shapes.length]=shape,this.shapeSVGs[this.shapeSVGs.length]=shapeSVG}},DragDropMarkersQuestion.prototype.repositionDrags=function(){var root=this.getRoot(),thisQ=this;root.find("div.draghomes .marker").not(".dragplaceholder").each((function(key,item){$(item).addClass("unneeded")})),root.find("input.choices").each((function(key,input){var choiceNo=thisQ.getChoiceNoFromElement(input),imageCoords=thisQ.getImageCoords(input);if(imageCoords.length){var drag=thisQ.getRoot().find(".draghomes span.marker.choice"+choiceNo).not(".dragplaceholder");drag.remove();for(var i=0;i&lt;imageCoords.length;i++){var dragInDrop=drag.clone();const screenCoords=thisQ.convertToWindowXY(imageCoords[i]);dragInDrop.data("pagex",screenCoords.x).data("pagey",screenCoords.y),dragInDrop.data("imageCoords",imageCoords[i]),dragInDrop.data("scaleRatio",1),thisQ.sendDragToDrop(dragInDrop,!1,!0)}thisQ.getDragClone(drag).addClass("active"),thisQ.cloneDragIfNeeded(drag)}})),thisQ.questionAnswer=thisQ.getQuestionAnsweredValues()},DragDropMarkersQuestion.prototype.getQuestionAnsweredValues=function(){let result={};return this.getRoot().find("input.choices").each(((i,inputNode)=&gt;{result[inputNode.id]=inputNode.value})),result},DragDropMarkersQuestion.prototype.isQuestionInteracted=function(){const oldAnswer=this.questionAnswer,newAnswer=this.getQuestionAnsweredValues();let isInteracted=!1;return JSON.stringify(newAnswer)!==JSON.stringify(oldAnswer)?(isInteracted=!0,isInteracted):(Object.keys(newAnswer).forEach((key=&gt;{newAnswer[key]!==oldAnswer[key]&amp;&amp;(isInteracted=!0)})),isInteracted)},DragDropMarkersQuestion.prototype.getImageCoords=function(inputNode){var imageCoords=[],val=$(inputNode).val();if(""!==val)for(var coordsStrings=val.split(";"),i=0;i&lt;coordsStrings.length;i++)imageCoords[i]=Shapes.Point.parse(coordsStrings[i]);return imageCoords},DragDropMarkersQuestion.prototype.convertToWindowXY=function(point){var bgImage=this.bgImage();return point.offset(bgImage.offset().left+1,bgImage.offset().top+1)},DragDropMarkersQuestion.prototype.convertToBgImgXY=function(point){var bgImage=this.bgImage();return point.offset(-bgImage.offset().left-1,-bgImage.offset().top-1)},DragDropMarkersQuestion.prototype.coordsInBgImg=function(point){var bgImage=this.bgImage(),bgPosition=bgImage.offset();return point.x&gt;=bgPosition.left&amp;&amp;point.x&lt;bgPosition.left+bgImage.width()&amp;&amp;point.y&gt;=bgPosition.top&amp;&amp;point.y&lt;bgPosition.top+bgImage.height()},DragDropMarkersQuestion.prototype.getRoot=function(){return $(document.getElementById(this.containerId))},DragDropMarkersQuestion.prototype.bgImage=function(){return this.getRoot().find("img.dropbackground")},DragDropMarkersQuestion.prototype.handleDragStart=function(e){var thisQ=this,dragged=$(e.target).closest(".marker");if(dragDrop.prepare(e).start){if(dragged.addClass("beingdragged").css("transform",""),!!dragged.hasClass("unneeded")){var hiddenDrag=thisQ.getDragClone(dragged);hiddenDrag.length&amp;&amp;(hiddenDrag.addClass("active"),dragged.offset(hiddenDrag.offset()))}dragDrop.start(e,dragged,(function(){}),(function(x,y,dragged){thisQ.dragEnd(dragged)}))}},DragDropMarkersQuestion.prototype.dragEnd=function(dragged){var dragXY,placed=!1,choiceNo=this.getChoiceNoFromElement(dragged),bgRatio=this.bgRatio();if(dragged.data("pagex",dragged.offset().left).data("pagey",dragged.offset().top),dragXY=new Shapes.Point(dragged.data("pagex"),dragged.data("pagey")),this.coordsInBgImg(dragXY)){this.sendDragToDrop(dragged,!0),placed=!0,dragged.data("imageCoords")&amp;&amp;dragged.data("imageCoords",null);var bgImgXY=this.convertToBgImgXY(dragXY);bgImgXY=new Shapes.Point(bgImgXY.x/bgRatio,bgImgXY.y/bgRatio),dragged.data("originX",bgImgXY.x).data("originY",bgImgXY.y)}placed?this.cloneDragIfNeeded(dragged):(this.sendDragHome(dragged),this.removeDragIfNeeded(dragged)),this.saveCoordsForChoice(choiceNo)},DragDropMarkersQuestion.prototype.saveCoordsForChoice=function(choiceNo){let imageCoords=[];var items=this.getRoot().find("div.droparea span.marker.choice"+choiceNo),thiQ=this,bgRatio=this.bgRatio();items.length&amp;&amp;items.each((function(){var drag=$(this);if(drag.hasClass("beingdragged")||drag.data("imageCoords"))drag.data("imageCoords")&amp;&amp;(imageCoords[imageCoords.length]=drag.data("imageCoords"));else{drag.data("scaleRatio")!==bgRatio&amp;&amp;drag.data("pagex",drag.offset().left).data("pagey",drag.offset().top);var dragXY=new Shapes.Point(drag.data("pagex"),drag.data("pagey"));if(thiQ.coordsInBgImg(dragXY)){var bgImgXY=thiQ.convertToBgImgXY(dragXY);bgImgXY=new Shapes.Point(bgImgXY.x/bgRatio,bgImgXY.y/bgRatio),imageCoords[imageCoords.length]=bgImgXY}}})),this.getRoot().find("input.choice"+choiceNo).val(imageCoords.join(";")),this.isQuestionInteracted()&amp;&amp;(questionManager.handleFormDirty(),this.questionAnswer=this.getQuestionAnsweredValues())},DragDropMarkersQuestion.prototype.handleKeyPress=function(e){var drag=$(e.target).closest(".marker"),point=new Shapes.Point(drag.offset().left,drag.offset().top),choiceNo=this.getChoiceNoFromElement(drag);switch(e.keyCode){case keys.arrowLeft:case 65:point.x-=1;break;case keys.arrowRight:case 68:point.x+=1;break;case keys.arrowDown:case 83:point.y+=1;break;case keys.arrowUp:case 87:point.y-=1;break;case keys.space:case keys.escape:point=null;break;default:return}if(e.preventDefault(),null!==point){point=this.constrainToBgImg(point),drag.offset({left:point.x,top:point.y}),drag.data("pagex",drag.offset().left).data("pagey",drag.offset().top);var dragXY=this.convertToBgImgXY(new Shapes.Point(drag.data("pagex"),drag.data("pagey")));if(drag.data("originX",dragXY.x/this.bgRatio()).data("originY",dragXY.y/this.bgRatio()),this.coordsInBgImg(new Shapes.Point(drag.offset().left,drag.offset().top))&amp;&amp;drag.hasClass("unneeded")){this.sendDragToDrop(drag,!0);var hiddenDrag=this.getDragClone(drag);hiddenDrag.length&amp;&amp;hiddenDrag.addClass("active"),this.cloneDragIfNeeded(drag)}}else drag.css("left","").css("top",""),drag.data("pagex",drag.offset().left).data("pagey",drag.offset().top),this.sendDragHome(drag),this.removeDragIfNeeded(drag);drag.focus(),this.saveCoordsForChoice(choiceNo)},DragDropMarkersQuestion.prototype.constrainToBgImg=function(windowxy){var bgImg=this.bgImage(),bgImgXY=this.convertToBgImgXY(windowxy);return bgImgXY.x=Math.max(0,bgImgXY.x),bgImgXY.y=Math.max(0,bgImgXY.y),bgImgXY.x=Math.min(bgImg.width(),bgImgXY.x),bgImgXY.y=Math.min(bgImg.height(),bgImgXY.y),this.convertToWindowXY(bgImgXY)},DragDropMarkersQuestion.prototype.getChoiceNoFromElement=function(node){return Number(this.getClassnameNumericSuffix(node,"choice"))},DragDropMarkersQuestion.prototype.getClassnameNumericSuffix=function(node,prefix){var classes=$(node).attr("class");if(void 0!==classes&amp;&amp;""!==classes)for(var classesarr=classes.split(" "),index=0;index&lt;classesarr.length;index++){if(new RegExp("^"+prefix+"([0-9])+$").test(classesarr[index])){var match=new RegExp("([0-9])+$").exec(classesarr[index]);return Number(match[0])}}return null},DragDropMarkersQuestion.prototype.handleResize=function(){var thisQ=this,bgRatio=this.bgRatio();this.isPrinting&amp;&amp;(bgRatio=1),this.getRoot().find("div.droparea .marker").not(".beingdragged").each((function(key,drag){$(drag).css("left",parseFloat($(drag).data("originX"))*parseFloat(bgRatio)).css("top",parseFloat($(drag).data("originY"))*parseFloat(bgRatio)),thisQ.handleElementScale(drag,"left top")})),this.getRoot().find("div.droparea svg.dropzones").width(this.bgImage().width()).height(this.bgImage().height());for(var dropZoneNo=0;dropZoneNo&lt;this.visibleDropZones.length;dropZoneNo++){var originCoords=thisQ.visibleDropZones[dropZoneNo].coords,shape=thisQ.shapes[dropZoneNo],shapeSVG=thisQ.shapeSVGs[dropZoneNo];shape.parse(originCoords,bgRatio),shape.updateSvg(shapeSVG);var handles=shape.getHandlePositions(),markerSpan=this.getRoot().find("div.ddarea div.markertexts span.markertext"+dropZoneNo);markerSpan.css("left",handles.moveHandle.x-markerSpan.outerWidth()/2-4).css("top",handles.moveHandle.y-markerSpan.outerHeight()/2),thisQ.handleElementScale(markerSpan,"center")}},DragDropMarkersQuestion.prototype.cloneDrags=function(){var thisQ=this;this.getRoot().find("div.draghomes span.marker").each((function(index,draghome){var drag=$(draghome),placeHolder=drag.clone();placeHolder.removeClass(),placeHolder.addClass("marker"),placeHolder.addClass("choice"+thisQ.getChoiceNoFromElement(drag)),placeHolder.addClass(thisQ.getDragNoClass(drag,!1)),placeHolder.addClass("dragplaceholder"),drag.before(placeHolder)}))},DragDropMarkersQuestion.prototype.getDragNo=function(drag){return this.getClassnameNumericSuffix(drag,"dragno")},DragDropMarkersQuestion.prototype.getDragNoClass=function(drag,includeSelector){var className="dragno"+this.getDragNo(drag);return this.isInfiniteDrag(drag)&amp;&amp;(className="infinite"),includeSelector?"."+className:className},DragDropMarkersQuestion.prototype.getDragClone=function(drag){return this.getRoot().find(".draghomes span.marker.choice"+this.getChoiceNoFromElement(drag)+this.getDragNoClass(drag,!0)+".dragplaceholder")},DragDropMarkersQuestion.prototype.dropArea=function(){return this.getRoot().find("div.droparea")},DragDropMarkersQuestion.prototype.sendDragHome=function(drag){drag.removeClass("beingdragged").addClass("unneeded").css("top","").css("left","").css("transform","");var placeHolder=this.getDragClone(drag);placeHolder.after(drag),placeHolder.removeClass("active")},DragDropMarkersQuestion.prototype.sendDragToDrop=function(drag,isScaling){let initialLoad=arguments.length&gt;2&amp;&amp;void 0!==arguments[2]&amp;&amp;arguments[2];var dropArea=this.dropArea(),bgRatio=this.bgRatio();drag.removeClass("beingdragged").removeClass("unneeded");var dragXY=this.convertToBgImgXY(new Shapes.Point(drag.data("pagex"),drag.data("pagey")));isScaling?(drag.data("originX",dragXY.x/bgRatio).data("originY",dragXY.y/bgRatio),drag.css("left",dragXY.x).css("top",dragXY.y)):(drag.data("originX",dragXY.x).data("originY",dragXY.y),drag.css("left",dragXY.x*bgRatio).css("top",dragXY.y*bgRatio)),initialLoad||drag.data("scaleRatio",bgRatio),dropArea.append(drag),this.handleElementScale(drag,"left top")},DragDropMarkersQuestion.prototype.cloneDragIfNeeded=function(drag){var inputNode=this.getInput(drag),noOfDrags=Number(this.getClassnameNumericSuffix(inputNode,"noofdrags")),displayedDragsInDropArea=this.getRoot().find("div.droparea .marker.choice"+this.getChoiceNoFromElement(drag)+this.getDragNoClass(drag,!0)).length,displayedDragsInDragHomes=this.getRoot().find("div.draghomes .marker.choice"+this.getChoiceNoFromElement(drag)+this.getDragNoClass(drag,!0)).not(".dragplaceholder").length;if((this.isInfiniteDrag(drag)||!this.isInfiniteDrag(drag)&amp;&amp;displayedDragsInDropArea&lt;noOfDrags)&amp;&amp;0===displayedDragsInDragHomes){var dragClone=drag.clone();dragClone.addClass("unneeded").css("top","").css("left","").css("transform",""),this.getDragClone(drag).removeClass("active").after(dragClone),questionManager.addEventHandlersToMarker(dragClone)}},DragDropMarkersQuestion.prototype.removeDragIfNeeded=function(drag){for(var dragsInHome=this.getRoot().find("div.draghomes .marker.choice"+this.getChoiceNoFromElement(drag)+this.getDragNoClass(drag,!0)).not(".dragplaceholder"),displayedDrags=dragsInHome.length;displayedDrags&gt;1;)dragsInHome.first().remove(),displayedDrags--},DragDropMarkersQuestion.prototype.getInput=function(drag){var choiceNo=this.getChoiceNoFromElement(drag);return this.getRoot().find("input.choices.choice"+choiceNo)},DragDropMarkersQuestion.prototype.bgRatio=function(){var bgImg=this.bgImage(),bgImgNaturalWidth=bgImg.get(0).naturalWidth;return bgImg.width()/bgImgNaturalWidth},DragDropMarkersQuestion.prototype.handleElementScale=function(element,type){var bgRatio=parseFloat(this.bgRatio());this.isPrinting&amp;&amp;(bgRatio=1),$(element).css({"-webkit-transform":"scale("+bgRatio+")","-moz-transform":"scale("+bgRatio+")","-ms-transform":"scale("+bgRatio+")","-o-transform":"scale("+bgRatio+")",transform:"scale("+bgRatio+")","transform-origin":type})},DragDropMarkersQuestion.prototype.isInfiniteDrag=function(drag){return drag.hasClass("infinite")},DragDropMarkersQuestion.prototype.waitForAllImagesToBeLoaded=function(){this.allImagesLoaded||(null!==this.imageLoadingTimeoutId&amp;&amp;clearTimeout(this.imageLoadingTimeoutId),this.getNotYetLoadedImages().length&gt;0?this.imageLoadingTimeoutId=setTimeout((function(){this.waitForAllImagesToBeLoaded()}),100):(this.allImagesLoaded=!0,this.cloneDrags(),this.repositionDrags(),this.drawDropzones()))},DragDropMarkersQuestion.prototype.getNotYetLoadedImages=function(){return this.getRoot().find(".ddmarker img.dropbackground").not((function(i,imgNode){return this.imageIsLoaded(imgNode)}))},DragDropMarkersQuestion.prototype.imageIsLoaded=function(imgElement){return imgElement.complete&amp;&amp;0!==imgElement.naturalHeight};var questionManager={eventHandlersInitialised:!1,markerEventHandlersInitialised:{},isPrinting:!1,isKeyboardNavigation:!1,questions:{},init:function(containerId,readOnly,visibleDropZones){if(questionManager.questions[containerId]=new DragDropMarkersQuestion(containerId,readOnly,visibleDropZones),questionManager.eventHandlersInitialised||(questionManager.setupEventHandlers(),questionManager.eventHandlersInitialised=!0),!questionManager.markerEventHandlersInitialised.hasOwnProperty(containerId)){questionManager.markerEventHandlersInitialised[containerId]=!0;var questionContainer=document.getElementById(containerId);questionContainer.classList.contains("ddmarker")&amp;&amp;!questionContainer.classList.contains("qtype_ddmarker-readonly")&amp;&amp;(questionManager.addEventHandlersToMarker($(questionContainer).find("div.draghomes .marker")),questionManager.addEventHandlersToMarker($(questionContainer).find("div.droparea .marker")))}},setupEventHandlers:function(){$(window).on("resize",(function(){questionManager.handleWindowResize(!1)})),window.addEventListener("beforeprint",(function(){questionManager.isPrinting=!0,questionManager.handleWindowResize(questionManager.isPrinting)})),window.addEventListener("afterprint",(function(){questionManager.isPrinting=!1,questionManager.handleWindowResize(questionManager.isPrinting)})),setTimeout((function(){questionManager.fixLayoutIfThingsMoved()}),100)},addEventHandlersToMarker:function(element){element.on("mousedown touchstart",questionManager.handleDragStart).on("keydown keypress",questionManager.handleKeyPress).focusin((function(e){questionManager.handleKeyboardFocus(e,!0)})).focusout((function(e){questionManager.handleKeyboardFocus(e,!1)}))},handleDragStart:function(e){e.preventDefault();var question=questionManager.getQuestionForEvent(e);question&amp;&amp;question.handleDragStart(e)},handleKeyPress:function(e){var question=questionManager.getQuestionForEvent(e);question&amp;&amp;question.handleKeyPress(e)},handleWindowResize:function(isPrinting){for(var containerId in questionManager.questions)questionManager.questions.hasOwnProperty(containerId)&amp;&amp;(questionManager.questions[containerId].isPrinting=isPrinting,questionManager.questions[containerId].handleResize())},handleKeyboardFocus:function(e,isNavigating){questionManager.isKeyboardNavigation=isNavigating},fixLayoutIfThingsMoved:function(){questionManager.isKeyboardNavigation||this.handleWindowResize(questionManager.isPrinting),setTimeout((function(){questionManager.fixLayoutIfThingsMoved(questionManager.isPrinting)}),100)},getQuestionForEvent:function(e){var containerId=$(e.currentTarget).closest(".que.ddmarker").attr("id");return questionManager.questions[containerId]},handleFormDirty:function(){const responseForm=document.getElementById("responseform");FormChangeChecker.markFormAsDirty(responseForm)}};return{init:questionManager.init}}));
/**
 * JavaScript to make drag-drop into text questions work.
 *
 * Some vocabulary to help understand this code:
 *
 * The question text contains 'drops' - blanks into which the 'drags', the missing
 * words, can be put.
 *
 * The thing that can be moved into the drops are called 'drags'. There may be
 * multiple copies of the 'same' drag which does not really cause problems.
 * Each drag has a 'choice' number which is the value set on the drop's hidden
 * input when this drag is placed in a drop.
 *
 * These may be in separate 'groups', distinguished by colour.
 * Things can only interact with other things in the same group.
 * The groups are numbered from 1.
 *
 * The place where a given drag started from is called its 'home'.
 *
 * @module     qtype_ddwtos/ddwtos
 * @copyright  2018 The Open University
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.6
 */
define("qtype_ddwtos/ddwtos",["jquery","core/dragdrop","core/key_codes","core_form/changechecker"],(function($,dragDrop,keys,FormChangeChecker){function DragDropToTextQuestion(containerId,readOnly){this.containerId=containerId,this.questionAnswer={},readOnly&amp;&amp;this.getRoot().addClass("qtype_ddwtos-readonly"),this.resizeAllDragsAndDrops(),this.cloneDrags(),this.positionDrags()}DragDropToTextQuestion.prototype.resizeAllDragsAndDrops=function(){var thisQ=this;this.getRoot().find(".answercontainer &gt; div").each((function(i,node){thisQ.resizeAllDragsAndDropsInGroup(thisQ.getClassnameNumericSuffix($(node),"draggrouphomes"))}))},DragDropToTextQuestion.prototype.resizeAllDragsAndDropsInGroup=function(group){var thisQ=this,dragHomes=this.getRoot().find(".draggrouphomes"+group+" span.draghome"),maxWidth=0,maxHeight=0;dragHomes.each((function(i,drag){maxWidth=Math.max(maxWidth,Math.ceil(drag.offsetWidth)),maxHeight=Math.max(maxHeight,Math.ceil(0+drag.offsetHeight))})),maxWidth+=8,maxHeight+=2,dragHomes.each((function(i,drag){thisQ.setElementSize(drag,maxWidth,maxHeight)})),this.getRoot().find("span.drop.group"+group).each((function(i,drop){thisQ.setElementSize(drop,maxWidth,maxHeight)}))},DragDropToTextQuestion.prototype.setElementSize=function(element,width,height){$(element).width(width).height(height).css("lineHeight",height+"px")},DragDropToTextQuestion.prototype.cloneDrags=function(){var thisQ=this;thisQ.getRoot().find("span.draghome").each((function(index,draghome){var drag=$(draghome),placeHolder=drag.clone();placeHolder.removeClass(),placeHolder.addClass("draghome choice"+thisQ.getChoice(drag)+" group"+thisQ.getGroup(drag)+" dragplaceholder"),drag.before(placeHolder)}))},DragDropToTextQuestion.prototype.positionDrags=function(){var thisQ=this,root=this.getRoot();root.find("span.draghome").not(".dragplaceholder").each((function(i,dragNode){var drag=$(dragNode),currentPlace=thisQ.getClassnameNumericSuffix(drag,"inplace");drag.addClass("unplaced").removeClass("placed"),drag.removeAttr("tabindex"),null!==currentPlace&amp;&amp;drag.removeClass("inplace"+currentPlace)})),root.find("input.placeinput").each((function(i,inputNode){var input=$(inputNode),choice=input.val(),place=thisQ.getPlace(input),drop=root.find(".drop.place"+place),dropPosition=drop.offset();if(drop.data("prev-top",dropPosition.top).data("prev-left",dropPosition.left),"0"!==choice){var unplacedDrag=thisQ.getUnplacedChoice(thisQ.getGroup(input),choice),hiddenDrag=thisQ.getDragClone(unplacedDrag);if(hiddenDrag.length)if(unplacedDrag.hasClass("infinite")){var noOfDrags=thisQ.noOfDropsInGroup(thisQ.getGroup(unplacedDrag));if(thisQ.getInfiniteDragClones(unplacedDrag,!1).length&lt;noOfDrags){var cloneDrag=unplacedDrag.clone();hiddenDrag.after(cloneDrag),questionManager.addEventHandlersToDrag(cloneDrag)}else hiddenDrag.addClass("active")}else hiddenDrag.addClass("active");thisQ.sendDragToDrop(thisQ.getUnplacedChoice(thisQ.getGroup(input),choice),drop)}})),thisQ.questionAnswer=thisQ.getQuestionAnsweredValues()},DragDropToTextQuestion.prototype.getQuestionAnsweredValues=function(){let result={};return this.getRoot().find("input.placeinput").each(((i,inputNode)=&gt;{result[inputNode.id]=inputNode.value})),result},DragDropToTextQuestion.prototype.isQuestionInteracted=function(){const oldAnswer=this.questionAnswer,newAnswer=this.getQuestionAnsweredValues();let isInteracted=!1;return JSON.stringify(newAnswer)!==JSON.stringify(oldAnswer)?(isInteracted=!0,isInteracted):(Object.keys(newAnswer).forEach((key=&gt;{newAnswer[key]!==oldAnswer[key]&amp;&amp;(isInteracted=!0)})),isInteracted)},DragDropToTextQuestion.prototype.handleDragStart=function(e){var thisQ=this,drag=$(e.target).closest(".draghome");if(dragDrop.prepare(e).start&amp;&amp;!drag.hasClass("beingdragged")){drag.addClass("beingdragged");var currentPlace=this.getClassnameNumericSuffix(drag,"inplace");if(null!==currentPlace){this.setInputValue(currentPlace,0),drag.removeClass("inplace"+currentPlace);var hiddenDrop=thisQ.getDrop(drag,currentPlace);hiddenDrop.length&amp;&amp;(hiddenDrop.addClass("active"),drag.offset(hiddenDrop.offset()))}else{var hiddenDrag=thisQ.getDragClone(drag);if(hiddenDrag.length)if(drag.hasClass("infinite")){var noOfDrags=this.noOfDropsInGroup(this.getGroup(drag));if(this.getInfiniteDragClones(drag,!1).length&lt;noOfDrags){var cloneDrag=drag.clone();cloneDrag.removeClass("beingdragged"),hiddenDrag.after(cloneDrag),questionManager.addEventHandlersToDrag(cloneDrag),drag.offset(cloneDrag.offset())}else hiddenDrag.addClass("active"),drag.offset(hiddenDrag.offset())}else hiddenDrag.addClass("active"),drag.offset(hiddenDrag.offset())}dragDrop.start(e,drag,(function(x,y,drag){thisQ.dragMove(x,y,drag)}),(function(x,y,drag){thisQ.dragEnd(x,y,drag)}))}},DragDropToTextQuestion.prototype.dragMove=function(pageX,pageY,drag){var thisQ=this;this.getRoot().find("span.group"+this.getGroup(drag)).not(".beingdragged").each((function(i,dropNode){var drop=$(dropNode);thisQ.isPointInDrop(pageX,pageY,drop)?drop.addClass("valid-drag-over-drop"):drop.removeClass("valid-drag-over-drop")}))},DragDropToTextQuestion.prototype.dragEnd=function(pageX,pageY,drag){var thisQ=this,root=this.getRoot(),placed=!1;root.find("span.group"+this.getGroup(drag)).not(".beingdragged").each((function(i,dropNode){if(placed)return!1;const dropZone=$(dropNode);if(!thisQ.isPointInDrop(pageX,pageY,dropZone))return!0;let drop=null;return dropZone.hasClass("placed")?(dropZone.removeClass("valid-drag-over-drop"),drop=thisQ.getDrop(drag,thisQ.getClassnameNumericSuffix(dropZone,"inplace"))):drop=dropZone,drop.removeClass("valid-drag-over-drop"),thisQ.sendDragToDrop(drag,drop),placed=!0,!1})),placed||this.sendDragHome(drag)},DragDropToTextQuestion.prototype.sendDragToDrop=function(drag,drop){if(null!==this.getPlace(drop)){var oldDrag=this.getCurrentDragInPlace(this.getPlace(drop));if(0!==oldDrag.length){var currentPlace=this.getClassnameNumericSuffix(oldDrag,"inplace");if(this.hasDropSameDrag(currentPlace,drop,oldDrag,drag))return void this.sendDragHome(drag);var hiddenDrop=this.getDrop(oldDrag,currentPlace);hiddenDrop.addClass("active"),oldDrag.addClass("beingdragged"),oldDrag.offset(hiddenDrop.offset()),this.sendDragHome(oldDrag)}if(0===drag.length)this.setInputValue(this.getPlace(drop),0),drop.data("isfocus")&amp;&amp;drop.focus();else{if(this.getClassnameNumericSuffix(drag,"inplace"))return;this.setInputValue(this.getPlace(drop),this.getChoice(drag)),drag.removeClass("unplaced").addClass("placed inplace"+this.getPlace(drop)),drag.attr("tabindex",0),this.animateTo(drag,drop)}}else this.sendDragHome(drag)},DragDropToTextQuestion.prototype.hasDropSameDrag=function(currentPlace,drop,oldDrag,drag){return!!drag.hasClass("infinite")&amp;&amp;(drop.hasClass("place"+currentPlace)&amp;&amp;this.getGroup(drag)===this.getGroup(drop)&amp;&amp;this.getChoice(drag)===this.getChoice(oldDrag)&amp;&amp;this.getGroup(drag)===this.getGroup(oldDrag))},DragDropToTextQuestion.prototype.sendDragHome=function(drag){var currentPlace=this.getClassnameNumericSuffix(drag,"inplace");null!==currentPlace&amp;&amp;drag.removeClass("inplace"+currentPlace),drag.data("unplaced",!0),this.animateTo(drag,this.getDragHome(this.getGroup(drag),this.getChoice(drag)))},DragDropToTextQuestion.prototype.handleKeyPress=function(e){var drop=$(e.target).closest(".drop");if(0===drop.length){var placedDrag=$(e.target),currentPlace=this.getClassnameNumericSuffix(placedDrag,"inplace");null!==currentPlace&amp;&amp;(drop=this.getDrop(placedDrag,currentPlace))}var currentDrag=this.getCurrentDragInPlace(this.getPlace(drop)),nextDrag=$();switch(e.keyCode){case keys.space:case keys.arrowRight:case keys.arrowDown:nextDrag=this.getNextDrag(this.getGroup(drop),currentDrag);break;case keys.arrowLeft:case keys.arrowUp:nextDrag=this.getPreviousDrag(this.getGroup(drop),currentDrag);break;case keys.escape:break;default:return void(questionManager.isKeyboardNavigation=!1)}if(nextDrag.length){nextDrag.data("isfocus",!0),nextDrag.addClass("beingdragged");var hiddenDrag=this.getDragClone(nextDrag);if(hiddenDrag.length)if(nextDrag.hasClass("infinite")){var noOfDrags=this.noOfDropsInGroup(this.getGroup(nextDrag));if(this.getInfiniteDragClones(nextDrag,!1).length&lt;noOfDrags){var cloneDrag=nextDrag.clone();cloneDrag.removeClass("beingdragged"),cloneDrag.removeAttr("tabindex"),hiddenDrag.after(cloneDrag),questionManager.addEventHandlersToDrag(cloneDrag),nextDrag.offset(cloneDrag.offset())}else hiddenDrag.addClass("active"),nextDrag.offset(hiddenDrag.offset())}else hiddenDrag.addClass("active"),nextDrag.offset(hiddenDrag.offset())}else drop.data("isfocus",!0);e.preventDefault(),this.sendDragToDrop(nextDrag,drop)},DragDropToTextQuestion.prototype.getNextDrag=function(group,drag){var choice,numChoices=this.noOfChoicesInGroup(group);choice=0===drag.length?1:this.getChoice(drag)+1;for(var next=this.getUnplacedChoice(group,choice);0===next.length&amp;&amp;choice&lt;numChoices;)choice++,next=this.getUnplacedChoice(group,choice);return next},DragDropToTextQuestion.prototype.getPreviousDrag=function(group,drag){var choice;choice=0===drag.length?this.noOfChoicesInGroup(group):this.getChoice(drag)-1;for(var previous=this.getUnplacedChoice(group,choice);0===previous.length&amp;&amp;choice&gt;1;)choice--,previous=this.getUnplacedChoice(group,choice);return previous},DragDropToTextQuestion.prototype.animateTo=function(drag,target){var currentPos=drag.offset(),targetPos=target.offset(),thisQ=this;M.util.js_pending("qtype_ddwtos-animate-"+thisQ.containerId),drag.animate({left:parseInt(drag.css("left"))+targetPos.left-currentPos.left,top:parseInt(drag.css("top"))+targetPos.top-currentPos.top},{duration:"fast",done:function(){$("body").trigger("qtype_ddwtos-dragmoved",[drag,target,thisQ]),M.util.js_complete("qtype_ddwtos-animate-"+thisQ.containerId)}})},DragDropToTextQuestion.prototype.isPointInDrop=function(pageX,pageY,drop){var position=drop.offset();return pageX&gt;=position.left&amp;&amp;pageX&lt;position.left+drop.width()&amp;&amp;pageY&gt;=position.top&amp;&amp;pageY&lt;position.top+drop.height()},DragDropToTextQuestion.prototype.setInputValue=function(place,choice){this.getRoot().find("input.placeinput.place"+place).val(choice)},DragDropToTextQuestion.prototype.getRoot=function(){return $(document.getElementById(this.containerId))},DragDropToTextQuestion.prototype.getDragHome=function(group,choice){return this.getRoot().find(".draghome.dragplaceholder.group"+group+".choice"+choice).is(":visible")?this.getRoot().find(".draghome.dragplaceholder.group"+group+".choice"+choice):this.getRoot().find(".draggrouphomes"+group+" span.draghome.infinite.choice"+choice+".group"+group)},DragDropToTextQuestion.prototype.getUnplacedChoice=function(group,choice){return this.getRoot().find(".draghome.group"+group+".choice"+choice+".unplaced").slice(0,1)},DragDropToTextQuestion.prototype.getCurrentDragInPlace=function(place){return this.getRoot().find("span.draghome.inplace"+place)},DragDropToTextQuestion.prototype.noOfDropsInGroup=function(group){return this.getRoot().find(".drop.group"+group).length},DragDropToTextQuestion.prototype.noOfChoicesInGroup=function(group){return this.getRoot().find(".draghome.group"+group).length},DragDropToTextQuestion.prototype.getClassnameNumericSuffix=function(node,prefix){var classes=node.attr("class");if(void 0!==classes&amp;&amp;""!==classes)for(var classesArr=classes.split(" "),index=0;index&lt;classesArr.length;index++){if(new RegExp("^"+prefix+"([0-9])+$").test(classesArr[index])){var match=new RegExp("([0-9])+$").exec(classesArr[index]);return Number(match[0])}}return null},DragDropToTextQuestion.prototype.getChoice=function(drag){return this.getClassnameNumericSuffix(drag,"choice")},DragDropToTextQuestion.prototype.getGroup=function(node){return this.getClassnameNumericSuffix(node,"group")},DragDropToTextQuestion.prototype.getPlace=function(node){return this.getClassnameNumericSuffix(node,"place")},DragDropToTextQuestion.prototype.getDragClone=function(drag){return this.getRoot().find(".draggrouphomes"+this.getGroup(drag)+" span.draghome.choice"+this.getChoice(drag)+".group"+this.getGroup(drag)+".dragplaceholder")},DragDropToTextQuestion.prototype.getInfiniteDragClones=function(drag,inHome){return inHome?this.getRoot().find(".draggrouphomes"+this.getGroup(drag)+" span.draghome.choice"+this.getChoice(drag)+".group"+this.getGroup(drag)+".infinite").not(".dragplaceholder"):this.getRoot().find("span.draghome.choice"+this.getChoice(drag)+".group"+this.getGroup(drag)+".infinite").not(".dragplaceholder")},DragDropToTextQuestion.prototype.getDrop=function(drag,currentPlace){return this.getRoot().find(".drop.group"+this.getGroup(drag)+".place"+currentPlace)};var questionManager={eventHandlersInitialised:!1,dragEventHandlersInitialised:{},isKeyboardNavigation:!1,questions:{},init:function(containerId,readOnly){if(questionManager.questions[containerId]=new DragDropToTextQuestion(containerId,readOnly),questionManager.eventHandlersInitialised||(questionManager.setupEventHandlers(),questionManager.eventHandlersInitialised=!0),!questionManager.dragEventHandlersInitialised.hasOwnProperty(containerId)){questionManager.dragEventHandlersInitialised[containerId]=!0;var questionContainer=document.getElementById(containerId);questionContainer.classList.contains("ddwtos")&amp;&amp;!questionContainer.classList.contains("qtype_ddwtos-readonly")&amp;&amp;questionManager.addEventHandlersToDrag($(questionContainer).find("span.draghome"))}},setupEventHandlers:function(){$("body").on("keydown",".que.ddwtos:not(.qtype_ddwtos-readonly) span.drop",questionManager.handleKeyPress).on("keydown",".que.ddwtos:not(.qtype_ddwtos-readonly) span.draghome.placed:not(.beingdragged)",questionManager.handleKeyPress).on("qtype_ddwtos-dragmoved",questionManager.handleDragMoved)},addEventHandlersToDrag:function(element){element.unbind("mousedown touchstart"),element.on("mousedown touchstart",questionManager.handleDragStart)},handleDragStart:function(e){e.preventDefault();var question=questionManager.getQuestionForEvent(e);question&amp;&amp;question.handleDragStart(e)},handleKeyPress:function(e){if(!questionManager.isKeyboardNavigation){questionManager.isKeyboardNavigation=!0;var question=questionManager.getQuestionForEvent(e);question&amp;&amp;question.handleKeyPress(e)}},getQuestionForEvent:function(e){var containerId=$(e.currentTarget).closest(".que.ddwtos").attr("id");return questionManager.questions[containerId]},handleDragMoved:function(e,drag,target,thisQ){drag.removeClass("beingdragged"),drag.css("top","").css("left",""),target.after(drag),target.removeClass("active"),void 0!==drag.data("unplaced")&amp;&amp;!0===drag.data("unplaced")&amp;&amp;(drag.removeClass("placed").addClass("unplaced"),drag.removeAttr("tabindex"),drag.removeData("unplaced"),drag.hasClass("infinite")&amp;&amp;thisQ.getInfiniteDragClones(drag,!0).length&gt;1&amp;&amp;thisQ.getInfiniteDragClones(drag,!0).first().remove()),void 0!==drag.data("isfocus")&amp;&amp;!0===drag.data("isfocus")&amp;&amp;(drag.focus(),drag.removeData("isfocus")),void 0!==target.data("isfocus")&amp;&amp;!0===target.data("isfocus")&amp;&amp;target.removeData("isfocus"),questionManager.isKeyboardNavigation&amp;&amp;(questionManager.isKeyboardNavigation=!1),thisQ.isQuestionInteracted()&amp;&amp;(questionManager.handleFormDirty(),thisQ.questionAnswer=thisQ.getQuestionAnsweredValues())},handleFormDirty:function(){const responseForm=document.getElementById("responseform");FormChangeChecker.markFormAsDirty(responseForm)}};return{init:questionManager.init}}));
define("qtype_multianswer/feedback",["exports","theme_boost/popover","jquery"],(function(_exports,_popover,_jquery){var obj;
/**
   * Backward compatibility file for the old popover.js
   *
   * @module     qtype_multianswer/feedback
   * @copyright  2023 Jun Pataleta &lt;jun@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_jquery=(obj=_jquery)&amp;&amp;obj.__esModule?obj:{default:obj};const SELECTORS_FEEDBACK_TRIGGER='.feedbacktrigger[data-toggle="popover"]';let feedbackInitialised=!1;var _default={initPopovers:()=&gt;{feedbackInitialised||((0,_jquery.default)(SELECTORS_FEEDBACK_TRIGGER).popover(),document.addEventListener("click",(e=&gt;{e.target.closest(SELECTORS_FEEDBACK_TRIGGER)&amp;&amp;e.preventDefault()})),feedbackInitialised=!0)}};return _exports.default=_default,_exports.default}));
define("qtype_multichoice/answers",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0;
/**
   * Handles events related to the multiple-choice question type answers.
   *
   * @module     qtype_multichoice/answers
   * @copyright  2020 Jun Pataleta &lt;jun@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */
const SELECTORS_ANSWER_LABEL="[data-region=answer-label]";var _default={init:rootId=&gt;{const root=document.getElementById(rootId);root.querySelectorAll(SELECTORS_ANSWER_LABEL).forEach((answerLabel=&gt;{answerLabel.addEventListener("click",(e=&gt;{const labelId=e.currentTarget.id;root.querySelector('[aria-labelledby="'.concat(labelId,'"]')).click()}))}))}};return _exports.default=_default,_exports.default}));
/**
 * Manages 'Clear my choice' functionality actions.
 *
 * @module     qtype_multichoice/clearchoice
 * @copyright  2019 Simey Lameze &lt;simey@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.7
 */
define("qtype_multichoice/clearchoice",["jquery","core/custom_interaction_events"],(function($,CustomEvents){var SELECTORS_CHOICE_ELEMENT=".answer input",SELECTORS_LINK="a",SELECTORS_RADIO='input[type="radio"]',registerEventListeners=function(root,fieldPrefix){var clearChoiceContainer=function(root,fieldPrefix){return root.find('div[id="'+fieldPrefix+'"]')}(root,fieldPrefix);clearChoiceContainer.on(CustomEvents.events.activate,SELECTORS_LINK,(function(e,data){!function(clearChoiceContainer){clearChoiceContainer.find(SELECTORS_RADIO).prop("disabled",!1).prop("checked",!0)}(clearChoiceContainer),function(clearChoiceContainer){clearChoiceContainer.addClass("sr-only"),clearChoiceContainer.attr("aria-hidden",!0),clearChoiceContainer.find(SELECTORS_LINK).attr("tabindex",-1)}(clearChoiceContainer),data.originalEvent.preventDefault()})),root.on("change",SELECTORS_CHOICE_ELEMENT,(function(){!function(clearChoiceContainer){clearChoiceContainer.removeClass("sr-only"),clearChoiceContainer.removeAttr("aria-hidden"),clearChoiceContainer.find(SELECTORS_LINK).attr("tabindex",0),clearChoiceContainer.find(SELECTORS_RADIO).prop("disabled",!0)}(clearChoiceContainer)})),clearChoiceContainer.find(SELECTORS_RADIO).focus((function(){root.find(SELECTORS_CHOICE_ELEMENT).first().focus()}))};return{init:function(root,fieldPrefix){root=$("#"+root),registerEventListeners(root,fieldPrefix)}}}));
/**
 * A javascript module to handle the real-time validation of the input the student types
 * into STACK questions.
 *
 * The overall way this works is as follows:
 *
 *  - right at the end of this file are the init methods, which set things up.
 *  - The work common to all input types is done by StackInput.
 *     - Sending the Ajax request.
 *     - Updating the validation display.
 *  - The work specific to different input types (getting the content of the inputs) is done by
 *    the classes like
 *     - StackSimpleInput
 *     - StackTextareaInput
 *     - StackMatrixInput
 *    objects of these types need to implement the two methods addEventHandlers and getValue().
 *
 * @module     qtype_stack/input
 * @copyright  2018 The Open University
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("qtype_stack/input",["core/ajax","core_filters/events"],(function(Ajax,CustomEvents){function StackInput(validationDiv,prefix,qaid,name,input,language){var TYPING_DELAY=1e3,delayTimeoutHandle=null,validationResults={},lastValidatedValue=getInputValue();function cancelTypingDelay(){delayTimeoutHandle&amp;&amp;clearTimeout(delayTimeoutHandle),delayTimeoutHandle=null}function valueChanging(){cancelTypingDelay(),showWaiting(),delayTimeoutHandle=setTimeout(valueChanged,TYPING_DELAY),setTimeout((function(){checkNoChange()}),0)}function checkNoChange(){getInputValue()===lastValidatedValue&amp;&amp;(cancelTypingDelay(),validationDiv.classList.remove("waiting"))}function valueChanged(){cancelTypingDelay(),showValidationResults()||validateInput()}function validateInput(){Ajax.call([{methodname:"qtype_stack_validate_input",args:{qaid:qaid,name:name,input:getInputValue(),lang:language},done:function(response){validationReceived(response)},fail:function(response){showValidationFailure(response)}}]),showLoading()}function getInputValue(){return input.getValue()}function validationReceived(response){"invalid"!==response.status?(validationResults[response.input]=response,showValidationResults()):showValidationFailure(response)}function extractScripts(html,scriptCommands){for(var result,scriptregexp=/&lt;script[^&gt;]*&gt;([\s\S]*?)&lt;\/script&gt;/g;null!==(result=scriptregexp.exec(html));)scriptCommands.push(result[1]);return html.replace(scriptregexp,"")}function showValidationResults(){var val=getInputValue();if(!validationResults[val])return showWaiting(),!1;var results=validationResults[val];lastValidatedValue=val;var scriptCommands=[];validationDiv.innerHTML=extractScripts(results.message,scriptCommands);for(var i=0;i&lt;scriptCommands.length;i++)eval(scriptCommands[i]);return removeAllClasses(),results.message||validationDiv.classList.add("empty"),CustomEvents.notifyFilterContentUpdated(validationDiv),!0}function showValidationFailure(response){lastValidatedValue="",validationDiv.innerHTML=response.message,removeAllClasses(),validationDiv.classList.add("error"),CustomEvents.notifyFilterContentUpdated(validationDiv)}function showLoading(){removeAllClasses(),validationDiv.classList.add("loading")}function showWaiting(){removeAllClasses(),validationDiv.classList.add("waiting")}function removeAllClasses(){validationDiv.classList.remove("empty"),validationDiv.classList.remove("error"),validationDiv.classList.remove("loading"),validationDiv.classList.remove("waiting")}input.addEventHandlers(valueChanging)}function StackSimpleInput(input){this.addEventHandlers=function(valueChanging){input.addEventListener("input",valueChanging)},this.getValue=function(){return input.value.replace(/^\s+|\s+$/g,"")}}function StackTextareaInput(textarea){this.addEventHandlers=function(valueChanging){textarea.addEventListener("input",valueChanging)},this.getValue=function(){return textarea.value.replace(/^\s+|\s+$/g,"").split(/\s*[\r\n]\s*/).join("&lt;br&gt;")}}function StackRadioInput(container){this.addEventHandlers=function(valueChanging){container.addEventListener("input",valueChanging)},this.getValue=function(){var selected=container.querySelector(":checked");return selected?selected.value:""}}function StackCheckboxInput(container){this.addEventHandlers=function(valueChanging){container.addEventListener("input",valueChanging)},this.getValue=function(){for(var selected=container.querySelectorAll(":checked"),result=[],i=0;i&lt;selected.length;i++)result[i]=selected[i].value;return result.length&gt;0?result.join(","):""}}function StackMatrixInput(idPrefix,container){var numcol=0,numrow=0;container.querySelectorAll("input[type=text]").forEach((function(element){if(element.name.slice(0,idPrefix.length+5)===idPrefix+"_sub_"){var bits=element.name.substring(idPrefix.length+5).split("_");numrow=Math.max(numrow,parseInt(bits[0],10)+1),numcol=Math.max(numcol,parseInt(bits[1],10)+1)}})),this.addEventHandlers=function(valueChanging){container.addEventListener("input",valueChanging)},this.getValue=function(){for(var values=new Array(numrow),i=0;i&lt;numrow;i++)values[i]=new Array(numcol);return container.querySelectorAll("input[type=text]").forEach((function(element){if(element.name.slice(0,idPrefix.length+5)===idPrefix+"_sub_"){var bits=element.name.substring(idPrefix.length+5).split("_");values[bits[0]][bits[1]]=element.value.replace(/^\s+|\s+$/g,"")}})),JSON.stringify(values)}}function initInputs(questionDivId,prefix,qaid,inputs){var questionDiv=document.getElementById(questionDivId),language=null,langInput=document.getElementsByName(prefix+"step_lang");langInput.length&gt;0&amp;&amp;langInput[0].value&amp;&amp;(language=langInput[0].value);for(var allok=!0,i=0;i&lt;inputs.length;i++)allok=initInput(questionDiv,prefix,qaid,inputs[i],language)&amp;&amp;allok;allok&amp;&amp;(questionDiv.classList.contains("dfexplicitvaildate")||questionDiv.classList.contains("dfcbmexplicitvaildate"))&amp;&amp;(questionDiv.querySelector(".im-controls input.submit, .im-controls button.submit").hidden=!0)}function initInput(questionDiv,prefix,qaid,name,language){var validationDiv=document.getElementById(prefix+name+"_val");if(!validationDiv)return!1;var inputTypeHandler=getInputTypeHandler(questionDiv,prefix,name);return!!inputTypeHandler&amp;&amp;(new StackInput(validationDiv,prefix,qaid,name,inputTypeHandler,language),!0)}function getInputTypeHandler(questionDiv,prefix,name){var input=questionDiv.querySelector('[name="'+prefix+name+'"]');if(input)return"TEXTAREA"===input.nodeName?new StackTextareaInput(input):"radio"===input.type?new StackRadioInput(input.closest(".answer")):new StackSimpleInput(input);if((input=questionDiv.querySelector('[name="'+prefix+name+'_1"]'))&amp;&amp;"checkbox"===input.type)return new StackCheckboxInput(input.closest(".answer"));var matrix=document.getElementById(prefix+name+"_container");return matrix?new StackMatrixInput(prefix+name,matrix):null}return{initInputs:initInputs}}));
/**
 * A javascript module to handle separation of author sourced scripts into
 * IFRAMES. All such scripts will have limited access to the actual document
 * on the VLE side and this script represents the VLE side endpoint for
 * message handling needed to give that access. When porting STACK onto VLEs
 * one needs to map this script to do the following:
 *
 *  1. Ensure that searches for target elements/inputs are limited to questions
 *     or their feedback and do not return any elements outside them.
 *
 *  2. Map any identifiers needed to identify inputs by name.
 *
 *  3. Any change handling related to input value modifications through this
 *     logic gets connected to any such handling on the VLE side.
 *
 *
 * This script is intenttionally ordered so that the VLE specific bits should
 * be at the top.
 *
 *
 * This script assumes the following:
 *
 *  1. Each relevant IFRAME has an `id`-attribute that will be told to this
 *     script.
 *
 *  2. Each such IFRAME exists within the question content itself, so that
 *     one can traverse up the DOM tree from that IFRAME to find the border of
 *     the question.
 *
 * @module     qtype_stack/stackjsvle
 * @copyright  2023 Aalto University
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("qtype_stack/stackjsvle",["core_filters/events"],(function(CustomEvents){let IFRAMES={},INPUTS={},INPUTS_INPUT_EVENT={},DISABLE_CHANGES=!1;function vle_get_element(id){let candidate=document.getElementById(id),iter=candidate;for(;iter&amp;&amp;!iter.classList.contains("formulation")&amp;&amp;!iter.classList.contains("outcome");)iter=iter.parentElement;return iter&amp;&amp;(iter.classList.contains("formulation")||iter.classList.contains("outcome"))?candidate:null}function vle_get_input_element(name,srciframe,outside){void 0===outside&amp;&amp;(outside=!0);let iter=document.getElementById(srciframe);for(;iter&amp;&amp;!iter.classList.contains("formulation")&amp;&amp;!iter.classList.contains("outcome");)iter=iter.parentElement;if(iter&amp;&amp;(iter.classList.contains("formulation")||iter.classList.contains("outcome"))){let possible=iter.querySelector('input[id$="_'+name+'"]');if(null!==possible)return possible;if(possible=iter.querySelector('textarea[id$="_'+name+'"]'),null!==possible)return possible;if(possible=iter.querySelector('input[id$="_'+name+'_1"][type=radio]'),null!==possible)return possible;if(possible=iter.querySelector('input[id$="_'+name+'_1"][type=checkbox]'),null!==possible)return possible;if(possible=iter.querySelector('select[id$="_'+name+'"]'),null!==possible)return possible}if(!outside)return null;let possible=document.querySelector('.formulation input[id$="_'+name+'"]');return null!==possible?possible:(possible=document.querySelector('.formulation textarea[id$="_'+name+'"]'),null!==possible?possible:(possible=document.querySelector('.formulation input[id$="_'+name+'_1"][type=radio]'),null!==possible?possible:(possible=document.querySelector('.formulation input[id$="_'+name+'_1"][type=checkbox]'),null!==possible?possible:(possible=document.querySelector('.formulation select[id$="_'+name+'"]'),null!==possible?possible:(possible=document.querySelector('.outcome input[id$="_'+name+'"]'),null!==possible?possible:(possible=document.querySelector('.outcome textarea[id$="_'+name+'"]'),null!==possible||(possible=document.querySelector('.outcome select[id$="_'+name+'"]')),possible))))))}function vle_get_others_of_same_input_group(input){return"radio"===input.type?document.querySelectorAll(".formulation input[name="+CSS.escape(input.name)+"]"):input.name.startsWith("q")&amp;&amp;input.name.indexOf(":")&gt;-1&amp;&amp;input.name.endsWith("_1")?document.querySelectorAll(".formulation input[name^="+CSS.escape(input.name.substring(0,input.name.length-1))+"]"):document.querySelectorAll(".formulation input[name="+CSS.escape(input.name)+"]")}function vle_get_submit_button(srciframe){let iter=document.getElementById(srciframe);for(;iter&amp;&amp;!iter.classList.contains("formulation");)iter=iter.parentElement;if(iter&amp;&amp;iter.classList.contains("formulation")){return iter.querySelector('.im-controls *[id$="-submit"][type=submit]')}return null}function vle_update_input(inputelement){const c=new Event("change");inputelement.dispatchEvent(c);const i=new Event("input");if(inputelement.dispatchEvent(i),"radio"===inputelement.type||"checkbox"===inputelement.type){const k=new Event("click");inputelement.dispatchEvent(k)}}function vle_update_dom(modifiedsubtreerootelement){CustomEvents.notifyFilterContentUpdated(modifiedsubtreerootelement)}function is_evil_attribute(name,value){const lcname=name.toLowerCase();if(lcname.startsWith("on"))return!0;if("src"===lcname||lcname.endsWith("href")){const lcvalue=value.replace(/\s+/g,"").toLowerCase();if(lcvalue.includes("javascript:")||lcvalue.includes("data:text"))return!0}return!1}return window.addEventListener("message",(e=&gt;{if(!("string"==typeof e.data||e.data instanceof String))return;let msg=null;try{msg=JSON.parse(e.data)}catch(e){return}if(!("version"in msg)||!msg.version.startsWith("STACK-JS"))return;if(!("src"in msg&amp;&amp;"type"in msg&amp;&amp;msg.src in IFRAMES))return;let element=null,input=null,response={version:"STACK-JS:1.3.0"};switch(msg.type){case"register-input-listener":if(input=vle_get_input_element(msg.name,msg.src,!msg["limit-to-question"]),null===input)return response.type="error",response.msg='Failed to connect to input: "'+msg.name+'"',response.tgt=msg.src,void IFRAMES[msg.src].contentWindow.postMessage(JSON.stringify(response),"*");if(response.type="initial-input",response.name=msg.name,response.tgt=msg.src,"select"===input.nodeName.toLowerCase()?(response.value=input.value,response["input-type"]="select",response["input-readonly"]=input.hasAttribute("disabled")):"textarea"===input.nodeName.toLowerCase()?(response.value=input.value,response["input-type"]="textarea",response["input-readonly"]=input.hasAttribute("disabled")):"checkbox"===input.type?(response.value=input.checked,response["input-type"]="checkbox",response["input-readonly"]=input.hasAttribute("disabled")):(response.value=input.value,response["input-type"]=input.type,response["input-readonly"]=input.hasAttribute("readonly")),"radio"===input.type){response["input-readonly"]=input.hasAttribute("disabled"),response.value="";for(let inp of document.querySelectorAll("input[type=radio][name="+CSS.escape(input.name)+"]"))inp.checked&amp;&amp;(response.value=inp.value)}if(input.id in INPUTS){if(msg.src in INPUTS[input.id])return;if("radio"!==input.type)INPUTS[input.id].push(msg.src);else{let radgroup=document.querySelectorAll("input[type=radio][name="+CSS.escape(input.name)+"]");for(let inp of radgroup)INPUTS[inp.id].push(msg.src)}}else{if("radio"!==input.type)INPUTS[input.id]=[msg.src];else{let radgroup=document.querySelectorAll("input[type=radio][name="+CSS.escape(input.name)+"]");for(let inp of radgroup)INPUTS[inp.id]=[msg.src]}if("radio"!==input.type)input.addEventListener("change",(()=&gt;{if(DISABLE_CHANGES)return;let resp={version:"STACK-JS:1.0.0",type:"changed-input",name:msg.name};"checkbox"===input.type?resp.value=input.checked:resp.value=input.value;for(let tgt of INPUTS[input.id])resp.tgt=tgt,IFRAMES[tgt].contentWindow.postMessage(JSON.stringify(resp),"*")}));else{document.querySelectorAll("input[type=radio][name="+CSS.escape(input.name)+"]").forEach((inp=&gt;{inp.addEventListener("change",(()=&gt;{if(DISABLE_CHANGES)return;let resp={version:"STACK-JS:1.0.0",type:"changed-input",name:msg.name};if(inp.checked){resp.value=inp.value;for(let tgt of INPUTS[inp.id])resp.tgt=tgt,IFRAMES[tgt].contentWindow.postMessage(JSON.stringify(resp),"*")}}))}))}}if("track-input"in msg&amp;&amp;msg["track-input"]&amp;&amp;"radio"!==input.type)if(input.id in INPUTS_INPUT_EVENT){if(msg.src in INPUTS_INPUT_EVENT[input.id])return;INPUTS_INPUT_EVENT[input.id].push(msg.src)}else INPUTS_INPUT_EVENT[input.id]=[msg.src],input.addEventListener("input",(()=&gt;{if(DISABLE_CHANGES)return;let resp={version:"STACK-JS:1.0.0",type:"changed-input",name:msg.name};"checkbox"===input.type?resp.value=input.checked:resp.value=input.value;for(let tgt of INPUTS_INPUT_EVENT[input.id])resp.tgt=tgt,IFRAMES[tgt].contentWindow.postMessage(JSON.stringify(resp),"*")}));msg.src in INPUTS[input.id]||IFRAMES[msg.src].contentWindow.postMessage(JSON.stringify(response),"*");break;case"changed-input":if(input=vle_get_input_element(msg.name,msg.src),null===input){const ret={version:"STACK-JS:1.0.0",type:"error",msg:'Failed to modify input: "'+msg.name+'"',tgt:msg.src};return void IFRAMES[msg.src].contentWindow.postMessage(JSON.stringify(ret),"*")}DISABLE_CHANGES=!0,"checkbox"===input.type?input.checked=msg.value:input.value=msg.value,vle_update_input(input),DISABLE_CHANGES=!1,response.type="changed-input",response.name=msg.name,response.value=msg.value;for(let tgt of INPUTS[input.id])tgt!==msg.src&amp;&amp;(response.tgt=tgt,IFRAMES[tgt].contentWindow.postMessage(JSON.stringify(response),"*"));break;case"clear-input":if(input=vle_get_input_element(msg.name,msg.src),"select"===input.nodeName.toLowerCase()){-1!==input.selectedIndex&amp;&amp;(input.selectedIndex=-1,vle_update_input(input));for(var i=0;i&lt;input.options.length;i++)input.options[i].hasAttribute("selected")&amp;&amp;(input.options[i].removeAttribute("selected"),vle_update_input(input)),""===input.options[i].value&amp;&amp;(input.options[i].selected=!0,vle_update_input(input))}else if("textarea"===input.nodeName.toLowerCase())""!==input.value&amp;&amp;(input.value="",vle_update_input(input));else if("checkbox"===input.type)for(let inp of vle_get_others_of_same_input_group(input))inp.checked=!1,vle_update_input(inp);else if("radio"===input.type)for(let inp of vle_get_others_of_same_input_group(input))inp.checked=""===inp.value,vle_update_input(inp);else""!==input.value&amp;&amp;(input.value="",vle_update_input(input));vle_update_input(input);break;case"register-button-listener":if(element=vle_get_element(msg.target),null===element){const ret={version:"STACK-JS:1.2.0",type:"error",msg:'Failed to find element: "'+msg.target+'"',tgt:msg.src};return void IFRAMES[msg.src].contentWindow.postMessage(JSON.stringify(ret),"*")}element.addEventListener("click",(event=&gt;{let resp={version:"STACK-JS:1.2.0",type:"button-click",name:msg.target,tgt:msg.src};IFRAMES[msg.src].contentWindow.postMessage(JSON.stringify(resp),"*"),event.preventDefault()}));break;case"toggle-visibility":if(element=vle_get_element(msg.target),null===element){const ret={version:"STACK-JS:1.0.0",type:"error",msg:'Failed to find element: "'+msg.target+'"',tgt:msg.src};return void IFRAMES[msg.src].contentWindow.postMessage(JSON.stringify(ret),"*")}"show"===msg.set?(element.style.display="block",vle_update_dom(element)):"hide"===msg.set&amp;&amp;(element.style.display="none");break;case"change-content":if(element=vle_get_element(msg.target),null===element)return response.type="error",response.msg='Failed to find element: "'+msg.target+'"',response.tgt=msg.src,void IFRAMES[msg.src].contentWindow.postMessage(JSON.stringify(response),"*");element.innerHTML=function(src){let doc=(new DOMParser).parseFromString(src,"text/html");for(let el of doc.querySelectorAll("script, style"))el.remove();for(let el of doc.querySelectorAll("*"))for(let{name:name,value:value}of el.attributes)is_evil_attribute(name,value)&amp;&amp;el.removeAttribute(name);return doc.body}(msg.content).innerHTML,vle_update_dom(element);break;case"get-content":element=vle_get_element(msg.target),response.type="xfer-content",response.tgt=msg.src,response.target=msg.target,response.content=null,null!==element&amp;&amp;(response.content=element.innerHTML),IFRAMES[msg.src].contentWindow.postMessage(JSON.stringify(response),"*");break;case"resize-frame":element=IFRAMES[msg.src].parentElement,element.style.width=msg.width,element.style.height=msg.height,IFRAMES[msg.src].style.width="100%",IFRAMES[msg.src].style.height="100%",vle_update_dom(element);break;case"ping":return response.type="ping",response.tgt=msg.src,void IFRAMES[msg.src].contentWindow.postMessage(JSON.stringify(response),"*");case"query-submit-button":return response.type="submit-button-info",response.tgt=msg.src,input=vle_get_submit_button(msg.src),null===input||input.hasAttribute("hidden")?response.value=null:response.value=input.value,void IFRAMES[msg.src].contentWindow.postMessage(JSON.stringify(response),"*");case"enable-submit-button":return input=vle_get_submit_button(msg.src),void(null!==input?msg.enabled?input.removeAttribute("disabled"):input.disabled=!0:(response.type="error",response.msg="Could not find matching submit button for this question.",response.tgt=msg.src,IFRAMES[msg.src].contentWindow.postMessage(JSON.stringify(response),"*")));case"relabel-submit-button":return input=vle_get_submit_button(msg.src),void(null!==input?(input.childNodes.length&gt;1?input.childNodes.forEach((n=&gt;{"#text"==n.nodeName&amp;&amp;(n.textContent=msg.name)})):input.innerHTML=msg.name,input.value=msg.name):(response.type="error",response.msg="Could not find matching submit button for this question.",response.tgt=msg.src,IFRAMES[msg.src].contentWindow.postMessage(JSON.stringify(response),"*")));case"submit-button-info":case"initial-input":case"error":break;default:response.type="error",response.msg='Unknown message-type: "'+msg.type+'"',response.tgt=msg.src,IFRAMES[msg.src].contentWindow.postMessage(JSON.stringify(response),"*")}})),{create_iframe(iframeid,content,targetdivid,title,scrolling,evil){const frm=document.createElement("iframe");frm.id=iframeid,frm.style.width="100%",frm.style.height="100%",frm.style.border=0,!1===scrolling?(frm.scrolling="no",frm.style.overflow="hidden"):frm.scrolling="yes",frm.title=title,frm.referrerpolicy="no-referrer",evil||(frm.sandbox="allow-scripts allow-downloads"),frm.srcdoc=content,document.getElementById(targetdivid).replaceChildren(frm),IFRAMES[iframeid]=frm}}}));
/**
 * Javascript controller for the "User summary" panel at the top of the page.
 *
 * @module     mod_assign/grading_navigation_user_info
 * @copyright  2016 Damyon Wiese &lt;damyon@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.1
 */
define("mod_assign/grading_navigation_user_info",["jquery","core/notification","core/ajax","core/templates"],(function($,notification,ajax,templates){var UserInfo=function(selector){this._regionSelector=selector,this._region=$(selector),this._userCache={},$(document).on("user-changed",this._refreshUserInfo.bind(this))};return UserInfo.prototype._regionSelector=null,UserInfo.prototype._userCache=null,UserInfo.prototype._region=null,UserInfo.prototype._lastUserId=0,UserInfo.prototype._getAssignmentId=function(){return this._region.attr("data-assignmentid")},UserInfo.prototype._refreshUserInfo=function(event,userid){var promise=$.Deferred();this._region.attr("data-userid",userid),this._lastUserId!=userid&amp;&amp;(this._lastUserId=userid,templates.render("mod_assign/loading",{}).done(function(html,js){if(this._region.fadeOut("fast",function(){templates.replaceNodeContents(this._region,html,js),this._region.fadeIn("fast")}.bind(this)),userid&lt;0)templates.render("mod_assign/grading_navigation_no_users",{}).done(function(html,js){userid==this._lastUserId&amp;&amp;this._region.fadeOut("fast",function(){templates.replaceNodeContents(this._region,html,js),this._region.fadeIn("fast")}.bind(this))}.bind(this)).fail(notification.exception);else{if(void 0!==this._userCache[userid])promise.resolve(this._userCache[userid]);else{var assignmentId=this._getAssignmentId();ajax.call([{methodname:"mod_assign_get_participant",args:{userid:userid,assignid:assignmentId,embeduser:!0}}])[0].done(function(participant){participant.hasOwnProperty("id")?(this._userCache[userid]=participant,promise.resolve(this._userCache[userid])):promise.reject("No users")}.bind(this)).fail(notification.exception)}promise.done(function(context){var identityfields=$("[data-showuseridentity]").data("showuseridentity").split(","),identity=[];context.courseid=$('[data-region="grading-navigation-panel"]').attr("data-courseid"),context.user&amp;&amp;($.each(identityfields,(function(i,k){void 0!==context.user[k]&amp;&amp;""!==context.user[k]&amp;&amp;(context.hasidentity=!0,identity.push(context.user[k]))})),context.identity=identity.join(", "),context.user.profileimageurl&amp;&amp;(context.profileimageurl=context.user.profileimageurl)),templates.render("mod_assign/grading_navigation_user_summary",context).done(function(html,js){userid==this._lastUserId&amp;&amp;this._region.fadeOut("fast",function(){templates.replaceNodeContents(this._region,html,js),this._region.fadeIn("fast")}.bind(this))}.bind(this)).fail(notification.exception)}.bind(this)).fail(function(){templates.render("mod_assign/grading_navigation_no_users",{}).done(function(html,js){this._region.fadeOut("fast",function(){templates.replaceNodeContents(this._region,html,js),this._region.fadeIn("fast")}.bind(this))}.bind(this)).fail(notification.exception)}.bind(this))}}.bind(this)).fail(notification.exception))},UserInfo}));
/**
 * Custom auto-complete adapter to load users from the assignment list_participants webservice.
 *
 * @module     mod_assign/participants_selector
 * @copyright  2015 Damyon Wiese &lt;damyon@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("mod_assign/participant_selector",["core/ajax","jquery","core/templates"],(function(ajax,$,templates){return{processResults:function(selector,data){return data},transport:function(selector,query,success,failure){var assignmentid=$(selector).attr("data-assignmentid"),groupid=$(selector).attr("data-groupid"),filters=$('[data-region="configure-filters"] input[type="checkbox"]'),filterstrings=[];filters.each((function(index,element){filterstrings[$(element).attr("name")]=$(element).prop("checked")})),ajax.call([{methodname:"mod_assign_list_participants",args:{assignid:assignmentid,groupid:groupid,filter:query,limit:30,includeenrolments:!1,tablesort:!0}}])[0].then((function(results){var promises=[],identityfields=$("[data-showuseridentity]").data("showuseridentity").split(",");return $.each(results,(function(index,user){var ctx=user,identity=[],show=!0;filterstrings.filter_submitted&amp;&amp;!user.submitted&amp;&amp;(show=!1),filterstrings.filter_notsubmitted&amp;&amp;user.submitted&amp;&amp;(show=!1),filterstrings.filter_requiregrading&amp;&amp;!user.requiregrading&amp;&amp;(show=!1),filterstrings.filter_grantedextension&amp;&amp;!user.grantedextension&amp;&amp;(show=!1),show&amp;&amp;($.each(identityfields,(function(i,k){void 0!==user[k]&amp;&amp;""!==user[k]&amp;&amp;(ctx.hasidentity=!0,identity.push(user[k]))})),ctx.identity=identity.join(", "),promises.push(templates.render("mod_assign/list_participant_user_summary",ctx).then((function(html){return{value:user.id,label:html}}))))})),$.when.apply($,promises)})).then((function(){var users=[];arguments[0]&amp;&amp;(users=Array.prototype.slice.call(arguments)),success(users)})).catch(failure)}}}));
define("mod_assign/override_form",["exports","jquery","core_form/changechecker"],(function(_exports,_jquery,FormChangeChecker){var obj;
/**
   * A javascript module to enhance the override form.
   *
   * @copyright  2019 Ryan Wyllie &lt;ryan@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_jquery=(obj=_jquery)&amp;&amp;obj.__esModule?obj:{default:obj},FormChangeChecker=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}(FormChangeChecker);_exports.init=(formId,selectElementName)=&gt;{const form=document.getElementById(formId),selectElement=form.querySelector('[name="'.concat(selectElementName,'"]'));(0,_jquery.default)(selectElement).on("change",(()=&gt;{const inputElement=document.createElement("input");inputElement.setAttribute("type","hidden"),inputElement.setAttribute("name","userchange"),inputElement.setAttribute("value",!0),form.appendChild(inputElement),FormChangeChecker.markFormSubmitted(inputElement),form.submit()}))}}));
/**
 * Events for the grading interface.
 *
 * @module     mod_assign/grading_events
 * @copyright  2016 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.1
 */
define("mod_assign/grading_events",(function(){return{COLLAPSE_REVIEW_PANEL:"grading:collapse-review-panel",EXPAND_REVIEW_PANEL:"grading:expand-review-panel",COLLAPSE_GRADE_PANEL:"grading:collapse-grade-panel",EXPAND_GRADE_PANEL:"grading:expand-grade-panel"}}));
define("mod_assign/timer",["exports","core/notification","core/str"],(function(_exports,_notification,_str){var obj;
/**
   * A javascript module for the time in the assign module.
   *
   * @copyright  2020 Matt Porritt &lt;mattp@catalyst-au.net&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_notification=(obj=_notification)&amp;&amp;obj.__esModule?obj:{default:obj};let endTime=0,timeoutId=null,timer=null;const update=()=&gt;{const now=(new Date).getTime(),secondsLeft=Math.floor((endTime-now)/1e3);if(secondsLeft&lt;=0)return timer.classList.add("alert","alert-danger"),timer.innerHTML="00:00:00",document.getElementById("mod_assign_timelimit_block")&amp;&amp;(0,_str.get_string)("caneditsubmission","mod_assign").then((message=&gt;_notification.default.addNotification({message:message}))).catch(_notification.default.exception),void(timeoutId&amp;&amp;clearTimeout(timeoutId));var secs;secondsLeft&lt;300?(timer.classList.remove("alert-warning"),timer.classList.add("alert","alert-danger")):secondsLeft&lt;900&amp;&amp;(timer.classList.remove("alert-danger"),timer.classList.add("alert","alert-warning")),timer.innerHTML=(secs=secondsLeft,[Math.floor(secs/3600),Math.floor(secs/60)%60,secs%60].filter(((value,index)=&gt;0!==value||index&gt;0)).map((value=&gt;"".concat(value).padStart(2,"0"))).join(":")),timeoutId=setTimeout(update,500)};_exports.init=timerId=&gt;{timer=document.getElementById(timerId),endTime=M.pageloadstarttime.getTime()+1e3*timer.dataset.starttime,update()}}));
/**
 * Javascript controller for the "Actions" panel at the bottom of the page.
 *
 * @module     mod_assign/grading_actions
 * @copyright  2016 Damyon Wiese &lt;damyon@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.1
 */
define("mod_assign/grading_actions",["jquery","mod_assign/grading_events"],(function($,GradingEvents){var GradingActions=function(selector){this._regionSelector=selector,this._region=$(selector),this.registerEventListeners()};return GradingActions.prototype._regionSelector=null,GradingActions.prototype._lastUserId=0,GradingActions.prototype._region=null,GradingActions.prototype._showActionsForm=function(event,userid){var form=this._region.find("[data-region=grading-actions-form]");userid!=this._lastUserId&amp;&amp;userid&gt;0&amp;&amp;(this._lastUserId=userid),userid&gt;0?form.removeClass("hide"):form.addClass("hide")},GradingActions.prototype._trigger=function(action){$(document).trigger(action)},GradingActions.prototype.getReviewPanelElement=function(){return $('[data-region="review-panel"]')},GradingActions.prototype.hasReviewPanelElement=function(){return this.getReviewPanelElement().length&gt;0},GradingActions.prototype.getCollapseGradePanelButton=function(){return $('[data-region="grade-actions"] .collapse-grade-panel')},GradingActions.prototype.getCollapseReviewPanelButton=function(){return $('[data-region="grade-actions"] .collapse-review-panel')},GradingActions.prototype.getExpandAllPanelsButton=function(){return $('[data-region="grade-actions"] .collapse-none')},GradingActions.prototype.resetLayoutButtons=function(){this.getCollapseGradePanelButton().removeClass("active"),this.getCollapseReviewPanelButton().removeClass("active"),this.getExpandAllPanelsButton().removeClass("active")},GradingActions.prototype.collapseReviewPanel=function(){$(document).trigger(GradingEvents.COLLAPSE_REVIEW_PANEL),$(document).trigger(GradingEvents.EXPAND_GRADE_PANEL),this.resetLayoutButtons(),this.getCollapseReviewPanelButton().addClass("active")},GradingActions.prototype.collapseGradePanel=function(){$(document).trigger(GradingEvents.COLLAPSE_GRADE_PANEL),$(document).trigger(GradingEvents.EXPAND_REVIEW_PANEL),this.resetLayoutButtons(),this.getCollapseGradePanelButton().addClass("active")},GradingActions.prototype.expandAllPanels=function(){$(document).trigger(GradingEvents.EXPAND_GRADE_PANEL),$(document).trigger(GradingEvents.EXPAND_REVIEW_PANEL),this.resetLayoutButtons(),this.getExpandAllPanelsButton().addClass("active")},GradingActions.prototype.registerEventListeners=function(){if(this.hasReviewPanelElement()){var collapseReviewPanelButton=this.getCollapseReviewPanelButton();collapseReviewPanelButton.click(function(e){this.collapseReviewPanel(),e.preventDefault()}.bind(this)),collapseReviewPanelButton.keydown(function(e){e.metaKey||e.shiftKey||e.altKey||e.ctrlKey||13!==e.keyCode&amp;&amp;32!==e.keyCode||(this.collapseReviewPanel(),e.preventDefault())}.bind(this));var collapseGradePanelButton=this.getCollapseGradePanelButton();collapseGradePanelButton.click(function(e){this.collapseGradePanel(),e.preventDefault()}.bind(this)),collapseGradePanelButton.keydown(function(e){e.metaKey||e.shiftKey||e.altKey||e.ctrlKey||13!==e.keyCode&amp;&amp;32!==e.keyCode||(this.collapseGradePanel(),e.preventDefault())}.bind(this));var expandAllPanelsButton=this.getExpandAllPanelsButton();expandAllPanelsButton.click(function(e){this.expandAllPanels(),e.preventDefault()}.bind(this)),expandAllPanelsButton.keydown(function(e){e.metaKey||e.shiftKey||e.altKey||e.ctrlKey||13!==e.keyCode&amp;&amp;32!==e.keyCode||(this.expandAllPanels(),e.preventDefault())}.bind(this))}$(document).on("user-changed",this._showActionsForm.bind(this)),this._region.find('[name="savechanges"]').on("click",this._trigger.bind(this,"save-changes")),this._region.find('[name="saveandshownext"]').on("click",this._trigger.bind(this,"save-and-show-next")),this._region.find('[name="resetbutton"]').on("click",this._trigger.bind(this,"reset")),this._region.find("form").on("submit",(function(e){e.preventDefault()}))},GradingActions}));
/**
 * Javascript controller for the "Grading" panel at the right of the page.
 *
 * @module     mod_assign/grading_panel
 * @copyright  2016 Damyon Wiese &lt;damyon@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.1
 */
define("mod_assign/grading_panel",["jquery","core/yui","core/notification","core/templates","core/fragment","core/ajax","core/str","mod_assign/grading_form_change_checker","mod_assign/grading_events","core_form/events","core/toast","core_form/changechecker"],(function($,Y,notification,templates,fragment,ajax,str,checker,GradingEvents,FormEvents,Toast,FormChangeChecker){var GradingPanel=function(selector){this._regionSelector=selector,this._region=$(selector),this._userCache=[],this.registerEventListeners()};return GradingPanel.prototype._regionSelector=null,GradingPanel.prototype._lastUserId=0,GradingPanel.prototype._lastAttemptNumber=-1,GradingPanel.prototype._region=null,GradingPanel.prototype.nextUserId=null,GradingPanel.prototype.nextUser=!1,GradingPanel.prototype._niceReplaceNodeContents=function(node,html,js){var promise=$.Deferred();return node.fadeOut("fast",(function(){templates.replaceNodeContents(node,html,js),node.fadeIn("fast",(function(){promise.resolve()}))})),promise.promise()},GradingPanel.prototype._saveFormState=function(){var checked=$('[data-region="grading-actions-form"] [name="sendstudentnotifications"]').prop("checked");$('.gradeform [name="sendstudentnotifications"]').val(checked)},GradingPanel.prototype._submitForm=function(event,nextUserId,nextUser){var commentAreaElement=document.querySelector(".comment-area");commentAreaElement&amp;&amp;(""!==commentAreaElement.querySelector(".db &gt; textarea").value&amp;&amp;commentAreaElement.querySelector('.fd a[id^="comment-action-post-"]').click());var form=$(this._region.find("form.gradeform"));$('[data-region="overlay"]').show(),FormChangeChecker.markFormSubmitted(form[0]),form.trigger("save-form-state"),FormEvents.notifyFormSubmittedByJavascript(form[0]);var data=form.serialize(),assignmentid=this._region.attr("data-assignmentid");ajax.call([{methodname:"mod_assign_submit_grading_form",args:{assignmentid:assignmentid,userid:this._lastUserId,jsonformdata:JSON.stringify(data)},done:this._handleFormSubmissionResponse.bind(this,data,nextUserId,nextUser),fail:notification.exception}])},GradingPanel.prototype._handleFormSubmissionResponse=function(formdata,nextUserId,nextUser,response){if(void 0===nextUserId&amp;&amp;(nextUserId=this._lastUserId),response.length)$(document).trigger("reset",[this._lastUserId,formdata]);else{str.get_string("gradechangessaveddetail","mod_assign").then((function(str){return Toast.add(str),str})).catch(notification.exception);var form=$(this._region.find("form.gradeform"));FormChangeChecker.resetFormDirtyState(form[0]),nextUserId==this._lastUserId?$(document).trigger("reset",nextUserId):nextUser?$(document).trigger("done-saving-show-next",!0):$(document).trigger("user-changed",nextUserId)}$('[data-region="overlay"]').hide()},GradingPanel.prototype._resetForm=function(e,userid,formdata){var event=$.Event("custom");void 0===userid&amp;&amp;(userid=this._lastUserId),this._lastUserId=0,this._refreshGradingPanel(event,userid,formdata)},GradingPanel.prototype._chooseAttempt=function(e){var submissionsId=$(e.target).data("submissions"),formhtml=$(document.getElementById(submissionsId)).clone().wrap($("&lt;form/&gt;")).html();str.get_strings([{key:"viewadifferentattempt",component:"mod_assign"},{key:"view",component:"core"},{key:"cancel",component:"core"}]).done(function(strs){notification.confirm(strs[0],formhtml,strs[1],strs[2],function(){var attemptnumber=$("input:radio[name='select-attemptnumber']:checked").val();this._refreshGradingPanel(null,this._lastUserId,"",attemptnumber)}.bind(this))}.bind(this)).fail(notification.exception)},GradingPanel.prototype._addPopoutButtons=function(selector){var region=$(selector);templates.render("mod_assign/popout_button",{}).done(function(html){region.find('[data-fieldtype="filemanager"],[data-fieldtype="editor"],[data-fieldtype="grading"]').closest(".fitem").addClass("has-popout").find("label").parent().append(html),region.on("click",'[data-region="popout-button"]',this._togglePopout.bind(this))}.bind(this)).fail(notification.exception)},GradingPanel.prototype._togglePopout=function(event){event.preventDefault();var container=$(event.target).closest(".fitem");container.hasClass("popout")?$(".popout").removeClass("popout"):($(".popout").removeClass("popout"),container.addClass("popout"),container.addClass("moodle-has-zindex"))},GradingPanel.prototype._refreshGradingPanel=function(event,userid,submissiondata,attemptnumber){var contextid=this._region.attr("data-contextid");void 0===submissiondata&amp;&amp;(submissiondata=""),void 0===attemptnumber&amp;&amp;(attemptnumber=-1),this._lastUserId==userid&amp;&amp;this._lastAttemptNumber==attemptnumber&amp;&amp;""===submissiondata||(this._lastUserId=userid,this._lastAttemptNumber=attemptnumber,$(document).trigger("start-loading-user"),window.M.util.js_pending("mod-assign-loading-user"),templates.render("mod_assign/loading",{}).done(function(html,js){this._niceReplaceNodeContents(this._region,html,js).done(function(){if(userid&gt;0){this._region.show();var params={userid:userid,attemptnumber:attemptnumber,jsonformdata:JSON.stringify(submissiondata)};fragment.loadFragment("mod_assign","gradingpanel",contextid,params).done(function(html,js){this._niceReplaceNodeContents(this._region,html,js).done(function(){checker.saveFormState('[data-region="grade-panel"] .gradeform'),$(document).on("editor-content-restored",(function(){checker.saveFormState('[data-region="grade-panel"] .gradeform')})),$('[data-region="attempt-chooser"]').on("click",this._chooseAttempt.bind(this)),this._addPopoutButtons('[data-region="grade-panel"] .gradeform'),$(document).trigger("finish-loading-user"),window.M.util.js_complete("mod-assign-loading-user")}.bind(this)).fail(notification.exception)}.bind(this)).fail(notification.exception),$('[data-region="review-panel"]').show()}else this._region.hide(),$('[data-region="review-panel"]').hide(),$(document).trigger("finish-loading-user"),window.M.util.js_complete("mod-assign-loading-user")}.bind(this))}.bind(this)).fail(notification.exception))},GradingPanel.prototype._getNextUser=function(event,data){this.nextUserId=data.nextUserId,this.nextUser=data.nextUser},GradingPanel.prototype._handleSaveAndShowNext=function(){this._submitForm(null,this.nextUserId,this.nextUser)},GradingPanel.prototype.getPanelElement=function(){return $('[data-region="grade-panel"]')},GradingPanel.prototype.collapsePanel=function(){this.getPanelElement().addClass("collapsed")},GradingPanel.prototype.expandPanel=function(){this.getPanelElement().removeClass("collapsed")},GradingPanel.prototype.registerEventListeners=function(){var docElement=$(document);$(this._region).on("submit","form",(function(e){e.preventDefault()})),docElement.on("next-user",this._getNextUser.bind(this)),docElement.on("user-changed",this._refreshGradingPanel.bind(this)),docElement.on("save-changes",this._submitForm.bind(this)),docElement.on("save-and-show-next",this._handleSaveAndShowNext.bind(this)),docElement.on("reset",this._resetForm.bind(this)),docElement.on("save-form-state",this._saveFormState.bind(this)),docElement.on(GradingEvents.COLLAPSE_GRADE_PANEL,function(){this.collapsePanel()}.bind(this)),docElement.on(GradingEvents.COLLAPSE_REVIEW_PANEL,function(){this.expandPanel()}.bind(this)),docElement.on(GradingEvents.EXPAND_GRADE_PANEL,function(){this.expandPanel()}.bind(this))},GradingPanel}));
/**
 * Javascript controller for the "Review" panel at the left of the page.
 *
 * @module     mod_assign/grading_review_panel
 * @copyright  2016 Damyon Wiese &lt;damyon@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.1
 */
define("mod_assign/grading_review_panel",["jquery","mod_assign/grading_events"],(function($,GradingEvents){var GradingReviewPanel=function(){this._region=$('[data-region="review-panel-content"]'),this.registerEventListeners()};return GradingReviewPanel.prototype._region=null,GradingReviewPanel.prototype.getReviewPanel=function(pluginname){return void 0===this._region.data("panel-owner")&amp;&amp;this._region.data("review-panel-plugin",pluginname),this._region.data("review-panel-plugin")==pluginname&amp;&amp;this._region[0]},GradingReviewPanel.prototype.getTogglePanelButton=function(){return this.getPanelElement().find('[data-region="review-panel-toggle"]')},GradingReviewPanel.prototype.getPanelElement=function(){return $('[data-region="review-panel"]')},GradingReviewPanel.prototype.getPanelContentElement=function(){return $('[data-region="review-panel-content"]')},GradingReviewPanel.prototype.togglePanel=function(){this.getPanelElement().hasClass("collapsed")?$(document).trigger(GradingEvents.EXPAND_REVIEW_PANEL):$(document).trigger(GradingEvents.COLLAPSE_REVIEW_PANEL)},GradingReviewPanel.prototype.collapsePanel=function(){this.getPanelElement().addClass("collapsed").removeClass("grade-panel-collapsed"),this.getPanelContentElement().attr("aria-hidden",!0)},GradingReviewPanel.prototype.expandPanel=function(){this.getPanelElement().removeClass("collapsed"),this.getPanelContentElement().removeAttr("aria-hidden")},GradingReviewPanel.prototype.registerEventListeners=function(){var toggleReviewPanelButton=this.getTogglePanelButton();toggleReviewPanelButton.click(function(e){this.togglePanel(),e.preventDefault()}.bind(this)),toggleReviewPanelButton.keydown(function(e){e.metaKey||e.shiftKey||e.altKey||e.ctrlKey||13!==e.keyCode&amp;&amp;32!==e.keyCode||(this.togglePanel(),e.preventDefault())}.bind(this));var docElement=$(document);docElement.on(GradingEvents.COLLAPSE_REVIEW_PANEL,function(){this.collapsePanel()}.bind(this)),docElement.on(GradingEvents.COLLAPSE_GRADE_PANEL,function(){this.expandPanel(),this.getPanelElement().addClass("grade-panel-collapsed")}.bind(this)),docElement.on(GradingEvents.EXPAND_REVIEW_PANEL,function(){this.expandPanel()}.bind(this)),docElement.on(GradingEvents.EXPAND_GRADE_PANEL,function(){this.getPanelElement().removeClass("grade-panel-collapsed")}.bind(this))},GradingReviewPanel}));
/**
 * Simple method to check for changes to a form between two points in time.
 *
 * @module     mod_assign/grading_form_change_checker
 * @copyright  2016 Damyon Wiese &lt;damyon@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.1
 */
define("mod_assign/grading_form_change_checker",["jquery"],(function($){return{saveFormState:function(selector){$(selector).trigger("save-form-state");var data=$(selector).serialize();$(selector).data("saved-form-state",data)},checkFormForChanges:function(selector){$(selector).trigger("save-form-state");var data=$(selector).serialize(),previousdata=$(selector).data("saved-form-state");return void 0!==previousdata&amp;&amp;previousdata!=data}}}));
/**
 * Javascript to handle changing users via the user selector in the header.
 *
 * @module     mod_assign/grading_navigation
 * @copyright  2016 Damyon Wiese &lt;damyon@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.1
 */
define("mod_assign/grading_navigation",["jquery","core/notification","core/str","core/form-autocomplete","core/ajax","mod_assign/grading_form_change_checker"],(function($,notification,str,autocomplete,ajax,checker){var GradingNavigation=function(selector){this._regionSelector=selector,this._region=$(selector),this._filters=[],this._users=[],this._filteredUsers=[],this._lastXofYUpdate=0,this._firstLoadUsers=!0;let url=new URL(window.location);parseInt(url.searchParams.get("treset"))&gt;0&amp;&amp;(url.searchParams.delete("treset"),window.history.replaceState({},"",url)),this._loadAllUsers(),this._region.find('[data-action="previous-user"]').on("click",this._handlePreviousUser.bind(this)),this._region.find('[data-action="next-user"]').on("click",this._handleNextUser.bind(this)),this._region.find('[data-action="change-user"]').on("change",this._handleChangeUser.bind(this)),this._region.find('[data-region="user-filters"]').on("click",this._toggleExpandFilters.bind(this)),this._region.find('[data-region="user-resettable"]').on("click",this._toggleResetTable.bind()),$(document).on("user-changed",this._refreshSelector.bind(this)),$(document).on("done-saving-show-next",this._handleNextUser.bind(this));var toggleLink=this._region.find('[data-region="user-filters"]');$(document.getElementById(toggleLink.attr("aria-controls"))).on("change","select",this._filterChanged.bind(this));var userid=$('[data-region="grading-navigation-panel"]').data("first-userid");userid&amp;&amp;this._selectUserById(userid),str.get_string("changeuser","mod_assign").done((function(s){autocomplete.enhance("[data-action=change-user]",!1,"mod_assign/participant_selector",s)})).fail(notification.exception),$(document).bind("start-loading-user",function(){this._isLoading=!0}.bind(this)),$(document).bind("finish-loading-user",function(){this._isLoading=!1}.bind(this))};return GradingNavigation.prototype._isLoading=!1,GradingNavigation.prototype._regionSelector=null,GradingNavigation.prototype._filters=null,GradingNavigation.prototype._users=null,GradingNavigation.prototype._region=null,GradingNavigation.prototype._lastFilters="",GradingNavigation.prototype._loadAllUsers=function(){var select=this._region.find("[data-action=change-user]"),assignmentid=select.attr("data-assignmentid"),groupid=select.attr("data-groupid"),filterPanel=this._region.find('[data-region="configure-filters"]'),filter=filterPanel.find('select[name="filter"]').val(),workflowFilter=filterPanel.find('select[name="workflowfilter"]');workflowFilter&amp;&amp;(filter+=","+workflowFilter.val());var markerFilter=filterPanel.find('select[name="markerfilter"]');return markerFilter&amp;&amp;(filter+=","+markerFilter.val()),this._lastFilters!=filter&amp;&amp;(this._lastFilters=filter,ajax.call([{methodname:"mod_assign_list_participants",args:{assignid:assignmentid,groupid:groupid,filter:"",onlyids:!0,tablesort:!0},done:this._usersLoaded.bind(this),fail:notification.exception}]),!0)},GradingNavigation.prototype._usersLoaded=function(users){if(this._firstLoadUsers=!1,this._filteredUsers=this._users=users,this._users.length){var toggleLink=this._region.find('[data-region="user-filters"]');$(document.getElementById(toggleLink.attr("aria-controls"))).find('select[name="filter"]').trigger("change")}else this._selectNoUser();this._triggerNextUserEvent()},GradingNavigation.prototype._checkClickOutsideConfigureFilters=function(event){var configPanel=this._region.find('[data-region="configure-filters"]');if(!configPanel.is(event.target)&amp;&amp;0===configPanel.has(event.target).length){var toggleLink=this._region.find('[data-region="user-filters"]');configPanel.hide(),configPanel.attr("aria-hidden","true"),toggleLink.attr("aria-expanded","false"),$(document).unbind("click.mod_assign_grading_navigation")}},GradingNavigation.prototype._updateFilterPreferences=function(userId,filterList,preferenceNames){var preferences=[],i=0;if(0==filterList.length||this._firstLoadUsers){var deferred=$.Deferred();return deferred.resolve(),deferred}for(i=0;i&lt;filterList.length;i++){var newValue=filterList[i];"none"==newValue&amp;&amp;(newValue=""),preferences.push({userid:userId,name:preferenceNames[i],value:newValue})}return ajax.call([{methodname:"core_user_set_user_preferences",args:{preferences:preferences}}])[0]},GradingNavigation.prototype._filterChanged=function(){var filterPanel=this._region.find('[data-region="configure-filters"]'),filters=filterPanel.find("select"),preferenceNames=[];this._filters=[],filters.each(function(idx,ele){var element=$(ele);this._filters.push(element.val()),preferenceNames.push("assign_"+element.prop("name"))}.bind(this));var filterlist=[];filterPanel.find("option:checked").each((function(idx,ele){filterlist[filterlist.length]=$(ele).text()})),filterlist.length?this._region.find('[data-region="user-filters"] span').text(filterlist.join(", ")):str.get_string("nofilters","mod_assign").done(function(s){this._region.find('[data-region="user-filters"] span').text(s)}.bind(this)).fail(notification.exception);var select=this._region.find("[data-action=change-user]"),currentUserID=select.data("currentuserid");this._updateFilterPreferences(currentUserID,this._filters,preferenceNames).done(function(){if(!this._loadAllUsers()){var userid=parseInt(select.attr("data-selected"));let foundIndex=null;$.each(this._filteredUsers,(function(index,user){userid==user.id&amp;&amp;(foundIndex=index)})),this._filteredUsers.length&amp;&amp;null!==foundIndex?this._selectUserById(this._filteredUsers[foundIndex].id):this._selectNoUser()}}.bind(this)).fail(notification.exception),this._refreshCount()},GradingNavigation.prototype._selectNoUser=function(){this._isLoading||(checker.checkFormForChanges('[data-region="grade-panel"] .gradeform')?str.get_strings([{key:"unsavedchanges",component:"mod_assign"},{key:"unsavedchangesquestion",component:"mod_assign"},{key:"saveandcontinue",component:"mod_assign"},{key:"cancel",component:"core"}]).done((function(strs){notification.confirm(strs[0],strs[1],strs[2],strs[3],(function(){$(document).trigger("save-changes",-1)}))})):$(document).trigger("user-changed",-1))},GradingNavigation.prototype._selectUserById=function(userid){var select=this._region.find("[data-action=change-user]"),useridnumber=parseInt(userid,10);this._isLoading||(checker.checkFormForChanges('[data-region="grade-panel"] .gradeform')?str.get_strings([{key:"unsavedchanges",component:"mod_assign"},{key:"unsavedchangesquestion",component:"mod_assign"},{key:"saveandcontinue",component:"mod_assign"},{key:"cancel",component:"core"}]).done((function(strs){notification.confirm(strs[0],strs[1],strs[2],strs[3],(function(){$(document).trigger("save-changes",useridnumber)}))})):(select.attr("data-selected",userid),!isNaN(useridnumber)&amp;&amp;useridnumber&gt;0&amp;&amp;$(document).trigger("user-changed",userid)))},GradingNavigation.prototype._toggleExpandFilters=function(event){event.preventDefault();var toggleLink=$(event.target).closest('[data-region="user-filters"]'),expanded="true"==toggleLink.attr("aria-expanded"),configPanel=$(document.getElementById(toggleLink.attr("aria-controls")));expanded?(configPanel.hide(),configPanel.attr("aria-hidden","true"),toggleLink.attr("aria-expanded","false"),$(document).unbind("click.mod_assign_grading_navigation")):(configPanel.css("display","inline-block"),configPanel.attr("aria-hidden","false"),toggleLink.attr("aria-expanded","true"),event.stopPropagation(),$(document).on("click.mod_assign_grading_navigation",this._checkClickOutsideConfigureFilters.bind(this)))},GradingNavigation.prototype._toggleResetTable=function(){let url=new URL(window.location);url.searchParams.set("treset","1"),window.location.href=url},GradingNavigation.prototype._handlePreviousUser=function(e){e.preventDefault();var currentUserId=this._region.find("[data-action=change-user]").attr("data-selected"),i=0,currentIndex=0;for(i=0;i&lt;this._filteredUsers.length;i++)if(this._filteredUsers[i].id==currentUserId){currentIndex=i;break}var count=this._filteredUsers.length,newIndex=currentIndex-1;newIndex&lt;0&amp;&amp;(newIndex=count-1),count&amp;&amp;this._selectUserById(this._filteredUsers[newIndex].id)},GradingNavigation.prototype._handleNextUser=function(e,saved){e.preventDefault();var select=this._region.find("[data-action=change-user]"),currentUserId=select.attr("data-selected"),i=0,currentIndex=0;for(i=0;i&lt;this._filteredUsers.length;i++)if(this._filteredUsers[i].id==currentUserId){currentIndex=i;break}var count=this._filteredUsers.length,newIndex=(currentIndex+1)%count;if(saved&amp;&amp;count){var userid=this._filteredUsers[newIndex].id,useridnumber=parseInt(userid,10);select.attr("data-selected",userid),!isNaN(useridnumber)&amp;&amp;useridnumber&gt;0&amp;&amp;$(document).trigger("user-changed",userid)}else count&amp;&amp;this._selectUserById(this._filteredUsers[newIndex].id)},GradingNavigation.prototype._setCountString=function(x,y){var updateNumber;this._lastXofYUpdate++,updateNumber=this._lastXofYUpdate;var param={x:x,y:y};str.get_string("xofy","mod_assign",param).done(function(s){updateNumber==this._lastXofYUpdate&amp;&amp;this._region.find('[data-region="user-count-summary"]').text(s)}.bind(this)).fail(notification.exception)},GradingNavigation.prototype._refreshCount=function(){var userid=this._region.find("[data-action=change-user]").attr("data-selected"),i=0,currentIndex=0;if(isNaN(userid)||userid&lt;=0)this._region.find('[data-region="user-count"]').hide();else{for(this._region.find('[data-region="user-count"]').show(),i=0;i&lt;this._filteredUsers.length;i++)if(this._filteredUsers[i].id==userid){currentIndex=i;break}var count=this._filteredUsers.length;if(count&amp;&amp;(currentIndex+=1),this._setCountString(currentIndex,count),currentIndex&gt;0){var url=new URL(window.location);if(parseInt(url.searchParams.get("blindid"))&gt;0){var newid=this._filteredUsers[currentIndex-1].recordid;url.searchParams.set("blindid",newid)}else url.searchParams.set("userid",userid);window.history.replaceState({},"",url)}}},GradingNavigation.prototype._refreshSelector=function(event,userid){var select=this._region.find("[data-action=change-user]");userid=parseInt(userid,10),!isNaN(userid)&amp;&amp;userid&gt;0&amp;&amp;select.attr("data-selected",userid),this._refreshCount()},GradingNavigation.prototype._triggerNextUserEvent=function(){this._filteredUsers.length&gt;1?$(document).trigger("next-user",{nextUserId:null,nextUser:!0}):$(document).trigger("next-user",{nextUser:!1})},GradingNavigation.prototype._handleChangeUser=function(){var select=this._region.find("[data-action=change-user]"),userid=parseInt(select.val(),10);this._isLoading||(checker.checkFormForChanges('[data-region="grade-panel"] .gradeform')?str.get_strings([{key:"unsavedchanges",component:"mod_assign"},{key:"unsavedchangesquestion",component:"mod_assign"},{key:"saveandcontinue",component:"mod_assign"},{key:"cancel",component:"core"}]).done((function(strs){notification.confirm(strs[0],strs[1],strs[2],strs[3],(function(){$(document).trigger("save-changes",userid)}))})):!isNaN(userid)&amp;&amp;userid&gt;0&amp;&amp;(select.attr("data-selected",userid),$(document).trigger("user-changed",userid)))},GradingNavigation}));
define("mod_bigbluebuttonbn/recordings",["exports","./repository","core/notification","core/prefetch","core/str","core/loadingicon","core/modal_factory","core/modal_events","core/pending"],(function(_exports,repository,_notification,_prefetch,_str,_loadingicon,_modal_factory,_modal_events,_pending){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,repository=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}
/**
   * JS for the recordings page on mod_bigbluebuttonbn plugin.
   *
   * @module      mod_bigbluebuttonbn/recordings
   * @copyright   2021 Blindside Networks Inc
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */(repository),_modal_factory=_interopRequireDefault(_modal_factory),_modal_events=_interopRequireDefault(_modal_events),_pending=_interopRequireDefault(_pending);const stringsWithKeys={first:"view_recording_yui_first",prev:"view_recording_yui_prev",next:"view_recording_yui_next",last:"view_recording_yui_last",goToLabel:"view_recording_yui_page",goToAction:"view_recording_yui_go",perPage:"view_recording_yui_rows",showAll:"view_recording_yui_show_all"};(0,_prefetch.prefetchStrings)("bigbluebuttonbn",Object.entries(stringsWithKeys).map((entry=&gt;entry[1])));const getStringsForYui=()=&gt;{const stringMap=Object.keys(stringsWithKeys).map((key=&gt;({key:stringsWithKeys[key],component:"mod_bigbluebuttonbn"})));return(0,_str.get_strings)(stringMap).then((stringArray=&gt;Object.assign({},...Object.keys(stringsWithKeys).map(((key,index)=&gt;({[key]:stringArray[index]})))))).catch()},getFormattedData=response=&gt;{const recordingData=response.tabledata;return JSON.parse(recordingData.data)},getTableNode=tableSelector=&gt;document.querySelector(tableSelector),fetchRecordingData=tableSelector=&gt;{const tableNode=getTableNode(tableSelector);return null===tableNode?Promise.resolve(!1):tableNode.dataset.importMode?repository.fetchRecordingsToImport(tableNode.dataset.bbbid,tableNode.dataset.bbbSourceInstanceId,tableNode.dataset.bbbSourceCourseId,tableNode.dataset.tools,tableNode.dataset.groupId):repository.fetchRecordings(tableNode.dataset.bbbid,tableNode.dataset.tools,tableNode.dataset.groupId)},getDataTableFunctions=(tableId,searchFormId,dataTable)=&gt;{const bbbid=getTableNode(tableId).dataset.bbbid,updateTableFromResponse=response=&gt;{if(!response||!response.status)return;dataTable.get("data").reset(getFormattedData(response)),dataTable.set("currentData",dataTable.get("data"));const currentFilter=dataTable.get("currentFilter");currentFilter&amp;&amp;filterByText(currentFilter)},refreshTableData=()=&gt;fetchRecordingData(tableId).then(updateTableFromResponse),filterByText=value=&gt;{const dataModel=dataTable.get("currentData");dataTable.set("currentFilter",value);const escapedRegex=value.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&amp;"),rsearch=new RegExp("&lt;span&gt;.*?".concat(escapedRegex,".*?&lt;/span&gt;"),"i");dataTable.set("data",dataModel.filter({asList:!0},(item=&gt;{const name=item.get("recording");if(name&amp;&amp;rsearch.test(name))return!0;const description=item.get("description");return description&amp;&amp;rsearch.test(description)})))},recordingConfirmationMessage=async data=&gt;{var _document$querySelect,_document$querySelect2;const playbackElement=document.querySelector("#playbacks-".concat(data.recordingid)),recordingType=await(0,_str.get_string)("true"===playbackElement.dataset.imported?"view_recording_link":"view_recording","bigbluebuttonbn"),confirmation=await(0,_str.get_string)("view_recording_".concat(data.action,"_confirmation"),"bigbluebuttonbn",recordingType);if("import"===data.action)return confirmation;const associatedLinkCount=null===(_document$querySelect=document.querySelector("a#recording-".concat(data.action,"-").concat(data.recordingid)))||void 0===_document$querySelect||null===(_document$querySelect2=_document$querySelect.dataset)||void 0===_document$querySelect2?void 0:_document$querySelect2.links;if(!associatedLinkCount||0===associatedLinkCount)return confirmation;return await(0,_str.get_string)("view_recording_".concat(data.action,1===associatedLinkCount?"_confirmation_warning_p":"_confirmation_warning_s"),"bigbluebuttonbn",associatedLinkCount)+"\n\n"+confirmation},processAction=e=&gt;{const popoutLink=e.target.closest('[data-action="play"]');if(popoutLink){e.preventDefault();const videoPlayer=window.open("","_blank");return videoPlayer.opener=null,void(videoPlayer.location.href=popoutLink.href)}const clickedLink=e.target.closest("a[data-action]");if(clickedLink&amp;&amp;!clickedLink.classList.contains("disabled")){e.preventDefault();const iconPromise=(0,_loadingicon.addIconToContainerWithPromise)(dataTable.get("boundingBox").getDOMNode());(element=&gt;{const getDataFromAction=(element,dataType)=&gt;{const dataElement=element.closest("[data-".concat(dataType,"]"));return dataElement?dataElement.dataset[dataType]:null},elementData=element.dataset,payload={bigbluebuttonbnid:bbbid,recordingid:getDataFromAction(element,"recordingid"),additionaloptions:getDataFromAction(element,"additionaloptions"),action:elementData.action};if(payload.additionaloptions||(payload.additionaloptions={}),"import"===elementData.action){const bbbsourceid=getDataFromAction(element,"source-instance-id"),bbbcourseid=getDataFromAction(element,"source-course-id");payload.additionaloptions||(payload.additionaloptions={}),payload.additionaloptions.sourceid=bbbsourceid||0,payload.additionaloptions.bbbcourseid=bbbcourseid||0}return payload.additionaloptions=JSON.stringify(payload.additionaloptions),"1"===element.dataset.requireConfirmation?new Promise((resolve=&gt;_modal_factory.default.create({title:(0,_str.get_string)("confirm"),body:recordingConfirmationMessage(payload),type:_modal_factory.default.types.SAVE_CANCEL}).then((async modal=&gt;(modal.setSaveButtonText(await(0,_str.get_string)("ok","moodle")),modal.getRoot().on(_modal_events.default.save,(()=&gt;{resolve(!0)})),modal.getRoot().on(_modal_events.default.hidden,(()=&gt;{modal.destroy(),resolve(!1)})),modal.show(),modal))).catch(_notification.exception))).then((proceed=&gt;proceed?repository.updateRecording(payload):()=&gt;null)):repository.updateRecording(payload)})(clickedLink).then(refreshTableData).then(iconPromise.resolve).catch(_notification.exception)}},processSearchSubmission=e=&gt;{e.preventDefault();const searchInput=e.target.closest("div[role=search]").querySelector("input[name=search]");filterByText(searchInput.value)};return{filterByText:filterByText,refreshTableData:refreshTableData,registerEventListeners:()=&gt;{dataTable.get("boundingBox").getDOMNode().addEventListener("click",processAction);if(document.querySelector(searchFormId)){document.querySelector(searchFormId+" button").addEventListener("click",processSearchSubmission)}}}},setupDatatable=(tableId,searchFormId,response)=&gt;{if(!response)return Promise.resolve();if(!response.status)return Promise.resolve();const recordingData=response.tabledata,pendingPromise=new _pending.default("mod_bigbluebuttonbn/recordings/setupDatatable");return Promise.all([(lang=recordingData.locale,new Promise((resolve=&gt;{YUI({lang:lang}).use("intl","datatable","datatable-sort","datatable-paginator","datatype-number",(Y=&gt;{resolve(Y)}))}))),getStringsForYui()]).then((_ref=&gt;{let[yuiInstance,strings]=_ref;return yuiInstance.Intl.add("datatable-paginator",yuiInstance.config.lang,{...strings}),yuiInstance.DataTable.BodyView.Formatters.customDate=()=&gt;cell=&gt;{return locale=recordingData.locale,date=cell.value,new Date(date).toLocaleDateString(locale,{weekday:"long",year:"numeric",month:"long",day:"numeric"});var locale,date},yuiInstance})).then((yuiInstance=&gt;{const tableData=getFormattedData(response);return yuiInstance.RecordsPaginatorView=Y.Base.create("my-paginator-view",yuiInstance.DataTable.Paginator.View,[],{_modelChange:function(e){var changed=e.changed;changed&amp;&amp;changed.totalItems&amp;&amp;this._updateControlsUI(e.target.get("page"))}}),new yuiInstance.DataTable({paginatorView:"RecordsPaginatorView",width:"1195px",columns:recordingData.columns,data:tableData,rowsPerPage:10,paginatorLocation:["header","footer"],autoSync:!0})})).then((dataTable=&gt;{dataTable.render(tableId);const{registerEventListeners:registerEventListeners}=getDataTableFunctions(tableId,searchFormId,dataTable);return registerEventListeners(),dataTable})).then((dataTable=&gt;(pendingPromise.resolve(),dataTable)));var lang};_exports.init=(tableId,searchFormId)=&gt;{const pendingPromise=new _pending.default("mod_bigbluebuttonbn/recordings:init");fetchRecordingData(tableId).then((response=&gt;setupDatatable(tableId,searchFormId,response))).then((()=&gt;pendingPromise.resolve())).catch(_notification.exception)}}));
define("mod_bigbluebuttonbn/roomupdater",["exports","core/pending","core/templates","core/notification","./repository"],(function(_exports,_pending,_templates,_notification,_repository){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * JS room updater.
   *
   * @module      mod_bigbluebuttonbn/roomupdater
   * @copyright   2021 Blindside Networks Inc
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.updateRoom=_exports.stop=_exports.start=void 0,_pending=_interopRequireDefault(_pending),_templates=_interopRequireDefault(_templates);let timerReference=null,timerRunning=!1,pollInterval=0,pollIntervalFactor=1;const resetValues=()=&gt;{timerRunning=!1,timerReference=null,pollInterval=0,pollIntervalFactor=1};_exports.start=interval=&gt;{resetValues(),timerRunning=!0,pollInterval=interval,poll()};_exports.stop=()=&gt;{timerReference&amp;&amp;clearTimeout(timerReference),resetValues()};const poll=()=&gt;{timerRunning&amp;&amp;pollInterval&amp;&amp;updateRoom().then((updateOk=&gt;(updateOk||(pollIntervalFactor=pollIntervalFactor&lt;10?pollIntervalFactor+1:10),timerReference=setTimeout((()=&gt;poll()),pollInterval*pollIntervalFactor),!0))).catch()},updateRoom=function(){let updatecache=arguments.length&gt;0&amp;&amp;void 0!==arguments[0]&amp;&amp;arguments[0];const bbbRoomViewElement=document.getElementById("bigbluebuttonbn-room-view");if(null===bbbRoomViewElement)return Promise.resolve(!1);const bbbId=bbbRoomViewElement.dataset.bbbId,groupId=bbbRoomViewElement.dataset.groupId,pendingPromise=new _pending.default("mod_bigbluebuttonbn/roomupdater:updateRoom");return(0,_repository.getMeetingInfo)(bbbId,groupId,updatecache).then((data=&gt;(data.haspresentations=!(!data.presentations||!data.presentations.length),_templates.default.renderForPromise("mod_bigbluebuttonbn/room_view",data)))).then((_ref=&gt;{let{html:html,js:js}=_ref;return _templates.default.replaceNode(bbbRoomViewElement,html,js)})).then((()=&gt;pendingPromise.resolve())).catch(_notification.exception)};_exports.updateRoom=updateRoom}));
define("mod_bigbluebuttonbn/guest_access_modal",["exports","core/str","core_form/modalform","core/toast","core/notification"],(function(_exports,_str,_modalform,_toast,_notification){var obj;
/**
   * Javascript module for importing presets.
   *
   * @module      mod_bigbluebuttonbn/guest_access_modal
   * @copyright   2022 Blindside Networks Inc
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_modalform=(obj=_modalform)&amp;&amp;obj.__esModule?obj:{default:obj};const selectors_showGuestAccessButton='[data-action="show-guest-access"]';_exports.init=guestInfo=&gt;{const showGuestAccessButton=document.querySelector(selectors_showGuestAccessButton);if(null===showGuestAccessButton)return;const modalForm=new _modalform.default({modalConfig:{title:(0,_str.get_string)("guestaccess_title","mod_bigbluebuttonbn"),large:!0},args:guestInfo,saveButtonText:(0,_str.get_string)("ok","core_moodle"),formClass:"mod_bigbluebuttonbn\\form\\guest_add"});showGuestAccessButton.addEventListener("click",(event=&gt;{modalForm.show().then((()=&gt;((0,_toast.addToastRegion)(modalForm.modal.getRoot()[0]),!0))).catch(_notification.exception),modalForm.addEventListener(modalForm.events.FORM_SUBMITTED,(e=&gt;{modalForm.modal.getRoot()[0].querySelectorAll(".toast-wrapper").forEach((reg=&gt;reg.remove())),e.detail.result?e.detail.emailcount&gt;0&amp;&amp;(0,_toast.add)((0,_str.get_string)("guestaccess_invite_success","mod_bigbluebuttonbn",e.detail),{type:"success"}):(0,_toast.add)((0,_str.get_string)("guestaccess_invite_failure","mod_bigbluebuttonbn",e.detail),{type:"warning"})}),{once:!0}),event.stopPropagation()}))}}));
define("mod_bigbluebuttonbn/modform",["exports","core/str","core/notification","core/templates"],(function(_exports,_str,_notification,_templates){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * JS for the mod_form page on mod_bigbluebuttonbn plugin.
   *
   * @module      mod_bigbluebuttonbn/mod_form
   * @copyright   2021 Blindside Networks Inc
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_notification=_interopRequireDefault(_notification),_templates=_interopRequireDefault(_templates);const ELEMENT_SELECTOR_instanceTypeSelection=()=&gt;document.querySelector("select#id_type"),ELEMENT_SELECTOR_instanceTypeProfiles=()=&gt;document.querySelector("[data-profile-types]"),ELEMENT_SELECTOR_participantData=()=&gt;document.querySelector("[data-participant-data]"),ELEMENT_SELECTOR_participantList=()=&gt;document.getElementsByName("participants")[0],ELEMENT_SELECTOR_participantTable=()=&gt;document.getElementById("participant_list_table"),ELEMENT_SELECTOR_participantSelectionType=()=&gt;document.getElementsByName("bigbluebuttonbn_participant_selection_type")[0],ELEMENT_SELECTOR_participantSelection=()=&gt;document.getElementsByName("bigbluebuttonbn_participant_selection")[0],ELEMENT_SELECTOR_participantAddButton=()=&gt;document.getElementsByName("bigbluebuttonbn_participant_selection_add")[0];_exports.init=info=&gt;{const selectedType=ELEMENT_SELECTOR_instanceTypeSelection(),instanceTypeProfiles=JSON.parse(ELEMENT_SELECTOR_instanceTypeProfiles().dataset.profileTypes);let profileType=info.instanceTypeDefault;null!==selectedType&amp;&amp;-1!==selectedType.selectedIndex&amp;&amp;(profileType=selectedType.options[selectedType.selectedIndex].value);const isFeatureEnabled=(profileType,feature)=&gt;-1!==instanceTypeProfiles[profileType].features.indexOf(feature);applyInstanceTypeProfile(profileType,isFeatureEnabled),selectedType.addEventListener("change",(e=&gt;{applyInstanceTypeProfile(e.target.value,isFeatureEnabled)})),ELEMENT_SELECTOR_participantSelectionType().addEventListener("change",(e=&gt;{const currentTypeSelect=e.target;updateSelectionFromType(currentTypeSelect)})),ELEMENT_SELECTOR_participantAddButton().addEventListener("click",(e=&gt;{e.stopPropagation(),e.preventDefault(),participantAddFromCurrentSelection()})),participantListInit()};const applyInstanceTypeProfile=(profileType,isFeatureEnabled)=&gt;{let showAll=isFeatureEnabled(profileType,"all");const showFieldset=(id,show)=&gt;{const node=document.querySelector("#"+id);node&amp;&amp;(node.style.display=show?"block":"none")},showInput=(id,show)=&gt;{const node=document.querySelector("#"+id);if(node){var ancestor=node.closest("div").closest("div");ancestor.style.display=show?"block":"none"}},showFormGroup=(id,show)=&gt;{const node=document.querySelector("#fgroup_id_"+id);node&amp;&amp;(show?node.classList.remove("hidden"):node.classList.add("hidden"))};showFieldset("id_room",showAll||isFeatureEnabled(profileType,"showroom")),showInput("id_record",showAll||isFeatureEnabled(profileType,"showroom")),showFieldset("id_recordings",showAll||isFeatureEnabled(profileType,"showrecordings")),showInput("id_recordings_imported",showAll||isFeatureEnabled(profileType,"showrecordings")),showFieldset("id_lock",showAll||isFeatureEnabled(profileType,"lock")),showFieldset("id_guestaccess",showAll||isFeatureEnabled(profileType,"showroom")),showFieldset("id_preuploadpresentation",showAll||isFeatureEnabled(profileType,"preuploadpresentation")),showFieldset("id_permissions",showAll||isFeatureEnabled(profileType,"permissions")),showFieldset("id_schedule",showAll||isFeatureEnabled(profileType,"schedule")),showFieldset("id_modstandardelshdr",showAll||isFeatureEnabled(profileType,"modstandardelshdr")),showFieldset("id_availabilityconditionsheader",showAll||isFeatureEnabled(profileType,"availabilityconditionsheader")),showFieldset("id_tagshdr",showAll||isFeatureEnabled(profileType,"tagshdr")),showFieldset("id_competenciessection",showAll||isFeatureEnabled(profileType,"competenciessection")),showFormGroup("completionattendancegroup",showAll||isFeatureEnabled(profileType,"completionattendance")),showFormGroup("completionengagementgroup",showAll||isFeatureEnabled(profileType,"completionengagement"))},participantListInit=()=&gt;{const participantData=JSON.parse(ELEMENT_SELECTOR_participantData().dataset.participantData);getParticipantList().forEach((participant=&gt;{const selectionTypeValue=participant.selectiontype,selectionValue=participant.selectionid,selectionRole=participant.role;"all"!==participant.selectiontype&amp;&amp;void 0===participantData[participant.selectiontype].children[participant.selectionid]||participantAddToForm(selectionTypeValue,selectionValue,selectionRole,!0).then()}))},participantAddToForm=async(selectionTypeValue,selectionValue,selectedRole,canRemove)=&gt;{const participantData=JSON.parse(ELEMENT_SELECTOR_participantData().dataset.participantData);let roles={viewer:{id:"viewer",label:await(0,_str.get_string)("mod_form_field_participant_bbb_role_viewer","mod_bigbluebuttonbn")},moderator:{id:"moderator",label:await(0,_str.get_string)("mod_form_field_participant_bbb_role_moderator","mod_bigbluebuttonbn")}};roles[selectedRole].isselected=!0;try{const listTable=document.querySelector("#participant_list_table tbody"),templateContext={selectiontypevalue:selectionTypeValue,selectionvalue:selectionValue,participanttype:participantData[selectionTypeValue].name,participantvalue:"all"!==selectionTypeValue?participantData[selectionTypeValue].children[selectionValue].name:null,roles:Object.values(roles),canRemove:canRemove},{html:html,js:js}=await _templates.default.renderForPromise("mod_bigbluebuttonbn/participant_form_add",templateContext),newNode=_templates.default.appendNodeContents(listTable,html,js)[0];newNode.querySelector(".participant-select").addEventListener("change",(()=&gt;{participantListRoleUpdate(selectionTypeValue,selectionValue)}));const removeNode=newNode.querySelector(".remove-button");removeNode&amp;&amp;removeNode.addEventListener("click",(()=&gt;{participantRemove(selectionTypeValue,selectionValue)}))}catch(e){_notification.default.exception(e)}},participantListUpdate=list=&gt;{ELEMENT_SELECTOR_participantList().value=JSON.stringify(list)},getParticipantList=()=&gt;{const participantListValue=ELEMENT_SELECTOR_participantList().value;return participantListValue?JSON.parse(participantListValue):[]},participantRemove=(selectionTypeValue,selectionValue)=&gt;{const pList=getParticipantList(),id="participant_list_tr_"+selectionTypeValue+"-"+selectionValue,participantListTable=ELEMENT_SELECTOR_participantTable(),selectionid=""===selectionValue?null:selectionValue;for(let i=0;i&lt;pList.length;i++)pList[i].selectiontype===selectionTypeValue&amp;&amp;pList[i].selectionid===selectionid&amp;&amp;pList.splice(i,1);for(let i=0;i&lt;participantListTable.rows.length;i++)participantListTable.rows[i].id===id&amp;&amp;participantListTable.deleteRow(i);participantListUpdate(pList)},participantListRoleUpdate=(type,id)=&gt;{const participantListRoleSelection=document.querySelector("#participant_list_tr_".concat(type,"-").concat(id," .participant-select")),pList=getParticipantList();for(var i=0;i&lt;pList.length;i++)pList[i].selectiontype===type&amp;&amp;pList[i].selectionid===id&amp;&amp;(pList[i].role=participantListRoleSelection.value);participantListUpdate(pList)},participantAddFromCurrentSelection=()=&gt;{let selectionType=ELEMENT_SELECTOR_participantSelectionType(),selection=ELEMENT_SELECTOR_participantSelection();const pList=getParticipantList();for(var i=0;i&lt;pList.length;i++)if(pList[i].selectiontype===selectionType.value&amp;&amp;pList[i].selectionid===selection.value)return;pList.push({selectiontype:selectionType.value,selectionid:selection.value,role:"viewer"}),participantAddToForm(selectionType.value,selection.value,"viewer",!0).then(),participantListUpdate(pList)},updateSelectionFromType=currentTypeSelect=&gt;{const createNewOption=(selectItem,label,value)=&gt;{const option=document.createElement("option");option.text=label,option.value=value,selectItem.add(option)},participantData=JSON.parse(ELEMENT_SELECTOR_participantData().dataset.participantData),participantSelect=ELEMENT_SELECTOR_participantSelection();for(;participantSelect.firstChild;)participantSelect.removeChild(participantSelect.firstChild);if(-1!==currentTypeSelect.selectedIndex){Object.values(participantData[currentTypeSelect.value].children).forEach((option=&gt;{createNewOption(participantSelect,option.name,option.id)})),"all"===currentTypeSelect.value?(createNewOption(participantSelect,"---------------","all"),participantSelect.disabled=!0):participantSelect.disabled=!1}}}));
define("mod_bigbluebuttonbn/rooms",["exports","./actions","./repository","./roomupdater","core/notification","core/pending","core/str","core/toast","./events"],(function(_exports,_actions,repository,roomUpdater,_notification,_pending,_str,_toast,_events){var obj;function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}
/**
   * JS actions for the rooms page for mod_bigbluebuttonbn.
   *
   * @module      mod_bigbluebuttonbn/rooms
   * @copyright   2021 Blindside Networks Inc
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.setupWindowAutoClose=_exports.init=void 0,repository=_interopRequireWildcard(repository),roomUpdater=_interopRequireWildcard(roomUpdater),_pending=(obj=_pending)&amp;&amp;obj.__esModule?obj:{default:obj};_exports.init=(bigbluebuttonbnid,pollInterval)=&gt;{const completionElement=document.querySelector("a[href*=completion_validate]");completionElement&amp;&amp;completionElement.addEventListener("click",(event=&gt;{event.preventDefault();const pendingPromise=new _pending.default("mod_bigbluebuttonbn/completion:validate");repository.completionValidate(bigbluebuttonbnid).then((()=&gt;(0,_str.get_string)("completionvalidatestatetriggered","mod_bigbluebuttonbn"))).then((str=&gt;(0,_toast.add)(str))).then((()=&gt;pendingPromise.resolve())).catch(_notification.exception)})),document.addEventListener("click",(e=&gt;{const joinButton=e.target.closest('[data-action="join"]');joinButton&amp;&amp;(window.open(joinButton.href,"bigbluebutton_conference"),e.preventDefault(),setTimeout((()=&gt;{roomUpdater.updateRoom(!0)}),pollInterval))})),document.addEventListener(_events.eventTypes.sessionEnded,(()=&gt;{roomUpdater.stop(),roomUpdater.updateRoom(),(0,_notification.fetchNotifications)()})),window.addEventListener(_events.eventTypes.currentSessionEnded,(()=&gt;{roomUpdater.stop(),roomUpdater.updateRoom(),(0,_notification.fetchNotifications)()})),roomUpdater.start(pollInterval)};_exports.setupWindowAutoClose=function(){let closeDelay=arguments.length&gt;0&amp;&amp;void 0!==arguments[0]?arguments[0]:2e3;(0,_events.notifyCurrentSessionEnded)(window.opener),window.addEventListener("onbeforeunload",(()=&gt;{window.opener.setTimeout((()=&gt;{roomUpdater.updateRoom(!0)}),closeDelay)}),{once:!0}),window.close()}}));
define("mod_bigbluebuttonbn/repository",["exports","core/ajax"],(function(_exports,_ajax){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.updateRecording=_exports.getMeetingInfo=_exports.fetchRecordingsToImport=_exports.fetchRecordings=_exports.endMeeting=_exports.completionValidate=void 0;_exports.fetchRecordings=(bigbluebuttonbnid,tools,groupid)=&gt;{const args={bigbluebuttonbnid:bigbluebuttonbnid,tools:tools};return groupid&amp;&amp;(args.groupid=groupid),(0,_ajax.call)([{methodname:"mod_bigbluebuttonbn_get_recordings",args:args}])[0]};_exports.fetchRecordingsToImport=(destinationinstanceid,sourcebigbluebuttonbnid,sourcecourseid,tools,groupid)=&gt;{const args={destinationinstanceid:destinationinstanceid,sourcebigbluebuttonbnid:sourcebigbluebuttonbnid,sourcecourseid:sourcecourseid,tools:tools};return groupid&amp;&amp;(args.groupid=groupid),(0,_ajax.call)([{methodname:"mod_bigbluebuttonbn_get_recordings_to_import",args:args}])[0]};_exports.updateRecording=args=&gt;(0,_ajax.call)([{methodname:"mod_bigbluebuttonbn_update_recording",args:args}])[0];_exports.endMeeting=(bigbluebuttonbnid,groupid)=&gt;(0,_ajax.call)([{methodname:"mod_bigbluebuttonbn_end_meeting",args:{bigbluebuttonbnid:bigbluebuttonbnid,groupid:groupid}}])[0];_exports.completionValidate=bigbluebuttonbnid=&gt;(0,_ajax.call)([{methodname:"mod_bigbluebuttonbn_completion_validate",args:{bigbluebuttonbnid:bigbluebuttonbnid}}])[0];_exports.getMeetingInfo=function(bigbluebuttonbnid,groupid){let updatecache=arguments.length&gt;2&amp;&amp;void 0!==arguments[2]&amp;&amp;arguments[2];return(0,_ajax.call)([{methodname:"mod_bigbluebuttonbn_meeting_info",args:{bigbluebuttonbnid:bigbluebuttonbnid,groupid:groupid,updatecache:updatecache}}])[0]}}));
define("mod_bigbluebuttonbn/index",["exports","./actions","./events"],(function(_exports,_actions,_events){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0;_exports.init=()=&gt;{document.addEventListener(_events.eventTypes.sessionEnded,(()=&gt;{window.location.reload()}))}}));
define("mod_bigbluebuttonbn/events",["exports","core/event_dispatcher"],(function(_exports,_event_dispatcher){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.notifySessionEnded=_exports.notifyCurrentSessionEnded=_exports.eventTypes=void 0;
/**
   * Events for the mod_bigbluebuttonbn plugin.
   *
   * @module      mod_bigbluebuttonbn/events
   * @copyright   2021 Blindside Networks Inc
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */
const eventTypes={sessionEnded:"mod_bigbluebuttonbn/sessionEnded",currentSessionEnded:"mod_bigbluebuttonbn/currentSessionEnded"};_exports.eventTypes=eventTypes;_exports.notifySessionEnded=(bbbId,groupId)=&gt;(0,_event_dispatcher.dispatchEvent)(eventTypes.sessionEnded,{bbbId:bbbId,groupId:groupId});_exports.notifyCurrentSessionEnded=container=&gt;(0,_event_dispatcher.dispatchEvent)(eventTypes.currentSessionEnded,{},container)}));
define("mod_bigbluebuttonbn/actions",["./repository","core/notification","./events","core/str"],(function(_repository,_notification,_events,_str){let listening=!1;listening||((()=&gt;{document.addEventListener("click",(e=&gt;{const actionButton=e.target.closest('.bbb-btn-action[data-action="end"]');if(!actionButton)return;e.preventDefault();const bbbId=actionButton.dataset.bbbId,groupId=actionButton.dataset.groupId?actionButton.dataset.groupId:0;var title,question,saveLabel;(title=(0,_str.get_string)("end_session_confirm_title","mod_bigbluebuttonbn"),question=(0,_str.get_string)("end_session_confirm","mod_bigbluebuttonbn"),saveLabel=(0,_str.get_string)("yes","moodle"),new Promise((resolve=&gt;{(0,_notification.saveCancel)(title,question,saveLabel,resolve)}))).then((()=&gt;(0,_repository.endMeeting)(bbbId,groupId))).then((()=&gt;{(0,_events.notifySessionEnded)(bbbId,groupId)})).catch(_notification.exception)}))})(),listening=!0)}));
define("mod_board/jquery.editable.amd",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0;
/*
  * jQuery plugin that makes elements editable
  *
  * @author Victor Jonsson (http://victorjonsson.se/)
  * @website https://github.com/victorjonsson/jquery-editable/
  * @license GPLv2 http://www.gnu.org/licenses/gpl-2.0.html
  * @version 1.3.6.dev
  * @donations http://victorjonsson.se/donations/
  */
var _default=function($,window){var clickedElement,$win=$(window),$textArea=!1,$currentlyEdited=!1,EVENT_ATTR="data-edit-event",EMPTY_ATTR="data-is-empty",SUPPORTS_TOUCH="ontouchend"in window,TINYMCE_INSTALLED="tinyMCE"in window&amp;&amp;"function"==typeof window.tinyMCE.init,oldjQueryIs=$.fn.is,lastTap=0,tapper=function(){var now=(new Date).getTime();now-lastTap&lt;250&amp;&amp;$(this).trigger("dbltap"),lastTap=now},keyHandler=function(e){if(13==e.keyCode&amp;&amp;e.data.closeOnEnter)$currentlyEdited.editable("close");else if(27==e.keyCode)$textArea.val($currentlyEdited.attr("orig-text")),$currentlyEdited.editable("close");else if(e.data.toggleFontSize&amp;&amp;e.metaKey&amp;&amp;(38==e.keyCode||40==e.keyCode)){var fontSize=parseInt($textArea.css("font-size"),10);return fontSize+=40==e.keyCode?-1:1,$textArea.css("font-size",fontSize+"px"),!1}},adjustTextAreaHeight=function(){$textArea[0].scrollHeight!==parseInt($textArea.attr("data-scroll"),10)&amp;&amp;($textArea.css("height",$textArea[0].scrollHeight+"px"),$textArea.attr("data-scroll",$textArea[0].scrollHeight))},resetElement=function($el,newText,emptyMessage){$el.removeAttr("data-is-editing"),0==newText.length&amp;&amp;emptyMessage?($el.html(emptyMessage),$el.attr(EMPTY_ATTR,"empty")):($el.html(newText),$el.removeAttr(EMPTY_ATTR)),$textArea.remove()},elementEditor=function($el,opts){if(!$el.is(":editing")){$currentlyEdited=$el,$el.attr("data-is-editing","1"),$el.is(":empty")&amp;&amp;($el.removeAttr(EMPTY_ATTR),$el.html(""));var defaultText=$.trim($el.html()),defaultFontSize=$el.css("font-size"),elementHeight=$el.height(),textareaStyle="width: 96%; padding:0; margin:0; border:0; background:none;font-family: "+$el.css("font-family")+"; font-size: "+$el.css("font-size")+";font-weight: "+$el.css("font-weight")+";";if($el.attr("orig-text",defaultText),opts.lineBreaks&amp;&amp;(defaultText=defaultText.replace(/&lt;br( |)(|\/)&gt;/g,"\n")),$textArea=$("&lt;textarea&gt;&lt;/textarea&gt;"),$el.text(""),textareaStyle+="position: static",!1!==opts.tinyMCE){var id="editable-area-"+(new Date).getTime();$textArea.val(defaultText).appendTo($el).attr("id",id),"object"!=typeof opts.tinyMCE&amp;&amp;(opts.tinyMCE={}),opts.tinyMCE.mode="exact",opts.tinyMCE.elements=id,opts.tinyMCE.width=$el.innerWidth(),opts.tinyMCE.height=$el.height()+200,opts.tinyMCE.theme_advanced_resize_vertical=!0,opts.tinyMCE.setup=function(ed){ed.onInit.add((function(editor){var editorWindow=editor.getWin(),hasPressedKey=!1,editorBlur=function(){var newText=$(editor.getDoc()).find("body").html();$(newText).get(0).nodeName==$el.get(0).nodeName&amp;&amp;(newText=$(newText).html()),resetElement($el,newText,opts.emptyMessage),editor.remove(),$textArea=!1,$win.unbind("click",editorBlur),$currentlyEdited=!1,"function"==typeof opts.callback&amp;&amp;opts.callback({content:!(newText==defaultText||!hasPressedKey)&amp;&amp;newText,fontSize:!1,$el:$el})};setTimeout((function(){$win.bind("click",editorBlur)}),500),($textArea=$("&lt;textarea&gt;&lt;/textarea&gt;")).bind("blur",editorBlur),editorWindow.onkeydown=function(){hasPressedKey=!0},editorWindow.focus()}))},window.tinyMCE.init(opts.tinyMCE)}else(opts.toggleFontSize||opts.closeOnEnter)&amp;&amp;$win.bind("keydown",opts,keyHandler),$win.bind("keyup",adjustTextAreaHeight),$textArea.html(defaultText).blur((function(){$currentlyEdited=!1;var newText=$.trim($textArea.val()),newFontSize=$textArea.css("font-size");newText=$("&lt;div /&gt;").text(newText).html(),opts.lineBreaks&amp;&amp;(newText=newText.replace(new RegExp("\\n","g"),"&lt;br /&gt;")),resetElement($el,newText,opts.emptyMessage),newFontSize!=defaultFontSize&amp;&amp;$el.css("font-size",newFontSize),$win.unbind("keydown",keyHandler),$win.unbind("keyup",adjustTextAreaHeight),"function"==typeof opts.callback&amp;&amp;opts.callback({content:newText!=defaultText&amp;&amp;newText,fontSize:newFontSize!=defaultFontSize&amp;&amp;newFontSize,$el:$el})})).attr("style",textareaStyle).appendTo($el).css({margin:0,padding:0,height:elementHeight+"px",overflow:"hidden"}).css(opts.editorStyle).focus().get(0).select(),adjustTextAreaHeight();$el.trigger("edit",[$textArea])}},editEvent=function(event){return!1===$currentlyEdited||$currentlyEdited.children("textarea").is(clickedElement)||$currentlyEdited.editable("close"),elementEditor($(this),event.data),!1};$.fn.editable=function(opts){if("string"==typeof opts){if(this.is(":editable"))switch(opts){case"open":this.is(":editing")||this.trigger(this.attr(EVENT_ATTR));break;case"close":this.is(":editing")&amp;&amp;$textArea.trigger("blur");break;case"destroy":this.is(":editing")&amp;&amp;$textArea.trigger("blur"),this.unbind(this.attr(EVENT_ATTR)),this.removeAttr(EVENT_ATTR)}}else this.is(":editable")&amp;&amp;this.editable("destroy"),!1===(opts=$.extend({event:"dblclick",touch:!0,lineBreaks:!0,toggleFontSize:!0,closeOnEnter:!1,emptyMessage:!1,tinyMCE:!1,editorStyle:{}},opts)).tinyMCE||TINYMCE_INSTALLED||(opts.tinyMCE=!1),SUPPORTS_TOUCH&amp;&amp;opts.touch?(opts.event="dbltap",this.unbind("touchend",tapper),this.bind("touchend",tapper)):opts.event+=".textEditor",this.bind(opts.event,opts,editEvent),this.attr(EVENT_ATTR,opts.event),0==this.html().length&amp;&amp;opts.emptyMessage?(this.html(opts.emptyMessage),this.attr(EMPTY_ATTR,"empty")):this.removeAttr(EMPTY_ATTR);return this},$.fn.is=function(statement){if("string"==typeof statement&amp;&amp;0===statement.indexOf(":")){if(":editable"==statement)return void 0!==this.attr(EVENT_ATTR);if(":editing"==statement)return void 0!==this.attr("data-is-editing");if(":empty"==statement)return void 0!==this.attr(EMPTY_ATTR)}return oldjQueryIs.apply(this,arguments)},$(document).mousedown((function(e){clickedElement=$(e.target)}))}(window.jQuery,window);return _exports.default=_default,_exports.default}));
define("mod_board/board",["exports","jquery","core/str","core/ajax","core/modal_factory","core/modal_events","core/notification","mod_board/jquery.editable.amd","mod_board/jquery.sortable.amd","core/fragment","mod_board/comments","./movenotesdialog","./movecolumnsdialog"],(function(_exports,_jquery,_str,_ajax,_modal_factory,_modal_events,_notification,_jqueryEditable,_jquerySortable,_fragment,_comments,_movenotesdialog,_movecolumnsdialog){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * A javascript module to handle the board.
   *
   * @author     Karen Holland &lt;karen@brickfieldlabs.ie&gt;
   * @copyrigt   2021 Brickfield Education Labs &lt;https://www.brickfield.ie/&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=function(settings){var strings={default_column_heading:"",post_button_text:"",cancel_button_text:"",remove_note_title:"",remove_note_text:"",remove_column_title:"",note_changed_title:"",note_changed_text:"",note_deleted_text:"",rate_note_title:"",rate_note_text:"",rate_remove_note_text:"",Ok:"",delete:"",Cancel:"",warning:"",modal_title_new:"",modal_title_edit:"",option_youtube:"",option_image:"",option_link:"",aria_newcolumn:"",aria_newpost:"",aria_deletecolumn:"",aria_movecolumn:"",aria_deletepost:"",aria_movepost:"",aria_editpost:"",aria_addmedia:"",aria_addmedianew:"",aria_deleteattachment:"",aria_postedit:"",aria_canceledit:"",aria_postnew:"",aria_cancelnew:"",aria_ratepost:"",invalid_file_extension:"",invalid_file_size_min:"",invalid_file_size_max:"",invalid_youtube_url:""},options=JSON.parse(settings.settings)||{},board=options.board||{},contextid=options.contextid;var reloadTimer=null,lastHistoryId=null,isEditor=options.isEditor||!1,usersCanEdit=options.usersCanEdit,userId=parseInt(options.userId)||-1,ownerId=parseInt(options.ownerId),mediaSelection=options.mediaselection||1,editingNote=0,isReadOnlyBoard=options.readonly||!1,ratingenabled=options.ratingenabled,sortby=options.sortby||1,editModal=null,enableblanktarget=1===parseInt(options.enableblanktarget),serviceCall=function(method,args,callback,failcallback){"board_history"!==method&amp;&amp;stopUpdating(),function(method,args,callback,failcallback){_ajax.default.call([{methodname:"mod_board_"+method,args:args,done:function(data){callback(data)},fail:function(error){_notification.default.exception(error),failcallback&amp;&amp;failcallback(error)}}])}(method,args,(function(){callback&amp;&amp;callback.apply(null,arguments),"board_history"!==method&amp;&amp;"get_board"!=method&amp;&amp;updateBoard(!0)}),failcallback)},getNote=function(ident){return(0,_jquery.default)(".board_note[data-ident='"+ident+"']")},getNoteTextForNote=function(note){return(0,_jquery.default)(note).find(".mod_board_note_text")},getNoteHeadingForNote=function(note){return(0,_jquery.default)(note).find(".mod_board_note_heading")},getNoteBorderForNote=function(note){return(0,_jquery.default)(note).find(".mod_board_note_border")},getNoteAttachmentsForNote=function(note){return(0,_jquery.default)(note).find(".mod_board_note_attachment")},textIdentifierForNote=function(note){var noteText=getNoteTextForNote(note).html(),noteHeading=getNoteHeadingForNote(note).html(),noteAttachment=attachmentDataForNote(note);return noteHeading.length&gt;0?noteHeading:noteText.length&gt;0?noteText.replace(/&lt;br\s*\/?&gt;/gi," ").replace(/\n/g," ").split(/\s+/).slice(0,5).join(" "):noteAttachment.info&amp;&amp;noteAttachment.info.length&gt;0?noteAttachment.info:null},updateNoteAria=function(noteId){var note=getNote(noteId),columnIdentifier=note.closest(".board_column").find(".mod_board_column_name").text();if(noteId){var noteIdentifier=textIdentifierForNote(note),deleteNoteString=strings.aria_deletepost.replace("{column}",columnIdentifier).replace("{post}",noteIdentifier);note.find(".delete_note").attr("aria-label",deleteNoteString).attr("title",deleteNoteString);var moveNoteString=strings.aria_movepost.replace("{post}",noteIdentifier);note.find(".move_note").attr("aria-label",moveNoteString).attr("title",moveNoteString);var editNoteString=strings.aria_editpost.replace("{post}",noteIdentifier);note.find(".edit_note").attr("aria-label",editNoteString).attr("title",editNoteString),note.find(".mod_board_rating").attr("aria-label",strings.aria_ratepost.replace("{column}",columnIdentifier).replace("{post}",noteIdentifier)),note.find(".note_ariatext").html(noteIdentifier)}},updateColumnAria=function(columnId){var column=(0,_jquery.default)(".board_column[data-ident="+columnId+"]"),columnIdentifier=column.find(".mod_board_column_name").text(),newNoteString=strings.aria_newpost.replace("{column}",columnIdentifier),moveColumnString=strings.aria_movecolumn.replace("{column}",columnIdentifier),deleteColumnString=strings.aria_deletecolumn.replace("{column}",columnIdentifier);column.find(".newnote").attr("aria-label",newNoteString).attr("title",newNoteString),column.find(".mod_column_move").attr("aria-label",moveColumnString).attr("title",moveColumnString),column.find(".delete_column").attr("aria-label",deleteColumnString).attr("title",deleteColumnString),column.find(".board_note").each((function(index,note){updateNoteAria((0,_jquery.default)(note).data("ident"))}))},stopNoteEdit=function(){if(editingNote){var note=getNote(editingNote);if(note){var noteHeading=getNoteHeadingForNote(note),noteText=getNoteTextForNote(note),noteBorder=getNoteBorderForNote(note);noteHeading.show(),noteBorder.show(),noteText.show(),noteHeading.html()||(noteHeading.hide(),noteBorder.hide()),!noteText.html()&amp;&amp;noteHeading.html()&amp;&amp;(noteText.hide(),noteBorder.hide())}editingNote=0}else getNote(0).remove()};const sortAfterDelete=(columnID,sortorder)=&gt;{let column=(columnID=&gt;(0,_jquery.default)(".board_column[data-ident='".concat(columnID,"'] .board_column_content")))(columnID);column.children().filter(((_,element)=&gt;parseInt((0,_jquery.default)(element).data("sortorder"))&gt;parseInt(sortorder))).each(((_,element)=&gt;{let so=(0,_jquery.default)(element).data("sortorder");(0,_jquery.default)(element).data("sortorder",so-1)}))};var setAttachment=function(note,attachment){var noteAttachment=getNoteAttachmentsForNote(note);if(noteAttachment){attachment?attachment.type+="":attachment={type:"0"};var attType=noteAttachment.find(".mod_board_type");attType.val(attachment.type?attachment.type:"0"),attType.val()&gt;"0"&amp;&amp;(noteAttachment.find(".info").val(decodeText(attachment.info)),noteAttachment.find(".url").val(decodeText(attachment.url))),function(note){var noteAttachment=getNoteAttachmentsForNote(note),type=noteAttachment.find(".mod_board_type").val(),attachmentInfo=noteAttachment.find(".info"),attachmentUrl=noteAttachment.find(".url"),attachmentFile=noteAttachment.find(".mod_board_file");type&gt;"0"?(attachmentInfo.prop("placeholder",strings["option_"+attachmentTypeToString(type)+"_info"]),attachmentUrl.prop("placeholder",strings["option_"+attachmentTypeToString(type)+"_url"]),attachmentInfo.show(),2==type&amp;&amp;FileReader?(attachmentFile.show(),attachmentUrl.hide()):(attachmentFile.hide(),attachmentUrl.show())):(attachmentInfo.hide(),attachmentUrl.hide(),attachmentFile.hide(),attachmentInfo.val(""),attachmentUrl.val(""))}(note)}previewAttachment(note,attachment)},attachmentDataForNote=function(note){var attachment={type:0,info:null,url:null,filename:null,filecontents:null},noteAttachment=getNoteAttachmentsForNote(note);if(noteAttachment.length){attachment.type=noteAttachment.find(".mod_board_type").val(),attachment.info=encodeText(noteAttachment.find(".info").val()),attachment.url=encodeText(noteAttachment.find(".url").val());var fileElem=noteAttachment.find(".mod_board_file&gt;input");fileElem.data("filename")&amp;&amp;(attachment.filename=fileElem.data("filename"),attachment.filecontents=fileElem.data("filecontents"))}return attachment.info&amp;&amp;attachment.info.length||attachment.url&amp;&amp;attachment.url.length||attachment.filename||(attachment.type=0),attachment},attachmentTypeToString=function(type){switch(type){case"1":return"youtube";case"2":return"image";case"3":return"link";default:return null}};var previewAttachment=function(note,attachment){var elem=note.find(".mod_board_preview");if(attachment||(attachment=attachmentDataForNote(note)),getNoteTextForNote(note).html().length?elem.removeClass("mod_board_notext"):elem.addClass("mod_board_notext"),elem.removeClass("wrapper_youtube"),elem.removeClass("wrapper_image"),elem.removeClass("wrapper_url"),attachment.filename&amp;&amp;2==parseInt(attachment.type))elem.html('&lt;img src="'.concat(attachment.filecontents,'" alt="').concat(attachment.info,'"\n                class="mod_board_preview_element"/&gt;')),elem.addClass("wrapper_image"),elem.show();else if(attachment.url){const blanktarget=enableblanktarget?' target="_blank"':"";switch(parseInt(attachment.type)){case 1:{let url=(url=&gt;{let videoID=url.match(/(\/|%3D|v=)([0-9A-z-_]{11})([%#?&amp;]|$)/);return videoID&amp;&amp;void 0!==videoID[2]&amp;&amp;11===videoID[2].length?"https://www.youtube-nocookie.com/embed/".concat(videoID[2]):null})(attachment.url);null===url?elem.html(strings.invalid_youtube_url):(elem.html('&lt;iframe src="'+url+'" class="mod_board_preview_element" frameborder="0" allow="accelerometer; autoplay; clipboard-write;encrypted-media; gyroscope; picture-in-picture" allowfullscreen&gt;&lt;/iframe&gt;&lt;a href="#" class="stretched-link" aria-hidden="true"&gt;&lt;/a&gt;'),elem.addClass("wrapper_youtube").addClass("position-relative")),elem.show()}break;case 2:elem.html('&lt;img src="'.concat(attachment.url,'" alt="').concat(attachment.info,'"\n                        class="mod_board_preview_element"/&gt;')),elem.addClass("wrapper_image"),elem.show();break;case 3:elem.html('&lt;a href="'+attachment.url+'" class="mod_board_preview_element"'+blanktarget+"&gt;"+(attachment.info||attachment.url)+"&lt;/a&gt;"),elem.addClass("wrapper_url"),elem.show();break;default:elem.html(""),elem.hide()}}else elem.html(""),elem.hide()},addNote=function(columnid,ident,heading,content,attachment,owner,sortorder,rating){var ismynote=owner.id==userId||!ident,iseditable=isEditor||ismynote&amp;&amp;!isReadOnlyBoard;if(!ident){var pendingNote=getNote(0);pendingNote&amp;&amp;pendingNote.remove()}if(3==sortby){(0,_jquery.default)(".board_column[data-ident='".concat(columnid,"'] .board_column_content")).children().filter(((_,element)=&gt;parseInt((0,_jquery.default)(element).data("sortorder"))&gt;=parseInt(sortorder))).each(((_,element)=&gt;{let so=(0,_jquery.default)(element).data("sortorder");(0,_jquery.default)(element).data("sortorder",so+1)}))}var note=(0,_jquery.default)('&lt;div class="board_note" data-column="'+columnid+'" data-ident="'+ident+'" data-sortorder="'+sortorder+'"&gt;&lt;/div&gt;');ismynote&amp;&amp;note.addClass("mod_board_mynote"),iseditable&amp;&amp;note.addClass("mod_board_editablenote"),ismynote||iseditable||note.addClass("mod_board_nosort");var notecontent=(0,_jquery.default)('&lt;div class="mod_board_note_content"&gt;&lt;/div&gt;'),notecontrols=(0,_jquery.default)('&lt;div class="mod_board_note_controls"&gt;&lt;/div&gt;'),noteHeading=(0,_jquery.default)('&lt;div class="mod_board_note_heading" tabindex="0"&gt;'+(heading||"")+"&lt;/div&gt;"),noteBorder=(0,_jquery.default)('&lt;div class="mod_board_note_border"&gt;&lt;/div&gt;'),noteText=(0,_jquery.default)('&lt;div class="mod_board_note_text" tabindex="0"&gt;'+(content||"")+"&lt;/div&gt;"),noteAriaText=(0,_jquery.default)('&lt;div class="note_ariatext hidden" role="heading" aria-level="4" tabindex="0"&gt;&lt;/div&gt;'),attachmentPreview=(0,_jquery.default)('&lt;div class="mod_board_preview"&gt;&lt;/div&gt;');notecontent.append(noteHeading),notecontent.append(noteBorder),notecontent.append(noteText),notecontent.append(noteAriaText),notecontent.append(attachmentPreview),note.append(notecontent);var columnContent=(0,_jquery.default)(".board_column[data-ident="+columnid+"] .board_column_content"),beginEdit=()=&gt;{!function(ident){if(editingNote){if(editingNote==ident)return;stopNoteEdit()}if(ident){var pendingNote=getNote(0);pendingNote&amp;&amp;pendingNote.remove()}var note=getNote(ident);note&amp;&amp;(showModalForm(note),ident&amp;&amp;(editingNote=ident))}(ident)};if(ident){if(ratingenabled){note.addClass("mod_board_rateablenote");var rateElement=(0,_jquery.default)('&lt;div class="fa fa-star mod_board_rating" role="button" tabindex="0"&gt; '.concat(rating," &lt;/div&gt;"));handleAction(rateElement,(()=&gt;{!function(ident){if(ratingenabled&amp;&amp;!isReadOnlyBoard){var note=getNote(ident),rating=note.find(".mod_board_rating");rating.data("disabled")||(rating.data("disabled",!0),serviceCall("can_rate_note",{id:ident},(function(result){if(result.canrate){const rateRemoveText=result.hasrated?strings.rate_remove_note_text:strings.rate_note_text;_notification.default.confirm(strings.rate_note_title,rateRemoveText,strings.Ok,strings.Cancel,(function(){serviceCall("rate_note",{id:ident},(function(result){result.status&amp;&amp;(lastHistoryId=result.historyid,rating.html(" ".concat(result.rating," ")),2==sortby&amp;&amp;sortNotes(note.closest(".board_column_content"))),rating.data("disabled",!1)}))})).then((function(rateModal){rateModal.getRoot().on(_modal_events.default.hidden,(function(){rating.data("disabled",!1)}))}))}})))}}(ident)})),notecontrols.append(rateElement)}if(iseditable){var removeElement=(0,_jquery.default)('&lt;div class="fa fa-remove delete_note" role="button" tabindex="0"&gt;&lt;/div&gt;');if(handleAction(removeElement,(()=&gt;{!function(ident){_notification.default.confirm(strings.remove_note_title,strings.remove_note_text,strings.delete,strings.Cancel,(function(){serviceCall("delete_note",{id:ident},(function(result){if(result.status){lastHistoryId=result.historyid;let note=getNote(ident);if(3==sortby){let columnID=note.data("column"),sortorder=note.data("sortorder");sortAfterDelete(columnID,sortorder)}note.remove()}}))}))}(ident)})),notecontrols.append(removeElement),1==usersCanEdit||isEditor){var moveElement=(0,_jquery.default)('&lt;div class="mod_board_move fa fa-arrows move_note" role="button" tabindex="0"&gt;&lt;/div&gt;');notecontrols.append(moveElement),_movenotesdialog.default.init(ownerId,moveNote)}var editElement=(0,_jquery.default)('&lt;div class="mod_board_move fa fa-pencil edit_note" role="button" tabindex="0"&gt;&lt;/div&gt;');notecontrols.append(editElement),handleAction(editElement,(()=&gt;{beginEdit()})),updateSortable(),setAttachment(note,attachment)}else previewAttachment(note,attachment);note.append(notecontrols),handleAction(notecontent,(()=&gt;fullScreenNote(ident,notecontent))),noteHeading.html()||(noteHeading.hide(),noteBorder.hide()),!noteText.html()&amp;&amp;noteHeading.html()&amp;&amp;(noteText.hide(),noteBorder.hide());var lastOne=columnContent.find(".board_note").last();lastOne.length?note.insertAfter(lastOne):columnContent.prepend(note)}else(0,_jquery.default)(".board_column[data-ident="+columnid+"] .board_column_newcontent").append(note),note.hide(),beginEdit()},addColumn=function(ident,name,locked,notes,colour){let headerStyle='style="border-top: 10px solid #'.concat(colour,'"');var iseditable=isEditor,nameCache=null,column=(0,_jquery.default)('&lt;div class="board_column board_column_hasdata" data-locked="'.concat(locked,'"                 ').concat(headerStyle,' data-ident="').concat(ident,'"&gt;&lt;/div&gt;')),columnHeader=(0,_jquery.default)('&lt;div class="board_column_header"&gt;&lt;/div&gt;'),columnSort=(0,_jquery.default)('&lt;div class="mod_board_column_sort fa"&gt;&lt;/div&gt;'),columnName=(0,_jquery.default)('&lt;div class="mod_board_column_name" tabindex="0" aria-level="3" role="heading"&gt;'+name+"&lt;/div&gt;"),columnContent=(0,_jquery.default)('&lt;div class="board_column_content"&gt;&lt;/div&gt;'),columnNewContent=(0,_jquery.default)('&lt;div class="board_column_newcontent"&gt;&lt;/div&gt;');if(3!=sortby&amp;&amp;columnHeader.append(columnSort),columnHeader.append(columnName),options.hideheaders&amp;&amp;columnName.addClass("d-none"),columnSort.on("click",(function(){sortNotes(columnContent,!0)})),iseditable){column.addClass("mod_board_editablecolumn");const lockIcon=locked?"fa-lock":"fa-unlock",lockElement=(0,_jquery.default)('&lt;div class="icon fa '.concat(lockIcon,' lock_column" role="button" tabindex="0"&gt;&lt;/div&gt;')),lockstring=locked?"aria_column_locked":"aria_column_unlocked";(0,_str.get_string)(lockstring,"mod_board",name).done((function(str){lockElement.attr("aria-label",str),lockElement.attr("title",str)})),handleAction(lockElement,(()=&gt;{const lockColumn="true"!==column.attr("data-locked");serviceCall("lock_column",{id:ident,status:lockColumn},(function(result){const columnName=column.find(".mod_board_column_name").text();result.status&amp;&amp;(lockColumn?(lockElement.removeClass("fa-unlock").addClass("fa-lock"),column.attr("data-locked","true"),column.find(".board_button.newnote").addClass("d-none"),(0,_str.get_string)("aria_column_locked","mod_board",columnName).done((function(str){lockElement.attr("aria-label",str),lockElement.attr("title",str)}))):(lockElement.removeClass("fa-lock").addClass("fa-unlock"),column.attr("data-locked","false"),column.find(".board_button.newnote").removeClass("d-none"),(0,_str.get_string)("aria_column_unlocked","mod_board",columnName).done((function(str){lockElement.attr("aria-label",str),lockElement.attr("title",str)}))),lastHistoryId=result.historyid,updateSortable())}))})),columnHeader.append(lockElement),columnHeader.addClass("icon-size-3");const moveElement=(0,_jquery.default)('&lt;div class="icon fa fa-arrows mod_column_move" role="button" tabindex="0"&gt;&lt;/div&gt;');columnHeader.append(moveElement),_movecolumnsdialog.default.init(moveColumn);var removeElement=(0,_jquery.default)('&lt;div class="icon fa fa-remove delete_column" role="button" tabindex="0"&gt;&lt;/div&gt;');handleAction(removeElement,(()=&gt;{_notification.default.confirm(strings.remove_column_title,(0,_str.get_string)("remove_column_text","mod_board",getColumnName(ident)),strings.delete,strings.Cancel,(function(){serviceCall("delete_column",{id:ident},(function(result){result.status&amp;&amp;(column.remove(),lastHistoryId=result.historyid)}))}))})),columnHeader.append(removeElement)}if(column.append(columnHeader),column.append(columnContent),column.append(columnNewContent),iseditable&amp;&amp;(!function(elem,callback,callBeforeOnKeyEditing){if(elem.is(":editable"))throw new Error("handleEditableAction - must be called before setting the element as editable");elem.on("dblclick keypress",(function(e){if("keypress"==e.type){if(!isAriaTriggerKey(e.keyCode)||elem.is(":editing"))return;if(e.preventDefault(),callBeforeOnKeyEditing&amp;&amp;callback(),elem.editable("open"),callBeforeOnKeyEditing)return}callback()}))}(columnName,(function(){nameCache=columnName.html()}),!0),columnName.editable({toggleFontSize:!1,closeOnEnter:!0,callback:function(data){data.content?serviceCall("update_column",{id:ident,name:columnName.html()},(function(result){result.status?(lastHistoryId=result.historyid,updateColumnAria(ident)):(columnName.html(nameCache),nameCache=null)}),(function(){columnName.html(nameCache),nameCache=null})):(columnName.html(nameCache),nameCache=null)}})),!isReadOnlyBoard){const newNoteButton=(0,_jquery.default)('&lt;div class="board_button newnote" role="button" tabindex="0"&gt;&lt;div class="button_content"&gt;&lt;span class="fa '+options.noteicon+'"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;');columnNewContent.append(newNoteButton),"true"===column.attr("data-locked")&amp;&amp;newNoteButton.addClass("d-none"),handleAction(columnNewContent.find(".newnote"),(function(){addNote(ident,0,null,null,null,{id:userId},0,0)}))}var lastOne=(0,_jquery.default)(".mod_board .board_column_hasdata").last();if(lastOne.length?column.insertAfter(lastOne):(0,_jquery.default)(".mod_board").append(column),notes)for(var index in notes){let sortorder=3==sortby?notes[index].sortorder:notes[index].timecreated;addNote(ident,notes[index].id,notes[index].heading,notes[index].content,{type:notes[index].type,info:notes[index].info,url:notes[index].url},{id:notes[index].userid},sortorder,notes[index].rating)}sortNotes(columnContent),updateColumnAria(ident),(isEditor||1==usersCanEdit)&amp;&amp;updateSortable(),isEditor&amp;&amp;columnSorting()};const getColumnName=id=&gt;(0,_jquery.default)(".board_column[data-ident='".concat(id,"']")).find(".mod_board_column_name").html();const selectHeadingColour=()=&gt;{let colCount=(0,_jquery.default)(".board_column").length-1,colourCount=options.colours.length;return options.colours[colCount%colourCount]};var updateNote=function(note,heading,data){var noteHeading=getNoteHeadingForNote(note),noteText=getNoteTextForNote(note),noteBorder=getNoteBorderForNote(note);noteText.html(data.content),noteHeading.html(data.heading),setAttachment(note,data.attachment),updateNoteAria(data.id),noteHeading.show(),noteBorder.show(),noteText.show(),noteHeading.html()||(noteHeading.hide(),noteBorder.hide()),!noteText.html()&amp;&amp;noteHeading.html()&amp;&amp;(noteText.hide(),noteBorder.hide())},processBoardHistory=function(){serviceCall("board_history",{id:board.id,ownerid:ownerId,since:lastHistoryId},(function(boardhistory){for(var index in boardhistory){var item=boardhistory[index];if(item.boardid==board.id){var data=JSON.parse(item.content);if("add_note"==item.action){let sortorder=3==sortby?data.sortorder:data.timecreated;addNote(data.columnid,data.id,data.heading,data.content,data.attachment,{id:item.userid},sortorder,data.rating),updateNoteAria(data.id),sortNotes((0,_jquery.default)(".board_column[data-ident="+data.columnid+"] .board_column_content"))}else if("update_note"==item.action){let note=getNote(data.id),formModal=editModal,historyData=data;if(note){getNoteHeadingForNote(note);editingNote==data.id?_notification.default.confirm(strings.note_changed_title,strings.note_changed_text,strings.Ok,strings.Cancel,(function(){formModal.hide(),updateNote(note,0,historyData),stopNoteEdit()})):updateNote(note,0,data)}}else if("delete_note"==item.action){editingNote==data.id&amp;&amp;(_notification.default.alert(strings.warning,strings.note_deleted_text),stopNoteEdit());let note=getNote(data.id);if(3==sortby){let columnID=note.data("column"),sortorder=note.data("sortorder");sortAfterDelete(columnID,sortorder)}note.remove()}else if("add_column"==item.action)addColumn(data.id,data.name,!1,{},selectHeadingColour());else if("move_column"==item.action){const board=(0,_jquery.default)(".mod_board");data.sortorder.forEach((column=&gt;{board.find(".board_column[data-ident='".concat(column,"']")).detach().appendTo(board)}))}else if("update_column"==item.action)(0,_jquery.default)(".board_column[data-ident='"+data.id+"'] .mod_board_column_name").html(data.name),updateColumnAria(data.id);else if("lock_column"==item.action)(0,_jquery.default)(".board_column[data-ident='"+data.id+"']").attr("data-locked",data.locked),data.locked?(0,_jquery.default)(".board_column[data-ident='"+data.id+"']").find(".board_button.newnote").addClass("d-none"):(0,_jquery.default)(".board_column[data-ident='"+data.id+"']").find(".board_button.newnote").removeClass("d-none"),updateSortable();else if("delete_column"==item.action){var column=(0,_jquery.default)(".board_column[data-ident='"+data.id+"']");editingNote&amp;&amp;column.find('.board_note[data-ident="'+editingNote+'"]').length&amp;&amp;stopNoteEdit(),column.remove()}else if("rate_note"==item.action){var note=getNote(data.id);note.find(".mod_board_rating").html(data.rating),2==sortby&amp;&amp;sortNotes(note.closest(".board_column_content"))}lastHistoryId=item.id}}updateBoard()}))},updateBoard=function(instant){instant?processBoardHistory():options.history_refresh&gt;0&amp;&amp;(reloadTimer&amp;&amp;stopUpdating(),reloadTimer=setTimeout(processBoardHistory,1e3*options.history_refresh))},stopUpdating=function(){clearTimeout(reloadTimer),reloadTimer=null},sortNotes=function(content,toggle){var desc,asc,sortCol=(0,_jquery.default)(content).parent().find(".mod_board_column_sort"),direction=(0,_jquery.default)(content).data("sort");if(direction||(direction=2==sortby?"desc":"asc"),toggle&amp;&amp;(direction="asc"==direction?"desc":"asc"),"asc"==direction?(sortCol.removeClass("fa-angle-down"),sortCol.addClass("fa-angle-up")):(sortCol.removeClass("fa-angle-up"),sortCol.addClass("fa-angle-down")),(0,_jquery.default)(content).data("sort",direction),1==sortby)desc=function(a,b){return(0,_jquery.default)(b).data("sortorder")-(0,_jquery.default)(a).data("sortorder")},asc=function(a,b){return(0,_jquery.default)(a).data("sortorder")-(0,_jquery.default)(b).data("sortorder")};else if(2==sortby)desc=function(a,b){return(0,_jquery.default)(b).find(".mod_board_rating").text()-(0,_jquery.default)(a).find(".mod_board_rating").text()||(0,_jquery.default)(b).data("sortorder")-(0,_jquery.default)(a).data("sortorder")},asc=function(a,b){return(0,_jquery.default)(a).find(".mod_board_rating").text()-(0,_jquery.default)(b).find(".mod_board_rating").text()||(0,_jquery.default)(a).data("sortorder")-(0,_jquery.default)(b).data("sortorder")};else if(3==sortby){let sortElements=(a,b)=&gt;(0,_jquery.default)(a).data("sortorder")-(0,_jquery.default)(b).data("sortorder");return void(0,_jquery.default)("&gt; .board_note",(0,_jquery.default)(content)).sort(sortElements).appendTo((0,_jquery.default)(content))}(0,_jquery.default)("&gt; .board_note",(0,_jquery.default)(content)).sort("asc"===direction?asc:desc).appendTo((0,_jquery.default)(content))},updateSortable=function(){let fromColumnID;(0,_jquery.default)(".board_column[data-locked='false'] .board_column_content").sortable({connectWith:".board_column[data-locked='false'] .board_column_content",cancel:".mod_board_nosort",handle:".move_note",start:function(_,ui){fromColumnID=(0,_jquery.default)(ui.item).closest(".board_column").data("ident")},stop:function(_,ui){var note=(0,_jquery.default)(ui.item),tocolumn=note.closest(".board_column"),elem=(0,_jquery.default)(this),noteid=note.data("ident"),columnid=tocolumn.data("ident");let sortorder=tocolumn.find(".board_column_content").children().index((0,_jquery.default)(".board_note[data-ident=".concat(noteid,"]")));moveNote(fromColumnID,{id:noteid,columnid:columnid,ownerid:ownerId,sortorder:sortorder},elem)}})};const moveNote=(fromColumnID,payload,elem)=&gt;{updateSortOrders(fromColumnID,payload.columnid,payload.id,payload.sortorder),serviceCall("move_note",payload,(result=&gt;{result.status?(lastHistoryId=result.historyid,updateNoteAria(payload.id),updateBoard(),sortNotes((0,_jquery.default)(".board_column[data-ident=".concat(payload.columnid,"] .board_column_content")))):elem&amp;&amp;elem.sortable("cancel")}))},columnSorting=()=&gt;{let movingColumnId;(0,_jquery.default)(".mod_board").sortable({connectWith:".mod_board",axis:"x",containment:".mod_board_wrapper",cancel:".mod_board_nosort",handle:".mod_column_move",start:function(_,ui){movingColumnId=(0,_jquery.default)(ui.item).closest(".board_column").data("ident")},stop:function(_,ui){let column=(0,_jquery.default)(ui.item),sortorder=(0,_jquery.default)(".mod_board").find(".board_column").index(column);moveColumn({id:movingColumnId,sortorder:sortorder})}})},moveColumn=payload=&gt;{serviceCall("move_column",payload,!1)},updateSortOrders=(fromColumnID,toColumnID,noteID,newSortOrder)=&gt;{let toColumn=(0,_jquery.default)(".board_column[data-ident=".concat(toColumnID,"] .board_column_content")),movedNote=(0,_jquery.default)(".board_note[data-ident=".concat(noteID,"]")),oldSortOrder=movedNote.data("sortorder"),toChildren=toColumn.children();if(fromColumnID==toColumnID)toChildren.each(((_,note)=&gt;{let sortOrder=(0,_jquery.default)(note).data("sortorder");oldSortOrder&lt;newSortOrder?sortOrder&lt;=newSortOrder&amp;&amp;sortOrder&gt;=oldSortOrder&amp;&amp;(0,_jquery.default)(note).data("sortorder",sortOrder-1):oldSortOrder&gt;newSortOrder&amp;&amp;sortOrder&gt;=newSortOrder&amp;&amp;sortOrder&lt;=oldSortOrder&amp;&amp;(0,_jquery.default)(note).data("sortorder",sortOrder+1)}));else{let fromChildren=(0,_jquery.default)(".board_column[data-ident=".concat(fromColumnID,"] .board_column_content")).children();toChildren.each(((_,note)=&gt;{let sortOrder=(0,_jquery.default)(note).data("sortorder");sortOrder&gt;=newSortOrder&amp;&amp;(0,_jquery.default)(note).data("sortorder",sortOrder+1)})),fromChildren.each(((_,note)=&gt;{let sortOrder=(0,_jquery.default)(note).data("sortorder");sortOrder&gt;oldSortOrder&amp;&amp;(0,_jquery.default)(note).data("sortorder",sortOrder-1)}))}movedNote.data("sortorder",newSortOrder)};var getBody=function(noteid,columnid,ownerId){var params={noteid:noteid,columnid:columnid,ownerid:ownerId};return _fragment.default.loadFragment("mod_board","note_form",contextid,params)},showModalForm=function(note){let title,noteId=0,columnId=note.data("column"),columnIdentifier=(0,_jquery.default)(".board_column[data-ident="+columnId+"]").find(".mod_board_column_name").text();note.data("ident")?(noteId=note.data("ident"),title=strings.modal_title_edit.replace("{column}",columnIdentifier)):title=strings.modal_title_new.replace("{column}",columnIdentifier),_modal_factory.default.create({type:_modal_factory.default.types.SAVE_CANCEL,title:title,body:getBody(noteId,columnId,ownerId),large:!0,removeOnClose:!0}).then((function(modal){return modal.getBodyPromise().then((function(){let saveInProgress=!1;editModal=modal,modal.setLarge(),modal.setSaveButtonText(strings.post_button_text),modal.setButtonText("cancel",strings.cancel_button_text),modal.getRoot().on(_modal_events.default.hidden,(function(){stopNoteEdit(),note.data("ident")||note.remove()})),modal.getRoot().on(_modal_events.default.save,(function(e){e.preventDefault(),modal.getRoot().find("form").submit()}));var changeEvent=document.createEvent("HTMLEvents");if(changeEvent.initEvent("change",!0,!0),modal.getRoot().on("submit","form",(function(e){if(e.preventDefault(),saveInProgress)return;if(saveInProgress=!0,modal.getRoot().find("form").get(0).reportValidity()){modal.getRoot().find(":input").each((function(index,element){element.dispatchEvent(changeEvent)}));var invalid=_jquery.default.merge(modal.getRoot().find('[aria-invalid="true"]'),modal.getRoot().find(".error"),modal.getRoot().find(":invalid"));if(invalid.length)return invalid.first().focus(),void(saveInProgress=!1);var formData=JSON.stringify(modal.getRoot().find("form").serialize());serviceCall("submit_form",{contextid:contextid,jsonformdata:formData},(function(result){result.status?("insert"==result.action?(lastHistoryId=result.historyid,note.remove(),addNote(columnId,result.note.id,result.note.heading,result.note.content,{type:result.note.type,info:result.note.info,url:result.note.url},{id:result.note.userid},result.note.timecreated,result.note.rating),sortNotes((0,_jquery.default)(".board_column[data-ident="+columnId+"] .board_column_content")),updateNoteAria(result.note.id)):(lastHistoryId=result.historyid,getNoteTextForNote(note).html(result.note.content),getNoteHeadingForNote(note).html(result.note.heading),updateNoteAria(result.note.id),setAttachment(note,{type:result.note.type,info:result.note.info,url:result.note.url})),stopNoteEdit(),Y.use("moodle-core-formchangechecker",(function(){M.core_formchangechecker.reset_form_dirty_state()})),modal.destroy()):modal.destroy()}))}else saveInProgress=!1})),1==mediaSelection){modal.getRoot().find("#fitem_id_mediatype").hide();let mediaSelect=modal.getRoot().find("#fitem_id_mediatype select"),ytButton=modal.getRoot().find(".mod_board_attachment_button.youtube_button"),pictureButton=modal.getRoot().find(".mod_board_attachment_button.image_button"),linkButton=modal.getRoot().find(".mod_board_attachment_button.link_button"),updateMediaButtons=function(){switch(ytButton.removeClass("selected"),pictureButton.removeClass("selected"),linkButton.removeClass("selected"),mediaSelect.val()){case"1":ytButton.addClass("selected");break;case"2":pictureButton.addClass("selected");break;case"3":linkButton.addClass("selected")}};updateMediaButtons(),handleAction(ytButton,(function(){"1"===mediaSelect.val()?mediaSelect.val(0):mediaSelect.val(1),updateMediaButtons(),mediaSelect[0].dispatchEvent(changeEvent)})),handleAction(pictureButton,(function(){"2"===mediaSelect.val()?mediaSelect.val(0):mediaSelect.val(2),updateMediaButtons(),mediaSelect[0].dispatchEvent(changeEvent)})),handleAction(linkButton,(function(){"3"===mediaSelect.val()?mediaSelect.val(0):mediaSelect.val(3),updateMediaButtons(),mediaSelect[0].dispatchEvent(changeEvent)}))}else modal.getRoot().find("#fitem_id_mediabuttons").hide();return function(note,modal){let addYoutube,addImage,addLink,postButton,cancelButton,columnIdentifier=note.closest(".board_column").find(".mod_board_column_name").text(),modalRoot=modal.getRoot();if(note.data("ident")){var noteIdentifier=textIdentifierForNote(note);postButton=strings.aria_postedit.replace("{column}",columnIdentifier).replace("{post}",noteIdentifier),cancelButton=strings.aria_canceledit.replace("{column}",columnIdentifier).replace("{post}",noteIdentifier),addYoutube=strings.aria_addmedia.replace("{type}",strings.option_youtube).replace("{column}",columnIdentifier).replace("{post}",noteIdentifier),addImage=strings.aria_addmedia.replace("{type}",strings.option_image).replace("{column}",columnIdentifier).replace("{post}",noteIdentifier),addLink=strings.aria_addmedia.replace("{type}",strings.option_link).replace("{column}",columnIdentifier).replace("{post}",noteIdentifier)}else postButton=strings.aria_postnew.replace("{column}",columnIdentifier),cancelButton=strings.aria_cancelnew.replace("{column}",columnIdentifier),addYoutube=strings.aria_addmedianew.replace("{type}",strings.option_youtube).replace("{column}",columnIdentifier),addImage=strings.aria_addmedianew.replace("{type}",strings.option_image).replace("{column}",columnIdentifier),addLink=strings.aria_addmedianew.replace("{type}",strings.option_link).replace("{column}",columnIdentifier);1==mediaSelection&amp;&amp;(modalRoot.find(".mod_board_attachment_button.youtube_button").attr("aria-label",addYoutube),modalRoot.find(".mod_board_attachment_button.youtube_button").attr("title",addYoutube),modalRoot.find(".mod_board_attachment_button.image_button").attr("aria-label",addImage),modalRoot.find(".mod_board_attachment_button.image_button").attr("title",addImage),modalRoot.find(".mod_board_attachment_button.link_button").attr("aria-label",addLink),modalRoot.find(".mod_board_attachment_button.link_button").attr("title",addLink));let button=modalRoot.find(modal.getActionSelector("save"));button&amp;&amp;button.attr("aria-label",postButton),button=modalRoot.find(modal.getActionSelector("cancel")),button&amp;&amp;button.attr("aria-label",cancelButton)}(note,modal),modal.show(),modal})).catch(_notification.default.exception),modal})).catch(_notification.default.exception)},fullScreenNote=(ident,notecontent)=&gt;{const heading=getNoteHeadingForNote(notecontent).html(),modalBody=(0,_jquery.default)(document.createElement("div"));modalBody.addClass("mod_board_note_content");const text=getNoteTextForNote(notecontent);text&amp;&amp;modalBody.append(text.clone());const preview=(note=notecontent,(0,_jquery.default)(note).find(".mod_board_preview"));var note;preview&amp;&amp;modalBody.append(preview.clone());const commentArea=(0,_jquery.default)(document.createElement("div"));commentArea.attr("data-region","comment-area"),modalBody.append(commentArea),_comments.default.fetchFor(ident,commentArea),_modal_factory.default.create({type:_modal_factory.default.types.CANCEL,title:heading,body:modalBody}).then((function(modal){return modal.setLarge(),modal.show(),modal.getRoot().on(_modal_events.default.hidden,(function(){modal.destroy()})),modal}),this).catch(_notification.default.exception)},init=function(){serviceCall("get_board",{id:board.id,ownerid:ownerId},(function(columns){if(columns)for(var index in columns)addColumn(columns[index].id,columns[index].name,columns[index].locked,columns[index].notes||{},options.colours[columns[index].id%options.colours.length]);var column,newBusy;isEditor&amp;&amp;(column=(0,_jquery.default)('&lt;div class="board_column_empty"&gt;&lt;/div&gt;'),newBusy=!1,column.append('&lt;div class="board_button newcolumn" role="button" tabindex="0" aria-label="'+strings.aria_newcolumn+'" title="'+strings.aria_newcolumn+'"&gt;&lt;div class="button_content"&gt;&lt;span class="fa '+options.columnicon+'"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;'),handleAction(column.find(".newcolumn"),(function(){newBusy||(newBusy=!0,serviceCall("add_column",{boardid:board.id,name:strings.default_column_heading},(function(result){addColumn(result.id,strings.default_column_heading,!1,{},selectHeadingColour()),lastHistoryId=result.historyid,newBusy=!1}),(function(){newBusy=!1})))})),(0,_jquery.default)(".mod_board").append(column)),lastHistoryId=board.historyid,isEditor&amp;&amp;(updateSortable(),columnSorting()),updateBoard()}))},stringsInfo=[];for(var string in strings)stringsInfo.push({key:string,component:"mod_board"});_jquery.default.when((0,_str.get_strings)(stringsInfo)).done((function(results){var index=0;for(string in strings)strings[string]=results[index++];init()}))},_jquery=_interopRequireDefault(_jquery),_ajax=_interopRequireDefault(_ajax),_modal_factory=_interopRequireDefault(_modal_factory),_modal_events=_interopRequireDefault(_modal_events),_notification=_interopRequireDefault(_notification),_fragment=_interopRequireDefault(_fragment),_comments=_interopRequireDefault(_comments),_movenotesdialog=_interopRequireDefault(_movenotesdialog),_movecolumnsdialog=_interopRequireDefault(_movecolumnsdialog);const isAriaTriggerKey=function(key){return 13==key||32==key},encodeText=function(rawText){return(0,_jquery.default)("&lt;div /&gt;").text(rawText).html()},decodeText=function(encodedText){return(0,_jquery.default)("&lt;div /&gt;").html(encodedText).text()},handleAction=function(elem,callback){return elem.on("click keypress",(function(e){if("keypress"==e.type){if(!isAriaTriggerKey(e.keyCode))return;e.preventDefault()}callback(),e.preventDefault()}))};return _exports.default}));
define("mod_board/movenotesdialog",["exports","core/modal_factory","core/modal_events","core/notification","jquery","core/str"],(function(_exports,_modal_factory,_modal_events,_notification,_jquery,Str){function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_modal_factory=_interopRequireDefault(_modal_factory),_modal_events=_interopRequireDefault(_modal_events),_notification=_interopRequireDefault(_notification),_jquery=_interopRequireDefault(_jquery),Str=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}(Str);const getDestinationsList=moveNoteControl=&gt;{const editableColumns=document.querySelectorAll('.board_column[data-locked="false"]'),wrapper=document.createElement("div"),movingNote=moveNoteControl.closest(".board_note"),movingNoteId=movingNote.dataset.ident,movingNoteColumn=movingNote.dataset.column;return editableColumns.forEach((column=&gt;{const list=document.createElement("ul");list.classList.add("move-dialog-destinations","list-unstyled");const columnName=column.querySelector(".mod_board_column_name").innerText;Str.get_string("move_to_firstitemcolumn","mod_board",columnName).then((stringColumn=&gt;{const li=document.createElement("li");li.classList.add("move-dialog-destination");const link=moveLink(column.dataset.ident,movingNoteId,0,movingNoteColumn,0,stringColumn);li.appendChild(link),list.appendChild(li);const destinations=column.querySelectorAll(".move_note");let count=0;return destinations.forEach((destination=&gt;{count++;const li=document.createElement("li");li.classList.add("move-dialog-destination","ml-2");const targetNote=(0,_jquery.default)(destination.closest(".board_note"));let noteTitle=targetNote.find(".mod_board_note_heading").html();""===noteTitle&amp;&amp;(noteTitle=count);const sortOrder=targetNote.data("sortorder"),noteId=targetNote.data("ident");noteId!=movingNoteId&amp;&amp;Str.get_string("move_to_afterpost","mod_board",noteTitle).then((stringPost=&gt;{const link=moveLink(column.dataset.ident,movingNoteId,noteId,movingNoteColumn,sortOrder+1,stringPost);return li.appendChild(link),list.appendChild(li),""})).catch(_notification.default.exception)})),wrapper.appendChild(list),""})).catch(_notification.default.exception)})),wrapper},moveLink=(columnId,movingNoteId,targetNoteId,movingNoteColumn,sortOrder,linkString)=&gt;{const link=document.createElement("a");return link.setAttribute("href","#"),link.dataset.columnid=columnId,link.dataset.movingnoteid=movingNoteId,link.dataset.targetnoteid=targetNoteId,link.dataset.movingnotecolumn=movingNoteColumn,link.dataset.sortorder=sortOrder,link.innerText=linkString,link},displayMoveModal=moveNoteControl=&gt;{const modalTitle=moveNoteControl.getAttribute("aria-label");_modal_factory.default.create({type:_modal_factory.default.types.CANCEL,title:modalTitle,body:getDestinationsList(moveNoteControl)}).then((modal=&gt;(modal.getRoot().on(_modal_events.default.hidden,(()=&gt;{modal.destroy()})),document.addEventListener("closemovedialog",(()=&gt;{modal.destroy()})),modal.show(),modal))).catch(_notification.default.exception)};var _default={init:(ownerId,moveNote)=&gt;{const body=document.querySelector("body");body.classList.contains("move-dialog-initialized")||(document.addEventListener("click",(e=&gt;{const moveNoteControl=e.target.closest(".mod_board_note_controls .move_note");moveNoteControl&amp;&amp;displayMoveModal(moveNoteControl);const moveDestination=e.target.closest(".move-dialog-destination a");if(moveDestination){e.preventDefault();let payload={id:parseInt(moveDestination.dataset.movingnoteid),columnid:parseInt(moveDestination.dataset.columnid),ownerid:ownerId,sortorder:parseInt(moveDestination.dataset.sortorder)};const movingNoteColumn=parseInt(moveDestination.dataset.movingnotecolumn),movingNote=document.querySelector('.board_note[data-ident="'.concat(moveDestination.dataset.movingnoteid,'"]')),toColumn=document.querySelector('.board_column[data-ident="'.concat(moveDestination.dataset.columnid,'"] .board_column_content'));if(0==moveDestination.dataset.sortorder)toColumn.prepend(movingNote);else{const targetNote=document.querySelector('.board_note[data-ident="'.concat(moveDestination.dataset.targetnoteid,'"]'));targetNote?toColumn.insertBefore(movingNote,targetNote.nextSibling):toColumn.appendChild(movingNote)}moveNote(movingNoteColumn,payload,!1),document.dispatchEvent(new Event("closemovedialog"))}})),document.addEventListener("keypress",(e=&gt;{const moveNoteControl=e.target.closest(".mod_board_note_controls .move_note");moveNoteControl&amp;&amp;displayMoveModal(moveNoteControl)})),body.classList.add("move-dialog-initialized"))}};return _exports.default=_default,_exports.default}));
define("mod_board/main",["exports","mod_board/board","core/ajax","core/notification"],(function(_exports,_board,_ajax,_notification){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * A javascript module to handle the board.
   *
   * @author     Karen Holland &lt;karen@brickfieldlabs.ie&gt;
   * @copyright  2021 Brickfield Education Labs &lt;https://www.brickfield.ie/&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_board=_interopRequireDefault(_board),_ajax=_interopRequireDefault(_ajax),_notification=_interopRequireDefault(_notification);var _default={initialize:(boardid,ownerid)=&gt;{const promise=((boardid,ownerid)=&gt;_ajax.default.call([{methodname:"mod_board_get_configuration",args:{id:boardid,ownerid:ownerid},done:response=&gt;response,fail:_notification.default.exception}],!1))(boardid,ownerid);promise[0].then((config=&gt;new _board.default(config))).catch((error=&gt;{_notification.default.exception(error)}))}};return _exports.default=_default,_exports.default}));
define("mod_board/movecolumnsdialog",["exports","core/modal_factory","core/modal_events","core/notification","core/str"],(function(_exports,_modal_factory,_modal_events,_notification,Str){function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_modal_factory=_interopRequireDefault(_modal_factory),_modal_events=_interopRequireDefault(_modal_events),_notification=_interopRequireDefault(_notification),Str=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}(Str);const getDestinationsList=moveColumnControl=&gt;{const columns=document.querySelectorAll(".mod_board .board_column"),currentColumn=moveColumnControl.closest(".board_column"),columnsArray=Array.from(columns);let sortorder=columnsArray.indexOf(currentColumn);const wrapper=document.createElement("div"),list=document.createElement("ul");return list.classList.add("move-column-dialog-destinations","list-unstyled"),Str.get_string("move_column_to_firstplace","mod_board").then((moveToFirstString=&gt;{if(0!==sortorder){const li=document.createElement("li"),link=moveLink(currentColumn.dataset.ident,0,moveToFirstString);li.appendChild(link),list.appendChild(li)}return columns.forEach((column=&gt;{const sortOrder=columnsArray.indexOf(column);if(currentColumn==column)return;const columnName=column.querySelector(".mod_board_column_name").innerText;Str.get_string("move_column_to_aftercolumn","mod_board",columnName).then((moveToColumnString=&gt;{const li=document.createElement("li"),link=moveLink(currentColumn.dataset.ident,sortOrder,moveToColumnString);return li.appendChild(link),list.appendChild(li),""})).catch(_notification.default.exception)})),wrapper.appendChild(list),""})).catch(_notification.default.exception),wrapper.appendChild(list),wrapper},moveLink=(movingColumnId,sortOrder,linkString)=&gt;{const link=document.createElement("a");return link.setAttribute("href","#"),link.dataset.movingcolumnid=movingColumnId,link.dataset.sortorder=sortOrder,link.innerText=linkString,link},displayMoveModal=moveColumnControl=&gt;{const modalTitle=moveColumnControl.getAttribute("aria-label");_modal_factory.default.create({type:_modal_factory.default.types.CANCEL,title:modalTitle,body:getDestinationsList(moveColumnControl)}).then((modal=&gt;(modal.getRoot().on(_modal_events.default.hidden,(()=&gt;{modal.destroy()})),document.addEventListener("closemovedialog",(()=&gt;{modal.destroy()})),modal.show(),modal))).catch(_notification.default.exception)};var _default={init:moveColumn=&gt;{const body=document.querySelector("body");body.classList.contains("move-column-dialog-initialized")||(document.addEventListener("click",(e=&gt;{const moveColumnControl=e.target.closest(".mod_column_move");moveColumnControl&amp;&amp;displayMoveModal(moveColumnControl);const moveDestination=e.target.closest(".move-column-dialog-destinations a");if(moveDestination){e.preventDefault();let payload={id:parseInt(moveDestination.dataset.movingcolumnid),sortorder:parseInt(moveDestination.dataset.sortorder)};moveColumn(payload),document.dispatchEvent(new Event("closemovedialog"))}})),document.addEventListener("keypress",(e=&gt;{const moveColumnControl=e.target.closest(".mod_column_move");moveColumnControl&amp;&amp;displayMoveModal(moveColumnControl)})),body.classList.add("move-column-dialog-initialized"))}};return _exports.default=_default,_exports.default}));
define("mod_board/comments",["exports","core/ajax","core/notification","core/templates","core/emoji/picker","core/str"],(function(_exports,_ajax,_notification,_templates,_picker,Str){function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_ajax=_interopRequireDefault(_ajax),_notification=_interopRequireDefault(_notification),_templates=_interopRequireDefault(_templates),_picker=_interopRequireDefault(_picker),Str=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}(Str);const fetchFor=(noteId,element)=&gt;{_ajax.default.call([{methodname:"mod_board_get_comments",args:{noteid:noteId},done:response=&gt;renderComments(response,element),fail:_notification.default.exception}],!1)},renderComments=(response,element)=&gt;_templates.default.renderForPromise("mod_board/commentcontainer",response).then((_ref=&gt;{let{html:html,js:js}=_ref;_templates.default.replaceNodeContents(element,html,js)})).catch();var _default={init:()=&gt;{const board=document.querySelector(".mod_board");board.dataset.init||(board.dataset.init=1,Str.get_string("addcomment","mod_board").then((s=&gt;{const style=document.createElement("style");return style.innerHTML="\n            .comment-input:empty:before {\n                content: '".concat(s,"';\n            }\n        "),document.head.appendChild(style),""})).fail(_notification.default.exception),document.addEventListener("click",(e=&gt;{const commentbox=e.target.closest('[data-region="commentbox"]');if(!commentbox)return;const noteId=parseInt(commentbox.dataset.noteid),commentInput=commentbox.querySelector('[data-region="commentinput"]'),commentControls=commentbox.querySelector('[data-region="comment-controls"]'),emojiPickerContainer=commentbox.querySelector('[data-region="emoji-picker-container"]'),postCommentClick=e.target.closest('[data-action="postcomment"]'),cancelCommentClick=e.target.closest('[data-action="cancelcomment"]'),deleteCommentClick=e.target.closest('[data-action="deletecomment"]'),emojiClick=e.target.closest('[data-action="toggle-emoji-picker"]');postCommentClick&amp;&amp;(e.preventDefault(),postCommentClick.dataset.disabled||(postCommentClick.dataset.disabled=1,((noteId,comment)=&gt;{_ajax.default.call([{methodname:"mod_board_add_comment",args:{noteid:noteId,content:comment},done:()=&gt;{fetchFor(noteId,document.querySelector('[data-region="comment-area"]'))},fail:_notification.default.exception}],!1)})(noteId,commentInput.innerHTML))),cancelCommentClick&amp;&amp;(e.preventDefault(),commentInput.innerHTML="",commentControls.classList.remove("show")),deleteCommentClick&amp;&amp;(e.preventDefault(),deleteCommentClick.dataset.disabled||(deleteCommentClick.dataset.disabled=1,((noteId,commentId)=&gt;{_ajax.default.call([{methodname:"mod_board_delete_comment",args:{commentid:commentId},done:()=&gt;{fetchFor(noteId,document.querySelector('[data-region="comment-area"]'))},fail:_notification.default.exception}],!1)})(noteId,deleteCommentClick.dataset.commentid))),emojiClick&amp;&amp;(e.preventDefault(),emojiPickerContainer.dataset.init||(emojiPickerContainer.dataset.init=1,(0,_picker.default)(emojiPickerContainer,(emoji=&gt;{commentInput.innerHTML=commentInput.innerHTML+"&amp;nbsp;"+emoji+"&amp;nbsp;"}))),emojiPickerContainer.classList.toggle("hidden"))})),document.addEventListener("focusin",(e=&gt;{if(e.target.closest('[data-region="commentinput"]')){e.preventDefault();e.target.closest('[data-region="commentbox"]').querySelector('[data-region="comment-controls"]').classList.add("show")}})))},fetchFor:fetchFor};return _exports.default=_default,_exports.default}));
var factory;factory=function($){$.ui=$.ui||{},$.ui.version="1.13.2";var orig,widgetUuid=0,widgetHasOwnProperty=Array.prototype.hasOwnProperty,widgetSlice=Array.prototype.slice;$.cleanData=(orig=$.cleanData,function(elems){var events,elem,i;for(i=0;null!=(elem=elems[i]);i++)(events=$._data(elem,"events"))&amp;&amp;events.remove&amp;&amp;$(elem).triggerHandler("remove");orig(elems)}),$.widget=function(name,base,prototype){var existingConstructor,constructor,basePrototype,proxiedPrototype={},namespace=name.split(".")[0],fullName=namespace+"-"+(name=name.split(".")[1]);return prototype||(prototype=base,base=$.Widget),Array.isArray(prototype)&amp;&amp;(prototype=$.extend.apply(null,[{}].concat(prototype))),$.expr.pseudos[fullName.toLowerCase()]=function(elem){return!!$.data(elem,fullName)},$[namespace]=$[namespace]||{},existingConstructor=$[namespace][name],constructor=$[namespace][name]=function(options,element){if(!this||!this._createWidget)return new constructor(options,element);arguments.length&amp;&amp;this._createWidget(options,element)},$.extend(constructor,existingConstructor,{version:prototype.version,_proto:$.extend({},prototype),_childConstructors:[]}),(basePrototype=new base).options=$.widget.extend({},basePrototype.options),$.each(prototype,(function(prop,value){proxiedPrototype[prop]="function"==typeof value?function(){function _super(){return base.prototype[prop].apply(this,arguments)}function _superApply(args){return base.prototype[prop].apply(this,args)}return function(){var returnValue,__super=this._super,__superApply=this._superApply;return this._super=_super,this._superApply=_superApply,returnValue=value.apply(this,arguments),this._super=__super,this._superApply=__superApply,returnValue}}():value})),constructor.prototype=$.widget.extend(basePrototype,{widgetEventPrefix:existingConstructor&amp;&amp;basePrototype.widgetEventPrefix||name},proxiedPrototype,{constructor:constructor,namespace:namespace,widgetName:name,widgetFullName:fullName}),existingConstructor?($.each(existingConstructor._childConstructors,(function(i,child){var childPrototype=child.prototype;$.widget(childPrototype.namespace+"."+childPrototype.widgetName,constructor,child._proto)})),delete existingConstructor._childConstructors):base._childConstructors.push(constructor),$.widget.bridge(name,constructor),constructor},$.widget.extend=function(target){for(var key,value,input=widgetSlice.call(arguments,1),inputIndex=0,inputLength=input.length;inputIndex&lt;inputLength;inputIndex++)for(key in input[inputIndex])value=input[inputIndex][key],widgetHasOwnProperty.call(input[inputIndex],key)&amp;&amp;void 0!==value&amp;&amp;($.isPlainObject(value)?target[key]=$.isPlainObject(target[key])?$.widget.extend({},target[key],value):$.widget.extend({},value):target[key]=value);return target},$.widget.bridge=function(name,object){var fullName=object.prototype.widgetFullName||name;$.fn[name]=function(options){var isMethodCall="string"==typeof options,args=widgetSlice.call(arguments,1),returnValue=this;return isMethodCall?this.length||"instance"!==options?this.each((function(){var methodValue,instance=$.data(this,fullName);return"instance"===options?(returnValue=instance,!1):instance?"function"!=typeof instance[options]||"_"===options.charAt(0)?$.error("no such method '"+options+"' for "+name+" widget instance"):(methodValue=instance[options].apply(instance,args))!==instance&amp;&amp;void 0!==methodValue?(returnValue=methodValue&amp;&amp;methodValue.jquery?returnValue.pushStack(methodValue.get()):methodValue,!1):void 0:$.error("cannot call methods on "+name+" prior to initialization; attempted to call method '"+options+"'")})):returnValue=void 0:(args.length&amp;&amp;(options=$.widget.extend.apply(null,[options].concat(args))),this.each((function(){var instance=$.data(this,fullName);instance?(instance.option(options||{}),instance._init&amp;&amp;instance._init()):$.data(this,fullName,new object(options,this))}))),returnValue}},$.Widget=function(){},$.Widget._childConstructors=[],$.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"&lt;div&gt;",options:{classes:{},disabled:!1,create:null},_createWidget:function(options,element){element=$(element||this.defaultElement||this)[0],this.element=$(element),this.uuid=widgetUuid++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=$(),this.hoverable=$(),this.focusable=$(),this.classesElementLookup={},element!==this&amp;&amp;($.data(element,this.widgetFullName,this),this._on(!0,this.element,{remove:function(event){event.target===element&amp;&amp;this.destroy()}}),this.document=$(element.style?element.ownerDocument:element.document||element),this.window=$(this.document[0].defaultView||this.document[0].parentWindow)),this.options=$.widget.extend({},this.options,this._getCreateOptions(),options),this._create(),this.options.disabled&amp;&amp;this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:$.noop,_create:$.noop,_init:$.noop,destroy:function(){var that=this;this._destroy(),$.each(this.classesElementLookup,(function(key,value){that._removeClass(value,key)})),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:$.noop,widget:function(){return this.element},option:function(key,value){var parts,curOption,i,options=key;if(0===arguments.length)return $.widget.extend({},this.options);if("string"==typeof key)if(options={},parts=key.split("."),key=parts.shift(),parts.length){for(curOption=options[key]=$.widget.extend({},this.options[key]),i=0;i&lt;parts.length-1;i++)curOption[parts[i]]=curOption[parts[i]]||{},curOption=curOption[parts[i]];if(key=parts.pop(),1===arguments.length)return void 0===curOption[key]?null:curOption[key];curOption[key]=value}else{if(1===arguments.length)return void 0===this.options[key]?null:this.options[key];options[key]=value}return this._setOptions(options),this},_setOptions:function(options){var key;for(key in options)this._setOption(key,options[key]);return this},_setOption:function(key,value){return"classes"===key&amp;&amp;this._setOptionClasses(value),this.options[key]=value,"disabled"===key&amp;&amp;this._setOptionDisabled(value),this},_setOptionClasses:function(value){var classKey,elements,currentElements;for(classKey in value)currentElements=this.classesElementLookup[classKey],value[classKey]!==this.options.classes[classKey]&amp;&amp;currentElements&amp;&amp;currentElements.length&amp;&amp;(elements=$(currentElements.get()),this._removeClass(currentElements,classKey),elements.addClass(this._classes({element:elements,keys:classKey,classes:value,add:!0})))},_setOptionDisabled:function(value){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!value),value&amp;&amp;(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(options){var full=[],that=this;function bindRemoveEvent(){var nodesToBind=[];options.element.each((function(_,element){$.map(that.classesElementLookup,(function(elements){return elements})).some((function(elements){return elements.is(element)}))||nodesToBind.push(element)})),that._on($(nodesToBind),{remove:"_untrackClassesElement"})}function processClassString(classes,checkOption){var current,i;for(i=0;i&lt;classes.length;i++)current=that.classesElementLookup[classes[i]]||$(),options.add?(bindRemoveEvent(),current=$($.uniqueSort(current.get().concat(options.element.get())))):current=$(current.not(options.element).get()),that.classesElementLookup[classes[i]]=current,full.push(classes[i]),checkOption&amp;&amp;options.classes[classes[i]]&amp;&amp;full.push(options.classes[classes[i]])}return(options=$.extend({element:this.element,classes:this.options.classes||{}},options)).keys&amp;&amp;processClassString(options.keys.match(/\S+/g)||[],!0),options.extra&amp;&amp;processClassString(options.extra.match(/\S+/g)||[]),full.join(" ")},_untrackClassesElement:function(event){var that=this;$.each(that.classesElementLookup,(function(key,value){-1!==$.inArray(event.target,value)&amp;&amp;(that.classesElementLookup[key]=$(value.not(event.target).get()))})),this._off($(event.target))},_removeClass:function(element,keys,extra){return this._toggleClass(element,keys,extra,!1)},_addClass:function(element,keys,extra){return this._toggleClass(element,keys,extra,!0)},_toggleClass:function(element,keys,extra,add){add="boolean"==typeof add?add:extra;var shift="string"==typeof element||null===element,options={extra:shift?keys:extra,keys:shift?element:keys,element:shift?this.element:element,add:add};return options.element.toggleClass(this._classes(options),add),this},_on:function(suppressDisabledCheck,element,handlers){var delegateElement,instance=this;"boolean"!=typeof suppressDisabledCheck&amp;&amp;(handlers=element,element=suppressDisabledCheck,suppressDisabledCheck=!1),handlers?(element=delegateElement=$(element),this.bindings=this.bindings.add(element)):(handlers=element,element=this.element,delegateElement=this.widget()),$.each(handlers,(function(event,handler){function handlerProxy(){if(suppressDisabledCheck||!0!==instance.options.disabled&amp;&amp;!$(this).hasClass("ui-state-disabled"))return("string"==typeof handler?instance[handler]:handler).apply(instance,arguments)}"string"!=typeof handler&amp;&amp;(handlerProxy.guid=handler.guid=handler.guid||handlerProxy.guid||$.guid++);var match=event.match(/^([\w:-]*)\s*(.*)$/),eventName=match[1]+instance.eventNamespace,selector=match[2];selector?delegateElement.on(eventName,selector,handlerProxy):element.on(eventName,handlerProxy)}))},_off:function(element,eventName){eventName=(eventName||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,element.off(eventName),this.bindings=$(this.bindings.not(element).get()),this.focusable=$(this.focusable.not(element).get()),this.hoverable=$(this.hoverable.not(element).get())},_delay:function(handler,delay){var instance=this;return setTimeout((function(){return("string"==typeof handler?instance[handler]:handler).apply(instance,arguments)}),delay||0)},_hoverable:function(element){this.hoverable=this.hoverable.add(element),this._on(element,{mouseenter:function(event){this._addClass($(event.currentTarget),null,"ui-state-hover")},mouseleave:function(event){this._removeClass($(event.currentTarget),null,"ui-state-hover")}})},_focusable:function(element){this.focusable=this.focusable.add(element),this._on(element,{focusin:function(event){this._addClass($(event.currentTarget),null,"ui-state-focus")},focusout:function(event){this._removeClass($(event.currentTarget),null,"ui-state-focus")}})},_trigger:function(type,event,data){var prop,orig,callback=this.options[type];if(data=data||{},(event=$.Event(event)).type=(type===this.widgetEventPrefix?type:this.widgetEventPrefix+type).toLowerCase(),event.target=this.element[0],orig=event.originalEvent)for(prop in orig)prop in event||(event[prop]=orig[prop]);return this.element.trigger(event,data),!("function"==typeof callback&amp;&amp;!1===callback.apply(this.element[0],[event].concat(data))||event.isDefaultPrevented())}},$.each({show:"fadeIn",hide:"fadeOut"},(function(method,defaultEffect){$.Widget.prototype["_"+method]=function(element,options,callback){var hasOptions;"string"==typeof options&amp;&amp;(options={effect:options});var effectName=options?!0===options||"number"==typeof options?defaultEffect:options.effect||defaultEffect:method;"number"==typeof(options=options||{})?options={duration:options}:!0===options&amp;&amp;(options={}),hasOptions=!$.isEmptyObject(options),options.complete=callback,options.delay&amp;&amp;element.delay(options.delay),hasOptions&amp;&amp;$.effects&amp;&amp;$.effects.effect[effectName]?element[method](options):effectName!==method&amp;&amp;element[effectName]?element[effectName](options.duration,options.easing,callback):element.queue((function(next){$(this)[method](),callback&amp;&amp;callback.call(element[0]),next()}))}})),$.widget,$.extend($.expr.pseudos,{data:$.expr.createPseudo?$.expr.createPseudo((function(dataName){return function(elem){return!!$.data(elem,dataName)}})):function(elem,i,match){return!!$.data(elem,match[3])}}),$.fn.scrollParent=function(includeHidden){var position=this.css("position"),excludeStaticParent="absolute"===position,overflowRegex=includeHidden?/(auto|scroll|hidden)/:/(auto|scroll)/,scrollParent=this.parents().filter((function(){var parent=$(this);return(!excludeStaticParent||"static"!==parent.css("position"))&amp;&amp;overflowRegex.test(parent.css("overflow")+parent.css("overflow-y")+parent.css("overflow-x"))})).eq(0);return"fixed"!==position&amp;&amp;scrollParent.length?scrollParent:$(this[0].ownerDocument||document)},$.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());var mouseHandled=!1;$(document).on("mouseup",(function(){mouseHandled=!1})),$.widget("ui.mouse",{version:"1.13.2",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var that=this;this.element.on("mousedown."+this.widgetName,(function(event){return that._mouseDown(event)})).on("click."+this.widgetName,(function(event){if(!0===$.data(event.target,that.widgetName+".preventClickEvent"))return $.removeData(event.target,that.widgetName+".preventClickEvent"),event.stopImmediatePropagation(),!1})),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&amp;&amp;this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(event){if(!mouseHandled){this._mouseMoved=!1,this._mouseStarted&amp;&amp;this._mouseUp(event),this._mouseDownEvent=event;var that=this,btnIsLeft=1===event.which,elIsCancel=!("string"!=typeof this.options.cancel||!event.target.nodeName)&amp;&amp;$(event.target).closest(this.options.cancel).length;return!(btnIsLeft&amp;&amp;!elIsCancel&amp;&amp;this._mouseCapture(event)&amp;&amp;(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout((function(){that.mouseDelayMet=!0}),this.options.delay)),this._mouseDistanceMet(event)&amp;&amp;this._mouseDelayMet(event)&amp;&amp;(this._mouseStarted=!1!==this._mouseStart(event),!this._mouseStarted)?(event.preventDefault(),0):(!0===$.data(event.target,this.widgetName+".preventClickEvent")&amp;&amp;$.removeData(event.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(event){return that._mouseMove(event)},this._mouseUpDelegate=function(event){return that._mouseUp(event)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),event.preventDefault(),mouseHandled=!0,0)))}},_mouseMove:function(event){if(this._mouseMoved){if($.ui.ie&amp;&amp;(!document.documentMode||document.documentMode&lt;9)&amp;&amp;!event.button)return this._mouseUp(event);if(!event.which)if(event.originalEvent.altKey||event.originalEvent.ctrlKey||event.originalEvent.metaKey||event.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(event)}return(event.which||event.button)&amp;&amp;(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(event),event.preventDefault()):(this._mouseDistanceMet(event)&amp;&amp;this._mouseDelayMet(event)&amp;&amp;(this._mouseStarted=!1!==this._mouseStart(this._mouseDownEvent,event),this._mouseStarted?this._mouseDrag(event):this._mouseUp(event)),!this._mouseStarted)},_mouseUp:function(event){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&amp;&amp;(this._mouseStarted=!1,event.target===this._mouseDownEvent.target&amp;&amp;$.data(event.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(event)),this._mouseDelayTimer&amp;&amp;(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,mouseHandled=!1,event.preventDefault()},_mouseDistanceMet:function(event){return Math.max(Math.abs(this._mouseDownEvent.pageX-event.pageX),Math.abs(this._mouseDownEvent.pageY-event.pageY))&gt;=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),$.widget("ui.sortable",$.ui.mouse,{version:"1.13.2",widgetEventPrefix:"sort",ready:!1,options:{appendTo:"parent",axis:!1,connectWith:!1,containment:!1,cursor:"auto",cursorAt:!1,dropOnEmpty:!0,forcePlaceholderSize:!1,forceHelperSize:!1,grid:!1,handle:!1,helper:"original",items:"&gt; *",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1e3,activate:null,beforeStop:null,change:null,deactivate:null,out:null,over:null,receive:null,remove:null,sort:null,start:null,stop:null,update:null},_isOverAxis:function(x,reference,size){return x&gt;=reference&amp;&amp;x&lt;reference+size},_isFloating:function(item){return/left|right/.test(item.css("float"))||/inline|table-cell/.test(item.css("display"))},_create:function(){this.containerCache={},this._addClass("ui-sortable"),this.refresh(),this.offset=this.element.offset(),this._mouseInit(),this._setHandleClassName(),this.ready=!0},_setOption:function(key,value){this._super(key,value),"handle"===key&amp;&amp;this._setHandleClassName()},_setHandleClassName:function(){var that=this;this._removeClass(this.element.find(".ui-sortable-handle"),"ui-sortable-handle"),$.each(this.items,(function(){that._addClass(this.instance.options.handle?this.item.find(this.instance.options.handle):this.item,"ui-sortable-handle")}))},_destroy:function(){this._mouseDestroy();for(var i=this.items.length-1;i&gt;=0;i--)this.items[i].item.removeData(this.widgetName+"-item");return this},_mouseCapture:function(event,overrideHandle){var currentItem=null,validHandle=!1,that=this;return!(this.reverting||this.options.disabled||"static"===this.options.type||(this._refreshItems(event),$(event.target).parents().each((function(){if($.data(this,that.widgetName+"-item")===that)return currentItem=$(this),!1})),$.data(event.target,that.widgetName+"-item")===that&amp;&amp;(currentItem=$(event.target)),!currentItem||this.options.handle&amp;&amp;!overrideHandle&amp;&amp;($(this.options.handle,currentItem).find("*").addBack().each((function(){this===event.target&amp;&amp;(validHandle=!0)})),!validHandle)||(this.currentItem=currentItem,this._removeCurrentsFromItems(),0)))},_mouseStart:function(event,overrideHandle,noActivation){var i,body,o=this.options;if(this.currentContainer=this,this.refreshPositions(),this.appendTo=$("parent"!==o.appendTo?o.appendTo:this.currentItem.parent()),this.helper=this._createHelper(event),this._cacheHelperProportions(),this._cacheMargins(),this.offset=this.currentItem.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},$.extend(this.offset,{click:{left:event.pageX-this.offset.left,top:event.pageY-this.offset.top},relative:this._getRelativeOffset()}),this.helper.css("position","absolute"),this.cssPosition=this.helper.css("position"),o.cursorAt&amp;&amp;this._adjustOffsetFromHelper(o.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!==this.currentItem[0]&amp;&amp;this.currentItem.hide(),this._createPlaceholder(),this.scrollParent=this.placeholder.scrollParent(),$.extend(this.offset,{parent:this._getParentOffset()}),o.containment&amp;&amp;this._setContainment(),o.cursor&amp;&amp;"auto"!==o.cursor&amp;&amp;(body=this.document.find("body"),this.storedCursor=body.css("cursor"),body.css("cursor",o.cursor),this.storedStylesheet=$("&lt;style&gt;*{ cursor: "+o.cursor+" !important; }&lt;/style&gt;").appendTo(body)),o.zIndex&amp;&amp;(this.helper.css("zIndex")&amp;&amp;(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",o.zIndex)),o.opacity&amp;&amp;(this.helper.css("opacity")&amp;&amp;(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",o.opacity)),this.scrollParent[0]!==this.document[0]&amp;&amp;"HTML"!==this.scrollParent[0].tagName&amp;&amp;(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",event,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions(),!noActivation)for(i=this.containers.length-1;i&gt;=0;i--)this.containers[i]._trigger("activate",event,this._uiHash(this));return $.ui.ddmanager&amp;&amp;($.ui.ddmanager.current=this),$.ui.ddmanager&amp;&amp;!o.dropBehaviour&amp;&amp;$.ui.ddmanager.prepareOffsets(this,event),this.dragging=!0,this._addClass(this.helper,"ui-sortable-helper"),this.helper.parent().is(this.appendTo)||(this.helper.detach().appendTo(this.appendTo),this.offset.parent=this._getParentOffset()),this.position=this.originalPosition=this._generatePosition(event),this.originalPageX=event.pageX,this.originalPageY=event.pageY,this.lastPositionAbs=this.positionAbs=this._convertPositionTo("absolute"),this._mouseDrag(event),!0},_scroll:function(event){var o=this.options,scrolled=!1;return this.scrollParent[0]!==this.document[0]&amp;&amp;"HTML"!==this.scrollParent[0].tagName?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-event.pageY&lt;o.scrollSensitivity?this.scrollParent[0].scrollTop=scrolled=this.scrollParent[0].scrollTop+o.scrollSpeed:event.pageY-this.overflowOffset.top&lt;o.scrollSensitivity&amp;&amp;(this.scrollParent[0].scrollTop=scrolled=this.scrollParent[0].scrollTop-o.scrollSpeed),this.overflowOffset.left+this.scrollParent[0].offsetWidth-event.pageX&lt;o.scrollSensitivity?this.scrollParent[0].scrollLeft=scrolled=this.scrollParent[0].scrollLeft+o.scrollSpeed:event.pageX-this.overflowOffset.left&lt;o.scrollSensitivity&amp;&amp;(this.scrollParent[0].scrollLeft=scrolled=this.scrollParent[0].scrollLeft-o.scrollSpeed)):(event.pageY-this.document.scrollTop()&lt;o.scrollSensitivity?scrolled=this.document.scrollTop(this.document.scrollTop()-o.scrollSpeed):this.window.height()-(event.pageY-this.document.scrollTop())&lt;o.scrollSensitivity&amp;&amp;(scrolled=this.document.scrollTop(this.document.scrollTop()+o.scrollSpeed)),event.pageX-this.document.scrollLeft()&lt;o.scrollSensitivity?scrolled=this.document.scrollLeft(this.document.scrollLeft()-o.scrollSpeed):this.window.width()-(event.pageX-this.document.scrollLeft())&lt;o.scrollSensitivity&amp;&amp;(scrolled=this.document.scrollLeft(this.document.scrollLeft()+o.scrollSpeed))),scrolled},_mouseDrag:function(event){var i,item,itemElement,intersection,o=this.options;for(this.position=this._generatePosition(event),this.positionAbs=this._convertPositionTo("absolute"),this.options.axis&amp;&amp;"y"===this.options.axis||(this.helper[0].style.left=this.position.left+"px"),this.options.axis&amp;&amp;"x"===this.options.axis||(this.helper[0].style.top=this.position.top+"px"),o.scroll&amp;&amp;!1!==this._scroll(event)&amp;&amp;(this._refreshItemPositions(!0),$.ui.ddmanager&amp;&amp;!o.dropBehaviour&amp;&amp;$.ui.ddmanager.prepareOffsets(this,event)),this.dragDirection={vertical:this._getDragVerticalDirection(),horizontal:this._getDragHorizontalDirection()},i=this.items.length-1;i&gt;=0;i--)if(itemElement=(item=this.items[i]).item[0],(intersection=this._intersectsWithPointer(item))&amp;&amp;item.instance===this.currentContainer&amp;&amp;!(itemElement===this.currentItem[0]||this.placeholder[1===intersection?"next":"prev"]()[0]===itemElement||$.contains(this.placeholder[0],itemElement)||"semi-dynamic"===this.options.type&amp;&amp;$.contains(this.element[0],itemElement))){if(this.direction=1===intersection?"down":"up","pointer"!==this.options.tolerance&amp;&amp;!this._intersectsWithSides(item))break;this._rearrange(event,item),this._trigger("change",event,this._uiHash());break}return this._contactContainers(event),$.ui.ddmanager&amp;&amp;$.ui.ddmanager.drag(this,event),this._trigger("sort",event,this._uiHash()),this.lastPositionAbs=this.positionAbs,!1},_mouseStop:function(event,noPropagation){if(event){if($.ui.ddmanager&amp;&amp;!this.options.dropBehaviour&amp;&amp;$.ui.ddmanager.drop(this,event),this.options.revert){var that=this,cur=this.placeholder.offset(),axis=this.options.axis,animation={};axis&amp;&amp;"x"!==axis||(animation.left=cur.left-this.offset.parent.left-this.margins.left+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollLeft)),axis&amp;&amp;"y"!==axis||(animation.top=cur.top-this.offset.parent.top-this.margins.top+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollTop)),this.reverting=!0,$(this.helper).animate(animation,parseInt(this.options.revert,10)||500,(function(){that._clear(event)}))}else this._clear(event,noPropagation);return!1}},cancel:function(){if(this.dragging){this._mouseUp(new $.Event("mouseup",{target:null})),"original"===this.options.helper?(this.currentItem.css(this._storedCSS),this._removeClass(this.currentItem,"ui-sortable-helper")):this.currentItem.show();for(var i=this.containers.length-1;i&gt;=0;i--)this.containers[i]._trigger("deactivate",null,this._uiHash(this)),this.containers[i].containerCache.over&amp;&amp;(this.containers[i]._trigger("out",null,this._uiHash(this)),this.containers[i].containerCache.over=0)}return this.placeholder&amp;&amp;(this.placeholder[0].parentNode&amp;&amp;this.placeholder[0].parentNode.removeChild(this.placeholder[0]),"original"!==this.options.helper&amp;&amp;this.helper&amp;&amp;this.helper[0].parentNode&amp;&amp;this.helper.remove(),$.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?$(this.domPosition.prev).after(this.currentItem):$(this.domPosition.parent).prepend(this.currentItem)),this},serialize:function(o){var items=this._getItemsAsjQuery(o&amp;&amp;o.connected),str=[];return o=o||{},$(items).each((function(){var res=($(o.item||this).attr(o.attribute||"id")||"").match(o.expression||/(.+)[\-=_](.+)/);res&amp;&amp;str.push((o.key||res[1]+"[]")+"="+(o.key&amp;&amp;o.expression?res[1]:res[2]))})),!str.length&amp;&amp;o.key&amp;&amp;str.push(o.key+"="),str.join("&amp;")},toArray:function(o){var items=this._getItemsAsjQuery(o&amp;&amp;o.connected),ret=[];return o=o||{},items.each((function(){ret.push($(o.item||this).attr(o.attribute||"id")||"")})),ret},_intersectsWith:function(item){var x1=this.positionAbs.left,x2=x1+this.helperProportions.width,y1=this.positionAbs.top,y2=y1+this.helperProportions.height,l=item.left,r=l+item.width,t=item.top,b=t+item.height,dyClick=this.offset.click.top,dxClick=this.offset.click.left,isOverElementHeight="x"===this.options.axis||y1+dyClick&gt;t&amp;&amp;y1+dyClick&lt;b,isOverElementWidth="y"===this.options.axis||x1+dxClick&gt;l&amp;&amp;x1+dxClick&lt;r,isOverElement=isOverElementHeight&amp;&amp;isOverElementWidth;return"pointer"===this.options.tolerance||this.options.forcePointerForContainers||"pointer"!==this.options.tolerance&amp;&amp;this.helperProportions[this.floating?"width":"height"]&gt;item[this.floating?"width":"height"]?isOverElement:l&lt;x1+this.helperProportions.width/2&amp;&amp;x2-this.helperProportions.width/2&lt;r&amp;&amp;t&lt;y1+this.helperProportions.height/2&amp;&amp;y2-this.helperProportions.height/2&lt;b},_intersectsWithPointer:function(item){var verticalDirection,horizontalDirection,isOverElementHeight="x"===this.options.axis||this._isOverAxis(this.positionAbs.top+this.offset.click.top,item.top,item.height),isOverElementWidth="y"===this.options.axis||this._isOverAxis(this.positionAbs.left+this.offset.click.left,item.left,item.width);return!(!isOverElementHeight||!isOverElementWidth)&amp;&amp;(verticalDirection=this.dragDirection.vertical,horizontalDirection=this.dragDirection.horizontal,this.floating?"right"===horizontalDirection||"down"===verticalDirection?2:1:verticalDirection&amp;&amp;("down"===verticalDirection?2:1))},_intersectsWithSides:function(item){var isOverBottomHalf=this._isOverAxis(this.positionAbs.top+this.offset.click.top,item.top+item.height/2,item.height),isOverRightHalf=this._isOverAxis(this.positionAbs.left+this.offset.click.left,item.left+item.width/2,item.width),verticalDirection=this.dragDirection.vertical,horizontalDirection=this.dragDirection.horizontal;return this.floating&amp;&amp;horizontalDirection?"right"===horizontalDirection&amp;&amp;isOverRightHalf||"left"===horizontalDirection&amp;&amp;!isOverRightHalf:verticalDirection&amp;&amp;("down"===verticalDirection&amp;&amp;isOverBottomHalf||"up"===verticalDirection&amp;&amp;!isOverBottomHalf)},_getDragVerticalDirection:function(){var delta=this.positionAbs.top-this.lastPositionAbs.top;return 0!==delta&amp;&amp;(delta&gt;0?"down":"up")},_getDragHorizontalDirection:function(){var delta=this.positionAbs.left-this.lastPositionAbs.left;return 0!==delta&amp;&amp;(delta&gt;0?"right":"left")},refresh:function(event){return this._refreshItems(event),this._setHandleClassName(),this.refreshPositions(),this},_connectWith:function(){var options=this.options;return options.connectWith.constructor===String?[options.connectWith]:options.connectWith},_getItemsAsjQuery:function(connected){var i,j,cur,inst,items=[],queries=[],connectWith=this._connectWith();if(connectWith&amp;&amp;connected)for(i=connectWith.length-1;i&gt;=0;i--)for(j=(cur=$(connectWith[i],this.document[0])).length-1;j&gt;=0;j--)(inst=$.data(cur[j],this.widgetFullName))&amp;&amp;inst!==this&amp;&amp;!inst.options.disabled&amp;&amp;queries.push(["function"==typeof inst.options.items?inst.options.items.call(inst.element):$(inst.options.items,inst.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),inst]);function addItems(){items.push(this)}for(queries.push(["function"==typeof this.options.items?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):$(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]),i=queries.length-1;i&gt;=0;i--)queries[i][0].each(addItems);return $(items)},_removeCurrentsFromItems:function(){var list=this.currentItem.find(":data("+this.widgetName+"-item)");this.items=$.grep(this.items,(function(item){for(var j=0;j&lt;list.length;j++)if(list[j]===item.item[0])return!1;return!0}))},_refreshItems:function(event){this.items=[],this.containers=[this];var i,j,cur,inst,targetData,_queries,item,queriesLength,items=this.items,queries=[["function"==typeof this.options.items?this.options.items.call(this.element[0],event,{item:this.currentItem}):$(this.options.items,this.element),this]],connectWith=this._connectWith();if(connectWith&amp;&amp;this.ready)for(i=connectWith.length-1;i&gt;=0;i--)for(j=(cur=$(connectWith[i],this.document[0])).length-1;j&gt;=0;j--)(inst=$.data(cur[j],this.widgetFullName))&amp;&amp;inst!==this&amp;&amp;!inst.options.disabled&amp;&amp;(queries.push(["function"==typeof inst.options.items?inst.options.items.call(inst.element[0],event,{item:this.currentItem}):$(inst.options.items,inst.element),inst]),this.containers.push(inst));for(i=queries.length-1;i&gt;=0;i--)for(targetData=queries[i][1],j=0,queriesLength=(_queries=queries[i][0]).length;j&lt;queriesLength;j++)(item=$(_queries[j])).data(this.widgetName+"-item",targetData),items.push({item:item,instance:targetData,width:0,height:0,left:0,top:0})},_refreshItemPositions:function(fast){var i,item,t,p;for(i=this.items.length-1;i&gt;=0;i--)item=this.items[i],this.currentContainer&amp;&amp;item.instance!==this.currentContainer&amp;&amp;item.item[0]!==this.currentItem[0]||(t=this.options.toleranceElement?$(this.options.toleranceElement,item.item):item.item,fast||(item.width=t.outerWidth(),item.height=t.outerHeight()),p=t.offset(),item.left=p.left,item.top=p.top)},refreshPositions:function(fast){var i,p;if(this.floating=!!this.items.length&amp;&amp;("x"===this.options.axis||this._isFloating(this.items[0].item)),this.offsetParent&amp;&amp;this.helper&amp;&amp;(this.offset.parent=this._getParentOffset()),this._refreshItemPositions(fast),this.options.custom&amp;&amp;this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(i=this.containers.length-1;i&gt;=0;i--)p=this.containers[i].element.offset(),this.containers[i].containerCache.left=p.left,this.containers[i].containerCache.top=p.top,this.containers[i].containerCache.width=this.containers[i].element.outerWidth(),this.containers[i].containerCache.height=this.containers[i].element.outerHeight();return this},_createPlaceholder:function(that){var className,nodeName,o=(that=that||this).options;o.placeholder&amp;&amp;o.placeholder.constructor!==String||(className=o.placeholder,nodeName=that.currentItem[0].nodeName.toLowerCase(),o.placeholder={element:function(){var element=$("&lt;"+nodeName+"&gt;",that.document[0]);return that._addClass(element,"ui-sortable-placeholder",className||that.currentItem[0].className)._removeClass(element,"ui-sortable-helper"),"tbody"===nodeName?that._createTrPlaceholder(that.currentItem.find("tr").eq(0),$("&lt;tr&gt;",that.document[0]).appendTo(element)):"tr"===nodeName?that._createTrPlaceholder(that.currentItem,element):"img"===nodeName&amp;&amp;element.attr("src",that.currentItem.attr("src")),className||element.css("visibility","hidden"),element},update:function(container,p){className&amp;&amp;!o.forcePlaceholderSize||(p.height()&amp;&amp;(!o.forcePlaceholderSize||"tbody"!==nodeName&amp;&amp;"tr"!==nodeName)||p.height(that.currentItem.innerHeight()-parseInt(that.currentItem.css("paddingTop")||0,10)-parseInt(that.currentItem.css("paddingBottom")||0,10)),p.width()||p.width(that.currentItem.innerWidth()-parseInt(that.currentItem.css("paddingLeft")||0,10)-parseInt(that.currentItem.css("paddingRight")||0,10)))}}),that.placeholder=$(o.placeholder.element.call(that.element,that.currentItem)),that.currentItem.after(that.placeholder),o.placeholder.update(that,that.placeholder)},_createTrPlaceholder:function(sourceTr,targetTr){var that=this;sourceTr.children().each((function(){$("&lt;td&gt;&amp;#160;&lt;/td&gt;",that.document[0]).attr("colspan",$(this).attr("colspan")||1).appendTo(targetTr)}))},_contactContainers:function(event){var i,j,dist,itemWithLeastDistance,posProperty,sizeProperty,cur,nearBottom,floating,axis,innermostContainer=null,innermostIndex=null;for(i=this.containers.length-1;i&gt;=0;i--)if(!$.contains(this.currentItem[0],this.containers[i].element[0]))if(this._intersectsWith(this.containers[i].containerCache)){if(innermostContainer&amp;&amp;$.contains(this.containers[i].element[0],innermostContainer.element[0]))continue;innermostContainer=this.containers[i],innermostIndex=i}else this.containers[i].containerCache.over&amp;&amp;(this.containers[i]._trigger("out",event,this._uiHash(this)),this.containers[i].containerCache.over=0);if(innermostContainer)if(1===this.containers.length)this.containers[innermostIndex].containerCache.over||(this.containers[innermostIndex]._trigger("over",event,this._uiHash(this)),this.containers[innermostIndex].containerCache.over=1);else{for(dist=1e4,itemWithLeastDistance=null,posProperty=(floating=innermostContainer.floating||this._isFloating(this.currentItem))?"left":"top",sizeProperty=floating?"width":"height",axis=floating?"pageX":"pageY",j=this.items.length-1;j&gt;=0;j--)$.contains(this.containers[innermostIndex].element[0],this.items[j].item[0])&amp;&amp;this.items[j].item[0]!==this.currentItem[0]&amp;&amp;(cur=this.items[j].item.offset()[posProperty],nearBottom=!1,event[axis]-cur&gt;this.items[j][sizeProperty]/2&amp;&amp;(nearBottom=!0),Math.abs(event[axis]-cur)&lt;dist&amp;&amp;(dist=Math.abs(event[axis]-cur),itemWithLeastDistance=this.items[j],this.direction=nearBottom?"up":"down"));if(!itemWithLeastDistance&amp;&amp;!this.options.dropOnEmpty)return;if(this.currentContainer===this.containers[innermostIndex])return void(this.currentContainer.containerCache.over||(this.containers[innermostIndex]._trigger("over",event,this._uiHash()),this.currentContainer.containerCache.over=1));itemWithLeastDistance?this._rearrange(event,itemWithLeastDistance,null,!0):this._rearrange(event,null,this.containers[innermostIndex].element,!0),this._trigger("change",event,this._uiHash()),this.containers[innermostIndex]._trigger("change",event,this._uiHash(this)),this.currentContainer=this.containers[innermostIndex],this.options.placeholder.update(this.currentContainer,this.placeholder),this.scrollParent=this.placeholder.scrollParent(),this.scrollParent[0]!==this.document[0]&amp;&amp;"HTML"!==this.scrollParent[0].tagName&amp;&amp;(this.overflowOffset=this.scrollParent.offset()),this.containers[innermostIndex]._trigger("over",event,this._uiHash(this)),this.containers[innermostIndex].containerCache.over=1}},_createHelper:function(event){var o=this.options,helper="function"==typeof o.helper?$(o.helper.apply(this.element[0],[event,this.currentItem])):"clone"===o.helper?this.currentItem.clone():this.currentItem;return helper.parents("body").length||this.appendTo[0].appendChild(helper[0]),helper[0]===this.currentItem[0]&amp;&amp;(this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}),helper[0].style.width&amp;&amp;!o.forceHelperSize||helper.width(this.currentItem.width()),helper[0].style.height&amp;&amp;!o.forceHelperSize||helper.height(this.currentItem.height()),helper},_adjustOffsetFromHelper:function(obj){"string"==typeof obj&amp;&amp;(obj=obj.split(" ")),Array.isArray(obj)&amp;&amp;(obj={left:+obj[0],top:+obj[1]||0}),"left"in obj&amp;&amp;(this.offset.click.left=obj.left+this.margins.left),"right"in obj&amp;&amp;(this.offset.click.left=this.helperProportions.width-obj.right+this.margins.left),"top"in obj&amp;&amp;(this.offset.click.top=obj.top+this.margins.top),"bottom"in obj&amp;&amp;(this.offset.click.top=this.helperProportions.height-obj.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var po=this.offsetParent.offset();return"absolute"===this.cssPosition&amp;&amp;this.scrollParent[0]!==this.document[0]&amp;&amp;$.contains(this.scrollParent[0],this.offsetParent[0])&amp;&amp;(po.left+=this.scrollParent.scrollLeft(),po.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]===this.document[0].body||this.offsetParent[0].tagName&amp;&amp;"html"===this.offsetParent[0].tagName.toLowerCase()&amp;&amp;$.ui.ie)&amp;&amp;(po={top:0,left:0}),{top:po.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:po.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"===this.cssPosition){var p=this.currentItem.position();return{top:p.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:p.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var ce,co,over,o=this.options;"parent"===o.containment&amp;&amp;(o.containment=this.helper[0].parentNode),"document"!==o.containment&amp;&amp;"window"!==o.containment||(this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,"document"===o.containment?this.document.width():this.window.width()-this.helperProportions.width-this.margins.left,("document"===o.containment?this.document.height()||document.body.parentNode.scrollHeight:this.window.height()||this.document[0].body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]),/^(document|window|parent)$/.test(o.containment)||(ce=$(o.containment)[0],co=$(o.containment).offset(),over="hidden"!==$(ce).css("overflow"),this.containment=[co.left+(parseInt($(ce).css("borderLeftWidth"),10)||0)+(parseInt($(ce).css("paddingLeft"),10)||0)-this.margins.left,co.top+(parseInt($(ce).css("borderTopWidth"),10)||0)+(parseInt($(ce).css("paddingTop"),10)||0)-this.margins.top,co.left+(over?Math.max(ce.scrollWidth,ce.offsetWidth):ce.offsetWidth)-(parseInt($(ce).css("borderLeftWidth"),10)||0)-(parseInt($(ce).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,co.top+(over?Math.max(ce.scrollHeight,ce.offsetHeight):ce.offsetHeight)-(parseInt($(ce).css("borderTopWidth"),10)||0)-(parseInt($(ce).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top])},_convertPositionTo:function(d,pos){pos||(pos=this.position);var mod="absolute"===d?1:-1,scroll="absolute"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&amp;&amp;$.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,scrollIsRootNode=/(html|body)/i.test(scroll[0].tagName);return{top:pos.top+this.offset.relative.top*mod+this.offset.parent.top*mod-("fixed"===this.cssPosition?-this.scrollParent.scrollTop():scrollIsRootNode?0:scroll.scrollTop())*mod,left:pos.left+this.offset.relative.left*mod+this.offset.parent.left*mod-("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():scrollIsRootNode?0:scroll.scrollLeft())*mod}},_generatePosition:function(event){var top,left,o=this.options,pageX=event.pageX,pageY=event.pageY,scroll="absolute"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&amp;&amp;$.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,scrollIsRootNode=/(html|body)/i.test(scroll[0].tagName);return"relative"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&amp;&amp;this.scrollParent[0]!==this.offsetParent[0]||(this.offset.relative=this._getRelativeOffset()),this.originalPosition&amp;&amp;(this.containment&amp;&amp;(event.pageX-this.offset.click.left&lt;this.containment[0]&amp;&amp;(pageX=this.containment[0]+this.offset.click.left),event.pageY-this.offset.click.top&lt;this.containment[1]&amp;&amp;(pageY=this.containment[1]+this.offset.click.top),event.pageX-this.offset.click.left&gt;this.containment[2]&amp;&amp;(pageX=this.containment[2]+this.offset.click.left),event.pageY-this.offset.click.top&gt;this.containment[3]&amp;&amp;(pageY=this.containment[3]+this.offset.click.top)),o.grid&amp;&amp;(top=this.originalPageY+Math.round((pageY-this.originalPageY)/o.grid[1])*o.grid[1],pageY=this.containment?top-this.offset.click.top&gt;=this.containment[1]&amp;&amp;top-this.offset.click.top&lt;=this.containment[3]?top:top-this.offset.click.top&gt;=this.containment[1]?top-o.grid[1]:top+o.grid[1]:top,left=this.originalPageX+Math.round((pageX-this.originalPageX)/o.grid[0])*o.grid[0],pageX=this.containment?left-this.offset.click.left&gt;=this.containment[0]&amp;&amp;left-this.offset.click.left&lt;=this.containment[2]?left:left-this.offset.click.left&gt;=this.containment[0]?left-o.grid[0]:left+o.grid[0]:left)),{top:pageY-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():scrollIsRootNode?0:scroll.scrollTop()),left:pageX-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():scrollIsRootNode?0:scroll.scrollLeft())}},_rearrange:function(event,i,a,hardRefresh){a?a[0].appendChild(this.placeholder[0]):i.item[0].parentNode.insertBefore(this.placeholder[0],"down"===this.direction?i.item[0]:i.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var counter=this.counter;this._delay((function(){counter===this.counter&amp;&amp;this.refreshPositions(!hardRefresh)}))},_clear:function(event,noPropagation){this.reverting=!1;var i,delayedTriggers=[];if(!this._noFinalSort&amp;&amp;this.currentItem.parent().length&amp;&amp;this.placeholder.before(this.currentItem),this._noFinalSort=null,this.helper[0]===this.currentItem[0]){for(i in this._storedCSS)"auto"!==this._storedCSS[i]&amp;&amp;"static"!==this._storedCSS[i]||(this._storedCSS[i]="");this.currentItem.css(this._storedCSS),this._removeClass(this.currentItem,"ui-sortable-helper")}else this.currentItem.show();function delayEvent(type,instance,container){return function(event){container._trigger(type,event,instance._uiHash(instance))}}for(this.fromOutside&amp;&amp;!noPropagation&amp;&amp;delayedTriggers.push((function(event){this._trigger("receive",event,this._uiHash(this.fromOutside))})),!this.fromOutside&amp;&amp;this.domPosition.prev===this.currentItem.prev().not(".ui-sortable-helper")[0]&amp;&amp;this.domPosition.parent===this.currentItem.parent()[0]||noPropagation||delayedTriggers.push((function(event){this._trigger("update",event,this._uiHash())})),this!==this.currentContainer&amp;&amp;(noPropagation||(delayedTriggers.push((function(event){this._trigger("remove",event,this._uiHash())})),delayedTriggers.push(function(c){return function(event){c._trigger("receive",event,this._uiHash(this))}}.call(this,this.currentContainer)),delayedTriggers.push(function(c){return function(event){c._trigger("update",event,this._uiHash(this))}}.call(this,this.currentContainer)))),i=this.containers.length-1;i&gt;=0;i--)noPropagation||delayedTriggers.push(delayEvent("deactivate",this,this.containers[i])),this.containers[i].containerCache.over&amp;&amp;(delayedTriggers.push(delayEvent("out",this,this.containers[i])),this.containers[i].containerCache.over=0);if(this.storedCursor&amp;&amp;(this.document.find("body").css("cursor",this.storedCursor),this.storedStylesheet.remove()),this._storedOpacity&amp;&amp;this.helper.css("opacity",this._storedOpacity),this._storedZIndex&amp;&amp;this.helper.css("zIndex","auto"===this._storedZIndex?"":this._storedZIndex),this.dragging=!1,noPropagation||this._trigger("beforeStop",event,this._uiHash()),this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.cancelHelperRemoval||(this.helper[0]!==this.currentItem[0]&amp;&amp;this.helper.remove(),this.helper=null),!noPropagation){for(i=0;i&lt;delayedTriggers.length;i++)delayedTriggers[i].call(this,event);this._trigger("stop",event,this._uiHash())}return this.fromOutside=!1,!this.cancelHelperRemoval},_trigger:function(){!1===$.Widget.prototype._trigger.apply(this,arguments)&amp;&amp;this.cancel()},_uiHash:function(_inst){var inst=_inst||this;return{helper:inst.helper,placeholder:inst.placeholder||$([]),position:inst.position,originalPosition:inst.originalPosition,offset:inst.positionAbs,item:inst.currentItem,sender:_inst?_inst.element:null}}})},"function"==typeof define&amp;&amp;define.amd?define("mod_board/jquery.sortable.amd",["jquery"],factory):factory(jQuery);
define("mod_choicegroup/choicegroupdatadisplay",["jquery","core/str"],(function($,str){return{init:function(){$(".choicegroup-memberdisplay").click((function(e){e.preventDefault(),$(".choicegroups-membersnames").toggleClass("hidden");var showusersstring=str.get_string("showgroupmembers","mod_choicegroup"),hideusersstring=str.get_string("hidegroupmembers","mod_choicegroup");$(".choicegroups-membersnames").is(":visible")?$.when(hideusersstring).done((function(hidestring){$(".choicegroup-memberdisplay").html(hidestring)})):$.when(showusersstring).done((function(showstring){$(".choicegroup-memberdisplay").html(showstring)}))})),$(".choicegroup-descriptiondisplay").click((function(e){e.preventDefault(),$(".choicegroups-descriptions").toggleClass("hidden");var hidedescriptionstring=str.get_string("hidedescription","mod_choicegroup"),showdescriptionstring=str.get_string("showdescription","mod_choicegroup");$(".choicegroups-descriptions").is(":visible")?$.when(hidedescriptionstring).done((function(hidestring){$(".choicegroup-descriptiondisplay").html(hidestring)})):$.when(showdescriptionstring).done((function(showstring){$(".choicegroup-descriptiondisplay").html(showstring)}))}))}}}));
/**
 * Ticks or unticks all checkboxes when clicking the Select all or Deselect all elements when viewing the response overview.
 *
 * @module      mod_choicegroup/select_all_choices
 * @copyright   2017 Marcus Fabriczy &lt;marcus.fabriczy@blackboard.com&gt;
 * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("mod_choicegroup/select_all_choices",["jquery"],(function($){return{init:function(){$(".selectallnone a").on("click",(function(e){e.preventDefault(),$("#attemptsform").find("input:checkbox").prop("checked",$(this).data("selectInfo"))}))}}}));
/**
 * Wrapper for the YUI M.core.notification class. Allows us to
 * use the YUI version in AMD code until it is replaced.
 *
 * @module     mod_customcert/dialogue
 * @copyright  2016 Mark Nelson &lt;markn@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("mod_customcert/dialogue",["core/yui"],(function(Y){var dialogue=function(title,content,afterShow,afterHide,wide){this.yuiDialogue=null;var parent=this;void 0===wide&amp;&amp;(wide=!1),Y.use("moodle-core-notification","timers",(function(){var width="480px";wide&amp;&amp;(width="800px"),parent.yuiDialogue=new M.core.dialogue({headerContent:title,bodyContent:content,draggable:!0,visible:!1,center:!0,modal:!0,width:width}),parent.yuiDialogue.after("visibleChange",(function(e){e.newVal?void 0!==afterShow&amp;&amp;Y.soon((function(){afterShow(parent),parent.yuiDialogue.centerDialogue()})):void 0!==afterHide&amp;&amp;Y.soon((function(){afterHide(parent)}))})),parent.yuiDialogue.show()}))};return dialogue.prototype.close=function(){this.yuiDialogue.hide(),this.yuiDialogue.destroy()},dialogue.prototype.getContent=function(){return this.yuiDialogue.bodyNode.getDOMNode()},dialogue}));
/**
 * AMD module used when rearranging a custom certificate.
 *
 * @module     mod_customcert/rearrange-area
 * @copyright  2016 Mark Nelson &lt;markn@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("mod_customcert/rearrange-area",["jquery","core/yui","core/fragment","mod_customcert/dialogue","core/notification","core/str","core/templates","core/ajax","core_form/changechecker"],(function($,Y,fragment,Dialogue,notification,str,template,ajax,FormChangeChecker){var RearrangeArea=function(selector){this._node=$(selector),this._setEvents()};return RearrangeArea.prototype.CUSTOMCERT_REF_POINT_TOPLEFT=0,RearrangeArea.prototype.CUSTOMCERT_REF_POINT_TOPCENTER=1,RearrangeArea.prototype.CUSTOMCERT_REF_POINT_TOPRIGHT=2,RearrangeArea.prototype.PIXELSINMM=3.779527559055,RearrangeArea.prototype._setEvents=function(){this._node.on("click",".element",this._editElement.bind(this))},RearrangeArea.prototype._editElement=function(event){var elementid=event.currentTarget.id.substr(8),contextid=this._node.attr("data-contextid"),params={elementid:elementid};fragment.loadFragment("mod_customcert","editelement",contextid,params).done(function(html,js){str.get_string("editelement","mod_customcert").done(function(title){Y.use("moodle-core-formchangechecker",function(){new Dialogue(title,"&lt;div id='elementcontent'&gt;&lt;/div&gt;",this._editElementDialogueConfig.bind(this,elementid,html,js),void 0,!0)}.bind(this))}.bind(this))}.bind(this)).fail(notification.exception)},RearrangeArea.prototype._editElementDialogueConfig=function(elementid,html,js,popup){template.replaceNode("#elementcontent",html,js),this._setPositionInForm(elementid);var body=$(popup.getContent());body.on("click","#id_savechanges",function(e){FormChangeChecker.resetAllFormDirtyStates(),this._saveElement(elementid).then(function(){this._getElementHTML(elementid).done(function(html){var elementNode=this._node.find("#element-"+elementid),refpoint=parseInt($("#id_refpoint").val()),refpointClass="";refpoint==this.CUSTOMCERT_REF_POINT_TOPLEFT?refpointClass="refpoint-left":refpoint==this.CUSTOMCERT_REF_POINT_TOPCENTER?refpointClass="refpoint-center":refpoint==this.CUSTOMCERT_REF_POINT_TOPRIGHT&amp;&amp;(refpointClass="refpoint-right"),elementNode.empty().append(html),elementNode.removeClass(),elementNode.addClass("element "+refpointClass),elementNode.attr("data-refpoint",refpoint);var posx=$("#editelementform #id_posx").val(),posy=$("#editelementform #id_posy").val();this._setPosition(elementid,refpoint,posx,posy),popup.close()}.bind(this))}.bind(this)).fail(notification.exception),e.preventDefault()}.bind(this)),body.on("click","#id_cancel",(function(e){popup.close(),e.preventDefault()}))},RearrangeArea.prototype._setPosition=function(elementid,refpoint,posx,posy){var element=Y.one("#element-"+elementid);posx=Y.one("#pdf").getX()+posx*this.PIXELSINMM,posy=Y.one("#pdf").getY()+posy*this.PIXELSINMM;var nodewidth=parseFloat(element.getComputedStyle("width")),maxwidth=element.width*this.PIXELSINMM;switch(maxwidth&amp;&amp;nodewidth&gt;maxwidth&amp;&amp;(nodewidth=maxwidth),refpoint){case this.CUSTOMCERT_REF_POINT_TOPCENTER:posx-=nodewidth/2;break;case this.CUSTOMCERT_REF_POINT_TOPRIGHT:posx=posx-nodewidth+2}element.setX(posx),element.setY(posy)},RearrangeArea.prototype._setPositionInForm=function(elementid){var posxelement=$("#editelementform #id_posx"),posyelement=$("#editelementform #id_posy");if(posxelement.length&amp;&amp;posyelement.length){var element=Y.one("#element-"+elementid),posx=element.getX()-Y.one("#pdf").getX(),posy=element.getY()-Y.one("#pdf").getY(),refpoint=parseInt(element.getData("refpoint")),nodewidth=parseFloat(element.getComputedStyle("width"));switch(refpoint){case this.CUSTOMCERT_REF_POINT_TOPCENTER:posx+=nodewidth/2;break;case this.CUSTOMCERT_REF_POINT_TOPRIGHT:posx+=nodewidth}posx=Math.round(parseFloat(posx/this.PIXELSINMM)),posy=Math.round(parseFloat(posy/this.PIXELSINMM)),posxelement.val(posx),posyelement.val(posy)}},RearrangeArea.prototype._getElementHTML=function(elementid){var templateid=this._node.attr("data-templateid");return ajax.call([{methodname:"mod_customcert_get_element_html",args:{templateid:templateid,elementid:elementid}}])[0]},RearrangeArea.prototype._saveElement=function(elementid){var templateid=this._node.attr("data-templateid"),inputs=$("#editelementform").serializeArray();return ajax.call([{methodname:"mod_customcert_save_element",args:{templateid:templateid,elementid:elementid,values:inputs}}])[0]},{init:function(selector){new RearrangeArea(selector)}}}));
define("mod_data/deletepreset",["exports","core/notification","core/prefetch","core/str","core/ajax","core/url"],(function(_exports,_notification,_prefetch,_str,_ajax,_url){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Javascript module for deleting a database as a preset.
   *
   * @module      mod_data/deletepreset
   * @copyright   2022 Amaia Anabitarte &lt;amaia@moodle.com&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_notification=_interopRequireDefault(_notification),_ajax=_interopRequireDefault(_ajax),_url=_interopRequireDefault(_url);const selectors_deletePresetButton='[data-action="deletepreset"]';_exports.init=()=&gt;{(0,_prefetch.prefetchStrings)("mod_data",["deleteconfirm","deletewarning"]),(0,_prefetch.prefetchStrings)("core",["delete"]),registerEventListeners()};const registerEventListeners=()=&gt;{document.addEventListener("click",(event=&gt;{const deleteOption=event.target.closest(selectors_deletePresetButton);deleteOption&amp;&amp;(event.preventDefault(),deletePresetConfirm(deleteOption))}))},deletePresetConfirm=deleteOption=&gt;{const presetName=deleteOption.getAttribute("data-presetname"),dataId=deleteOption.getAttribute("data-dataid");_notification.default.saveCancelPromise((0,_str.get_string)("deleteconfirm","mod_data",presetName),(0,_str.get_string)("deletewarning","mod_data"),(0,_str.get_string)("delete","core")).then((()=&gt;async function(dataId,presetName){var request={methodname:"mod_data_delete_saved_preset",args:{dataid:dataId,presetnames:{presetname:presetName}}};try{await _ajax.default.call([request])[0],window.location.href=_url.default.relativeUrl("mod/data/preset.php",{d:dataId},!1)}catch(error){_notification.default.exception(error)}}(dataId,presetName))).catch((()=&gt;{}))}}));
define("mod_data/resetalltemplates",["exports","core/notification","core/prefetch","core/str"],(function(_exports,_notification,_prefetch,_str){var obj;
/**
   * Javascript module for reseting all templates.
   *
   * @module      mod_data/resetalltemplates
   * @copyright   2022 Ferran Recio &lt;ferran@moodle.com&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_notification=(obj=_notification)&amp;&amp;obj.__esModule?obj:{default:obj};const selectors_resetAllTemplatesAction='[data-action="resetalltemplates"]';_exports.init=()=&gt;{(0,_prefetch.prefetchStrings)("mod_data",["resetalltemplatesconfirmtitle","resetalltemplatesconfirm"]),(0,_prefetch.prefetchStrings)("core",["reset"]),registerEventListeners()};const registerEventListeners=()=&gt;{document.addEventListener("click",(event=&gt;{const actionLink=event.target.closest(selectors_resetAllTemplatesAction);actionLink&amp;&amp;(event.preventDefault(),resetAllTemplatesConfirm(actionLink))}))},resetAllTemplatesConfirm=async actionLink=&gt;{try{await _notification.default.saveCancelPromise((0,_str.get_string)("resetalltemplatesconfirmtitle","mod_data"),(0,_str.get_string)("resetalltemplatesconfirm","mod_data"),(0,_str.get_string)("reset","core")),window.location=actionLink.href}catch(error){return}}}));
define("mod_data/selectpreset",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0;
/**
   * Javascript module to control the form responsible for selecting a preset.
   *
   * @module      mod_data/selectpreset
   * @copyright   2021 Mihail Geshoski &lt;mihail@moodle.com&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */
const selectors_presetRadioButton='input[name="fullname"]',selectors_selectPresetButton='input[name="selectpreset"]',selectors_selectedPresetRadioButton='input[name="fullname"]:checked';_exports.init=()=&gt;{const radioButton=document.querySelectorAll(selectors_presetRadioButton);disableUsePresetButton(),radioButton.forEach((elem=&gt;{elem.addEventListener("change",(function(event){event.preventDefault(),disableUsePresetButton()}))}))};const disableUsePresetButton=()=&gt;{let selectPresetButton=document.querySelector(selectors_selectPresetButton);const selectedRadioButton=document.querySelector(selectors_selectedPresetRadioButton);selectedRadioButton?(selectPresetButton.removeAttribute("disabled"),selectPresetButton.classList.remove("btn-secondary"),selectPresetButton.classList.add("btn-primary"),selectPresetButton.setAttribute("data-presetname",selectedRadioButton.getAttribute("value")),selectPresetButton.setAttribute("data-cmid",selectedRadioButton.getAttribute("data-cmid"))):(selectPresetButton.setAttribute("disabled",!0),selectPresetButton.classList.remove("btn-primary"),selectPresetButton.classList.add("btn-secondary"),selectPresetButton.removeAttribute("data-presetname"),selectPresetButton.removeAttribute("data-cmid"))}}));
define("mod_data/templateseditor",["exports","core/str","core/prefetch","core/url","core/notification","core/templates"],(function(_exports,_str,_prefetch,_url,_notification,_templates){var obj;
/**
   * Javascript module to control the template editor.
   *
   * @module      mod_data/templateseditor
   * @copyright   2021 Mihail Geshoski &lt;mihail@moodle.com&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_templates=(obj=_templates)&amp;&amp;obj.__esModule?obj:{default:obj},(0,_prefetch.prefetchStrings)("admin",["confirmation"]),(0,_prefetch.prefetchStrings)("mod_data",["resettemplateconfirmtitle","enabletemplateeditorcheck","editorenable"]),(0,_prefetch.prefetchStrings)("core",["reset"]);const selectors_toggleTemplateEditor='input[name="useeditor"]',selectors_resetTemplate='input[name="defaultform"]',selectors_resetAllTemplates='input[name="resetall"]',selectors_resetButton='input[name="resetbutton"]',selectors_resetAllCheck='input[name="resetallcheck"]',selectors_editForm="#edittemplateform",registerResetButton=mode=&gt;{const editForm=document.querySelector(selectors_editForm),resetButton=document.querySelector(selectors_resetButton),resetTemplate=document.querySelector(selectors_resetTemplate),resetAllTemplates=document.querySelector(selectors_resetAllTemplates);resetButton&amp;&amp;resetTemplate&amp;&amp;editForm&amp;&amp;(resetButton.addEventListener("click",(async event=&gt;{event.preventDefault();const params={resetallname:"resetallcheck",templatename:await(0,_str.get_string)(mode,"mod_data")};(0,_notification.saveCancel)((0,_str.get_string)("resettemplateconfirmtitle","mod_data"),_templates.default.render("mod_data/template_editor_resetmodal",params),(0,_str.get_string)("reset","core"),(()=&gt;{resetTemplate.value="true",editForm.submit()}),null,{triggerElement:event.target})})),resetAllTemplates&amp;&amp;document.addEventListener("change",(event=&gt;{event.target.matches(selectors_resetAllCheck)&amp;&amp;(resetAllTemplates.value=event.target.checked?"true":"")})))},registerEditorToggler=(instanceId,mode)=&gt;{const toggleTemplateEditor=document.querySelector(selectors_toggleTemplateEditor);toggleTemplateEditor&amp;&amp;toggleTemplateEditor.addEventListener("click",(async event=&gt;{event.preventDefault();event.target.checked?(0,_notification.saveCancel)((0,_str.get_string)("confirmation","admin"),(0,_str.get_string)("enabletemplateeditorcheck","mod_data"),(0,_str.get_string)("editorenable","mod_data"),(()=&gt;{window.location=(0,_url.relativeUrl)("/mod/data/templates.php",{d:instanceId,mode:mode,useeditor:!0})}),null,{triggerElement:event.target}):window.location=(0,_url.relativeUrl)("/mod/data/templates.php",{d:instanceId,mode:mode,useeditor:!1})}))};_exports.init=(instanceId,mode)=&gt;{((instanceId,mode)=&gt;{registerResetButton(mode),registerEditorToggler(instanceId,mode)})(instanceId,mode)}}));
define("mod_data/importmappingdialogue",["exports","core/notification","core/ajax","core/url","core/templates","core/modal_factory","core/prefetch","core/str"],(function(_exports,_notification,_ajax,_url,_templates,_modal_factory,_prefetch,_str){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Javascript module for deleting a database as a preset.
   *
   * @module      mod_data/importmappingdialogue
   * @copyright   2022 Amaia Anabitarte &lt;amaia@moodle.com&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_notification=_interopRequireDefault(_notification),_ajax=_interopRequireDefault(_ajax),_url=_interopRequireDefault(_url),_templates=_interopRequireDefault(_templates),_modal_factory=_interopRequireDefault(_modal_factory),(0,_prefetch.prefetchStrings)("mod_data",["mapping:dialogtitle:usepreset"]);const selectors_selectPresetButton='input[name="selectpreset"]';_exports.init=()=&gt;{registerEventListeners()};const registerEventListeners=()=&gt;{document.addEventListener("click",(event=&gt;{const usepreset=event.target.closest(selectors_selectPresetButton);usepreset&amp;&amp;(event.preventDefault(),showMappingDialogue(usepreset))}))},showMappingDialogue=usepreset=&gt;{const presetName=usepreset.dataset.presetname,cmId=usepreset.dataset.cmid;getMappingInformation(cmId,presetName).then((result=&gt;(result.data&amp;&amp;result.data.needsmapping?buildModal({title:(0,_str.get_string)("mapping:dialogtitle:usepreset","mod_data",result.data.presetname),body:_templates.default.render("mod_data/fields_mapping_body",result.data),footer:_templates.default.render("mod_data/fields_mapping_footer",getMappingButtons(cmId,presetName)),large:!0}):window.location.href=_url.default.relativeUrl("mod/data/field.php",{id:cmId,mode:"usepreset",fullname:presetName},!1),!0))).catch(_notification.default.exception)},buildModal=params=&gt;_modal_factory.default.create({...params,type:_modal_factory.default.types.DEFAULT}).then((modal=&gt;(modal.show(),modal.showFooter(),modal.registerCloseOnCancel(),modal))).catch(_notification.default.exception),getMappingButtons=(cmId,presetName)=&gt;{const data={};return data.mapfieldsbutton=_url.default.relativeUrl("mod/data/field.php",{id:cmId,fullname:presetName,mode:"usepreset",action:"select"},!1),data.applybutton=_url.default.relativeUrl("mod/data/field.php",{id:cmId,fullname:presetName,mode:"usepreset",action:"notmapping"},!1),data},getMappingInformation=(cmId,presetName)=&gt;{const request={methodname:"mod_data_get_mapping_information",args:{cmid:cmId,importedpreset:presetName}};return _ajax.default.call([request])[0]}}));
define("mod_data/editpreset",["exports","core_form/modalform","core/notification","core/str"],(function(_exports,_modalform,_notification,_str){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Javascript module for editing a database preset.
   *
   * @module      mod_data/editpreset
   * @copyright   2022 Sara Arjona &lt;sara@moodle.com&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_modalform=_interopRequireDefault(_modalform),_notification=_interopRequireDefault(_notification);const selectors_editPresetButton='[data-action="editpreset"]';_exports.init=()=&gt;{registerEventListeners()};const registerEventListeners=()=&gt;{document.addEventListener("click",(event=&gt;{const editAction=event.target.closest(selectors_editPresetButton);editAction&amp;&amp;(event.preventDefault(),showEditPresetModal(editAction))}))},showEditPresetModal=editAction=&gt;{const modalForm=new _modalform.default({modalConfig:{title:(0,_str.get_string)("editpreset","mod_data")},formClass:"mod_data\\form\\save_as_preset",args:{d:editAction.getAttribute("data-dataid"),action:editAction.getAttribute("data-action"),presetname:editAction.getAttribute("data-presetname"),presetdescription:editAction.getAttribute("data-presetdescription")},saveButtonText:(0,_str.get_string)("save"),returnFocus:editAction});modalForm.addEventListener(modalForm.events.FORM_SUBMITTED,(event=&gt;{event.detail.result?window.location.reload():_notification.default.addNotification({type:"error",message:event.detail.errors.join("&lt;br&gt;")})})),modalForm.show()}}));
define("mod_data/importpresets",["exports","core_form/modalform","core/notification","core/str"],(function(_exports,_modalform,_notification,_str){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Javascript module for importing presets.
   *
   * @module     mod_data/importpreset
   * @copyright  2022 Laurent David &lt;laurent.david@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_modalform=_interopRequireDefault(_modalform),_notification=_interopRequireDefault(_notification);const selectors_importPresetButton='[data-action="importpresets"]';_exports.init=()=&gt;{document.addEventListener("click",(event=&gt;{const importPresetButton=event.target.closest(selectors_importPresetButton);if(!importPresetButton)return;event.preventDefault();const modalForm=new _modalform.default({modalConfig:{title:(0,_str.get_string)("importpreset","mod_data")},formClass:"mod_data\\form\\import_presets",args:{cmid:importPresetButton.dataset.dataid},saveButtonText:(0,_str.get_string)("importandapply","mod_data")});modalForm.addEventListener(modalForm.events.FORM_SUBMITTED,(event=&gt;{event.detail.result?window.location.assign(event.detail.url):_notification.default.addNotification({type:"error",message:event.detail.errors.join("&lt;br&gt;")})})),modalForm.show()}))}}));
define("mod_data/saveaspreset",["exports","core_form/modalform","core/notification","core/str"],(function(_exports,_modalform,_notification,_str){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Javascript module for saving a database as a preset.
   *
   * @module      mod_data/saveaspreset
   * @copyright   2021 Mihail Geshoski &lt;mihail@moodle.com&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_modalform=_interopRequireDefault(_modalform),_notification=_interopRequireDefault(_notification);const selectors_saveAsPresetButton='[data-action="saveaspreset"]';_exports.init=()=&gt;{document.addEventListener("click",(event=&gt;{const saveAsPresetButton=event.target.closest(selectors_saveAsPresetButton);if(!saveAsPresetButton)return;event.preventDefault();const modalForm=new _modalform.default({modalConfig:{title:(0,_str.get_string)("savedataaspreset","mod_data")},formClass:"mod_data\\form\\save_as_preset",args:{d:saveAsPresetButton.dataset.dataid},saveButtonText:(0,_str.get_string)("save"),returnFocus:saveAsPresetButton});modalForm.addEventListener(modalForm.events.FORM_SUBMITTED,(event=&gt;{event.detail.result?window.location.reload():_notification.default.addNotification({type:"error",message:event.detail.errors.join("&lt;br&gt;")})})),modalForm.show()}))}}));
define("mod_feedback/edit",["jquery","core/ajax","core/str","core/notification"],(function($,ajax,str,notification){var manager={deleteItem:function(e){e.preventDefault();var targetUrl=$(e.currentTarget).attr("href");str.get_strings([{key:"confirmation",component:"admin"},{key:"confirmdeleteitem",component:"mod_feedback"},{key:"yes",component:"moodle"},{key:"no",component:"moodle"}]).then((function(s){notification.confirm(s[0],s[1],s[2],s[3],(function(){window.location=targetUrl}))})).catch()},setup:function(){$("body").delegate('[data-action="delete"]',"click",manager.deleteItem)}};return{setup:manager.setup}}));
define("mod_feedback/createtemplate",["exports","core_form/modalform","core/notification","core/str","core/toast"],(function(_exports,_modalform,_notification,_str,_toast){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Javascript module for saving a new template.
   *
   * @module      mod_feedback/createtemplate
   * @copyright   2021 Peter Dias
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_modalform=_interopRequireDefault(_modalform),_notification=_interopRequireDefault(_notification);const selectors_modaltrigger='[data-action="createtemplate"]';_exports.init=()=&gt;{document.querySelector(selectors_modaltrigger).addEventListener("click",(event=&gt;{event.preventDefault();const ele=event.currentTarget,modalForm=new _modalform.default({modalConfig:{title:(0,_str.get_string)("save_as_new_template","mod_feedback")},formClass:"mod_feedback\\form\\create_template_form",args:{id:ele.dataset.dataid},saveButtonText:(0,_str.get_string)("save","core")});modalForm.addEventListener(modalForm.events.FORM_SUBMITTED,(event=&gt;{event.detail.result?(0,_str.get_string)("template_saved","feedback").then(_toast.add).catch():(0,_str.get_string)("saving_failed","feedback").then((string=&gt;_notification.default.addNotification({type:"error",message:string}))).catch()})),modalForm.show()}))}}));
define("mod_feedback/usetemplate",["exports","core_form/modalform","core/notification","core/str"],(function(_exports,_modalform,_notification,_str){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Javascript module for using an existing template
   *
   * @module      mod_feedback/usetemplate
   * @copyright   2021 Peter Dias
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_modalform=_interopRequireDefault(_modalform),_notification=_interopRequireDefault(_notification);const selectors_modaltrigger='[data-action="usetemplate"]';_exports.init=()=&gt;{const trigger=document.querySelector(selectors_modaltrigger);trigger.addEventListener("click",(event=&gt;{event.preventDefault();const modalForm=new _modalform.default({modalConfig:{title:(0,_str.get_string)("use_this_template","mod_feedback")},formClass:"mod_feedback\\form\\use_template_form",args:{id:trigger.getAttribute("data-dataid"),templateid:trigger.getAttribute("data-templateid")},saveButtonText:(0,_str.get_string)("save","core")});modalForm.addEventListener(modalForm.events.FORM_SUBMITTED,(event=&gt;{event.detail.result?window.location.assign(event.detail.url):_notification.default.addNotification({type:"error",message:(0,_str.get_string)("saving_failed","mod_feedback")})})),modalForm.show()}))}}));
/**
 * This module handles the in page replying to forum posts.
 *
 * @module     mod_forum/inpage_reply
 * @copyright  2019 Peter Dias
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("mod_forum/inpage_reply",["jquery","core/templates","core/notification","mod_forum/repository","mod_forum/selectors","core_form/changechecker"],(function($,Templates,Notification,Repository,Selectors,FormChangeChecker){var DISPLAYCONSTANTS_NESTED_V2=4,DISPLAYCONSTANTS_THREADED=2,DISPLAYCONSTANTS_NESTED=3,DISPLAYCONSTANTS_FLAT_NEWEST_FIRST=-1,EVENTS={POST_CREATED:"mod_forum-post-created"},CONTENT_FORMATS={MOODLE:0},hideSubmitButtonLoadingIcon=function(button){var textContainer=button.find(Selectors.post.inpageSubmitBtnText),loadingIconContainer=button.find(Selectors.post.loadingIconContainer);button.css("width",""),textContainer.removeClass("hidden"),loadingIconContainer.addClass("hidden")},registerEventListeners=function(root){root.on("click",Selectors.post.inpageSubmitBtn,(function(e){e.preventDefault();var newid,button,textContainer,loadingIconContainer,width,submitButton=$(e.currentTarget),allButtons=submitButton.parent().find(Selectors.post.inpageReplyButton),form=submitButton.parents(Selectors.post.inpageReplyForm).get(0),message=form.elements.post.value.trim(),messageformat=CONTENT_FORMATS.MOODLE,postid=form.elements.reply.value,subject=form.elements.subject.value,currentRoot=submitButton.closest(Selectors.post.post),isprivatereply=null!=form.elements.privatereply&amp;&amp;form.elements.privatereply.checked,modeSelector=root.find(Selectors.post.modeSelect),mode=modeSelector.length?parseInt(modeSelector.get(0).value):null;message.length&amp;&amp;(textContainer=(button=submitButton).find(Selectors.post.inpageSubmitBtnText),loadingIconContainer=button.find(Selectors.post.loadingIconContainer),width=button.outerWidth(),button.css("width",width),textContainer.addClass("hidden"),loadingIconContainer.removeClass("hidden"),allButtons.prop("disabled",!0),Repository.addDiscussionPost(postid,subject,message,messageformat,isprivatereply,!0).then((function(context){var message=context.messages.reduce((function(carry,message){return"success"==message.type&amp;&amp;(carry+="&lt;p&gt;"+message.message+"&lt;/p&gt;"),carry}),"");return Notification.addNotification({message:message,type:"success"}),context})).then((function(context){form.reset();var post=context.post;switch(newid=post.id,mode){case DISPLAYCONSTANTS_NESTED_V2:var capabilities=post.capabilities,currentAuthorName=currentRoot.children().not(Selectors.post.repliesContainer).find(Selectors.post.authorName).text();return post.parentauthorname=currentAuthorName,post.showactionmenu=capabilities.view||capabilities.controlreadstatus||capabilities.edit||capabilities.split||capabilities.delete||capabilities.export||post.urls.viewparent,Templates.render("mod_forum/forum_discussion_nested_v2_post_reply",post);case DISPLAYCONSTANTS_THREADED:return Templates.render("mod_forum/forum_discussion_threaded_post",post);case DISPLAYCONSTANTS_NESTED:return Templates.render("mod_forum/forum_discussion_nested_post",post);default:return Templates.render("mod_forum/forum_discussion_post",post)}})).then((function(html,js){var repliesnode=currentRoot.find(Selectors.post.repliesContainer).first();return mode==DISPLAYCONSTANTS_FLAT_NEWEST_FIRST?Templates.prependNodeContents(repliesnode,html,js):Templates.appendNodeContents(repliesnode,html,js)})).then((function(){return submitButton.trigger(EVENTS.POST_CREATED,newid),hideSubmitButtonLoadingIcon(submitButton),allButtons.prop("disabled",!1),FormChangeChecker.resetFormDirtyState(submitButton[0]),currentRoot.find(Selectors.post.inpageReplyContent).hide()})).then((function(){location.href="#p"+newid,location.reload()})).catch((function(error){return hideSubmitButtonLoadingIcon(submitButton),allButtons.prop("disabled",!1),Notification.exception(error)})))}))};return{init:function(root){registerEventListeners(root)},CONTENT_FORMATS:CONTENT_FORMATS,EVENTS:EVENTS}}));
define("mod_forum/discussion_nested_v2",["exports","jquery","core/auto_rows","core/custom_interaction_events","core_form/changechecker","core/notification","core/templates","mod_forum/discussion","mod_forum/inpage_reply","mod_forum/lock_toggle","mod_forum/favourite_toggle","mod_forum/pin_toggle","mod_forum/selectors","mod_forum/subscription_toggle"],(function(_exports,_jquery,_auto_rows,_custom_interaction_events,FormChangeChecker,_notification,_templates,_discussion,_inpage_reply,_lock_toggle,_favourite_toggle,_pin_toggle,_selectors,_subscription_toggle){function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Module for viewing a discussion in nested v2 view.
   *
   * @module mod_Forum/discussion_nested_v2
   * @copyright  2019 Ryan Wyllie &lt;ryan@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_jquery=_interopRequireDefault(_jquery),_auto_rows=_interopRequireDefault(_auto_rows),_custom_interaction_events=_interopRequireDefault(_custom_interaction_events),FormChangeChecker=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}(FormChangeChecker),_notification=_interopRequireDefault(_notification),_templates=_interopRequireDefault(_templates),_discussion=_interopRequireDefault(_discussion),_inpage_reply=_interopRequireDefault(_inpage_reply),_lock_toggle=_interopRequireDefault(_lock_toggle),_favourite_toggle=_interopRequireDefault(_favourite_toggle),_pin_toggle=_interopRequireDefault(_pin_toggle),_selectors=_interopRequireDefault(_selectors),_subscription_toggle=_interopRequireDefault(_subscription_toggle);const getPostContainer=element=&gt;element.closest(_selectors.default.post.post),getPostContainerById=(element,id)=&gt;element.find("".concat(_selectors.default.post.post,"[data-post-id=").concat(id,"]")),getPostContentContainer=postContainer=&gt;postContainer.children().not(_selectors.default.post.repliesContainer).find(_selectors.default.post.forumCoreContent),getInPageReplyContainer=postContainer=&gt;postContainer.children().filter(_selectors.default.post.inpageReplyContainer),getInPageReplyForm=postContainer=&gt;getInPageReplyContainer(postContainer).find(_selectors.default.post.inpageReplyContent),getInPageReplyCreateButton=postContainer=&gt;getPostContentContainer(postContainer).find(_selectors.default.post.inpageReplyCreateButton),getRepliesVisibilityToggleContainer=postContainer=&gt;postContainer.children(_selectors.default.post.repliesVisibilityToggleContainer),getRepliesContainer=postContainer=&gt;postContainer.children(_selectors.default.post.repliesContainer),hasReplies=postContainer=&gt;getRepliesContainer(postContainer).children().length&gt;0,getShowRepliesButton=replyVisibilityToggleContainer=&gt;replyVisibilityToggleContainer.find(_selectors.default.post.showReplies),getHideRepliesButton=replyVisibilityToggleContainer=&gt;replyVisibilityToggleContainer.find(_selectors.default.post.hideReplies),repliesVisible=postContainer=&gt;getRepliesContainer(postContainer).is(":visible"),showReplies=function(postContainer){let postIdToSee=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]?arguments[1]:null;const repliesContainer=getRepliesContainer(postContainer),replyVisibilityToggleContainer=getRepliesVisibilityToggleContainer(postContainer),showButton=getShowRepliesButton(replyVisibilityToggleContainer),hideButton=getHideRepliesButton(replyVisibilityToggleContainer);showButton.addClass("hidden"),hideButton.removeClass("hidden"),repliesContainer.slideDown({duration:150,queue:!1,complete:()=&gt;{if(postIdToSee){const postContainerToSee=getPostContainerById(repliesContainer,postIdToSee);postContainerToSee.length&amp;&amp;postContainerToSee[0].scrollIntoView()}}}).css("display","none").fadeIn(150)},hideReplies=postContainer=&gt;{const repliesContainer=getRepliesContainer(postContainer),replyVisibilityToggleContainer=getRepliesVisibilityToggleContainer(postContainer),showButton=getShowRepliesButton(replyVisibilityToggleContainer),hideButton=getHideRepliesButton(replyVisibilityToggleContainer);showButton.removeClass("hidden"),hideButton.addClass("hidden"),repliesContainer.slideUp({duration:150,queue:!1}).fadeOut(150)};let showInPageReplyForm=null;const hideInPageReplyForm=function(postContainer){let postIdToSee=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]?arguments[1]:null;const inPageReplyForm=getInPageReplyForm(postContainer),inPageReplyCreateButton=getInPageReplyCreateButton(postContainer),repliesVisibilityToggleContainer=getRepliesVisibilityToggleContainer(postContainer);repliesVisibilityToggleContainer.length&amp;&amp;hasReplies(postContainer)&amp;&amp;(repliesVisibilityToggleContainer.fadeOut(150),repliesVisible(postContainer)||showReplies(postContainer,postIdToSee)),inPageReplyForm.slideUp({duration:150,queue:!1,complete:()=&gt;{inPageReplyCreateButton.fadeIn(150)}}).fadeOut(200)},hasInPageReplyForm=inPageReplyContainer=&gt;inPageReplyContainer.find(_selectors.default.post.inpageReplyContent).length&gt;0,renderInPageReplyTemplate=(additionalTemplateContext,button,postContainer)=&gt;{const postContentContainer=getPostContentContainer(postContainer),currentSubject=postContentContainer.find(_selectors.default.post.forumSubject).text(),currentAuthorName=postContentContainer.find(_selectors.default.post.authorName).text(),context={postid:postContainer.data("post-id"),reply_url:button.attr("data-href"),sesskey:M.cfg.sesskey,parentsubject:currentSubject,parentauthorname:currentAuthorName,canreplyprivately:button.data("can-reply-privately"),postformat:_inpage_reply.default.CONTENT_FORMATS.MOODLE,...additionalTemplateContext};return _templates.default.render("mod_forum/inpage_reply_v2",context)},registerEventListeners=root=&gt;{_custom_interaction_events.default.define(root,[_custom_interaction_events.default.events.activate]),_auto_rows.default.init(root),root.on(_custom_interaction_events.default.events.activate,_selectors.default.post.inpageReplyCreateButton,((e,data)=&gt;{data.originalEvent.preventDefault();const postContainer=getPostContainer((0,_jquery.default)(e.currentTarget));showInPageReplyForm(postContainer)})),root.on(_custom_interaction_events.default.events.activate,_selectors.default.post.inpageReplyCancelButton,((e,data)=&gt;{data.originalEvent.preventDefault();const postContainer=getPostContainer((0,_jquery.default)(e.currentTarget));hideInPageReplyForm(postContainer)})),root.on(_custom_interaction_events.default.events.activate,_selectors.default.post.showReplies,((e,data)=&gt;{data.originalEvent.preventDefault();const postContainer=getPostContainer((0,_jquery.default)(e.target));showReplies(postContainer)})),root.on(_custom_interaction_events.default.events.activate,_selectors.default.post.hideReplies,((e,data)=&gt;{data.originalEvent.preventDefault();const postContainer=getPostContainer((0,_jquery.default)(e.target));hideReplies(postContainer)})),root.on(_inpage_reply.default.EVENTS.POST_CREATED,_selectors.default.post.inpageSubmitBtn,((e,newPostId)=&gt;{const currentTarget=(0,_jquery.default)(e.currentTarget),postContainer=getPostContainer(currentTarget),postContainers=currentTarget.parents(_selectors.default.post.post);hideInPageReplyForm(postContainer,newPostId),postContainers.each(((index,container)=&gt;{(postContainer=&gt;{getRepliesVisibilityToggleContainer(postContainer).find(_selectors.default.post.replyCount).each(((index,element)=&gt;{const currentCount=parseInt(element.innerText,10);element.innerText=currentCount+1}))})((0,_jquery.default)(container))}))}))};_exports.init=(root,context)=&gt;{var additionalTemplateContext;additionalTemplateContext=context,showInPageReplyForm=async postContainer=&gt;{const inPageReplyContainer=getInPageReplyContainer(postContainer),repliesVisibilityToggleContainer=getRepliesVisibilityToggleContainer(postContainer),inPageReplyCreateButton=getInPageReplyCreateButton(postContainer);if(!hasInPageReplyForm(inPageReplyContainer)){try{const html=await renderInPageReplyTemplate(additionalTemplateContext,inPageReplyCreateButton,postContainer);_templates.default.appendNodeContents(inPageReplyContainer,html,"")}catch(e){_notification.default.exception(e)}FormChangeChecker.watchForm(postContainer[0].querySelector("form"))}inPageReplyCreateButton.fadeOut(150,(()=&gt;{const inPageReplyForm=getInPageReplyForm(postContainer);inPageReplyForm.slideDown({duration:150,queue:!1,complete:()=&gt;{inPageReplyForm.find("textarea").focus()}}).css("display","none").fadeIn(150),repliesVisibilityToggleContainer.length&amp;&amp;hasReplies(postContainer)&amp;&amp;(repliesVisibilityToggleContainer.fadeIn(150),hideReplies(postContainer))}))},registerEventListeners(root),_discussion.default.init(root),_inpage_reply.default.init(root);const discussionToolsContainer=root.find(_selectors.default.discussion.tools);_lock_toggle.default.init(discussionToolsContainer,!1),_favourite_toggle.default.init(discussionToolsContainer,!1,((toggleElement,response)=&gt;{const newTargetState=response.userstate.favourited?0:1;return toggleElement.data("targetstate",newTargetState)})),_pin_toggle.default.init(discussionToolsContainer,!1,((toggleElement,response)=&gt;{const newTargetState=response.pinned?0:1;return toggleElement.data("targetstate",newTargetState)})),_subscription_toggle.default.init(discussionToolsContainer,!1,((toggleElement,response)=&gt;{const newTargetState=response.userstate.subscribed?0:1;toggleElement.data("targetstate",newTargetState)}))}}));
/**
 * This module is the highest level module for the calendar. It is
 * responsible for initialising all of the components required for
 * the calendar to run. It also coordinates the interaction between
 * components by listening for and responding to different events
 * triggered within the calendar UI.
 *
 * @module     mod_forum/pin_toggle
 * @copyright  2018 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("mod_forum/pin_toggle",["jquery","core/ajax","core/str","core/templates","core/notification","mod_forum/repository","mod_forum/selectors","core/str"],(function($,Ajax,Str,Templates,Notification,Repository,Selectors,String){return{init:function(root,preventDefault,callback){root.on("click",Selectors.pin.toggle,(function(e){var toggleElement=$(this),forumid=toggleElement.data("forumid"),discussionid=toggleElement.data("discussionid"),pinstate=toggleElement.data("targetstate");Repository.setPinDiscussionState(forumid,discussionid,pinstate).then((function(context){return callback(toggleElement,context)})).then((function(){return String.get_string("pinupdated","forum").done((function(s){return Notification.addNotification({message:s,type:"info"})}))})).fail(Notification.exception),preventDefault&amp;&amp;e.preventDefault()}))}}}));
/**
 * Enrolled user selector module.
 *
 * @module     mod_forum/form-user-selector
 * @copyright  2019 Shamim Rezaie
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("mod_forum/form-user-selector",["jquery","core/ajax","core/templates"],(function($,Ajax,Templates){return{processResults:function(selector,results){var users=[];return $.each(results,(function(index,user){users.push({value:user.id,label:user._label})})),users},transport:function(selector,query,success,failure){var courseid=$(selector).attr("courseid"),contextid=$(selector).attr("data-contextid");Ajax.call([{methodname:"core_enrol_search_users",args:{courseid:courseid,search:query,searchanywhere:!0,page:0,perpage:30,contextid:contextid}}])[0].then((function(results){var promises=[],i=0;return $.each(results,(function(index,user){promises.push(Templates.render("mod_forum/form-user-selector-suggestion",user))})),$.when.apply($.when,promises).then((function(){var args=arguments;$.each(results,(function(index,user){user._label=args[i],i++})),success(results)}))})).fail(failure)}}}));
define("mod_forum/local/layouts",["exports","./layout/fullscreen"],(function(_exports,_fullscreen){Object.defineProperty(_exports,"__esModule",{value:!0}),Object.defineProperty(_exports,"createFullScreenWindow",{enumerable:!0,get:function(){return _fullscreen.createLayout}})}));
define("mod_forum/local/grades/local/grader/gradingpanel",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0;var _systemImportTransformerGlobalIdentifier="undefined"!=typeof window?window:"undefined"!=typeof self?self:"undefined"!=typeof global?global:{};
/**
   * Grading panel functions.
   *
   * @module     mod_forum/local/grades/local/grader/gradingpanel
   * @copyright  2019 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */return _exports.default=async(component,context,gradingComponent,gradingSubtype,itemName)=&gt;{let gradingMethodHandler="".concat(gradingComponent,"/grades/grader/gradingpanel");gradingSubtype&amp;&amp;(gradingMethodHandler+="/".concat(gradingSubtype));const GradingMethod=await("function"==typeof _systemImportTransformerGlobalIdentifier.define&amp;&amp;_systemImportTransformerGlobalIdentifier.define.amd?new Promise((function(resolve,reject){_systemImportTransformerGlobalIdentifier.require([gradingMethodHandler],resolve,reject)})):"undefined"!=typeof module&amp;&amp;module.exports&amp;&amp;"undefined"!=typeof require||"undefined"!=typeof module&amp;&amp;module.component&amp;&amp;_systemImportTransformerGlobalIdentifier.require&amp;&amp;"component"===_systemImportTransformerGlobalIdentifier.require.loader?Promise.resolve(require(gradingMethodHandler)):Promise.resolve(_systemImportTransformerGlobalIdentifier[gradingMethodHandler]));return{getter:userId=&gt;GradingMethod.fetchCurrentGrade(component,context,itemName,userId),setter:(userId,notifyStudent,formData)=&gt;GradingMethod.storeCurrentGrade(component,context,itemName,userId,notifyStudent,formData)}},_exports.default}));
define("mod_forum/local/grades/local/grader/user_picker/selectors",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0;return _exports.default={regions:{currentUser:'[data-region="user_picker/current_user"]',userRegion:'[data-region="user_picker/user"]'},actions:{changeUser:'[data-action="change-user"]'}},_exports.default}));
define("mod_forum/local/grades/local/grader/selectors",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0;
/**
   * Define all of the selectors we will be using on the grading interface.
   *
   * @module     mod_forum/local/grades/local/grader/selectors
   * @copyright  2019 Mathew May &lt;mathew.solutions&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */
const getDataSelector=(name,value)=&gt;"[data-".concat(name,'="').concat(value,'"]');var _default={buttons:{toggleFullscreen:getDataSelector("action","togglefullscreen"),closeGrader:getDataSelector("action","closegrader"),collapseGradingDrawer:getDataSelector("action","collapse-grading-drawer"),saveGrade:getDataSelector("action","savegrade"),selectUser:getDataSelector("action","select-user"),toggleSearch:getDataSelector("action","toggle-search")},regions:{bodyContainer:getDataSelector("region","body-container"),moduleContainer:getDataSelector("region","module_content_container"),moduleReplace:getDataSelector("region","module_content"),pickerRegion:getDataSelector("region","user_picker"),gradingInfoContainer:getDataSelector("region","grading-info-container"),gradingPanel:getDataSelector("region","grade"),gradingPanelContainer:getDataSelector("region","grading-panel-container"),gradingPanelErrors:getDataSelector("region","grade-errors"),searchResultsContainer:getDataSelector("region","search-results-container"),statusContainer:getDataSelector("region","status-container"),userSearchContainer:getDataSelector("region","user-search-container"),userSearchInput:getDataSelector("region","user-search-input")},values:{sendStudentNotifications:'[data-region="notification"] input[type="radio"]:checked'}};return _exports.default=_default,_exports.default}));
define("mod_forum/local/grades/local/grader/user_picker",["exports","core/templates","./user_picker/selectors","core/str"],(function(_exports,_templates,_selectors,_str){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * This module will tie together all of the different calls the gradable module will make.
   *
   * @module     mod_forum/local/grades/local/grader/user_picker
   * @copyright  2019 Mathew May &lt;mathew.solutions&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_templates=_interopRequireDefault(_templates),_selectors=_interopRequireDefault(_selectors);class UserPicker{constructor(userList,showUserCallback,preChangeUserCallback){this.userList=userList,this.showUserCallback=showUserCallback,this.preChangeUserCallback=preChangeUserCallback,this.currentUserIndex=0,this.render=this.render.bind(this),this.setUserId=this.setUserId.bind(this)}setUserId(userId){const userIndex=this.userList.findIndex((user=&gt;user.id===parseInt(userId)));if(-1===userIndex)throw Error("User with id ".concat(userId," not found"));this.currentUserIndex=userIndex}async render(){this.root=document.createElement("div");const{html:html,js:js}=await this.renderNavigator();_templates.default.replaceNodeContents(this.root,html,js),await this.showUser(this.currentUser),this.registerEventListeners()}renderNavigator(){return _templates.default.renderForPromise("".concat("mod_forum/local/grades/local/grader","/user_picker"),{})}renderUserChange(context){return _templates.default.renderForPromise("".concat("mod_forum/local/grades/local/grader","/user_picker/user"),context)}async showUser(user){const[{html:html,js:js}]=await Promise.all([this.renderUserChange(user),this.showUserCallback(user)]),userRegion=this.root.querySelector(_selectors.default.regions.userRegion);_templates.default.replaceNodeContents(userRegion,html,js);this.root.querySelector(_selectors.default.regions.currentUser).textContent=await(0,_str.get_string)("nowgradinguser","mod_forum",user.fullname)}registerEventListeners(){this.root.addEventListener("click",(async e=&gt;{const button=e.target.closest(_selectors.default.actions.changeUser);if(button){(await this.preChangeUserCallback(this.currentUser)).failed||(this.updateIndex(parseInt(button.dataset.direction)),await this.showUser(this.currentUser))}}))}updateIndex(direction){return this.currentUserIndex+=direction,this.currentUserIndex&lt;0?this.currentUserIndex=this.userList.length-1:this.currentUserIndex&gt;this.userList.length-1&amp;&amp;(this.currentUserIndex=0),this.currentUserIndex}get currentUser(){return{...this.userList[this.currentUserIndex],total:this.userList.length,displayIndex:this.currentUserIndex+1}}get rootNode(){return this.root}}return _exports.default=async function(users,showUserCallback,preChangeUserCallback){let{initialUserId:initialUserId=null}=arguments.length&gt;3&amp;&amp;void 0!==arguments[3]?arguments[3]:{};const userPicker=new UserPicker(users,showUserCallback,preChangeUserCallback);return initialUserId&amp;&amp;userPicker.setUserId(initialUserId),await userPicker.render(),userPicker},_exports.default}));
define("mod_forum/local/grades/grader",["exports","core/templates","./local/grader/selectors","./local/grader/user_picker","mod_forum/local/layout/fullscreen","./local/grader/gradingpanel","core/toast","core/notification","core/str","core_grades/grades/grader/gradingpanel/normalise","core/loadingicon","core/utils","core_grades/grades/grader/gradingpanel/comparison","core/modal_factory","core/modal_events","core/pubsub","core/drawer_events"],(function(_exports,_templates,_selectors,_user_picker,_fullscreen,_gradingpanel,_toast,_notification,_str,_normalise,_loadingicon,_utils,_comparison,Modal,ModalEvents,_pubsub,_drawer_events){function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * This module will tie together all of the different calls the gradable module will make.
   *
   * @module     mod_forum/local/grades/grader
   * @copyright  2019 Mathew May &lt;mathew.solutions&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),Object.defineProperty(_exports,"getGradingPanelFunctions",{enumerable:!0,get:function(){return _gradingpanel.default}}),_exports.view=_exports.launch=void 0,_templates=_interopRequireDefault(_templates),_selectors=_interopRequireDefault(_selectors),_user_picker=_interopRequireDefault(_user_picker),_gradingpanel=_interopRequireDefault(_gradingpanel),Modal=_interopRequireWildcard(Modal),ModalEvents=_interopRequireWildcard(ModalEvents),_drawer_events=_interopRequireDefault(_drawer_events);const templateNames_grader={app:"mod_forum/local/grades/grader",gradingPanel:{error:"mod_forum/local/grades/local/grader/gradingpanel/error"},searchResults:"mod_forum/local/grades/local/grader/user_picker/user_search",status:"mod_forum/local/grades/local/grader/status"},displayUserPicker=(root,html)=&gt;{const pickerRegion=root.querySelector(_selectors.default.regions.pickerRegion);_templates.default.replaceNodeContents(pickerRegion,html,"")},fetchContentFromRender=(html,js)=&gt;[html,js],getUpdateUserContentFunction=(root,getContentForUser,getGradeForUser,saveGradeForUser)=&gt;{let firstLoad=!0;return async user=&gt;{const spinner=firstLoad?null:(0,_loadingicon.addIconToContainerWithPromise)(root),[[html,js],userGrade]=await Promise.all([getContentForUser(user.id).then(fetchContentFromRender),getGradeForUser(user.id)]);_templates.default.replaceNodeContents(root.querySelector(_selectors.default.regions.moduleReplace),html,js);const[gradingPanelHtml,gradingPanelJS]=await _templates.default.render(userGrade.templatename,userGrade.grade).then(fetchContentFromRender),panelContainer=root.querySelector(_selectors.default.regions.gradingPanelContainer),panel=panelContainer.querySelector(_selectors.default.regions.gradingPanel);_templates.default.replaceNodeContents(panel,gradingPanelHtml,gradingPanelJS);const form=panel.querySelector("form");return(0,_comparison.fillInitialValues)(form),form.addEventListener("submit",(event=&gt;{saveGradeForUser(user),event.preventDefault()})),panelContainer.scrollTop=0,firstLoad=!1,spinner&amp;&amp;spinner.resolve(),userGrade}},hideSearchResultContainer=(bodyContainer,userPickerContainer,searchResultsContainer)=&gt;{bodyContainer.classList.remove("hidden"),userPickerContainer.classList.remove("hidden"),searchResultsContainer.classList.add("hidden")},hideUserSearchInput=(toggleSearchButton,searchContainer,searchInput)=&gt;{searchContainer.classList.add("collapsed"),toggleSearchButton.setAttribute("aria-expanded","false"),toggleSearchButton.classList.add("collapse"),toggleSearchButton.classList.remove("expand"),toggleSearchButton.focus();searchContainer.parentElement.querySelector(_selectors.default.regions.gradingInfoContainer).removeAttribute("aria-hidden");const collapseGradingDrawer=searchContainer.parentElement.querySelector(_selectors.default.buttons.collapseGradingDrawer);collapseGradingDrawer.removeAttribute("aria-hidden"),collapseGradingDrawer.setAttribute("tabindex","0"),searchInput.value=""},renderSearchResults=async(searchResultsContainer,users)=&gt;{const{html:html,js:js}=await _templates.default.renderForPromise(templateNames_grader.searchResults,{users:users});_templates.default.replaceNodeContents(searchResultsContainer,html,js)},registerEventListeners=(graderLayout,userPicker,saveGradeFunction,userList)=&gt;{const graderContainer=graderLayout.getContainer(),toggleSearchButton=graderContainer.querySelector(_selectors.default.buttons.toggleSearch),searchInputContainer=graderContainer.querySelector(_selectors.default.regions.userSearchContainer),searchInput=searchInputContainer.querySelector(_selectors.default.regions.userSearchInput),bodyContainer=graderContainer.querySelector(_selectors.default.regions.bodyContainer),userPickerContainer=graderContainer.querySelector(_selectors.default.regions.pickerRegion),searchResultsContainer=graderContainer.querySelector(_selectors.default.regions.searchResultsContainer);graderContainer.addEventListener("click",(e=&gt;{if(e.target.closest(_selectors.default.buttons.toggleFullscreen))return e.stopImmediatePropagation(),e.preventDefault(),void graderLayout.toggleFullscreen();if(e.target.closest(_selectors.default.buttons.closeGrader))return e.stopImmediatePropagation(),e.preventDefault(),void graderLayout.close();if(e.target.closest(_selectors.default.buttons.saveGrade)&amp;&amp;saveGradeFunction(userPicker.currentUser),e.target.closest(_selectors.default.buttons.toggleSearch))return void("true"===toggleSearchButton.getAttribute("aria-expanded")?(hideUserSearchInput(toggleSearchButton,searchInputContainer,searchInput),hideSearchResultContainer(bodyContainer,userPickerContainer,searchResultsContainer),searchResultsContainer.innerHTML=""):(((toggleSearchButton,searchContainer,searchInput)=&gt;{searchContainer.classList.remove("collapsed"),toggleSearchButton.setAttribute("aria-expanded","true"),toggleSearchButton.classList.add("expand"),toggleSearchButton.classList.remove("collapse"),searchContainer.parentElement.querySelector(_selectors.default.regions.gradingInfoContainer).setAttribute("aria-hidden","true");const collapseGradingDrawer=searchContainer.parentElement.querySelector(_selectors.default.buttons.collapseGradingDrawer);collapseGradingDrawer.setAttribute("aria-hidden","true"),collapseGradingDrawer.setAttribute("tabindex","-1"),searchInput.focus()})(toggleSearchButton,searchInputContainer,searchInput),((bodyContainer,userPickerContainer,searchResultsContainer)=&gt;{bodyContainer.classList.add("hidden"),userPickerContainer.classList.add("hidden"),searchResultsContainer.classList.remove("hidden")})(bodyContainer,userPickerContainer,searchResultsContainer),renderSearchResults(searchResultsContainer,userList)));const selectUserButton=e.target.closest(_selectors.default.buttons.selectUser);if(selectUserButton){const userId=selectUserButton.getAttribute("data-userid"),user=userList.find((user=&gt;user.id==userId));userPicker.setUserId(userId),userPicker.showUser(user),hideUserSearchInput(toggleSearchButton,searchInputContainer,searchInput),hideSearchResultContainer(bodyContainer,userPickerContainer,searchResultsContainer),searchResultsContainer.innerHTML=""}})),searchInput.addEventListener("input",(0,_utils.debounce)((()=&gt;{const users=((userList,searchTerm)=&gt;""===searchTerm?userList:(searchTerm=searchTerm.toLowerCase(),userList.filter((user=&gt;user.fullname.toLowerCase().includes(searchTerm)))))(userList,searchInput.value);renderSearchResults(searchResultsContainer,users)}),300)),(0,_pubsub.subscribe)(_drawer_events.default.DRAWER_HIDDEN,(drawerRoot=&gt;{drawerRoot[0].querySelector(_selectors.default.regions.gradingPanel)&amp;&amp;setContentContainerMargin(graderContainer,0)})),(0,_pubsub.subscribe)(_drawer_events.default.DRAWER_SHOWN,(drawerRoot=&gt;{const gradingPanel=drawerRoot[0];gradingPanel.querySelector(_selectors.default.regions.gradingPanel)&amp;&amp;setContentContainerMargin(graderContainer,gradingPanel.offsetWidth)}))},setContentContainerMargin=(graderContainer,rightMargin)=&gt;{const contentContainer=graderContainer.querySelector(_selectors.default.regions.moduleContainer);contentContainer&amp;&amp;(contentContainer.style.marginRight="".concat(rightMargin,"px"))},getSaveUserGradeFunction=(root,setGradeForUser)=&gt;async user=&gt;{try{root.querySelector(_selectors.default.regions.gradingPanelErrors).innerHTML="";const result=await setGradeForUser(user.id,root.querySelector(_selectors.default.values.sendStudentNotifications).value,root.querySelector(_selectors.default.regions.gradingPanel));return result.success&amp;&amp;(0,_toast.add)(await(0,_str.get_string)("grades:gradesavedfor","mod_forum",user)),result.failed&amp;&amp;displayGradingError(root,user,result.error),result}catch(err){return displayGradingError(root,user,err),(0,_normalise.failedUpdate)(err)}},displayGradingError=async(root,user,err)=&gt;{const[{html:html,js:js},errorString]=await Promise.all([_templates.default.renderForPromise(templateNames_grader.gradingPanel.error,{error:err}),await(0,_str.get_string)("grades:gradesavefailed","mod_forum",{error:err.message,...user})]);_templates.default.replaceNodeContents(root.querySelector(_selectors.default.regions.gradingPanelErrors),html,js),(0,_toast.add)(errorString,{type:"warning"})};_exports.launch=async function(getListOfUsers,getContentForUser,getGradeForUser,setGradeForUser){let{initialUserId:initialUserId=null,moduleName:moduleName,courseName:courseName,courseUrl:courseUrl,sendStudentNotifications:sendStudentNotifications,focusOnClose:focusOnClose=null}=arguments.length&gt;4&amp;&amp;void 0!==arguments[4]?arguments[4]:{};const userList=await getListOfUsers();if(!userList.length)return void(0,_notification.addNotification)({message:await(0,_str.get_string)("nouserstograde","core_grades"),type:"error"});const[graderLayout,{html:html,js:js}]=await Promise.all([(0,_fullscreen.createLayout)({fullscreen:!1,showLoader:!1,focusOnClose:focusOnClose}),_templates.default.renderForPromise(templateNames_grader.app,{moduleName:moduleName,courseName:courseName,courseUrl:courseUrl,drawer:{show:!0},defaultsendnotifications:sendStudentNotifications})]),graderContainer=graderLayout.getContainer(),saveGradeFunction=getSaveUserGradeFunction(graderContainer,setGradeForUser);_templates.default.replaceNodeContents(graderContainer,html,js);const updateUserContent=getUpdateUserContentFunction(graderContainer,getContentForUser,getGradeForUser,saveGradeFunction),userIds=userList.map((user=&gt;user.id)),statusContainer=graderContainer.querySelector(_selectors.default.regions.statusContainer),userPicker=await(0,_user_picker.default)(userList,(async user=&gt;{const renderContext={status:(await updateUserContent(user)).hasgrade,index:userIds.indexOf(user.id)+1,total:userList.length};_templates.default.render(templateNames_grader.status,renderContext).then((html=&gt;(statusContainer.innerHTML=html,html))).catch()}),saveGradeFunction,{initialUserId:initialUserId});registerEventListeners(graderLayout,userPicker,saveGradeFunction,userList),displayUserPicker(graderContainer,userPicker.rootNode)};_exports.view=async function(getGradeForUser,userid,moduleName){let{focusOnClose:focusOnClose=null}=arguments.length&gt;3&amp;&amp;void 0!==arguments[3]?arguments[3]:{};const[userGrade,modal]=await Promise.all([getGradeForUser(userid),Modal.create({title:moduleName,large:!0,type:Modal.types.CANCEL})]),spinner=(0,_loadingicon.addIconToContainerWithPromise)(modal.getRoot());modal.getRoot().on(ModalEvents.hidden,(function(){if(modal.destroy(),focusOnClose)try{focusOnClose.focus()}catch(e){}})),modal.show();const output=document.createElement("div"),{html:html,js:js}=await _templates.default.renderForPromise("mod_forum/local/grades/view_grade",userGrade);_templates.default.replaceNodeContents(output,html,js);const[gradeHTML,gradeJS]=await renderGradeTemplate(userGrade),gradeReplace=output.querySelector('[data-region="grade-template"]');_templates.default.replaceNodeContents(gradeReplace,gradeHTML,gradeJS),modal.setBody(output.outerHTML),spinner.resolve()};const renderGradeTemplate=async userGrade=&gt;{const{html:html,js:js}=await _templates.default.renderForPromise(userGrade.templatename,userGrade.grade);return[html,js]}}));
define("mod_forum/local/layout/fullscreen",["exports","core/loadingicon","core/toast","core/local/aria/focuslock"],(function(_exports,_loadingicon,_toast,FocusLockManager){function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.createLayout=void 0,FocusLockManager=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}
/**
   * Full screen window layout.
   *
   * @module mod_forum/local/layout/fullscreen
   * @copyright  2019 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */(FocusLockManager);_exports.createLayout=function(){let{fullscreen:fullscreen=!0,showLoader:showLoader=!1,focusOnClose:focusOnClose=null}=arguments.length&gt;0&amp;&amp;void 0!==arguments[0]?arguments[0]:{};const container=document.createElement("div");document.body.append(container),container.classList.add("layout"),container.classList.add("fullscreen"),container.setAttribute("role","application"),(0,_toast.addToastRegion)(container),lockBodyScroll(),FocusLockManager.trapFocus(container);const helpers=getLayoutHelpers(container,FocusLockManager,focusOnClose);return showLoader&amp;&amp;helpers.showLoadingIcon(),fullscreen&amp;&amp;helpers.requestFullscreen(),helpers};const getLayoutHelpers=(layoutNode,FocusLockManager,focusOnClose)=&gt;{const contentNode=document.createElement("div");layoutNode.append(contentNode);const loadingNode=document.createElement("div");layoutNode.append(loadingNode);const requestFullscreen=()=&gt;{layoutNode.requestFullscreen?layoutNode.requestFullscreen():layoutNode.msRequestFullscreen?layoutNode.msRequestFullscreen():layoutNode.mozRequestFullscreen?layoutNode.mozRequestFullscreen():layoutNode.webkitRequestFullscreen?layoutNode.webkitRequestFullscreen():layoutNode.setTop(0)},exitFullscreen=()=&gt;{if(document.exitRequestFullScreen){if(document.fullScreenElement!==layoutNode)return;document.exitRequestFullScreen()}else if(document.msExitFullscreen){if(document.msFullscreenElement!==layoutNode)return;document.msExitFullscreen()}else if(document.mozCancelFullScreen){if(document.mozFullScreenElement!==layoutNode)return;document.mozCancelFullScreen()}else if(document.webkitExitFullscreen){if(document.webkitFullscreenElement!==layoutNode)return;document.webkitExitFullscreen()}},hideLoadingIcon=()=&gt;{let child=loadingNode.lastElementChild;for(;child;)loadingNode.removeChild(child),child=loadingNode.lastElementChild};return{close:()=&gt;{if(exitFullscreen(),unlockBodyScroll(),FocusLockManager.untrapFocus(),layoutNode.remove(),focusOnClose)try{focusOnClose.focus()}catch(e){}},toggleFullscreen:()=&gt;{document.exitRequestFullScreen?document.fullScreenElement===layoutNode?exitFullscreen():requestFullscreen():document.msExitFullscreen?document.msFullscreenElement===layoutNode?exitFullscreen():requestFullscreen():document.mozCancelFullScreen?document.mozFullScreenElement===layoutNode?exitFullscreen():requestFullscreen():document.webkitExitFullscreen&amp;&amp;(document.webkitFullscreenElement===layoutNode?exitFullscreen():requestFullscreen())},requestFullscreen:requestFullscreen,exitFullscreen:exitFullscreen,getContainer:()=&gt;contentNode,setContent:content=&gt;{hideLoadingIcon();let child=contentNode.lastElementChild;for(;child;)contentNode.removeChild(child),child=contentNode.lastElementChild;contentNode.append(content)},showLoadingIcon:()=&gt;{(0,_loadingicon.addIconToContainer)(loadingNode)},hideLoadingIcon:hideLoadingIcon}},lockBodyScroll=()=&gt;{document.querySelector("body").classList.add("overflow-hidden")},unlockBodyScroll=()=&gt;{document.querySelector("body").classList.remove("overflow-hidden")}}));
/**
 * Common CSS selectors for the forum UI.
 *
 * @module     mod_forum/selectors
 * @copyright  2019 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("mod_forum/selectors",[],(function(){return{subscription:{toggle:"[data-type='subscription-toggle'][data-action='toggle']"},summary:{actions:"[data-container='discussion-summary-actions']"},post:{post:'[data-region="post"]',action:'[data-region="post-action"]',actionsContainer:'[data-region="post-actions-container"]',authorName:'[data-region="author-name"]',forumCoreContent:"[data-region-content='forum-post-core']",forumContent:"[data-content='forum-post']",forumSubject:"[data-region-content='forum-post-core-subject']",inpageReplyButton:"button",inpageReplyLink:"[data-action='collapsible-link']",inpageReplyCancelButton:"[data-action='cancel-inpage-reply']",inpageReplyCreateButton:"[data-action='create-inpage-reply']",inpageReplyContainer:'[data-region="inpage-reply-container"]',inpageReplyContent:"[data-content='inpage-reply-content']",inpageReplyForm:"form[data-content='inpage-reply-form']",inpageSubmitBtn:"[data-action='forum-inpage-submit']",inpageSubmitBtnText:"[data-region='submit-text']",loadingIconContainer:"[data-region='loading-icon-container']",repliesContainer:"[data-region='replies-container']",replyCount:'[data-region="reply-count"]',modeSelect:"select[name='mode']",showReplies:'[data-action="show-replies"]',hideReplies:'[data-action="hide-replies"]',repliesVisibilityToggleContainer:'[data-region="replies-visibility-toggle-container"]'},lock:{toggle:"[data-action='toggle'][data-type='lock-toggle']",icon:"[data-region='locked-icon']"},favourite:{toggle:"[data-type='favorite-toggle'][data-action='toggle']"},pin:{toggle:"[data-type='pin-toggle'][data-action='toggle']"},discussion:{tools:'[data-container="discussion-tools"]',item:'[data-region="discussion-list-item"]',lockedLabel:"[data-region='locked-label']",subscribedLabel:"[data-region='subscribed-label']",timedLabel:"[data-region='timed-label']"}}}));
/**
 * Handle the manual locking of individual discussions
 *
 * @module     mod_forum/lock_toggle
 * @copyright  2019 Peter Dias &lt;peter@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("mod_forum/lock_toggle",["jquery","core/templates","core/notification","mod_forum/repository","mod_forum/selectors"],(function($,Templates,Notification,Repository,Selectors){return{init:function(root,preventDefault){root.on("click",Selectors.lock.toggle,(function(e){var toggleElement=$(this),forumId=toggleElement.data("forumid"),discussionId=toggleElement.data("discussionid"),state=toggleElement.data("state");Repository.setDiscussionLockState(forumId,discussionId,state).then((function(){return location.reload()})).catch(Notification.exception),preventDefault&amp;&amp;e.preventDefault()}))}}}));
/**
 * Forum repository class to encapsulate all of the AJAX requests that subscribe or unsubscribe
 * can be sent for forum.
 *
 * @module     mod_forum/repository
 * @copyright  2019 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("mod_forum/repository",["core/ajax"],(function(Ajax){return{setDiscussionSubscriptionState:function(forumId,discussionId,targetState){var request={methodname:"mod_forum_set_subscription_state",args:{forumid:forumId,discussionid:discussionId,targetstate:targetState}};return Ajax.call([request])[0]},addDiscussionPost:function(postid,subject,message,messageformat,isprivatereply,topreferredformat){var request={methodname:"mod_forum_add_discussion_post",args:{postid:postid,message:message,messageformat:messageformat,subject:subject,options:[{name:"private",value:isprivatereply},{name:"topreferredformat",value:topreferredformat}]}};return Ajax.call([request])[0]},setDiscussionLockState:function(forumId,discussionId,targetState){var request={methodname:"mod_forum_set_lock_state",args:{forumid:forumId,discussionid:discussionId,targetstate:targetState}};return Ajax.call([request])[0]},setFavouriteDiscussionState:function(forumId,discussionId,targetState){var request={methodname:"mod_forum_toggle_favourite_state",args:{discussionid:discussionId,targetstate:targetState}};return Ajax.call([request])[0]},setPinDiscussionState:function(forumid,discussionid,targetstate){var request={methodname:"mod_forum_set_pin_state",args:{discussionid:discussionid,targetstate:targetstate}};return Ajax.call([request])[0]},getDiscussionByUserID:function(userid,cmid){let sortby=arguments.length&gt;2&amp;&amp;void 0!==arguments[2]?arguments[2]:"modified",sortdirection=arguments.length&gt;3&amp;&amp;void 0!==arguments[3]?arguments[3]:"DESC";var request={methodname:"mod_forum_get_discussion_posts_by_userid",args:{userid:userid,cmid:cmid,sortby:sortby,sortdirection:sortdirection}};return Ajax.call([request])[0]},getDiscussionPosts:function(discussionId){let sortby=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]?arguments[1]:"created",sortdirection=arguments.length&gt;2&amp;&amp;void 0!==arguments[2]?arguments[2]:"ASC";var request={methodname:"mod_forum_get_discussion_posts",args:{discussionid:discussionId,sortby:sortby,sortdirection:sortdirection}};return Ajax.call([request])[0]}}}));
/**
 * Handle discussion subscription toggling on a discussion list in
 * the forum view.
 *
 * @module     mod_forum/subscription_toggle
 * @copyright  2019 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("mod_forum/subscription_toggle",["jquery","core/templates","core/notification","mod_forum/repository","mod_forum/selectors","core/pubsub","mod_forum/forum_events"],(function($,Templates,Notification,Repository,Selectors,PubSub,ForumEvents){return{init:function(root,preventDefault,callback){root.on("click",Selectors.subscription.toggle,(function(e){var toggleElement=$(this),forumId=toggleElement.data("forumid"),discussionId=toggleElement.data("discussionid"),subscriptionState=toggleElement.data("targetstate");Repository.setDiscussionSubscriptionState(forumId,discussionId,subscriptionState).then((function(context){return PubSub.publish(ForumEvents.SUBSCRIPTION_TOGGLED,{discussionId:discussionId,subscriptionState:subscriptionState}),callback(toggleElement,context)})).catch(Notification.exception),preventDefault&amp;&amp;e.preventDefault()}))}}}));
/**
 * Handle discussion subscription toggling on a discussion list in
 * the forum view.
 *
 * @module     mod_forum/favourite_toggle
 * @copyright  2019 Peter Dias &lt;peter@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("mod_forum/favourite_toggle",["jquery","core/templates","core/notification","mod_forum/repository","mod_forum/selectors","core/str"],(function($,Templates,Notification,Repository,Selectors,String){return{init:function(root,preventDefault,callback){root.on("click",Selectors.favourite.toggle,(function(e){var toggleElement=$(this),forumId=toggleElement.data("forumid"),discussionId=toggleElement.data("discussionid"),subscriptionState=toggleElement.data("targetstate");Repository.setFavouriteDiscussionState(forumId,discussionId,subscriptionState).then((function(context){return callback(toggleElement,context)})).then((function(){return String.get_string("favouriteupdated","forum").done((function(s){return Notification.addNotification({message:s,type:"info"})}))})).catch(Notification.exception),preventDefault&amp;&amp;e.preventDefault()}))}}}));
/**
 * Events for the forum activity.
 *
 * @module     mod_forum/forum_events
 * @copyright  2019 Jun Pataleta &lt;jun@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("mod_forum/forum_events",[],(function(){return{SUBSCRIPTION_TOGGLED:"mod_forum/subscription_toggle:subscriptionToggled"}}));
/**
 * Module for the list of discussions on when viewing a forum.
 *
 * @module     mod_forum/discussion_list
 * @copyright  2019 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("mod_forum/discussion_list",["jquery","core/templates","core/str","core/notification","mod_forum/subscription_toggle","mod_forum/selectors","mod_forum/repository","core/pubsub","mod_forum/forum_events"],(function($,Templates,Str,Notification,SubscriptionToggle,Selectors,Repository,PubSub,ForumEvents){return{init:function(root){SubscriptionToggle.init(root,!1,(function(toggleElement,context){var toggleId=toggleElement.attr("id"),newTargetState=context.userstate.subscribed?0:1;toggleElement.data("targetstate",newTargetState);var stringKey=context.userstate.subscribed?"unsubscribediscussion":"subscribediscussion";return Str.get_string(stringKey,"mod_forum").then((function(string){return toggleElement.closest("td").find('label[for="'+toggleId+'"]').find("span").text(string),string}))})),function(root){PubSub.subscribe(ForumEvents.SUBSCRIPTION_TOGGLED,(function(data){var discussionId=data.discussionId,subscribed=data.subscriptionState,discussionListItem=root.find(Selectors.discussion.item+"[data-discussionid= "+discussionId+"]"),subscribedLabel=discussionListItem.find(Selectors.discussion.subscribedLabel);subscribed?(discussionListItem.addClass("subscribed"),subscribedLabel.removeAttr("hidden")):(discussionListItem.removeClass("subscribed"),subscribedLabel.attr("hidden",!0))})),root.on("click",Selectors.favourite.toggle,(function(e){e.preventDefault();var toggleElement=$(this),forumId=toggleElement.data("forumid"),discussionId=toggleElement.data("discussionid"),subscriptionState=toggleElement.data("targetstate");Repository.setFavouriteDiscussionState(forumId,discussionId,subscriptionState).then((function(){return location.reload()})).catch(Notification.exception)})),root.on("click",Selectors.pin.toggle,(function(e){e.preventDefault();var toggleElement=$(this),forumId=toggleElement.data("forumid"),discussionId=toggleElement.data("discussionid"),state=toggleElement.data("targetstate");Repository.setPinDiscussionState(forumId,discussionId,state).then((function(){return location.reload()})).catch(Notification.exception)})),root.on("click",Selectors.lock.toggle,(function(e){var toggleElement=$(this),forumId=toggleElement.data("forumid"),discussionId=toggleElement.data("discussionid"),state=toggleElement.data("state");Repository.setDiscussionLockState(forumId,discussionId,state).then((function(context){var icon=toggleElement.parents(Selectors.summary.actions).find(Selectors.lock.icon),lockedLabel=toggleElement.parents(Selectors.discussion.item).find(Selectors.discussion.lockedLabel);return context.locked?(icon.removeClass("hidden"),lockedLabel.removeAttr("hidden")):(icon.addClass("hidden"),lockedLabel.attr("hidden",!0)),context})).then((function(context){return context.forumid=forumId,Templates.render("mod_forum/discussion_lock_toggle",context)})).then((function(html,js){return Templates.replaceNode(toggleElement,html,js)})).then((function(){return Str.get_string("lockupdated","forum").done((function(s){return Notification.addNotification({message:s,type:"info"})}))})).catch(Notification.exception),e.preventDefault()}))}(root)}}}));
define("mod_forum/grades/expandconversation",["exports","./grader/selectors","mod_forum/repository","core/notification","core/templates","core/modal_factory","core/modal_events"],(function(_exports,ForumSelectors,_repository,_notification,_templates,Modal,ModalEvents){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}
/**
   * This module handles the creation of a Modal that shows the user's post in context of the entire discussion.
   *
   * @module     mod_forum/grades/expandconversation
   * @copyright  2019 Mathew May &lt;mathew.solutions&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.registerEventListeners=void 0,ForumSelectors=_interopRequireWildcard(ForumSelectors),_repository=_interopRequireDefault(_repository),_templates=_interopRequireDefault(_templates),Modal=_interopRequireWildcard(Modal),ModalEvents=_interopRequireWildcard(ModalEvents);_exports.registerEventListeners=rootNode=&gt;{rootNode.addEventListener("click",(e=&gt;{const rootNode=e.target.closest(ForumSelectors.expandConversation);if(rootNode){e.preventDefault();try{!async function(rootNode){let{focusOnClose:focusOnClose=null}=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]?arguments[1]:{};const postId=rootNode.dataset.postid,discussionId=rootNode.dataset.discussionid,discussionName=rootNode.dataset.name,experimentalDisplayMode="1"==rootNode.dataset.experimentalDisplayMode,[allPosts,modal]=await Promise.all([_repository.default.getDiscussionPosts(parseInt(discussionId)),Modal.create({title:discussionName,large:!0,type:Modal.types.CANCEL})]),postsById=new Map(allPosts.posts.map((post=&gt;(post.readonly=!0,post.hasreplies=!1,post.replies=[],[post.id,post]))));let posts=[];allPosts.posts.forEach((post=&gt;{if(post.parentid){const parent=postsById.get(post.parentid);parent?(post.parentauthorname=parent.author.fullname,parent.hasreplies=!0,parent.replies.push(post)):posts.push(post)}else posts.push(post)})),modal.getRoot().on(ModalEvents.hidden,(function(){modal.destroy();try{focusOnClose.focus()}catch(e){}})),modal.getRoot().on(ModalEvents.bodyRendered,(()=&gt;{const relevantPost=modal.getRoot()[0].querySelector("#p".concat(postId));relevantPost&amp;&amp;relevantPost.scrollIntoView({behavior:"smooth"})})),modal.show();const templatePromise=_templates.default.render("mod_forum/grades/grader/discussion/post_modal",{posts:posts,experimentaldisplaymode:experimentalDisplayMode});modal.setBody(templatePromise)}(rootNode,{focusOnClose:e.target})}catch(err){(0,_notification.exception)(err)}}}))}}));
define("mod_forum/grades/grader",["exports","./grader/selectors","mod_forum/repository","core/templates","../local/grades/grader","core/notification","core_course/repository","core/url"],(function(_exports,Selectors,_repository,_templates,Grader,_notification,_repository2,_url){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}
/**
   * This module will tie together all of the different calls the gradable module will make.
   *
   * @module     mod_forum/grades/grader
   * @copyright  2019 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.registerLaunchListeners=void 0,Selectors=_interopRequireWildcard(Selectors),_repository=_interopRequireDefault(_repository),_templates=_interopRequireDefault(_templates),Grader=_interopRequireWildcard(Grader),_notification=_interopRequireDefault(_notification),_repository2=_interopRequireDefault(_repository2);const templateNames_contentRegion="mod_forum/grades/grader/discussion/posts",getContentForUserIdFunction=(cmid,experimentalDisplayMode)=&gt;userid=&gt;_repository.default.getDiscussionByUserID(userid,cmid).then((context=&gt;(context.discussions=context.discussions.map(discussionPostMapper),context.experimentaldisplaymode=!!experimentalDisplayMode,_templates.default.render(templateNames_contentRegion,context)))).catch(_notification.default.exception),getGradableUsersForCourseidFunction=(courseID,groupID,onlyActive)=&gt;async()=&gt;(await _repository2.default.getGradableUsersFromCourseID(courseID,groupID,onlyActive)).users,findGradableNode=node=&gt;node.closest(Selectors.gradableItem),discussionPostMapper=discussion=&gt;{const parentMap=new Map;discussion.posts.parentposts.forEach((post=&gt;parentMap.set(post.id,post)));const userPosts=discussion.posts.userposts.map((post=&gt;{post.readonly=!0,post.hasreplies=!1,post.replies=[];const parent=post.parentid?parentMap.get(post.parentid):null;return parent&amp;&amp;(parent.hasreplies=!1,parent.replies=[],parent.readonly=!0,post.parentauthorname=parent.author.fullname),{parent:parent,post:post}}));return{...discussion,posts:userPosts}};_exports.registerLaunchListeners=()=&gt;{document.addEventListener("click",(async e=&gt;{if(e.target.matches(Selectors.launch)){const rootNode=findGradableNode(e.target);if(!rootNode)throw Error("Unable to find a gradable item");if(!rootNode.matches(Selectors.gradableItems.wholeForum))throw Error("Unable to find a valid gradable item");e.preventDefault();try{await async function(rootNode){let{focusOnClose:focusOnClose=null}=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]?arguments[1]:{};const data=rootNode.dataset,gradingPanelFunctions=await Grader.getGradingPanelFunctions("mod_forum",data.contextid,data.gradingComponent,data.gradingComponentSubtype,data.gradableItemtype),groupID=data.group?data.group:0,onlyActive=data.gradeOnlyActiveUsers;await Grader.launch(getGradableUsersForCourseidFunction(data.courseId,groupID,onlyActive),getContentForUserIdFunction(data.cmid,"1"==data.experimentalDisplayMode),gradingPanelFunctions.getter,gradingPanelFunctions.setter,{groupid:data.groupid,initialUserId:data.initialuserid,moduleName:data.name,courseName:data.courseName,courseUrl:(0,_url.relativeUrl)("/course/view.php",{id:data.courseId}),sendStudentNotifications:data.sendStudentNotifications,focusOnClose:focusOnClose})}(rootNode,{focusOnClose:e.target})}catch(error){_notification.default.exception(error)}}if(e.target.matches(Selectors.viewGrade)){e.preventDefault();const rootNode=findGradableNode(e.target);if(!rootNode)throw Error("Unable to find a gradable item");if(!rootNode.matches(Selectors.gradableItems.wholeForum))throw Error("Unable to find a valid gradable item");e.preventDefault();try{await async function(rootNode){let{focusOnClose:focusOnClose=null}=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]?arguments[1]:{};const data=rootNode.dataset,gradingPanelFunctions=await Grader.getGradingPanelFunctions("mod_forum",data.contextid,data.gradingComponent,data.gradingComponentSubtype,data.gradableItemtype);await Grader.view(gradingPanelFunctions.getter,data.userid,data.name,{focusOnClose:focusOnClose})}(rootNode,{focusOnClose:e.target})}catch(error){_notification.default.exception(error)}}}))}}));
define("mod_forum/grades/grader/selectors",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0;return _exports.default={launch:'[data-grade-action="launch"]',gradableItem:"[data-gradable-itemtype]",gradableItems:{wholeForum:'[data-gradable-itemtype="forum"]'},expandConversation:'[data-action="view-context"]',posts:'[data-region="posts"]',viewGrade:'[data-grade-action="view"]'},_exports.default}));
/**
 * Module for viewing a discussion.
 *
 * @module     mod_forum/discussion_list
 * @copyright  2019 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("mod_forum/discussion",["jquery","core/custom_interaction_events","mod_forum/selectors","core/pubsub","mod_forum/forum_events","core/str","core/notification"],(function($,CustomEvents,Selectors,PubSub,ForumEvents,String,Notification){var isElementInInPageReplySection=function(element){return!!$(element).closest(Selectors.post.inpageReplyContent).length},initAccessibilityKeyboardNav=function(root){root.find(Selectors.post.post).each((function(index,post){var actions=$(post).find(Selectors.post.action),firstAction=actions.first();actions.attr("tabindex","-1"),firstAction.attr("tabindex",0)})),CustomEvents.define(root,[CustomEvents.events.up,CustomEvents.events.down,CustomEvents.events.next,CustomEvents.events.previous,CustomEvents.events.home,CustomEvents.events.end]),root.on(CustomEvents.events.up,(function(e,data){var activeElement=document.activeElement;if(!isElementInInPageReplySection(activeElement)){var focusPost=$(activeElement).closest(Selectors.post.post);focusPost.length?function(currentPost){var prevPost=currentPost.prev(Selectors.post.post);if(prevPost.length){var replyPost=prevPost.find(Selectors.post.post).last();replyPost.length?replyPost.focus():prevPost.focus()}else currentPost.parents(Selectors.post.post).first().focus()}(focusPost):root.find(Selectors.post.post).first().focus(),data.originalEvent.preventDefault()}})),root.on(CustomEvents.events.down,(function(e,data){var activeElement=document.activeElement;if(!isElementInInPageReplySection(activeElement)){var focusPost=$(activeElement).closest(Selectors.post.post);focusPost.length?function(currentPost){var replyPost=currentPost.find(Selectors.post.post).first();if(replyPost.length)replyPost.focus();else{var siblingPost=currentPost.next(Selectors.post.post);if(siblingPost.length)siblingPost.focus();else for(var parentPosts=currentPost.parents(Selectors.post.post).toArray(),i=0;i&lt;parentPosts.length;i++){var ancestorSiblingPost=$(parentPosts[i]).next(Selectors.post.post);if(ancestorSiblingPost.length){ancestorSiblingPost.focus();break}}}}(focusPost):root.find(Selectors.post.post).first().focus(),data.originalEvent.preventDefault()}})),root.on(CustomEvents.events.home,(function(e,data){isElementInInPageReplySection(document.activeElement)||(root.find(Selectors.post.post).first().focus(),data.originalEvent.preventDefault())})),root.on(CustomEvents.events.end,(function(e,data){isElementInInPageReplySection(document.activeElement)||(root.find(Selectors.post.post).last().focus(),data.originalEvent.preventDefault())})),root.on(CustomEvents.events.next,Selectors.post.action,(function(e,data){var currentAction=$(e.target),actions=currentAction.closest(Selectors.post.actionsContainer).find(Selectors.post.action),nextAction=currentAction.next(Selectors.post.action);actions.attr("tabindex","-1"),nextAction.length||(nextAction=actions.first()),nextAction.attr("tabindex",0),nextAction.focus(),data.originalEvent.preventDefault()})),root.on(CustomEvents.events.previous,Selectors.post.action,(function(e,data){var currentAction=$(e.target),actions=currentAction.closest(Selectors.post.actionsContainer).find(Selectors.post.action),nextAction=currentAction.prev(Selectors.post.action);actions.attr("tabindex","-1"),nextAction.length||(nextAction=actions.last()),nextAction.attr("tabindex",0),nextAction.focus(),data.originalEvent.preventDefault()})),root.on(CustomEvents.events.home,Selectors.post.action,(function(e,data){var actions=$(e.target).closest(Selectors.post.actionsContainer).find(Selectors.post.action),firstAction=actions.first();actions.attr("tabindex","-1"),firstAction.attr("tabindex",0),firstAction.focus(),e.stopPropagation(),data.originalEvent.preventDefault()})),root.on(CustomEvents.events.end,Selectors.post.action,(function(e,data){var actions=$(e.target).closest(Selectors.post.actionsContainer).find(Selectors.post.action),lastAction=actions.last();actions.attr("tabindex","-1"),lastAction.attr("tabindex",0),lastAction.focus(),e.stopPropagation(),data.originalEvent.preventDefault()})),PubSub.subscribe(ForumEvents.SUBSCRIPTION_TOGGLED,(function(data){var updateMessage=data.subscriptionState?"discussionsubscribed":"discussionunsubscribed";String.get_string(updateMessage,"forum").then((function(s){return Notification.addNotification({message:s,type:"info"})})).catch(Notification.exception)}))};return{init:function(root){initAccessibilityKeyboardNav(root)}}}));
/**
 * This module is the highest level module for the calendar. It is
 * responsible for initialising all of the components required for
 * the calendar to run. It also coordinates the interaction between
 * components by listening for and responding to different events
 * triggered within the calendar UI.
 *
 * @module     mod_forum/posts_list
 * @copyright  2019 Peter Dias
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("mod_forum/posts_list",["jquery","core/templates","core/notification","core/pending","mod_forum/selectors","mod_forum/inpage_reply","core_form/changechecker"],(function($,Templates,Notification,Pending,Selectors,InPageReply,FormChangeChecker){return{init:function(root,throttlingwarningmsg){!function(root,throttlingwarningmsg){root.on("click",Selectors.post.inpageReplyLink,(function(e){if(e.preventDefault(),window.location.hash){var url=window.location.href.split("#")[0];history.pushState({},document.title,url)}var pending=new Pending("inpage-reply"),currentTarget=$(e.currentTarget).parents(Selectors.post.forumCoreContent),currentSubject=currentTarget.find(Selectors.post.forumSubject),currentRoot=$(e.currentTarget).parents(Selectors.post.forumContent),context={postid:$(currentRoot).data("post-id"),reply_url:$(e.currentTarget).attr("href"),sesskey:M.cfg.sesskey,parentsubject:currentSubject.data("replySubject"),canreplyprivately:$(e.currentTarget).data("can-reply-privately"),postformat:InPageReply.CONTENT_FORMATS.MOODLE,throttlingwarningmsg:throttlingwarningmsg};if(currentRoot.find(Selectors.post.inpageReplyContent).length){var form=currentRoot.find(Selectors.post.inpageReplyContent);form.slideToggle(300,pending.resolve),form.is(":visible")&amp;&amp;form.find("textarea").focus()}else Templates.render("mod_forum/inpage_reply",context).then((function(html,js){return Templates.appendNodeContents(currentTarget,html,js)})).then((function(){return currentRoot.find(Selectors.post.inpageReplyContent).slideToggle(300,pending.resolve).find("textarea").focus()})).then((function(){FormChangeChecker.watchFormById("inpage-reply-".concat(context.postid))})).catch(Notification.exception)}))}(root,throttlingwarningmsg),InPageReply.init(root)}}}));
/**
 * This file is part of Moodle - http://moodle.org/
 *
 * Moodle is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * Moodle is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with Moodle.  If not, see &lt;http://www.gnu.org/licenses/&gt;.
 *
 * @author    Rafael Becerra rafael.becerrarodriguez@openlms.net
 * @copyright Copyright (c) 2019 Open LMS (https://www.openlms.net)
 * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("mod_hsuforum/accessibility",["jquery"],(function($){return{init:function(){$(".pinbutton.btn.btn-default").click((function(){$(this).attr("aria-pressed","true")})),$("a.hsuforum-toggle-bookmark, a.hsuforum-toggle-substantive").off("keypress").on("keypress",(function(e){e.preventDefault(),32===e.keyCode&amp;&amp;e.target.click()}))}}}));
define('mod_hvp/embed', ["jquery","mod_hvp/communicator"],function(a,b){a(document).ready(function(){a(".h5p-iframe").ready(function(){var a=document.querySelector(".h5p-iframe"),c=a.contentWindow.H5P;if(c&amp;&amp;c.instances&amp;&amp;c.instances[0]){var d,e=c.instances[0],f=!1;b.on("ready",function(){b.send("hello")}),b.on("hello",function(){f=!0,a.contentDocument.body.style.overflow="hidden",document.body.classList.add("h5p-resizing"),c.trigger(e,"resize")}),b.on("resizePrepared",function(){b.send("resize",{scrollHeight:a.contentDocument.body.scrollHeight})}),b.on("resize",function(){c.trigger(e,"resize")}),c.on(e,"resize",function(){c.isFullscreen||(clearTimeout(d),d=setTimeout(function(){f?b.send("prepareResize",{scrollHeight:a.contentDocument.body.scrollHeight,clientHeight:a.contentDocument.body.clientHeight}):b.send("hello")},0))}),c.trigger(e,"resize")}})})});
define('mod_hvp/communicator', [],function(){var a=function(){this._actionHandlers={},this.registerEventListeners()};return a.prototype._actionHandlers={},a.prototype.on=function(a,b){this._actionHandlers[a]=b},a.prototype.send=function(a,b){void 0===b&amp;&amp;(b={}),b.context="h5p",b.action=a,window.parent.postMessage(b,"*")},a.prototype.registerEventListeners=function(){var a=this;window.addEventListener("message",function(b){window.parent===b.source&amp;&amp;"h5p"===b.data.context&amp;&amp;void 0!==a._actionHandlers[b.data.action]&amp;&amp;a._actionHandlers[b.data.action](b.data)},!1)},new a});
define ("mod_hvp/contenthubregistration",[],function(){return{init:function init(){var a=H5PSettings;a.container=document.getElementById("h5p-hub-registration");H5PHub.createRegistrationUI(a)}}});
define("mod_journal/report",["exports","core/notification","core/str","core/toast","jquery"],(function(_exports,_notification,_str,_toast,_jquery){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Javascript module for the report page
   *
   * @module      mod_journal/createtemplate
   * @copyright   2022 elearning &amp; software srl
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_notification=_interopRequireDefault(_notification),_jquery=_interopRequireDefault(_jquery);_exports.init=function(){(0,_jquery.default)(".saveindividualfeedback").on("click",(function(event){event.preventDefault();var element=(0,_jquery.default)(event.currentTarget),sesskey=M.cfg.sesskey,cmid=element.attr("data-cmid"),userid=element.attr("data-userid"),entryid=element.attr("data-entryid"),feedback=(0,_jquery.default)("#c"+entryid).val(),grade=(0,_jquery.default)("#r"+entryid).val();_jquery.default.ajax(M.cfg.wwwroot+"/mod/journal/ajax/ajax.php",{data:{action:"saveindividualfeedback",sesskey:sesskey,cmid:cmid,userid:userid,entryid:entryid,feedback:feedback,grade:grade},dataType:"json",method:"post",success:function(response){"ok"===response.status?(0,_toast.add)(response.content):(0,_str.get_string)("saving_failed","feedback").then((function(string){return _notification.default.addNotification({type:"error",message:string+": "+response.content})})).catch()},error:function(_error){(0,_str.get_string)("saving_failed","feedback").then((function(string){return _notification.default.addNotification({type:"error",message:string+": "+_error})})).catch()}})}))}}));
/**
 * Provides an interface for a tool type in the Moodle server.
 *
 * @module     mod_lti/tool_type
 * @copyright  2015 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.1
 */
define("mod_lti/tool_type",["core/ajax","core/notification"],(function(ajax,notification){return{query:function(args){var request={methodname:"mod_lti_get_tool_types",args:args||{}},promise=ajax.call([request])[0];return promise.fail(notification.exception),promise},create:function(args){var request={methodname:"mod_lti_create_tool_type",args:args};return ajax.call([request])[0]},update:function(args){var request={methodname:"mod_lti_update_tool_type",args:args},promise=ajax.call([request])[0];return promise.fail(notification.exception),promise},delete:function(id){var request={methodname:"mod_lti_delete_tool_type",args:{id:id}},promise=ajax.call([request])[0];return promise.fail(notification.exception),promise},getFromToolProxyId:function(id){return this.query({toolproxyid:id})},isCartridge:function(url){var request={methodname:"mod_lti_is_cartridge",args:{url:url}};return ajax.call([request])[0]},constants:{state:{configured:1,pending:2,rejected:3}}}}));
/**
 * Encapsules the behavior for creating a tool type and tool proxy from a
 * registration url in Moodle.
 *
 * Manages the UI while operations are occuring, including rendering external
 * registration page within the iframe.
 *
 * See template: mod_lti/external_registration
 *
 * @module     mod_lti/external_registration
 * @copyright  2015 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.1
 */
define("mod_lti/external_registration",["jquery","core/ajax","core/notification","core/templates","mod_lti/events","mod_lti/tool_proxy","mod_lti/tool_type","mod_lti/keys","core/str"],(function($,ajax,notification,templates,ltiEvents,toolProxy,toolType,KEYS,str){var SELECTORS_EXTERNAL_REGISTRATION_CONTAINER="#external-registration-page-container",SELECTORS_EXTERNAL_REGISTRATION_TEMPLATE_CONTAINER="#external-registration-template-container",SELECTORS_EXTERNAL_REGISTRATION_CANCEL_BUTTON="#cancel-external-registration",SELECTORS_TOOL_TYPE_CAPABILITIES_CONTAINER="#tool-type-capabilities-container",SELECTORS_TOOL_TYPE_CAPABILITIES_TEMPLATE_CONTAINER="#tool-type-capabilities-template-container",SELECTORS_CAPABILITIES_AGREE_CONTAINER=".capabilities-container",getExternalRegistrationCancelButton=function(){return $(SELECTORS_EXTERNAL_REGISTRATION_CANCEL_BUTTON)},getExternalRegistrationContainer=function(){return $(SELECTORS_EXTERNAL_REGISTRATION_CONTAINER)},getExternalRegistrationTemplateContainer=function(){return $(SELECTORS_EXTERNAL_REGISTRATION_TEMPLATE_CONTAINER)},getToolTypeCapabilitiesContainer=function(){return $(SELECTORS_TOOL_TYPE_CAPABILITIES_CONTAINER)},stopLoadingCancel=function(){getExternalRegistrationCancelButton().removeClass("loading")},hideExternalRegistrationContent=function(){getExternalRegistrationContainer().addClass("hidden")},getToolProxyId=function(){return getExternalRegistrationCancelButton().attr("data-tool-proxy-id")},hasToolProxyId=function(){return!!getToolProxyId()},hasCreatedToolProxy=function(){return getExternalRegistrationCancelButton().attr("data-tool-proxy-new")&amp;&amp;hasToolProxyId()},cancelRegistration=function(){getExternalRegistrationCancelButton().addClass("loading");var promise=$.Deferred();if(hasCreatedToolProxy()){var id=getToolProxyId();toolProxy.delete(id).done((function(){promise.resolve()})).fail((function(failure){promise.reject(failure)}))}else promise.resolve();return promise.done((function(){finishExternalRegistration(),stopLoadingCancel()})).fail((function(failure){notification.exception(failure),finishExternalRegistration(),stopLoadingCancel(),str.get_string("failedtodeletetoolproxy","mod_lti").done((function(s){var feedback={message:s,error:!0};$(document).trigger(ltiEvents.REGISTRATION_FEEDBACK,feedback)})).fail(notification.exception)})),promise},renderExternalRegistrationWindow=function(registrationRequest){var promise=templates.render("mod_lti/tool_proxy_registration_form",registrationRequest);return promise.done((function(html,js){var container=getExternalRegistrationTemplateContainer();container.append(html),templates.runTemplateJS(js),container.find("form").submit(),getExternalRegistrationContainer().removeClass("hidden")})).fail(notification.exception),promise},promptForToolTypeCapabilitiesAgreement=function(typeData){var promise=$.Deferred();return templates.render("mod_lti/tool_type_capabilities_agree",typeData).done((function(html,js){var container=$(SELECTORS_TOOL_TYPE_CAPABILITIES_TEMPLATE_CONTAINER);hideExternalRegistrationContent(),getToolTypeCapabilitiesContainer().removeClass("hidden"),templates.replaceNodeContents(container,html,js);var choiceContainer=container.find(SELECTORS_CAPABILITIES_AGREE_CONTAINER);choiceContainer.on(ltiEvents.CAPABILITIES_AGREE,(function(){getToolTypeCapabilitiesContainer().addClass("loading"),function(typeData){return toolType.update({id:typeData.id,state:toolType.constants.state.configured})}(typeData).always((function(){getToolTypeCapabilitiesContainer().removeClass("loading"),container.empty(),promise.resolve()}))})),choiceContainer.on(ltiEvents.CAPABILITIES_DECLINE,(function(){container.empty(),promise.resolve()}))})).fail(promise.reject),promise.done((function(){getToolTypeCapabilitiesContainer().addClass("hidden")})).fail(notification.exception),promise},createAndRegisterToolProxy=function(url){var promise=$.Deferred();return url&amp;&amp;""!==url?toolProxy.create({regurl:url}).done((function(result){getExternalRegistrationCancelButton().attr("data-tool-proxy-new","new"),promise=registerProxy(result.id)})).fail((function(exception){cancelRegistration();var feedback={message:exception.message,error:!0};$(document).trigger(ltiEvents.REGISTRATION_FEEDBACK,feedback),promise.reject(exception)})):promise.resolve(),promise},registerProxy=function(id){var promise=$.Deferred();return function(id){getExternalRegistrationCancelButton().attr("data-tool-proxy-id",id)}(id),function(id){var request={methodname:"mod_lti_get_tool_proxy_registration_request",args:{id:id}};return ajax.call([request])[0]}(id).done((function(registrationRequest){renderExternalRegistrationWindow(registrationRequest).done((function(){promise.resolve()})).fail(promise.fail)})).fail(promise.fail),promise},finishExternalRegistration=function(){hasToolProxyId()&amp;&amp;getExternalRegistrationCancelButton().removeAttr("data-tool-proxy-id"),getExternalRegistrationCancelButton().removeAttr("data-tool-proxy-new"),hideExternalRegistrationContent(),getExternalRegistrationTemplateContainer().empty(),$(document).trigger(ltiEvents.STOP_EXTERNAL_REGISTRATION)};return{init:function(){!function(){$(document).on(ltiEvents.START_EXTERNAL_REGISTRATION,(function(event,data){data&amp;&amp;(data.url&amp;&amp;createAndRegisterToolProxy(data.url),data.proxyid&amp;&amp;registerProxy(data.proxyid))}));var cancelExternalRegistrationButton=getExternalRegistrationCancelButton();cancelExternalRegistrationButton.click((function(e){e.preventDefault(),cancelRegistration()})),cancelExternalRegistrationButton.keypress((function(e){e.metaKey||e.shiftKey||e.altKey||e.ctrlKey||e.keyCode!=KEYS.ENTER&amp;&amp;e.keyCode!=KEYS.SPACE||(e.preventDefault(),cancelRegistration())})),window.triggerExternalRegistrationComplete=function(data){var promise=$.Deferred(),feedback={message:"",error:!1};if("success"==data.status){if(str.get_string("successfullycreatedtooltype","mod_lti").done((function(s){feedback.message=s})).fail(notification.exception),promise.done((function(){finishExternalRegistration(),$(document).trigger(ltiEvents.REGISTRATION_FEEDBACK,feedback),$(document).trigger(ltiEvents.NEW_TOOL_TYPE)})).fail(notification.exception),hasCreatedToolProxy()){var proxyId=getToolProxyId();toolType.getFromToolProxyId(proxyId).done((function(types){if(types&amp;&amp;types.length){var typeData=types[0];typeData.hascapabilitygroups?promptForToolTypeCapabilitiesAgreement(typeData).always((function(){promise.resolve()})):promise.resolve()}else promise.resolve()})).fail((function(){promise.resolve()}))}}else feedback.message=data.error,feedback.error=!0,promise.done((function(){cancelRegistration().always((function(){$(document).trigger(ltiEvents.REGISTRATION_FEEDBACK,feedback)}))})).fail(notification.exception),promise.resolve();return promise}}()}}}));
/**
 * Controls all of the behaviour and interaction with a tool type card. These are
 * listed on the LTI tool type management page.
 *
 * See template: mod_lti/tool_proxy_card
 *
 * @module     mod_lti/tool_proxy_card_controller
 * @copyright  2016 John Okely &lt;john@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.1
 */
define("mod_lti/tool_proxy_card_controller",["jquery","core/ajax","core/notification","core/templates","mod_lti/tool_proxy","mod_lti/events","mod_lti/keys","core/str"],(function($,ajax,notification,templates,toolProxy,ltiEvents,KEYS,str){var SELECTORS_DELETE_BUTTON=".delete",SELECTORS_ACTIVATE_BUTTON=".tool-card-footer a.activate",getTypeId=function(element){return element.attr("data-proxy-id")},clearAllAnnouncements=function(element){element.removeClass("announcement loading success fail capabilities")},stopLoading=function(element){element.removeClass("announcement loading")},deleteType=function(element){var promise=$.Deferred(),typeId=getTypeId(element);return function(element){clearAllAnnouncements(element),element.addClass("announcement loading")}(element),""===typeId?$.Deferred().resolve():(str.get_strings([{key:"delete",component:"mod_lti"},{key:"delete_confirmation",component:"mod_lti"},{key:"delete",component:"mod_lti"},{key:"cancel",component:"core"}]).done((function(strs){notification.confirm(strs[0],strs[1],strs[2],strs[3],(function(){toolProxy.delete(typeId).done((function(){stopLoading(element),function(element){var promise=$.Deferred();return clearAllAnnouncements(element),element.addClass("announcement success"),setTimeout((function(){element.removeClass("announcement success"),promise.resolve()}),2e3),promise}(element).done((function(){element.remove(),promise.resolve()})).fail(notification.exception)})).fail((function(error){!function(element){var promise=$.Deferred();clearAllAnnouncements(element),element.addClass("announcement fail"),setTimeout((function(){element.removeClass("announcement fail"),promise.resolve()}),2e3)}(element),promise.reject(error)}))}),(function(){stopLoading(element),promise.resolve()}))})).fail((function(error){stopLoading(element),notification.exception(error),promise.reject(error)})),promise)},registerEventListeners=function(element){var deleteButton=function(element){return element.find(SELECTORS_DELETE_BUTTON)}(element);deleteButton.click((function(e){e.preventDefault(),deleteType(element)})),deleteButton.keypress((function(e){e.metaKey||e.shiftKey||e.altKey||e.ctrlKey||e.keyCode!=KEYS.ENTER&amp;&amp;e.keyCode!=KEYS.SPACE||(e.preventDefault(),deleteButton.click())}));var activateButton=function(element){return element.find(SELECTORS_ACTIVATE_BUTTON)}(element);activateButton.click((function(e){e.preventDefault(),function(element){var data={proxyid:getTypeId(element)};$(document).trigger(ltiEvents.START_EXTERNAL_REGISTRATION,data)}(element)})),activateButton.keypress((function(e){e.metaKey||e.shiftKey||e.altKey||e.ctrlKey||e.keyCode!=KEYS.ENTER&amp;&amp;e.keyCode!=KEYS.SPACE||(e.preventDefault(),activateButton.click())}))};return{init:function(element){registerEventListeners(element)}}}));
/**
 * A module that enables the setting of form field values on the client side.
 *
 * @module     mod_lti/form-field
 * @copyright  2016 Jun Pataleta &lt;jun@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.2
 */
define("mod_lti/form-field",["jquery"],(function($){var FormField=function(name,type,resetIfUndefined,defaultValue){this.name=name,this.id="id_"+this.name,this.selector="#"+this.id,this.type=type,this.resetIfUndefined=resetIfUndefined,this.defaultValue=defaultValue};return FormField.TYPES={TEXT:1,SELECT:2,CHECKBOX:3,EDITOR:4},FormField.prototype.setFieldValue=function(value){if(null===value){if(!this.resetIfUndefined)return;value=this.defaultValue}switch(this.type){case FormField.TYPES.CHECKBOX:value?$(this.selector).prop("checked",!0):$(this.selector).prop("checked",!1);break;case FormField.TYPES.EDITOR:if(void 0!==value.text){var attoEditor=$(this.selector+"editable");attoEditor.length?attoEditor.html(value.text):"undefined"!=typeof tinyMCE&amp;&amp;("3"==tinyMCE.majorVersion?tinyMCE.execInstanceCommand(this.id,"mceInsertContent",!1,value.text):tinyMCE.get(this.id).setContent(value.text)),$(this.selector).val(value.text)}break;default:$(this.selector).val(value)}},FormField}));
/**
 * Encapsules the behavior for creating a tool type from a cartridge URL
 * in Moodle. Manages the UI while operations are occuring.
 *
 * See template: mod_lti/cartridge_registration_form
 *
 * @module     mod_lti/cartridge_registration_form
 * @copyright  2015 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.1
 */
define("mod_lti/cartridge_registration_form",["jquery","core/ajax","core/notification","mod_lti/tool_type","mod_lti/events","mod_lti/keys","core/str"],(function($,ajax,notification,toolType,ltiEvents,KEYS,str){var SELECTORS_CONSUMER_KEY="#registration-key",SELECTORS_SHARED_SECRET="#registration-secret",SELECTORS_REGISTRATION_FORM="#cartridge-registration-form",SELECTORS_REGISTRATION_SUBMIT_BUTTON="#cartridge-registration-submit",SELECTORS_REGISTRATION_CANCEL_BUTTON="#cartridge-registration-cancel",getSubmitButton=function(){return $(SELECTORS_REGISTRATION_SUBMIT_BUTTON)},submitCartridgeURL=function(){if(getSubmitButton().hasClass("loading"))return!1;var url=$(SELECTORS_REGISTRATION_FORM).attr("data-cartridge-url");if(""===url)return!1;getSubmitButton().addClass("loading");var consumerKey=$(SELECTORS_CONSUMER_KEY).val(),sharedSecret=$(SELECTORS_SHARED_SECRET).val(),promise=toolType.create({cartridgeurl:url,key:consumerKey,secret:sharedSecret});return promise.done((function(){str.get_string("successfullycreatedtooltype","mod_lti").done((function(s){$(document).trigger(ltiEvents.NEW_TOOL_TYPE),$(document).trigger(ltiEvents.STOP_CARTRIDGE_REGISTRATION),$(document).trigger(ltiEvents.REGISTRATION_FEEDBACK,{message:s})})).fail(notification.exception)})).fail((function(){str.get_string("failedtocreatetooltype","mod_lti").done((function(s){$(document).trigger(ltiEvents.NEW_TOOL_TYPE),$(document).trigger(ltiEvents.STOP_CARTRIDGE_REGISTRATION),$(document).trigger(ltiEvents.REGISTRATION_FEEDBACK,{message:s,error:!0})})).fail(notification.exception)})).always((function(){getSubmitButton().removeClass("loading")})),promise},registerEventListeners=function(){$(SELECTORS_REGISTRATION_FORM).submit((function(e){e.preventDefault(),submitCartridgeURL()}));var cancelButton=$(SELECTORS_REGISTRATION_CANCEL_BUTTON);cancelButton.click((function(e){e.preventDefault(),$(document).trigger(ltiEvents.STOP_CARTRIDGE_REGISTRATION)})),cancelButton.keypress((function(e){e.metaKey||e.shiftKey||e.altKey||e.ctrlKey||e.keyCode!=KEYS.ENTER&amp;&amp;e.keyCode!=KEYS.SPACE||(e.preventDefault(),cancelButton.click())}))};return{init:function(){registerEventListeners()}}}));
define("mod_lti/tool_types_and_proxies",["exports","core/ajax"],(function(_exports,_ajax){var obj;
/**
   * Provides an interface for external tools in the Moodle server.
   *
   * @module     mod_lti/tool_types_and_proxies
   * @class      tool_types_and_proxies
   * @copyright  2020 Andrew Madden &lt;andrewmadden@catalyst-au.net&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   * @since      4.0
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.query=_exports.count=void 0,_ajax=(obj=_ajax)&amp;&amp;obj.__esModule?obj:{default:obj};_exports.query=args=&gt;{const request={methodname:"mod_lti_get_tool_types_and_proxies",args:args||{}};return _ajax.default.call([request])[0]};_exports.count=args=&gt;{const request={methodname:"mod_lti_get_tool_types_and_proxies_count",args:args||{}};return _ajax.default.call([request])[0]}}));
/**
 * Provides an interface for a tool proxy in the Moodle server.
 *
 * @module     mod_lti/tool_proxy
 * @copyright  2015 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.1
 */
define("mod_lti/tool_proxy",["core/ajax","core/notification"],(function(ajax,notification){return{query:function(args){var request={methodname:"mod_lti_get_tool_proxies",args:args||{}},promise=ajax.call([request])[0];return promise.fail(notification.exception),promise},delete:function(id){var request={methodname:"mod_lti_delete_tool_proxy",args:{id:id}},promise=ajax.call([request])[0];return promise.fail(notification.exception),promise},create:function(args){var request={methodname:"mod_lti_create_tool_proxy",args:args};return ajax.call([request])[0]}}}));
/**
 * Handles the return params from the external registration page after it
 * redirects back to Moodle.
 *
 * See also: mod/lti/externalregistrationreturn.php
 *
 * @module     mod_lti/external_registration_return
 * @copyright  2015 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.1
 */
define("mod_lti/external_registration_return",[],(function(){return{init:function(message,error,id,status){window.parent&amp;&amp;window.parent.triggerExternalRegistrationComplete({message:message,error:error,id:id,status:status})}}}));
/**
 * Controls all of the behaviour and interaction with a tool type card. These are
 * listed on the LTI tool type management page.
 *
 * See template: mod_lti/tool_card
 *
 * @module     mod_lti/tool_card_controller
 * @copyright  2015 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.1
 */
define("mod_lti/tool_card_controller",["jquery","core/ajax","core/notification","core/templates","core/modal_factory","mod_lti/tool_type","mod_lti/events","mod_lti/keys","core/str"],(function($,ajax,notification,templates,modalFactory,toolType,ltiEvents,KEYS,str){var SELECTORS_DELETE_BUTTON=".delete",SELECTORS_NAME_ELEMENT=".name",SELECTORS_DESCRIPTION_ELEMENT=".description",SELECTORS_CAPABILITIES_CONTAINER=".capabilities-container",SELECTORS_ACTIVATE_BUTTON=".tool-card-footer a.activate",getNameElement=function(element){return element.find(SELECTORS_NAME_ELEMENT)},getDescriptionElement=function(element){return element.find(SELECTORS_DESCRIPTION_ELEMENT)},getActivateButton=function(element){return element.find(SELECTORS_ACTIVATE_BUTTON)},getCapabilitiesContainer=function(element){return element.find(SELECTORS_CAPABILITIES_CONTAINER)},hasCapabilitiesContainer=function(element){return!!getCapabilitiesContainer(element).length},getTypeId=function(element){return element.attr("data-type-id")},clearAllAnnouncements=function(element){element.removeClass("announcement loading success fail capabilities")},startLoading=function(element){clearAllAnnouncements(element),element.addClass("announcement loading")},stopLoading=function(element){element.removeClass("announcement loading")},announceSuccess=function(element){var promise=$.Deferred();return clearAllAnnouncements(element),element.addClass("announcement success"),setTimeout((function(){element.removeClass("announcement success"),promise.resolve()}),2e3),promise},announceFailure=function(element){var promise=$.Deferred();return clearAllAnnouncements(element),element.addClass("announcement fail"),setTimeout((function(){element.removeClass("announcement fail"),promise.resolve()}),2e3),promise},setValueSnapshot=function(element,value){element.attr("data-val-snapshot",value)},getValueSnapshot=function(element){return element.attr("data-val-snapshot")},setStatusActive=function(element){var id=getTypeId(element);if(""===id)return $.Deferred().resolve();startLoading(element);var promise=toolType.update({id:id,state:toolType.constants.state.configured});return promise.then((function(toolTypeData){return stopLoading(element),announceSuccess(element),toolTypeData})).then((function(toolTypeData){return templates.render("mod_lti/tool_card",toolTypeData)})).then((function(html,js){templates.replaceNode(element,html,js)})).catch((function(){stopLoading(element),announceFailure(element)})),promise},registerEventListeners=function(element){var deleteButton=function(element){return element.find(SELECTORS_DELETE_BUTTON)}(element);deleteButton.click((function(e){e.preventDefault(),function(element){var promise=$.Deferred(),typeId=getTypeId(element);startLoading(element),""===typeId?$.Deferred().resolve():str.get_strings([{key:"delete",component:"mod_lti"},{key:"delete_confirmation",component:"mod_lti"},{key:"delete",component:"mod_lti"},{key:"cancel",component:"core"}]).done((function(strs){notification.confirm(strs[0],strs[1],strs[2],strs[3],(function(){toolType.delete(typeId).done((function(){stopLoading(element),announceSuccess(element).done((function(){element.remove()})).fail(notification.exception).always((function(){promise.resolve()}))})).fail((function(error){announceFailure(element),promise.reject(error)}))}),(function(){stopLoading(element),promise.resolve()}))})).fail((function(error){stopLoading(element),notification.exception(error),promise.reject(error)}))}(element)})),deleteButton.keypress((function(e){e.metaKey||e.shiftKey||e.altKey||e.ctrlKey||e.keyCode!=KEYS.ENTER&amp;&amp;e.keyCode!=KEYS.SPACE||(e.preventDefault(),deleteButton.click())}));var descriptionElement=getDescriptionElement(element);descriptionElement.focus((function(e){e.preventDefault(),function(element){var descriptionElement=getDescriptionElement(element);if(!descriptionElement.hasClass("loading")){var description=descriptionElement.text().trim();setValueSnapshot(descriptionElement,description)}}(element)})),descriptionElement.blur((function(e){e.preventDefault(),function(element){var typeId=getTypeId(element);if(""===typeId)return $.Deferred().resolve();var descriptionElement=getDescriptionElement(element);if(descriptionElement.hasClass("loading"))return $.Deferred().resolve();var description=descriptionElement.text().trim();if(getValueSnapshot(descriptionElement)==description)return $.Deferred().resolve();descriptionElement.addClass("loading");var promise=toolType.update({id:typeId,description:description});promise.done((function(type){descriptionElement.removeClass("loading"),descriptionElement.text(type.description)})).fail(notification.exception),promise.fail((function(){descriptionElement.removeClass("loading")}))}(element)})),descriptionElement.keypress((function(e){e.metaKey||e.shiftKey||e.altKey||e.ctrlKey||e.keyCode==KEYS.ENTER&amp;&amp;(e.preventDefault(),descriptionElement.blur())}));var nameElement=getNameElement(element);if(nameElement.focus((function(e){e.preventDefault(),function(element){var nameElement=getNameElement(element);if(!nameElement.hasClass("loading")){var name=nameElement.text().trim();setValueSnapshot(nameElement,name)}}(element)})),nameElement.blur((function(e){e.preventDefault(),function(element){var typeId=getTypeId(element);if(""===typeId)return $.Deferred().resolve();var nameElement=getNameElement(element);if(nameElement.hasClass("loading"))return $.Deferred().resolve();var name=nameElement.text().trim();if(getValueSnapshot(nameElement)==name)return $.Deferred().resolve();nameElement.addClass("loading");var promise=toolType.update({id:typeId,name:name});promise.done((function(type){nameElement.removeClass("loading"),nameElement.text(type.name)})),promise.fail((function(){nameElement.removeClass("loading")}))}(element)})),nameElement.keypress((function(e){e.metaKey||e.shiftKey||e.altKey||e.ctrlKey||e.keyCode==KEYS.ENTER&amp;&amp;(e.preventDefault(),nameElement.blur())})),function(element){return!!getActivateButton(element).length}(element)){var activateButton=getActivateButton(element);activateButton.click((function(e){e.preventDefault(),function(element){hasCapabilitiesContainer(element)?function(element){element.addClass("announcement capabilities")}(element):setStatusActive(element)}(element)})),activateButton.keypress((function(e){e.metaKey||e.shiftKey||e.altKey||e.ctrlKey||e.keyCode!=KEYS.ENTER&amp;&amp;e.keyCode!=KEYS.SPACE||(e.preventDefault(),activateButton.click())}))}if(hasCapabilitiesContainer(element)){var capabilitiesContainer=getCapabilitiesContainer(element);capabilitiesContainer.on(ltiEvents.CAPABILITIES_AGREE,(function(){setStatusActive(element)})),capabilitiesContainer.on(ltiEvents.CAPABILITIES_DECLINE,(function(){!function(element){element.removeClass("announcement capabilities")}(element)}))}};return{init:function(element){registerEventListeners(element),function(element){var trigger=$("#"+element.data("uniqid")+"-"+element.data("deploymentid")),context={uniqid:element.data("uniqid"),platformid:element.data("platformid"),clientid:element.data("clientid"),deploymentid:element.data("deploymentid"),urls:{publickeyset:element.data("publickeyseturl"),accesstoken:element.data("accesstokenurl"),authrequest:element.data("authrequesturl")}},bodyPromise=templates.render("mod_lti/tool_config_modal_body",context);context={mailto:"mailto:?subject="+encodeURIComponent(element.data("mailtosubject"))+"&amp;body="+encodeURIComponent(element.data("platformidstr"))+":%20"+encodeURIComponent(element.data("platformid"))+"%0D%0A"+encodeURIComponent(element.data("clientidstr"))+":%20"+encodeURIComponent(element.data("clientid"))+"%0D%0A"+encodeURIComponent(element.data("deploymentidstr"))+":%20"+encodeURIComponent(element.data("deploymentid"))+"%0D%0A"+encodeURIComponent(element.data("publickeyseturlstr"))+":%20"+encodeURIComponent(element.data("publickeyseturl"))+"%0D%0A"+encodeURIComponent(element.data("accesstokenurlstr"))+":%20"+encodeURIComponent(element.data("accesstokenurl"))+"%0D%0A"+encodeURIComponent(element.data("authrequesturlstr"))+":%20"+encodeURIComponent(element.data("authrequesturl"))+"%0D%0A"};var footerPromise=templates.render("mod_lti/tool_config_modal_footer",context);modalFactory.create({large:!0,title:element.data("modaltitle"),body:bodyPromise,footer:footerPromise},trigger)}(element)}}}));
/**
 * A list of keys and their keycodes that are used by the LTI modules.
 *
 * @module     mod_lti/keys
 * @class      keys
 * @copyright  2015 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.1
 */
define("mod_lti/keys",[],(function(){return{ENTER:13,SPACE:32}}));
/**
 * Standard Ajax wrapper for Moodle. It calls the central Ajax script,
 * which can call any existing webservice using the current session.
 * In addition, it can batch multiple requests and return multiple responses.
 *
 * @module     mod_lti/tool_configure_controller
 * @copyright  2015 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.1
 */
define("mod_lti/tool_configure_controller",["jquery","core/ajax","core/paged_content_factory","core/notification","core/templates","mod_lti/events","mod_lti/keys","mod_lti/tool_types_and_proxies","mod_lti/tool_type","mod_lti/tool_proxy","core/str","core/config"],(function($,ajax,pagedContentFactory,notification,templates,ltiEvents,KEYS,toolTypesAndProxies,toolType,toolProxy,str,config){var SELECTORS_EXTERNAL_REGISTRATION_CONTAINER="#external-registration-container",SELECTORS_EXTERNAL_REGISTRATION_PAGE_CONTAINER="#external-registration-page-container",SELECTORS_EXTERNAL_REGISTRATION_TEMPLATE_CONTAINER="#external-registration-template-container",SELECTORS_CARTRIDGE_REGISTRATION_CONTAINER="#cartridge-registration-container",SELECTORS_CARTRIDGE_REGISTRATION_FORM="#cartridge-registration-form",SELECTORS_TOOL_CARD_CONTAINER="#tool-card-container",SELECTORS_TOOL_LIST_CONTAINER="#tool-list-container",SELECTORS_TOOL_CREATE_BUTTON="#tool-create-button",SELECTORS_TOOL_CREATE_LTILEGACY_BUTTON="#tool-createltilegacy-button",SELECTORS_REGISTRATION_CHOICE_CONTAINER="#registration-choice-container",SELECTORS_TOOL_URL="#tool-url",getToolListContainer=function(){return $(SELECTORS_TOOL_LIST_CONTAINER)};var getExternalRegistrationContainer=function(){return $(SELECTORS_EXTERNAL_REGISTRATION_CONTAINER)},getCartridgeRegistrationContainer=function(){return $(SELECTORS_CARTRIDGE_REGISTRATION_CONTAINER)},getRegistrationChoiceContainer=function(){return $(SELECTORS_REGISTRATION_CHOICE_CONTAINER)},closeLTIAdvRegistration=function(e){e.data&amp;&amp;"org.imsglobal.lti.close"===e.data.subject&amp;&amp;($(SELECTORS_EXTERNAL_REGISTRATION_TEMPLATE_CONTAINER).empty(),hideExternalRegistration(),showRegistrationChoices(),showToolList(),showRegistrationChoices(),reloadToolList())},getToolURL=function(){return $(SELECTORS_TOOL_URL).val()},hideExternalRegistration=function(){getExternalRegistrationContainer().addClass("hidden")},hideCartridgeRegistration=function(){getCartridgeRegistrationContainer().addClass("hidden")},hideRegistrationChoices=function(){getRegistrationChoiceContainer().addClass("hidden")},showExternalRegistration=function(){hideCartridgeRegistration(),hideRegistrationChoices(),getExternalRegistrationContainer().removeClass("hidden"),screenReaderAnnounce(getExternalRegistrationContainer())},showRegistrationChoices=function(){hideExternalRegistration(),hideCartridgeRegistration(),getRegistrationChoiceContainer().removeClass("hidden"),screenReaderAnnounce(getRegistrationChoiceContainer())},screenReaderAnnounce=function(element){element.children().detach().appendTo(element)},hideToolList=function(){getToolListContainer().addClass("hidden")},showToolList=function(){getToolListContainer().removeClass("hidden")},startLoading=function(element){element.addClass("loading")},stopLoading=function(element){element.removeClass("loading")},reloadToolList=function(){M.util.js_pending("reloadToolList");const cardContainer=$(SELECTORS_TOOL_CARD_CONTAINER),listContainer=getToolListContainer();fetchToolCount().done((function(data){pagedContentFactory.createWithTotalAndLimit(data.count,60,(function(pagesData){return pagesData.map((function(pageData){return fetchToolData(pageData.limit,pageData.offset).then((function(data){return renderToolData(data)}))}))}),{showFirstLast:!0}).done((function(html,js){templates.replaceNodeContents(cardContainer,html,js)})).always((function(){stopLoading(listContainer),M.util.js_complete("reloadToolList")}))})),startLoading(listContainer)};const fetchToolCount=function(){return toolTypesAndProxies.count({orphanedonly:!0}).done((function(data){return data})).catch((function(error){return notification.exception(error),{count:0}}))},fetchToolData=function(limit,offset){const args={orphanedonly:!0};return null===limit||Number.isNaN(limit)||(args.limit=limit),null===offset||Number.isNaN(offset)||(args.offset=offset),toolTypesAndProxies.query(args).done((function(data){return data})).catch((function(error){return notification.exception(error),{types:[],proxies:[],limit:limit,offset:offset}}))},renderToolData=function(data){const context={tools:data.types,proxies:data.proxies};return templates.render("mod_lti/tool_list",context).done((function(html,js){return{html:html,js:js}}))};var addLTIAdvTool=function(){var url=getToolURL().trim();url&amp;&amp;($(SELECTORS_TOOL_URL).val(""),hideToolList(),function(url){$(SELECTORS_EXTERNAL_REGISTRATION_PAGE_CONTAINER).removeClass("hidden"),$(SELECTORS_EXTERNAL_REGISTRATION_TEMPLATE_CONTAINER).append($("&lt;iframe src='startltiadvregistration.php?url="+encodeURIComponent(url)+"&amp;sesskey="+config.sesskey+"'&gt;&lt;/iframe&gt;")),showExternalRegistration(),window.addEventListener("message",closeLTIAdvRegistration,!1)}(url))},registerEventListeners=function(){$(document).on(ltiEvents.NEW_TOOL_TYPE,(function(){reloadToolList()})),$(document).on(ltiEvents.START_EXTERNAL_REGISTRATION,(function(){showExternalRegistration(),$(SELECTORS_TOOL_URL).val(""),hideToolList()})),$(document).on(ltiEvents.STOP_EXTERNAL_REGISTRATION,(function(){showToolList(),showRegistrationChoices()})),$(document).on(ltiEvents.START_CARTRIDGE_REGISTRATION,(function(event,url){!function(url){hideExternalRegistration(),hideRegistrationChoices();var container=getCartridgeRegistrationContainer();container.find("input").val(""),container.removeClass("hidden"),container.find(SELECTORS_CARTRIDGE_REGISTRATION_FORM).attr("data-cartridge-url",url),screenReaderAnnounce(container)}(url)})),$(document).on(ltiEvents.STOP_CARTRIDGE_REGISTRATION,(function(){getCartridgeRegistrationContainer().find(SELECTORS_CARTRIDGE_REGISTRATION_FORM).removeAttr("data-cartridge-url"),showRegistrationChoices()})),$(document).on(ltiEvents.REGISTRATION_FEEDBACK,(function(event,data){!function(data){var type=data.error?"error":"success";notification.addNotification({message:data.message,type:type})}(data)})),$(SELECTORS_TOOL_CREATE_LTILEGACY_BUTTON).click((function(e){e.preventDefault(),function(){var url=getToolURL().trim();if(""===url)return $.Deferred().resolve();var toolButton=$(SELECTORS_TOOL_CREATE_LTILEGACY_BUTTON);startLoading(toolButton);var promise=toolType.isCartridge(url);promise.always((function(){stopLoading(toolButton)})),promise.done((function(result){result.iscartridge?($(SELECTORS_TOOL_URL).val(""),$(document).trigger(ltiEvents.START_CARTRIDGE_REGISTRATION,url)):$(document).trigger(ltiEvents.START_EXTERNAL_REGISTRATION,{url:url})})),promise.fail((function(){str.get_string("errorbadurl","mod_lti").done((function(s){$(document).trigger(ltiEvents.REGISTRATION_FEEDBACK,{message:s,error:!0})})).fail(notification.exception)}))}()})),$(SELECTORS_TOOL_CREATE_BUTTON).click((function(e){e.preventDefault(),addLTIAdvTool()}))};return{init:function(){registerEventListeners(),reloadToolList()}}}));
/**
 * Provides a list of events that can be triggered in the LTI management
 * page.
 *
 * @module     mod_lti/events
 * @class      events
 * @copyright  2015 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.1
 */
define("mod_lti/events",[],(function(){return{NEW_TOOL_TYPE:"lti.tool.type.new",START_EXTERNAL_REGISTRATION:"lti.registration.external.start",STOP_EXTERNAL_REGISTRATION:"lti.registration.external.stop",START_CARTRIDGE_REGISTRATION:"lti.registration.cartridge.start",STOP_CARTRIDGE_REGISTRATION:"lti.registration.cartridge.stop",REGISTRATION_FEEDBACK:"lti.registration.feedback",CAPABILITIES_AGREE:"lti.tool.type.capabilities.agree",CAPABILITIES_DECLINE:"lti.tool.type.capabilities.decline"}}));
/**
 * Processes the result of LTI tool creation from a Content-Item message type.
 *
 * @module     mod_lti/contentitem_return
 * @copyright  2016 Jun Pataleta &lt;jun@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.2
 */
define("mod_lti/contentitem_return",["jquery"],(function($){return{init:function(returnData){$(window).ready((function(){window!=top?parent.processContentItemReturnData(returnData):window.processContentItemReturnData(returnData)}))}}}));
/**
 * Launches the modal dialogue that contains the iframe that sends the Content-Item selection request to an
 * LTI tool provider that supports Content-Item type message.
 *
 * See template: mod_lti/contentitem
 *
 * @module     mod_lti/contentitem
 * @copyright  2016 Jun Pataleta &lt;jun@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.2
 */
define("mod_lti/contentitem",["jquery","core/notification","core/str","core/templates","mod_lti/form-field","core/modal_factory","core/modal_events"],(function($,notification,str,templates,FormField,ModalFactory,ModalEvents){var dialogue,doneCallback,contentItem={init:function(url,postData,cb){doneCallback=cb;var context={url:url,postData:postData},bodyPromise=templates.render("mod_lti/contentitem",context);if(dialogue)return dialogue.setBody(bodyPromise),void dialogue.show();str.get_string("selectcontent","lti").then((function(title){return ModalFactory.create({title:title,body:bodyPromise,large:!0})})).then((function(modal){dialogue=modal,modal.getRoot().on(ModalEvents.hidden,(function(){modal.setBody(""),notification.fetchNotifications()})),modal.show()})).catch(notification.exception)}},ltiFormFields=[new FormField("name",FormField.TYPES.TEXT,!1,""),new FormField("introeditor",FormField.TYPES.EDITOR,!1,""),new FormField("toolurl",FormField.TYPES.TEXT,!0,""),new FormField("securetoolurl",FormField.TYPES.TEXT,!0,""),new FormField("instructorchoiceacceptgrades",FormField.TYPES.CHECKBOX,!0,!0),new FormField("instructorchoicesendname",FormField.TYPES.CHECKBOX,!0,!0),new FormField("instructorchoicesendemailaddr",FormField.TYPES.CHECKBOX,!0,!0),new FormField("instructorcustomparameters",FormField.TYPES.TEXT,!0,""),new FormField("icon",FormField.TYPES.TEXT,!0,""),new FormField("secureicon",FormField.TYPES.TEXT,!0,""),new FormField("launchcontainer",FormField.TYPES.SELECT,!0,0),new FormField("grade_modgrade_point",FormField.TYPES.TEXT,!1,""),new FormField("lineitemresourceid",FormField.TYPES.TEXT,!0,""),new FormField("lineitemtag",FormField.TYPES.TEXT,!0,""),new FormField("lineitemsubreviewurl",FormField.TYPES.TEXT,!0,""),new FormField("lineitemsubreviewparams",FormField.TYPES.TEXT,!0,"")];const hideElement=e=&gt;{e.setAttribute("hidden","true"),e.setAttribute("aria-hidden","true"),e.setAttribute("tab-index","-1")},showElement=e=&gt;{e.removeAttribute("hidden"),e.setAttribute("aria-hidden","false"),e.setAttribute("tab-index","1")};return window.processContentItemReturnData=function(returnData){var index;if(dialogue&amp;&amp;dialogue.hide(),returnData.multiple){for(index in ltiFormFields)ltiFormFields[index].setFieldValue("name"===ltiFormFields[index].name?"item":null);var variants=[];returnData.multiple.forEach((function(v){variants.push((config=&gt;{const variant={};return["name","toolurl","securetoolurl","instructorcustomparameters","icon","secureicon","launchcontainer","lineitemresourceid","lineitemtag","lineitemsubreviewurl","lineitemsubreviewparams"].forEach((function(name){variant[name]=config[name]||""})),variant["introeditor[text]"]=config.introeditor?config.introeditor.text:"",variant["introeditor[format]"]=config.introeditor?config.introeditor.format:"",1===config.instructorchoiceacceptgrades?(variant.instructorchoiceacceptgrades="1",variant["grade[modgrade_point]"]=config.grade_modgrade_point||"100"):variant.instructorchoiceacceptgrades="0",variant})(v))})),async function(items){const form=document.querySelector("#region-main-box form"),toolArea=form.querySelector('[data-attribute="dynamic-import"]'),buttonGroup=form.querySelector("#fgroup_id_buttonar"),submitAndLaunch=form.querySelector("#id_submitbutton");Array.from(form.children).forEach(hideElement),hideElement(submitAndLaunch);const{html:html,js:js}=await templates.renderForPromise("mod_lti/tool_deeplinking_results",{items:items});await templates.replaceNodeContents(toolArea,html,js),showElement(toolArea),showElement(buttonGroup)}(returnData.multiple);const submitAndCourse=document.querySelector("#id_submitbutton2");submitAndCourse.onclick=e=&gt;{e.preventDefault(),submitAndCourse.disabled=!0;const fd=new FormData(document.querySelector("#region-main-box form")),backToCourse=()=&gt;{document.querySelector("#id_cancel").click()};variants.reduce(((promise,variant)=&gt;{Object.entries(variant).forEach((entry=&gt;fd.set(entry[0],entry[1])));const body=new URLSearchParams(fd),doPost=()=&gt;fetch(document.location.pathname,{method:"post",body:body});return promise.then(doPost).catch(doPost)}),Promise.resolve()).then(backToCourse).catch(backToCourse)}}else{for(index in ltiFormFields){var field=ltiFormFields[index],value=null;void 0!==returnData[field.name]&amp;&amp;(value=returnData[field.name]),field.setFieldValue(value)}field.setFieldValue(value)}doneCallback&amp;&amp;doneCallback(returnData)},contentItem}));
define('mod_panoptosubmission/submissionpanel', ["jquery","core/notification","core/modal_factory","core/str"],(l,r,i,m)=&gt;{let u=null;var e=(t,e,a)=&gt;{Promise.all([m.get_string("select_submission","panoptosubmission"),i.create({type:i.types.DEFAULT,body:`&lt;iframe class="mod-panoptosubmission-iframe-custom" src="${t}" frameborder="0"&gt;&lt;/iframe&gt;`})]).then(([t,i])=&gt;{i.setTitle(t),i.getRoot().addClass("mod-panoptosubmission-modal-custom-size"),i.getRoot().find(".modal-dialog").addClass("mod-panoptosubmission-modal-dialog-custom").css({width:a+"px","max-width":a+"px"}),i.getRoot().find(".modal-content").addClass("mod-panoptosubmission-modal-content-custom").css({height:e+"px","max-height":e+"px"}),i.getRoot().find(".modal-body").addClass("mod-panoptosubmission-modal-body-custom"),i.show(),document.body.panoptoWindow=i,document.body.addEventListener("sessionSelected",d.bind(this),!1)}).catch(r.exception)},d=t=&gt;{l("input[id=submit_video]").removeAttr("disabled");var i=l("iframe[id=contentframe]"),e=l("div[id=contentcontainer]"),a=l("img[id=panoptothumbnail]"),d=l("a[id=panoptothumbnaillink]"),o=l("a[id=panoptosessiontitle]"),s=new URL(t.detail.ltiViewerUrl),n=s.searchParams;n.set("course",u),n.set("custom",decodeURI(t.detail.customData)),n.set("contentUrl",t.detail.contentUrl),s.search=n.toString(),l("input[id=sessiontitle]").attr("value",t.detail.title),l("input[id=source]").attr("value",t.detail.contentUrl),l("input[id=customdata]").attr("value",t.detail.customData),l("input[id=width]").attr("value",t.detail.width),l("input[id=height]").attr("value",t.detail.height),l("input[id=thumbnailsource]").attr("value",t.detail.thumbnailUrl),l("input[id=thumbnailwidth]").attr("value",t.detail.thumbnailWidth),l("input[id=thumbnailheight]").attr("value",t.detail.thumbnailHeight),o.text(t.detail.title),o.attr("href",s.toString()),d.attr("href",s.toString()),a.attr("src",t.detail.thumbnailUrl),a.attr("width",t.detail.thumbnailWidth),a.attr("height",t.detail.thumbnailHeight),i.attr("width",t.detail.width),i.attr("height",t.detail.height),i.hasClass("session-hidden")||i.attr("src",s.toString()),e.removeClass("no-session"),m.get_string("replacevideo","panoptosubmission").done(t=&gt;{l("#id_add_video").val(t)}).fail(r.exception),l("#id_add_video").addClass("btn-secondary"),l("#submit_video").addClass("btn-primary"),l("#id_add_video").removeClass("btn-primary"),l("#submit_video").removeClass("btn-secondary"),document.body.panoptoWindow.destroy()};return{initsubmissionpanel:t=&gt;{"0"!==t.addvidbtnid&amp;&amp;"0"!==t.ltilaunchurl&amp;&amp;0!==t.courseid&amp;&amp;0!==t.height&amp;&amp;0!==t.width&amp;&amp;(u=t.courseid,l("#"+t.addvidbtnid).on("click",()=&gt;{e(t.ltilaunchurl,t.height,t.width)}))}}});
define("mod_quiz/question_slot",["exports","core/ajax","core/notification"],(function(_exports,_ajax,_notification){var obj;
/**
   * Render the question slot template for each question in the quiz edit view.
   *
   * @module     mod_quiz/question_slot
   * @copyright  2021 Catalyst IT Australia Pty Ltd
   * @author     Guillermo Gomez Arias &lt;guillermogomez@catalyst-au.net&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_notification=(obj=_notification)&amp;&amp;obj.__esModule?obj:{default:obj};const registerEventListeners=()=&gt;{document.addEventListener("change",(e=&gt;{if(!e.target.matches('[data-action="mod_quiz-select_slot"][data-slot-id]'))return;((slotId,newVersion)=&gt;(0,_ajax.call)([{methodname:"mod_quiz_set_question_version",args:{slotid:slotId,newversion:newVersion}}])[0])(e.target.dataset.slotId,parseInt(e.target.value)).then((()=&gt;{location.reload()})).catch(_notification.default.exception)}))};_exports.init=()=&gt;{registerEventListeners()}}));
/**
 * Initialise the question bank modal on the quiz page.
 *
 * @module    mod_quiz/quizquestionbank
 * @copyright 2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("mod_quiz/quizquestionbank",["mod_quiz/add_question_modal_launcher","mod_quiz/modal_quiz_question_bank"],(function(AddQuestionModalLauncher,ModalQuizQuestionBank){return{init:function(contextId){AddQuestionModalLauncher.init(ModalQuizQuestionBank.TYPE,'.menu [data-action="questionbank"]',contextId)}}}));
/**
 * Contain the logic for the add random question modal.
 *
 * @module     mod_quiz/modal_add_random_question
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("mod_quiz/modal_add_random_question",["jquery","core/notification","core/modal","core/modal_events","core/modal_registry","core/fragment","core/templates","core_form/changechecker"],(function($,Notification,Modal,ModalEvents,ModalRegistry,Fragment,Templates,FormChangeChecker){var registered=!1,SELECTORS_EXISTING_CATEGORY_CONTAINER='[data-region="existing-category-container"]',SELECTORS_EXISTING_CATEGORY_FORM_ELEMENT="#id_existingcategoryheader",SELECTORS_NEW_CATEGORY_CONTAINER='[data-region="new-category-container"]',SELECTORS_NEW_CATEGORY_FORM_ELEMENT="#id_newcategoryheader",SELECTORS_TAB_CONTENT='[data-region="tab-content"]',SELECTORS_ADD_ON_PAGE_FORM_ELEMENT='[name="addonpage"]',SELECTORS_SUBMIT_BUTTON_ELEMENT='input[type="submit"]',SELECTORS_CANCEL_BUTTON_ELEMENT='input[type="submit"][name="cancel"]',SELECTORS_FORM_HEADER="legend",SELECTORS_BUTTON_CONTAINER=".fitem",ModalAddRandomQuestion=function(root){Modal.call(this,root),this.contextId=null,this.addOnPageId=null,this.category=null,this.returnUrl=null,this.cmid=null,this.loadedForm=!1};return ModalAddRandomQuestion.TYPE="mod_quiz-quiz-add-random-question",(ModalAddRandomQuestion.prototype=Object.create(Modal.prototype)).constructor=ModalAddRandomQuestion,ModalAddRandomQuestion.prototype.setContextId=function(id){this.contextId=id},ModalAddRandomQuestion.prototype.getContextId=function(){return this.contextId},ModalAddRandomQuestion.prototype.setAddOnPageId=function(id){this.addOnPageId=id,this.getBody().find(SELECTORS_ADD_ON_PAGE_FORM_ELEMENT).val(id)},ModalAddRandomQuestion.prototype.getAddOnPageId=function(){return this.addOnPageId},ModalAddRandomQuestion.prototype.setCategory=function(category){this.category=category},ModalAddRandomQuestion.prototype.getCategory=function(){return this.category},ModalAddRandomQuestion.prototype.setReturnUrl=function(url){this.returnUrl=url},ModalAddRandomQuestion.prototype.getReturnUrl=function(){return this.returnUrl},ModalAddRandomQuestion.prototype.setCMID=function(id){this.cmid=id},ModalAddRandomQuestion.prototype.getCMID=function(){return this.cmid},ModalAddRandomQuestion.prototype.moveFormElementIntoTab=function(formElement,tabElement){var submitButtons=formElement.find(SELECTORS_SUBMIT_BUTTON_ELEMENT),footer=$('&lt;div class="modal-footer mt-1" data-region="footer"&gt;&lt;/div&gt;');formElement.find(SELECTORS_FORM_HEADER).addClass("hidden"),formElement.wrap(tabElement),submitButtons.closest(SELECTORS_BUTTON_CONTAINER).remove(),submitButtons.appendTo(footer),footer.appendTo(formElement)},ModalAddRandomQuestion.prototype.moveTabsIntoTabContent=function(form){var tabContent=this.getBody().find(SELECTORS_TAB_CONTENT).empty();form.find('[role="tabpanel"]').wrapAll(tabContent)},ModalAddRandomQuestion.prototype.moveCancelButtonToTabs=function(form){var cancelButton=form.find(SELECTORS_CANCEL_BUTTON_ELEMENT).addClass("ml-1"),tabFooters=form.find('[data-region="footer"]');cancelButton.closest(SELECTORS_BUTTON_CONTAINER).remove(),cancelButton.clone().appendTo(tabFooters)},ModalAddRandomQuestion.prototype.loadForm=function(){return Fragment.loadFragment("mod_quiz","add_random_question_form",this.getContextId(),{addonpage:this.getAddOnPageId(),cat:this.getCategory(),returnurl:this.getReturnUrl(),cmid:this.getCMID()}).then(function(html,js){var form=$(html),existingCategoryFormElement=form.find(SELECTORS_EXISTING_CATEGORY_FORM_ELEMENT),existingCategoryTab=this.getBody().find(SELECTORS_EXISTING_CATEGORY_CONTAINER),newCategoryFormElement=form.find(SELECTORS_NEW_CATEGORY_FORM_ELEMENT),newCategoryTab=this.getBody().find(SELECTORS_NEW_CATEGORY_CONTAINER);this.moveFormElementIntoTab(existingCategoryFormElement,existingCategoryTab),this.moveFormElementIntoTab(newCategoryFormElement,newCategoryTab),this.moveTabsIntoTabContent(form),this.moveCancelButtonToTabs(form),Templates.replaceNode(this.getBody().find(SELECTORS_TAB_CONTENT),form,js)}.bind(this)).then((function(){FormChangeChecker.disableAllChecks()})).fail(Notification.exception)},ModalAddRandomQuestion.prototype.show=function(){Modal.prototype.show.call(this),this.loadedForm||(this.loadForm(),this.loadedForm=!0)},registered||(ModalRegistry.register(ModalAddRandomQuestion.TYPE,ModalAddRandomQuestion,"mod_quiz/modal_add_random_question"),registered=!0),ModalAddRandomQuestion}));
/**
 * Initialise the add random question modal on the quiz page.
 *
 * @module    mod_quiz/add_random_question
 * @copyright 2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("mod_quiz/add_random_question",["mod_quiz/add_question_modal_launcher","mod_quiz/modal_add_random_question"],(function(AddQuestionModalLauncher,ModalAddRandomQuestion){return{init:function(contextId,category,returnUrl,cmid){let showNewCategory=!(arguments.length&gt;4&amp;&amp;void 0!==arguments[4])||arguments[4];AddQuestionModalLauncher.init(ModalAddRandomQuestion.TYPE,'.menu [data-action="addarandomquestion"]',contextId,(function(triggerElement,modal){modal.setCategory(category),modal.setReturnUrl(returnUrl),modal.setCMID(cmid)}),showNewCategory)}}}));
/**
 * Initialise the repaginate dialogue on quiz editing page.
 *
 * @module    mod_quiz/repaginate
 * @copyright 2019 The Open University
 * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("mod_quiz/repaginate",["jquery","core/modal_factory"],(function($,ModalFactory){var SELECTORS_REPAGINATECOMMAND="#repaginatecommand",SELECTORS_HEADER="header",SELECTORS_BODY="form";return{init:function(){ModalFactory.create({title:$(SELECTORS_REPAGINATECOMMAND).data(SELECTORS_HEADER),body:$(SELECTORS_REPAGINATECOMMAND).data(SELECTORS_BODY),large:!1},$(SELECTORS_REPAGINATECOMMAND))}}}));
/**
 * Contain the logic for the question bank modal.
 *
 * @module     mod_quiz/modal_quiz_question_bank
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("mod_quiz/modal_quiz_question_bank",["jquery","core/notification","core/modal","core/modal_events","core/modal_registry","core/fragment","core_form/changechecker"],(function($,Notification,Modal,ModalEvents,ModalRegistry,Fragment,FormChangeChecker){var registered=!1,SELECTORS_ADD_TO_QUIZ_CONTAINER="td.addtoquizaction",SELECTORS_ANCHOR="a[href]",SELECTORS_PREVIEW_CONTAINER="td.previewaction",SELECTORS_SEARCH_OPTIONS="#advancedsearch",SELECTORS_DISPLAY_OPTIONS="#displayoptions",SELECTORS_ADD_QUESTIONS_FORM="form#questionsubmit",ModalQuizQuestionBank=function(root){Modal.call(this,root),this.contextId=null,this.addOnPageId=null};return ModalQuizQuestionBank.TYPE="mod_quiz-quiz-question-bank",(ModalQuizQuestionBank.prototype=Object.create(Modal.prototype)).constructor=ModalQuizQuestionBank,ModalQuizQuestionBank.prototype.setContextId=function(id){this.contextId=id},ModalQuizQuestionBank.prototype.getContextId=function(){return this.contextId},ModalQuizQuestionBank.prototype.setAddOnPageId=function(id){this.addOnPageId=id},ModalQuizQuestionBank.prototype.getAddOnPageId=function(){return this.addOnPageId},ModalQuizQuestionBank.prototype.show=function(){return this.reloadBodyContent(window.location.search),Modal.prototype.show.call(this)},ModalQuizQuestionBank.prototype.reloadBodyContent=function(queryString){var promise=Fragment.loadFragment("mod_quiz","quiz_question_bank",this.getContextId(),{querystring:queryString}).fail(Notification.exception);this.setBody(promise)},ModalQuizQuestionBank.prototype.handleAddToQuizEvent=function(e,anchorElement){var href=anchorElement.attr("href")+"&amp;addonpage="+this.getAddOnPageId();anchorElement.attr("href",href)},ModalQuizQuestionBank.prototype.handlePreviewContainerEvent=function(e,anchorElement){window.openpopup(e,{url:anchorElement.attr("href"),name:"questionpreview",options:["height=600","width=800","top=0","left=0","menubar=0","location=0","scrollbars","resizable","toolbar","status","directories=0","fullscreen=0","dependent"].join(",")})},ModalQuizQuestionBank.prototype.handleDisplayOptionFormEvent=function(e){e.stopPropagation(),e.preventDefault();var queryString="?"+$(e.target).closest(SELECTORS_DISPLAY_OPTIONS).serialize();this.reloadBodyContent(queryString)},ModalQuizQuestionBank.prototype.registerDisplayOptionListeners=function(){this.getModal().on("change",SELECTORS_DISPLAY_OPTIONS,function(e){$(e.target).attr("aria-autocomplete")||this.handleDisplayOptionFormEvent(e)}.bind(this)),this.getModal().on("submit",SELECTORS_DISPLAY_OPTIONS,function(e){this.handleDisplayOptionFormEvent(e)}.bind(this))},ModalQuizQuestionBank.prototype.registerEventListeners=function(){Modal.prototype.registerEventListeners.call(this),this.registerDisplayOptionListeners(),this.getModal().on("submit",SELECTORS_ADD_QUESTIONS_FORM,function(e){var formElement=$(e.currentTarget);$("&lt;input /&gt;").attr("type","hidden").attr("name","addonpage").attr("value",this.getAddOnPageId()).appendTo(formElement)}.bind(this)),this.getModal().on("click",SELECTORS_ANCHOR,function(e){var anchorElement=$(e.currentTarget);anchorElement.closest(SELECTORS_ADD_TO_QUIZ_CONTAINER).length?this.handleAddToQuizEvent(e,anchorElement):anchorElement.closest(SELECTORS_PREVIEW_CONTAINER).length?this.handlePreviewContainerEvent(e,anchorElement):anchorElement.closest(SELECTORS_SEARCH_OPTIONS).length||(e.preventDefault(),this.reloadBodyContent(anchorElement.prop("search")))}.bind(this)),this.getRoot().on(ModalEvents.bodyRendered,(function(){FormChangeChecker.disableAllChecks()}))},registered||(ModalRegistry.register(ModalQuizQuestionBank.TYPE,ModalQuizQuestionBank,"core/modal"),registered=!0),ModalQuizQuestionBank}));
/**
 * This class manages the confirmation pop-up (also called the pre-flight check)
 * that is sometimes shown when a use clicks the start attempt button.
 *
 * This is also responsible for opening the pop-up window, if the quiz requires to be in one.
 *
 * @module    mod_quiz/preflightcheck
 * @copyright 2016 The Open University
 * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since     3.1
 */
define("mod_quiz/preflightcheck",["jquery","core/yui","core_form/changechecker"],(function($,Y,FormChangeChecker){var t={confirmDialogue:null,init:function(startButton,confirmationTitle,confirmationForm,popupoptions){var finalStartButton=startButton;Y.use("moodle-core-notification",(function(){Y.one(confirmationForm)&amp;&amp;(t.confirmDialogue=new M.core.dialogue({headerContent:confirmationTitle,bodyContent:Y.one(confirmationForm),draggable:!0,visible:!1,center:!0,modal:!0,width:null,extraClasses:["mod_quiz_preflight_popup"]}),Y.one(startButton).on("click",t.displayDialogue),Y.one("#id_cancel").on("click",t.hideDialogue),finalStartButton=t.confirmDialogue.get("boundingBox").one('[name="submitbutton"]')),popupoptions&amp;&amp;Y.one(finalStartButton).on("click",t.launchQuizPopup,t,popupoptions)}))},displayDialogue:function(e){e&amp;&amp;e.halt(),t.confirmDialogue.show()},hideDialogue:function(e){e&amp;&amp;e.halt(),t.confirmDialogue.hide(e)},launchQuizPopup:function(e,popupoptions){e.halt(),Y.use("io-form",(function(){var form=e.target.ancestor("form");FormChangeChecker.resetFormDirtyState(form.getDOMNode()),window.openpopup(e,{url:form.get("action")+"?"+Y.IO.stringify(form).replace(/\bcancel=/,"x="),windowname:"quizpopup",options:popupoptions,fullscreen:!0})}))}};return t}));
/**
 * JavaScript for the add_random_form class.
 *
 * @module    mod_quiz/add_random_form
 * @copyright 2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("mod_quiz/add_random_form",["jquery","mod_quiz/random_question_form_preview"],(function($,RandomQuestionFormPreview){var SELECTORS_PREVIEW_CONTAINER='[data-region="random-question-preview-container"]',SELECTORS_CATEGORY_FORM_ELEMENT='[name="category"]',SELECTORS_SUBCATEGORY_FORM_ELEMENT='[name="includesubcategories"]',SELECTORS_TAG_IDS_FORM_ELEMENT='[name="fromtags[]"]',getCategorySelectValue=function(form){return form.find(SELECTORS_CATEGORY_FORM_ELEMENT).val()},shouldIncludeSubcategories=function(form,topCategories){return!!function(form,topCategories){var selectedValue=getCategorySelectValue(form);return topCategories.indexOf(selectedValue)&gt;-1}(form,topCategories)||form.find(SELECTORS_SUBCATEGORY_FORM_ELEMENT).is(":checked")},reloadQuestionPreview=function(form,contextId,topCategories){var previewContainer=form.find(SELECTORS_PREVIEW_CONTAINER);RandomQuestionFormPreview.reload(previewContainer,function(form){return getCategorySelectValue(form).split(",")[0]}(form),shouldIncludeSubcategories(form,topCategories),function(form){return form.find(SELECTORS_TAG_IDS_FORM_ELEMENT).val().map((function(value){return value.split(",")[0]}))}(form),contextId)},addEventListeners=function(form,contextId,topCategories){var reloadTimerId=null;const tagsFilter=form.find(SELECTORS_TAG_IDS_FORM_ELEMENT);form.add(tagsFilter).on("change",(function(e){var element;((element=$(e.target)).closest(SELECTORS_CATEGORY_FORM_ELEMENT).length&gt;0||element.closest(SELECTORS_SUBCATEGORY_FORM_ELEMENT).length&gt;0||element.closest(SELECTORS_TAG_IDS_FORM_ELEMENT).length&gt;0)&amp;&amp;(RandomQuestionFormPreview.showLoadingIcon(form),reloadTimerId&amp;&amp;clearTimeout(reloadTimerId),reloadTimerId=setTimeout((function(){reloadQuestionPreview(form,contextId,topCategories)}),2e3))}))};return{init:function(formId,contextId,topCategories,isTagsEnabled){if(1==isTagsEnabled){var form=$("#"+formId);reloadQuestionPreview(form,contextId,topCategories),addEventListeners(form,contextId,topCategories)}}}}));
define("mod_quiz/submission_confirmation",["exports","core/notification","core/prefetch","core/templates","core/str"],(function(_exports,_notification,_prefetch,_templates,_str){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * A javascript module to handle submission confirmation for quiz.
   *
   * @module    mod_quiz/submission_confirmation
   * @copyright 2022 Huong Nguyen &lt;huongnv13@gmail.com&gt;
   * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   * @since     4.1
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_prefetch=_interopRequireDefault(_prefetch),_templates=_interopRequireDefault(_templates);const SELECTOR_attemptSubmitButton=".path-mod-quiz .btn-finishattempt button",SELECTOR_attemptSubmitForm="form#frm-finishattempt",TEMPLATES_submissionConfirmation="mod_quiz/submission_confirmation";_exports.init=unAnsweredQuestions=&gt;{_prefetch.default.prefetchStrings("core",["submit"]),_prefetch.default.prefetchStrings("core_admin",["confirmation"]),_prefetch.default.prefetchStrings("quiz",["submitallandfinish","submission_confirmation"]),_prefetch.default.prefetchTemplate(TEMPLATES_submissionConfirmation),(unAnsweredQuestions=&gt;{const submitAction=document.querySelector(SELECTOR_attemptSubmitButton);submitAction&amp;&amp;submitAction.addEventListener("click",(async e=&gt;{e.preventDefault();try{await(0,_notification.saveCancelPromise)((0,_str.get_string)("submission_confirmation","quiz"),_templates.default.render(TEMPLATES_submissionConfirmation,{hasunanswered:unAnsweredQuestions&gt;0,totalunanswered:unAnsweredQuestions}),(0,_str.get_string)("submitallandfinish","quiz")),submitAction.closest(SELECTOR_attemptSubmitForm).submit()}catch{return}}))})(unAnsweredQuestions)}}));
/**
 * Initialise the an add question modal on the quiz page.
 *
 * @module    mod_quiz/add_question_modal_launcher
 * @copyright 2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("mod_quiz/add_question_modal_launcher",["jquery","core/notification","core/modal_factory"],(function($,Notification,ModalFactory){return{init:function(modalType,selector,contextId,preShowCallback){let showNewCategory=!(arguments.length&gt;4&amp;&amp;void 0!==arguments[4])||arguments[4];var body=$("body");let templateContext={hidden:showNewCategory};return ModalFactory.create({type:modalType,large:!0,templateContext:templateContext,preShowCallback:function(triggerElement,modal){triggerElement=$(triggerElement),modal.setContextId(contextId),modal.setAddOnPageId(triggerElement.attr("data-addonpage")),modal.setTitle(triggerElement.attr("data-header")),preShowCallback&amp;&amp;preShowCallback(triggerElement,modal)}},[body,selector]).fail(Notification.exception)}}}));
/**
 * JavaScript for the random_question_form_preview of the
 * add_random_form class.
 *
 * @module    mod_quiz/random_question_form_preview
 * @copyright 2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("mod_quiz/random_question_form_preview",["jquery","core/ajax","core/str","core/notification","core/templates","core/paged_content_factory"],(function($,Ajax,Str,Notification,Templates,PagedContentFactory){var TEMPLATE_NAME="mod_quiz/random_question_form_preview_question_list",SELECTORS_LOADING_ICON_CONTAINER='[data-region="overlay-icon-container"]',SELECTORS_QUESTION_COUNT_CONTAINER='[data-region="question-count-container"]',SELECTORS_QUESTION_LIST_CONTAINER='[data-region="question-list-container"]',showLoadingIcon=function(root){root.find(SELECTORS_LOADING_ICON_CONTAINER).removeClass("hidden")},hideLoadingIcon=function(root){root.find(SELECTORS_LOADING_ICON_CONTAINER).addClass("hidden")},requestQuestions=function(categoryId,includeSubcategories,tagIds,contextId,limit,offset){var request={methodname:"core_question_get_random_question_summaries",args:{categoryid:categoryId,includesubcategories:includeSubcategories,tagids:tagIds,contextid:contextId,limit:limit,offset:offset}};return Ajax.call([request])[0]};return{reload:function(root,categoryId,includeSubcategories,tagIds,contextId){return showLoadingIcon(root),requestQuestions(categoryId,includeSubcategories,tagIds,contextId,5,0).then((function(response){var totalCount=response.totalcount;return function(root,questionCount){Str.get_string("questionsmatchingfilter","mod_quiz",questionCount).then((function(string){root.find(SELECTORS_QUESTION_COUNT_CONTAINER).html(string)})).fail(Notification.exception)}(root,totalCount),response})).then((function(response){var totalQuestionCount=response.totalcount,questions=response.questions;return questions.length?function(categoryId,includeSubcategories,tagIds,contextId,totalQuestionCount,firstPageQuestions){return PagedContentFactory.createFromAjax(totalQuestionCount,5,(function(pagesData){return pagesData.map((function(pageData){var limit=pageData.limit,offset=pageData.offset;return 0==offset?Templates.render(TEMPLATE_NAME,{questions:firstPageQuestions}):requestQuestions(categoryId,includeSubcategories,tagIds,contextId,limit,offset).then((function(response){var questions=response.questions;return Templates.render(TEMPLATE_NAME,{questions:questions})})).fail(Notification.exception)}))}))}(categoryId,includeSubcategories,tagIds,contextId,totalQuestionCount,questions):$.Deferred().resolve("","")})).then((function(html,js){var container=root.find(SELECTORS_QUESTION_LIST_CONTAINER);Templates.replaceNodeContents(container,html,js)})).always((function(){hideLoadingIcon(root)})).fail(Notification.exception)},showLoadingIcon:showLoadingIcon,hideLoadingIcon:hideLoadingIcon}}));
/**
 * Javascript to handle survey validation.
 *
 * @module     mod_survey/validation
 * @copyright  2017 Dan Poltawski &lt;dan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.3
 */
define("mod_survey/validation",["jquery","core/str","core/modal_factory","core/notification"],(function($,Str,ModalFactory,Notification){return{ensureRadiosChosen:function(formid){var modalPromise=Str.get_strings([{key:"error",component:"moodle"},{key:"questionsnotanswered",component:"survey"}]).then((function(strings){return ModalFactory.create({type:ModalFactory.types.CANCEL,title:strings[0],body:strings[1]})})).catch(Notification.exception),form=$("#"+formid);form.submit((function(e){return 0===form.find('input:radio[data-survey-default="true"]:checked').length||(e.preventDefault(),modalPromise.then((function(modal){return modal.show(),!1})))}))}}}));
define("mod_threesixo/events",["exports","core/event_dispatcher"],(function(_exports,_event_dispatcher){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.notifyItemsUpdated=_exports.eventTypes=void 0;
/**
   * Javascript events for the `mod_threesixo`.
   *
   * @module     mod_threesixo/events
   * @copyright  2023 Jun Pataleta &lt;jun@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   *
   * @example &lt;caption&gt;Example of listening to a mod_threesixo event.&lt;/caption&gt;
   * import {eventTypes as threesixoEventTypes} from 'core_threesixo/events';
   *
   * document.addEventListener(threesixoEventTypes.itemsUpdated, e =&gt; {
   *     window.console.log(e.target); // The HTMLElement relating to the block whose content was updated.
   *     window.console.log(e.detail.instanceId); // The instanceId of the block that was updated.
   * });
   */
const eventTypes={itemsUpdated:"mod_threesixo/itemsUpdated"};_exports.eventTypes=eventTypes;_exports.notifyItemsUpdated=threesixtyId=&gt;(0,_event_dispatcher.dispatchEvent)(eventTypes.itemsUpdated,{threesixtyId:threesixtyId})}));
define("mod_threesixo/questionnaire",["exports","core/notification","core/ajax","core/str","core/modal_factory","core/modal_events","core/toast","core/pending"],(function(_exports,_notification,_ajax,_str,_modal_factory,_modal_events,_toast,_pending){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Questionnaire JS module.
   *
   * @module     mod_threesixo/questionnaire
   * @class      questionnaire
   * @copyright  2016 Jun Pataleta &lt;jun@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_notification=_interopRequireDefault(_notification),_ajax=_interopRequireDefault(_ajax),_modal_factory=_interopRequireDefault(_modal_factory),_modal_events=_interopRequireDefault(_modal_events),_pending=_interopRequireDefault(_pending);const selectors_commentItem='textarea[data-region="comment-item"]',selectors_questionnaireTable='[data-region="questionnaire"]',selectors_ratingOption="input[type=radio]",selectors_questionItem='[data-region="question-item"]',responses=[],itemIds=[];_exports.init=()=&gt;{const pending=new _pending.default("mod_threesixo/questionnaire-init");registerEvents();const questionItems=document.querySelectorAll(selectors_questionItem);questionItems.forEach((option=&gt;{itemIds.push(option.dataset.itemid),responses[option.dataset.itemid]=null}));const questionnaireTable=document.querySelector(selectors_questionnaireTable),fromUser=questionnaireTable.dataset.fromuserid,toUser=questionnaireTable.dataset.touserid,threesixtyId=questionnaireTable.dataset.threesixtyid;_ajax.default.call([{methodname:"mod_threesixo_get_responses",args:{threesixtyid:threesixtyId,fromuserid:fromUser,touserid:toUser}}])[0].then((result=&gt;(result.responses.forEach((response=&gt;{responses[response.item]=response.value;const responseItemId=parseInt(response.item);questionItems.forEach((questionItem=&gt;{if(parseInt(questionItem.getAttribute("data-itemid"))===responseItemId){const options=questionItem.querySelectorAll(selectors_ratingOption);if(options.length)options.forEach((option=&gt;{option.value===response.value&amp;&amp;handleOptionActivation(option)}));else{const commentTextArea=questionItem.querySelector(selectors_commentItem);commentTextArea&amp;&amp;(commentTextArea.value=response.value)}}}))})),!0))).then(pending.resolve).catch(_notification.default.exception)};const registerEvents=()=&gt;{document.addEventListener("change",(e=&gt;{const ratingOption=e.target.closest(selectors_ratingOption);ratingOption&amp;&amp;ratingOption.checked&amp;&amp;handleOptionActivation(ratingOption)})),document.addEventListener("click",(e=&gt;{const ratingOption=e.target.closest(selectors_ratingOption);if(ratingOption){const ratingOptionLabel=ratingOption.closest("label");ratingOptionLabel&amp;&amp;ratingOptionLabel.classList.add("focus")}})),document.addEventListener("blur",(e=&gt;{const ratingOption=e.target.closest(selectors_ratingOption);if(ratingOption){const ratingOptionLabel=ratingOption.closest("label");ratingOptionLabel&amp;&amp;ratingOptionLabel.classList.remove("focus")}}));document.getElementById("save-feedback").addEventListener("click",(e=&gt;{e.preventDefault(),saveResponses(!1)}));document.getElementById("submit-feedback").addEventListener("click",(e=&gt;{e.preventDefault(),saveResponses(!0)}))},handleOptionActivation=ratingOption=&gt;{const pending=new _pending.default("mod_threesixo:handleOptionActivation"),optionGroup=ratingOption.closest(selectors_questionItem),itemId=optionGroup.getAttribute("data-itemid");optionGroup.querySelectorAll(selectors_ratingOption).forEach((option=&gt;{const optionLabel=option.nextElementSibling;optionLabel.classList.contains("btn-success")&amp;&amp;(optionLabel.classList.toggle("btn-success",!1),optionLabel.classList.toggle("btn-secondary",!0),option.checked=!1)}));const selectedLabel=ratingOption.nextElementSibling;selectedLabel.classList.remove("btn-secondary"),selectedLabel.classList.add("btn-success"),ratingOption.checked=!0,responses[itemId]=ratingOption.value,pending.resolve()},saveResponses=finalise=&gt;{document.querySelectorAll(selectors_commentItem).forEach((comment=&gt;{responses[comment.dataset.itemid]=comment.value.trim()}));const questionnaireTable=document.querySelector(selectors_questionnaireTable),toUser=parseInt(questionnaireTable.dataset.touserid),toUserFullname=questionnaireTable.dataset.tousername,threesixtyId=parseInt(questionnaireTable.dataset.threesixtyid);if(parseInt(questionnaireTable.dataset.anonymous)&amp;&amp;finalise){const messageStrings=[{key:"finaliseanonymousfeedback",component:"mod_threesixo"},{key:"confirmfinaliseanonymousfeedback",component:"mod_threesixo",param:{name:toUserFullname}}];(0,_str.get_strings)(messageStrings,"mod_threesixo").then((messages=&gt;showConfirmationDialogue(messages[0],messages[1],threesixtyId,toUser,responses,finalise))).catch(_notification.default.exception)}else submitResponses(threesixtyId,toUser,responses,finalise)},submitResponses=(threesixtyId,toUser,responses,finalise)=&gt;{const pending=new _pending.default("mod_threesixo/submit-responses");let redirectUrl=null;const responsesToSubmit=[];itemIds.forEach((itemId=&gt;{responsesToSubmit.push({item:itemId,value:responses[itemId]})})),_ajax.default.call([{methodname:"mod_threesixo_save_responses",args:{threesixtyid:threesixtyId,touserid:toUser,responses:responsesToSubmit,complete:finalise}}])[0].then((response=&gt;response.result?(redirectUrl=response.redirurl,(0,_str.get_string)("responsessaved","mod_threesixo")):(0,_str.get_string)("errorresponsesavefailed","mod_threesixo"))).then((message=&gt;!!finalise||(0,_toast.add)(message,{}))).then((()=&gt;{if(pending.resolve(),finalise&amp;&amp;redirectUrl){const form=document.getElementById("questionnaire");document.getElementById("feedback-submitted").value=1,form.submit()}return!0})).catch(_notification.default.exception)},showConfirmationDialogue=async(title,confirmationMessage,threesixtyId,toUser,responses,finalise)=&gt;{const confirmButtonText=await(0,_str.get_string)("finalise","mod_threesixo"),confirmModal=await _modal_factory.default.create({title:title,body:confirmationMessage,large:!0,type:_modal_factory.default.types.SAVE_CANCEL});confirmModal.setSaveButtonText(confirmButtonText),confirmModal.show(),confirmModal.getRoot().on(_modal_events.default.hidden,(()=&gt;{confirmModal.setBody("")})),confirmModal.getRoot().on(_modal_events.default.save,(()=&gt;{submitResponses(threesixtyId,toUser,responses,finalise)}))}}));
define("mod_threesixo/question_bank",["exports","core/templates","core/notification","core/ajax","core/str","core/modal_factory","core/modal_events","core/pending","mod_threesixo/events","core/checkbox-toggleall"],(function(_exports,templates,notification,ajax,_str,_modal_factory,_modal_events,_pending,_events,CheckboxToggleAll){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}
/**
   * AMD code for the Question Bank.
   *
   * The question bank dialogue contains all the questions that can be added to the 360 feedback activity.
   * It also serves as the interface where questions can be added, edited, or even removed permanently from the question bank.
   *
   * @module     mod_threesixo/question_bank
   * @class      question_bank
   * @copyright  2016 Jun Pataleta &lt;jun@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,templates=_interopRequireWildcard(templates),notification=_interopRequireWildcard(notification),ajax=_interopRequireWildcard(ajax),_modal_factory=_interopRequireDefault(_modal_factory),_modal_events=_interopRequireDefault(_modal_events),_pending=_interopRequireDefault(_pending),CheckboxToggleAll=_interopRequireWildcard(CheckboxToggleAll);const SELECTORS_PICK_ALL="#pick-all",SELECTORS_ADD_QUESTION="#btn-question-bank-add",SELECTORS_QUESTION_CHECKBOX=".question-checkbox",SELECTORS_DELETE_QUESTION=".delete-question-button",SELECTORS_EDIT_QUESTION=".edit-question-button";let selectedQuestionsOld,selectedQuestions,threeSixtyId,questionTypes,questions=[];function checkQuestions(questions){for(const i in questions){const question=questions[i];-1!==selectedQuestions.indexOf(questions[i].id)&amp;&amp;(question.checked=!0)}return questions}const displayInputDialogue=function(threesixtyId,questionId){(0,_str.get_string)("addanewquestion","mod_threesixo").then((function(title){const data={threesixtyid:threesixtyId};if(questionId){data.questionid=questionId;for(const i in questions){const question=questions[i];if(question.id===questionId){data.question=question.question,data.type=question.type;break}}}data.questionTypes=function(selectedId){const questionTypeOptions=[];for(const key in questionTypes){if(!questionTypes.hasOwnProperty(key))continue;const questionType={typeVal:key,typeName:questionTypes[key]};void 0!==selectedId&amp;&amp;key===selectedId&amp;&amp;(questionType.selected=!0),questionTypeOptions.push(questionType)}return questionTypeOptions}(data.type);return function(dialogueTitle,bodyTemplate){const pendingPromise=new _pending.default("mod_threesixo/question_input");_modal_factory.default.create({type:_modal_factory.default.types.SAVE_CANCEL,title:dialogueTitle,body:bodyTemplate,large:!0}).then((function(modal){return modal.show(),modal.getRoot().on(_modal_events.default.bodyRendered,(function(){const questionInput=document.getElementById("question-input");questionInput&amp;&amp;questionInput.focus()})),modal.getRoot().on(_modal_events.default.hidden,(function(){modal.destroy()})),modal.getRoot().on(_modal_events.default.save,(()=&gt;{const questionInput=document.getElementById("question-input"),question=questionInput.value.trim();if(!question)return question.value="",questionInput.form.classList.add("was-validated"),questionInput.classList.add("is-invalid"),questionInput.focus(),!1;const data={question:question,type:document.getElementById("question-type-select").value,threesixtyid:document.getElementById("threesixtyid").value};let method="mod_threesixo_add_question";const questionId=document.getElementById("question-id").value;return questionId&amp;&amp;(method="mod_threesixo_update_question",data.id=questionId),ajax.call([{methodname:method,args:data}])[0].then((function(){return refreshQuestionsList()})).catch(notification.exception)})),!0})).then((()=&gt;pendingPromise.resolve())).catch(notification.exception)}(title,templates.render("mod_threesixo/item_edit",data))})).catch(notification.exception)};const updateItemSelection=(questionId,isSelected)=&gt;{if(isSelected){-1===selectedQuestions.indexOf(questionId)&amp;&amp;selectedQuestions.push(questionId)}else{const index=selectedQuestions.indexOf(questionId);index&gt;-1&amp;&amp;selectedQuestions.splice(index,1)}},registerEvents=function(){document.addEventListener("click",(e=&gt;{if(e.target.closest(SELECTORS_PICK_ALL)){document.querySelectorAll(SELECTORS_QUESTION_CHECKBOX).forEach((checkbox=&gt;{const questionId=parseInt(checkbox.dataset.questionid);updateItemSelection(questionId,checkbox.checked)}))}else if(e.target.closest(SELECTORS_QUESTION_CHECKBOX)){const questionCheckbox=e.target.closest(SELECTORS_QUESTION_CHECKBOX),questionId=parseInt(questionCheckbox.dataset.questionid);updateItemSelection(questionId,questionCheckbox.checked)}else if(e.target.closest(SELECTORS_EDIT_QUESTION)){e.preventDefault();const editQuestionButton=e.target.closest(SELECTORS_EDIT_QUESTION),threesixtyId=parseInt(editQuestionButton.dataset.threesixtyid),questionId=parseInt(editQuestionButton.dataset.questionid);displayInputDialogue(threesixtyId,questionId)}else if(e.target.closest(SELECTORS_DELETE_QUESTION)){e.preventDefault();const deleteButton=e.target.closest(SELECTORS_DELETE_QUESTION),threesixtyId=deleteButton.dataset.threesixtyid;!function(questionId,threesixtyId){(0,_str.get_string)("deletequestion","mod_threesixo").then((function(title){return _modal_factory.default.create({title:title,body:(0,_str.get_string)("confirmquestiondeletion","mod_threesixo"),type:_modal_factory.default.types.SAVE_CANCEL})})).then((function(modal){return modal.getRoot().on(_modal_events.default.save,(function(){ajax.call([{methodname:"mod_threesixo_delete_question",args:{id:questionId,threesixtyid:threesixtyId}}])[0].then((function(){return refreshQuestionsList()})).catch(notification.exception)})),modal.getRoot().on(_modal_events.default.hidden,(()=&gt;{modal.destroy()})),modal.show()})).catch(notification.exception)}(deleteButton.dataset.questionid,threesixtyId)}else if(e.target.closest(SELECTORS_ADD_QUESTION)){e.preventDefault();const id=e.target.closest(SELECTORS_ADD_QUESTION).dataset.threesixtyid;displayInputDialogue(id,null)}}))};function refreshQuestionsList(){ajax.call([{methodname:"mod_threesixo_get_questions",args:{}}])[0].then((response=&gt;{questions=response.questions;const data={pickerMode:threeSixtyId,questions:checkQuestions(questions)};return templates.render("mod_threesixo/question_list",data)})).then((compiledSource=&gt;{const questionListWrapper=document.querySelector("#questionListWrapper");return questionListWrapper&amp;&amp;(questionListWrapper.innerHTML=compiledSource),null})).catch(notification.exception)}function renderQuestionBank(){const context={pickerMode:threeSixtyId};ajax.call([{methodname:"mod_threesixo_get_questions",args:{}}])[0].then((function(response){return questions=response.questions,context.questions=checkQuestions(questions),templates.render("mod_threesixo/question_bank",context)})).then((questionBankTemplate=&gt;(0,_str.get_string)("labelpickfromquestionbank","mod_threesixo").then((title=&gt;function(title,questionBankTemplate){const pendingPromise=new _pending.default("mod_threesixo/question_bank");_modal_factory.default.create({type:_modal_factory.default.types.SAVE_CANCEL,title:title,body:questionBankTemplate,large:!0}).then((function(modal){const modalRoot=modal.getRoot();return modalRoot.on(_modal_events.default.hidden,(function(){modal.destroy()})),modalRoot.on(_modal_events.default.save,(function(){let changed=!1;if(selectedQuestionsOld.forEach((questionId=&gt;{-1===selectedQuestions.indexOf(questionId)&amp;&amp;(changed=!0)})),changed||selectedQuestions.forEach((questionId=&gt;{-1===selectedQuestionsOld.indexOf(questionId)&amp;&amp;(changed=!0)})),changed){const data={threesixtyid:threeSixtyId,questionids:selectedQuestions};ajax.call([{methodname:"mod_threesixo_set_items",args:data}])[0].then((function(){return(0,_events.notifyItemsUpdated)(threeSixtyId)})).catch(notification.exception)}else(0,_events.notifyItemsUpdated)(threeSixtyId)})),modal.show()})).then((()=&gt;pendingPromise.resolve())).catch(notification.exception)}(title,questionBankTemplate))))).then((()=&gt;(threeSixtyId&amp;&amp;CheckboxToggleAll.init(),!0))).catch(notification.exception)}var _default={init:function(id){threeSixtyId=id;const methodCalls=[{methodname:"mod_threesixo_get_question_types",args:{}}];threeSixtyId&amp;&amp;methodCalls.push({methodname:"mod_threesixo_get_items",args:{threesixtyid:threeSixtyId}});const promises=ajax.call(methodCalls);promises[0].then((function(response){return questionTypes=response.questiontypes,threeSixtyId?promises[1]:(renderQuestionBank(),null)})).then((response=&gt;{if(null===response)return!1;selectedQuestions=[],selectedQuestionsOld=[];const items=response.items;for(const i in items)items.hasOwnProperty(i)&amp;&amp;(selectedQuestions.push(items[i].questionid),selectedQuestionsOld.push(items[i].questionid));return renderQuestionBank(),!0})).catch(notification.exception),registerEvents()}};return _exports.default=_default,_exports.default}));
/**
 * AMD code for the frequently used comments chooser for the marking guide grading form.
 *
 * @module     mod_threesixo/view
 * @class      view
 * @copyright  2016 Jun Pataleta &lt;jun@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("mod_threesixo/view",["jquery","core/templates","core/notification","core/ajax","core/str","core/modal_factory","core/modal_events"],(function($,Templates,notification,ajax,Str,ModalFactory,ModalEvents){var threesixtyid,ACTIONS_DECLINE_FEEDBACK='[data-action="decline-feedback"]',ACTIONS_UNDO_DECLINE='[data-action="undo-decline"]';function refreshParticipantsList(){var promises=ajax.call([{methodname:"mod_threesixo_data_for_participant_list",args:{threesixtyid:threesixtyid}}]);$.when(promises[0]).then((function(response){return Templates.render("mod_threesixo/list_participants",response)})).done((function(compiledSource,js){$('[data-region="participantlist"]').replaceWith(compiledSource),Templates.runTemplateJS(js)})).fail(notification.exception)}var view=function(id){threesixtyid=id,this.registerEvents()};return view.prototype.registerEvents=function(){$(ACTIONS_DECLINE_FEEDBACK).click((function(e){e.preventDefault();var context={statusid:$(this).data("statusid"),name:$(this).data("name")},declineTemplatePromise=Templates.render("mod_threesixo/decline_feedback",context),titlePromise=Str.get_string("declinefeedback","mod_threesixo");$.when(titlePromise).then((function(title){return ModalFactory.create({title:title,body:declineTemplatePromise,large:!0,type:ModalFactory.types.SAVE_CANCEL})})).done((function(modal){modal.show(),modal.getRoot().on(ModalEvents.hidden,(function(){modal.destroy()})),modal.getRoot().on(ModalEvents.save,(function(){var data={statusid:$("#decline-statusid").val(),declinereason:$("#decline-reason").val().trim()};ajax.call([{methodname:"mod_threesixo_decline_feedback",args:data}])[0].done((function(){refreshParticipantsList()})).fail(notification.exception)}))})).fail(notification.exception)})),$(ACTIONS_UNDO_DECLINE).click((function(e){e.preventDefault();var data={statusid:$(this).data("statusid")};ajax.call([{methodname:"mod_threesixo_undo_decline",args:data}])[0].done((function(){refreshParticipantsList()})).fail(notification.exception)}))},view}));
define("mod_threesixo/edit_items",["exports","jquery","core/templates","core/notification","core/ajax","mod_threesixo/question_bank","mod_threesixo/events","core/toast","core/str","core/pending"],(function(_exports,_jquery,Templates,Notification,_ajax,Bank,_events,_toast,_str,_pending){function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_jquery=_interopRequireDefault(_jquery),Templates=_interopRequireWildcard(Templates),Notification=_interopRequireWildcard(Notification),_ajax=_interopRequireDefault(_ajax),Bank=_interopRequireWildcard(Bank),_pending=_interopRequireDefault(_pending);const ACTIONS_DELETE='[data-action="delete-item"]',ACTIONS_MOVE_UP='[data-action="move-item-up"]',ACTIONS_MOVE_DOWN='[data-action="move-item-down"]',ACTIONS_PICK_QUESTION="#btn-question-bank";return _exports.default=class{constructor(threesixtyid){var obj,key,value;value=void 0,(key="threesixtyId")in(obj=this)?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,this.threesixtyId=threesixtyid,this.registerEvents()}refreshItemList(){const pending=new _pending.default("mod_threesixo/refreshItems"),editItems=this;_ajax.default.call([{methodname:"mod_threesixo_get_items",args:{threesixtyid:editItems.threesixtyId}}])[0].then((function(response){const context={threesixtyid:editItems.threesixtyId},items=[],itemCount=response.items.length;return response.items.forEach((value=&gt;{const item=value;item.deletebutton=!0,item.moveupbutton=!1,item.movedownbutton=!1,item.type=value.typetext,itemCount&gt;1&amp;&amp;(1===value.position?item.movedownbutton=!0:value.position===itemCount?item.moveupbutton=!0:value.position&gt;1&amp;&amp;value.position&lt;itemCount&amp;&amp;(item.moveupbutton=!0,item.movedownbutton=!0)),items.push(item)})),context.allitems=items,Templates.render("mod_threesixo/list_360_items",context)})).then((compiledSource=&gt;(document.querySelector('[data-region="itemlist"]').outerHTML=compiledSource,pending.resolve()))).catch(Notification.exception)}callItemAction(action,itemId,successMessage){const threesixtyId=this.threesixtyId;_ajax.default.call([{methodname:action,args:{itemid:itemId}}])[0].then((response=&gt;{if(response.result)return successMessage;const warnings=response.warnings.join((0,_jquery.default)("&lt;br/&gt;"));throw new Error(warnings)})).then((message=&gt;((0,_events.notifyItemsUpdated)(threesixtyId),(0,_toast.add)(message,{})))).catch(Notification.exception)}registerEvents(){const editItems=this;document.addEventListener("click",(e=&gt;{let actionButton="",action="",successMessage="";if(e.target.closest(ACTIONS_DELETE)?(actionButton=e.target.closest(ACTIONS_DELETE),action="mod_threesixo_delete_item",successMessage=(0,_str.get_string)("itemdeleted","mod_threesixo")):e.target.closest(ACTIONS_MOVE_UP)?(actionButton=e.target.closest(ACTIONS_MOVE_UP),action="mod_threesixo_move_item_up",successMessage=(0,_str.get_string)("itemmovedup","mod_threesixo")):e.target.closest(ACTIONS_MOVE_DOWN)?(actionButton=e.target.closest(ACTIONS_MOVE_DOWN),action="mod_threesixo_move_item_down",successMessage=(0,_str.get_string)("itemmoveddown","mod_threesixo")):e.target.closest(ACTIONS_PICK_QUESTION)&amp;&amp;(e.preventDefault(),Bank.init(editItems.threesixtyId)),action){e.preventDefault();const tooltipId=actionButton.getAttribute("aria-describedby");if(tooltipId){const tooltip=document.querySelector("#".concat(tooltipId));tooltip&amp;&amp;tooltip.remove()}const itemId=actionButton.dataset.itemid;editItems.callItemAction(action,itemId,successMessage)}})),document.addEventListener(_events.eventTypes.itemsUpdated,(function(){editItems.refreshItemList()}))}},_exports.default}));
define('mod_turnitintooltwo/modal_migration_tool', ["jquery","core/notification","core/custom_interaction_events","core/modal","core/modal_registry","core/modal_events","core/config","mod_turnitintooltwo/migration_tool_migrate"],function(a,b,c,d,e,f,g,h){var i=!1,j={MIGRATE_BUTTON:'[data-action="migrate-assignment"]',CANCEL_BUTTON:'[data-action="cancel"]'},k=function(a){d.call(this,a)};return k.TYPE="mod_turnitintooltwo-migration_tool",k.prototype=Object.create(d.prototype),k.prototype.constructor=k,k.prototype.registerEventListeners=function(){d.prototype.registerEventListeners.call(this),this.getModal().on(c.events.activate,j.MIGRATE_BUTTON,function(){a(".asktomigrate").hide(),a(".migrating").show(),h.migration_tool_migrate(a("#migrate_type").data("courseid"),a("#migrate_type").data("turnitintoolid"))}.bind(this)),this.getModal().on(c.events.activate,j.CANCEL_BUTTON,function(b,c){var d=a.Event(f.cancel);this.getRoot().trigger(d,this),d.isDefaultPrevented()||(this.hide(),c.originalEvent.preventDefault())}.bind(this))},i||(e.register(k.TYPE,k,"mod_turnitintooltwo/modal_migration_tool"),i=!0),k});
define('mod_turnitintooltwo/migration_tool_launch', ["jquery","core/templates","core/modal_factory","core/modal_events","mod_turnitintooltwo/modal_migration_tool","mod_turnitintooltwo/migration_tool_migrate"],function(a,b,c,d,e,f){return{migration_tool_launch:function(){a.ajax({dataType:"json",type:"POST",url:M.cfg.wwwroot+"/mod/turnitintooltwo/ajax.php",data:{action:"check_migrated",turnitintoolid:a("#migrate_type").data("turnitintoolid"),sesskey:M.cfg.sesskey},success:function(b){b.migrated===!0?window.location.href=M.cfg.wwwroot+"/mod/turnitintooltwo/view.php?id="+b.v2id:c.create({type:e.TYPE}).then(function(b){b.show(),2===a("#migrate_type").data("migratetype")&amp;&amp;(a(".asktomigrate").hide(),a(".migrating").show(),f.migration_tool_migrate(a("#migrate_type").data("courseid"),a("#migrate_type").data("turnitintoolid")))})}})}}});
define('mod_turnitintooltwo/migration_tool_migrate', ["jquery"],function(a){return{migration_tool_migrate:function(b,c){a.ajax({dataType:"json",type:"POST",url:M.cfg.wwwroot+"/mod/turnitintooltwo/ajax.php",data:{action:"begin_migration",courseid:b,turnitintoolid:c,sesskey:M.cfg.sesskey},success:function(a){window.location.href=M.cfg.wwwroot+"/mod/turnitintooltwo/view.php?id="+a.id},error:function(b){var c=b.responseJSON;a("#turnitintool_style").prepend('&lt;div id="full-error" class="box generalbox noticebox"&gt;'+c.error+" "+c.message+"&lt;/div&gt;")}})}}});
/**
 * Additional javascript for the Workshop module form.
 *
 * @module      mod_workshop/modform
 * @copyright   The Open University 2018
 * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("mod_workshop/modform",["jquery"],(function($){var submissionTypes={text:{available:null,required:null,requiredHidden:null},file:{available:null,required:null,requiredHidden:null}};function checkAvailability(checkUnavailable,checkAvailable){checkUnavailable.available.prop("checked")||(checkUnavailable.required.prop("disabled",!0),checkUnavailable.required.prop("checked",!1),checkAvailable.available.prop("checked")&amp;&amp;(checkAvailable.required.prop("disabled",!0),checkAvailable.required.prop("checked",!0),checkAvailable.requiredHidden.val(1)))}function enableRequired(submissionType){submissionType.required.prop("disabled",!1),submissionType.required.prop("checked",!1),submissionType.requiredHidden.val(0)}function submissionTypeChanged(){checkAvailability(submissionTypes.file,submissionTypes.text),checkAvailability(submissionTypes.text,submissionTypes.file),submissionTypes.text.available.prop("checked")&amp;&amp;submissionTypes.file.available.prop("checked")&amp;&amp;(enableRequired(submissionTypes.text),enableRequired(submissionTypes.file))}return{init:function(){submissionTypes.text.available=$("#id_submissiontypetextavailable"),submissionTypes.text.required=$("#id_submissiontypetextrequired"),submissionTypes.text.requiredHidden=$('input[name="submissiontypetextrequired"][type="hidden"]'),submissionTypes.file.available=$("#id_submissiontypefileavailable"),submissionTypes.file.required=$("#id_submissiontypefilerequired"),submissionTypes.file.requiredHidden=$('input[name="submissiontypefilerequired"][type="hidden"]'),submissionTypes.text.available.on("change",submissionTypeChanged),submissionTypes.file.available.on("change",submissionTypeChanged),submissionTypeChanged()}}}));
/**
 * Sets the equal height to the user plan widget boxes.
 *
 * @module      mod_workshop/workshopview
 * @category    output
 * @copyright   Loc Nguyen &lt;loc.nguyendinh@harveynash.vn&gt;
 * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("mod_workshop/workshopview",["jquery"],(function($){function equalHeight(group){var tallest=0;group.height("auto"),group.each((function(){var thisHeight=$(this).height();thisHeight&gt;tallest&amp;&amp;(tallest=thisHeight)})),group.height(tallest)}return{init:function(){var $dt=$(".path-mod-workshop .userplan dt"),$dd=$(".path-mod-workshop .userplan dd");equalHeight($dt),equalHeight($dd),$(window).on("resize",(function(){equalHeight($dt),equalHeight($dd)}))}}}));
define("enrol_lti/tool_endpoints",["exports","core/copy_to_clipboard"],(function(_exports,_copy_to_clipboard){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0;
/**
   * Module supporting the dynamic and manual registration URLs in the tool registration admin setting.
   *
   * @module     enrol_lti/tool_endpoints
   * @copyright  2021 Jake Dallimore &lt;jrhdallimore@gmail.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */
const SELECTORS_URL_VALUE='[id^="lti_tool_endpoint_url_"]',focusURLHandler=event=&gt;{const triggerElement=event.target.closest(SELECTORS_URL_VALUE);null!==triggerElement&amp;&amp;(event.preventDefault(),triggerElement.select())};_exports.init=()=&gt;{document.addEventListener("focusin",focusURLHandler)}}));
define("enrol_lti/content_select",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0;_exports.init=()=&gt;{document.addEventListener("change",(e=&gt;{if(e.target.matches("input[type='checkbox'][name^='modules']")){const value=e.target.value,gradecheckbox=document.querySelector("input[type='checkbox'][name^='grades'][value='"+value+"']");gradecheckbox&amp;&amp;(gradecheckbox.checked=e.target.checked)}if(e.target.matches("input[type='checkbox'][name^='grades']")){const value=e.target.value,modcheckbox=document.querySelector("input[type='checkbox'][name^='modules'][value='"+value+"']");e.target.checked&amp;&amp;(modcheckbox.checked=!0)}}))}}));
define("enrol_manual/quickenrolment",["exports","core_table/dynamic","core/str","core/toast","core/config","core/fragment","core/modal_events","core/modal_factory","core/notification","jquery","core/pending","core/prefetch"],(function(_exports,DynamicTable,Str,Toast,_config,_fragment,_modal_events,_modal_factory,_notification,_jquery,_pending,_prefetch){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}
/**
   * Quick enrolment AMD module.
   *
   * @module     enrol_manual/quickenrolment
   * @copyright  2016 Damyon Wiese &lt;damyon@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,DynamicTable=_interopRequireWildcard(DynamicTable),Str=_interopRequireWildcard(Str),Toast=_interopRequireWildcard(Toast),_config=_interopRequireDefault(_config),_fragment=_interopRequireDefault(_fragment),_modal_events=_interopRequireDefault(_modal_events),_modal_factory=_interopRequireDefault(_modal_factory),_notification=_interopRequireDefault(_notification),_jquery=_interopRequireDefault(_jquery),_pending=_interopRequireDefault(_pending),_prefetch=_interopRequireDefault(_prefetch);const Selectors_cohortSelector="#id_cohortlist",Selectors_triggerButtons=".enrolusersbutton.enrol_manual_plugin [type='submit']",Selectors_unwantedHiddenFields="input[value='_qf__force_multiselect_submission']",Selectors_buttonWrapper='[data-region="wrapper"]',getBodyForContext=contextId=&gt;_fragment.default.loadFragment("enrol_manual","enrol_users_form",contextId,{}),registerEventListeners=contextId=&gt;{document.addEventListener("click",(e=&gt;{if(e.target.closest(Selectors_triggerButtons))return e.preventDefault(),void showModal((element=&gt;{const wrapper=element.closest(Selectors_buttonWrapper);return DynamicTable.getTableFromId(wrapper.dataset.tableUniqueid)})(e.target),contextId)}))},showModal=(dynamicTable,contextId)=&gt;{const pendingPromise=new _pending.default("enrol_manual/quickenrolment:showModal");return _modal_factory.default.create({type:_modal_factory.default.types.SAVE_CANCEL,large:!0,title:Str.get_string("enrolusers","enrol_manual"),body:getBodyForContext(contextId),buttons:{save:Str.get_string("enrolusers","enrol_manual")}}).then((modal=&gt;(modal.getRoot().on(_modal_events.default.save,(e=&gt;{e.preventDefault(),modal.getRoot().find("form").submit()})),modal.getRoot().on("submit","form",(e=&gt;{e.preventDefault(),submitFormAjax(dynamicTable,modal)})),modal.getRoot().on(_modal_events.default.hidden,(()=&gt;{modal.destroy()})),modal.show(),modal))).then((modal=&gt;Promise.all([modal,modal.getBodyPromise()]))).then((_ref=&gt;{let[modal,body]=_ref;return body.get(0).querySelector(Selectors_cohortSelector)?modal.setSaveButtonText(Str.get_string("enroluserscohorts","enrol_manual")).then((()=&gt;modal)):modal})).then((modal=&gt;(pendingPromise.resolve(),modal))).catch(_notification.default.exception)},submitFormAjax=(dynamicTable,modal)=&gt;{const form=modal.getRoot().find("form");form.get(0).querySelectorAll(Selectors_unwantedHiddenFields).forEach((hiddenField=&gt;hiddenField.remove())),modal.hide(),modal.destroy(),_jquery.default.ajax("".concat(_config.default.wwwroot,"/enrol/manual/ajax.php?").concat(form.serialize()),{type:"GET",processData:!1,contentType:"application/json"}).then((response=&gt;{if(response.error)throw new Error(response.error);return response.count})).then((count=&gt;Promise.all([Str.get_string("totalenrolledusers","enrol",count),DynamicTable.refreshTableContent(dynamicTable)]))).then((_ref2=&gt;{let[notificationBody]=_ref2;return notificationBody})).then((notificationBody=&gt;Toast.add(notificationBody))).catch((error=&gt;{_notification.default.addNotification({message:error.message,type:"error"})}))};_exports.init=_ref3=&gt;{let{contextid:contextid}=_ref3;registerEventListeners(contextid),_prefetch.default.prefetchStrings("enrol_manual",["enrolusers","enroluserscohorts"]),_prefetch.default.prefetchString("enrol","totalenrolledusers")}}));
/**
 * Potential user selector module.
 *
 * @module     enrol_manual/form-potential-user-selector
 * @copyright  2016 Damyon Wiese
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("enrol_manual/form-potential-user-selector",["jquery","core/ajax","core/templates","core/str"],(function($,Ajax,Templates,Str){return{processResults:function(selector,results){var users=[];return $.isArray(results)?($.each(results,(function(index,user){users.push({value:user.id,label:user._label})})),users):results},transport:function(selector,query,success,failure){var courseid=$(selector).attr("courseid"),userfields=$(selector).attr("userfields").split(",");void 0===courseid&amp;&amp;(courseid="1");var enrolid=$(selector).attr("enrolid");void 0===enrolid&amp;&amp;(enrolid="");var perpage=parseInt($(selector).attr("perpage"));isNaN(perpage)&amp;&amp;(perpage=100),Ajax.call([{methodname:"core_enrol_get_potential_users",args:{courseid:courseid,enrolid:enrolid,search:query,searchanywhere:!0,page:0,perpage:perpage+1}}])[0].then((function(results){var promises=[],i=0;if(results.length&lt;=perpage){const profileRegex=/^profile_field_(.*)$/;return $.each(results,(function(index,user){var ctx=user,identity=[];$.each(userfields,(function(i,k){const result=profileRegex.exec(k);result?user.customfields&amp;&amp;user.customfields.forEach((function(customfield){customfield.shortname===result[1]&amp;&amp;(ctx.hasidentity=!0,identity.push(customfield.value))})):void 0!==user[k]&amp;&amp;""!==user[k]&amp;&amp;(ctx.hasidentity=!0,identity.push(user[k]))})),ctx.identity=identity.join(", "),promises.push(Templates.render("enrol_manual/form-user-selector-suggestion",ctx))})),$.when.apply($.when,promises).then((function(){var args=arguments;$.each(results,(function(index,user){user._label=args[i],i++})),success(results)}))}return Str.get_string("toomanyuserstoshow","core","&gt;"+perpage).then((function(toomanyuserstoshow){success(toomanyuserstoshow)}))})).fail(failure)}}}));
/**
 * Controls the notification popover in the nav bar.
 *
 * See template: message_popup/notification_popover
 *
 * @module     message_popup/notification_popover_controller
 * @class      notification_popover_controller
 * @copyright  2016 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("message_popup/notification_popover_controller",["jquery","core/ajax","core/templates","core/str","core/url","core/notification","core/custom_interaction_events","core/popover_region_controller","message_popup/notification_repository","message_popup/notification_area_events"],(function($,Ajax,Templates,Str,URL,DebugNotification,CustomEvents,PopoverController,NotificationRepo,NotificationAreaEvents){var SELECTORS_MARK_ALL_READ_BUTTON='[data-action="mark-all-read"]',SELECTORS_ALL_NOTIFICATIONS_CONTAINER='[data-region="all-notifications"]',SELECTORS_NOTIFICATION='[data-region="notification-content-item-container"]',SELECTORS_UNREAD_NOTIFICATION='[data-region="notification-content-item-container"].unread',SELECTORS_NOTIFICATION_LINK='[data-action="content-item-link"]',SELECTORS_COUNT_CONTAINER='[data-region="count-container"]',NotificationPopoverController=function(element){PopoverController.call(this,element),this.markAllReadButton=this.root.find(SELECTORS_MARK_ALL_READ_BUTTON),this.unreadCount=0,this.lastQueried=0,this.userId=this.root.attr("data-userid"),this.container=this.root.find(SELECTORS_ALL_NOTIFICATIONS_CONTAINER),this.limit=20,this.offset=0,this.loadedAll=!1,this.initialLoad=!1,this.unreadCount=this.root.find(SELECTORS_COUNT_CONTAINER).html()};return(NotificationPopoverController.prototype=Object.create(PopoverController.prototype)).constructor=NotificationPopoverController,NotificationPopoverController.prototype.updateButtonAriaLabel=function(){this.isMenuOpen()?Str.get_string("hidenotificationwindow","message").done(function(string){this.menuToggle.attr("aria-label",string)}.bind(this)):this.unreadCount?Str.get_string("shownotificationwindowwithcount","message",this.unreadCount).done(function(string){this.menuToggle.attr("aria-label",string)}.bind(this)):Str.get_string("shownotificationwindownonew","message").done(function(string){this.menuToggle.attr("aria-label",string)}.bind(this))},NotificationPopoverController.prototype.getContent=function(){return this.container},NotificationPopoverController.prototype.getOffset=function(){return this.offset},NotificationPopoverController.prototype.incrementOffset=function(){this.offset+=this.limit},NotificationPopoverController.prototype.hasDoneInitialLoad=function(){return this.initialLoad},NotificationPopoverController.prototype.hasLoadedAllContent=function(){return this.loadedAll},NotificationPopoverController.prototype.setLoadedAllContent=function(val){this.loadedAll=val},NotificationPopoverController.prototype.renderUnreadCount=function(){var element=this.root.find(SELECTORS_COUNT_CONTAINER);this.unreadCount?(element.text(this.unreadCount),element.removeClass("hidden")):element.addClass("hidden")},NotificationPopoverController.prototype.hideUnreadCount=function(){this.root.find(SELECTORS_COUNT_CONTAINER).addClass("hidden")},NotificationPopoverController.prototype.getNotificationElement=function(id){var element=this.root.find(SELECTORS_NOTIFICATION+'[data-id="'+id+'"]');return 1==element.length?element:null},NotificationPopoverController.prototype.renderNotifications=function(notifications,container){var promises=[];return $.each(notifications,function(index,notification){var offset=this.getOffset()-this.limit;notification.viewmoreurl=URL.relativeUrl("/message/output/popup/notifications.php",{notificationid:notification.id,offset:offset});var notificationurlparams={notificationid:notification.id};notification.contexturl=URL.relativeUrl("message/output/popup/mark_notification_read.php",notificationurlparams);var promise=Templates.render("message_popup/notification_content_item",notification).then((function(html,js){return{html:html,js:js}}));promises.push(promise)}.bind(this)),$.when.apply($,promises).then((function(){$.each(arguments,(function(index,argument){container.append(argument.html),Templates.runTemplateJS(argument.js)}))}))},NotificationPopoverController.prototype.loadMoreNotifications=function(){if(this.isLoading||this.hasLoadedAllContent())return $.Deferred().resolve();this.startLoading();var request={limit:this.limit,offset:this.getOffset(),useridto:this.userId},container=this.getContent();return NotificationRepo.query(request).then(function(result){var notifications=result.notifications;return this.unreadCount=result.unreadcount,this.lastQueried=Math.floor((new Date).getTime()/1e3),this.setLoadedAllContent(!notifications.length||notifications.length&lt;this.limit),this.initialLoad=!0,this.updateButtonAriaLabel(),!!notifications.length&amp;&amp;(this.incrementOffset(),this.renderNotifications(notifications,container))}.bind(this)).always(function(){this.stopLoading()}.bind(this))},NotificationPopoverController.prototype.markAllAsRead=function(){this.markAllReadButton.addClass("loading");var request={useridto:this.userId,timecreatedto:this.lastQueried};return NotificationRepo.markAllAsRead(request).then(function(){this.unreadCount=0,this.root.find(SELECTORS_UNREAD_NOTIFICATION).removeClass("unread")}.bind(this)).always(function(){this.markAllReadButton.removeClass("loading")}.bind(this))},NotificationPopoverController.prototype.registerEventListeners=function(){CustomEvents.define(this.root,[CustomEvents.events.activate]),this.root.on(CustomEvents.events.activate,SELECTORS_MARK_ALL_READ_BUTTON,function(e,data){this.markAllAsRead(),e.stopPropagation(),data.originalEvent.preventDefault()}.bind(this)),this.root.on(CustomEvents.events.activate,SELECTORS_NOTIFICATION_LINK,function(e){var element=$(e.target).closest(SELECTORS_NOTIFICATION);element.hasClass("unread")&amp;&amp;(this.unreadCount--,element.removeClass("unread")),e.stopPropagation()}.bind(this)),this.root.on(this.events().menuOpened,function(){this.hideUnreadCount(),this.updateButtonAriaLabel(),this.hasDoneInitialLoad()||this.loadMoreNotifications()}.bind(this)),this.root.on(this.events().menuClosed,function(){this.renderUnreadCount(),this.updateButtonAriaLabel()}.bind(this)),this.root.on(this.events().startLoading,function(){this.getContent().attr("aria-busy","true")}.bind(this)),this.root.on(this.events().stopLoading,function(){this.getContent().attr("aria-busy","false")}.bind(this)),this.getContentContainer().on(CustomEvents.events.scrollBottom,function(){this.isLoading||this.hasLoadedAllContent()||this.loadMoreNotifications()}.bind(this)),CustomEvents.define(this.getContentContainer(),[CustomEvents.events.scrollLock]),$(document).on(NotificationAreaEvents.notificationShown,function(e,notification){if(!notification.read){var element=this.getNotificationElement(notification.id);element&amp;&amp;element.removeClass("unread"),this.unreadCount--,this.renderUnreadCount()}}.bind(this))},NotificationPopoverController}));
define("message_popup/notification_area_events",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0;return _exports.default={showNotification:"notification-area-events:showNotification",notificationShown:"notification-area-events:notificationShown"},_exports.default}));
/**
 * Controls the notification area on the notification page.
 *
 * @module     message_popup/notification_area_control_area
 * @copyright  2016 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("message_popup/notification_area_control_area",["jquery","core/templates","core/notification","core/custom_interaction_events","message_popup/notification_repository","message_popup/notification_area_events"],(function($,Templates,DebugNotification,CustomEvents,NotificationRepo,NotificationAreaEvents){var SELECTORS_CONTAINER='[data-region="notification-area"]',SELECTORS_CONTENT='[data-region="content"]',SELECTORS_NOTIFICATION='[data-region="notification-content-item-container"]',SELECTORS_CAN_RECEIVE_FOCUS='input:not([type="hidden"]), a[href], button, textarea, select, [tabindex]',TEMPLATES_NOTIFICATION="message_popup/notification_content_item",ControlArea=function(root,userId){this.root=$(root),this.container=this.root.closest(SELECTORS_CONTAINER),this.userId=userId,this.content=this.root.find(SELECTORS_CONTENT),this.offset=0,this.limit=20,this.initialLoad=!1,this.isLoading=!1,this.loadedAll=!1,this.notifications={},this.registerEventListeners()};return ControlArea.prototype.getRoot=function(){return this.root},ControlArea.prototype.getContainer=function(){return this.container},ControlArea.prototype.getUserId=function(){return this.userId},ControlArea.prototype.getContent=function(){return this.content},ControlArea.prototype.getOffset=function(){return this.offset},ControlArea.prototype.getLimit=function(){return this.limit},ControlArea.prototype.setOffset=function(value){this.offset=value},ControlArea.prototype.setLimit=function(value){this.limit=value},ControlArea.prototype.incrementOffset=function(){this.offset+=this.limit},ControlArea.prototype.startLoading=function(){this.isLoading=!0,this.getRoot().addClass("loading")},ControlArea.prototype.stopLoading=function(){this.isLoading=!1,this.getRoot().removeClass("loading")},ControlArea.prototype.hasDoneInitialLoad=function(){return this.initialLoad},ControlArea.prototype.hasLoadedAllContent=function(){return this.loadedAll},ControlArea.prototype.setLoadedAllContent=function(val){this.loadedAll=val},ControlArea.prototype.setCacheNotification=function(notification){this.notifications[notification.id]=notification},ControlArea.prototype.getCacheNotification=function(id){return this.notifications[id]},ControlArea.prototype.getNotificationElement=function(id){var element=this.getRoot().find(SELECTORS_NOTIFICATION+'[data-id="'+id+'"]');return 1==element.length?element:null},ControlArea.prototype.scrollNotificationIntoView=function(notificationElement){var position=notificationElement.position(),container=this.getRoot();if(position.top-container.scrollTop()&gt;container.innerHeight()){var height=notificationElement.outerHeight();height*=4;var scrollTo=position.top-height;container.scrollTop(scrollTo)}},ControlArea.prototype.showNotification=function(notificationElement){if("object"!=typeof notificationElement&amp;&amp;(notificationElement=this.getNotificationElement(notificationElement)),notificationElement&amp;&amp;notificationElement.length){this.getRoot().find(SELECTORS_NOTIFICATION).removeClass("selected"),notificationElement.addClass("selected").find(SELECTORS_CAN_RECEIVE_FOCUS).focus();var notificationId=notificationElement.attr("data-id"),notification=this.getCacheNotification(notificationId);this.scrollNotificationIntoView(notificationElement),this.getContainer().trigger(NotificationAreaEvents.showNotification,[$.extend({},notification)])}},ControlArea.prototype.markNotificationAsRead=function(notificationElement){return NotificationRepo.markAsRead(notificationElement.attr("data-id")).done((function(){notificationElement.removeClass("unread")}))},ControlArea.prototype.renderNotifications=function(notifications){var promises=[],container=this.getContent();return $.each(notifications,function(index,notification){var contextUrl=notification.contexturl;delete notification.contexturl;var promise=Templates.render(TEMPLATES_NOTIFICATION,notification).then(function(html,js){return notification.contexturl=contextUrl,this.setCacheNotification(notification),{html:html,js:js}}.bind(this));promises.push(promise)}.bind(this)),$.when.apply($,promises).then((function(){$.each(arguments,(function(index,argument){container.append(argument.html),Templates.runTemplateJS(argument.js)}))}))},ControlArea.prototype.loadMoreNotifications=function(){if(this.isLoading||this.hasLoadedAllContent())return $.Deferred().resolve();this.startLoading();var request={limit:this.getLimit(),offset:this.getOffset(),useridto:this.getUserId()};return this.initialLoad||(request.limit=this.getOffset()+this.getLimit(),request.offset=0),NotificationRepo.query(request).then(function(result){var notifications=result.notifications;return this.unreadCount=result.unreadcount,this.setLoadedAllContent(!notifications.length||notifications.length&lt;this.getLimit()),this.initialLoad=!0,!!notifications.length&amp;&amp;(this.incrementOffset(),this.renderNotifications(notifications))}.bind(this)).always(function(){this.stopLoading()}.bind(this))},ControlArea.prototype.registerEventListeners=function(){CustomEvents.define(this.getRoot(),[CustomEvents.events.activate,CustomEvents.events.scrollBottom,CustomEvents.events.scrollLock,CustomEvents.events.up,CustomEvents.events.down]),this.getRoot().on(CustomEvents.events.scrollBottom,function(){this.loadMoreNotifications()}.bind(this)),this.getRoot().on(CustomEvents.events.activate,SELECTORS_NOTIFICATION,function(e){var notificationElement=$(e.target).closest(SELECTORS_NOTIFICATION);this.showNotification(notificationElement)}.bind(this)),this.getRoot().on(CustomEvents.events.up,SELECTORS_NOTIFICATION,function(e,data){var notificationElement=$(e.target).closest(SELECTORS_NOTIFICATION);this.showNotification(notificationElement.prev()),data.originalEvent.preventDefault()}.bind(this)),this.getRoot().on(CustomEvents.events.down,SELECTORS_NOTIFICATION,function(e,data){var notificationElement=$(e.target).closest(SELECTORS_NOTIFICATION);this.showNotification(notificationElement.next()),data.originalEvent.preventDefault()}.bind(this)),this.getContainer().on(NotificationAreaEvents.notificationShown,function(e,notification){if(!notification.read){var element=this.getNotificationElement(notification.id);element&amp;&amp;this.markNotificationAsRead(element);var cachedNotification=this.getCacheNotification(notification.id);cachedNotification&amp;&amp;(cachedNotification.read=!0)}}.bind(this))},ControlArea}));
/**
 * Retrieves notifications from the server.
 *
 * @module     message_popup/notification_repository
 * @copyright  2016 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("message_popup/notification_repository",["core/ajax","core/notification"],(function(Ajax,Notification){return{query:function(args){void 0===args.limit&amp;&amp;(args.limit=20),void 0===args.offset&amp;&amp;(args.offset=0);var request={methodname:"message_popup_get_popup_notifications",args:args},promise=Ajax.call([request])[0];return promise.fail(Notification.exception),promise},countUnread:function(args){var request={methodname:"message_popup_get_unread_popup_notification_count",args:args},promise=Ajax.call([request])[0];return promise.fail(Notification.exception),promise},markAllAsRead:function(args){var request={methodname:"core_message_mark_all_notifications_as_read",args:args},promise=Ajax.call([request])[0];return promise.fail(Notification.exception),promise},markAsRead:function(id,timeread){var args={notificationid:id};timeread&amp;&amp;(args.timeread=timeread);var request={methodname:"core_message_mark_notification_read",args:args},promise=Ajax.call([request])[0];return promise.fail(Notification.exception),promise}}}));
/**
 * Controls the content area of the notification area on the
 * notification page.
 *
 * @module     message_popup/notification_area_content_area
 * @copyright  2016 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("message_popup/notification_area_content_area",["jquery","core/templates","core/notification","core/custom_interaction_events","message_popup/notification_repository","message_popup/notification_area_events"],(function($,Templates,DebugNotification,CustomEvents,NotificationRepo,NotificationAreaEvents){var SELECTORS={CONTAINER:'[data-region="notification-area"]',CONTENT:'[data-region="content"]',HEADER:'[data-region="header"]',FOOTER:'[data-region="footer"]',TOGGLE_MODE:'[data-action="toggle-mode"]'},TEMPLATES_HEADER="message_popup/notification_area_content_area_header",TEMPLATES_CONTENT="message_popup/notification_area_content_area_content",TEMPLATES_FOOTER="message_popup/notification_area_content_area_footer",ContentArea=function(root,userId){this.root=$(root),this.container=this.root.closest(SELECTORS.CONTAINER),this.userId=userId,this.header=this.root.find(SELECTORS.HEADER),this.content=this.root.find(SELECTORS.CONTENT),this.footer=this.root.find(SELECTORS.FOOTER),this.registerEventListeners()};return ContentArea.prototype.getRoot=function(){return this.root},ContentArea.prototype.getContainer=function(){return this.container},ContentArea.prototype.getUserId=function(){return this.userId},ContentArea.prototype.getHeader=function(){return this.header},ContentArea.prototype.getContent=function(){return this.content},ContentArea.prototype.getFooter=function(){return this.footer},ContentArea.prototype.show=function(){this.getContainer().addClass("show-content-area")},ContentArea.prototype.hide=function(){this.getContainer().removeClass("show-content-area")},ContentArea.prototype.setHeaderHTML=function(html){this.getHeader().empty().html(html)},ContentArea.prototype.setContentHTML=function(html){this.getContent().empty().html(html)},ContentArea.prototype.setFooterHTML=function(html){this.getFooter().empty().html(html)},ContentArea.prototype.showNotification=function(notification){var headerPromise=Templates.render(TEMPLATES_HEADER,notification).done(function(html){this.setHeaderHTML(html)}.bind(this)),contentPromise=Templates.render(TEMPLATES_CONTENT,notification).done(function(html){this.setContentHTML(html)}.bind(this)),footerPromise=Templates.render(TEMPLATES_FOOTER,notification).done(function(html){this.setFooterHTML(html)}.bind(this));return $.when(headerPromise,contentPromise,footerPromise).done(function(){this.show(),this.getContainer().trigger(NotificationAreaEvents.notificationShown,[notification])}.bind(this))},ContentArea.prototype.registerEventListeners=function(){CustomEvents.define(this.getRoot(),[CustomEvents.events.activate]),this.getRoot().on(CustomEvents.events.activate,SELECTORS.VIEW_TOGGLE,function(){this.hide()}.bind(this)),this.getContainer().on(NotificationAreaEvents.showNotification,function(e,notification){this.showNotification(notification)}.bind(this))},ContentArea}));
define("block_accessreview/module",["exports","core/ajax","core/templates","core/notification"],(function(_exports,_ajax,Templates,_notification){function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,Templates=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}
/**
   * Manager for the accessreview block.
   *
   * @module block_accessreview/module
   * @author      Max Larkin &lt;max@brickfieldlabs.ie&gt;
   * @copyright   2020 Brickfield Education Labs &lt;max@brickfieldlabs.ie&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */(Templates);let toggleState=!0;const renderTemplate=(element,errorCount,checkCount,displayFormat,minViews,viewDelta)=&gt;{const weight=parseInt((errorCount-minViews)/viewDelta*2),context={resultPassed:!errorCount,classList:"",passRate:{errorCount:errorCount,checkCount:checkCount,failureRate:Math.round(errorCount/checkCount*100)}};if(!element)return Promise.resolve();const elementClassList=["block_accessreview"];context.resultPassed?elementClassList.push("block_accessreview_success"):weight?elementClassList.push("block_accessreview_danger"):elementClassList.push("block_accessreview_warning");const showIcons="showicons"==displayFormat||"showboth"==displayFormat,showBackground="showbackground"==displayFormat||"showboth"==displayFormat;return showBackground&amp;&amp;!showIcons?(element.classList.add(...elementClassList,"alert"),Promise.resolve()):(showIcons&amp;&amp;!showBackground&amp;&amp;(context.classList=elementClassList.join(" ")),Templates.renderForPromise("block_accessreview/status",context).then((_ref=&gt;{let{html:html,js:js}=_ref;Templates.appendNodeContents(element,html,js),showBackground&amp;&amp;element.classList.add(...elementClassList,"alert")})).catch())},showAccessMap=function(courseId,displayFormat){let updatePreference=arguments.length&gt;2&amp;&amp;void 0!==arguments[2]&amp;&amp;arguments[2];return Promise.all(fetchReviewData(courseId,updatePreference)).then((_ref2=&gt;{let[sectionData,moduleData]=_ref2;const{minViews:minViews,viewDelta:viewDelta}=getErrorTotals(sectionData,moduleData);return sectionData.forEach((section=&gt;{const element=document.querySelector("#section-".concat(section.section," .summary"));element&amp;&amp;renderTemplate(element,section.numerrors,section.numchecks,displayFormat,minViews,viewDelta)})),moduleData.forEach((module=&gt;{const element=document.getElementById("module-".concat(module.cmid));element&amp;&amp;renderTemplate(element,module.numerrors,module.numchecks,displayFormat,minViews,viewDelta)})),document.querySelector(".icon-accessmap").classList.remove("fa-eye-slash"),document.querySelector(".icon-accessmap").classList.add("fa-eye"),{sectionData:sectionData,moduleData:moduleData}})).catch(_notification.exception)},toggleAccessMap=(courseId,displayFormat)=&gt;{toggleState=!toggleState,toggleState?showAccessMap(courseId,displayFormat,!0):function(){let updatePreference=arguments.length&gt;0&amp;&amp;void 0!==arguments[0]&amp;&amp;arguments[0];document.querySelectorAll(".block_accessreview_view").forEach((node=&gt;node.remove()));const classList=["block_accessreview","block_accessreview_success","block_accessreview_warning","block_accessreview_danger","block_accessreview_view","alert"];document.querySelectorAll(".block_accessreview").forEach((node=&gt;node.classList.remove(...classList))),updatePreference&amp;&amp;setToggleStatePreference(!1),document.querySelector(".icon-accessmap").classList.remove("fa-eye"),document.querySelector(".icon-accessmap").classList.add("fa-eye-slash")}(!0)},getErrorTotals=(sectionData,moduleData)=&gt;{const totals={totalErrors:0,totalUsers:0,minViews:0,maxViews:0,viewDelta:0};return[].concat(sectionData,moduleData).forEach((item=&gt;{totals.totalErrors+=item.numerrors,item.numerrors&lt;totals.minViews&amp;&amp;(totals.minViews=item.numerrors),item.numerrors&gt;totals.maxViews&amp;&amp;(totals.maxViews=item.numerrors),totals.totalUsers+=item.numchecks})),totals.viewDelta=totals.maxViews-totals.minViews+1,totals},getTogglePreferenceParams=toggleState=&gt;({methodname:"core_user_update_user_preferences",args:{preferences:[{type:"block_accessreviewtogglestate",value:toggleState}]}}),setToggleStatePreference=toggleState=&gt;(0,_ajax.call)([getTogglePreferenceParams(toggleState)]),fetchReviewData=function(courseid){let updatePreference=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]&amp;&amp;arguments[1];const calls=[{methodname:"block_accessreview_get_section_data",args:{courseid:courseid}},{methodname:"block_accessreview_get_module_data",args:{courseid:courseid}}];return updatePreference&amp;&amp;calls.push(getTogglePreferenceParams(!0)),(0,_ajax.call)(calls)};_exports.init=(toggled,displayFormat,courseId)=&gt;{toggleState=1==toggled,toggleState&amp;&amp;showAccessMap(courseId,displayFormat),((courseId,displayFormat)=&gt;{document.addEventListener("click",(e=&gt;{e.target.closest("#toggle-accessmap")&amp;&amp;(e.preventDefault(),toggleAccessMap(courseId,displayFormat))}))})(courseId,displayFormat)}}));
define('block_advnotifications/notif', ["jquery"],function(n){return{initialise:function(){n(document).ready(function(){n(".block_advnotifications").on("click",".dismissible",function(){var i=n(this).attr("data-dismiss");n(this).slideUp("150",function(){n(this).remove()});var s={call:"ajax"};s.dismiss=i;i=M.cfg.wwwroot+"/blocks/advnotifications/pages/process.php?sesskey="+M.cfg.sesskey;n.post(i,s).fail(function(){console.error("No 'dismiss' response received.")}).done(function(){})})})}}});
define('block_advnotifications/custom', ["jquery"],function(l){return{initialise:function(){l(document).ready(function(){var e=l("#region-main"),t=l("#add_notification_wrapper_id"),s={save:"Save",update:"Update",req:"Required...",preview:"Preview",title:"Title",message:"Message"};e.on("click",".notifications_table tr &gt; td &gt; form &gt; button[type=submit]",function(e){e.preventDefault();var n={call:"ajax",purpose:"",tableaction:"",blockid:""},i=l(this).closest("form").attr("data-edit"),e=l(this).closest("form").attr("data-delete");n.blockid=l(this).closest("form").find("[name=blockid]")[0].value,d(),void 0!==i&amp;&amp;!1!==i?(n.purpose="edit",n.tableaction=i,(i=l("#add_notification_save")).addClass("update"),i.val(s.update)):void 0!==e&amp;&amp;!1!==e&amp;&amp;(n.purpose="delete",n.tableaction=e);e=M.cfg.wwwroot+"/blocks/advnotifications/pages/process.php?sesskey="+M.cfg.sesskey;l.post(e,n).fail(function(){console.error("No 'manage' response received.")}).done(function(e){if(e=JSON.parse(e),0&lt;parseInt(e.done,10))l("#tr"+n.purpose+e.done).closest("tr").fadeOut(250,function(){l(this).remove(),c(),a()});else if("edit"===n.purpose){for(var i in e){var t;e.hasOwnProperty(i)&amp;&amp;("id"===i&amp;&amp;(t=l("#add_notification_form"),l("#add_notification_id").remove(),t.prepend('&lt;input type="hidden" id="add_notification_id" name="id" value="'+e[i]+'"/&gt;'),l("#add_notification_purpose").val("update")),t=l("#add_notification_wrapper_id").find("#add_notification_"+i),"enabled"!==i&amp;&amp;"global"!==i&amp;&amp;"dismissible"!==i&amp;&amp;"aicon"!==i||1!=e[i]?"enabled"!==i&amp;&amp;"global"!==i&amp;&amp;"dismissible"!==i&amp;&amp;"aicon"!==i||0!=e[i]?t.val(e[i]):t.prop("checked",!1):t.prop("checked",!0))}o()}})}),e.on("click",".notifications_restore_table tr &gt; td &gt; form &gt; button[type=submit]",function(e){e.preventDefault();var i={call:"ajax",purpose:"",tableaction:"",blockid:""},t=l(this).closest("form").attr("data-restore"),e=l(this).closest("form").attr("data-permdelete");i.blockid=l(this).closest("form").find("[name=blockid]")[0].value,void 0!==t&amp;&amp;!1!==t?(i.purpose="restore",i.tableaction=t):void 0!==e&amp;&amp;!1!==e&amp;&amp;(i.purpose="permdelete",i.tableaction=e);e=M.cfg.wwwroot+"/blocks/advnotifications/pages/process.php?sesskey="+M.cfg.sesskey;l.post(e,i).fail(function(){console.error("No 'restore/permdelete' response received.")}).done(function(e){e=JSON.parse(e),0&lt;parseInt(e.done,10)&amp;&amp;l("#tr"+i.purpose+e.done).closest("tr").fadeOut(250,function(){l(this).remove()})})}),t.on("click","#add_notification_cancel",function(e){e.preventDefault(),c()}),e.on("submit","#add_notification_form",function(e){e.preventDefault();var i,o=l("#add_notification_status"),a=l("#add_notification_form");d(),r()&amp;&amp;(o.show(),i=l(this).serialize(),e=M.cfg.wwwroot+"/blocks/advnotifications/pages/process.php",l.post(e,i).fail(function(e){console.error("No 'add' response received.");var i,t,n=e.responseJSON.error;for(i in n)n.hasOwnProperty(i)&amp;&amp;((t=a.find("select[name="+n[i]+"]")).addClass("requiredfield"),l('&lt;strong class="requiredfield"&gt;&lt;em&gt;'+s.req+"&lt;/em&gt;&lt;/strong&gt;").insertAfter(t[0].nextSibling));o.hide()}).done(function(){o.find(".saving").hide(),o.find(".done").show(),c(),setTimeout(function(){o.fadeOut(function(){o.find(".done").hide(),o.find(".saving").show()})},1500),l("#advnotifications_table_wrapper").load("# #advnotifications_table_wrapper &gt; *")}))}),t.on("input propertychange paste","#add_notification_title, #add_notification_message",function(){o()}),l("#add_notification_type").on("change",function(){o()}),l("#add_notification_dismissible").on("change",function(){o()}),l("#add_notification_aicon").on("change",function(){o()});var i,n,o=function(){var e=t.find("#add_notification_title");0&lt;e.val().length?t.find(".preview-title")[0].innerHTML=e.val():t.find(".preview-title")[0].innerHTML=s.title;var i=t.find("#add_notification_message");0&lt;i.val().length?t.find(".preview-message")[0].innerHTML=i.val():t.find(".preview-message")[0].innerHTML=s.message;e=l("#add_notification_type").val(),i=l("#add_notification_wrapper_id .preview-alert");i.removeClass("alert-info alert-success alert-danger alert-warning announcement"),"announcement"===e&amp;&amp;(i.addClass(e),e="info"),"info"!==e&amp;&amp;"success"!==e&amp;&amp;"warning"!==e&amp;&amp;"danger"!==e&amp;&amp;(e="info"),i.addClass("alert-"+e),l(".preview-aicon").find("&gt; img").attr("src",M.util.image_url(e,"block_advnotifications")),l("#add_notification_dismissible")[0].checked?(l(".preview-alert-dismissible").show(),i.addClass("dismissible")):(l(".preview-alert-dismissible").hide(),i.removeClass("dismissible")),l("#add_notification_aicon")[0].checked?(l(".preview-aicon").show(),i.addClass("aicon")):(l(".preview-aicon").hide(),i.removeClass("aicon"))},a=function(){var e=l("#notification_preview_wrapper"),i='&lt;div id="notification_preview_wrapper"&gt;&lt;strong&gt;'+s.preview+'&lt;/strong&gt;&lt;br&gt;&lt;div class="alert alert-info preview-alert"&gt;&lt;div class="preview-aicon" style="display: none;"&gt;&lt;img src="'+M.util.image_url("info","block_advnotifications")+'" /&gt;&lt;/div&gt;&lt;strong class="preview-title"&gt;'+s.title+'&lt;/strong&gt; &lt;div class="preview-message"&gt;'+s.message+'&lt;/div&gt; &lt;div class="preview-alert-dismissible" style="display: none;"&gt;&lt;strong&gt;&amp;times;&lt;/strong&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;';0&lt;e.length?(e.remove(),l(i).prependTo(l(t))):l(i).prependTo(l(t)).hide().slideDown()},r=function(){var e,i=l("#add_notification_form select option:selected:disabled");for(e in i)if(i.hasOwnProperty(e)&amp;&amp;l(i[e]).prop("disabled"))return l(i[e]).closest("select").addClass("requiredfield"),l('&lt;strong class="requiredfield"&gt;&lt;em&gt;'+s.req+"&lt;/em&gt;&lt;/strong&gt;").insertAfter(l(i[e]).closest("select")[0].nextSibling),!1;return!0},d=function(){l("select.requiredfield").removeClass("requiredfield"),l("strong.requiredfield").remove()},c=function(){l("#add_notification_form")[0].reset(),d(),a();var e=l("#add_notification_save");e.removeClass("update"),l("#add_notification_id").remove(),l("#add_notification_purpose").val("add"),e.val(s.save)};i={call:"ajax",purpose:"strings"},n=M.cfg.wwwroot+"/blocks/advnotifications/pages/process.php?sesskey="+M.cfg.sesskey,l.post(n,i).fail(function(){console.error("No 'strings' response received.")}).done(function(e){s=e}).always(function(){a()}),l("#add_notification_form").append('&lt;input type="hidden" id="add_notification_call" name="call" value="ajax"/&gt;')})}}});
/**
 * Completion Progress overview page behaviour.
 *
 * @module     block_completion_progress/overview
 * @copyright  2020 Jonathon Fowler &lt;fowlerj@usq.edu.au&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("block_completion_progress/overview",["core_user/participants"],(function(Participants){return{init:function(options){var form=document.getElementById("participantsform"),action=document.getElementById("formactionid");function checkaction(){action.disabled=null===form.querySelector("input.usercheckbox:checked")}Participants.init(options),checkaction(),form.addEventListener("change",checkaction)}}}));
/**
 * Completion Progress block progress bar behaviour.
 *
 * @module     block_completion_progress/progressbar
 * @copyright  2020 Jonathon Fowler &lt;fowlerj@usq.edu.au&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("block_completion_progress/progressbar",["jquery","core/pubsub","core/utils"],(function($,PubSub,Utils){function showInfo(event){var cell=$(this),container=cell.closest(".block_completion_progress .barContainer"),visibleinfo=container.siblings(".progressEventInfo:visible"),infotoshow=container.siblings("#"+cell.data("infoRef"));visibleinfo.is(infotoshow)||(visibleinfo.hide(),infotoshow.show()),event.preventDefault()}function showAllInfo(event){var initialinfo=$(this).closest(".progressEventInfo");initialinfo.siblings(".progressEventInfo").show(),initialinfo.hide(),event.preventDefault()}function viewActivity(){var cell=$(this),infolink=cell.closest(".block_completion_progress .barContainer").siblings("#"+cell.data("infoRef")).find("a.action_link");null!==infolink.prop("onclick")?infolink.click():document.location=infolink.prop("href")}function scrollContainer(event){var barrow=$(this).closest(".block_completion_progress .barContainer").find(".barRow"),amount=event.data*barrow.prop("scrollWidth")*.15;barrow.prop("scrollLeft",barrow.prop("scrollLeft")+amount),event.preventDefault()}function checkArrows(){var barrow=$(this),barcontainer=barrow.closest(".block_completion_progress .barContainer"),leftarrow=barcontainer.find(".left-arrow-svg"),rightarrow=barcontainer.find(".right-arrow-svg"),scrolled=barrow.prop("scrollLeft"),scrollWidth=barrow.prop("scrollWidth")-barrow.prop("offsetWidth"),threshold=Math.floor(.25*barrow.find(".progressBarCell:first-child").width());"rtl"===document.dir?((scrolled=-scrolled)&gt;threshold?rightarrow.css("display","block"):rightarrow.css("display","none"),scrollWidth&gt;threshold&amp;&amp;scrolled&lt;scrollWidth-threshold?leftarrow.css("display","block"):leftarrow.css("display","none")):(scrolled&gt;threshold?leftarrow.css("display","block"):leftarrow.css("display","none"),scrollWidth&gt;threshold&amp;&amp;scrolled&lt;scrollWidth-threshold?rightarrow.css("display","block"):rightarrow.css("display","none"))}function initialiseBar(instanceid){var barcontainers=$('.block_completion_progress .barContainer[data-instanceid="'+instanceid+'"]');barcontainers.on("touchstart mouseover",".progressBarCell",showInfo),barcontainers.on("click",".progressBarCell[data-haslink=true]",viewActivity),barcontainers.siblings(".progressEventInfo").find(".progressShowAllInfo").click(showAllInfo),function(barcontainers){var barrows=barcontainers.find(".barRow");function checkEachBar(){barrows.each(checkArrows)}barrows.scroll(checkArrows),$(window).resize(checkEachBar),PubSub.subscribe("nav-drawer-toggle-end",checkEachBar),$(document).on("theme_boost/drawers:shown theme_boost/drawers:hidden",Utils.debounce(checkEachBar,250)),$((function(){barcontainers.find(".nowicon").each((function(){var nowicon=$(this),barrow=nowicon.closest(".block_completion_progress .barRow");barrow.prop("scrollLeft",0),barrow.prop("scrollLeft",nowicon.offset().left-barrow.offset().left-barrow.width()/2)})),barrows.each(checkArrows)})),barcontainers.on("click",".left-arrow-svg",-1,scrollContainer),barcontainers.on("click",".right-arrow-svg",1,scrollContainer)}(barcontainers)}return{init:function(instanceids){for(var i=instanceids.length-1;i&gt;=0;i--)initialiseBar(instanceids[i])}}}));
define("block_myoverview/selectors",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0;return _exports.default={courseView:{region:'[data-region="courses-view"]',regionContent:'[data-region="course-view-content"]'},FILTERS:'[data-region="filter"]',FILTER_OPTION:"[data-filter]",DISPLAY_OPTION:"[data-display-option]",ACTION_HIDE_COURSE:'[data-action="hide-course"]',ACTION_SHOW_COURSE:'[data-action="show-course"]',ACTION_ADD_FAVOURITE:'[data-action="add-favourite"]',ACTION_REMOVE_FAVOURITE:'[data-action="remove-favourite"]',FAVOURITE_ICON:'[data-region="favourite-icon"]',ICON_IS_FAVOURITE:'[data-region="is-favourite"]',ICON_NOT_FAVOURITE:'[data-region="not-favourite"]',region:{selectBlock:'[data-region="myoverview"]',clearIcon:'[data-action="clearsearch"]',searchInput:'[data-action="search"]'}},_exports.default}));
define("block_myoverview/repository",["exports","core/ajax","core/notification"],(function(_exports,_ajax,Notification){var obj;
/**
   * A javascript module to retrieve enrolled coruses from the server.
   *
   * @module block_myoverview/repository
   * @copyright  2018 Bas Brands &lt;base@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.updateUserPreferences=_exports.setFavouriteCourses=_exports.getEnrolledCoursesByTimeline=void 0,_ajax=(obj=_ajax)&amp;&amp;obj.__esModule?obj:{default:obj},Notification=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}(Notification);_exports.getEnrolledCoursesByTimeline=args=&gt;{const request={methodname:"core_course_get_enrolled_courses_by_timeline_classification",args:args};return _ajax.default.call([request])[0]};_exports.setFavouriteCourses=args=&gt;{const request={methodname:"core_course_set_favourite_courses",args:args};return _ajax.default.call([request])[0]};_exports.updateUserPreferences=args=&gt;{const request={methodname:"core_user_update_user_preferences",args:args};_ajax.default.call([request])[0].fail(Notification.exception)}}));
define("block_myoverview/view_nav",["exports","jquery","core/custom_interaction_events","block_myoverview/repository","block_myoverview/view","block_myoverview/selectors"],(function(_exports,_jquery,CustomEvents,Repository,View,_selectors){function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Manage the timeline view navigation for the overview block.
   *
   * @copyright  2018 Bas Brands &lt;bas@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_jquery=_interopRequireDefault(_jquery),CustomEvents=_interopRequireWildcard(CustomEvents),Repository=_interopRequireWildcard(Repository),View=_interopRequireWildcard(View),_selectors=_interopRequireDefault(_selectors);const updatePreferences=(filter,value)=&gt;{let type=null;type="display"===filter?"block_myoverview_user_view_preference":"sort"===filter?"block_myoverview_user_sort_preference":"customfieldvalue"===filter?"block_myoverview_user_grouping_customfieldvalue_preference":"block_myoverview_user_grouping_preference",Repository.updateUserPreferences({preferences:[{type:type,value:value}]})};_exports.init=root=&gt;{(root=&gt;{const Selector=root.find(_selectors.default.FILTERS);CustomEvents.define(Selector,[CustomEvents.events.activate]),Selector.on(CustomEvents.events.activate,_selectors.default.FILTER_OPTION,((e,data)=&gt;{const option=(0,_jquery.default)(e.target);if(option.hasClass("active"))return;const filter=option.attr("data-filter"),pref=option.attr("data-pref"),customfieldvalue=option.attr("data-customfieldvalue");root.find(_selectors.default.courseView.region).attr("data-"+filter,option.attr("data-value")),updatePreferences(filter,pref),customfieldvalue&amp;&amp;(root.find(_selectors.default.courseView.region).attr("data-customfieldvalue",customfieldvalue),updatePreferences("customfieldvalue",customfieldvalue));const page=document.querySelector(_selectors.default.region.selectBlock),input=page.querySelector(_selectors.default.region.searchInput);if(""!==input.value){const clearIcon=page.querySelector(_selectors.default.region.clearIcon);input.value="",View.clearSearch(clearIcon,root)}else View.init(root);data.originalEvent.preventDefault()})),Selector.on(CustomEvents.events.activate,_selectors.default.DISPLAY_OPTION,((e,data)=&gt;{const option=(0,_jquery.default)(e.target);if(option.hasClass("active"))return;const filter=option.attr("data-display-option"),pref=option.attr("data-pref");root.find(_selectors.default.courseView.region).attr("data-display",option.attr("data-value")),updatePreferences(filter,pref),View.reset(root),data.originalEvent.preventDefault()}))})(root=(0,_jquery.default)(root))}}));
define("block_myoverview/main",["exports","block_myoverview/view","block_myoverview/view_nav"],(function(_exports,View,ViewNav){function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}
/**
   * Javascript to initialise the myoverview block.
   *
   * @copyright  2018 Bas Brands &lt;bas@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,View=_interopRequireWildcard(View),ViewNav=_interopRequireWildcard(ViewNav);_exports.init=root=&gt;{ViewNav.init(root),View.init(root)}}));
define("block_myoverview/view",["exports","jquery","block_myoverview/repository","core/paged_content_factory","core/pubsub","core/custom_interaction_events","core/notification","core/templates","core_course/events","block_myoverview/selectors","core/paged_content_events","core/aria","core/utils"],(function(_exports,_jquery,Repository,PagedContentFactory,PubSub,CustomEvents,Notification,Templates,CourseEvents,_selectors,PagedContentEvents,Aria,_utils){function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Manage the courses view for the overview block.
   *
   * @copyright  2018 Bas Brands &lt;bas@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.reset=_exports.init=_exports.clearSearch=void 0,_jquery=_interopRequireDefault(_jquery),Repository=_interopRequireWildcard(Repository),PagedContentFactory=_interopRequireWildcard(PagedContentFactory),PubSub=_interopRequireWildcard(PubSub),CustomEvents=_interopRequireWildcard(CustomEvents),Notification=_interopRequireWildcard(Notification),Templates=_interopRequireWildcard(Templates),CourseEvents=_interopRequireWildcard(CourseEvents),_selectors=_interopRequireDefault(_selectors),PagedContentEvents=_interopRequireWildcard(PagedContentEvents),Aria=_interopRequireWildcard(Aria);const TEMPLATES_COURSES_CARDS="block_myoverview/view-cards",TEMPLATES_COURSES_LIST="block_myoverview/view-list",TEMPLATES_COURSES_SUMMARY="block_myoverview/view-summary",TEMPLATES_NOCOURSES="core_course/no-courses",GROUPINGS_GROUPING_ALLINCLUDINGHIDDEN="allincludinghidden",NUMCOURSES_PERPAGE=[12,24,48,96,0];let loadedPages=[],courseOffset=0,lastPage=0,lastLimit=0,namespace=null;const getFilterValues=root=&gt;{const courseRegion=root.find(_selectors.default.courseView.region);return{display:courseRegion.attr("data-display"),grouping:courseRegion.attr("data-grouping"),sort:courseRegion.attr("data-sort"),displaycategories:courseRegion.attr("data-displaycategories"),customfieldname:courseRegion.attr("data-customfieldname"),customfieldvalue:courseRegion.attr("data-customfieldvalue")}},DEFAULT_PAGED_CONTENT_CONFIG={ignoreControlWhileLoading:!0,controlPlacementBottom:!0,persistentLimitKey:"block_myoverview_user_paging_preference"},getFavouriteIconContainer=(root,courseId)=&gt;root.find(_selectors.default.FAVOURITE_ICON+'[data-course-id="'+courseId+'"]'),getPagedContentContainer=(root,index)=&gt;root.find('[data-region="paged-content-page"][data-page="'+index+'"]'),getCourseId=root=&gt;root.attr("data-course-id"),getAddFavouriteMenuItem=(root,courseId)=&gt;root.find('[data-action="add-favourite"][data-course-id="'+courseId+'"]'),getRemoveFavouriteMenuItem=(root,courseId)=&gt;root.find('[data-action="remove-favourite"][data-course-id="'+courseId+'"]'),addToFavourites=(root,courseId)=&gt;{const removeAction=getRemoveFavouriteMenuItem(root,courseId),addAction=getAddFavouriteMenuItem(root,courseId);setCourseFavouriteState(courseId,!0).then((success=&gt;{success?(PubSub.publish(CourseEvents.favourited,courseId),removeAction.removeClass("hidden"),addAction.addClass("hidden"),((root,courseId)=&gt;{const iconContainer=getFavouriteIconContainer(root,courseId),isFavouriteIcon=iconContainer.find(_selectors.default.ICON_IS_FAVOURITE);isFavouriteIcon.removeClass("hidden"),Aria.unhide(isFavouriteIcon);const notFavourteIcon=iconContainer.find(_selectors.default.ICON_NOT_FAVOURITE);notFavourteIcon.addClass("hidden"),Aria.hide(notFavourteIcon)})(root,courseId)):Notification.alert("Starring course failed","Could not change favourite state")})).catch(Notification.exception)},removeFromFavourites=(root,courseId)=&gt;{const removeAction=getRemoveFavouriteMenuItem(root,courseId),addAction=getAddFavouriteMenuItem(root,courseId);setCourseFavouriteState(courseId,!1).then((success=&gt;{success?(PubSub.publish(CourseEvents.unfavorited,courseId),removeAction.addClass("hidden"),addAction.removeClass("hidden"),((root,courseId)=&gt;{const iconContainer=getFavouriteIconContainer(root,courseId),isFavouriteIcon=iconContainer.find(_selectors.default.ICON_IS_FAVOURITE);isFavouriteIcon.addClass("hidden"),Aria.hide(isFavouriteIcon);const notFavourteIcon=iconContainer.find(_selectors.default.ICON_NOT_FAVOURITE);notFavourteIcon.removeClass("hidden"),Aria.unhide(notFavourteIcon)})(root,courseId)):Notification.alert("Starring course failed","Could not change favourite state")})).catch(Notification.exception)},getHideCourseMenuItem=(root,courseId)=&gt;root.find('[data-action="hide-course"][data-course-id="'+courseId+'"]'),getShowCourseMenuItem=(root,courseId)=&gt;root.find('[data-action="show-course"][data-course-id="'+courseId+'"]'),setCourseHiddenState=(courseId,status)=&gt;(!1===status&amp;&amp;(status=null),Repository.updateUserPreferences({preferences:[{type:"block_myoverview_hidden_course_"+courseId,value:status}]})),hideElement=(root,id)=&gt;{const pagingBar=root.find('[data-region="paging-bar"]'),jumpto=parseInt(pagingBar.attr("data-active-page-number"));let reducedCourse=loadedPages[jumpto].courses.reduce(((accumulator,current)=&gt;(+id!=+current.id&amp;&amp;accumulator.push(current),accumulator)),[]);if(void 0!==loadedPages[jumpto+1]){const newElement=loadedPages[jumpto+1].courses.slice(0,1);loadedPages.forEach(((courseList,index)=&gt;{if(index&gt;jumpto){let popElement=[];void 0!==loadedPages[index+1]&amp;&amp;(popElement=loadedPages[index+1].courses.slice(0,1)),loadedPages[index].courses=[...loadedPages[index].courses.slice(1),...popElement]}})),reducedCourse=[...reducedCourse,...newElement]}if(lastPage===jumpto+1&amp;&amp;0===loadedPages[jumpto+1].courses.length){const pagedContentContainer=root.find('[data-region="paged-content-container"]');PagedContentFactory.resetLastPageNumber((0,_jquery.default)(pagedContentContainer).attr("id"),jumpto)}loadedPages[jumpto].courses=reducedCourse,courseOffset--;const pagedContentPage=getPagedContentContainer(root,jumpto);renderCourses(root,loadedPages[jumpto]).then(((html,js)=&gt;Templates.replaceNodeContents(pagedContentPage,html,js))).catch(Notification.exception),loadedPages.forEach(((courseList,index)=&gt;{if(index&gt;jumpto){getPagedContentContainer(root,index).remove()}}))},setCourseFavouriteState=(courseId,status)=&gt;Repository.setFavouriteCourses({courses:[{id:courseId,favourite:status}]}).then((result=&gt;0===result.warnings.length&amp;&amp;(loadedPages.forEach((courseList=&gt;{courseList.courses.forEach(((course,index)=&gt;{course.id==courseId&amp;&amp;(courseList.courses[index].isfavourite=status)}))})),!0))).catch(Notification.exception),noCoursesRender=root=&gt;{const nocoursesimg=root.find(_selectors.default.courseView.region).attr("data-nocoursesimg"),newcourseurl=root.find(_selectors.default.courseView.region).attr("data-newcourseurl");return Templates.render(TEMPLATES_NOCOURSES,{nocoursesimg:nocoursesimg,newcourseurl:newcourseurl})},renderCourses=(root,coursesData)=&gt;{const filters=getFilterValues(root);let currentTemplate="";return currentTemplate="card"===filters.display?TEMPLATES_COURSES_CARDS:"list"===filters.display?TEMPLATES_COURSES_LIST:TEMPLATES_COURSES_SUMMARY,coursesData?(!1===Array.isArray(coursesData.courses)&amp;&amp;(coursesData.courses=Object.values(coursesData.courses)),coursesData.courses=coursesData.courses.map((course=&gt;(course.showcoursecategory="on"===filters.displaycategories,course))),coursesData.courses.length?Templates.render(currentTemplate,{courses:coursesData.courses}):noCoursesRender(root)):noCoursesRender(root)},registerPagedEventHandlers=(root,namespace)=&gt;{const event=namespace+PagedContentEvents.SET_ITEMS_PER_PAGE_LIMIT;PubSub.subscribe(event,(root=&gt;limit=&gt;root.find(_selectors.default.courseView.region).attr("data-paging",limit))(root))},itemsPerPageFunc=(pagingLimit,root)=&gt;{let itemsPerPage=NUMCOURSES_PERPAGE.map((value=&gt;{let active=!1;return value===pagingLimit&amp;&amp;(active=!0),{value:value,active:active}}));const totalCourseCount=parseInt(root.find(_selectors.default.courseView.region).attr("data-totalcoursecount"),10);return itemsPerPage.filter((pagingOption=&gt;pagingOption.value&lt;totalCourseCount||0===pagingOption.value))},pageBuilder=function(coursesData,currentPage,pageData,actions){let activeSearch=arguments.length&gt;4&amp;&amp;void 0!==arguments[4]?arguments[4]:null,courses=coursesData.courses?coursesData.courses:coursesData,nextPageStart=0,pageCourses=[];if(void 0!==loadedPages[currentPage]){pageCourses=loadedPages[currentPage].courses;const currentPageLength=pageCourses.length;currentPageLength&lt;pageData.limit&amp;&amp;(nextPageStart=pageData.limit-currentPageLength,pageCourses={...loadedPages[currentPage].courses,...courses.slice(0,nextPageStart)})}else nextPageStart=pageData.limit||!1,pageCourses=pageData.limit&gt;0?courses.slice(0,pageData.limit):courses;loadedPages[currentPage]={courses:pageCourses};const remainingCourses=!1!==nextPageStart?courses.slice(nextPageStart,courses.length):[];remainingCourses.length&amp;&amp;(loadedPages[currentPage+1]={courses:remainingCourses}),loadedPages[currentPage].courses.length&lt;pageData.limit||!remainingCourses.length?(lastPage=currentPage,null===activeSearch&amp;&amp;actions.allItemsLoaded(currentPage)):void 0!==loadedPages[currentPage+1]&amp;&amp;loadedPages[currentPage+1].courses.length&lt;pageData.limit&amp;&amp;(lastPage=currentPage+1),courseOffset=coursesData.nextoffset},resetGlobals=()=&gt;{courseOffset=0,loadedPages=[],lastPage=0,lastLimit=0},standardFunctionalityCurry=()=&gt;(resetGlobals(),(filters,currentPage,pageData,actions,root,promises,limit)=&gt;{const pagePromise=((filters,limit)=&gt;Repository.getEnrolledCoursesByTimeline({offset:courseOffset,limit:limit,classification:filters.grouping,sort:filters.sort,customfieldname:filters.customfieldname,customfieldvalue:filters.customfieldvalue}))(filters,limit).then((coursesData=&gt;(pageBuilder(coursesData,currentPage,pageData,actions),renderCourses(root,loadedPages[currentPage])))).catch(Notification.exception);promises.push(pagePromise)}),searchFunctionalityCurry=()=&gt;(resetGlobals(),(filters,currentPage,pageData,actions,root,promises,limit,inputValue)=&gt;{const searchingPromise=((filters,limit,searchValue)=&gt;Repository.getEnrolledCoursesByTimeline({offset:courseOffset,limit:limit,classification:"search",sort:filters.sort,customfieldname:filters.customfieldname,customfieldvalue:filters.customfieldvalue,searchvalue:searchValue}))(filters,limit,inputValue).then((coursesData=&gt;(pageBuilder(coursesData,currentPage,pageData,actions),renderCourses(root,loadedPages[currentPage])))).catch(Notification.exception);promises.push(searchingPromise)}),initializePagedContent=function(root,promiseFunction){let inputValue=arguments.length&gt;2&amp;&amp;void 0!==arguments[2]?arguments[2]:null;const pagingLimit=parseInt(root.find(_selectors.default.courseView.region).attr("data-paging"),10);let itemsPerPage=itemsPerPageFunc(pagingLimit,root);const filters=getFilterValues(root),config={...DEFAULT_PAGED_CONTENT_CONFIG};config.eventNamespace=namespace;const pagedContentPromise=PagedContentFactory.createWithLimit(itemsPerPage,((pagesData,actions)=&gt;{let promises=[];return pagesData.forEach((pageData=&gt;{const currentPage=pageData.pageNumber;let limit=pageData.limit&gt;0?pageData.limit:0;if(+lastLimit!=+limit&amp;&amp;(loadedPages=[],courseOffset=0,lastPage=0),lastPage===currentPage)return actions.allItemsLoaded(lastPage),void promises.push(renderCourses(root,loadedPages[currentPage]));lastLimit=limit,void 0===loadedPages[currentPage+1]&amp;&amp;void 0===loadedPages[currentPage]&amp;&amp;(limit*=2),promiseFunction(filters,currentPage,pageData,actions,root,promises,limit,inputValue)})),promises}),config);pagedContentPromise.then(((html,js)=&gt;(registerPagedEventHandlers(root,namespace),Templates.replaceNodeContents(root.find(_selectors.default.courseView.region),html,js)))).catch(Notification.exception)},registerEventListeners=(root,page)=&gt;{CustomEvents.define(root,[CustomEvents.events.activate]),root.on(CustomEvents.events.activate,_selectors.default.ACTION_ADD_FAVOURITE,((e,data)=&gt;{const favourite=(0,_jquery.default)(e.target).closest(_selectors.default.ACTION_ADD_FAVOURITE),courseId=getCourseId(favourite);addToFavourites(root,courseId),data.originalEvent.preventDefault()})),root.on(CustomEvents.events.activate,_selectors.default.ACTION_REMOVE_FAVOURITE,((e,data)=&gt;{const favourite=(0,_jquery.default)(e.target).closest(_selectors.default.ACTION_REMOVE_FAVOURITE),courseId=getCourseId(favourite);removeFromFavourites(root,courseId),data.originalEvent.preventDefault()})),root.on(CustomEvents.events.activate,_selectors.default.FAVOURITE_ICON,((e,data)=&gt;{data.originalEvent.preventDefault()})),root.on(CustomEvents.events.activate,_selectors.default.ACTION_HIDE_COURSE,((e,data)=&gt;{const target=(0,_jquery.default)(e.target).closest(_selectors.default.ACTION_HIDE_COURSE),courseId=getCourseId(target);((root,courseId)=&gt;{const hideAction=getHideCourseMenuItem(root,courseId),showAction=getShowCourseMenuItem(root,courseId),filters=getFilterValues(root);setCourseHiddenState(courseId,!0),filters.grouping!==GROUPINGS_GROUPING_ALLINCLUDINGHIDDEN&amp;&amp;hideElement(root,courseId),hideAction.addClass("hidden"),showAction.removeClass("hidden")})(root,courseId),data.originalEvent.preventDefault()})),root.on(CustomEvents.events.activate,_selectors.default.ACTION_SHOW_COURSE,((e,data)=&gt;{const target=(0,_jquery.default)(e.target).closest(_selectors.default.ACTION_SHOW_COURSE),courseId=getCourseId(target);((root,courseId)=&gt;{const hideAction=getHideCourseMenuItem(root,courseId),showAction=getShowCourseMenuItem(root,courseId),filters=getFilterValues(root);setCourseHiddenState(courseId,null),filters.grouping!==GROUPINGS_GROUPING_ALLINCLUDINGHIDDEN&amp;&amp;hideElement(root,courseId),hideAction.removeClass("hidden"),showAction.addClass("hidden")})(root,courseId),data.originalEvent.preventDefault()}));const input=page.querySelector(_selectors.default.region.searchInput),clearIcon=page.querySelector(_selectors.default.region.clearIcon);clearIcon.addEventListener("click",(()=&gt;{input.value="",input.focus(),clearSearch(clearIcon,root)})),input.addEventListener("input",(0,_utils.debounce)((()=&gt;{""===input.value?clearSearch(clearIcon,root):(activeSearch(clearIcon),initializePagedContent(root,searchFunctionalityCurry(),input.value.trim()))}),1e3))},clearSearch=(clearIcon,root)=&gt;{clearIcon.classList.add("d-none"),init(root)};_exports.clearSearch=clearSearch;const activeSearch=clearIcon=&gt;{clearIcon.classList.remove("d-none")},init=root=&gt;{if(root=(0,_jquery.default)(root),loadedPages=[],lastPage=0,courseOffset=0,!root.attr("data-init")){const page=document.querySelector(_selectors.default.region.selectBlock);registerEventListeners(root,page),namespace="block_myoverview_"+root.attr("id")+"_"+Math.random(),root.attr("data-init",!0)}initializePagedContent(root,standardFunctionalityCurry())};_exports.init=init;_exports.reset=root=&gt;{loadedPages.length&gt;0?loadedPages.forEach(((courseList,index)=&gt;{let pagedContentPage=getPagedContentContainer(root,index);renderCourses(root,courseList).then(((html,js)=&gt;Templates.replaceNodeContents(pagedContentPage,html,js))).catch(Notification.exception)})):init(root)}}));
define("block_navigation/navblock",["exports","core_block/events","core/tree"],(function(_exports,_events,_tree){var obj;
/**
   * Load the navigation tree javascript.
   *
   * @module     block_navigation/navblock
   * @copyright  2015 John Okely &lt;john@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_tree=(obj=_tree)&amp;&amp;obj.__esModule?obj:{default:obj};_exports.init=instanceId=&gt;{const navTree=new _tree.default(".block_navigation .block_tree"),blockNode=document.querySelector('[data-instance-id="'.concat(instanceId,'"]'));navTree.finishExpandingGroup=item=&gt;{_tree.default.prototype.finishExpandingGroup.call(navTree,item),(0,_events.notifyBlockContentUpdated)(blockNode)},navTree.collapseGroup=item=&gt;{_tree.default.prototype.collapseGroup.call(navTree,item),(0,_events.notifyBlockContentUpdated)(blockNode)}}}));
/**
 * Parse the response from the navblock ajax page and render the correct DOM
 * structure for the tree from it.
 *
 * @module     block_navigation/ajax_response_renderer
 * @copyright  2015 John Okely &lt;john@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("block_navigation/ajax_response_renderer",["jquery","core/templates","core/notification","core/url","core/aria"],(function($,Templates,Notification,Url,Aria){var NODETYPE_ACTIVITY=40,NODETYPE_RESOURCE=50;function buildDOM(rootElement,nodes){var ul=$("&lt;ul&gt;&lt;/ul&gt;");ul.attr("role","group"),Aria.hide(ul),$.each(nodes,(function(index,node){if("object"==typeof node){var li=$("&lt;li&gt;&lt;/li&gt;"),p=$("&lt;p&gt;&lt;/p&gt;"),id=node.id||node.key+"_tree_item",icon=null,isBranch=!(!node.expandable&amp;&amp;!node.haschildren);li.attr("role","treeitem"),p.addClass("tree_item"),p.attr("id",id),p.attr("tabindex","-1"),node.requiresajaxloading&amp;&amp;(li.attr("data-requires-ajax",!0),li.attr("data-node-id",node.id),li.attr("data-node-key",node.key),li.attr("data-node-type",node.type)),isBranch&amp;&amp;(li.addClass("collapsed contains_branch"),li.attr("aria-expanded",!1),p.addClass("branch"));var eleToAddIcon=null;if(node.link){var link=$('&lt;a title="'+node.title+'" href="'+node.link+'"&gt;&lt;/a&gt;');eleToAddIcon=link,link.append('&lt;span class="item-content-wrap"&gt;'+node.name+"&lt;/span&gt;"),node.hidden&amp;&amp;link.addClass("dimmed"),p.append(link)}else{var span=$("&lt;span&gt;&lt;/span&gt;");eleToAddIcon=span,span.append('&lt;span class="item-content-wrap"&gt;'+node.name+"&lt;/span&gt;"),node.hidden&amp;&amp;span.addClass("dimmed"),p.append(span)}!node.icon||isBranch&amp;&amp;node.type!==NODETYPE_ACTIVITY&amp;&amp;node.type!==NODETYPE_RESOURCE||(li.addClass("item_with_icon"),p.addClass("hasicon"),node.type===NODETYPE_ACTIVITY||node.type===NODETYPE_RESOURCE?((icon=$("&lt;img/&gt;")).attr("alt",node.icon.alt),icon.attr("title",node.icon.title),icon.attr("src",Url.imageUrl(node.icon.pix,node.icon.component)),$.each(node.icon.classes,(function(index,className){icon.addClass(className)})),eleToAddIcon.prepend(icon)):("moodle"==node.icon.component&amp;&amp;(node.icon.component="core"),Templates.renderPix(node.icon.pix,node.icon.component,node.icon.title).then((function(html){eleToAddIcon.prepend(html)})).catch(Notification.exception))),li.append(p),ul.append(li),node.children&amp;&amp;node.children.length?buildDOM(li,node.children):isBranch&amp;&amp;!node.requiresajaxloading&amp;&amp;(li.removeClass("contains_branch"),p.addClass("emptybranch"))}})),rootElement.append(ul);var id=rootElement.attr("id")+"_group";ul.attr("id",id),rootElement.attr("aria-owns",id),rootElement.attr("role","treeitem")}return{render:function(element,nodes){if(nodes.children&amp;&amp;nodes.children.length){buildDOM(element,nodes.children);var item=element.children("[role='treeitem']").first(),group=element.find("#"+item.attr("aria-owns"));item.attr("aria-expanded",!0),Aria.unhide(group)}else element.hasClass("contains_branch")&amp;&amp;(element.removeClass("contains_branch"),element.addClass("emptybranch"))}}}));
/**
 * Load the nav tree items via ajax and render the response.
 *
 * @module     block_navigation/nav_loader
 * @copyright  2015 John Okely &lt;john@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("block_navigation/nav_loader",["jquery","core/ajax","core/config","block_navigation/ajax_response_renderer"],(function($,ajax,config,renderer){var URL=config.wwwroot+"/lib/ajax/getnavbranch.php";function getBlockInstanceId(element){return element.closest("[data-block]").attr("data-instanceid")}return{load:function(element){element=$(element);var promise=$.Deferred(),settings={type:"POST",dataType:"json",data:{elementid:element.attr("data-node-id"),id:element.attr("data-node-key"),type:element.attr("data-node-type"),sesskey:config.sesskey,instance:getBlockInstanceId(element)}};return $.ajax(URL,settings).done((function(nodes){renderer.render(element,nodes),promise.resolve()})),promise}}}));
/**
 * Load the site admin nav tree via ajax and render the response.
 *
 * @module     block_navigation/site_admin_loader
 * @copyright  2015 John Okely &lt;john@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("block_navigation/site_admin_loader",["jquery","core/ajax","core/config","block_navigation/ajax_response_renderer"],(function($,ajax,config,renderer){var URL=config.wwwroot+"/lib/ajax/getsiteadminbranch.php";return{load:function(element){element=$(element);var promise=$.Deferred(),settings={type:"POST",dataType:"json",data:{type:71,sesskey:config.sesskey}};return $.ajax(URL,settings).done((function(nodes){renderer.render(element,nodes),promise.resolve()})),promise}}}));
/**
 * A javascript module that handles the change of the user's visibility in the
 * online users block.
 *
 * @module     block_online_users/change_user_visibility
 * @copyright  2018 Mihail Geshoski &lt;mihail@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("block_online_users/change_user_visibility",["jquery","core/ajax","core/str","core/notification"],(function($,Ajax,Str,Notification){var SELECTORS_CHANGE_VISIBILITY_LINK="#change-user-visibility",SELECTORS_CHANGE_VISIBILITY_ICON="#change-user-visibility .icon",oppositeAction=function(action){return"show"==action?"hide":"show"},changeVisibilityLinkAttr=function(action){getTitle(action).then((function(title){$(SELECTORS_CHANGE_VISIBILITY_LINK).attr({"data-action":action,title:title})})).catch(Notification.exception)},changeVisibilityIconAttr=function(action){var icon=$(SELECTORS_CHANGE_VISIBILITY_ICON);getTitle(action).then((function(title){$(icon).attr({title:title,"aria-label":title}),icon.is("img")?$(icon).attr({src:M.util.image_url("t/"+action),alt:title}):($(icon).addClass(getIconClass(action)),$(icon).removeClass(getIconClass(oppositeAction(action))))})).catch(Notification.exception)},getIconClass=function(action){return"show"==action?"fa-eye-slash":"fa-eye"},getTitle=function(action){return Str.get_string("online_status:"+action,"block_online_users")};return{init:function(){$(SELECTORS_CHANGE_VISIBILITY_LINK).on("click",(function(e){e.preventDefault(),function(action,userid){var request={methodname:"core_user_set_user_preferences",args:{preferences:[{name:"block_online_users_uservisibility",value:"show"==action?1:0,userid:userid}]}};Ajax.call([request])[0].then((function(data){if(data.saved){var newAction=oppositeAction(action);changeVisibilityLinkAttr(newAction),changeVisibilityIconAttr(newAction)}})).catch(Notification.exception)}($(this).attr("data-action"),$(this).attr("data-userid"))}))}}}));
define("block_onlinesurvey/spinner",[],(function(){return{init:function(src){var iframeElem=document.getElementById("block_onlinesurvey_contentframe"),contentElem=document.getElementById("block_onlinesurvey_surveys_content");iframeElem.src=src,iframeElem.addEventListener("load",(function(){contentElem.className=contentElem.className.replace(/block_onlinesurvey_is-loading/,"")}),!0)}}}));
define("block_onlinesurvey/modal-zoom",["core/templates","core/str"],(function(templates){var popupinfotitle="",popupinfocontent="",userlogintime=0,handleClickSmallModal=function(e){e.preventDefault();var originalIframe=e.target.querySelector("iframe");null!==originalIframe||(originalIframe=parent.document.querySelector("iframe")),templates.render("block_onlinesurvey/modal-iframe",{src:originalIframe.src+"&amp;modalZoom=1",title:""}).done((function(source){var div=document.createElement("div");div.innerHTML=source;var modalContainer=div.firstChild;document.body.insertBefore(modalContainer,document.body.firstChild),document.body.className+=" block_onlinesurvey_custom-modal-open";var closeCallback=function(){document.body.className=document.body.className.replace(" block_onlinesurvey_custom-modal-open",""),function(){var myElement=document.getElementById("block_onlinesurvey_contentframe");if(myElement){var oldsrc=myElement.src;myElement.src="",myElement.src=oldsrc}}(),modalContainer.className+=" fading",setTimeout((function(){null!==modalContainer.parentNode&amp;&amp;modalContainer.parentNode.removeChild(modalContainer)}),250)};modalContainer.querySelector(".block_onlinesurvey_custom-modal_close-button").addEventListener("click",(function(e){return e.preventDefault(),closeCallback()})),modalContainer.addEventListener("click",(function(e){return e.preventDefault(),e.target===modalContainer&amp;&amp;closeCallback()}))}))};return{init:function(popuptitle,popupcontent,currentlogin){popupinfotitle=popuptitle,popupinfocontent=popupcontent,userlogintime=currentlogin;for(var zoomContainer=document.querySelectorAll("#block_onlinesurvey_surveys_content"),i=0;i&lt;zoomContainer.length;i++)zoomContainer[i].addEventListener("click",handleClickSmallModal);window.EVASYS={generatepopupinfo:this.generatepopupinfo},window.evasysGeneratePopupinfo=this.generatepopupinfo},generatepopupinfo:function(){var popupinfo=sessionStorage.getItem("onlinesurvey_popupinfo");0!=popupinfo&amp;&amp;null!==popupinfo&amp;&amp;popupinfo==userlogintime||(sessionStorage.setItem("onlinesurvey_popupinfo",userlogintime),templates.render("block_onlinesurvey/popupinfo",{title:popupinfotitle,content:popupinfocontent}).done((function(source){var div=document.createElement("div");div.innerHTML=source;var modalContainer=div.firstChild;document.body.insertBefore(modalContainer,document.body.firstChild),document.body.className+=" block_onlinesurvey_custom-modal-open popupinfo";var closeCallback=function(){document.body.className=document.body.className.replace(" block_onlinesurvey_custom-modal-open",""),modalContainer.className+=" fading",setTimeout((function(){null!==modalContainer.parentNode&amp;&amp;modalContainer.parentNode.removeChild(modalContainer)}),250)};modalContainer.querySelector(".block_onlinesurvey_custom-modal_close-button").addEventListener("click",(function(e){return e.preventDefault(),closeCallback()})),modalContainer.addEventListener("click",(function(e){return e.preventDefault(),e.target===modalContainer&amp;&amp;closeCallback()}))})))}}}));
define("block_private_files/files_tree",["exports","core/tree"],(function(_exports,_tree){var obj;
/**
   * Changes the display of directories and files into a tree.
   *
   * @module      block_private_files/files_tree
   * @copyright   2021 Shamim Rezaie &lt;shamim@moodle.com&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_tree=(obj=_tree)&amp;&amp;obj.__esModule?obj:{default:obj};_exports.init=blockId=&gt;{new _tree.default("#".concat(blockId,' [role="tree"]'))}}));
/**
 * Javascript to initialise the Recently accessed courses block.
 *
 * @module     block_recentlyaccessedcourses/main
 * @copyright  2018 Victor Deniz &lt;victor@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("block_recentlyaccessedcourses/main",["jquery","core/custom_interaction_events","core/notification","core/pubsub","core/paged_content_paging_bar","core/templates","core_course/events","core_course/repository","core/aria"],(function($,CustomEvents,Notification,PubSub,PagedContentPagingBar,Templates,CourseEvents,CoursesRepository,Aria){var SELECTORS_BLOCK_CONTAINER='[data-region="recentlyaccessedcourses"]',SELECTORS_CARD_CONTAINER='[data-region="card-deck"]',SELECTORS_COURSE_IS_FAVOURITE='[data-region="is-favourite"]',SELECTORS_CONTENT='[data-region="view-content"]',SELECTORS_EMPTY_MESSAGE='[data-region="empty-message"]',SELECTORS_LOADING_PLACEHOLDER='[data-region="loading-placeholder"]',SELECTORS_PAGING_BAR='[data-region="paging-bar"]',SELECTORS_PAGING_BAR_NEXT='[data-control="next"]',SELECTORS_PAGING_BAR_PREVIOUS='[data-control="previous"]',contentLoaded=!1,allCourses=[],visibleCoursesId=null,cardWidth=null,viewIndex=0,availableVisibleCards=1,loadContent=function(userid){return CoursesRepository.getLastAccessedCourses(userid,10).then((function(courses){return function(courses){var showcoursecategory=$(SELECTORS_BLOCK_CONTAINER).data("displaycoursecategory"),promises=courses.map((function(course){return course.showcoursecategory=showcoursecategory,Templates.render("block_recentlyaccessedcourses/course-card",course)}));return $.when.apply(null,promises).then((function(){var renderedCourses=[];return promises.forEach((function(promise){promise.then((function(html){renderedCourses.push($(html))})).catch(Notification.exception)})),renderedCourses}))}(courses)}))},recalculateVisibleCourses=function(root){var container=root.find(SELECTORS_CONTENT).find(SELECTORS_CARD_CONTAINER),availableWidth=parseFloat(root.css("width")),numberOfCourses=allCourses.length,start=0;(cardWidth||(container.html(allCourses[0]),cardWidth=allCourses[0].outerWidth(!0)),availableVisibleCards=Math.floor(availableWidth/cardWidth),viewIndex+availableVisibleCards&lt;numberOfCourses)?start=viewIndex:start=(start=viewIndex-(viewIndex+availableVisibleCards-numberOfCourses))&gt;=0?start:0;0===availableVisibleCards&amp;&amp;(availableVisibleCards=1);var coursesToShow=allCourses.slice(start,start+availableVisibleCards),newVisibleCoursesId=coursesToShow.reduce((function(carry,course){return carry+course.attr("data-course-id")}),"");if(allCourses.length&gt;coursesToShow.length?(container.addClass("justify-content-center"),container.removeClass("justify-content-start")):(container.removeClass("justify-content-center"),container.addClass("justify-content-start")),visibleCoursesId!=newVisibleCoursesId){var pagingBar=root.find(PagedContentPagingBar.rootSelector);container.html(coursesToShow),visibleCoursesId=newVisibleCoursesId,availableVisibleCards&gt;=allCourses.length?function(root){var pagingBar=root.find(SELECTORS_PAGING_BAR);pagingBar.css("opacity",0),pagingBar.css("visibility","hidden"),Aria.hide(pagingBar)}(root):(!function(root){var pagingBar=root.find(SELECTORS_PAGING_BAR);pagingBar.css("opacity",1),pagingBar.css("visibility","visible"),Aria.unhide(pagingBar)}(root),0===viewIndex?PagedContentPagingBar.disablePreviousControlButtons(pagingBar):PagedContentPagingBar.enablePreviousControlButtons(pagingBar),viewIndex+availableVisibleCards&gt;=allCourses.length?PagedContentPagingBar.disableNextControlButtons(pagingBar):PagedContentPagingBar.enableNextControlButtons(pagingBar))}},registerEventListeners=function(root){var resizeTimeout=null,drawerToggling=!1;PubSub.subscribe(CourseEvents.favourited,(function(courseId){!function(root,courseId){allCourses.forEach((function(course){course.attr("data-course-id")==courseId&amp;&amp;course.find(SELECTORS_COURSE_IS_FAVOURITE).removeClass("hidden")}))}(0,courseId)})),PubSub.subscribe(CourseEvents.unfavorited,(function(courseId){!function(root,courseId){allCourses.forEach((function(course){course.attr("data-course-id")==courseId&amp;&amp;course.find(SELECTORS_COURSE_IS_FAVOURITE).addClass("hidden")}))}(0,courseId)})),PubSub.subscribe("nav-drawer-toggle-start",(function(){if(contentLoaded&amp;&amp;allCourses.length&amp;&amp;!drawerToggling){drawerToggling=!0;var recalculationCount=0,doRecalculation=function(){setTimeout((function(){recalculateVisibleCourses(root),++recalculationCount&lt;5&amp;&amp;drawerToggling&amp;&amp;doRecalculation()}),100)};doRecalculation(root)}})),PubSub.subscribe("nav-drawer-toggle-end",(function(){drawerToggling=!1})),$(window).on("resize",(function(){contentLoaded&amp;&amp;allCourses.length&amp;&amp;(resizeTimeout||(resizeTimeout=setTimeout((function(){resizeTimeout=null,recalculateVisibleCourses(root)}),66)))})),CustomEvents.define(root,[CustomEvents.events.activate]),root.on(CustomEvents.events.activate,SELECTORS_PAGING_BAR_NEXT,(function(e,data){$(e.target).closest(SELECTORS_PAGING_BAR_NEXT).hasClass("disabled")||(viewIndex+=availableVisibleCards,recalculateVisibleCourses(root)),data.originalEvent.preventDefault()})),root.on(CustomEvents.events.activate,SELECTORS_PAGING_BAR_PREVIOUS,(function(e,data){$(e.target).closest(SELECTORS_PAGING_BAR_PREVIOUS).hasClass("disabled")||(viewIndex=(viewIndex-=availableVisibleCards)&lt;0?0:viewIndex,recalculateVisibleCourses(root)),data.originalEvent.preventDefault()}))};return{init:function(userid,root){root=$(root),registerEventListeners(root),loadContent(userid).then((function(renderedCourses){contentLoaded=!0,(allCourses=renderedCourses).length?(!function(root){root.find(SELECTORS_CONTENT).removeClass("hidden"),root.find(SELECTORS_EMPTY_MESSAGE).addClass("hidden"),root.find(SELECTORS_LOADING_PLACEHOLDER).addClass("hidden")}(root),recalculateVisibleCourses(root)):function(root){root.find(SELECTORS_EMPTY_MESSAGE).removeClass("hidden"),root.find(SELECTORS_LOADING_PLACEHOLDER).addClass("hidden"),root.find(SELECTORS_CONTENT).addClass("hidden")}(root)})).catch(Notification.exception)}}}));
/**
 * A javascript module to handle user ajax actions.
 *
 * @module     block_recentlyaccesseditems/repository
 * @copyright  2018 Victor Deniz &lt;victor@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("block_recentlyaccesseditems/repository",["core/ajax"],(function(Ajax){return{getRecentItems:function(limit){var args={};void 0!==limit&amp;&amp;(args.limit=limit);var request={methodname:"block_recentlyaccesseditems_get_recent_items",args:args};return Ajax.call([request])[0]}}}));
/**
 * Javascript to initialise the Recently accessed items block.
 *
 * @module     block_recentlyaccesseditems/main
 * @copyright  2018 Victor Deniz &lt;victor@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("block_recentlyaccesseditems/main",["jquery","block_recentlyaccesseditems/repository","core/templates","core/notification"],(function($,Repository,Templates,Notification){var SELECTORS_CARDDECK_CONTAINER='[data-region="recentlyaccesseditems-view"]',SELECTORS_CARDDECK='[data-region="recentlyaccesseditems-view-content"]',SELECTORS_SHOWMORE_LINK='[data-region="recentlyaccesseditems-view"] [data-action="more-items"]';return{init:function(root){var limit,itemsContainer=(root=$(root)).find(SELECTORS_CARDDECK_CONTAINER),itemsContent=root.find(SELECTORS_CARDDECK);(limit=9,Repository.getRecentItems(limit)).then((function(items){var pageContentPromise=function(root,items){if(items.length&gt;0){let hasmoreitems=!1;return items.length&gt;3&amp;&amp;(hasmoreitems=!0),Templates.render("block_recentlyaccesseditems/view-cards",{items:items,hasmoreitems:hasmoreitems})}var noitemsimgurl=root.attr("data-noitemsimgurl");return Templates.render("block_recentlyaccesseditems/no-items",{noitemsimgurl:noitemsimgurl})}(itemsContainer,items);pageContentPromise.then((function(html,js){return Templates.replaceNodeContents(itemsContent,html,js),items.length&gt;3&amp;&amp;(()=&gt;{const showmoreLink=document.querySelector(SELECTORS_SHOWMORE_LINK);showmoreLink.addEventListener("click",(()=&gt;{showmoreLink.classList.add("d-none"),document.querySelector('[data-region="items-list"]').children.forEach((function(hiddenItem){hiddenItem.style="display: block"}))}))})(),null})).catch(Notification.exception)})).catch(Notification.exception)}}}));
define("block_settings/settingsblock",["exports","core_block/events","core/tree"],(function(_exports,_events,_tree){var obj;
/**
   * Load the settings block tree javscript
   *
   * @module     block_settings/settingsblock
   * @copyright  2015 John Okely &lt;john@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_tree=(obj=_tree)&amp;&amp;obj.__esModule?obj:{default:obj};_exports.init=(instanceId,siteAdminNodeId)=&gt;{const adminTree=new _tree.default(".block_settings .block_tree"),blockNode=document.querySelector('[data-instance-id="'.concat(instanceId,'"]'));if(siteAdminNodeId){const siteAdminLink=adminTree.treeRoot.get(0).querySelector("#".concat(siteAdminNodeId," a")),newContainer=document.createElement("span");newContainer.setAttribute("tabindex","0"),siteAdminLink.childNodes.forEach((node=&gt;newContainer.appendChild(node))),siteAdminLink.replaceWith(newContainer)}adminTree.finishExpandingGroup=function(item){_tree.default.prototype.finishExpandingGroup.call(adminTree,item),(0,_events.notifyBlockContentUpdated)(blockNode)},adminTree.collapseGroup=function(item){_tree.default.prototype.collapseGroup.call(adminTree,item),(0,_events.notifyBlockContentUpdated)(blockNode)}}}));
/**
 * A javascript module to retrieve user's starred courses.
 *
 * @module block_starredcourses/repository
 * @copyright  2018 Simey Lameze &lt;simey@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("block_starredcourses/repository",["jquery","core/ajax","core/notification"],(function($,Ajax,Notification){return{getStarredCourses:function(args){var request={methodname:"block_starredcourses_get_starred_courses",args:args},promise=Ajax.call([request])[0];return promise.fail(Notification.exception),promise}}}));
/**
 * Javascript to initialise the starred courses block.
 *
 * @module block_starredcourses/main
 * @copyright   2018 Simey Lameze &lt;simey@moodle.com&gt;
 * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("block_starredcourses/main",["jquery","core/notification","block_starredcourses/repository","core/pubsub","core/templates","core_course/events"],(function($,Notification,Repository,PubSub,Templates,CourseEvents){var SELECTORS_BLOCK_CONTAINER='[data-region="starred-courses"]',SELECTORS_STARRED_COURSES_REGION_VIEW='[data-region="starred-courses-view"]',SELECTORS_STARRED_COURSES_REGION='[data-region="starred-courses-view-content"]',reloadContent=function(root){var content=root.find(SELECTORS_STARRED_COURSES_REGION);return Repository.getStarredCourses({limit:0,offset:0}).then((function(courses){var showcoursecategory=$(SELECTORS_BLOCK_CONTAINER).data("displaycoursecategory");return courses=courses.map((function(course){return course.showcoursecategory=showcoursecategory,course})),function(root,courses){if(courses.length&gt;0)return Templates.render("core_course/view-cards",{courses:courses});var nocoursesimg=root.find(SELECTORS_STARRED_COURSES_REGION_VIEW).attr("data-nocoursesimg");return Templates.render("block_starredcourses/no-courses",{nocoursesimg:nocoursesimg})}(root,courses)})).then((function(html,js){return Templates.replaceNodeContents(content,html,js)})).catch(Notification.exception)};return{init:function(root){(function(root){PubSub.subscribe(CourseEvents.favourited,(function(){reloadContent(root)})),PubSub.subscribe(CourseEvents.unfavorited,(function(){reloadContent(root)}))})(root=$(root)),reloadContent(root)}}}));
/**
 * Manage the timeline dates view for the timeline block.
 *
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("block_timeline/view_dates",["jquery","block_timeline/event_list","core/pubsub","core/paged_content_events"],(function($,EventList,PubSub,PagedContentEvents){var SELECTORS_EVENT_LIST_CONTAINER='[data-region="event-list-container"]',SELECTORS_NO_COURSES_EMPTY_MESSAGE='[data-region="no-courses-empty-message"]',load=function(root){if(!root.find(SELECTORS_NO_COURSES_EMPTY_MESSAGE).length){var eventListContainer=root.find(SELECTORS_EVENT_LIST_CONTAINER),namespace=$(eventListContainer).attr("id")+"user_block_timeline"+Math.random();!function(root,namespace){var event=namespace+PagedContentEvents.SET_ITEMS_PER_PAGE_LIMIT;PubSub.subscribe(event,(function(limit){$(root).data("limit",limit)}))}(root,namespace);var config={persistentLimitKey:"block_timeline_user_limit_preference",eventNamespace:namespace};EventList.init(eventListContainer,config)}};return{init:function(root){(root=$(root)).hasClass("active")&amp;&amp;!root.find(SELECTORS_NO_COURSES_EMPTY_MESSAGE).length&amp;&amp;(load(root),root.attr("data-seen",!0))},reset:function(root){root.removeAttr("data-seen"),root.hasClass("active")&amp;&amp;(load(root),root.attr("data-seen",!0))},shown:function(root){root.attr("data-seen")||(load(root),root.attr("data-seen",!0))}}}));
/**
 * Manage the timeline courses view for the timeline block.
 *
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("block_timeline/view_courses",["jquery","core/notification","core/custom_interaction_events","core/templates","block_timeline/event_list","core_course/repository","block_timeline/calendar_events_repository","core/pending"],(function($,Notification,CustomEvents,Templates,EventList,CourseRepository,EventsRepository,Pending){var SELECTORS_MORE_COURSES_BUTTON='[data-action="more-courses"]',SELECTORS_MORE_COURSES_BUTTON_CONTAINER='[data-region="more-courses-button-container"]',SELECTORS_NO_COURSES_EMPTY_MESSAGE='[data-region="no-courses-empty-message"]',SELECTORS_NO_COURSES_WITH_EVENTS_MESSAGE='[data-region="no-events-empty-message"]',SELECTORS_COURSES_LIST='[data-region="courses-list"]',SELECTORS_COURSE_ITEMS_LOADING_PLACEHOLDER='[data-region="course-items-loading-placeholder"]',SELECTORS_LOADING_ICON=".loading-icon",SELECTORS_TIMELINE_BLOCK='[data-region="timeline"]',SELECTORS_TIMELINE_SEARCH='[data-action="search"]',TEMPLATES_COURSE_ITEMS="block_timeline/course-items",TEMPLATES_LOADING_ICON="core/loading";const additionalConfig={courseview:!0};var hideLoadingPlaceholder=function(root){root.find(SELECTORS_COURSE_ITEMS_LOADING_PLACEHOLDER).addClass("hidden")};var hideMoreCoursesButton=function(root){root.find(SELECTORS_MORE_COURSES_BUTTON_CONTAINER).addClass("hidden")},showMoreCoursesButton=function(root){root.find(SELECTORS_MORE_COURSES_BUTTON_CONTAINER).removeClass("hidden")},disableMoreCoursesButtonLoading=function(root){var button=root.find(SELECTORS_MORE_COURSES_BUTTON);button.prop("disabled",!1),button.find(SELECTORS_LOADING_ICON).remove()};const showNoCoursesWithEventsMessage=function(root){const container=root.find(SELECTORS_COURSES_LIST);Templates.replaceNodeContents(container,"",""),root.find(SELECTORS_NO_COURSES_WITH_EVENTS_MESSAGE).removeClass("hidden")};var getOffset=function(root){return parseInt(root.attr("data-offset"),10)},setOffset=function(root,offset){root.attr("data-offset",offset)},getLimit=function(root){return parseInt(root.attr("data-limit"),10)},getDaysOffset=function(root){return parseInt(root.attr("data-days-offset"),10)},getDaysLimit=function(root){var daysLimit=root.attr("data-days-limit");return null!=daysLimit?parseInt(daysLimit,10):void 0},getMidnight=function(root){return parseInt(root.attr("data-midnight"),10)},getStartTime=function(root){return getMidnight(root)+86400*getDaysOffset(root)},getEndTime=function(root){let endTime=null;if(root.attr("data-filter-overdue"))endTime=Math.floor(Date.now()/1e3);else{const midnight=getMidnight(root),daysLimit=getDaysLimit(root);null!=daysLimit&amp;&amp;(endTime=midnight+86400*daysLimit)}return endTime},hasReloadedEventsSince=function(root,time){return function(root){return root.data("last-event-load-time")}(root)&gt;time},loadEventsForCourses=function(courses,startTime,endTime,searchValue){return function(courseIds,startTime,limit,endTime,searchValue){var args={courseids:courseIds,starttime:startTime,limit:limit};return endTime&amp;&amp;(args.endtime=endTime),searchValue&amp;&amp;(args.searchvalue=searchValue),EventsRepository.queryByCourses(args)}(courses.map((function(course){return course.id})),startTime,6,endTime,searchValue)},updateDisplayFromCourses=function(courses,root,midnight,daysOffset,daysLimit,append){return Templates.render(TEMPLATES_COURSE_ITEMS,{courses:courses,midnight:midnight,hasdaysoffset:!0,hasdayslimit:null!=daysLimit,daysoffset:daysOffset,dayslimit:daysLimit,nodayslimit:null==daysLimit,courseview:!0,hascourses:!0}).then((function(html){return hideLoadingPlaceholder(root),html&amp;&amp;function(root,html){let append=arguments.length&gt;2&amp;&amp;void 0!==arguments[2]&amp;&amp;arguments[2];var container=root.find(SELECTORS_COURSES_LIST);append?Templates.appendNodeContents(container,html,""):Templates.replaceNodeContents(container,html,"")}(root,html,append),html})).then((function(html){return courses.length&lt;2?hideMoreCoursesButton(root):showMoreCoursesButton(root),html})).catch((function(){hideLoadingPlaceholder(root)}))},loadMoreCourses=function(root){let append=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]&amp;&amp;arguments[1];const pendingPromise=new Pending("block/timeline:load-more-courses");var offset=getOffset(root),limit=getLimit(root);const startTime=getStartTime(root),endTime=getEndTime(root),searchValue=root.closest(SELECTORS_TIMELINE_BLOCK).find(SELECTORS_TIMELINE_SEARCH).val();return CourseRepository.getEnrolledCoursesWithEventsByTimelineClassification("all",limit,offset,"fullname asc",searchValue,startTime,endTime).then((function(result){var startEventLoadingTime=Date.now(),courses=result.courses,nextOffset=result.nextoffset,daysOffset=getDaysOffset(root),daysLimit=getDaysLimit(root),midnight=getMidnight(root);const moreCoursesAvailable=result.morecoursesavailable;setOffset(root,nextOffset);var eventsPromise=loadEventsForCourses(courses,startTime,endTime,searchValue),renderPromise=updateDisplayFromCourses(courses,root,midnight,daysOffset,daysLimit,append);return $.when(eventsPromise,renderPromise).then((function(eventsByCourse){return hasReloadedEventsSince(root,startEventLoadingTime)||(courses.length&gt;0?(courses.forEach((function(course){const containerSelector='[data-region="course-events-container"][data-course-id="'+course.id+'"]',eventListRoot=root.find(containerSelector).find(EventList.rootSelector);EventList.init(eventListRoot,additionalConfig)})),moreCoursesAvailable?showMoreCoursesButton(root):hideMoreCoursesButton(root)):(hideMoreCoursesButton(root),0==offset&amp;&amp;showNoCoursesWithEventsMessage(root))),eventsByCourse}))})).then((()=&gt;pendingPromise.resolve())).catch(Notification.exception)},registerEventListeners=function(root){CustomEvents.define(root,[CustomEvents.events.activate]),root.on(CustomEvents.events.activate,SELECTORS_MORE_COURSES_BUTTON,(function(e,data){!function(root){var button=root.find(SELECTORS_MORE_COURSES_BUTTON);button.prop("disabled",!0),Templates.render(TEMPLATES_LOADING_ICON,{}).then((function(html){return button.append(html),html})).catch((function(){return!1}))}(root),loadMoreCourses(root,!0).then((function(){disableMoreCoursesButtonLoading(root)})).catch((function(){disableMoreCoursesButtonLoading(root)})),data&amp;&amp;(data.originalEvent.preventDefault(),data.originalEvent.stopPropagation()),e.stopPropagation()}))},shown=function(root){root.attr("data-seen")||root.find(SELECTORS_NO_COURSES_EMPTY_MESSAGE).length||(loadMoreCourses(root),root.attr("data-seen",!0))};return{init:function(root){(root=$(root)).find(SELECTORS_NO_COURSES_EMPTY_MESSAGE).length||(!function(root,time){root.data("last-event-load-time",time)}(root,Date.now()),root.hasClass("active")&amp;&amp;(loadMoreCourses(root),root.attr("data-seen",!0)),registerEventListeners(root))},reset:function(root){setOffset(root,0),function(root){root.find(SELECTORS_COURSE_ITEMS_LOADING_PLACEHOLDER).removeClass("hidden")}(root),function(root){root.find(SELECTORS_NO_COURSES_WITH_EVENTS_MESSAGE).addClass("hidden")}(root),root.removeAttr("data-seen"),root.hasClass("active")&amp;&amp;shown(root)},shown:shown}}));
/**
 * Manage the timeline view navigation for the timeline block.
 *
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("block_timeline/view_nav",["jquery","core/custom_interaction_events","block_timeline/view","core/ajax","core/notification","core/utils"],(function($,CustomEvents,View,Ajax,Notification,Utils){var SELECTORS_TIMELINE_DAY_FILTER='[data-region="day-filter"]',SELECTORS_TIMELINE_DAY_FILTER_OPTION="[data-from]",SELECTORS_TIMELINE_VIEW_SELECTOR='[data-region="view-selector"]',SELECTORS_DATA_DAYS_OFFSET="[data-days-offset]",SELECTORS_TIMELINE_SEARCH_INPUT='[data-action="search"]',SELECTORS_TIMELINE_SEARCH_CLEAR_ICON='[data-action="clearsearch"]',SELECTORS_NO_COURSES_EMPTY_MESSAGE='[data-region="no-courses-empty-message"]',updateUserPreferences=function(type,value){var request={methodname:"core_user_update_user_preferences",args:{preferences:[{type:type,value:value}]}};Ajax.call([request])[0].fail(Notification.exception)};const activeSearchState=(clearSearchIcon,timelineViewRoot)=&gt;{clearSearchIcon.removeClass("d-none"),View.reset(timelineViewRoot)},clearSearchState=(clearSearchIcon,timelineViewRoot)=&gt;{clearSearchIcon.addClass("d-none"),View.reset(timelineViewRoot)};return{init:function(root,timelineViewRoot){(function(root,timelineViewRoot){var viewSelector=root.find(SELECTORS_TIMELINE_VIEW_SELECTOR);viewSelector.on("shown shown.bs.tab",(function(e){View.shown(timelineViewRoot),$(e.target).removeClass("active")})),CustomEvents.define(viewSelector,[CustomEvents.events.activate]),viewSelector.on(CustomEvents.events.activate,"[data-toggle='tab']",(function(e){var filtername=$(e.currentTarget).data("filtername");updateUserPreferences("block_timeline_user_sort_preference",filtername)}))})(root=$(root),timelineViewRoot),root.find(SELECTORS_NO_COURSES_EMPTY_MESSAGE).length||(function(root,timelineViewRoot){var timelineDaySelectorContainer=root.find(SELECTORS_TIMELINE_DAY_FILTER);CustomEvents.define(timelineDaySelectorContainer,[CustomEvents.events.activate]),timelineDaySelectorContainer.on(CustomEvents.events.activate,SELECTORS_TIMELINE_DAY_FILTER_OPTION,(function(e,data){var filtername=$(e.currentTarget).data("filtername");updateUserPreferences("block_timeline_user_filter_preference",filtername);var option=$(e.target).closest(SELECTORS_TIMELINE_DAY_FILTER_OPTION);if("true"!=option.attr("aria-current")){var daysOffset=option.attr("data-from"),daysLimit=option.attr("data-to"),elementsWithDaysOffset=root.find(SELECTORS_DATA_DAYS_OFFSET);elementsWithDaysOffset.attr("data-days-offset",daysOffset),null!=daysLimit?elementsWithDaysOffset.attr("data-days-limit",daysLimit):elementsWithDaysOffset.removeAttr("data-days-limit"),"overdue"===option.attr("data-filtername")?elementsWithDaysOffset.attr("data-filter-overdue",!0):elementsWithDaysOffset.removeAttr("data-filter-overdue"),View.reset(timelineViewRoot),data.originalEvent.preventDefault()}}))}(root,timelineViewRoot),((root,timelineViewRoot)=&gt;{const searchInput=root.find(SELECTORS_TIMELINE_SEARCH_INPUT),clearSearchIcon=root.find(SELECTORS_TIMELINE_SEARCH_CLEAR_ICON);searchInput.on("input",Utils.debounce((()=&gt;{""!==searchInput.val()?activeSearchState(clearSearchIcon,timelineViewRoot):clearSearchState(clearSearchIcon,timelineViewRoot)}),1e3)),clearSearchIcon.on("click",(()=&gt;{searchInput.val(""),clearSearchState(clearSearchIcon,timelineViewRoot),searchInput.focus()}))})(root,timelineViewRoot))}}}));
/**
 * Javascript to initialise the timeline block.
 *
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("block_timeline/main",["jquery","block_timeline/view_nav","block_timeline/view"],(function($,ViewNav,View){var SELECTORS_TIMELINE_VIEW='[data-region="timeline-view"]';return{init:function(root){var viewRoot=(root=$(root)).find(SELECTORS_TIMELINE_VIEW);ViewNav.init(root,viewRoot),View.init(viewRoot)}}}));
/**
 * Javascript to load and render the list of calendar events for a
 * given day range.
 *
 * @module     block_timeline/event_list
 * @copyright  2016 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("block_timeline/event_list",["jquery","core/notification","core/templates","core/str","core/user_date","block_timeline/calendar_events_repository","core/pending"],(function($,Notification,Templates,Str,UserDate,CalendarEventsRepository,Pending){var courseview=!1,SELECTORS_EMPTY_MESSAGE='[data-region="no-events-empty-message"]',SELECTORS_EVENT_LIST_CONTENT='[data-region="event-list-content"]',SELECTORS_EVENT_LIST_WRAPPER='[data-region="event-list-wrapper"]',SELECTORS_EVENT_LIST_LOADING_PLACEHOLDER='[data-region="event-list-loading-placeholder"]',SELECTORS_TIMELINE_BLOCK='[data-region="timeline"]',SELECTORS_TIMELINE_SEARCH='[data-action="search"]',SELECTORS_MORE_ACTIVITIES_BUTTON='[data-action="more-events"]',SELECTORS_MORE_ACTIVITIES_BUTTON_CONTAINER='[data-region="more-events-button-container"]',TEMPLATES_EVENT_LIST_CONTENT="block_timeline/event-list-content",TEMPLATES_MORE_ACTIVITIES_BUTTON="block_timeline/event-list-loadmore",TEMPLATES_LOADING_ICON="core/loading";var hideContent=function(root){root.find(SELECTORS_EVENT_LIST_CONTENT).addClass("hidden"),root.find(SELECTORS_EMPTY_MESSAGE).removeClass("hidden")},showContent=function(root){root.find(SELECTORS_EVENT_LIST_CONTENT).removeClass("hidden"),root.find(SELECTORS_EMPTY_MESSAGE).addClass("hidden")},emptyContent=function(root){root.find(SELECTORS_EVENT_LIST_CONTENT).empty()},render=function(calendarEvents){var templateContext=function(calendarEvents){var eventsByDay={},templateContext={courseview:courseview,eventsbyday:[]};return calendarEvents.forEach((function(calendarEvent){var dayTimestamp=calendarEvent.timeusermidnight;eventsByDay[dayTimestamp]?eventsByDay[dayTimestamp].push(calendarEvent):eventsByDay[dayTimestamp]=[calendarEvent]})),Object.keys(eventsByDay).forEach((function(dayTimestamp){var events=eventsByDay[dayTimestamp];templateContext.eventsbyday.push({dayTimestamp:dayTimestamp,events:events})})),templateContext}(calendarEvents),templateName=TEMPLATES_EVENT_LIST_CONTENT;return Templates.render(templateName,templateContext)};const createLazyLoadingContent=(root,firstLoad,itemLimit,midnight,lastId,courseId,daysOffset,daysLimit,searchValue)=&gt;loadEventsForLazyLoading(root,itemLimit,midnight,lastId,courseId,daysOffset,daysLimit,searchValue).then((data=&gt;{if(data.calendarEvents.length){const lastEventId=data.calendarEvents.at(-1).id,lastTimeStamp=data.calendarEvents.at(-1).timeusermidnight;return firstLoad.resolve({hasContent:!0,lastId:lastEventId,lastTimeStamp:lastTimeStamp,loadedAll:data.loadedAll}),render(data.calendarEvents)}return firstLoad.resolve({hasContent:!1,lastId:0,lastTimeStamp:0,loadedAll:!0}),data.calendarEvents})).catch(Notification.exception),loadEventsForLazyLoading=(root,itemLimit,midnight,lastId,courseId,daysOffset,daysLimit,searchValue)=&gt;{const eventsPromise=function(midnight,limit,daysOffset,daysLimit,lastId,courseId,searchValue){var endTime=null!=daysLimit&amp;&amp;midnight+86400*daysLimit,args={starttime:midnight+86400*daysOffset,limit:limit};return lastId&amp;&amp;(args.aftereventid=lastId),endTime&amp;&amp;(args.endtime=endTime),searchValue&amp;&amp;(args.searchvalue=searchValue),courseId?(args.courseid=courseId,CalendarEventsRepository.queryByCourse(args)):CalendarEventsRepository.queryByTime(args)}(midnight,itemLimit+1,daysOffset,daysLimit,lastId,courseId,searchValue);let calendarEvents=[],loadedAll=!0;return eventsPromise.then((result=&gt;{if(!result.events.length)return{calendarEvents:calendarEvents,loadedAll:loadedAll};const overdueFilter=document.querySelector("[data-filtername='overdue']"),filterByOverdue=overdueFilter&amp;&amp;overdueFilter.getAttribute("aria-current");if(calendarEvents=result.events.filter((event=&gt;{if("open"==event.eventtype||"opensubmission"==event.eventtype){return UserDate.getUserMidnightForTimestamp(event.timesort,midnight)&gt;midnight}return!filterByOverdue||event.overdue})),loadedAll=calendarEvents.length&lt;=itemLimit,loadedAll||calendarEvents.pop(),calendarEvents.length){const lastEventId=calendarEvents.at(-1).id;setOffset(root,lastEventId)}return{calendarEvents:calendarEvents,loadedAll:loadedAll}}))},getOffset=element=&gt;parseInt(element.attr("data-lazyload-offset"),10),setOffset=(element,offset)=&gt;{element.attr("data-lazyload-offset",offset)},getLastTimestamp=element=&gt;parseInt(element.attr("data-timestamp"),10),setLastTimestamp=(element,timestamp)=&gt;{element.attr("data-timestamp",timestamp)},disableMoreActivitiesButtonLoading=root=&gt;{root.find(SELECTORS_MORE_ACTIVITIES_BUTTON_CONTAINER).remove()},initEventListener=root=&gt;{root.find(SELECTORS_MORE_ACTIVITIES_BUTTON).on("click",(()=&gt;{(root=&gt;{const loadMoreButton=root.find(SELECTORS_MORE_ACTIVITIES_BUTTON);loadMoreButton.prop("disabled",!0),Templates.render(TEMPLATES_LOADING_ICON,{}).then((html=&gt;(loadMoreButton.append(html),html))).catch((()=&gt;!1))})(root),(root=&gt;{const midnight=parseInt(root.attr("data-midnight"),10),courseId=root.attr("data-course-id"),daysOffset=parseInt(root.attr("data-days-offset"),10),daysLimit=root.attr("data-days-limit"),lastId=getOffset(root),eventListWrapper=root.find(SELECTORS_EVENT_LIST_WRAPPER),searchValue=root.closest(SELECTORS_TIMELINE_BLOCK).find(SELECTORS_TIMELINE_SEARCH).val();loadEventsForLazyLoading(root,10,midnight,lastId,courseId,daysOffset,daysLimit,searchValue).then((data=&gt;{if(data.calendarEvents.length){const renderPromise=render(data.calendarEvents),lastTimestamp=getLastTimestamp(root);renderPromise.then(((html,js)=&gt;((html=$(html)).find('[data-timestamp="'.concat(lastTimestamp,'"]')).remove(),Templates.appendNodeContents(eventListWrapper,html.html(),js),data.loadedAll||Templates.render(TEMPLATES_MORE_ACTIVITIES_BUTTON,{}).then((html=&gt;(eventListWrapper.append(html),setLastTimestamp(root,data.calendarEvents.at(-1).timeusermidnight),initEventListener(root),html))).catch((()=&gt;!1)),html))).catch(Notification.exception)}return data})).then((()=&gt;disableMoreActivitiesButtonLoading(root))).catch(Notification.exception)})(root)}))};return{init:function(root){let additionalConfig=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]?arguments[1]:{};const pendingPromise=new Pending("block/timeline:event-init");root=$(root),courseview=!!additionalConfig.courseview;var firstLoad=$.Deferred(),eventListContent=root.find(SELECTORS_EVENT_LIST_CONTENT),loadingPlaceholder=root.find(SELECTORS_EVENT_LIST_LOADING_PLACEHOLDER),courseId=root.attr("data-course-id"),daysOffset=parseInt(root.attr("data-days-offset"),10),daysLimit=root.attr("data-days-limit"),midnight=parseInt(root.attr("data-midnight"),10);const searchValue=root.closest(SELECTORS_TIMELINE_BLOCK).find(SELECTORS_TIMELINE_SEARCH).val();return emptyContent(root),showContent(root),loadingPlaceholder.removeClass("hidden"),null!=daysLimit&amp;&amp;(daysLimit=parseInt(daysLimit,10)),createLazyLoadingContent(root,firstLoad,5,midnight,0,courseId,daysOffset,daysLimit,searchValue).then((function(html,js){return firstLoad.then((function(data){return data.hasContent?((html=$(html)).addClass("hidden"),Templates.replaceNodeContents(eventListContent,html,js),html.removeClass("hidden"),loadingPlaceholder.addClass("hidden"),data.loadedAll||Templates.render(TEMPLATES_MORE_ACTIVITIES_BUTTON,{courseview:courseview}).then((function(html){return eventListContent.append(html),setLastTimestamp(root,data.lastTimeStamp),initEventListener(root),html})).catch((function(){return!1})),data):(loadingPlaceholder.addClass("hidden"),hideContent(root))})).catch((function(){return!1})),html})).then((()=&gt;pendingPromise.resolve())).catch(Notification.exception)},rootSelector:'[data-region="event-list-container"]'}}));
/**
 * Manage the timeline view for the timeline block.
 *
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("block_timeline/view",["jquery","block_timeline/view_dates","block_timeline/view_courses"],(function($,ViewDates,ViewCourses){var SELECTORS_TIMELINE_DATES_VIEW='[data-region="view-dates"]',SELECTORS_TIMELINE_COURSES_VIEW='[data-region="view-courses"]';return{init:function(root){var datesViewRoot=(root=$(root)).find(SELECTORS_TIMELINE_DATES_VIEW),coursesViewRoot=root.find(SELECTORS_TIMELINE_COURSES_VIEW);ViewDates.init(datesViewRoot),ViewCourses.init(coursesViewRoot)},reset:function(root){var datesViewRoot=root.find(SELECTORS_TIMELINE_DATES_VIEW),coursesViewRoot=root.find(SELECTORS_TIMELINE_COURSES_VIEW);ViewDates.reset(datesViewRoot),ViewCourses.reset(coursesViewRoot)},shown:function(root){var datesViewRoot=root.find(SELECTORS_TIMELINE_DATES_VIEW),coursesViewRoot=root.find(SELECTORS_TIMELINE_COURSES_VIEW);datesViewRoot.hasClass("active")?ViewDates.shown(datesViewRoot):ViewCourses.shown(coursesViewRoot)}}}));
/**
 * A javascript module to retrieve calendar events from the server.
 *
 * @module     block_timeline/calendar_events_repository
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("block_timeline/calendar_events_repository",["jquery","core/ajax","core/notification"],(function($,Ajax,Notification){return{queryByTime:function(args){args.hasOwnProperty("limit")||(args.limit=20),args.limitnum=args.limit,delete args.limit,args.hasOwnProperty("starttime")&amp;&amp;(args.timesortfrom=args.starttime,delete args.starttime),args.hasOwnProperty("endtime")&amp;&amp;(args.timesortto=args.endtime,delete args.endtime),args.limittononsuspendedevents=!0;var request={methodname:"core_calendar_get_action_events_by_timesort",args:args},promise=Ajax.call([request])[0];return promise.fail(Notification.exception),promise},queryByCourse:function(args){args.hasOwnProperty("limit")||(args.limit=20),args.limitnum=args.limit,delete args.limit,args.hasOwnProperty("starttime")&amp;&amp;(args.timesortfrom=args.starttime,delete args.starttime),args.hasOwnProperty("endtime")&amp;&amp;(args.timesortto=args.endtime,delete args.endtime);var request={methodname:"core_calendar_get_action_events_by_course",args:args},promise=Ajax.call([request])[0];return promise.fail(Notification.exception),promise},queryByCourses:function(args){args.hasOwnProperty("limit")||(args.limit=10),args.limitnum=args.limit,delete args.limit,args.hasOwnProperty("starttime")&amp;&amp;(args.timesortfrom=args.starttime,delete args.starttime),args.hasOwnProperty("endtime")&amp;&amp;(args.timesortto=args.endtime,delete args.endtime);var request={methodname:"core_calendar_get_action_events_by_courses",args:args},promise=Ajax.call([request])[0];return promise.fail(Notification.exception),promise}}}));
var e,t;e=globalThis,t=function(){return(()=&gt;{var e={318:e=&gt;{e.exports=function(e){return e&amp;&amp;e.__esModule?e:{default:e}},e.exports.default=e.exports,e.exports.__esModule=!0},848:e=&gt;{window,e.exports=function(e){var t={};function r(i){if(t[i])return t[i].exports;var s=t[i]={i:i,l:!1,exports:{}};return e[i].call(s.exports,s,s.exports,r),s.l=!0,s.exports}return r.m=e,r.c=t,r.d=function(e,t,i){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},r.r=function(e){"undefined"!=typeof Symbol&amp;&amp;Symbol.toStringTag&amp;&amp;Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&amp;t&amp;&amp;(e=r(e)),8&amp;t)return e;if(4&amp;t&amp;&amp;"object"==typeof e&amp;&amp;e&amp;&amp;e.__esModule)return e;var i=Object.create(null);if(r.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&amp;t&amp;&amp;"string"!=typeof e)for(var s in e)r.d(i,s,function(t){return e[t]}.bind(null,s));return i},r.n=function(e){var t=e&amp;&amp;e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=1)}([function(e,t){function r(e,t){if(e&lt;1||e!==Math.round(e))throw"Invalid channel count for BufferQueue";this.channels=e,this.bufferSize=t,this.flush()}r.prototype.flush=function(){this._buffers=[],this._pendingBuffer=this.createBuffer(this.bufferSize),this._pendingPos=0},r.prototype.sampleCount=function(){var e=0;return this._buffers.forEach((function(t){e+=t[0].length})),e},r.prototype.createBuffer=function(e){for(var t=[],i=0;i&lt;this.channels;i++)t[i]=new Float32Array(e);return t},r.prototype.validate=function(e){if(e.length!==this.channels)return!1;for(var t,i=0;i&lt;e.length;i++){var s=e[i];if(!(s instanceof Float32Array))return!1;if(0==i)t=s.length;else if(s.length!==t)return!1}return!0},r.prototype.appendBuffer=function(e){if(!this.validate(e))throw"Invalid audio buffer passed to BufferQueue.appendBuffer";for(var t=e[0].length,i=this.channels,s=this._pendingPos,d=this._pendingBuffer,h=this.bufferSize,u=0;u&lt;t;u++){for(var c=0;c&lt;i;c++)d[c][s]=e[c][u];++s==h&amp;&amp;(this._buffers.push(d),s=this._pendingPos=0,d=this._pendingBuffer=this.createBuffer(h))}this._pendingPos=s},r.prototype.prependBuffer=function(e){if(!this.validate(e))throw"Invalid audio buffer passed to BufferQueue.prependBuffer";var t=this._buffers.slice(0);t.push(this.trimBuffer(this._pendingBuffer,0,this._pendingPos)),this.flush(),this.appendBuffer(e);for(var i=0;i&lt;t.length;i++)this.appendBuffer(t[i])},r.prototype.nextBuffer=function(){if(this._buffers.length)return this._buffers.shift();var e=this.trimBuffer(this._pendingBuffer,0,this._pendingPos);return this._pendingBuffer=this.createBuffer(this.bufferSize),this._pendingPos=0,e},r.prototype.trimBuffer=function(e,t,i){var s=e[0].length,d=t+Math.min(i,s);if(0==t&amp;&amp;d&gt;=s)return e;for(var h=[],u=0;u&lt;this.channels;u++)h[u]=e[u].subarray(t,d);return h},e.exports=r},function(e,t,i){!function(){i(0);var t=i(2),s=i(4);function n(e){this._options=e||{},this._backend=null,this._resampleFractional=0,this._resampleLastSampleData=void 0,this._tempoChanger=null}n.prototype.rate=0,n.prototype.targetRate=0,n.prototype.channels=0,n.prototype.bufferSize=0,Object.defineProperty(n.prototype,"bufferDuration",{get:function(){return this.targetRate?this.bufferSize/this.targetRate:0}}),Object.defineProperty(n.prototype,"bufferThreshold",{get:function(){return this._backend?this._backend.bufferThreshold/this.targetRate:0},set:function(e){if(!this._backend)throw"Invalid state: AudioFeeder cannot set bufferThreshold before init";this._backend.bufferThreshold=Math.round(e*this.targetRate)}}),Object.defineProperty(n.prototype,"playbackPosition",{get:function(){return this._backend?this.getPlaybackState().playbackPosition:0}}),Object.defineProperty(n.prototype,"outputPlaybackPosition",{get:function(){return this._backend?this.getPlaybackState().outputPlaybackPosition:0}}),Object.defineProperty(n.prototype,"durationBuffered",{get:function(){return this._backend?this.getPlaybackState().samplesQueued/this.targetRate:0}}),Object.defineProperty(n.prototype,"muted",{get:function(){if(this._backend)return this._backend.muted;throw"Invalid state: cannot get mute before init"},set:function(e){if(!this._backend)throw"Invalid state: cannot set mute before init";this._backend.muted=e}}),n.prototype.mute=function(){this.muted=!0},n.prototype.unmute=function(){this.muted=!1},Object.defineProperty(n.prototype,"volume",{get:function(){if(this._backend)return this._backend.volume;throw"Invalid state: cannot get volume before init"},set:function(e){if(!this._backend)throw"Invalid state: cannot set volume before init";this._backend.volume=e}}),Object.defineProperty(n.prototype,"tempo",{get:function(){if(this._tempoChanger)return this._tempoChanger.getTempo();throw"Invalid state: cannot get tempo before init"},set:function(e){if(!this._tempoChanger)throw"Invalid state: cannot set tempo before init";this._tempoChanger.setTempo(e)}}),n.prototype.init=function(e,i){if(this.channels=e,this.rate=i,this._options.backendFactory)this._backend=this._options.backendFactory(e,i,this._options);else{if(!t.isSupported())throw"No supported backend";this._backend=new t(e,i,this._options)}this.targetRate=this._backend.rate,this.bufferSize=this._backend.bufferSize,this._tempoChanger=s({sampleRate:this.targetRate,numChannels:e,tempo:1}),this._backend.onstarved=function(){this.onstarved&amp;&amp;this.onstarved()}.bind(this),this._backend.onbufferlow=function(){this.onbufferlow&amp;&amp;this.onbufferlow()}.bind(this)},n.prototype._resample=function(e){var t=this.rate,i=this.channels,s=this._backend.rate,d=this._backend.channels;if(t==s&amp;&amp;i==d)return e;var h,u=[],c=e[0].length,l=this._resampleFractional,f=c*s/t+l,_=Math.floor(f),p=f-_;h=t&lt;s?function(e,i,d,h){for(var a=function(t){return t&lt;0?d&amp;&amp;d.length+t&gt;0?d[d.length+t]:e[0]:e[t]},u=0;u&lt;i.length;u++){var c,f=(u+1-l)*t/s-1,_=Math.floor(f),p=Math.ceil(f);c=_==p?a(_):a(_)*(p-f)+a(p)*(f-_),i[u]=h*c}}:function(e,t,i,s){for(var d=0;d&lt;t.length;d++)t[d]=s*e[d*e.length/t.length|0]};var m=1;d&gt;i&amp;&amp;(m=Math.SQRT1_2);for(var g=0;g&lt;d;g++){var v=g;g&gt;=i&amp;&amp;(v=0);var y=e[v],b=new Float32Array(_);h(y,b,this._resampleLastSampleData?this._resampleLastSampleData[v]:void 0,m),u.push(b)}return this._resampleFractional=p,this._resampleLastSampleData=e,u},n.prototype.bufferData=function(e){if(!this._backend)throw"Invalid state: AudioFeeder cannot bufferData before init";var t=this._resample(e);t=this._tempoChanger.process(t),this._backend.appendBuffer(t)},n.prototype.getPlaybackState=function(){if(this._backend){var e=this._backend.getPlaybackState();return e.outputPlaybackPosition=e.playbackPosition,e.playbackPosition=this._tempoChanger.mapOutputToInputTime(e.outputPlaybackPosition),e}throw"Invalid state: AudioFeeder cannot getPlaybackState before init"},n.prototype.waitUntilReady=function(e){if(!this._backend)throw"Invalid state: AudioFeeder cannot waitUntilReady before init";this._backend.waitUntilReady(e)},n.prototype.start=function(){if(!this._backend)throw"Invalid state: AudioFeeder cannot start before init";this._backend.start()},n.prototype.stop=function(){if(!this._backend)throw"Invalid state: AudioFeeder cannot stop before init";this._backend.stop()},n.prototype.flush=function(){if(this._resampleFractional=0,this._resampleLastSampleData=void 0,!this._backend)throw"Invalid state: AudioFeeder cannot flush before init";this._tempoChanger.flush(this.durationBuffered),this._backend.flush()},n.prototype.close=function(){this._backend&amp;&amp;(this._backend.close(),this._backend=null)},n.prototype.onstarved=null,n.prototype.onbufferlow=null,n.isSupported=function(){return!!Float32Array&amp;&amp;t.isSupported()},n.initSharedAudioContext=function(){return t.isSupported()?t.initSharedAudioContext():null},e.exports=n}()},function(e,t,i){!function(){var t=window.AudioContext||window.webkitAudioContext,s=i(0),d=i(3);function o(e,t,i){var d=i.audioContext||o.initSharedAudioContext();if(this._context=d,this.output=i.output||d.destination,this.rate=d.sampleRate,this.channels=2,i.bufferSize&amp;&amp;(this.bufferSize=0|i.bufferSize),this.bufferThreshold=2*this.bufferSize,this._bufferQueue=new s(this.channels,this.bufferSize),this._playbackTimeAtBufferTail=d.currentTime,this._queuedTime=0,this._delayedTime=0,this._dropped=0,this._liveBuffer=this._bufferQueue.createBuffer(this.bufferSize),d.createScriptProcessor)this._node=d.createScriptProcessor(this.bufferSize,0,this.channels);else{if(!d.createJavaScriptNode)throw new Error("Bad version of web audio API?");this._node=d.createJavaScriptNode(this.bufferSize,0,this.channels)}}o.prototype.bufferSize=4096,o.prototype.bufferThreshold=8192,o.prototype._volume=1,Object.defineProperty(o.prototype,"volume",{get:function(){return this._volume},set:function(e){this._volume=+e}}),o.prototype._muted=!1,Object.defineProperty(o.prototype,"muted",{get:function(){return this._muted},set:function(e){this._muted=!!e}}),o.prototype._audioProcess=function(e){var t,i,s,h,u;u="number"==typeof e.playbackTime?e.playbackTime:this._context.currentTime+this.bufferSize/this.rate;var c=this._playbackTimeAtBufferTail;if(c&lt;u&amp;&amp;(this._delayedTime+=u-c),this._bufferQueue.sampleCount()&lt;this.bufferSize&amp;&amp;this.onstarved&amp;&amp;this.onstarved(),this._bufferQueue.sampleCount()&lt;this.bufferSize){for(t=0;t&lt;this.channels;t++)for(s=e.outputBuffer.getChannelData(t),h=0;h&lt;this.bufferSize;h++)s[h]=0;this._dropped++}else{var l=this.muted?0:this.volume,f=this._bufferQueue.nextBuffer();if(f[0].length&lt;this.bufferSize)throw"Audio buffer not expected length.";for(t=0;t&lt;this.channels;t++)for(i=f[t],this._liveBuffer[t].set(f[t]),s=e.outputBuffer.getChannelData(t),h=0;h&lt;i.length;h++)s[h]=i[h]*l;this._queuedTime+=this.bufferSize/this.rate,this._playbackTimeAtBufferTail=u+this.bufferSize/this.rate,this._bufferQueue.sampleCount()&lt;Math.max(this.bufferSize,this.bufferThreshold)&amp;&amp;this.onbufferlow&amp;&amp;d(this.onbufferlow.bind(this))}},o.prototype._samplesQueued=function(){return this._bufferQueue.sampleCount()+Math.floor(this._timeAwaitingPlayback()*this.rate)},o.prototype._timeAwaitingPlayback=function(){return Math.max(0,this._playbackTimeAtBufferTail-this._context.currentTime)},o.prototype.getPlaybackState=function(){return{playbackPosition:this._queuedTime-this._timeAwaitingPlayback(),samplesQueued:this._samplesQueued(),dropped:this._dropped,delayed:this._delayedTime}},o.prototype.waitUntilReady=function(e){e()},o.prototype.appendBuffer=function(e){this._bufferQueue.appendBuffer(e)},o.prototype.start=function(){this._node.onaudioprocess=this._audioProcess.bind(this),this._node.connect(this.output),this._playbackTimeAtBufferTail=this._context.currentTime},o.prototype.stop=function(){if(this._node){var e=this._timeAwaitingPlayback();if(e&gt;0){var t=Math.round(e*this.rate),i=this._liveBuffer?this._liveBuffer[0].length:0;t&gt;i?(this._bufferQueue.prependBuffer(this._liveBuffer),this._bufferQueue.prependBuffer(this._bufferQueue.createBuffer(t-i))):this._bufferQueue.prependBuffer(this._bufferQueue.trimBuffer(this._liveBuffer,i-t,t)),this._playbackTimeAtBufferTail-=e}this._node.onaudioprocess=null,this._node.disconnect()}},o.prototype.flush=function(){this._bufferQueue.flush()},o.prototype.close=function(){this.stop(),this._context=null},o.prototype.onstarved=null,o.prototype.onbufferlow=null,o.isSupported=function(){return!!t},o.sharedAudioContext=null,o.initSharedAudioContext=function(){if(!o.sharedAudioContext&amp;&amp;o.isSupported()){var e,i=new t;if(i.createScriptProcessor)e=i.createScriptProcessor(1024,0,2);else{if(!i.createJavaScriptNode)throw new Error("Bad version of web audio API?");e=i.createJavaScriptNode(1024,0,2)}e.connect(i.destination),e.disconnect(),o.sharedAudioContext=i}return o.sharedAudioContext},e.exports=o}()},function(e,t){e.exports=function(){if(void 0!==window.setImmediate)return window.setImmediate;if(window&amp;&amp;window.postMessage){var e=[];return window.addEventListener("message",(function(t){if(t.source===window){var i=t.data;if("object"==typeof i&amp;&amp;i.nextTickBrowserPingMessage){var s=e.pop();s&amp;&amp;s()}}})),function(t){e.push(t),window.postMessage({nextTickBrowserPingMessage:!0},document.location.toString())}}return function(e){setTimeout(e,0)}}()},function(e,t,i){var s;window,s=function(){return function(e){var t={};function r(i){if(t[i])return t[i].exports;var s=t[i]={i:i,l:!1,exports:{}};return e[i].call(s.exports,s,s.exports,r),s.l=!0,s.exports}return r.m=e,r.c=t,r.d=function(e,t,i){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},r.r=function(e){"undefined"!=typeof Symbol&amp;&amp;Symbol.toStringTag&amp;&amp;Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&amp;t&amp;&amp;(e=r(e)),8&amp;t)return e;if(4&amp;t&amp;&amp;"object"==typeof e&amp;&amp;e&amp;&amp;e.__esModule)return e;var i=Object.create(null);if(r.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&amp;t&amp;&amp;"string"!=typeof e)for(var s in e)r.d(i,s,function(t){return e[t]}.bind(null,s));return i},r.n=function(e){var t=e&amp;&amp;e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=1)}([function(e,t){var i={float_array:function(e){return new Float32Array(e)},blit:function(e,t,i,s,d){i.set(e.subarray(t,t+d),s)}};e.exports=i},function(e,t,i){var s,d;s=i(0),d=i(2),e.exports=function(e){var t=(e=e||{}).sampleRate||44100,i=e.wsizeLog||11,h=e.tempo||1,u=(e.numChannels,Math.pow(2,50/1200)-1),c=1&lt;&lt;i,l=d(i),f=1&lt;&lt;i-2;f-=f%100;for(var _=s.float_array(c+f+5),p=s.float_array(c+f+5),m=f,g=f,v=s.float_array(c),y=0;y&lt;c;y++)v[y]=.5*(1-Math.cos(2*Math.PI*y/c));var b=1+(c&gt;&gt;1),T=s.float_array(b),k=s.float_array(b),P=s.float_array(b),w=s.float_array(b),E=s.float_array(b),x=s.float_array(b),A=1+(b&gt;&gt;1),R=[0,0],O=[],F=[],S=[],C=[];for(y=0;y&lt;2;y++)O.push(s.float_array(A)),F.push(s.float_array(A)),S.push(s.float_array(A)),C.push(s.float_array(b));var B=s.float_array(A),D=s.float_array(A),M=0,V=0,I=[{in_time:0,out_time:0,tempo:h}],L=0,j=0,W=1,X=0,N=0,H=0,z=0,Y={mapOutputToInputTime:function(e){for(var t=I.length-1;e&lt;I[t].out_time&amp;&amp;t&gt;0;)t--;var i=I[t];return i.in_time+i.tempo*(e-i.out_time)},flush:function(e){X=0,R=[0,0],j=0,z=0,H=0;for(var t=0;t&lt;2;t++)for(var i=0;i&lt;b;i++)C[t][i]=0;for(t=0;t&lt;_.length;t++)_[t]=0;for(t=0;t&lt;p.length;t++)p[t]=0;if(e){V=Math.max(0,V-e),M=Y.mapOutputToInputTime(V);for(var s=I.length-1;V&lt;=I[s].out_time&amp;&amp;s&gt;=0;)I.pop(),s--;I.push({in_time:M,out_time:V,tempo:h})}},getTempo:function(){return h},setTempo:function(e){m=g=f,e&gt;=1?g=Math.round(m/e):m=Math.round(g*e),N=(1/e-1*g/m)*m,W=function(e,t){for(var i=e.length/t|0,s=0,d=0;d&lt;i;d++)s+=e[d*t];return.9/s}(v,g),h=e;var t=I[I.length-1];t.out_time==V?t.tempo=e:I.push({in_time:M,out_time:V,tempo:e})}};Y.flush(0),Y.setTempo(h);var J=function(e,t,i){var s=Math.floor(i),d=s%2==1?-1:1;return Math.atan2(d*(t[s]-t[s+1]),d*(e[s]-e[s+1]))},U=function(e,t,i,s,d){var h=2*Math.PI/c*.5*(s+t)*m;return(function(e){return e-2*Math.PI*Math.round(e/(2*Math.PI))}(e-i-h)+h)*d},q=function(e,t,i,s,d,h){for(var l=e%2,f=1-l,_=C[f],p=R[f],m=O[f],g=F[f],v=S[f],y=C[l],b=1;b&lt;y.length;b++)y[b]=t[b]*t[b]+i[b]*i[b];var T=O[l],k=R[l]=function(e,t){for(var i=0,s=0;s&lt;e.length;s++)e[s]&gt;i&amp;&amp;(i=e[s]);var d=1e-8*i,h=1,c=1;for(t[0]=1,s=2;s&lt;e.length;s++){var l=s*u;if(e[s]&gt;d&amp;&amp;e[s]&gt;e[s-1]&amp;&amp;e[s]&gt;=e[s+1]){var f=s+(e[s-1]-e[s+1])/(2*(e[s-1]-2*e[s]+e[s+1]));f-t[h-1]&gt;l?(t[h++]=f,c=s):e[s]&gt;e[c]&amp;&amp;(t[h-1]=f,c=s)}}return h}(y,T),P=F[l],w=S[l];if(0!=e&amp;&amp;0!=k){var E=0;for(H=0;H&lt;k;H++){for(z=T[H];T[H]&gt;m[E]&amp;&amp;E!=p;)++E;var x=E;E&gt;0&amp;&amp;z-m[E-1]&lt;m[E]-z&amp;&amp;(x=E-1);var A=z*u;if(Math.abs(m[x]-z)&lt;A&amp;&amp;_[Math.round(m[x])]&gt;.1*y[Math.round(z)]){var M=J(t,i,z),V=g[x]+v[x]+U(M,z,g[x],m[x],h)-M;P[H]=M,w[H]=V,B[H]=Math.cos(V),D[H]=Math.sin(V)}else P[H]=J(t,i,z),w[H]=0,B[H]=1,D[H]=0}T[k]=2*c;var I=T[x=0],L=T[x+1],j=B[x],W=D[x];for(b=1;b&lt;t.length-1;b++){b&gt;=I&amp;&amp;b-I&gt;L-b&amp;&amp;(I=T[++x],L=T[x+1],j=B[x],W=D[x]);var X=t[b]*j-i[b]*W,N=t[b]*W+i[b]*j;t[b]=X,i[b]=N}}else for(var H=0;H&lt;k;H++){var z=T[H];g[H]=v[H]=J(t,i,z)}},G=function(){var e=0|(X+=2*N);X-=e;for(var t=0;t&lt;c;t++)l.m_re[t]=v[t]*_[t],l.m_im[t]=v[t]*_[m+t];s.blit(_,2*m,_,0,c-m),l.inplace(!1),l.unpack(T,k,P,w),q(L,T,k,0,0,1*g/m),q(L+1,P,w,0,0,1*(g+e)/m),s.blit(P,0,E,0,b),s.blit(w,0,x,0,b),l.repack(T,k,P,w),l.inplace(!0);var i=p.length;for(s.blit(p,j,p,0,i-j),t=i-j;t&lt;i;t++)p[t]=0;var d=0,h=W;for(t=0;t&lt;g;t++)Math.abs(2*l.m_re[t])&gt;d&amp;&amp;(d=Math.abs(2*l.m_re[t]));for(t=0;t&lt;c-g;t++)Math.abs(l.m_re[t+g+e]+l.m_im[t])&gt;d&amp;&amp;(d=Math.abs(l.m_re[t+g+e]+l.m_im[t]));for(t=c-g;t&lt;c;t++)Math.abs(2*l.m_im[t])&gt;d&amp;&amp;(d=Math.abs(2*l.m_im[t]));var u=1/Math.floor(1*c/(2*g));for(h*d&gt;u&amp;&amp;(h=u/d),t=0;t&lt;c;t++)p[t]+=h*l.m_re[t],p[t+g+e]+=h*l.m_im[t];return L+=2,j=2*g+e};return Y.process=function(e){var i=e[0].length,d=e[0];if(e.length&gt;1){d=s.float_array(e[0].length);for(var u=1/e.length,l=0;l&lt;e.length;l++)for(var f=0;f&lt;i;f++)d[f]+=u*e[l][f]}if(1==h){if(z+H&gt;0){var v=z+H+i,y=[];for(l=0;l&lt;e.length;l++){var b=s.float_array(v);s.blit(p,0,b,0,z),s.blit(_,0,b,z,H),s.blit(e[l],0,b,z+H,i),y.push(b)}Y.flush(0),i=v,e=y}return M+=i/t,V+=i/t,e}var T=H+i-(c-m),k=2*Math.floor(Math.max(0,T)/(2*m)),P=z+g*k+Math.floor(X+N*k);z&gt;P&amp;&amp;(P=z);var w=s.float_array(P);s.blit(p,0,w,0,z);for(var E=0,x=z,A=0,R=0;;){var O=c+m-H;if(E+O&gt;i){s.blit(d,E,_,H,i-E),H+=i-E,E=i;break}O&lt;=0?H-=2*m:(s.blit(d,E,_,H,O),E+=O,H=c-m),R=G(),M+=2*m/t,V+=R/t,(A=x+R-P)&lt;0&amp;&amp;(A=0),s.blit(p,0,w,x,R-A),x+=R}s.blit(p,R-A,p,0,A),z=A;var F=[];for(l=0;l&lt;e.length;l++)F.push(w);return F},Y}},function(e,t,i){var s=i(0);e.exports=function(e){for(var t=1&lt;&lt;e,i={m_logN:e,m_N:t,m_invN:1/t,m_re:s.float_array(t),m_im:s.float_array(t),m_revTgt:new Array(t)},d=0;d&lt;t;d++){for(var h=d,u=0,c=0;c&lt;e;c++)u&lt;&lt;=1,u|=1&amp;h,h&gt;&gt;=1;i.m_revTgt[d]=u}i.twiddleRe=s.float_array(i.m_logN),i.twiddleIm=s.float_array(i.m_logN);for(var l=1,f=0;f&lt;i.m_logN;f++){var _=2*l*Math.PI*i.m_invN;i.twiddleRe[f]=Math.cos(_),i.twiddleIm[f]=Math.sin(_),l&lt;&lt;=1}i.inplace=function(e){var t=i.m_re,s=i.m_im,d=i.m_N,h=i.m_logN,u=d&gt;&gt;1,c=d&gt;&gt;1,l=d;if(e)for(var f=1/d,_=0;_&lt;d;_++)t[_]*=f,s[_]*=f;for(var p=0;p&lt;h;p++){var m=i.twiddleRe[p],g=i.twiddleIm[p];e||(g*=-1);for(var v=0;v&lt;d;){for(var y=v,b=v+c,T=1,k=0,P=0;P&lt;u;P++){var w=t[y],E=s[y],x=t[b],A=s[b];t[y]=w+x,s[y]=E+A,x=w-x,A=E-A,t[b]=x*T-A*k,s[b]=x*k+A*T,y++,b++;var R=T;T=T*m-k*g,k=R*g+k*m}v+=l}u&gt;&gt;=1,c&gt;&gt;=1,l&gt;&gt;=1}for(var O,F,S=i.m_revTgt,C=0;C&lt;d;C++)S[C]&gt;C&amp;&amp;(F=t[O=S[C]],t[O]=t[C],t[C]=F,F=s[O],s[O]=s[C],s[C]=F)};var p=t&gt;&gt;1;return i.unpack=function(e,s,d,h){e[0]=i.m_re[0],d[0]=i.m_im[0],s[0]=h[0]=0,e[p]=i.m_re[p],d[p]=i.m_im[p],s[p]=h[p]=0;for(var u=1;u&lt;p;u++)e[u]=(i.m_re[u]+i.m_re[t-u])/2,s[u]=(i.m_im[u]-i.m_im[t-u])/2,d[u]=(i.m_im[u]+i.m_im[t-u])/2,h[u]=(-i.m_re[u]+i.m_re[t-u])/2},i.repack=function(e,s,d,h){i.m_re[0]=e[0],i.m_im[0]=d[0],i.m_re[p]=e[p],i.m_im[p]=d[p];for(var u=1;u&lt;p;u++)i.m_re[u]=e[u]-h[u],i.m_im[u]=s[u]+d[u],i.m_re[t-u]=e[u]+h[u],i.m_im[t-u]=-s[u]+d[u]},i}}])},e.exports=s()}])},893:(e,t)=&gt;{Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,t.default=class{constructor(e){this.lower=e.start,this.upper=e.end,this.onprocess=e.process,this.position=0,this.n=0}iterate(){return this.n++,this.position=Math.floor((this.lower+this.upper)/2),this.onprocess(this.lower,this.upper,this.position)}start(){return this.iterate(),this}left(){return this.upper=this.position,this.iterate()}right(){return this.lower=this.position,this.iterate()}}},523:(e,t)=&gt;{Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var i=new class{hasTypedArrays(){return!!window.Uint32Array}hasWebAssembly(){return!!window.WebAssembly}hasWebAudio(){return!(!window.AudioContext&amp;&amp;!window.webkitAudioContext)}hasFlash(){return!1}hasAudio(){return this.hasWebAudio()}isBlacklisted(e){return!1}isSlow(){return!1}isTooSlow(){return!1}supported(e){return"OGVDecoder"===e?this.hasWebAssembly():"OGVPlayer"===e&amp;&amp;this.supported("OGVDecoder")&amp;&amp;this.hasAudio()}};t.default=i},408:(e,t,i)=&gt;{var s=i(318);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var d=s(i(580));class OGVDecoderAudioProxy extends((0,d.default)({loadedMetadata:!1,audioFormat:null,audioBuffer:null,cpuTime:0})){init(e){this.proxy("init",[],e)}processHeader(e,t){this.proxy("processHeader",[e],t,[e])}processAudio(e,t){this.proxy("processAudio",[e],t,[e])}close(){this.terminate()}}var h=OGVDecoderAudioProxy;t.default=h},319:(e,t,i)=&gt;{var s=i(318);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var d=s(i(580));class OGVDecoderVideoProxy extends((0,d.default)({loadedMetadata:!1,videoFormat:null,frameBuffer:null,cpuTime:0})){init(e){this.proxy("init",[],e)}processHeader(e,t){this.proxy("processHeader",[e],t,[e])}processFrame(e,t){this.proxy("processFrame",[e],t,[e])}close(){this.terminate()}sync(){this.proxy("sync",[],(()=&gt;{}))}recycleFrame(e){this.proxy("recycleFrame",[e],(()=&gt;{}),[e.y.bytes.buffer,e.u.bytes.buffer,e.v.bytes.buffer])}}var h=OGVDecoderVideoProxy;t.default=h},445:(e,t,i)=&gt;{var s=i(318);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var d=s(i(539)),h="1.8.4-20210702161914-bd3a07f",u={OGVDemuxerOggW:"ogv-demuxer-ogg-wasm.js",OGVDemuxerWebMW:"ogv-demuxer-webm-wasm.js",OGVDecoderAudioOpusW:"ogv-decoder-audio-opus-wasm.js",OGVDecoderAudioVorbisW:"ogv-decoder-audio-vorbis-wasm.js",OGVDecoderVideoTheoraW:"ogv-decoder-video-theora-wasm.js",OGVDecoderVideoVP8W:"ogv-decoder-video-vp8-wasm.js",OGVDecoderVideoVP8MTW:"ogv-decoder-video-vp8-mt-wasm.js",OGVDecoderVideoVP9W:"ogv-decoder-video-vp9-wasm.js",OGVDecoderVideoVP9SIMDW:"ogv-decoder-video-vp9-simd-wasm.js",OGVDecoderVideoVP9MTW:"ogv-decoder-video-vp9-mt-wasm.js",OGVDecoderVideoVP9SIMDMTW:"ogv-decoder-video-vp9-simd-mt-wasm.js",OGVDecoderVideoAV1W:"ogv-decoder-video-av1-wasm.js",OGVDecoderVideoAV1SIMDW:"ogv-decoder-video-av1-simd-wasm.js",OGVDecoderVideoAV1MTW:"ogv-decoder-video-av1-mt-wasm.js",OGVDecoderVideoAV1SIMDMTW:"ogv-decoder-video-av1-simd-mt-wasm.js"};t.default=class{constructor(){this.base=this.defaultBase()}defaultBase(){}wasmSupported(){return d.default.wasmSupported()}scriptForClass(e){return u[e]}urlForClass(e){var t=this.scriptForClass(e);if(t)return this.urlForScript(t);throw new Error("asked for URL for unknown class "+e)}urlForScript(e){if(e){var t=this.base;return void 0===t?t="":t+="/",t+e+"?version="+encodeURIComponent(h)}throw new Error("asked for URL for unknown script "+e)}loadClass(e,t,i){i=i||{};var s=this.getGlobal(),d=this.urlForClass(e),classWrapper=t=&gt;((t=t||{}).locateFile=e=&gt;"data:"===e.slice(0,5)?e:this.urlForScript(e),t.mainScriptUrlOrBlob=this.scriptForClass(e)+"?version="+encodeURIComponent(h),s[e](t));"function"==typeof s[e]?t(classWrapper):this.loadScript(d,(()=&gt;{t(classWrapper)}))}}},964:(e,t,i)=&gt;{var s=i(318);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var d=s(i(408)),h=s(i(319)),u=s(i(445)),c={audio:{proxy:d.default,worker:"ogv-worker-audio.js"},video:{proxy:h.default,worker:"ogv-worker-video.js"}},l={OGVDecoderAudioOpusW:"audio",OGVDecoderAudioVorbisW:"audio",OGVDecoderVideoTheoraW:"video",OGVDecoderVideoVP8W:"video",OGVDecoderVideoVP9W:"video",OGVDecoderVideoVP9SIMDW:"video",OGVDecoderVideoAV1W:"video",OGVDecoderVideoAV1SIMDW:"video"};class OGVLoaderWeb extends u.default{constructor(){super(),this.scriptStatus={},this.scriptCallbacks={}}getGlobal(){return window}defaultBase(){for(var e,t,i=document.querySelectorAll("script"),s=/^(?:|(.*)\/)ogv(?:-support|-es2017)?\.js(?:\?|#|$)/,d=0;d&lt;i.length;d++)if((e=i[d].getAttribute("src"))&amp;&amp;(t=e.match(s)))return t[1]}loadClass(e,t,i){(i=i||{}).worker?this.workerProxy(e,t):super.loadClass(e,t,i)}loadScript(e,t){if("done"==this.scriptStatus[e])t();else if("loading"==this.scriptStatus[e])this.scriptCallbacks[e].push(t);else{this.scriptStatus[e]="loading",this.scriptCallbacks[e]=[t];var i=document.createElement("script"),done=t=&gt;{var i=this.scriptCallbacks[e];delete this.scriptCallbacks[e],this.scriptStatus[e]="done",i.forEach((e=&gt;{e()}))};i.addEventListener("load",done),i.addEventListener("error",done),i.src=e,document.querySelector("head").appendChild(i)}}workerProxy(e,t){var i=c[l[e]];if(!i)throw new Error("Requested worker for class with no proxy: "+e);var s,d=i.proxy,h=i.worker,u=this.urlForScript(this.scriptForClass(e)),_=this.urlForScript(h),p=function(t){return new d(s,e,t)};if(_.match(/^https?:|\/\//i)){var m,g,v,y,b,T=!1,k=!1;function completionCheck(){if(1==T&amp;&amp;1==k){var e=v+" "+y+"\nOGVLoader.base = "+JSON.stringify(f.base);try{b=new Blob([e],{type:"application/javascript"})}catch(t){window.BlobBuilder=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder,(b=new BlobBuilder).append(e),b=b.getBlob()}s=new Worker(URL.createObjectURL(b)),t((function(e){return Promise.resolve(new p(e))}))}}(m=new XMLHttpRequest).open("GET",u,!0),m.onreadystatechange=function(){4==m.readyState&amp;&amp;200==m.status&amp;&amp;(v=m.responseText,T=!0,completionCheck())},m.send(),(g=new XMLHttpRequest).open("GET",_,!0),g.onreadystatechange=function(){4==g.readyState&amp;&amp;200==g.status&amp;&amp;(y=g.responseText,k=!0,completionCheck())},g.send()}else s=new Worker(_),t((function(e){return Promise.resolve(new p(e))}))}}var f=new OGVLoaderWeb,_=f;t.default=_},759:(e,t,i)=&gt;{var s=i(318);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var d=s(i(309)),h={MEDIA_ERR_ABORTED:1,MEDIA_ERR_NETWORK:2,MEDIA_ERR_DECODE:3,MEDIA_ERR_SRC_NOT_SUPPORTED:4};class OGVMediaError{constructor(e,t){this.code=e,this.message=t}}(0,d.default)(OGVMediaError,h),(0,d.default)(OGVMediaError.prototype,h);var u=OGVMediaError;t.default=u},278:(e,t)=&gt;{function split(e,t,i){var s=e.split(t,i).map((e=&gt;function(e){return e.replace(/^\s+/,"").replace(/\s+$/,"")}(e)));if("number"==typeof i)for(;s.length&lt;i;)s.push(null);return s}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,t.default=class{constructor(e){e=String(e),this.major=null,this.minor=null,this.codecs=null;var t=split(e,";");if(t.length){var i=t.shift();if(i){var s=split(i,"/",2);this.major=s[0],this.minor=s[1]}for(var d in t){var h=t[d].match(/^codecs\s*=\s*"(.*?)"$/);if(h){this.codecs=split(h[1],",");break}}}}}},869:(e,t,i)=&gt;{var s=i(318);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var d,h=s(i(731)),u=s(i(936)),c=s(i(848)),l=s(i(964)),f=s(i(893)),_=s(i(309)),p=s(i(759)),m=s(i(278)),g=s(i(168)),v=s(i(625)),y=(()=&gt;{if("function"==typeof setImmediate)return setImmediate;var e=new MessageChannel,t=[];return e.port1.onmessage=e=&gt;{t.shift()()},function(i){t.push(i),e.port2.postMessage({})}})(),b={NETWORK_EMPTY:0,NETWORK_IDLE:1,NETWORK_LOADING:2,NETWORK_NO_SOURCE:3,HAVE_NOTHING:0,HAVE_METADATA:1,HAVE_CURRENT_DATA:2,HAVE_FUTURE_DATA:3,HAVE_ENOUGH_DATA:4},T="INITIAL",k="SEEKING_END",P="LOADED",w="PRELOAD",E="READY",x="PLAYING",A="SEEKING",R="ERROR",O="NOT_SEEKING",F="BISECT_TO_TARGET",S="BISECT_TO_KEYPOINT",C="LINEAR_TO_TARGET",D="fast";function OGVJSElement(){var e=document.createElement("ogvjs");return Object.setPrototypeOf?Object.setPrototypeOf(e,Object.getPrototypeOf(this)):e.__proto__=this.__proto__,e}d="undefined"==typeof performance||void 0===typeof performance.now?Date.now:performance.now.bind(performance),OGVJSElement.prototype=Object.create(HTMLElement.prototype,{});class OGVPlayer extends OGVJSElement{constructor(e){if(super(),(e=e||{}).base=e.base||l.default.base,this._options=e,this._instanceId="ogvjs"+ ++OGVPlayer.instanceCount,void 0!==e.worker?this._enableWorker=!!e.worker:this._enableWorker=!!window.Worker,!l.default.wasmSupported())throw new Error("WebAssembly not supported");this._enableThreading=!!e.threading,this._enableSIMD=!!e.simd,this._state=T,this._seekState=O,this._detectedType=null,this._canvas=document.createElement("canvas"),this._frameSink=null,e.video&amp;&amp;this._canvas.captureStream?(this._mediaStream=new MediaStream,this._video="object"==typeof e.video?e.video:document.createElement("video"),this._video.playsInline=!0,this._video.srcObject=this._mediaStream):this._video=null,this._videoTrack=null,this._audioTrack=null,this._canvasStream=null,this.className=this._instanceId,(0,_.default)(this,b),this._view=this._video||this._canvas,this._view.style.position="absolute",this._view.style.top="0",this._view.style.left="0",this._view.style.width="100%",this._view.style.height="100%",this._view.style.objectFit="contain",this.appendChild(this._view),this._startTime=d(),this._codec=null,this._audioInfo=null,this._videoInfo=null,this._actionQueue=[],this._audioFeeder=null,this._muted=!1,this._initialPlaybackPosition=0,this._initialPlaybackOffset=0,this._prebufferingAudio=!1,this._initialSeekTime=0,this._currentSrc="",this._streamEnded=!1,this._mediaError=null,this._dataEnded=!1,this._byteLength=0,this._duration=null,this._lastSeenTimestamp=null,this._nextProcessingTimer,this._nextFrameTimer=null,this._loading=!1,this._started=!1,this._paused=!0,this._ended=!1,this._startedPlaybackInDocument=!1,this._stream=void 0,this._framesProcessed=0,this._targetPerFrameTime=1e3/60,this._actualPerFrameTime=0,this._totalFrameTime=0,this._totalFrameCount=0,this._playTime=0,this._bufferTime=0,this._drawingTime=0,this._proxyTime=0,this._totalJitter=0,this._droppedAudio=0,this._delayedAudio=0,this._lateFrames=0,this._poster="",this._thumbnail=null,this._frameEndTimestamp=0,this._audioEndTimestamp=0,this._decodedFrames=[],this._pendingFrames=[],this._lastFrameDecodeTime=0,this._lastFrameVideoCpuTime=0,this._lastFrameAudioCpuTime=0,this._lastFrameDemuxerCpuTime=0,this._lastFrameDrawingTime=0,this._lastFrameBufferTime=0,this._lastFrameProxyTime=0,this._lastVideoCpuTime=0,this._lastAudioCpuTime=0,this._lastDemuxerCpuTime=0,this._lastBufferTime=0,this._lastProxyTime=0,this._lastDrawingTime=0,this._lastFrameTimestamp=0,this._currentVideoCpuTime=0,this._lastTimeUpdate=0,this._timeUpdateInterval=250,this._seekTargetTime=0,this._bisectTargetTime=0,this._seekMode=null,this._lastSeekPosition=null,this._seekBisector=null,this._didSeek=null,this._depth=0,this._needProcessing=!1,this._pendingFrame=0,this._pendingAudio=0,this._framePipelineDepth=8,this._frameParallelism=this._enableThreading?Math.min(16,navigator.hardwareConcurrency)||1:0,this._audioPipelineDepth=12,this._videoInfo=null,this._audioInfo=null,this._width=0,this._height=0,this._volume=1,this._playbackRate=1,Object.defineProperties(this,{src:{get:function(){return this.getAttribute("src")||""},set:function(e){this.setAttribute("src",e),this._loading=!1,this._prepForLoad("interactive")}},buffered:{get:function(){var e;return e=this._stream&amp;&amp;this._byteLength&amp;&amp;this._duration?this._stream.getBufferedRanges().map((e=&gt;e.map((e=&gt;e/this._stream.length*this._duration)))):[[0,0]],new g.default(e)}},seekable:{get:function(){return this.duration&lt;1/0&amp;&amp;this._stream&amp;&amp;this._stream.seekable&amp;&amp;this._codec&amp;&amp;this._codec.seekable?new g.default([[0,this._duration]]):new g.default([])}},currentTime:{get:function(){return this._state==A?this._seekTargetTime:this._codec?this._state!=x||this._paused?this._initialPlaybackOffset:this._getPlaybackTime():this._initialSeekTime},set:function(e){this._seek(e,"exact")}},duration:{get:function(){return this._codec&amp;&amp;this._codec.loadedMetadata?null!==this._duration?this._duration:1/0:NaN}},paused:{get:function(){return this._paused}},ended:{get:function(){return this._ended}},seeking:{get:function(){return this._state==A}},muted:{get:function(){return this._muted},set:function(e){this._muted=e,this._audioFeeder?this._audioFeeder.muted=this._muted:this._started&amp;&amp;!this._muted&amp;&amp;this._codec&amp;&amp;this._codec.hasAudio&amp;&amp;(this._log("unmuting: switching from timer to audio clock"),this._initAudioFeeder(),this._startPlayback(this._audioEndTimestamp)),this._fireEventAsync("volumechange")}},poster:{get:function(){return this._poster},set:function(e){if(this._poster=e,!this._started){this._thumbnail&amp;&amp;this.removeChild(this._thumbnail);var t=new Image;t.src=this._poster,t.className="ogvjs-poster",t.style.position="absolute",t.style.top="0",t.style.left="0",t.style.width="100%",t.style.height="100%",t.style.objectFit="contain",t.style.visibility="hidden",t.addEventListener("load",(()=&gt;{this._thumbnail===t&amp;&amp;(OGVPlayer.styleManager.appendRule("."+this._instanceId,{width:t.naturalWidth+"px",height:t.naturalHeight+"px"}),OGVPlayer.updatePositionOnResize(),t.style.visibility="visible")})),this._thumbnail=t,this.appendChild(t)}}},videoWidth:{get:function(){return this._videoInfo?this._videoInfo.displayWidth:0}},videoHeight:{get:function(){return this._videoInfo?this._videoInfo.displayHeight:0}},ogvjsVideoFrameRate:{get:function(){return this._videoInfo?0==this._videoInfo.fps?this._totalFrameCount/(this._totalFrameTime/1e3):this._videoInfo.fps:0}},ogvjsAudioChannels:{get:function(){return this._audioInfo?this._audioInfo.channels:0}},ogvjsAudioSampleRate:{get:function(){return this._audioInfo?this._audioInfo.rate:0}},width:{get:function(){return this._width},set:function(e){this._width=parseInt(e,10),this.style.width=this._width+"px",OGVPlayer.updatePositionOnResize()}},height:{get:function(){return this._height},set:function(e){this._height=parseInt(e,10),this.style.height=this._height+"px",OGVPlayer.updatePositionOnResize()}},autoplay:{get:function(){return!1},set:function(e){}},controls:{get:function(){return!1},set:function(e){}},loop:{get:function(){return!1},set:function(e){}},crossOrigin:{get:function(){return null},set:function(e){}},currentSrc:{get:function(){return this._currentSrc}},defaultMuted:{get:function(){return!1}},defaultPlaybackRate:{get:function(){return 1}},error:{get:function(){return this._state===R?this._mediaError?this._mediaError:new p.default("unknown error occurred in media procesing"):null}},preload:{get:function(){return this.getAttribute("preload")||""},set:function(e){this.setAttribute("preload",e)}},readyState:{get:function(){return this._stream&amp;&amp;this._codec&amp;&amp;this._codec.loadedMetadata?OGVPlayer.HAVE_ENOUGH_DATA:OGVPlayer.HAVE_NOTHING}},networkState:{get:function(){return this._stream?this._stream.waiting?OGVPlayer.NETWORK_LOADING:OGVPlayer.NETWORK_IDLE:this.readyState==OGVPlayer.HAVE_NOTHING?OGVPlayer.NETWORK_EMPTY:OGVPlayer.NETWORK_NO_SOURCE}},playbackRate:{get:function(){return this._playbackRate},set:function(e){var t=Number(e)||1;this._audioFeeder?this._audioFeeder.tempo=t:this._paused||(this._initialPlaybackOffset=this._getPlaybackTime(),this._initialPlaybackPosition=t*d()/1e3),this._playbackRate=t,this._fireEventAsync("ratechange")}},played:{get:function(){return new g.default([[0,this.currentTime]])}},volume:{get:function(){return this._volume},set:function(e){this._volume=+e,this._audioFeeder&amp;&amp;(this._audioFeeder.volume=this._volume),this._fireEventAsync("volumechange")}}}),this.onframecallback=null,this.onloadstate=null,this.onprogress=null,this.onsuspend=null,this.onabort=null,this.onemptied=null,this.onstalled=null,this.onloadedmetadata=null,this.onloadeddata=null,this.oncanplay=null,this.oncanplaythrough=null,this.onplaying=null,this.onwaiting=null,this.onseeking=null,this.onseeked=null,this.onended=null,this.ondurationchange=null,this.ontimeupdate=null,this.onplay=null,this.onpause=null,this.onratechange=null,this.onresize=null,this.onvolumechange=null,this.onaudiofeedercreated=null}_time(e){var t=d();e();var i=d()-t;return this._lastFrameDecodeTime+=i,i}_log(e){var t=this._options;if(t.debug){var i=d()-this._startTime;t.debugFilter&amp;&amp;!e.match(t.debugFilter)||console.log("["+Math.round(10*i)/10+"ms] "+e)}}_fireEvent(e){var t=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]?arguments[1]:{};this._log("fireEvent "+e);var i,s="function"==typeof Event;for(var d in s?i=new CustomEvent(e):(i=document.createEvent("Event")).initEvent(e,!1,!1),t)t.hasOwnProperty(d)&amp;&amp;(i[d]=t[d]);var h=this.dispatchEvent(i);!s&amp;&amp;"resize"===e&amp;&amp;this.onresize&amp;&amp;h&amp;&amp;this.onresize.call(this,i)}_fireEventAsync(e){var t=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]?arguments[1]:{};this._log("fireEventAsync "+e),y((()=&gt;{this._fireEvent(e,t)}))}static initSharedAudioContext(){c.default.initSharedAudioContext()}_initAudioFeeder(){var e=this._options,t={bufferSize:8192};if(e.audioContext&amp;&amp;(t.audioContext=e.audioContext),e.audioDestination&amp;&amp;(t.output=e.audioDestination),e.audioBackendFactory&amp;&amp;(t.backendFactory=e.audioBackendFactory),this._video&amp;&amp;!t.output){t.audioContext||(t.audioContext=c.default.initSharedAudioContext());var i=t.audioContext.createMediaStreamDestination();this._audioTrack=i.stream.getAudioTracks()[0],this._mediaStream.addTrack(this._audioTrack),navigator.userAgent.match(/WebKit/)&amp;&amp;(this._video.src=this._mediaStream),this._video.play(),t.output=i}var s=this._audioFeeder=new c.default(t);s.init(this._audioInfo.channels,this._audioInfo.rate),this.onaudiofeedercreated&amp;&amp;this.onaudiofeedercreated(this._audioFeeder),s.bufferThreshold=1,s.volume=this.volume,s.muted=this.muted,s.tempo=this.playbackRate,s.onbufferlow=()=&gt;{this._log("onbufferlow"),this._stream&amp;&amp;(this._stream.buffering||this._stream.seeking)||this._pendingAudio||this._pingProcessing()},s.onstarved=()=&gt;{this._dataEnded?this._log("onstarved: appear to have reached end of audio"):(this._log("onstarved: halting audio due to starvation"),this._stopPlayback(),this._prebufferingAudio=!0),this._isProcessing()||this._pingProcessing(0)}}_startPlayback(e){if(this._audioFeeder){this._audioFeeder.start();var t=this._audioFeeder.getPlaybackState();this._initialPlaybackPosition=t.playbackPosition}else this._initialPlaybackPosition=this._playbackRate*d()/1e3;void 0!==e&amp;&amp;(this._initialPlaybackOffset=e),this._prebufferingAudio=!1,this._log("continuing at "+this._initialPlaybackPosition+", "+this._initialPlaybackOffset)}_stopPlayback(){this._initialPlaybackOffset=this._getPlaybackTime(),this._log("pausing at "+this._initialPlaybackOffset),this._audioFeeder&amp;&amp;this._audioFeeder.stop()}_getPlaybackTime(e){return this._prebufferingAudio||this._paused?this._initialPlaybackOffset:(this._audioFeeder?(e=e||this._audioFeeder.getPlaybackState()).playbackPosition:this._playbackRate*d()/1e3)-this._initialPlaybackPosition+this._initialPlaybackOffset}_stopVideo(){this._log("STOPPING"),this._state=T,this._seekState=O,this._started=!1,this._ended=!1,this._frameEndTimestamp=0,this._audioEndTimestamp=0,this._lastFrameDecodeTime=0,this._prebufferingAudio=!1,this._actionQueue.splice(0,this._actionQueue.length),this._stream&amp;&amp;(this._stream.abort(),this._stream=null,this._streamEnded=!1),this._codec&amp;&amp;(this._codec.close(),this._codec=null,this._pendingFrame=0,this._pendingAudio=0,this._dataEnded=!1),this._videoInfo=null,this._audioInfo=null,this._audioFeeder&amp;&amp;(this._audioFeeder.close(),this._audioFeeder=null),this._nextProcessingTimer&amp;&amp;(clearTimeout(this._nextProcessingTimer),this._nextProcessingTimer=null),this._nextFrameTimer&amp;&amp;(clearTimeout(this._nextFrameTimer),this._nextFrameTimer=null),this._frameSink&amp;&amp;(this._frameSink.clear(),this._frameSink=null),this._decodedFrames&amp;&amp;(this._decodedFrames=[]),this._pendingFrames&amp;&amp;(this._pendingFrames=[]),this._initialSeekTime=0,this._initialPlaybackPosition=0,this._initialPlaybackOffset=0,this._duration=null}_doFrameComplete(){var e=arguments.length&gt;0&amp;&amp;void 0!==arguments[0]?arguments[0]:{};this._startedPlaybackInDocument&amp;&amp;!document.body.contains(this)&amp;&amp;y((()=&gt;{this.stop()}));var t=d(),i=t-this._lastFrameTimestamp,s=this._actualPerFrameTime-this._targetPerFrameTime;this._totalJitter+=Math.abs(s),this._playTime+=i;var h={cpuTime:this._lastFrameDecodeTime,drawingTime:this._drawingTime-this._lastFrameDrawingTime,bufferTime:this._bufferTime-this._lastFrameBufferTime,proxyTime:this._proxyTime-this._lastFrameProxyTime,demuxerTime:0,videoTime:0,audioTime:0,clockTime:this._actualPerFrameTime,late:e.dropped,dropped:e.dropped};function n(e){return Math.round(10*e)/10}this._codec&amp;&amp;(h.demuxerTime=this._codec.demuxerCpuTime-this._lastFrameDemuxerCpuTime,h.videoTime+=this._currentVideoCpuTime-this._lastFrameVideoCpuTime,h.audioTime+=this._codec.audioCpuTime-this._lastFrameAudioCpuTime),h.cpuTime+=h.demuxerTime,this._lastFrameDecodeTime=0,this._lastFrameTimestamp=t,this._codec?(this._lastFrameVideoCpuTime=this._currentVideoCpuTime,this._lastFrameAudioCpuTime=this._codec.audioCpuTime,this._lastFrameDemuxerCpuTime=this._codec.demuxerCpuTime):(this._lastFrameVideoCpuTime=0,this._lastFrameAudioCpuTime=0,this._lastFrameDemuxerCpuTime=0),this._lastFrameDrawingTime=this._drawingTime,this._lastFrameBufferTime=this._bufferTime,this._lastFrameProxyTime=this._proxyTime,this._log("drew frame "+e.frameEndTimestamp+": clock time "+n(i)+" (jitter "+n(s)+") cpu: "+n(h.cpuTime)+" (mux: "+n(h.demuxerTime)+" buf: "+n(h.bufferTime)+" draw: "+n(h.drawingTime)+" proxy: "+n(h.proxyTime)+") vid: "+n(h.videoTime)+" aud: "+n(h.audioTime)),this._fireEventAsync("framecallback",h),(!this._lastTimeUpdate||t-this._lastTimeUpdate&gt;=this._timeUpdateInterval)&amp;&amp;(this._lastTimeUpdate=t,this._fireEventAsync("timeupdate")),this._codec&amp;&amp;e.yCbCrBuffer&amp;&amp;this._codec.recycleFrame(e.yCbCrBuffer)}_seekStream(e){this._stream.seeking&amp;&amp;this._stream.abort(),this._stream.buffering&amp;&amp;this._stream.abort(),this._streamEnded=!1,this._dataEnded=!1,this._ended=!1,this._stream.seek(e).then((()=&gt;{this._readBytesAndWait()})).catch((e=&gt;{this._onStreamError(e)}))}_onStreamError(e){"AbortError"===e.name?this._log("i/o promise canceled; ignoring"):(this._log("i/o error: "+e),this._mediaError=new p.default(p.default.MEDIA_ERR_NETWORK,String(e)),this._state=R,this._stopPlayback())}_seek(e,t){if(this._log("requested seek to "+e+", mode "+t),this.readyState==this.HAVE_NOTHING)return this._log("not yet loaded; saving seek position for later"),void(this._initialSeekTime=e);if(this._stream&amp;&amp;!this._stream.seekable)throw new Error("Cannot seek a non-seekable stream");if(this._codec&amp;&amp;!this._codec.seekable)throw new Error("Cannot seek in a non-seekable file");var prepForSeek=i=&gt;{this._stream&amp;&amp;this._stream.buffering&amp;&amp;this._stream.abort(),this._stream&amp;&amp;this._stream.seeking&amp;&amp;this._stream.abort(),this._actionQueue.splice(0,this._actionQueue.length),this._stopPlayback(),this._prebufferingAudio=!1,this._audioFeeder&amp;&amp;this._audioFeeder.flush(),this._state=A,this._seekTargetTime=e,this._seekMode=t,this._codec?this._codec.flush(i):i()};prepForSeek((()=&gt;{this._isProcessing()||this._pingProcessing(0)})),this._actionQueue.push((()=&gt;{prepForSeek((()=&gt;{this._doSeek(e)}))}))}_doSeek(e){this._streamEnded=!1,this._dataEnded=!1,this._ended=!1,this._state=A,this._seekTargetTime=e,this._lastSeekPosition=-1,this._decodedFrames=[],this._pendingFrames=[],this._pendingFrame=0,this._pendingAudio=0,this._didSeek=!1,this._codec.seekToKeypoint(e,(t=&gt;{if(t)return this._seekState=C,this._fireEventAsync("seeking"),this._didSeek?void 0:void this._pingProcessing();this._codec.getKeypointOffset(e,(e=&gt;{e&gt;0?(this._seekState=C,this._seekStream(e)):(this._seekState=F,this._startBisection(this._seekTargetTime)),this._fireEventAsync("seeking")}))}))}_startBisection(e){var t=Math.max(0,this._stream.length-65536);this._bisectTargetTime=e,this._seekBisector=new f.default({start:0,end:t,process:(e,t,i)=&gt;i!=this._lastSeekPosition&amp;&amp;(this._lastSeekPosition=i,this._codec.flush((()=&gt;{this._seekStream(i)})),!0)}),this._seekBisector.start()}_continueSeekedPlayback(){this._seekState=O,this._state=E,this._frameEndTimestamp=this._codec.frameTimestamp,this._audioEndTimestamp=this._codec.audioTimestamp,this._codec.hasAudio?this._seekTargetTime=this._codec.audioTimestamp:this._seekTargetTime=this._codec.frameTimestamp,this._initialPlaybackOffset=this._seekTargetTime;var finishedSeeking=()=&gt;{this._lastTimeUpdate=this._seekTargetTime,this._fireEventAsync("timeupdate"),this._fireEventAsync("seeked"),this._isProcessing()||this._pingProcessing()};if(this._codec.hasVideo&amp;&amp;this._decodedFrames.length){var e=this._decodedFrames.shift();this._drawFrame(e.yCbCrBuffer),finishedSeeking()}else{if(this._codec.hasVideo&amp;&amp;this._codec.frameReady)return this._codec.decodeFrame((e=&gt;{e&amp;&amp;this._drawFrame(this._codec.frameBuffer),finishedSeeking()})),void this._codec.sync();finishedSeeking()}}_drawFrame(e){this._thumbnail&amp;&amp;(this.removeChild(this._thumbnail),this._thumbnail=null),this._frameSink.drawFrame(e),this._video&amp;&amp;(this._canvasStream||(this._canvasStream=this._canvas.captureStream(0),this._videoTrack=this._canvasStream.getVideoTracks()[0],this._mediaStream.addTrack(this._videoTrack),navigator.userAgent.match(/WebKit/)&amp;&amp;(this._video.src=this._mediaStream,this._video.play())),this._videoTrack&amp;&amp;this._videoTrack.requestFrame?this._videoTrack.requestFrame():this._canvasStream&amp;&amp;this._canvasStream.requestFrame&amp;&amp;this._canvasStream.requestFrame())}_doProcessLinearSeeking(){var e;if(e=this._codec.hasVideo?this._targetPerFrameTime/1e3:1/256,this._codec.hasVideo){if(this._pendingFrame)return;if(!this._codec.frameReady)return void this._codec.process((e=&gt;{e?this._pingProcessing():this._streamEnded?(this._log("stream ended during linear seeking on video"),this._dataEnded=!0,this._continueSeekedPlayback()):this._readBytesAndWait()}));if(this._seekMode===D&amp;&amp;this._codec.keyframeTimestamp==this._codec.frameTimestamp)return void this._continueSeekedPlayback();if(this._codec.frameTimestamp&lt;=this._seekTargetTime){var t=this._codec.frameTimestamp;return this._pendingFrame++,this._pendingFrames.push({frameEndTimestamp:t}),this._decodedFrames.splice(0,this._decodedFrames.length),this._codec.decodeFrame((e=&gt;{this._pendingFrame--,this._pendingFrames.shift(),this._decodedFrames.push({yCbCrBuffer:this._codec.frameBuffer,videoCpuTime:this._codec.videoCpuTime,frameEndTimestamp:t}),this._pingProcessing()})),void this._codec.sync()}if(!this._codec.hasAudio)return void this._continueSeekedPlayback()}if(this._codec.hasAudio){if(this._pendingAudio)return;return this._codec.audioReady?this._codec.audioTimestamp+e&lt;this._seekTargetTime?void this._codec.decodeAudio((()=&gt;{this._pingProcessing()})):void this._continueSeekedPlayback():void this._codec.process((e=&gt;{e?this._pingProcessing():this._streamEnded?(this._log("stream ended during linear seeking on audio"),this._dataEnded=!0,this._continueSeekedPlayback()):this._readBytesAndWait()}))}}_doProcessBisectionSeek(){var e,t;if(this._codec.hasVideo)t=this._codec.frameTimestamp,e=this._targetPerFrameTime/1e3;else{if(!this._codec.hasAudio)throw new Error("Invalid seek state; no audio or video track available");t=this._codec.audioTimestamp,e=1/256}t&lt;0?this._codec.process((e=&gt;{if(e)this._pingProcessing();else if(this._streamEnded){if(this._log("stream ended during bisection seek"),!this._seekBisector.right())throw this._log("failed going back"),new Error("not sure what to do")}else this._readBytesAndWait()})):t-e/2&gt;this._bisectTargetTime?this._seekBisector.left()||(this._log("close enough (left)"),this._seekTargetTime=t,this._continueSeekedPlayback()):t+e/2&lt;this._bisectTargetTime?this._seekBisector.right()||(this._log("close enough (right)"),this._seekState=C,this._pingProcessing()):this._seekState==F&amp;&amp;this._codec.hasVideo&amp;&amp;this._codec.keyframeTimestamp&lt;this._codec.frameTimestamp?(this._log("finding the keypoint now"),this._seekState=S,this._startBisection(this._codec.keyframeTimestamp)):(this._log("straight seeking now"),this._seekState=C,this._pingProcessing())}_setupVideo(){this._videoInfo.fps&gt;0?this._targetPerFrameTime=1e3/this._videoInfo.fps:this._targetPerFrameTime=16.667,this._canvas.width=this._videoInfo.displayWidth,this._canvas.height=this._videoInfo.displayHeight,OGVPlayer.styleManager.appendRule("."+this._instanceId,{width:this._videoInfo.displayWidth+"px",height:this._videoInfo.displayHeight+"px"}),OGVPlayer.updatePositionOnResize();var e={};void 0!==this._options.webGL&amp;&amp;(e.webGL=this._options.webGL),this._options.forceWebGL&amp;&amp;(e.webGL="required"),this._frameSink=h.default.attach(this._canvas,e)}_doProcessing(){if(this._didSeek&amp;&amp;(this._didSeek=!1),this._nextProcessingTimer=null,this._isProcessing(),this._depth&gt;0)throw new Error("REENTRANCY FAIL: doProcessing recursing unexpectedly");var e=0;do{if(this._needProcessing=!1,this._depth++,this._doProcessingLoop(),this._depth--,this._needProcessing&amp;&amp;this._isProcessing())throw new Error("REENTRANCY FAIL: waiting on input or codec but asked to keep processing");++e&gt;500&amp;&amp;(this._log("stuck in processing loop; breaking with timer"),this._needProcessing=0,this._pingProcessing(0))}while(this._needProcessing)}_doProcessingLoop(){if(this._actionQueue.length)this._actionQueue.shift()();else if(this._state==T)this._doProcessInitial();else if(this._state==k)this._doProcessSeekingEnd();else if(this._state==P)this._doProcessLoaded();else if(this._state==w)this._doProcessPreload();else if(this._state==E)this._doProcessReady();else if(this._state==A)this._doProcessSeeking();else if(this._state==x)this._doProcessPlay();else{if(this._state!=R)throw new Error("Unexpected OGVPlayer state "+this._state);this._doProcessError()}}_doProcessInitial(){if(this._codec.loadedMetadata){if(!this._codec.hasVideo&amp;&amp;!this._codec.hasAudio)throw new Error("No audio or video found, something is wrong");this._codec.hasAudio&amp;&amp;(this._audioInfo=this._codec.audioFormat),this._codec.hasVideo&amp;&amp;(this._videoInfo=this._codec.videoFormat,this._setupVideo()),isNaN(this._codec.duration)||(this._duration=this._codec.duration),null===this._duration&amp;&amp;this._stream.seekable&amp;&amp;"video/ogg"==this._detectedType?(this._state=k,this._lastSeenTimestamp=-1,this._codec.flush((()=&gt;{this._seekStream(Math.max(0,this._stream.length-131072))}))):(this._state=P,this._pingProcessing())}else this._codec.process((e=&gt;{if(e)this._pingProcessing();else{if(this._streamEnded)throw new Error("end of file before headers found");this._log("reading more cause we are out of data"),this._readBytesAndWait()}}))}_doProcessSeekingEnd(){this._codec.frameReady?(this._log("saw frame with "+this._codec.frameTimestamp),this._lastSeenTimestamp=Math.max(this._lastSeenTimestamp,this._codec.frameTimestamp),this._codec.discardFrame((()=&gt;{this._pingProcessing()}))):this._codec.audioReady?(this._log("saw audio with "+this._codec.audioTimestamp),this._lastSeenTimestamp=Math.max(this._lastSeenTimestamp,this._codec.audioTimestamp),this._codec.discardAudio((()=&gt;{this._pingProcessing()}))):this._codec.process((e=&gt;{e?this._pingProcessing():this._stream.eof?(this._log("seek-duration: we are at the end: "+this._lastSeenTimestamp),this._lastSeenTimestamp&gt;0&amp;&amp;(this._duration=this._lastSeenTimestamp),this._state=P,this._codec.flush((()=&gt;{this._streamEnded=!1,this._dataEnded=!1,this._seekStream(0)}))):this._readBytesAndWait()}))}_doProcessLoaded(){this._state=w,this._fireEventAsync("loadedmetadata"),this._fireEventAsync("durationchange"),this._codec.hasVideo&amp;&amp;this._fireEventAsync("resize"),this._pingProcessing(0)}_doProcessPreload(){!this._codec.frameReady&amp;&amp;this._codec.hasVideo||!this._codec.audioReady&amp;&amp;this._codec.hasAudio?this._codec.process((e=&gt;{e?this._pingProcessing():this._streamEnded?this._ended=!0:this._readBytesAndWait()})):(this._state=E,this._fireEventAsync("loadeddata"),this._pingProcessing())}_doProcessReady(){if(this._log("initial seek to "+this._initialSeekTime),this._initialSeekTime&gt;0){var e=this._initialSeekTime;this._initialSeekTime=0,this._log("initial seek to "+e),this._doSeek(e)}else if(this._paused)this._log("paused while in ready");else{var finishStartPlaying=()=&gt;{this._log("finishStartPlaying"),this._state=x,this._lastFrameTimestamp=d(),this._codec.hasAudio&amp;&amp;this._audioFeeder?this._prebufferingAudio=!0:this._startPlayback(),this._pingProcessing(0),this._fireEventAsync("play"),this._fireEventAsync("playing")};!this._codec.hasAudio||this._audioFeeder||this._muted?finishStartPlaying():(this._initAudioFeeder(),this._audioFeeder.waitUntilReady(finishStartPlaying))}}_doProcessSeeking(){if(this._seekState==O)throw new Error("seeking in invalid state (not seeking?)");if(this._seekState==F)this._doProcessBisectionSeek();else if(this._seekState==S)this._doProcessBisectionSeek();else{if(this._seekState!=C)throw new Error("Invalid seek state "+this._seekState);this._doProcessLinearSeeking()}}_doProcessPlay(){var e=this._codec;if(this._paused)this._log("paused during playback; stopping loop");else if((!e.hasAudio||e.audioReady||this._pendingAudio||this._dataEnded)&amp;&amp;(!e.hasVideo||e.frameReady||this._pendingFrame||this._decodedFrames.length||this._dataEnded)){var t,i,s,d=null,h=0,u=!1,c=0;if(e.hasAudio&amp;&amp;this._audioFeeder?(d=this._audioFeeder.getPlaybackState(),h=this._getPlaybackTime(d),u=this._dataEnded&amp;&amp;0==this._audioFeeder.durationBuffered,this._prebufferingAudio&amp;&amp;(this._audioFeeder.durationBuffered&gt;=2*this._audioFeeder.bufferThreshold&amp;&amp;(!e.hasVideo||this._decodedFrames.length&gt;=this._framePipelineDepth)||this._dataEnded)&amp;&amp;(this._log("prebuffering audio done; buffered to "+this._audioFeeder.durationBuffered),this._startPlayback(h),this._prebufferingAudio=!1),d.dropped!=this._droppedAudio&amp;&amp;this._log("dropped "+(d.dropped-this._droppedAudio)),d.delayed!=this._delayedAudio&amp;&amp;this._log("delayed "+(d.delayed-this._delayedAudio)),this._droppedAudio=d.dropped,this._delayedAudio=d.delayed,(t=this._audioFeeder.durationBuffered&lt;=2*this._audioFeeder.bufferThreshold)&amp;&amp;(this._codec.audioReady?this._pendingAudio&gt;=this._audioPipelineDepth&amp;&amp;(this._log("audio decode disabled: "+this._pendingAudio+" packets in flight"),t=!1):t=!1)):(h=this._getPlaybackTime(),t=this._codec.audioReady&amp;&amp;this._audioEndTimestamp&lt;h),this._codec.hasVideo){i=this._decodedFrames.length&gt;0,s=this._pendingFrame+this._decodedFrames.length&lt;this._framePipelineDepth+this._frameParallelism&amp;&amp;this._codec.frameReady,i&amp;&amp;(c=1e3*(this._decodedFrames[0].frameEndTimestamp-h),this._actualPerFrameTime=this._targetPerFrameTime-c);var l=this._targetPerFrameTime;if(this._prebufferingAudio)s&amp;&amp;this._log("decoding a frame during prebuffering"),i=!1;else if(i&amp;&amp;this._dataEnded&amp;&amp;u)this._log("audio timeline ended? ready to draw frame");else if(i&amp;&amp;-c&gt;=l){for(var f=-1,_=0;_&lt;this._decodedFrames.length-1;_++)this._decodedFrames[_].frameEndTimestamp&lt;h&amp;&amp;(f=_-1);if(f&gt;=0)for(;f-- &gt;=0;){this._lateFrames++;var p=this._decodedFrames.shift();this._log("skipping already-decoded late frame at "+p.frameEndTimestamp),c=1e3*(p.frameEndTimestamp-h),this._frameEndTimestamp=p.frameEndTimestamp,this._actualPerFrameTime=this._targetPerFrameTime-c,this._framesProcessed++,p.dropped=!0,this._doFrameComplete(p)}var m=this._codec.nextKeyframeTimestamp,g=m-this._targetPerFrameTime/1e3*(this._framePipelineDepth+this._pendingFrame);if(m&gt;=0&amp;&amp;m!=this._codec.frameTimestamp&amp;&amp;h&gt;=g){this._log("skipping late frame at "+this._decodedFrames[0].frameEndTimestamp+" vs "+h+", expect to see keyframe at "+m);for(var v=0;v&lt;this._decodedFrames.length;v++){var y=this._decodedFrames[v];this._lateFrames++,this._framesProcessed++,this._frameEndTimestamp=y.frameEndTimestamp,c=1e3*(y.frameEndTimestamp-h),this._actualPerFrameTime=this._targetPerFrameTime-c,y.dropped=!0,this._doFrameComplete(y)}this._decodedFrames=[];for(var b=0;b&lt;this._pendingFrames.length;b++){var T=this._pendingFrames[b];this._lateFrames++,this._framesProcessed++,this._frameEndTimestamp=T.frameEndTimestamp,c=1e3*(T.frameEndTimestamp-h),this._actualPerFrameTime=this._targetPerFrameTime-c,T.dropped=!0,this._doFrameComplete(T)}for(this._pendingFrames=[],this._pendingFrame=0;this._codec.frameReady&amp;&amp;this._codec.frameTimestamp&lt;m;){var k={frameEndTimestamp:this._codec.frameTimestamp,dropped:!0};c=1e3*(k.frameEndTimestamp-h),this._actualPerFrameTime=this._targetPerFrameTime-c,this._lateFrames++,this._codec.discardFrame((()=&gt;{})),this._framesProcessed++,this._doFrameComplete(k)}return void(this._isProcessing()||this._pingProcessing())}}else i&amp;&amp;c&lt;=4||(i=!1)}if(s){this._log("play loop: ready to decode frame; thread depth: "+this._pendingFrame+", have buffered: "+this._decodedFrames.length),0==this._videoInfo.fps&amp;&amp;this._codec.frameTimestamp-this._frameEndTimestamp&gt;0&amp;&amp;(this._targetPerFrameTime=1e3*(this._codec.frameTimestamp-this._frameEndTimestamp)),this._totalFrameTime+=this._targetPerFrameTime,this._totalFrameCount++;var P=this._frameEndTimestamp=this._codec.frameTimestamp;this._pendingFrame++,this._pendingFrames.push({frameEndTimestamp:P});var w=this._pendingFrames,E=!1,x=this._time((()=&gt;{this._codec.decodeFrame((e=&gt;{w===this._pendingFrames?(this._log("play loop callback: decoded frame"),this._pendingFrame--,this._pendingFrames.shift(),e?this._decodedFrames.push({yCbCrBuffer:this._codec.frameBuffer,videoCpuTime:this._codec.videoCpuTime,frameEndTimestamp:P}):this._log("Bad video packet or something"),this._codec.process((()=&gt;{this._isProcessing()||this._pingProcessing(E?void 0:0)}))):this._log("play loop callback after flush, discarding")}))}));this._pendingFrame&amp;&amp;(E=!0,this._proxyTime+=x,this._pingProcessing(),this._dataEnded&amp;&amp;this._codec.sync())}else if(t){this._log("play loop: ready for audio; depth: "+this._pendingAudio),this._pendingAudio++;var A=this._codec.audioTimestamp,R=this._time((()=&gt;{this._codec.decodeAudio((e=&gt;{if(this._pendingAudio--,this._log("play loop callback: decoded audio"),this._audioEndTimestamp=A,e){var t=this._codec.audioBuffer;if(t&amp;&amp;(this._bufferTime+=this._time((()=&gt;{this._audioFeeder&amp;&amp;this._audioFeeder.bufferData(t)})),!this._codec.hasVideo)){this._framesProcessed++;var i={frameEndTimestamp:this._audioEndTimestamp};this._doFrameComplete(i)}}this._isProcessing()||this._pingProcessing()}))}));this._pendingAudio&amp;&amp;(this._proxyTime+=R,this._codec.audioReady?this._pingProcessing():this._doProcessPlayDemux())}else if(i){this._log("play loop: ready to draw frame"),this._nextFrameTimer&amp;&amp;(clearTimeout(this._nextFrameTimer),this._nextFrameTimer=null),this._thumbnail&amp;&amp;(this.removeChild(this._thumbnail),this._thumbnail=null);var O=this._decodedFrames.shift();this._currentVideoCpuTime=O.videoCpuTime,this._drawingTime+=this._time((()=&gt;{this._drawFrame(O.yCbCrBuffer)})),this._framesProcessed++,this._doFrameComplete(O),this._pingProcessing()}else if(!this._decodedFrames.length||this._nextFrameTimer||this._prebufferingAudio)if(this._dataEnded&amp;&amp;!(this._pendingAudio||this._pendingFrame||this._decodedFrames.length)){this._log("play loop: playback reached end of data "+[this._pendingAudio,this._pendingFrame,this._decodedFrames.length]);var F=0;this._codec.hasAudio&amp;&amp;this._audioFeeder&amp;&amp;(F=1e3*this._audioFeeder.durationBuffered),F&gt;0?(this._log("play loop: ending pending "+F+" ms"),this._pingProcessing(Math.max(0,F))):(this._log("play loop: ENDING NOW: playback time "+this._getPlaybackTime()+"; frameEndTimestamp: "+this._frameEndTimestamp),this._stopPlayback(),this._prebufferingAudio=!1,this._initialPlaybackOffset=Math.max(this._audioEndTimestamp,this._frameEndTimestamp),this._ended=!0,this._paused=!0,this._fireEventAsync("pause"),this._fireEventAsync("ended"))}else this._prebufferingAudio&amp;&amp;(e.hasVideo&amp;&amp;!e.frameReady||e.hasAudio&amp;&amp;!e.audioReady)?(this._log("play loop: prebuffering demuxing"),this._doProcessPlayDemux()):this._log("play loop: waiting on async/timers");else{var S=c;this._log("play loop: setting a timer for drawing "+S),this._nextFrameTimer=setTimeout((()=&gt;{this._nextFrameTimer=null,this._pingProcessing()}),S)}}else this._log("play loop: demuxing"),this._doProcessPlayDemux()}_doProcessPlayDemux(){var e=this._codec.frameReady,t=this._codec.audioReady;this._codec.process((i=&gt;{this._codec.frameReady&amp;&amp;!e||this._codec.audioReady&amp;&amp;!t?(this._log("demuxer has packets"),this._pingProcessing()):i?(this._log("demuxer processing to find more packets"),this._pingProcessing()):(this._log("demuxer ran out of data"),this._streamEnded?(this._log("demuxer reached end of data stream"),this._dataEnded=!0,this._pingProcessing()):(this._log("demuxer loading more data"),this._readBytesAndWait()))}))}_doProcessError(){}_isProcessing(){return this._stream&amp;&amp;(this._stream.buffering||this._stream.seeking)||this._codec&amp;&amp;this._codec.processing}_readBytesAndWait(){this._stream.buffering||this._stream.seeking?this._log("readBytesAndWait during i/o"):this._stream.read(32768).then((e=&gt;{this._log("got input "+[e.byteLength]),e.byteLength&amp;&amp;this._actionQueue.push((()=&gt;{this._codec.receiveInput(e,(()=&gt;{this._pingProcessing()}))})),this._stream.eof&amp;&amp;(this._log("stream is at end!"),this._streamEnded=!0),this._isProcessing()||this._pingProcessing()})).catch((e=&gt;{this._onStreamError(e)}))}_pingProcessing(){var e=arguments.length&gt;0&amp;&amp;void 0!==arguments[0]?arguments[0]:-1;this._stream&amp;&amp;this._stream.waiting?this._log("waiting on input"):(this._nextProcessingTimer&amp;&amp;(this._log("canceling old processing timer"),clearTimeout(this._nextProcessingTimer),this._nextProcessingTimer=null),e&gt;-1/256?this._nextProcessingTimer=setTimeout((()=&gt;{this._pingProcessing()}),e):this._depth?this._needProcessing=!0:this._doProcessing())}_startProcessingVideo(e){if(!this._started&amp;&amp;!this._codec){this._framesProcessed=0,this._bufferTime=0,this._drawingTime=0,this._proxyTime=0,this._started=!0,this._ended=!1;var t={base:this._options.base,worker:this._enableWorker,threading:this._enableThreading,simd:this._enableSIMD};this._detectedType&amp;&amp;(t.type=this._detectedType),this._codec=new v.default(t),this._lastVideoCpuTime=0,this._lastAudioCpuTime=0,this._lastDemuxerCpuTime=0,this._lastBufferTime=0,this._lastDrawingTime=0,this._lastProxyTime=0,this._lastFrameVideoCpuTime=0,this._lastFrameAudioCpuTime=0,this._lastFrameDemuxerCpuTime=0,this._lastFrameBufferTime=0,this._lastFrameProxyTime=0,this._lastFrameDrawingTime=0,this._currentVideoCpuTime=0,this._codec.onseek=e=&gt;{this._didSeek=!0,this._stream&amp;&amp;this._seekStream(e)},this._codec.init((()=&gt;{this._codec.receiveInput(e,(()=&gt;{this._readBytesAndWait()}))}))}}_loadCodec(e){this._stream.read(1024).then((t=&gt;{var i=new Uint8Array(t);i.length&gt;4&amp;&amp;i[0]=="O".charCodeAt(0)&amp;&amp;i[1]=="g".charCodeAt(0)&amp;&amp;i[2]=="g".charCodeAt(0)&amp;&amp;i[3]=="S".charCodeAt(0)?this._detectedType="video/ogg":i.length&gt;4&amp;&amp;26==i[0]&amp;&amp;69==i[1]&amp;&amp;223==i[2]&amp;&amp;163==i[3]?this._detectedType="video/webm":this._detectedType="video/ogg",e(t)}))}_prepForLoad(e){this._stopVideo();var doLoad=()=&gt;{this._options.stream?this._stream=this._options.stream:this._stream=new u.default({url:this.src,cacheSize:16777216,progressive:!1}),this._stream.load().then((()=&gt;{this._loading=!1,this._currentSrc=this.src,this._byteLength=this._stream.seekable?this._stream.length:0;var e=this._stream.headers["x-content-duration"];"string"==typeof e&amp;&amp;(this._duration=parseFloat(e)),this._loadCodec((e=&gt;{this._startProcessingVideo(e)}))})).catch((e=&gt;{this._onStreamError(e)}))};this._currentSrc="",this._loading=!0,this._actionQueue.push((()=&gt;{e&amp;&amp;"none"===this.preload?this._loading=!1:doLoad()})),this._pingProcessing(0)}load(){this._prepForLoad()}canPlayType(e){var t=new m.default(e);function checkTypes(e){if(t.codecs){var i=0,s=0;return t.codecs.forEach((t=&gt;{e.indexOf(t)&gt;=0?i++:s++})),0===i||s&gt;0?"":"probably"}return"maybe"}return"ogg"!==t.minor||"audio"!==t.major&amp;&amp;"video"!==t.major&amp;&amp;"application"!==t.major?"webm"!==t.minor||"audio"!==t.major&amp;&amp;"video"!==t.major?"":checkTypes(["vorbis","opus","vp8","vp9"]):checkTypes(["vorbis","opus","theora"])}play(){this._muted||this._options.audioContext||OGVPlayer.initSharedAudioContext(),this._paused&amp;&amp;(this._startedPlaybackInDocument=document.body.contains(this),this._paused=!1,this._state==A||(this._started&amp;&amp;this._codec&amp;&amp;this._codec.loadedMetadata?(this._ended&amp;&amp;this._stream&amp;&amp;this._byteLength?(this._log(".play() starting over after end"),this._seek(0)):this._log(".play() while already started"),this._state=E,this._isProcessing()||this._pingProcessing()):this._loading?this._log(".play() while loading"):(this._log(".play() before started"),this._stream||this.load()))),this._video&amp;&amp;this._video.paused&amp;&amp;this._video.play()}getPlaybackStats(){return{targetPerFrameTime:this._targetPerFrameTime,framesProcessed:this._framesProcessed,videoBytes:this._codec?this._codec.videoBytes:0,audioBytes:this._codec?this._codec.audioBytes:0,playTime:this._playTime,demuxingTime:this._codec?this._codec.demuxerCpuTime-this._lastDemuxerCpuTime:0,videoDecodingTime:this._codec?this._codec.videoCpuTime-this._lastVideoCpuTime:0,audioDecodingTime:this._codec?this._codec.audioCpuTime-this._lastAudioCpuTime:0,bufferTime:this._bufferTime-this._lastBufferTime,drawingTime:this._drawingTime-this._lastDrawingTime,proxyTime:this._proxyTime-this._lastProxyTime,droppedAudio:this._droppedAudio,delayedAudio:this._delayedAudio,jitter:this._totalJitter/this._framesProcessed,lateFrames:this._lateFrames}}resetPlaybackStats(){this._framesProcessed=0,this._playTime=0,this._codec&amp;&amp;(this._lastDemuxerCpuTime=this._codec.demuxerCpuTime,this._lastVideoCpuTime=this._codec.videoCpuTime,this._lastAudioCpuTime=this._codec.audioCpuTime,this._codec.videoBytes=0,this._codec.audioBytes=0),this._lastBufferTime=this._bufferTime,this._lastDrawingTime=this._drawingTime,this._lastProxyTime=this._proxyTime,this._totalJitter=0,this._totalFrameTime=0,this._totalFrameCount=0}getVideoFrameSink(){return this._frameSink}getCanvas(){return this._canvas}getVideo(){return this._video}pause(){this._paused||(this._nextProcessingTimer&amp;&amp;(clearTimeout(this._nextProcessingTimer),this._nextProcessingTimer=null),this._stopPlayback(),this._prebufferingAudio=!1,this._paused=!0,this._fireEvent("pause"))}stop(){this._stopVideo(),this._paused=!0}fastSeek(e){this._seek(+e,D)}}if((0,_.default)(OGVPlayer,b),OGVPlayer.instanceCount=0,OGVPlayer.styleManager=new function(){var e=document.createElement("style");e.type="text/css",e.textContent="ogvjs { display: inline-block; position: relative; -webkit-user-select: none; -webkit-tap-highlight-color: rgba(0,0,0,0); ",document.head.appendChild(e);var t=e.sheet;this.appendRule=function(e,i){var s=[];for(var d in i)i.hasOwnProperty(d)&amp;&amp;s.push(d+":"+i[d]);var h=e+"{"+s.join(";")+"}";t.insertRule(h,t.cssRules.length-1)}},OGVPlayer.supportsObjectFit="string"==typeof document.createElement("canvas").style.objectFit,OGVPlayer.supportsObjectFit&amp;&amp;navigator.userAgent.match(/iPhone|iPad|iPod Touch/)&amp;&amp;(OGVPlayer.supportsObjectFit=!1),OGVPlayer.supportsObjectFit&amp;&amp;navigator.userAgent.match(/Edge/)&amp;&amp;(OGVPlayer.supportsObjectFit=!1),OGVPlayer.supportsObjectFit)OGVPlayer.updatePositionOnResize=function(){};else{OGVPlayer.updatePositionOnResize=function(){function fixup(e,t,i){var s=e.offsetParent||e.parentNode,d=t/i;if(d&gt;s.offsetWidth/s.offsetHeight){var h=s.offsetWidth/d,u=(s.offsetHeight-h)/2;e.style.width="100%",e.style.height=h+"px",e.style.marginLeft=0,e.style.marginRight=0,e.style.marginTop=u+"px",e.style.marginBottom=u+"px"}else{var c=s.offsetHeight*d,l=(s.offsetWidth-c)/2;e.style.width=c+"px",e.style.height="100%",e.style.marginLeft=l+"px",e.style.marginRight=l+"px",e.style.marginTop=0,e.style.marginBottom=0}}function queryOver(e,t){var i=document.querySelectorAll(e);Array.prototype.slice.call(i).forEach(t)}queryOver("ogvjs &gt; canvas",(function(e){fixup(e,e.width,e.height)})),queryOver("ogvjs &gt; img",(function(e){fixup(e,e.naturalWidth,e.naturalHeight)}))};var M=function(){y(OGVPlayer.updatePositionOnResize)};window.addEventListener("resize",OGVPlayer.updatePositionOnResize),window.addEventListener("orientationchange",OGVPlayer.updatePositionOnResize),document.addEventListener("fullscreenchange",M),document.addEventListener("mozfullscreenchange",M),document.addEventListener("webkitfullscreenchange",M),document.addEventListener("MSFullscreenChange",M)}var V=OGVPlayer;t.default=V},580:(e,t)=&gt;{Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,t.default=function(e){return class{constructor(t,i,s){for(var d in s=s||{},this.worker=t,this.transferables=function(){var e=new ArrayBuffer(1024),i=new Uint8Array(e);try{return t.postMessage({action:"transferTest",bytes:i},[e]),!e.byteLength}catch(e){return!1}}(),e)e.hasOwnProperty(d)&amp;&amp;(this[d]=e[d]);this.processingQueue=0,Object.defineProperty(this,"processing",{get:function(){return this.processingQueue&gt;0}}),this.messageCount=0,this.pendingCallbacks={},this.worker.addEventListener("message",(e=&gt;{this.handleMessage(e)})),this.proxy("construct",[i,s],(()=&gt;{}))}proxy(e,t,i){var s=arguments.length&gt;3&amp;&amp;void 0!==arguments[3]?arguments[3]:[];if(!this.worker)throw'Tried to call "'+e+'" method on closed proxy object';var d="callback-"+ ++this.messageCount+"-"+e;i&amp;&amp;(this.pendingCallbacks[d]=i);var h={action:e,callbackId:d,args:t||[]};this.processingQueue++,this.transferables?this.worker.postMessage(h,s):this.worker.postMessage(h)}terminate(){this.worker&amp;&amp;(this.worker.terminate(),this.worker=null,this.processingQueue=0,this.pendingCallbacks={})}handleMessage(e){if(this.processingQueue--,"callback"===e.data.action){var t=e.data,i=t.callbackId,s=t.args,d=this.pendingCallbacks[i];if(t.props)for(var h in t.props)t.props.hasOwnProperty(h)&amp;&amp;(this[h]=t.props[h]);d&amp;&amp;(delete this.pendingCallbacks[i],d.apply(this,s))}}}}},168:(e,t)=&gt;{Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,t.default=class{constructor(e){this._ranges=e,this.length=e.length}start(e){if(e&lt;0||e&gt;this.length||e!==(0|e))throw new RangeError("Invalid index");return this._ranges[e][0]}end(e){if(e&lt;0||e&gt;this.length||e!==(0|e))throw new RangeError("Invalid index");return this._ranges[e][1]}}},625:(e,t,i)=&gt;{var s=i(318);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var d=s(i(964));t.default=class{constructor(e){return this.options=e||{},this.demuxer=null,this.videoDecoder=null,this.audioDecoder=null,this.flushIter=0,this.loadedMetadata=!1,this.processing=!1,Object.defineProperties(this,{duration:{get:function(){return this.loadedMetadata?this.demuxer.duration:NaN}},hasAudio:{get:function(){return this.loadedMetadata&amp;&amp;!!this.audioDecoder}},audioReady:{get:function(){return this.hasAudio&amp;&amp;this.demuxer.audioReady}},audioTimestamp:{get:function(){return this.demuxer.audioTimestamp}},audioFormat:{get:function(){return this.hasAudio?this.audioDecoder.audioFormat:null}},audioBuffer:{get:function(){return this.hasAudio?this.audioDecoder.audioBuffer:null}},hasVideo:{get:function(){return this.loadedMetadata&amp;&amp;!!this.videoDecoder}},frameReady:{get:function(){return this.hasVideo&amp;&amp;this.demuxer.frameReady}},frameTimestamp:{get:function(){return this.demuxer.frameTimestamp}},keyframeTimestamp:{get:function(){return this.demuxer.keyframeTimestamp}},nextKeyframeTimestamp:{get:function(){return this.demuxer.nextKeyframeTimestamp}},videoFormat:{get:function(){return this.hasVideo?this.videoDecoder.videoFormat:null}},frameBuffer:{get:function(){return this.hasVideo?this.videoDecoder.frameBuffer:null}},seekable:{get:function(){return this.demuxer.seekable}},demuxerCpuTime:{get:function(){return this.demuxer?this.demuxer.cpuTime:0}},audioCpuTime:{get:function(){return this.audioDecoder?this.audioDecoder.cpuTime:0}},videoCpuTime:{get:function(){return this.videoDecoder?this.videoDecoder.cpuTime:0}}}),this.loadedDemuxerMetadata=!1,this.loadedAudioMetadata=!1,this.loadedVideoMetadata=!1,this.loadedAllMetadata=!1,this.onseek=null,this.videoBytes=0,this.audioBytes=0,this}flushSafe(e){var t=this.flushIter;return i=&gt;{this.flushIter&lt;=t&amp;&amp;e(i)}}init(e){var t;this.processing=!0,t="video/webm"===this.options.type||"audio/webm"===this.options.type?"OGVDemuxerWebMW":"OGVDemuxerOggW",d.default.loadClass(t,(t=&gt;{t().then((t=&gt;{this.demuxer=t,t.onseek=e=&gt;{this.onseek&amp;&amp;this.onseek(e)},t.init((()=&gt;{this.processing=!1,e()}))}))}))}close(){this.demuxer&amp;&amp;(this.demuxer.close(),this.demuxer=null),this.videoDecoder&amp;&amp;(this.videoDecoder.close(),this.videoDecoder=null),this.audioDecoder&amp;&amp;(this.audioDecoder.close(),this.audioDecoder=null)}receiveInput(e,t){this.demuxer.receiveInput(e,t)}process(e){if(this.processing)throw new Error("reentrancy fail on OGVWrapperCodec.process");this.processing=!0;var finish=t=&gt;{this.processing=!1,e(t)},doProcessData=()=&gt;{this.demuxer.process(finish)};this.demuxer.loadedMetadata&amp;&amp;!this.loadedDemuxerMetadata?this.loadAudioCodec((()=&gt;{this.loadVideoCodec((()=&gt;{this.loadedDemuxerMetadata=!0,this.loadedAudioMetadata=!this.audioDecoder,this.loadedVideoMetadata=!this.videoDecoder,this.loadedAllMetadata=this.loadedAudioMetadata&amp;&amp;this.loadedVideoMetadata,finish(!0)}))})):this.loadedDemuxerMetadata&amp;&amp;!this.loadedAudioMetadata?this.audioDecoder.loadedMetadata?(this.loadedAudioMetadata=!0,this.loadedAllMetadata=this.loadedAudioMetadata&amp;&amp;this.loadedVideoMetadata,finish(!0)):this.demuxer.audioReady?this.demuxer.dequeueAudioPacket(((e,t)=&gt;{this.audioBytes+=e.byteLength,this.audioDecoder.processHeader(e,(e=&gt;{finish(!0)}))})):doProcessData():this.loadedAudioMetadata&amp;&amp;!this.loadedVideoMetadata?this.videoDecoder.loadedMetadata?(this.loadedVideoMetadata=!0,this.loadedAllMetadata=this.loadedAudioMetadata&amp;&amp;this.loadedVideoMetadata,finish(!0)):this.demuxer.frameReady?(this.processing=!0,this.demuxer.dequeueVideoPacket((e=&gt;{this.videoBytes+=e.byteLength,this.videoDecoder.processHeader(e,(()=&gt;{finish(!0)}))}))):doProcessData():this.loadedVideoMetadata&amp;&amp;!this.loadedMetadata&amp;&amp;this.loadedAllMetadata?(this.loadedMetadata=!0,finish(!0)):!this.loadedMetadata||this.hasAudio&amp;&amp;!this.demuxer.audioReady||this.hasVideo&amp;&amp;!this.demuxer.frameReady?doProcessData():finish(!0)}decodeFrame(e){var t=this.flushSafe(e),i=this.frameTimestamp,s=this.keyframeTimestamp;this.demuxer.dequeueVideoPacket((e=&gt;{this.videoBytes+=e.byteLength,this.videoDecoder.processFrame(e,(e=&gt;{var d=this.videoDecoder.frameBuffer;d&amp;&amp;(d.timestamp=i,d.keyframeTimestamp=s),t(e)}))}))}decodeAudio(e){var t=this.flushSafe(e);this.demuxer.dequeueAudioPacket(((e,i)=&gt;{this.audioBytes+=e.byteLength,this.audioDecoder.processAudio(e,(e=&gt;{if(i){var s=this.audioDecoder.audioBuffer,d=[];for(var h of s){var u=Math.round(i*this.audioFormat.rate/1e9);u&gt;0?d.push(h.subarray(0,h.length-Math.min(u,h.length))):d.push(h.subarray(Math.min(Math.abs(u),h.length),h.length))}this.audioDecoder.audioBuffer=d}return t(e)}))}))}discardFrame(e){this.demuxer.dequeueVideoPacket((t=&gt;{this.videoBytes+=t.byteLength,e()}))}discardAudio(e){this.demuxer.dequeueAudioPacket(((t,i)=&gt;{this.audioBytes+=t.byteLength,e()}))}flush(e){this.flushIter++,this.demuxer.flush(e)}sync(){this.videoDecoder&amp;&amp;this.videoDecoder.sync()}recycleFrame(e){this.videoDecoder&amp;&amp;this.videoDecoder.recycleFrame(e)}getKeypointOffset(e,t){this.demuxer.getKeypointOffset(e,t)}seekToKeypoint(e,t){this.demuxer.seekToKeypoint(e,this.flushSafe(t))}loadAudioCodec(e){if(this.demuxer.audioCodec){var t={vorbis:"OGVDecoderAudioVorbisW",opus:"OGVDecoderAudioOpusW"}[this.demuxer.audioCodec];this.processing=!0,d.default.loadClass(t,(t=&gt;{var i={};this.demuxer.audioFormat&amp;&amp;(i.audioFormat=this.demuxer.audioFormat),t(i).then((t=&gt;{this.audioDecoder=t,t.init((()=&gt;{this.loadedAudioMetadata=t.loadedMetadata,this.processing=!1,e()}))}))}),{worker:this.options.worker})}else e()}loadVideoCodec(e){if(this.demuxer.videoCodec){var t=!!this.options.simd,i=!!this.options.threading,s={theora:"OGVDecoderVideoTheoraW",vp8:i?"OGVDecoderVideoVP8MTW":"OGVDecoderVideoVP8W",vp9:i?t?"OGVDecoderVideoVP9SIMDMTW":"OGVDecoderVideoVP9MTW":t?"OGVDecoderVideoVP9SIMDW":"OGVDecoderVideoVP9W",av1:i?t?"OGVDecoderVideoAV1SIMDMTW":"OGVDecoderVideoAV1MTW":t?"OGVDecoderVideoAV1SIMDW":"OGVDecoderVideoAV1W"}[this.demuxer.videoCodec];this.processing=!0,d.default.loadClass(s,(t=&gt;{var s={};this.demuxer.videoFormat&amp;&amp;(s.videoFormat=this.demuxer.videoFormat),i&amp;&amp;delete window.ENVIRONMENT_IS_PTHREAD,t(s).then((t=&gt;{this.videoDecoder=t,t.init((()=&gt;{this.loadedVideoMetadata=t.loadedMetadata,this.processing=!1,e()}))}))}),{worker:this.options.worker&amp;&amp;!this.options.threading})}else e()}}},539:(e,t)=&gt;{Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var i=new class{constructor(){this.tested=!1,this.testResult=void 0}wasmSupported(){if(!this.tested){try{"object"==typeof WebAssembly?this.testResult=function(){var e=new Uint8Array([0,97,115,109,1,0,0,0,1,6,1,96,1,127,1,127,3,2,1,0,5,3,1,0,1,7,8,1,4,116,101,115,116,0,0,10,16,1,14,0,32,0,65,1,54,2,0,32,0,40,2,0,11]),t=new WebAssembly.Module(e);return 0!==new WebAssembly.Instance(t,{}).exports.test(4)}():this.testResult=!1}catch(e){console.log("Exception while testing WebAssembly",e),this.testResult=!1}this.tested=!0}return this.testResult}};t.default=i},309:(e,t)=&gt;{Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,t.default=function(e,t){for(var i in t)t.hasOwnProperty(i)&amp;&amp;(e[i]=t[i])}},431:(e,t,i)=&gt;{var s=function(){function defineProperties(e,t){for(var i=0;i&lt;t.length;i++){var s=t[i];s.enumerable=s.enumerable||!1,s.configurable=!0,"value"in s&amp;&amp;(s.writable=!0),Object.defineProperty(e,s.key,s)}}return function(e,t,i){return t&amp;&amp;defineProperties(e.prototype,t),i&amp;&amp;defineProperties(e,i),e}}(),d=function get(e,t,i){null===e&amp;&amp;(e=Function.prototype);var s=Object.getOwnPropertyDescriptor(e,t);if(void 0===s){var d=Object.getPrototypeOf(e);return null===d?void 0:get(d,t,i)}if("value"in s)return s.value;var h=s.get;return void 0!==h?h.call(i):void 0};function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _possibleConstructorReturn(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&amp;&amp;"function"!=typeof t?e:t}var h=i(828),u="arraybuffer",c=function(e){function ArrayBufferBackend(){return _classCallCheck(this,ArrayBufferBackend),_possibleConstructorReturn(this,(ArrayBufferBackend.__proto__||Object.getPrototypeOf(ArrayBufferBackend)).apply(this,arguments))}return function(e,t){if("function"!=typeof t&amp;&amp;null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&amp;&amp;t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&amp;&amp;(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(ArrayBufferBackend,e),s(ArrayBufferBackend,[{key:"initXHR",value:function(){d(ArrayBufferBackend.prototype.__proto__||Object.getPrototypeOf(ArrayBufferBackend.prototype),"initXHR",this).call(this),this.xhr.responseType=u}},{key:"onXHRProgress",value:function(){}},{key:"onXHRLoad",value:function(){var e=this.xhr.response;this.bytesRead+=e.byteLength,this.emit("buffer",e),d(ArrayBufferBackend.prototype.__proto__||Object.getPrototypeOf(ArrayBufferBackend.prototype),"onXHRLoad",this).call(this)}}]),ArrayBufferBackend}(h);c.supported=function(){try{var e=new XMLHttpRequest;return e.responseType=u,e.responseType===u}catch(e){return!1}},e.exports=c},306:(e,t,i)=&gt;{var s=function(){function defineProperties(e,t){for(var i=0;i&lt;t.length;i++){var s=t[i];s.enumerable=s.enumerable||!1,s.configurable=!0,"value"in s&amp;&amp;(s.writable=!0),Object.defineProperty(e,s.key,s)}}return function(e,t,i){return t&amp;&amp;defineProperties(e.prototype,t),i&amp;&amp;defineProperties(e,i),e}}();function getXHRRangeMatches(e){var t=e.getResponseHeader("Content-Range");return t&amp;&amp;t.match(/^bytes (\d+)-(\d+)\/(\d+)/)}var d=function(e){function Backend(e){var t=e.url,i=e.offset,s=e.length,d=e.cachever,h=void 0===d?0:d;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,Backend);var u=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&amp;&amp;"function"!=typeof t?e:t}(this,(Backend.__proto__||Object.getPrototypeOf(Backend)).call(this));return u.url=t,u.offset=i,u.length=s,u.cachever=h,u.loaded=!1,u.seekable=!1,u.headers={},u.eof=!1,u.bytesRead=0,u.xhr=new XMLHttpRequest,u}return function(e,t){if("function"!=typeof t&amp;&amp;null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&amp;&amp;t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&amp;&amp;(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(Backend,e),s(Backend,[{key:"load",value:function(){var e=this;return new Promise((function(t,i){var s=null;e._onAbort=function(e){s(),i(e)};var d=function(){if(2==e.xhr.readyState){if(206==e.xhr.status){var d=function(e){var t=getXHRRangeMatches(e);return t?parseInt(t[1],10):0}(e.xhr);if(e.offset!=d)return console.log("Expected start at "+e.offset+" but got "+d+"; working around Safari range caching bug: https://bugs.webkit.org/show_bug.cgi?id=82672"),e.cachever++,e.emit("cachever"),e.abort(),s(),void e.load().then(t).catch(i);e.seekable=!0}e.xhr.status&gt;=200&amp;&amp;e.xhr.status&lt;300?(e.length=function(e){if(206==e.status)return function(e){var t=getXHRRangeMatches(e);return t?parseInt(t[3],10):-1}(e);var t=e.getResponseHeader("Content-Length");return null===t||""===t?-1:parseInt(t,10)}(e.xhr),e.headers=function(e){var t={};return e.getAllResponseHeaders().split(/\r?\n/).forEach((function(e){var i=e.split(/:\s*/,2);i.length&gt;1&amp;&amp;(t[i[0].toLowerCase()]=i[1])})),t}(e.xhr),e.onXHRStart()):(s(),i(new Error("HTTP error "+e.xhr.status)))}},h=function(){s(),i(new Error("network error"))},u=function(){s(),t()};s=function(){e.xhr.removeEventListener("readystatechange",d),e.xhr.removeEventListener("error",h),e.off("open",u),e._onAbort=null},e.initXHR(),e.xhr.addEventListener("readystatechange",d),e.xhr.addEventListener("error",h),e.on("open",u),e.xhr.send()}))}},{key:"bufferToOffset",value:function(e){return Promise.reject(new Error("abstract"))}},{key:"abort",value:function(){if(this.xhr.abort(),this._onAbort){var e=this._onAbort;this._onAbort=null;var t=new Error("Aborted");t.name="AbortError",e(t)}}},{key:"initXHR",value:function(){var e=this.url;this.cachever&amp;&amp;(e+="?buggy_cachever="+this.cachever),this.xhr.open("GET",e);var t=null;(this.offset||this.length)&amp;&amp;(t="bytes="+this.offset+"-"),this.length&amp;&amp;(t+=this.offset+this.length-1),null!==t&amp;&amp;this.xhr.setRequestHeader("Range",t)}},{key:"onXHRStart",value:function(){throw new Error("abstract")}}]),Backend}(i(566));e.exports=d},810:(e,t,i)=&gt;{var s=function(){function defineProperties(e,t){for(var i=0;i&lt;t.length;i++){var s=t[i];s.enumerable=s.enumerable||!1,s.configurable=!0,"value"in s&amp;&amp;(s.writable=!0),Object.defineProperty(e,s.key,s)}}return function(e,t,i){return t&amp;&amp;defineProperties(e.prototype,t),i&amp;&amp;defineProperties(e,i),e}}(),d=function get(e,t,i){null===e&amp;&amp;(e=Function.prototype);var s=Object.getOwnPropertyDescriptor(e,t);if(void 0===s){var d=Object.getPrototypeOf(e);return null===d?void 0:get(d,t,i)}if("value"in s)return s.value;var h=s.get;return void 0!==h?h.call(i):void 0};function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _possibleConstructorReturn(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&amp;&amp;"function"!=typeof t?e:t}var h=function(e){function BinaryStringBackend(){return _classCallCheck(this,BinaryStringBackend),_possibleConstructorReturn(this,(BinaryStringBackend.__proto__||Object.getPrototypeOf(BinaryStringBackend)).apply(this,arguments))}return function(e,t){if("function"!=typeof t&amp;&amp;null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&amp;&amp;t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&amp;&amp;(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(BinaryStringBackend,e),s(BinaryStringBackend,[{key:"initXHR",value:function(){d(BinaryStringBackend.prototype.__proto__||Object.getPrototypeOf(BinaryStringBackend.prototype),"initXHR",this).call(this),this.xhr.responseType="text",this.xhr.overrideMimeType("text/plain; charset=x-user-defined")}},{key:"onXHRProgress",value:function(){var e=this.xhr.responseText.slice(this.bytesRead);e.length&gt;0&amp;&amp;(this.bytesRead+=e.length,this.emit("buffer",e))}},{key:"onXHRLoad",value:function(){this.onXHRProgress(),d(BinaryStringBackend.prototype.__proto__||Object.getPrototypeOf(BinaryStringBackend.prototype),"onXHRLoad",this).call(this)}}]),BinaryStringBackend}(i(828));h.supported=function(){try{return!!(new XMLHttpRequest).overrideMimeType}catch(e){return!1}},e.exports=h},828:(e,t,i)=&gt;{var s=function(){function defineProperties(e,t){for(var i=0;i&lt;t.length;i++){var s=t[i];s.enumerable=s.enumerable||!1,s.configurable=!0,"value"in s&amp;&amp;(s.writable=!0),Object.defineProperty(e,s.key,s)}}return function(e,t,i){return t&amp;&amp;defineProperties(e.prototype,t),i&amp;&amp;defineProperties(e,i),e}}(),d=function get(e,t,i){null===e&amp;&amp;(e=Function.prototype);var s=Object.getOwnPropertyDescriptor(e,t);if(void 0===s){var d=Object.getPrototypeOf(e);return null===d?void 0:get(d,t,i)}if("value"in s)return s.value;var h=s.get;return void 0!==h?h.call(i):void 0};function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _possibleConstructorReturn(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&amp;&amp;"function"!=typeof t?e:t}var h=function(e){function DownloadBackend(){return _classCallCheck(this,DownloadBackend),_possibleConstructorReturn(this,(DownloadBackend.__proto__||Object.getPrototypeOf(DownloadBackend)).apply(this,arguments))}return function(e,t){if("function"!=typeof t&amp;&amp;null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&amp;&amp;t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&amp;&amp;(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(DownloadBackend,e),s(DownloadBackend,[{key:"bufferToOffset",value:function(e){var t=this;return new Promise((function(i,s){if(t.eof||t.offset&gt;=e)i();else{var d=null;t._onAbort=function(e){d(),s(e)};var h=function(){t.offset&gt;=e&amp;&amp;!t.eof&amp;&amp;(d(),i())},u=function(){d(),i()},c=function(){d(),s(new Error("error streaming"))};d=function(){t.buffering=!1,t.off("buffer",h),t.off("done",u),t.off("error",c),t._onAbort=null},t.buffering=!0,t.on("buffer",h),t.on("done",u),t.on("error",c)}}))}},{key:"initXHR",value:function(){d(DownloadBackend.prototype.__proto__||Object.getPrototypeOf(DownloadBackend.prototype),"initXHR",this).call(this)}},{key:"onXHRStart",value:function(){var e=this;this.xhr.addEventListener("progress",(function(){return e.onXHRProgress()})),this.xhr.addEventListener("error",(function(){return e.onXHRError()})),this.xhr.addEventListener("load",(function(){return e.onXHRLoad()})),this.emit("open")}},{key:"onXHRProgress",value:function(){throw new Error("abstract")}},{key:"onXHRError",value:function(){this.emit("error")}},{key:"onXHRLoad",value:function(){this.eof=!0,this.emit("done")}}]),DownloadBackend}(i(306));e.exports=h},761:(e,t,i)=&gt;{var s=i(855),d=i(810),h=i(431),u=null;e.exports=function(e){if(!1===e.progressive)return new h(e);if(u||(u=s.supported()?s:d.supported()?d:null),!u)throw new Error("No supported backend class");return new u(e)}},855:(e,t,i)=&gt;{var s=function(){function defineProperties(e,t){for(var i=0;i&lt;t.length;i++){var s=t[i];s.enumerable=s.enumerable||!1,s.configurable=!0,"value"in s&amp;&amp;(s.writable=!0),Object.defineProperty(e,s.key,s)}}return function(e,t,i){return t&amp;&amp;defineProperties(e.prototype,t),i&amp;&amp;defineProperties(e,i),e}}(),d=function get(e,t,i){null===e&amp;&amp;(e=Function.prototype);var s=Object.getOwnPropertyDescriptor(e,t);if(void 0===s){var d=Object.getPrototypeOf(e);return null===d?void 0:get(d,t,i)}if("value"in s)return s.value;var h=s.get;return void 0!==h?h.call(i):void 0};function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _possibleConstructorReturn(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&amp;&amp;"function"!=typeof t?e:t}var h=i(828),u="moz-chunked-arraybuffer",c=function(e){function MozChunkedBackend(){return _classCallCheck(this,MozChunkedBackend),_possibleConstructorReturn(this,(MozChunkedBackend.__proto__||Object.getPrototypeOf(MozChunkedBackend)).apply(this,arguments))}return function(e,t){if("function"!=typeof t&amp;&amp;null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&amp;&amp;t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&amp;&amp;(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(MozChunkedBackend,e),s(MozChunkedBackend,[{key:"initXHR",value:function(){d(MozChunkedBackend.prototype.__proto__||Object.getPrototypeOf(MozChunkedBackend.prototype),"initXHR",this).call(this),this.xhr.responseType=u}},{key:"onXHRProgress",value:function(){var e=this.xhr.response;this.bytesRead+=e.byteLength,this.emit("buffer",e)}}]),MozChunkedBackend}(h);c.supported=function(){try{var e=new XMLHttpRequest;return e.responseType=u,e.responseType===u}catch(e){return!1}},e.exports=c},503:e=&gt;{var t=function(){function defineProperties(e,t){for(var i=0;i&lt;t.length;i++){var s=t[i];s.enumerable=s.enumerable||!1,s.configurable=!0,"value"in s&amp;&amp;(s.writable=!0),Object.defineProperty(e,s.key,s)}}return function(e,t,i){return t&amp;&amp;defineProperties(e.prototype,t),i&amp;&amp;defineProperties(e,i),e}}();function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var i=function(){function CacheItem(){var e=arguments.length&gt;0&amp;&amp;void 0!==arguments[0]?arguments[0]:{},t=e.buffer,i=void 0===t?void 0:t,s=e.string,d=void 0===s?void 0:s,h=e.start,u=void 0===h?0:h,c=e.end,l=void 0===c?u+(i?i.byteLength:d?d.length:0):c,f=e.prev,_=void 0===f?null:f,p=e.next,m=void 0===p?null:p,g=e.eof,v=void 0!==g&amp;&amp;g,y=e.empty,b=void 0===y?!(i||d):y,T=e.timestamp,k=void 0===T?Date.now():T;_classCallCheck(this,CacheItem),this.start=u,this.end=l,this.prev=_,this.next=m,this.eof=v,this.empty=b,this.timestamp=k,this.buffer=i,this.string=d,Object.defineProperty(this,"length",{get:function(){return this.end-this.start}})}return t(CacheItem,[{key:"contains",value:function(e){return e&gt;=this.start&amp;&amp;(e&lt;this.end||this.eof)}},{key:"readBytes",value:function(e,t,i){var s=t-this.start,d=i-t;if(this.buffer){var h=new Uint8Array(this.buffer,s,d);e.set(h)}else{if(!this.string)throw new Error("invalid state");for(var u=this.string,c=0;c&lt;d;c++)e[c]=u.charCodeAt(s+c)}this.timestamp=Date.now()}},{key:"split",value:function(e){if(!this.empty||!this.contains(e))throw new Error("invalid split");var t=new CacheItem({start:this.start,end:e}),i=new CacheItem({start:e,end:this.eof?e:this.end,eof:this.eof});return t.next=i,i.prev=t,[t,i]}},{key:"first",value:function(e){for(var t=this;t;t=t.next)if(e(t))return t;return null}},{key:"last",value:function(e){for(var last=null,t=this;t&amp;&amp;e(t);t=t.next)last=t;return last}}]),CacheItem}();e.exports=i},91:(e,t,i)=&gt;{var s=function(){function defineProperties(e,t){for(var i=0;i&lt;t.length;i++){var s=t[i];s.enumerable=s.enumerable||!1,s.configurable=!0,"value"in s&amp;&amp;(s.writable=!0),Object.defineProperty(e,s.key,s)}}return function(e,t,i){return t&amp;&amp;defineProperties(e.prototype,t),i&amp;&amp;defineProperties(e,i),e}}();function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var d=i(503),h=function(){function CachePool(){var e=arguments.length&gt;0&amp;&amp;void 0!==arguments[0]?arguments[0]:{},t=e.cacheSize,i=void 0===t?0:t;_classCallCheck(this,CachePool);var s=new d({eof:!0});this.head=s,this.tail=s,this.readOffset=0,this.readCursor=s,this.writeOffset=0,this.writeCursor=s,this.cacheSize=i}return s(CachePool,[{key:"bytesReadable",value:function(){var e=arguments.length&gt;0&amp;&amp;void 0!==arguments[0]?arguments[0]:1/0,t=this.readOffset,i=this.readCursor,s=i.last((function(i){return!i.empty&amp;&amp;i.start&lt;=t+e}));return s?Math.min(e,s.end-t):0}},{key:"bytesWritable",value:function(){var e=arguments.length&gt;0&amp;&amp;void 0!==arguments[0]?arguments[0]:1/0,t=this.writeOffset,i=this.writeCursor;if(i.eof)return e;var s=i.last((function(i){return i.empty&amp;&amp;i.start&lt;=t+e}));return s?Math.min(e,s.end-t):0}},{key:"seekRead",value:function(e){var t=this.head.first((function(t){return t.contains(e)}));if(!t)throw new Error("read seek out of range");this.readOffset=e,this.readCursor=t}},{key:"seekWrite",value:function(e){var t=this.head.first((function(t){return t.contains(e)}));if(!t)throw new Error("write seek out of range");this.writeOffset=e,this.writeCursor=t}},{key:"readBytes",value:function(e){for(var t=e.byteLength,i=this.bytesReadable(t),s=this.readOffset,d=s+i,h=s,u=this.readCursor;u&amp;&amp;!u.empty&amp;&amp;!(u.start&gt;=d);u=u.next){var c=Math.min(d,u.end),l=e.subarray(h-s,c-s);u.readBytes(l,h,c),h=c}return this.readOffset=h,this.readCursor=this.readCursor.first((function(e){return e.contains(h)})),i}},{key:"write",value:function(e){var t=this.bufferItem(e),i=this.writeCursor;if(!i.empty)throw new Error("write cursor not empty");if(!i.contains(t.end)&amp;&amp;i.end!==t.end)throw new Error("write cursor too small");i.start&lt;t.start&amp;&amp;(this.split(i,t.start),i=this.writeCursor),(t.end&lt;i.end||i.eof)&amp;&amp;(this.split(i,t.end),i=this.writeCursor),this.splice(i,i,t,t),this.writeOffset=t.end,this.writeCursor=t.next,this.gc()}},{key:"bufferItem",value:function(e){if(e instanceof ArrayBuffer)return new d({start:this.writeOffset,end:this.writeOffset+e.byteLength,buffer:e});if("string"==typeof e)return new d({start:this.writeOffset,end:this.writeOffset+e.length,string:e});throw new Error("invalid input to write")}},{key:"split",value:function(e,t){var i=e.split(t);this.splice(e,e,i[0],i[1])}},{key:"ranges",value:function(){for(var ranges=[],e=this.head;e;e=e.next)if(!e.empty){var t=e;e=e.last((function(e){return!e.empty})),ranges.push([t.start,e.end])}return ranges}},{key:"gc",value:function(){for(var e=0,t=[],i=this.head;i;i=i.next)i.empty||(e+=i.length,(i.end&lt;this.readOffset||i.start&gt;this.readOffset+this.chunkSize)&amp;&amp;t.push(i));if(e&gt;this.cacheSize){t.sort((function(e,t){return e.timestamp-t.timestamp}));for(var s=0;s&lt;t.length;s++){var d=t[s];if(e&lt;=this.cacheSize)break;this.remove(d),e-=d.length}}}},{key:"remove",value:function(e){var t=new d({start:e.start,end:e.end});this.splice(e,e,t,t),(e=t).prev&amp;&amp;e.prev.empty&amp;&amp;(e=this.consolidate(e.prev)),e.next&amp;&amp;e.next.empty&amp;&amp;!e.next.eof&amp;&amp;(e=this.consolidate(e)),0===e.start&amp;&amp;(this.head=e)}},{key:"consolidate",value:function(e){var t=e.last((function(e){return e.empty&amp;&amp;!e.eof})),i=new d({start:e.start,end:t.end});return this.splice(e,t,i,i),i}},{key:"splice",value:function(e,t,i,s){var d=this;if(e.start!==i.start)throw new Error("invalid splice head");if(!(t.end===s.end||t.eof&amp;&amp;s.eof))throw new Error("invalid splice tail");var h=e.prev,u=t.next;e.prev=null,t.next=null,h&amp;&amp;(h.next=i,i.prev=h),u&amp;&amp;(u.prev=s,s.next=u),e===this.head&amp;&amp;(this.head=i),t===this.tail&amp;&amp;(this.tail=s),this.readCursor=this.head.first((function(e){return e.contains(d.readOffset)})),this.writeCursor=this.head.first((function(e){return e.contains(d.writeOffset)}))}},{key:"eof",get:function(){return this.readCursor.eof}}]),CachePool}();e.exports=h},814:(e,t,i)=&gt;{e.exports=i(91)},566:e=&gt;{var t=function(){function defineProperties(e,t){for(var i=0;i&lt;t.length;i++){var s=t[i];s.enumerable=s.enumerable||!1,s.configurable=!0,"value"in s&amp;&amp;(s.writable=!0),Object.defineProperty(e,s.key,s)}}return function(e,t,i){return t&amp;&amp;defineProperties(e.prototype,t),i&amp;&amp;defineProperties(e,i),e}}(),i=function(){function TinyEvents(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,TinyEvents),this._e={}}return t(TinyEvents,[{key:"on",value:function(e,t){(this._e[e]||(this._e[e]=[])).push(t)}},{key:"off",value:function(e,t){var i=this._e[e]||[],s=i.indexOf(t);t&gt;=0&amp;&amp;i.splice(s,1)}},{key:"emit",value:function(e,t){(this._e[e]||[]).slice().forEach((function(e){return e(t)}))}}]),TinyEvents}();e.exports=i},936:(e,t,i)=&gt;{var s=function(){function defineProperties(e,t){for(var i=0;i&lt;t.length;i++){var s=t[i];s.enumerable=s.enumerable||!1,s.configurable=!0,"value"in s&amp;&amp;(s.writable=!0),Object.defineProperty(e,s.key,s)}}return function(e,t,i){return t&amp;&amp;defineProperties(e.prototype,t),i&amp;&amp;defineProperties(e,i),e}}();i(566);var d=i(814),h=i(761),u=function(){function StreamFile(e){var t=e.url,i=void 0===t?"":t,s=e.chunkSize,h=void 0===s?1048576:s,u=e.cacheSize,c=void 0===u?0:u,l=e.progressive,f=void 0===l||l;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,StreamFile),this.length=-1,this.loaded=!1,this.loading=!1,this.seekable=!1,this.buffering=!1,this.seeking=!1,this.progressive=f,Object.defineProperties(this,{offset:{get:function(){return this._cache.readOffset}},eof:{get:function(){return this.length===this._cache.readOffset}}}),this.url=i,this.headers={},this._cache=new d({cacheSize:c}),this._backend=null,this._cachever=0,this._chunkSize=h}return s(StreamFile,[{key:"load",value:function(){var e=this;return new Promise((function(t,i){if(e.loading)throw new Error("cannot load when loading");if(e.loaded)throw new Error("cannot load when loaded");e.loading=!0,e._openBackend().then((function(i){e.seekable=i.seekable,e.headers=i.headers,e.length=i.length,e.loaded=!0,e.loading=!1,t()})).catch((function(t){"AbortError"!==t.name&amp;&amp;(e.loading=!1),i(t)}))}))}},{key:"_openBackend",value:function(){var e=this;return new Promise((function(t,i){if(e._backend)t(e._backend);else if(e.eof)i(new Error("cannot open at end of file"));else{var s=e._cache,d=e._chunkSize,u=s.bytesReadable(d),c=s.readOffset+u;if(s.seekWrite(c),e.length&gt;=0&amp;&amp;c&gt;=e.length)return void t(null);var l=e._clampToLength(s.writeOffset+s.bytesWritable(d))-s.writeOffset;if(0===l)t(null);else{var f=e._backend=new h({url:e.url,offset:e._cache.writeOffset,length:l,cachever:e._cachever,progressive:e.progressive}),_=null,p=function(){f!==e._backend?(_(),i(new Error("invalid state"))):(f.on("buffer",(function(t){f===e._backend&amp;&amp;e._cache.write(t)})),f.on("done",(function(){f===e._backend&amp;&amp;(-1===e.length&amp;&amp;(e.length=e._backend.offset+e._backend.bytesRead),e._backend=null)})),t(f))},m=function(t){f!==e._backend?i(new Error("invalid state")):(e._backend=null,i(t))};_=function(){f.off("open",p),f.off("error",m)},f.on("open",p),f.on("error",m),f.on("cachever",(function(){e._cachever++})),f.load()}}}))}},{key:"_readAhead",value:function(){var e=this;return new Promise((function(t,i){e._backend||e.eof?t():e._openBackend().then((function(){t()})).catch((function(e){i(e)}))}))}},{key:"seek",value:function(e){var t=this;return new Promise((function(i,s){if(!t.loaded||t.buffering||t.seeking)throw new Error("invalid state");if(e!==(0|e)||e&lt;0)throw new Error("invalid input");if(t.length&gt;=0&amp;&amp;e&gt;t.length)throw new Error("seek past end of file");if(!t.seekable)throw new Error("seek on non-seekable stream");t._backend&amp;&amp;t.abort(),t._cache.seekRead(e),t._cache.seekWrite(e),t._readAhead().then(i).catch(s)}))}},{key:"read",value:function(e){var t=this;return this.buffer(e).then((function(e){return t.readSync(e)}))}},{key:"readSync",value:function(e){var t=this.bytesAvailable(e),i=new Uint8Array(t);if(this.readBytes(i)!==t)throw new Error("failed to read expected data");return i.buffer}},{key:"readBytes",value:function(e){if(!this.loaded||this.buffering||this.seeking)throw new Error("invalid state");if(!(e instanceof Uint8Array))throw new Error("invalid input");var t=this._cache.readBytes(e);return this._readAhead(),t}},{key:"buffer",value:function(e){var t=this;return new Promise((function(i,s){if(!t.loaded||t.buffering||t.seeking)throw new Error("invalid state");if(e!==(0|e)||e&lt;0)throw new Error("invalid input");var d=t._clampToLength(t.offset+e),h=d-t.offset,u=t.bytesAvailable(h);u&gt;=h?i(u):(t.buffering=!0,t._openBackend().then((function(i){return i?i.bufferToOffset(d).then((function(){return t.buffering=!1,t.buffer(e)})):Promise.resolve(u)})).then((function(e){t.buffering=!1,i(e)})).catch((function(e){"AbortError"!==e.name&amp;&amp;(t.buffering=!1),s(e)})))}))}},{key:"bytesAvailable",value:function(){var e=arguments.length&gt;0&amp;&amp;void 0!==arguments[0]?arguments[0]:1/0;return this._cache.bytesReadable(e)}},{key:"abort",value:function(){this.loading&amp;&amp;(this.loading=!1),this.buffering&amp;&amp;(this.buffering=!1),this.seeking&amp;&amp;(this.seeking=!1),this._backend&amp;&amp;(this._backend.abort(),this._backend=null)}},{key:"getBufferedRanges",value:function(){return this._cache.ranges()}},{key:"_clampToLength",value:function(e){return this.length&lt;0?e:Math.min(this.length,e)}}]),StreamFile}();e.exports=u},826:e=&gt;{e.exports={vertex:"precision lowp float;\n\nattribute vec2 aPosition;\nattribute vec2 aLumaPosition;\nattribute vec2 aChromaPosition;\nvarying vec2 vLumaPosition;\nvarying vec2 vChromaPosition;\nvoid main() {\n    gl_Position = vec4(aPosition, 0, 1);\n    vLumaPosition = aLumaPosition;\n    vChromaPosition = aChromaPosition;\n}\n",fragment:"// inspired by https://github.com/mbebenita/Broadway/blob/master/Player/canvas.js\n\nprecision lowp float;\n\nuniform sampler2D uTextureY;\nuniform sampler2D uTextureCb;\nuniform sampler2D uTextureCr;\nvarying vec2 vLumaPosition;\nvarying vec2 vChromaPosition;\nvoid main() {\n   // Y, Cb, and Cr planes are uploaded as LUMINANCE textures.\n   float fY = texture2D(uTextureY, vLumaPosition).x;\n   float fCb = texture2D(uTextureCb, vChromaPosition).x;\n   float fCr = texture2D(uTextureCr, vChromaPosition).x;\n\n   // Premultipy the Y...\n   float fYmul = fY * 1.1643828125;\n\n   // And convert that to RGB!\n   gl_FragColor = vec4(\n     fYmul + 1.59602734375 * fCr - 0.87078515625,\n     fYmul - 0.39176171875 * fCb - 0.81296875 * fCr + 0.52959375,\n     fYmul + 2.017234375   * fCb - 1.081390625,\n     1\n   );\n}\n",vertexStripe:"precision lowp float;\n\nattribute vec2 aPosition;\nattribute vec2 aTexturePosition;\nvarying vec2 vTexturePosition;\n\nvoid main() {\n    gl_Position = vec4(aPosition, 0, 1);\n    vTexturePosition = aTexturePosition;\n}\n",fragmentStripe:"// extra 'stripe' texture fiddling to work around IE 11's poor performance on gl.LUMINANCE and gl.ALPHA textures\n\nprecision lowp float;\n\nuniform sampler2D uStripe;\nuniform sampler2D uTexture;\nvarying vec2 vTexturePosition;\nvoid main() {\n   // Y, Cb, and Cr planes are mapped into a pseudo-RGBA texture\n   // so we can upload them without expanding the bytes on IE 11\n   // which doesn't allow LUMINANCE or ALPHA textures\n   // The stripe textures mark which channel to keep for each pixel.\n   // Each texture extraction will contain the relevant value in one\n   // channel only.\n\n   float fLuminance = dot(\n      texture2D(uStripe, vTexturePosition),\n      texture2D(uTexture, vTexturePosition)\n   );\n\n   gl_FragColor = vec4(fLuminance, fLuminance, fLuminance, 1);\n}\n"}},487:e=&gt;{!function(){function FrameSink(e,t){throw new Error("abstract")}FrameSink.prototype.drawFrame=function(e){throw new Error("abstract")},FrameSink.prototype.clear=function(){throw new Error("abstract")},e.exports=FrameSink}()},926:(e,t,i)=&gt;{!function(){var t=i(487),s=i(627);function SoftwareFrameSink(e){var t=this,i=e.getContext("2d"),d=null,h=null,u=null;return t.drawFrame=function(t){var c=t.format;e.width===c.displayWidth&amp;&amp;e.height===c.displayHeight||(e.width=c.displayWidth,e.height=c.displayHeight),null!==d&amp;&amp;d.width==c.width&amp;&amp;d.height==c.height||function(e,t){for(var s=(d=i.createImageData(e,t)).data,h=e*t*4,u=0;u&lt;h;u+=4)s[u+3]=255}(c.width,c.height),s.convertYCbCr(t,d.data);var l,f=c.cropWidth!=c.displayWidth||c.cropHeight!=c.displayHeight;f?(h||function(e,t){(h=document.createElement("canvas")).width=e,h.height=t,u=h.getContext("2d")}(c.cropWidth,c.cropHeight),l=u):l=i,l.putImageData(d,-c.cropLeft,-c.cropTop,c.cropLeft,c.cropTop,c.cropWidth,c.cropHeight),f&amp;&amp;i.drawImage(h,0,0,c.displayWidth,c.displayHeight)},t.clear=function(){i.clearRect(0,0,e.width,e.height)},t}SoftwareFrameSink.prototype=Object.create(t.prototype),e.exports=SoftwareFrameSink}()},895:(e,t,i)=&gt;{!function(){var t=i(487),s=i(826);function WebGLFrameSink(e){var t,i,d=this,h=WebGLFrameSink.contextForCanvas(e);if(null===h)throw new Error("WebGL unavailable");function compileShader(e,t){var i=h.createShader(e);if(h.shaderSource(i,t),h.compileShader(i),!h.getShaderParameter(i,h.COMPILE_STATUS)){var s=h.getShaderInfoLog(i);throw h.deleteShader(i),new Error("GL shader compilation for "+e+" failed: "+s)}return i}var u,c,l,f,_,p,m,g,v,y,b=new Float32Array([-1,-1,1,-1,-1,1,-1,1,1,-1,1,1]),T={},k={},P={};function createOrReuseTexture(e){return T[e]||(T[e]=h.createTexture()),T[e]}function uploadTexture(e,t,i,s){var d=createOrReuseTexture(e);if(h.activeTexture(h.TEXTURE0),WebGLFrameSink.stripe){var u=!T[e+"_temp"],c=createOrReuseTexture(e+"_temp");h.bindTexture(h.TEXTURE_2D,c),u?(h.texParameteri(h.TEXTURE_2D,h.TEXTURE_WRAP_S,h.CLAMP_TO_EDGE),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_WRAP_T,h.CLAMP_TO_EDGE),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_MIN_FILTER,h.NEAREST),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_MAG_FILTER,h.NEAREST),h.texImage2D(h.TEXTURE_2D,0,h.RGBA,t/4,i,0,h.RGBA,h.UNSIGNED_BYTE,s)):h.texSubImage2D(h.TEXTURE_2D,0,0,0,t/4,i,h.RGBA,h.UNSIGNED_BYTE,s);var l=T[e+"_stripe"],f=!l;f&amp;&amp;(l=createOrReuseTexture(e+"_stripe")),h.bindTexture(h.TEXTURE_2D,l),f&amp;&amp;(h.texParameteri(h.TEXTURE_2D,h.TEXTURE_WRAP_S,h.CLAMP_TO_EDGE),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_WRAP_T,h.CLAMP_TO_EDGE),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_MIN_FILTER,h.NEAREST),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_MAG_FILTER,h.NEAREST),h.texImage2D(h.TEXTURE_2D,0,h.RGBA,t,1,0,h.RGBA,h.UNSIGNED_BYTE,function(e){if(P[e])return P[e];for(var t=e,i=new Uint32Array(t),s=0;s&lt;t;s+=4)i[s]=255,i[s+1]=65280,i[s+2]=16711680,i[s+3]=4278190080;return P[e]=new Uint8Array(i.buffer)}(t)))}else h.bindTexture(h.TEXTURE_2D,d),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_WRAP_S,h.CLAMP_TO_EDGE),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_WRAP_T,h.CLAMP_TO_EDGE),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_MIN_FILTER,h.LINEAR),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_MAG_FILTER,h.LINEAR),h.texImage2D(h.TEXTURE_2D,0,h.LUMINANCE,t,i,0,h.LUMINANCE,h.UNSIGNED_BYTE,s)}function unpackTexture(e,t,s){var d=T[e];h.useProgram(i);var m=k[e];m||(h.activeTexture(h.TEXTURE0),h.bindTexture(h.TEXTURE_2D,d),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_WRAP_S,h.CLAMP_TO_EDGE),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_WRAP_T,h.CLAMP_TO_EDGE),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_MIN_FILTER,h.LINEAR),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_MAG_FILTER,h.LINEAR),h.texImage2D(h.TEXTURE_2D,0,h.RGBA,t,s,0,h.RGBA,h.UNSIGNED_BYTE,null),m=k[e]=h.createFramebuffer()),h.bindFramebuffer(h.FRAMEBUFFER,m),h.framebufferTexture2D(h.FRAMEBUFFER,h.COLOR_ATTACHMENT0,h.TEXTURE_2D,d,0);var g=T[e+"_temp"];h.activeTexture(h.TEXTURE1),h.bindTexture(h.TEXTURE_2D,g),h.uniform1i(p,1);var v=T[e+"_stripe"];h.activeTexture(h.TEXTURE2),h.bindTexture(h.TEXTURE_2D,v),h.uniform1i(_,2),h.bindBuffer(h.ARRAY_BUFFER,u),h.enableVertexAttribArray(c),h.vertexAttribPointer(c,2,h.FLOAT,!1,0,0),h.bindBuffer(h.ARRAY_BUFFER,l),h.enableVertexAttribArray(f),h.vertexAttribPointer(f,2,h.FLOAT,!1,0,0),h.viewport(0,0,t,s),h.drawArrays(h.TRIANGLES,0,b.length/2),h.bindFramebuffer(h.FRAMEBUFFER,null)}function attachTexture(e,i,s){h.activeTexture(i),h.bindTexture(h.TEXTURE_2D,T[e]),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_WRAP_S,h.CLAMP_TO_EDGE),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_WRAP_T,h.CLAMP_TO_EDGE),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_MIN_FILTER,h.LINEAR),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_MAG_FILTER,h.LINEAR),h.uniform1i(h.getUniformLocation(t,e),s)}function initProgram(e,t){var i=compileShader(h.VERTEX_SHADER,e),s=compileShader(h.FRAGMENT_SHADER,t),d=h.createProgram();if(h.attachShader(d,i),h.attachShader(d,s),h.linkProgram(d),!h.getProgramParameter(d,h.LINK_STATUS)){var u=h.getProgramInfoLog(d);throw h.deleteProgram(d),new Error("GL program linking failed: "+u)}return d}return d.drawFrame=function(T){var k=T.format,P=!t||e.width!==k.displayWidth||e.height!==k.displayHeight;if(P&amp;&amp;(e.width=k.displayWidth,e.height=k.displayHeight,d.clear()),t||function(){if(WebGLFrameSink.stripe){i=initProgram(s.vertexStripe,s.fragmentStripe),h.getAttribLocation(i,"aPosition"),l=h.createBuffer();var e=new Float32Array([0,0,1,0,0,1,0,1,1,0,1,1]);h.bindBuffer(h.ARRAY_BUFFER,l),h.bufferData(h.ARRAY_BUFFER,e,h.STATIC_DRAW),f=h.getAttribLocation(i,"aTexturePosition"),_=h.getUniformLocation(i,"uStripe"),p=h.getUniformLocation(i,"uTexture")}t=initProgram(s.vertex,s.fragment),u=h.createBuffer(),h.bindBuffer(h.ARRAY_BUFFER,u),h.bufferData(h.ARRAY_BUFFER,b,h.STATIC_DRAW),c=h.getAttribLocation(t,"aPosition"),m=h.createBuffer(),g=h.getAttribLocation(t,"aLumaPosition"),v=h.createBuffer(),y=h.getAttribLocation(t,"aChromaPosition")}(),P){var setupTexturePosition=function(e,t,i){var s=k.cropLeft/i,d=(k.cropLeft+k.cropWidth)/i,u=(k.cropTop+k.cropHeight)/k.height,c=k.cropTop/k.height,l=new Float32Array([s,u,d,u,s,c,s,c,d,u,d,c]);h.bindBuffer(h.ARRAY_BUFFER,e),h.bufferData(h.ARRAY_BUFFER,l,h.STATIC_DRAW)};setupTexturePosition(m,0,T.y.stride),setupTexturePosition(v,0,T.u.stride*k.width/k.chromaWidth)}uploadTexture("uTextureY",T.y.stride,k.height,T.y.bytes),uploadTexture("uTextureCb",T.u.stride,k.chromaHeight,T.u.bytes),uploadTexture("uTextureCr",T.v.stride,k.chromaHeight,T.v.bytes),WebGLFrameSink.stripe&amp;&amp;(unpackTexture("uTextureY",T.y.stride,k.height),unpackTexture("uTextureCb",T.u.stride,k.chromaHeight),unpackTexture("uTextureCr",T.v.stride,k.chromaHeight)),h.useProgram(t),h.viewport(0,0,e.width,e.height),attachTexture("uTextureY",h.TEXTURE0,0),attachTexture("uTextureCb",h.TEXTURE1,1),attachTexture("uTextureCr",h.TEXTURE2,2),h.bindBuffer(h.ARRAY_BUFFER,u),h.enableVertexAttribArray(c),h.vertexAttribPointer(c,2,h.FLOAT,!1,0,0),h.bindBuffer(h.ARRAY_BUFFER,m),h.enableVertexAttribArray(g),h.vertexAttribPointer(g,2,h.FLOAT,!1,0,0),h.bindBuffer(h.ARRAY_BUFFER,v),h.enableVertexAttribArray(y),h.vertexAttribPointer(y,2,h.FLOAT,!1,0,0),h.drawArrays(h.TRIANGLES,0,b.length/2)},d.clear=function(){h.viewport(0,0,e.width,e.height),h.clearColor(0,0,0,0),h.clear(h.COLOR_BUFFER_BIT)},d.clear(),d}WebGLFrameSink.stripe=-1!==navigator.userAgent.indexOf("Windows"),WebGLFrameSink.contextForCanvas=function(e){var t={preferLowPowerToHighPerformance:!0,powerPreference:"low-power",failIfMajorPerformanceCaveat:!0,preserveDrawingBuffer:!0};return e.getContext("webgl",t)||e.getContext("experimental-webgl",t)},WebGLFrameSink.isAvailable=function(){var e,t=document.createElement("canvas");t.width=1,t.height=1;try{e=WebGLFrameSink.contextForCanvas(t)}catch(e){return!1}if(e){var i=e.TEXTURE0,s=e.createTexture(),d=new Uint8Array(16),h=WebGLFrameSink.stripe?1:4,u=WebGLFrameSink.stripe?e.RGBA:e.LUMINANCE,c=WebGLFrameSink.stripe?e.NEAREST:e.LINEAR;return e.activeTexture(i),e.bindTexture(e.TEXTURE_2D,s),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,c),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,c),e.texImage2D(e.TEXTURE_2D,0,u,h,4,0,u,e.UNSIGNED_BYTE,d),!e.getError()}return!1},WebGLFrameSink.prototype=Object.create(t.prototype),e.exports=WebGLFrameSink}()},627:(e,t,i)=&gt;{!function(){var t=i(877);e.exports={convertYCbCr:function(e,i){var s=0|e.format.width,d=0|e.format.height,h=0|t(e.format.width/e.format.chromaWidth),u=0|t(e.format.height/e.format.chromaHeight),c=e.y.bytes,l=e.u.bytes,f=e.v.bytes,_=0|e.y.stride,p=0|e.u.stride,m=0|e.v.stride,g=s&lt;&lt;2,v=0,y=0,b=0,T=0,k=0,P=0,w=0,E=0,x=0,A=0,R=0,O=0,F=0,S=0,C=0,B=0,D=0,M=0;if(1==h&amp;&amp;1==u)for(w=0,E=g,M=0,B=0;B&lt;d;B+=2){for(b=(y=B*_|0)+_|0,T=M*p|0,k=M*m|0,C=0;C&lt;s;C+=2)x=0|l[T++],O=(409*(A=0|f[k++])|0)-57088|0,F=(100*x|0)+(208*A|0)-34816|0,S=(516*x|0)-70912|0,R=298*c[y++]|0,i[w]=R+O&gt;&gt;8,i[w+1]=R-F&gt;&gt;8,i[w+2]=R+S&gt;&gt;8,w+=4,R=298*c[y++]|0,i[w]=R+O&gt;&gt;8,i[w+1]=R-F&gt;&gt;8,i[w+2]=R+S&gt;&gt;8,w+=4,R=298*c[b++]|0,i[E]=R+O&gt;&gt;8,i[E+1]=R-F&gt;&gt;8,i[E+2]=R+S&gt;&gt;8,E+=4,R=298*c[b++]|0,i[E]=R+O&gt;&gt;8,i[E+1]=R-F&gt;&gt;8,i[E+2]=R+S&gt;&gt;8,E+=4;w+=g,E+=g,M++}else for(P=0,B=0;B&lt;d;B++)for(D=0,v=B*_|0,T=(M=B&gt;&gt;u)*p|0,k=M*m|0,C=0;C&lt;s;C++)x=0|l[T+(D=C&gt;&gt;h)],O=(409*(A=0|f[k+D])|0)-57088|0,F=(100*x|0)+(208*A|0)-34816|0,S=(516*x|0)-70912|0,R=298*c[v++]|0,i[P]=R+O&gt;&gt;8,i[P+1]=R-F&gt;&gt;8,i[P+2]=R+S&gt;&gt;8,P+=4}}}()},877:e=&gt;{e.exports=function(e){for(var t=0,i=e&gt;&gt;1;0!=i;)i&gt;&gt;=1,t++;if(e!==1&lt;&lt;t)throw"chroma plane dimensions must be power of 2 ratio to luma plane dimensions; got "+e;return t}},731:(e,t,i)=&gt;{!function(){var t=i(487),s=i(926),d=i(895),h={FrameSink:t,SoftwareFrameSink:s,WebGLFrameSink:d,attach:function(e,t){return("webGL"in(t=t||{})?t.webGL:d.isAvailable())?new d(e,t):new s(e,t)}};e.exports=h}()}},t={};function __webpack_require__(i){var s=t[i];if(void 0!==s)return s.exports;var d=t[i]={exports:{}};return e[i](d,d.exports,__webpack_require__),d.exports}var i={};return(()=&gt;{var e=i,t=__webpack_require__(318);Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"OGVCompat",{enumerable:!0,get:function(){return s.default}}),Object.defineProperty(e,"OGVLoader",{enumerable:!0,get:function(){return d.default}}),Object.defineProperty(e,"OGVMediaError",{enumerable:!0,get:function(){return h.default}}),Object.defineProperty(e,"OGVMediaType",{enumerable:!0,get:function(){return u.default}}),Object.defineProperty(e,"OGVPlayer",{enumerable:!0,get:function(){return c.default}}),Object.defineProperty(e,"OGVTimeRanges",{enumerable:!0,get:function(){return l.default}}),e.OGVVersion=void 0;var s=t(__webpack_require__(523)),d=t(__webpack_require__(964)),h=t(__webpack_require__(759)),u=t(__webpack_require__(278)),c=t(__webpack_require__(869)),l=t(__webpack_require__(168)),f="1.8.4-20210702161914-bd3a07f";e.OGVVersion=f,"object"==typeof window&amp;&amp;(window.OGVCompat=s.default,window.OGVLoader=d.default,window.OGVMediaError=h.default,window.OGVMediaType=u.default,window.OGVTimeRanges=l.default,window.OGVPlayer=c.default,window.OGVVersion=f)})(),i})()},"object"==typeof exports&amp;&amp;"object"==typeof module?module.exports=t():"function"==typeof define&amp;&amp;define.amd?define("media_videojs/local/ogv/ogv",[],t):"object"==typeof exports?exports.ogvjs=t():e.ogvjs=t();
define("media_videojs/loader",["exports","core/ajax","core/config","core_filters/events","core/localstorage","core/notification","jquery"],(function(_exports,_ajax,_config,_events,_localstorage,_notification,_jquery){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.setUp=void 0,_ajax=_interopRequireDefault(_ajax),_config=_interopRequireDefault(_config),_localstorage=_interopRequireDefault(_localstorage),_notification=_interopRequireDefault(_notification),_jquery=_interopRequireDefault(_jquery);var _systemImportTransformerGlobalIdentifier="undefined"!=typeof window?window:"undefined"!=typeof self?self:"undefined"!=typeof global?global:{};function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}let firstLoad,language,langStringCache;_exports.setUp=lang=&gt;{language=lang,firstLoad=!0,notifyVideoJS({detail:{nodes:document.body}}),document.addEventListener(_events.eventTypes.filterContentUpdated,notifyVideoJS)};const notifyVideoJS=e=&gt;{const nodes=(0,_jquery.default)(e.detail.nodes),langStrings=getLanguageJson();nodes.find(".mediaplugin_videojs").addBack(".mediaplugin_videojs").find("audio, video").each(((index,element)=&gt;{const id=(0,_jquery.default)(element).attr("id"),config=(0,_jquery.default)(element).data("setup-lazy"),modulePromises=["function"==typeof _systemImportTransformerGlobalIdentifier.define&amp;&amp;_systemImportTransformerGlobalIdentifier.define.amd?new Promise((function(resolve,reject){_systemImportTransformerGlobalIdentifier.require(["media_videojs/video-lazy"],resolve,reject)})):"undefined"!=typeof module&amp;&amp;module.exports&amp;&amp;"undefined"!=typeof require||"undefined"!=typeof module&amp;&amp;module.component&amp;&amp;_systemImportTransformerGlobalIdentifier.require&amp;&amp;"component"===_systemImportTransformerGlobalIdentifier.require.loader?Promise.resolve(require("media_videojs/video-lazy")):Promise.resolve(_systemImportTransformerGlobalIdentifier["media_videojs/video-lazy"])];config.techOrder&amp;&amp;-1!==config.techOrder.indexOf("youtube")&amp;&amp;modulePromises.push("function"==typeof _systemImportTransformerGlobalIdentifier.define&amp;&amp;_systemImportTransformerGlobalIdentifier.define.amd?new Promise((function(resolve,reject){_systemImportTransformerGlobalIdentifier.require(["media_videojs/Youtube-lazy"],resolve,reject)})):"undefined"!=typeof module&amp;&amp;module.exports&amp;&amp;"undefined"!=typeof require||"undefined"!=typeof module&amp;&amp;module.component&amp;&amp;_systemImportTransformerGlobalIdentifier.require&amp;&amp;"component"===_systemImportTransformerGlobalIdentifier.require.loader?Promise.resolve(require("media_videojs/Youtube-lazy")):Promise.resolve(_systemImportTransformerGlobalIdentifier["media_videojs/Youtube-lazy"])),config.techOrder&amp;&amp;-1!==config.techOrder.indexOf("OgvJS")&amp;&amp;(config.ogvjs={worker:!0,wasm:!0,base:_config.default.wwwroot+"/media/player/videojs/ogvloader.php/"+_config.default.jsrev+"/"},modulePromises.push("function"==typeof _systemImportTransformerGlobalIdentifier.define&amp;&amp;_systemImportTransformerGlobalIdentifier.define.amd?new Promise((function(resolve,reject){_systemImportTransformerGlobalIdentifier.require(["media_videojs/videojs-ogvjs-lazy"],resolve,reject)})):"undefined"!=typeof module&amp;&amp;module.exports&amp;&amp;"undefined"!=typeof require||"undefined"!=typeof module&amp;&amp;module.component&amp;&amp;_systemImportTransformerGlobalIdentifier.require&amp;&amp;"component"===_systemImportTransformerGlobalIdentifier.require.loader?Promise.resolve(require("media_videojs/videojs-ogvjs-lazy")):Promise.resolve(_systemImportTransformerGlobalIdentifier["media_videojs/videojs-ogvjs-lazy"]))),Promise.all([langStrings,...modulePromises]).then((_ref=&gt;{let[langJson,videojs]=_ref;firstLoad&amp;&amp;(videojs.addLanguage(language,langJson),firstLoad=!1),videojs(id,config)})).catch(_notification.default.exception)}))},getLanguageJson=()=&gt;{if(langStringCache)return Promise.resolve(langStringCache);const cacheKey="media_videojs/".concat(language),rawCacheContent=_localstorage.default.get(cacheKey);if(rawCacheContent){const cacheContent=JSON.parse(rawCacheContent);return langStringCache=cacheContent,Promise.resolve(langStringCache)}const request={methodname:"media_videojs_get_language",args:{lang:language}};return _ajax.default.call([request])[0].then((langStringData=&gt;(_localstorage.default.set(cacheKey,langStringData),langStringData))).then((result=&gt;JSON.parse(result))).then((langStrings=&gt;(langStringCache=langStrings,langStrings)))}}));
define("filter_ally/imagecover",["exports","jquery","filter_ally/util"],(function(_exports,_jquery,_util){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}function _classPrivateMethodInitSpec(obj,privateSet){!function(obj,privateCollection){if(privateCollection.has(obj))throw new TypeError("Cannot initialize the same private elements twice on an object")}(obj,privateSet),privateSet.add(obj)}function _classPrivateMethodGet(receiver,privateSet,fn){if(!privateSet.has(receiver))throw new TypeError("attempted to get private field on non-instance");return fn}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_jquery=_interopRequireDefault(_jquery),_util=_interopRequireDefault(_util);var _applySizing=new WeakSet;function _applySizing2(){(0,_jquery.default)(".ally-image-wrapper").each((function(){if((0,_jquery.default)(this).attr("data-processed"))return;(0,_jquery.default)(this).attr("data-processed",1);const img=(0,_jquery.default)(this).find("img"),cover=(0,_jquery.default)(this).find(".ally-image-cover"),feedback=(0,_jquery.default)(this).find(".ally-feedback"),marginTop=parseInt((0,_jquery.default)(img).css("marginTop")),marginLeft=parseInt((0,_jquery.default)(img).css("marginLeft")),debounceCoordsChanged=_util.default.debounce((function(coords){const width=coords.right-coords.left,height=coords.bottom-coords.top;(0,_jquery.default)(cover).css("width",width+"px").css("height",height+"px");const topPos=(0,_jquery.default)(img).position().top+marginTop,leftPos=(0,_jquery.default)(img).position().left+marginLeft;(0,_jquery.default)(cover).css("top",topPos+"px").css("left",leftPos+"px"),feedback.length&amp;&amp;feedback.css("top",topPos+height-feedback.height()+"px").css("left",leftPos+"px")}),1e3);_util.default.onCoordsChange(img,(function(coords){debounceCoordsChanged(coords)}))}))}var _default=new class{constructor(){_classPrivateMethodInitSpec(this,_applySizing)}init(){(0,_jquery.default)(document).ready(_classPrivateMethodGet(this,_applySizing,_applySizing2));const targetNode=document,observerOptions={childList:!0,attributes:!0,subtree:!0};(0,_jquery.default)(document).on("snap-course-content-loaded",(()=&gt;{const observer=new MutationObserver((()=&gt;{let count=0,interval=setInterval((()=&gt;{count&lt;5?(_classPrivateMethodGet(this,_applySizing,_applySizing2).call(this),count++):clearTimeout(interval)}),500);observer.disconnect()}));observer.observe(targetNode,observerOptions)}))}};return _exports.default=_default,_exports.default}));
define("filter_ally/ally",["exports","jquery","core/log"],(function(_exports,_jquery,_log){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}function _defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function _classPrivateFieldInitSpec(obj,privateMap,value){!function(obj,privateCollection){if(privateCollection.has(obj))throw new TypeError("Cannot initialize the same private elements twice on an object")}(obj,privateMap),privateMap.set(obj,value)}function _classPrivateFieldGet(receiver,privateMap){return _classApplyDescriptorGet(receiver,_classExtractFieldDescriptor(receiver,privateMap,"get"))}function _classPrivateFieldSet(receiver,privateMap,value){return _classApplyDescriptorSet(receiver,_classExtractFieldDescriptor(receiver,privateMap,"set"),value),value}function _classExtractFieldDescriptor(receiver,privateMap,action){if(!privateMap.has(receiver))throw new TypeError("attempted to "+action+" private field on non-instance");return privateMap.get(receiver)}function _classApplyDescriptorSet(receiver,descriptor,value){if(descriptor.set)descriptor.set.call(receiver,value);else{if(!descriptor.writable)throw new TypeError("attempted to set read only private field");descriptor.value=value}}function _classCheckPrivateStaticFieldDescriptor(descriptor,action){if(void 0===descriptor)throw new TypeError("attempted to "+action+" private static field before its declaration")}function _classCheckPrivateStaticAccess(receiver,classConstructor){if(receiver!==classConstructor)throw new TypeError("Private static access of wrong provenance")}function _classApplyDescriptorGet(receiver,descriptor){return descriptor.get?descriptor.get.call(receiver):descriptor.value}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_jquery=_interopRequireDefault(_jquery),_log=_interopRequireDefault(_log);var _config=new WeakMap,_token=new WeakMap,_baseUrl=new WeakMap;class Ally{constructor(){_classPrivateFieldInitSpec(this,_config,{writable:!0,value:null}),_classPrivateFieldInitSpec(this,_token,{writable:!0,value:null}),_classPrivateFieldInitSpec(this,_baseUrl,{writable:!0,value:null}),_defineProperty(this,"init",(function(jwt,config){if(descriptor=_initialized,_classCheckPrivateStaticAccess(receiver=Ally,Ally),_classCheckPrivateStaticFieldDescriptor(descriptor,"get"),_classApplyDescriptorGet(receiver,descriptor))return;var receiver,descriptor;if(function(receiver,classConstructor,descriptor,value){_classCheckPrivateStaticAccess(receiver,classConstructor),_classCheckPrivateStaticFieldDescriptor(descriptor,"set"),_classApplyDescriptorSet(receiver,descriptor,value)}(Ally,Ally,_initialized,!0),!config.adminurl)return void _log.default.info("The Ally admin tool is not configured with a Launch URL. Aborting JS load.");_classPrivateFieldSet(this,_token,jwt),_classPrivateFieldSet(this,_config,config),_classPrivateFieldSet(this,_baseUrl,(url=&gt;{const parser=document.createElement("a");parser.href=url;let baseUrl=parser.protocol+"//"+parser.hostname;return parser.port&amp;&amp;(baseUrl+=":"+parser.port),baseUrl})(config.adminurl)),_jquery.default.getScript(_classPrivateFieldGet(this,_baseUrl)+"/integration/moodlerooms/ally.js").fail((function(){_log.default.error("Failed to load Ally JS")}))})),_defineProperty(this,"token",(function(){return _classPrivateFieldGet(this,_token)})),_defineProperty(this,"config",(function(){return _classPrivateFieldGet(this,_config)})),_defineProperty(this,"getAllyBaseUrl",(function(){return _classPrivateFieldGet(this,_baseUrl)}))}}var _initialized={writable:!0,value:!1},_default=new Ally;return _exports.default=_default,_exports.default}));
define("filter_ally/util",["exports","jquery"],(function(_exports,_jquery){var obj;
/**
   * This file is part of Moodle - http://moodle.org/
   *
   * Moodle is free software: you can redistribute it and/or modify
   * it under the terms of the GNU General Public License as published by
   * the Free Software Foundation, either version 3 of the License, or
   * (at your option) any later version.
   *
   * Moodle is distributed in the hope that it will be useful,
   * but WITHOUT ANY WARRANTY; without even the implied warranty of
   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   * GNU General Public License for more details.
   *
   * You should have received a copy of the GNU General Public License
   * along with Moodle.  If not, see &lt;http://www.gnu.org/licenses/&gt;.
   *
   * Utility lib.
   *
   * @package
   * @author    Guy Thomas / Branden Visser
   * @copyright Copyright (c) 2017 Open LMS / 2023 Anthology Inc. and its affiliates
   * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_jquery=(obj=_jquery)&amp;&amp;obj.__esModule?obj:{default:obj};var _default=new class{whenTrue(evaluateFunction,maxIterations){maxIterations=maxIterations||10;const dfd=_jquery.default.Deferred();let i=0,intervalHandle=null;return intervalHandle=setInterval((function(){return i++,i&gt;maxIterations?(dfd.reject(),void(intervalHandle&amp;&amp;(clearInterval(intervalHandle),intervalHandle=null))):evaluateFunction()?(dfd.resolve(),void(intervalHandle&amp;&amp;(clearInterval(intervalHandle),intervalHandle=null))):void 0}),200),dfd.promise()}onCoordsChange($el,callback){let lastCoords={},intervalHandle=null;const _loop=()=&gt;{const offset=$el.offset(),width=$el.width(),height=$el.height(),currCoords={top:offset.top,right:offset.left+width,bottom:offset.top+height,left:offset.left};if(currCoords.top!==lastCoords.top||currCoords.right!==lastCoords.right||currCoords.bottom!==lastCoords.bottom||currCoords.left!==lastCoords.left)return lastCoords=currCoords,_jquery.default.contains(document.documentElement,$el[0])?void callback(lastCoords):void(intervalHandle&amp;&amp;(clearInterval(intervalHandle),intervalHandle=null))};intervalHandle=setInterval(_loop,200),_loop()}getQuery(url){const query={};return url.replace(/[?&amp;](.+?)=([^&amp;#]*)/g,(function(_,key,value){query[key]=decodeURI(value).replace(/\+/g," ")})),query}debounce(func,wait,immediate){let timeout;return function(){const dfd=_jquery.default.Deferred(),context=this,args=arguments,later=function(){timeout=null,immediate||dfd.resolve(func.apply(context,args))},callNow=immediate&amp;&amp;!timeout;return clearTimeout(timeout),timeout=setTimeout(later,wait),callNow&amp;&amp;dfd.resolve(func.apply(context,args)),dfd}}};return _exports.default=_default,_exports.default}));
/**
 * This file is part of Moodle - http://moodle.org/
 *
 * Moodle is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * Moodle is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with Moodle.  If not, see &lt;http://www.gnu.org/licenses/&gt;.
 *
 * Main library.
 *
 * @package
 * @author    Guy Thomas
 * @copyright Copyright (c) 2016 Open LMS / 2023 Anthology Inc. and its affiliates
 * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("filter_ally/main",["jquery","core/templates","core/str","filter_ally/ally","filter_ally/imagecover","filter_ally/util"],(function($,Templates,Strings,Ally,ImageCover,Util){return new function(){var self=this;self.canViewFeedback=!1,self.canDownload=!1,self.initialised=!1,self.params={};var getNodeByXpath=function(xpath){return window.document.createExpression(xpath).evaluate(window.document,XPathResult.FIRST_ORDERED_NODE_TYPE).singleNodeValue},renderTemplate=function(data,pathHash,targetEl){var dfd=$.Deferred();return $(targetEl).parents(".filter-ally-wrapper").length?(dfd.resolve(),dfd.promise()):(data.canviewfeedback=self.canViewFeedback,data.candownload=self.canDownload,data.html='&lt;span id="content-target-'+pathHash+'"&gt;&lt;/span&gt;',Templates.render("filter_ally/wrapper",data).done((function(result){0==$(targetEl).next().find('span[data-file-id="'+pathHash+'"]').length&amp;&amp;($(targetEl).after(result),$("#content-target-"+pathHash).after(targetEl),$("#content-target-"+pathHash).remove()),dfd.resolve()})),dfd.promise())},placeHoldSelector=function(selector,map){var dfd=$.Deferred(),c=0,length=$(selector).length;return length||dfd.resolve(),$(selector).each((function(){var url,type,regex,checkComplete=function(){c===length&amp;&amp;dfd.resolve()};"a"===$(this).prop("tagName").toLowerCase()?(url=$(this).attr("href"),type="a"):(url=$(this).attr("src"),type="img"),regex=url.indexOf("?")&gt;-1?/pluginfile.php\/(\d*)\/(.*)(\?)/:/pluginfile.php\/(\d*)\/(.*)/;var pathHash,match=url.match(regex);if(match){var path=match[1]+"/"+match[2];path=decodeURIComponent(path),pathHash=map[path]}if(void 0===pathHash){var query=Util.getQuery(url);if(query.file)regex=/\/(\d*)\/(.*)/,(match=decodeURIComponent(query.file).match(regex))&amp;&amp;(path=match[1]+"/"+match[2],path=decodeURIComponent(path),pathHash=map[path])}if(void 0===pathHash)return c++,void checkComplete();renderTemplate({isimage:"img"===type,fileid:pathHash,url:url},pathHash,$(this)).done((function(){c++,checkComplete()}))})),dfd.promise()},placeHoldForumModule=function(forumFileMapping){var dfd=$.Deferred();return placeHoldSelector('.forumpost .attachedimages img[src*="pluginfile.php"], .forumpost .body-content-container a[href*="pluginfile.php"]',forumFileMapping).done((function(){dfd.resolve()})),dfd.promise()},placeHoldAssignModule=function(assignFileMapping){var dfd=$.Deferred();return Util.whenTrue((function(){return $('div[id*="assign_files_tree"] .ygtvitem').length&gt;0}),10).done((function(){placeHoldSelector('div[id*="assign_files_tree"] a[href*="pluginfile.php"]',assignFileMapping),dfd.resolve()})),dfd.promise()},placeHoldFolderModule=function(folderFileMapping){var dfd=$.Deferred();return Util.whenTrue((function(){return $(".foldertree &gt; .filemanager .ygtvitem").length&gt;0}),10).done((function(){placeHoldSelector('.foldertree &gt; .filemanager span:not(.filter-ally-wrapper) &gt; a[href*="pluginfile.php"]',folderFileMapping).done((function(){dfd.resolve()}))})),dfd.promise()},placeHoldGlossaryModule=function(glossaryFileMapping){var dfd=$.Deferred();$(".entry .attachments &gt; br").each((function(){var mainAnchor=$(this).prev('a[href*="pluginfile.php"]');mainAnchor.addClass("ally-glossary-attachment");var iconAnchor=$(mainAnchor).prev('a[href*="pluginfile.php"]');$(this).after('&lt;div class="ally-glossary-attachment-row"&gt;&lt;/div&gt;');var container=$(this).next(".ally-glossary-attachment-row");container.append(iconAnchor),container.append(mainAnchor),$(this).remove()}));return placeHoldSelector(".entry .attachments .ally-glossary-attachment",glossaryFileMapping).done((function(){dfd.resolve()})),dfd.promise()},urlEncodeFilePath=function(filePath){var parts=filePath.split("/");for(var p in parts)parts[p]=encodeURIComponent(parts[p]);return parts.join("/")},placeHoldLessonGeneral=function(map,selectorPrefix){var dfd=$.Deferred();if(0===map.length)dfd.resolve();else for(var c in map){var path=urlEncodeFilePath(c);placeHoldSelector(selectorPrefix+'img[src*="'+path+'"], '+selectorPrefix+'a[href*="'+path+'"]',map).done((function(){dfd.resolve()}))}return dfd.promise()},placeHoldLessonModule=function(lessonFileMapping){var dfd=$.Deferred(),pageContentsMap=lessonFileMapping.page_contents,pageAnswersMap=lessonFileMapping.page_answers,pageResponsesMap=lessonFileMapping.page_responses;return function(pageContentsMap){return placeHoldLessonGeneral(pageContentsMap,"")}(pageContentsMap).then((function(){return function(pageAnswersMap){return placeHoldLessonGeneral(pageAnswersMap,".studentanswer table tr:nth-child(1) ")}(pageAnswersMap)})).then((function(){return function(pageResponsesMap){return placeHoldLessonGeneral(pageResponsesMap,".studentanswer table tr.lastrow ")}(pageResponsesMap)})).then((function(){dfd.resolve()})),dfd.promise()},placeHoldResourceModule=function(moduleFileMapping){var dfd=$.Deferred(),c=0,checkAllProcessed=function(){++c&gt;=Object.keys(moduleFileMapping).length&amp;&amp;dfd.resolve()};for(var moduleId in moduleFileMapping){var pathHash=moduleFileMapping[moduleId].content;if($("body").hasClass("theme-snap")&amp;&amp;!$("body").hasClass("format-tiles"))var moduleEl=$("#module-"+moduleId+":not(.snap-native) .activityinstance .snap-asset-link a:first-of-type:not(.clickable-region)");else moduleEl=$("#module-"+moduleId+" .activity-instance a:first-of-type:not(.clickable-region,.editing_move)");if(moduleEl.find(".filter-ally-wrapper").length&gt;0)checkAllProcessed();else{var data={isimage:!1,fileid:pathHash,url:$(moduleEl).attr("href")};renderTemplate(data,pathHash,moduleEl).done(checkAllProcessed)}}return dfd.promise()},buildContentIdent=function(component,table,field,id){return[component,table,field,id].join(":")},annotateSections=function(sectionMapping){var dfd=$.Deferred();for(var s in sectionMapping){var sectionId=sectionMapping[s],ident=buildContentIdent("course","course_sections","summary",sectionId);$(["#"+s+' &gt; .content div[class*="summarytext"] .no-overflow',"body.theme-snap #"+s+" &gt; .content &gt; .summary &gt; div &gt; .no-overflow"].join(",")).attr("data-ally-richcontent",ident)}return dfd.resolve(),dfd.promise()},annotateModuleIntros=function(introMapping,module,additionalSelectors){for(var i in introMapping){var annotation=introMapping[i],selectors=["body.path-mod-"+module+".cmid-"+i+" #intro &gt; .no-overflow","li.activity.modtype_"+module+"#module-"+i+" .description .no-overflow &gt; .no-overflow","li.snap-activity.modtype_"+module+"#module-"+i+" .contentafterlink &gt; .no-overflow"];if(additionalSelectors)for(var a in additionalSelectors)selectors.push(additionalSelectors[a].replace("{{i}}",i));$(selectors.join(",")).attr("data-ally-richcontent",annotation)}},annotateLesson=function(mapping){var intros=mapping.intros;annotateModuleIntros(intros,"lesson",["li.snap-native.modtype_lesson#module-{{i}} .contentafterlink &gt; .summary-text .no-overflow"]);var content=mapping.lesson_pages;for(var p in content)if("page-mod-lesson-edit"===document.body.id){var xpath='//a[@id="lesson-'+p+'"]//ancestor::table//tbody/tr/td/div[contains(@class, "no-overflow")]',annotation=content[p],node=getNodeByXpath(xpath);$(node).attr("data-ally-richcontent",annotation)}else{if(node=getNodeByXpath('//form[contains(@action, "continue.php")]//input[@name="pageid"]'))var pageId=$(node).val();else pageId=new URLSearchParams(window.location.search).get("pageid");if(pageId!=p)continue;annotation=content[p];$(["#page-mod-lesson-view #region-main .box.contents &gt; .no-overflow","#page-mod-lesson-view #region-main form &gt; fieldset &gt; .fcontainer &gt; .contents .no-overflow","li.snap-native.modtype_page#module-"+p+" .pagemod-content"].join(",")).attr("data-ally-richcontent",annotation)}Strings.get_strings([{key:"answer",component:"mod_lesson"},{key:"response",component:"mod_lesson"}]).then((function(strings){var answerLabel=strings[0],responseLabel=strings[1],answers=mapping.lesson_answers,processAnswerResponse=function(pageId,i,label,annotation){var nodes=function(xpath){var result=window.document.createExpression(xpath).evaluate(window.document,XPathResult.ANY_TYPE),nodes=[];do{var node=result.iterateNext();nodes.push(node)}while(node);return nodes}('//a[@id="lesson-'+pageId+'"]//ancestor::table//td/label[contains(text(),"'+label+" "+i+'")]/ancestor::tr/td[2]');for(var n in nodes){var node=nodes[n];$(node).attr("data-ally-richcontent",annotation)}};for(var a in answers){var annotation=answers[a],pageId=(tmpArr=a.split("_"))[0],ansId=tmpArr[1],anum=tmpArr[2];if("page-mod-lesson-edit"===document.body.id)processAnswerResponse(pageId,anum,answerLabel,annotation);else{if($('#page-mod-lesson-view label[for="id_answerid_'+ansId+'"]').attr("data-ally-richcontent",annotation),self.params.answerid&amp;&amp;self.params.answerid==ansId)$(".studentanswer tr:nth-of-type(1) &gt; td div").attr("data-ally-richcontent",annotation);else{var answerWrapperId="answer_wrapper_"+ansId,answerEl=$("#id_answerid_"+ansId);if(1!=answerEl.data("annotated")){var contentEls=answerEl.nextAll();answerEl.parent("label").append('&lt;span id="answer_wrapper_'+ansId+'"&gt;&lt;/span&gt;'),$("#"+answerWrapperId).append(contentEls)}answerEl.data("annotated",1)}$("#answer_wrapper_"+a).attr("data-ally-richcontent",annotation)}}var responses=mapping.lesson_answers_response;for(var r in responses){annotation=responses[r],pageId=(tmpArr=r.split("_"))[0];var tmpArr,respId=tmpArr[1],rnum=tmpArr[2];if("page-mod-lesson-edit"===document.body.id)processAnswerResponse(pageId,rnum,responseLabel,annotation);else if(self.params.answerid&amp;&amp;self.params.answerid==respId){var responseWrapperId="response_wrapper_"+respId;if(!$(".studentanswer tr.lastrow &gt; td #"+responseWrapperId).length){contentEls=$(".studentanswer tr.lastrow &gt; td &gt; br").nextAll();$(".studentanswer tr.lastrow &gt; td &gt; br").after('&lt;span id="'+responseWrapperId+'"&gt;&lt;/span&gt;'),$("#"+responseWrapperId).append(contentEls)}$("#"+responseWrapperId).attr("data-ally-richcontent",annotation)}}}))},annotateModules=function(moduleMapping){var dfd=$.Deferred();return void 0!==moduleMapping.mod_forum&amp;&amp;function(forumMapping){var intros=forumMapping.intros;annotateModuleIntros(intros,"forum");var discussions=forumMapping.posts;for(var d in discussions){var post="p"+d,annotation=discussions[d];$(["#page-mod-forum-discuss #"+post+" div.forumpost div.no-overflow"].join(",")).attr("data-ally-richcontent",annotation)}}(moduleMapping.mod_forum),void 0!==moduleMapping.mod_hsuforum&amp;&amp;function(forumMapping){var intros=forumMapping.intros;annotateModuleIntros(intros,"hsuforum",["#hsuforum-header .hsuforum_introduction &gt; .no-overflow"]);var discussions=forumMapping.posts;for(var d in discussions){var annotation=discussions[d];$('article[id="p'+d+'"] div.posting').attr("data-ally-richcontent",annotation)}}(moduleMapping.mod_hsuforum),void 0!==moduleMapping.mod_glossary&amp;&amp;function(mapping){var intros=mapping.intros;annotateModuleIntros(intros,"glossary");var entries=mapping.entries;for(var e in entries){var annotation=entries[e],entryFooter=$('.entrylowersection .commands a[href*="id='+e+'"]'),entry=$(entryFooter).parents(".glossarypost").find(".entry .no-overflow");$(entry).attr("data-ally-richcontent",annotation)}}(moduleMapping.mod_glossary),void 0!==moduleMapping.mod_page&amp;&amp;function(mapping){var intros=mapping.intros;annotateModuleIntros(intros,"page",["li.snap-native.modtype_page#module-{{i}} .contentafterlink &gt; .summary-text"]);var content=mapping.content;for(var c in content){var annotation=content[c],selectors=["#page-mod-page-view.cmid-".concat(c," #region-main .box.generalbox &gt; .no-overflow"),"li.snap-native.modtype_page#module-".concat(c," .pagemod-content")];$(selectors.join(",")).attr("data-ally-richcontent",annotation)}}(moduleMapping.mod_page),void 0!==moduleMapping.mod_book&amp;&amp;function(mapping){var intros=mapping.intros;annotateModuleIntros(intros,"book",["li.snap-native.modtype_book#module-{{i}} .contentafterlink &gt; .summary-text .no-overflow"]);var chapterId,content=mapping.chapters;if(self.params.chapterid)chapterId=self.params.chapterid;else{var urlParams=new URLSearchParams(window.location.search);chapterId=urlParams.get("chapterid")}$.each(content,(function(ch,annotation){chapterId==ch&amp;&amp;$(["#page-mod-book-view #region-main .box.generalbox.book_content &gt; .no-overflow","li.snap-native.modtype_page#module-"+ch+" .pagemod-content"].join(",")).attr("data-ally-richcontent",annotation)}))}(moduleMapping.mod_book),void 0!==moduleMapping.mod_lesson&amp;&amp;annotateLesson(moduleMapping.mod_lesson),dfd.resolve(),dfd.promise()},annotateSnapCourseSummary=function(mapping){var dfd=$.Deferred(),snapFooterCourseSummary=$("#snap-course-footer-summary &gt; div.no-overflow");if(snapFooterCourseSummary.length){var ident=buildContentIdent("course","course","summary",mapping.courseId);snapFooterCourseSummary.attr("data-ally-richcontent",ident)}return dfd.resolve(),dfd.promise()},annotateHtmlBlock=function(mapping){var dfd=$.Deferred(),items=mapping.block_html;for(var i in items){var ident=items[i],selector=["#inst"+i+".block_html &gt; .card-body &gt; .card-text &gt; .no-overflow","#inst"+i+".block_html &gt; .content &gt; .no-overflow"].join(",");$(selector).attr("data-ally-richcontent",ident)}return dfd.resolve(),dfd.promise()},debounceApplyPlaceHolders=Util.debounce((function(){return function(){M.util.js_pending("filter_ally_applyPlaceHolders");var dfd=$.Deferred();if(void 0===ally_module_maps||void 0===ally_section_maps)return dfd.resolve(),dfd.promise();var tasks=[{mapVar:ally_module_maps.file_resources,method:placeHoldResourceModule},{mapVar:ally_module_maps.assignment_files,method:placeHoldAssignModule},{mapVar:ally_module_maps.folder_files,method:placeHoldFolderModule},{mapVar:ally_module_maps.forum_files,method:placeHoldForumModule},{mapVar:ally_module_maps.glossary_files,method:placeHoldGlossaryModule},{mapVar:ally_module_maps.lesson_files,method:placeHoldLessonModule},{mapVar:ally_section_maps,method:annotateSections},{mapVar:ally_annotation_maps,method:annotateModules},{mapVar:{courseId:self.courseId},method:annotateSnapCourseSummary},{mapVar:ally_annotation_maps,method:annotateHtmlBlock}];return $(document).ready((function(){var completed=0,onTaskComplete=function(){++completed===tasks.length&amp;&amp;(M.util.js_complete("filter_ally_applyPlaceHolders"),dfd.resolve())};for(var t in tasks){var task=tasks[t];Object.keys(task.mapVar).length&gt;0?task.method(task.mapVar).done(onTaskComplete):onTaskComplete()}})),dfd.promise()}()}),1e3);this.initStageTwo=function(){const{jwt:jwt,config:config}=self;(self.canViewFeedback||self.canDownload)&amp;&amp;(debounceApplyPlaceHolders().done((function(){ImageCover.init(),Ally.init(jwt,config);try{var targetNode=$(".foldertree &gt; .filemanager")[0];if(targetNode){new MutationObserver((function(mutationsList){mutationsList.filter((function(mutation){return"childList"===mutation.type})).forEach((function(){placeHoldFolderModule(ally_module_maps.folder_files)}))})).observe(targetNode,{attributes:!0,childList:!0,subtree:!0})}}catch(error){setInterval((function(){placeHoldFolderModule(ally_module_maps.folder_files)}),5e3)}self.initialised=!0})),$(document).ajaxComplete((function(){self.initialised&amp;&amp;debounceApplyPlaceHolders()})),$("body.theme-snap").length&amp;&amp;($(document).ajaxComplete((function(event,xhr,settings){settings.url.includes("ally.js")&amp;&amp;(setTimeout((function(){$(".ally-feedback.ally-active.ally-score-indicator-embedded span").each((function(){"none"==this.style.display&amp;&amp;(this.style.display="block","ally-scoreindicator-container"==this.getAttribute("class")&amp;&amp;(this.style.display="inline-block",this.children[0].style.display="inline-block"))}))}),5e3),$(document).off("ajaxComplete"))})),document.addEventListener("core_filters/contentUpdated",(()=&gt;{self.initStageTwo()}))))},this.init=function(jwt,config,canViewFeedback,canDownload,courseId,params){self.canViewFeedback=canViewFeedback,self.canDownload=canDownload,self.courseId=courseId,self.params=params,self.jwt=jwt,self.config=config;var pluginJSURL=function(path){return M.cfg.wwwroot+"/pluginfile.php/"+M.cfg.contextid+"/filter_ally/"+path},polyfills={};if(document.evaluate||(polyfills["filter_ally/wgxpath"]=pluginJSURL("vendorjs/wgxpath.install")),"undefined"==typeof URLSearchParams&amp;&amp;(polyfills["filter_ally/urlsearchparams"]=["https://cdnjs.cloudflare.com/ajax/libs/url-search-params/1.1.0/url-search-params.amd.js",pluginJSURL("vendorjs/url-search-params.amd")]),polyfills==={})self.initStageTwo();else{require.config({enforceDefine:!1,paths:polyfills});var requires=Object.keys(polyfills);require(requires,(function(){"undefined"==typeof URLSearchParams&amp;&amp;(window.URLSearchParams=arguments[1]),self.initStageTwo()}))}}}}));
/*! lazysizes - v4.0.2 */
!function(a,b){var c=b(a,a.document);a.lazySizes=c,"object"==typeof module&amp;&amp;module.exports&amp;&amp;(module.exports=c)}(window,function(a,b){"use strict";if(b.getElementsByClassName){var c,d,e=b.documentElement,f=a.Date,g=a.HTMLPictureElement,h="addEventListener",i="getAttribute",j=a[h],k=a.setTimeout,l=a.requestAnimationFrame||k,m=a.requestIdleCallback,n=/^picture$/i,o=["load","error","lazyincluded","_lazyloaded"],p={},q=Array.prototype.forEach,r=function(a,b){return p[b]||(p[b]=new RegExp("(\\s|^)"+b+"(\\s|$)")),p[b].test(a[i]("class")||"")&amp;&amp;p[b]},s=function(a,b){r(a,b)||a.setAttribute("class",(a[i]("class")||"").trim()+" "+b)},t=function(a,b){var c;(c=r(a,b))&amp;&amp;a.setAttribute("class",(a[i]("class")||"").replace(c," "))},u=function(a,b,c){var d=c?h:"removeEventListener";c&amp;&amp;u(a,b),o.forEach(function(c){a[d](c,b)})},v=function(a,d,e,f,g){var h=b.createEvent("CustomEvent");return e||(e={}),e.instance=c,h.initCustomEvent(d,!f,!g,e),a.dispatchEvent(h),h},w=function(b,c){var e;!g&amp;&amp;(e=a.picturefill||d.pf)?e({reevaluate:!0,elements:[b]}):c&amp;&amp;c.src&amp;&amp;(b.src=c.src)},x=function(a,b){return(getComputedStyle(a,null)||{})[b]},y=function(a,b,c){for(c=c||a.offsetWidth;c&lt;d.minSize&amp;&amp;b&amp;&amp;!a._lazysizesWidth;)c=b.offsetWidth,b=b.parentNode;return c},z=function(){var a,c,d=[],e=[],f=d,g=function(){var b=f;for(f=d.length?e:d,a=!0,c=!1;b.length;)b.shift()();a=!1},h=function(d,e){a&amp;&amp;!e?d.apply(this,arguments):(f.push(d),c||(c=!0,(b.hidden?k:l)(g)))};return h._lsFlush=g,h}(),A=function(a,b){return b?function(){z(a)}:function(){var b=this,c=arguments;z(function(){a.apply(b,c)})}},B=function(a){var b,c=0,e=d.throttleDelay,g=d.ricTimeout,h=function(){b=!1,c=f.now(),a()},i=m&amp;&amp;g&gt;49?function(){m(h,{timeout:g}),g!==d.ricTimeout&amp;&amp;(g=d.ricTimeout)}:A(function(){k(h)},!0);return function(a){var d;(a=a===!0)&amp;&amp;(g=33),b||(b=!0,d=e-(f.now()-c),0&gt;d&amp;&amp;(d=0),a||9&gt;d?i():k(i,d))}},C=function(a){var b,c,d=99,e=function(){b=null,a()},g=function(){var a=f.now()-c;d&gt;a?k(g,d-a):(m||e)(e)};return function(){c=f.now(),b||(b=k(g,d))}};!function(){var b,c={lazyClass:"lazyload",loadedClass:"lazyloaded",loadingClass:"lazyloading",preloadClass:"lazypreload",errorClass:"lazyerror",autosizesClass:"lazyautosizes",srcAttr:"data-src",srcsetAttr:"data-srcset",sizesAttr:"data-sizes",minSize:40,customMedia:{},init:!0,expFactor:1.5,hFac:.8,loadMode:2,loadHidden:!0,ricTimeout:0,throttleDelay:125};d=a.lazySizesConfig||a.lazysizesConfig||{};for(b in c)b in d||(d[b]=c[b]);a.lazySizesConfig=d,k(function(){d.init&amp;&amp;F()})}();var D=function(){var g,l,m,o,p,y,D,F,G,H,I,J,K,L,M=/^img$/i,N=/^iframe$/i,O="onscroll"in a&amp;&amp;!/glebot/.test(navigator.userAgent),P=0,Q=0,R=0,S=-1,T=function(a){R--,a&amp;&amp;a.target&amp;&amp;u(a.target,T),(!a||0&gt;R||!a.target)&amp;&amp;(R=0)},U=function(a,c){var d,f=a,g="hidden"==x(b.body,"visibility")||"hidden"!=x(a,"visibility");for(F-=c,I+=c,G-=c,H+=c;g&amp;&amp;(f=f.offsetParent)&amp;&amp;f!=b.body&amp;&amp;f!=e;)g=(x(f,"opacity")||1)&gt;0,g&amp;&amp;"visible"!=x(f,"overflow")&amp;&amp;(d=f.getBoundingClientRect(),g=H&gt;d.left&amp;&amp;G&lt;d.right&amp;&amp;I&gt;d.top-1&amp;&amp;F&lt;d.bottom+1);return g},V=function(){var a,f,h,j,k,m,n,p,q,r=c.elements;if((o=d.loadMode)&amp;&amp;8&gt;R&amp;&amp;(a=r.length)){f=0,S++,null==K&amp;&amp;("expand"in d||(d.expand=e.clientHeight&gt;500&amp;&amp;e.clientWidth&gt;500?500:370),J=d.expand,K=J*d.expFactor),K&gt;Q&amp;&amp;1&gt;R&amp;&amp;S&gt;2&amp;&amp;o&gt;2&amp;&amp;!b.hidden?(Q=K,S=0):Q=o&gt;1&amp;&amp;S&gt;1&amp;&amp;6&gt;R?J:P;for(;a&gt;f;f++)if(r[f]&amp;&amp;!r[f]._lazyRace)if(O)if((p=r[f][i]("data-expand"))&amp;&amp;(m=1*p)||(m=Q),q!==m&amp;&amp;(y=innerWidth+m*L,D=innerHeight+m,n=-1*m,q=m),h=r[f].getBoundingClientRect(),(I=h.bottom)&gt;=n&amp;&amp;(F=h.top)&lt;=D&amp;&amp;(H=h.right)&gt;=n*L&amp;&amp;(G=h.left)&lt;=y&amp;&amp;(I||H||G||F)&amp;&amp;(d.loadHidden||"hidden"!=x(r[f],"visibility"))&amp;&amp;(l&amp;&amp;3&gt;R&amp;&amp;!p&amp;&amp;(3&gt;o||4&gt;S)||U(r[f],m))){if(ba(r[f]),k=!0,R&gt;9)break}else!k&amp;&amp;l&amp;&amp;!j&amp;&amp;4&gt;R&amp;&amp;4&gt;S&amp;&amp;o&gt;2&amp;&amp;(g[0]||d.preloadAfterLoad)&amp;&amp;(g[0]||!p&amp;&amp;(I||H||G||F||"auto"!=r[f][i](d.sizesAttr)))&amp;&amp;(j=g[0]||r[f]);else ba(r[f]);j&amp;&amp;!k&amp;&amp;ba(j)}},W=B(V),X=function(a){s(a.target,d.loadedClass),t(a.target,d.loadingClass),u(a.target,Z),v(a.target,"lazyloaded")},Y=A(X),Z=function(a){Y({target:a.target})},$=function(a,b){try{a.contentWindow.location.replace(b)}catch(c){a.src=b}},_=function(a){var b,c=a[i](d.srcsetAttr);(b=d.customMedia[a[i]("data-media")||a[i]("media")])&amp;&amp;a.setAttribute("media",b),c&amp;&amp;a.setAttribute("srcset",c)},aa=A(function(a,b,c,e,f){var g,h,j,l,o,p;(o=v(a,"lazybeforeunveil",b)).defaultPrevented||(e&amp;&amp;(c?s(a,d.autosizesClass):a.setAttribute("sizes",e)),h=a[i](d.srcsetAttr),g=a[i](d.srcAttr),f&amp;&amp;(j=a.parentNode,l=j&amp;&amp;n.test(j.nodeName||"")),p=b.firesLoad||"src"in a&amp;&amp;(h||g||l),o={target:a},p&amp;&amp;(u(a,T,!0),clearTimeout(m),m=k(T,2500),s(a,d.loadingClass),u(a,Z,!0)),l&amp;&amp;q.call(j.getElementsByTagName("source"),_),h?a.setAttribute("srcset",h):g&amp;&amp;!l&amp;&amp;(N.test(a.nodeName)?$(a,g):a.src=g),f&amp;&amp;(h||l)&amp;&amp;w(a,{src:g})),a._lazyRace&amp;&amp;delete a._lazyRace,t(a,d.lazyClass),z(function(){(!p||a.complete&amp;&amp;a.naturalWidth&gt;1)&amp;&amp;(p?T(o):R--,X(o))},!0)}),ba=function(a){var b,c=M.test(a.nodeName),e=c&amp;&amp;(a[i](d.sizesAttr)||a[i]("sizes")),f="auto"==e;(!f&amp;&amp;l||!c||!a[i]("src")&amp;&amp;!a.srcset||a.complete||r(a,d.errorClass)||!r(a,d.lazyClass))&amp;&amp;(b=v(a,"lazyunveilread").detail,f&amp;&amp;E.updateElem(a,!0,a.offsetWidth),a._lazyRace=!0,R++,aa(a,b,f,e,c))},ca=function(){if(!l){if(f.now()-p&lt;999)return void k(ca,999);var a=C(function(){d.loadMode=3,W()});l=!0,d.loadMode=3,W(),j("scroll",function(){3==d.loadMode&amp;&amp;(d.loadMode=2),a()},!0)}};return{_:function(){p=f.now(),c.elements=b.getElementsByClassName(d.lazyClass),g=b.getElementsByClassName(d.lazyClass+" "+d.preloadClass),L=d.hFac,j("scroll",W,!0),j("resize",W,!0),a.MutationObserver?new MutationObserver(W).observe(e,{childList:!0,subtree:!0,attributes:!0}):(e[h]("DOMNodeInserted",W,!0),e[h]("DOMAttrModified",W,!0),setInterval(W,999)),j("hashchange",W,!0),["focus","mouseover","click","load","transitionend","animationend","webkitAnimationEnd"].forEach(function(a){b[h](a,W,!0)}),/d$|^c/.test(b.readyState)?ca():(j("load",ca),b[h]("DOMContentLoaded",W),k(ca,2e4)),c.elements.length?(V(),z._lsFlush()):W()},checkElems:W,unveil:ba}}(),E=function(){var a,c=A(function(a,b,c,d){var e,f,g;if(a._lazysizesWidth=d,d+="px",a.setAttribute("sizes",d),n.test(b.nodeName||""))for(e=b.getElementsByTagName("source"),f=0,g=e.length;g&gt;f;f++)e[f].setAttribute("sizes",d);c.detail.dataAttr||w(a,c.detail)}),e=function(a,b,d){var e,f=a.parentNode;f&amp;&amp;(d=y(a,f,d),e=v(a,"lazybeforesizes",{width:d,dataAttr:!!b}),e.defaultPrevented||(d=e.detail.width,d&amp;&amp;d!==a._lazysizesWidth&amp;&amp;c(a,f,e,d)))},f=function(){var b,c=a.length;if(c)for(b=0;c&gt;b;b++)e(a[b])},g=C(f);return{_:function(){a=b.getElementsByClassName(d.autosizesClass),j("resize",g)},checkElems:g,updateElem:e}}(),F=function(){F.i||(F.i=!0,E._(),D._())};return c={cfg:d,autoSizer:E,loader:D,init:F,uP:w,aC:s,rC:t,hC:r,fire:v,gW:y,rAF:z}}});
define("editor_atto/events",["exports","core/event_dispatcher"],(function(_exports,_event_dispatcher){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.notifyButtonHighlightToggled=_exports.eventTypes=void 0;
/**
   * Javascript events for the `editor_atto` plugin.
   *
   * @module     editor_atto/events
   * @copyright  2021 Jun Pataleta &lt;jun@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   * @since      3.10.5
   */
const eventTypes={attoButtonHighlightToggled:"editor_atto/attoButtonHighlightToggled"};_exports.eventTypes=eventTypes;_exports.notifyButtonHighlightToggled=(attoButton,buttonName,highlight)=&gt;(0,_event_dispatcher.dispatchEvent)(eventTypes.attoButtonHighlightToggled,{buttonName:buttonName,highlight:highlight},attoButton)}));
define("editor_tiny/uploader",["exports","core_form/events","editor_tiny/options"],(function(_exports,_events,_options){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0;return _exports.default=(editor,filePickerType,blob,fileName,progress)=&gt;new Promise(((resolve,reject)=&gt;{var _options$savepath;(0,_events.notifyUploadStarted)(editor.targetElm.id);const xhr=new XMLHttpRequest;xhr.upload.addEventListener("progress",(e=&gt;{progress(e.loaded/e.total*100)})),xhr.addEventListener("load",(()=&gt;{if(403===xhr.status)return void reject({message:"HTTP error: ".concat(xhr.status),remove:!0});if(xhr.status&lt;200||xhr.status&gt;=300)return void reject("HTTP Error: ".concat(xhr.status));const response=JSON.parse(xhr.responseText);if(!response)return void reject("Invalid JSON: ".concat(xhr.responseText));let location;(0,_events.notifyUploadCompleted)(editor.targetElm.id),response.url?location=response.url:response.event&amp;&amp;"fileexists"===response.event&amp;&amp;response.newfile&amp;&amp;(location=response.newfile.url),location&amp;&amp;"string"==typeof location?resolve(location):reject("Unable to handle file result: ".concat(xhr.responseText))})),xhr.addEventListener("error",(()=&gt;{reject({message:"Upload failed due to an XHR transport error. Code: ".concat(xhr.status),remove:!0})}));const formData=new FormData,options=(0,_options.getFilePicker)(editor,filePickerType);formData.append("repo_upload_file",blob,fileName),formData.append("itemid",options.itemid),Object.values(options.repositories).some((repository=&gt;"upload"===repository.type&amp;&amp;(formData.append("repo_id",repository.id),!0))),formData.append("env",options.env),formData.append("sesskey",M.cfg.sesskey),formData.append("client_id",options.client_id),formData.append("savepath",null!==(_options$savepath=options.savepath)&amp;&amp;void 0!==_options$savepath?_options$savepath:"/"),formData.append("ctx_id",options.context.id),xhr.open("POST","".concat(M.cfg.wwwroot,"/repository/repository_ajax.php?action=upload"),!0),xhr.send(formData)})),_exports.default}));
define("editor_tiny/defaults",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.getDefaultToolbar=_exports.getDefaultQuickbarsSelectionToolbar=_exports.getDefaultQuickbarsInsertToolbar=_exports.getDefaultQuickbarsImageToolbar=_exports.getDefaultMenu=_exports.getDefaultConfiguration=void 0;
/**
   * TinyMCE Editor Upstream defaults.
   *
   * @module editor_tiny/editor
   * @copyright  2022 Andrew Lyons &lt;andrew@nicols.co.uk&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */
const getDefaultMenu=()=&gt;({file:{title:"File",items:"newdocument restoredraft | preview | export print | deleteallconversations"},edit:{title:"Edit",items:"undo redo | cut copy paste pastetext | selectall | searchreplace"},view:{title:"View",items:"code | visualaid visualchars visualblocks | spellchecker | preview fullscreen | showcomments"},insert:{title:"Insert",items:"image link media addcomment pageembed template codesample inserttable | charmap emoticons hr | pagebreak nonbreaking anchor tableofcontents | insertdatetime"},format:{title:"Format",items:"bold italic underline strikethrough superscript subscript codeformat | styles blocks fontfamily fontsize align lineheight | forecolor backcolor | language | removeformat"},tools:{title:"Tools",items:"spellchecker spellcheckerlanguage | a11ycheck code wordcount"},table:{title:"Table",items:"inserttable | cell row column | advtablesort | tableprops deletetable"},help:{title:"Help",items:"help"}});_exports.getDefaultMenu=getDefaultMenu;const getDefaultToolbar=()=&gt;[{name:"history",items:["undo","redo"]},{name:"formatting",items:["bold","italic"]},{name:"alignment",items:["alignleft","aligncenter","alignright","alignjustify"]},{name:"indentation",items:["outdent","indent"]},{name:"lists",items:["bullist","numlist"]},{name:"comments",items:["addcomment"]}];_exports.getDefaultToolbar=getDefaultToolbar;const getDefaultQuickbarsSelectionToolbar=()=&gt;"bold italic | quicklink h2 h3 blockquote";_exports.getDefaultQuickbarsSelectionToolbar=getDefaultQuickbarsSelectionToolbar;const getDefaultQuickbarsInsertToolbar=()=&gt;"quickimage quicktable";_exports.getDefaultQuickbarsInsertToolbar=getDefaultQuickbarsInsertToolbar;const getDefaultQuickbarsImageToolbar=()=&gt;"alignleft aligncenter alignright";_exports.getDefaultQuickbarsImageToolbar=getDefaultQuickbarsImageToolbar;_exports.getDefaultConfiguration=()=&gt;({toolbar_mode:"sliding",toolbar:[{name:"history",items:["undo","redo"]},{name:"formatting",items:["bold","italic"]},{name:"alignment",items:["alignleft","aligncenter","alignright","alignjustify"]},{name:"indentation",items:["outdent","indent"]},{name:"lists",items:["bullist","numlist"]},{name:"comments",items:["addcomment"]}],quickbars_selection_toolbar:"bold italic | quicklink h2 h3 blockquote",quickbars_insert_toolbar:"quickimage quicktable",quickbars_image_toolbar:"alignleft aligncenter alignright",menu:{file:{title:"File",items:"newdocument restoredraft | preview | export print | deleteallconversations"},edit:{title:"Edit",items:"undo redo | cut copy paste pastetext | selectall | searchreplace"},view:{title:"View",items:"code | visualaid visualchars visualblocks | spellchecker | preview fullscreen | showcomments"},insert:{title:"Insert",items:"image link media addcomment pageembed template codesample inserttable | charmap emoticons hr | pagebreak nonbreaking anchor tableofcontents | insertdatetime"},format:{title:"Format",items:"bold italic underline strikethrough superscript subscript codeformat | styles blocks fontfamily fontsize align lineheight | forecolor backcolor | language | removeformat"},tools:{title:"Tools",items:"spellchecker spellcheckerlanguage | a11ycheck code wordcount"},table:{title:"Table",items:"inserttable | cell row column | advtablesort | tableprops deletetable"},help:{title:"Help",items:"help"}},skin:"oxide"})}));
define("editor_tiny/options",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.registerPlaceholderSelectors=_exports.register=_exports.getPluginOptionName=_exports.getPlaceholderSelectors=_exports.getNestedMenu=_exports.getMoodleLang=_exports.getInitialPluginConfiguration=_exports.getFilepickers=_exports.getFilePicker=_exports.getDraftItemId=_exports.getCurrentLanguage=_exports.getContextId=void 0;_exports.register=(editor,options)=&gt;{const registerOption=editor.options.register,setOption=editor.options.set;registerOption("moodle:contextid",{processor:"number",default:0}),setOption("moodle:contextid",options.context),registerOption("moodle:filepickers",{processor:"object",default:{}}),setOption("moodle:filepickers",options.filepicker),registerOption("moodle:draftitemid",{processor:"number",default:0}),setOption("moodle:draftitemid",options.draftitemid),registerOption("moodle:currentLanguage",{processor:"string",default:"en"}),setOption("moodle:currentLanguage",options.currentLanguage),registerOption("moodle:language",{processor:"object",default:{}}),setOption("moodle:language",options.language),registerOption("moodle:placeholderSelectors",{processor:"array",default:[]}),setOption("moodle:placeholderSelectors",options.placeholderSelectors),registerOption("moodle:nestedmenu",{processor:"boolean",default:!1}),setOption("moodle:nestedmenu",options.nestedmenu)};_exports.getContextId=editor=&gt;editor.options.get("moodle:contextid");_exports.getDraftItemId=editor=&gt;editor.options.get("moodle:draftitemid");const getFilepickers=editor=&gt;editor.options.get("moodle:filepickers");_exports.getFilepickers=getFilepickers;_exports.getFilePicker=(editor,type)=&gt;getFilepickers(editor)[type];_exports.getMoodleLang=editor=&gt;editor.options.get("moodle:language");_exports.getCurrentLanguage=editor=&gt;editor.options.get("moodle:currentLanguage");_exports.getNestedMenu=editor=&gt;editor.options.get("moodle:nestedmenu");_exports.getInitialPluginConfiguration=options=&gt;{const config={};return Object.entries(options.plugins).forEach((_ref=&gt;{var _pluginConfig$config;let[pluginName,pluginConfig]=_ref;Object.entries(null!==(_pluginConfig$config=pluginConfig.config)&amp;&amp;void 0!==_pluginConfig$config?_pluginConfig$config:{}).forEach((_ref2=&gt;{let[optionName,value]=_ref2;config[getPluginOptionName(pluginName,optionName)]=value}))})),config};const getPluginOptionName=(pluginName,optionName)=&gt;"".concat(pluginName,":").concat(optionName);_exports.getPluginOptionName=getPluginOptionName;const getPlaceholderSelectors=editor=&gt;editor.options.get("moodle:placeholderSelectors");_exports.getPlaceholderSelectors=getPlaceholderSelectors;_exports.registerPlaceholderSelectors=(editor,selectors)=&gt;{if(selectors.length){let existingData=getPlaceholderSelectors(editor);existingData=existingData.concat(selectors),editor.options.set("moodle:placeholderSelectors",existingData)}}}));
define("editor_tiny/loader",["exports","core/config"],(function(_exports,Config){function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}
/**
   * Tiny Loader for Moodle
   *
   * @module      editor_tiny/loader
   * @copyright   2022 Andrew Lyons &lt;andrew@nicols.co.uk&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */
let tinyMCEPromise;Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.getTinyMCE=_exports.baseUrl=void 0,Config=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}(Config);const baseUrl="".concat(Config.wwwroot,"/lib/editor/tiny/loader.php/").concat(M.cfg.jsrev);_exports.baseUrl=baseUrl;_exports.getTinyMCE=()=&gt;tinyMCEPromise||(tinyMCEPromise=new Promise(((resolve,reject)=&gt;{const head=document.querySelector("head");let script=head.querySelector('script[data-tinymce="tinymce"]');script&amp;&amp;resolve(window.tinyMCE),script=document.createElement("script"),script.dataset.tinymce="tinymce",script.src="".concat(baseUrl,"/tinymce.js"),script.async=!0,script.addEventListener("load",(()=&gt;{resolve(window.tinyMCE)}),!1),script.addEventListener("error",(err=&gt;{reject(err)}),!1),head.append(script)})),tinyMCEPromise)}));
define("editor_tiny/utils",["exports","core/templates","./options","core/str"],(function(_exports,_templates,_options,_str){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.removeToolbarButtons=_exports.removeToolbarButton=_exports.removeSubmenuItem=_exports.removeMenubarItems=_exports.removeMenubarItem=_exports.getPluginMetadata=_exports.getImagePath=_exports.getDocumentationLink=_exports.getButtonImage=_exports.ensureEditorIsValid=_exports.displayFilepicker=_exports.addToolbarSection=_exports.addToolbarButtons=_exports.addToolbarButton=_exports.addQuickbarsToolbarItem=_exports.addMenubarItem=_exports.addContextmenuItem=void 0;const getImagePath=function(identifier){let component=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]?arguments[1]:"editor_tiny";return Promise.resolve(M.util.image_url(identifier,component))};_exports.getImagePath=getImagePath;_exports.getButtonImage=async function(identifier){let component=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]?arguments[1]:"editor_tiny";return(0,_templates.renderForPromise)("editor_tiny/toolbar_button",{image:await getImagePath(identifier,component)})};_exports.displayFilepicker=(editor,filetype)=&gt;new Promise(((resolve,reject)=&gt;{const configuration=(0,_options.getFilePicker)(editor,filetype);if(configuration){const options={...configuration,formcallback:resolve};M.core_filepicker.show(Y,options)}else reject("Unknown filetype ".concat(filetype))}));_exports.addToolbarButton=(toolbar,section,button)=&gt;{if(!toolbar)return[{name:section,items:[button]}];return JSON.parse(JSON.stringify(toolbar)).map((item=&gt;(item.name===section&amp;&amp;item.items.push(button),item)))};_exports.addToolbarButtons=(toolbar,section,buttons)=&gt;{if(!toolbar)return[{name:section,items:buttons}];return JSON.parse(JSON.stringify(toolbar)).map((item=&gt;(item.name===section&amp;&amp;buttons.forEach((button=&gt;item.items.push(button))),item)))};_exports.addToolbarSection=function(toolbar,name,relativeTo){let append=!(arguments.length&gt;3&amp;&amp;void 0!==arguments[3])||arguments[3];const newSection={name:name,items:[]},sectionInserted=toolbar.some(((section,index)=&gt;section.name===relativeTo&amp;&amp;(append?toolbar.splice(index+1,0,newSection):toolbar.splice(index,0,newSection),!0)));return sectionInserted||(append?toolbar.push(newSection):toolbar.unshift(newSection)),toolbar};_exports.addMenubarItem=(menubar,section,menuitem)=&gt;{if(!menubar){({})[section]={title:section,items:menuitem}}const mutatedMenubar=JSON.parse(JSON.stringify(menubar));return Array.from(Object.entries(mutatedMenubar)).forEach((_ref=&gt;{let[name,menu]=_ref;name===section&amp;&amp;(menu.items="".concat(menu.items," ").concat(menuitem))})),mutatedMenubar};_exports.addContextmenuItem=function(contextmenu){const contextmenuItems=(null!=contextmenu?contextmenu:"").split(" ");for(var _len=arguments.length,menuitems=new Array(_len&gt;1?_len-1:0),_key=1;_key&lt;_len;_key++)menuitems[_key-1]=arguments[_key];return contextmenuItems.concat(menuitems).filter((item=&gt;""!==item)).join(" ")};_exports.addQuickbarsToolbarItem=function(toolbar){return toolbar};const getDocumentationLink=pluginName=&gt;"https://docs.moodle.org/en/editor_tiny/".concat(pluginName);_exports.getDocumentationLink=getDocumentationLink;_exports.getPluginMetadata=async function(component,pluginName){let url=arguments.length&gt;2&amp;&amp;void 0!==arguments[2]?arguments[2]:null;const name=await(0,_str.get_string)("helplinktext",component);return{getMetadata:()=&gt;({name:name,url:null!=url?url:getDocumentationLink(pluginName)})}};_exports.ensureEditorIsValid=editor=&gt;editor.getElement().isConnected?editor:null;_exports.removeToolbarButton=(toolbar,section,button)=&gt;{if(!toolbar)return[{name:section,items:[button]}];return JSON.parse(JSON.stringify(toolbar)).map((item=&gt;(item.name===section&amp;&amp;item.items.splice(item.items.indexOf(button),1),item)))};_exports.removeToolbarButtons=(toolbar,section,buttons)=&gt;{if(!toolbar)return[{name:section,items:buttons}];return JSON.parse(JSON.stringify(toolbar)).map((item=&gt;(item.name===section&amp;&amp;buttons.forEach((button=&gt;item.items.splice(item.items.indexOf(button),1))),item)))};_exports.removeSubmenuItem=async(editor,section,submenuitem)=&gt;{const menuItems=editor.ui.registry.getAll().menuItems[section],submenuitemtitle=await(0,_str.get_string)(submenuitem,"editor_tiny");menuItems&amp;&amp;editor.ui.registry.addNestedMenuItem(section,{text:menuItems.text,getSubmenuItems:()=&gt;{let newSubmenu=[];return menuItems.getSubmenuItems().forEach((item=&gt;{item.text.trim()!=submenuitemtitle&amp;&amp;newSubmenu.push(item)})),newSubmenu}})};_exports.removeMenubarItem=(menubar,section,menuitem)=&gt;(menubar[section].items=menubar[section].items.replace(menuitem,""),menubar);_exports.removeMenubarItems=(menubar,section,menuitems)=&gt;{const regexPattern=new RegExp(menuitems.join("|"),"ig");return menubar[section].items=menubar[section].items.replace(regexPattern,""),menubar}}));
define("editor_tiny/editor",["exports","jquery","core/pending","./defaults","./loader","./options","./utils"],(function(_exports,_jquery,_pending,_defaults,_loader,Options,_utils){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.setupForTarget=_exports.setupForElementId=_exports.getInstanceForElementId=_exports.getInstanceForElement=_exports.getAllInstances=_exports.configureDefaultEditor=void 0,_jquery=_interopRequireDefault(_jquery),_pending=_interopRequireDefault(_pending),Options=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}(Options);var _systemImportTransformerGlobalIdentifier="undefined"!=typeof window?window:"undefined"!=typeof self?self:"undefined"!=typeof global?global:{};function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}const instanceMap=new Map;let defaultOptions={};const importPluginList=async pluginList=&gt;{const pluginHandlers=await Promise.all(pluginList.map((pluginPath=&gt;-1===pluginPath.indexOf("/")?Promise.resolve(pluginPath):"function"==typeof _systemImportTransformerGlobalIdentifier.define&amp;&amp;_systemImportTransformerGlobalIdentifier.define.amd?new Promise((function(resolve,reject){_systemImportTransformerGlobalIdentifier.require([pluginPath],resolve,reject)})):"undefined"!=typeof module&amp;&amp;module.exports&amp;&amp;"undefined"!=typeof require||"undefined"!=typeof module&amp;&amp;module.component&amp;&amp;_systemImportTransformerGlobalIdentifier.require&amp;&amp;"component"===_systemImportTransformerGlobalIdentifier.require.loader?Promise.resolve(require(pluginPath)):Promise.resolve(_systemImportTransformerGlobalIdentifier[pluginPath])))),pluginNames=pluginHandlers.map((pluginConfig=&gt;"string"==typeof pluginConfig?pluginConfig:Array.isArray(pluginConfig)?pluginConfig[0]:null)).filter((value=&gt;value));return{pluginNames:pluginNames,pluginConfig:pluginHandlers.map((pluginConfig=&gt;Array.isArray(pluginConfig)?pluginConfig[1]:null)).filter((value=&gt;value))}};_exports.getAllInstances=()=&gt;new Map(instanceMap.entries());_exports.getInstanceForElementId=elementId=&gt;getInstanceForElement(document.getElementById(elementId));const getInstanceForElement=element=&gt;{const instance=instanceMap.get(element);if(!instance||!instance.removed)return instance;instanceMap.remove(element)};_exports.getInstanceForElement=getInstanceForElement;_exports.setupForElementId=_ref=&gt;{let{elementId:elementId,options:options}=_ref;const target=document.getElementById(elementId);return setupForTarget(target,options)};(async()=&gt;{const lang=document.querySelector("html").lang,[tinyMCE,langData]=await Promise.all([(0,_loader.getTinyMCE)(),(language=lang,fetch("".concat(M.cfg.wwwroot,"/lib/editor/tiny/lang.php/").concat(M.cfg.langrev,"/").concat(language)).then((response=&gt;response.json())))]);var language;tinyMCE.addI18n(lang,langData)})();const getPlugins=function(){let{plugins:plugins=null}=arguments.length&gt;0&amp;&amp;void 0!==arguments[0]?arguments[0]:{};return plugins||(defaultOptions.plugins?defaultOptions.plugins:{})},getStandardConfig=(target,tinyMCE,options,plugins)=&gt;{const lang=document.querySelector("html").lang,config=Object.assign({},(0,_defaults.getDefaultConfiguration)(),{base_url:_loader.baseUrl,target:target,min_height:175,height:target.clientHeight||"auto",language:lang,content_css:[options.css],convert_urls:!1,a11y_advanced_options:!0,extended_valid_elements:"script[*]",xss_sanitization:!1,quickbars_insert_toolbar:"",block_formats:"Paragraph=p; Heading 3=h3; Heading 4=h4; Heading 5=h5; Heading 6=h6;",plugins:[...plugins],skin:"oxide",promotion:!1,branding:options.branding,table_header_type:"sectionCells",entity_encoding:"raw",setup:editor=&gt;{Options.register(editor,options),editor.on("PreInit",(function(){this.contentWindow=this.iframeElement.contentWindow})),editor.on("init",(function(){(0,_utils.removeSubmenuItem)(editor,"align","tiny:justify"),((editor,target)=&gt;{let expectedEditingAreaHeight=0;expectedEditingAreaHeight=target.clientHeight?target.clientHeight:target.rows*(parseFloat(window.getComputedStyle(target).lineHeight)||22),editor.getContainer().querySelector(".tox-sidebar-wrap").clientHeight&lt;expectedEditingAreaHeight&amp;&amp;(editor.getContainer().querySelector(".tox-sidebar-wrap").style.height="".concat(expectedEditingAreaHeight,"px"))})(editor,target)})),editor.on("PostRender",(function(){options.nestedmenu&amp;&amp;(editor=&gt;{const container=editor.getContainer(),menuContainer=document.querySelector("body &gt; .tox.tox-tinymce-aux");container.parentNode.appendChild(menuContainer)})(editor)})),editor.on("FullscreenStateChanged",(function(e){(params=&gt;{params.open&amp;&amp;(document.querySelector(".tox-fullscreen").style.overflow="unset");const pageWithDrawers=document.querySelector("#page.drawers");pageWithDrawers&amp;&amp;(pageWithDrawers.style.overflow=params.open?"unset":"")})({open:e.state})})),editor.on("OpenWindow CloseWindow",(function(e){(params=&gt;{if(params.browser.isSafari()&amp;&amp;!params.fsplugin.isFullscreen()){const pageWithDrawers=document.querySelector("#page.drawers");pageWithDrawers&amp;&amp;(pageWithDrawers.style.overflow=params.open?"unset":"")}})({browser:tinyMCE.Env.browser,fsplugin:editor.plugins.fullscreen,open:"openwindow"==e.type})}))}});return config.toolbar=(0,_utils.addToolbarSection)(config.toolbar,"content","formatting",!0),config.toolbar=(0,_utils.addToolbarButton)(config.toolbar,"content","link"),config.toolbar=(0,_utils.addToolbarSection)(config.toolbar,"directionality","alignment",!0),config.toolbar=(0,_utils.addToolbarButtons)(config.toolbar,"directionality",["ltr","rtl"]),config.toolbar=(0,_utils.removeToolbarButton)(config.toolbar,"alignment","alignjustify"),config},getEditorConfiguration=(target,tinyMCE,options,pluginValues)=&gt;{const{pluginNames:pluginNames,pluginConfig:pluginConfig}=pluginValues,instanceConfig=getStandardConfig(target,tinyMCE,options,pluginNames);return instanceConfig.menu.file&amp;&amp;(instanceConfig.menu.file.items=""),instanceConfig.menu.format&amp;&amp;(instanceConfig.menu.format.items=instanceConfig.menu.format.items.replace(/forecolor ?/,"").replace(/backcolor ?/,"").replace(/fontfamily ?/,"").replace(/fontsize ?/,"").replace(/styles ?/,"").replaceAll(/\| *\|/g,"|")),instanceConfig.quickbars_selection_toolbar=instanceConfig.quickbars_selection_toolbar.replace("h2 h3","h3 h4 h5 h6"),pluginConfig.filter((pluginConfig=&gt;"function"==typeof pluginConfig.configure)).forEach((pluginConfig=&gt;{const pluginInstanceOverride=pluginConfig.configure(instanceConfig,options);Object.assign(instanceConfig,pluginInstanceOverride)})),Object.assign(instanceConfig,Options.getInitialPluginConfiguration(options)),instanceConfig},setupForTarget=async function(target){let options=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]?arguments[1]:{};const instance=getInstanceForElement(target);if(instance)return Promise.resolve(instance);const pendingPromise=new _pending.default("editor_tiny/editor:setupForTarget"),plugins=getPlugins(options),[tinyMCE,pluginValues]=await Promise.all([(0,_loader.getTinyMCE)(),importPluginList(Object.keys(plugins))]);tinyMCE.get().filter((editor=&gt;!editor.getElement().isConnected)).forEach((editor=&gt;{editor.remove()}));const existingEditor=tinyMCE.EditorManager.get(target.id);if(existingEditor){if(existingEditor.getElement()===target)return pendingPromise.resolve(),Promise.resolve(existingEditor);throw pendingPromise.resolve(),new Error("TinyMCE instance already exists for different target with same ID")}const instanceConfig=getEditorConfiguration(target,tinyMCE,options,pluginValues),[editor]=await tinyMCE.init(instanceConfig);return target.dataset.fieldtype="editor",instanceMap.set(target,editor),editor.on("remove",(_ref2=&gt;{let{target:target}=_ref2;instanceMap.delete(target.targetElm),target.targetElm.dataset.fieldtype=null})),target.form&amp;&amp;(0,_jquery.default)(target.form).on("submit",(()=&gt;{editor.save()})),editor.on("blur",(()=&gt;{editor.save()})),pendingPromise.resolve(),editor};_exports.setupForTarget=setupForTarget;_exports.configureDefaultEditor=function(){let options=arguments.length&gt;0&amp;&amp;void 0!==arguments[0]?arguments[0]:{};defaultOptions=options}}));
define("format_flexsections/local/courseindex/drawer",["exports","core_courseformat/local/courseindex/drawer","core_courseformat/courseeditor","format_flexsections/local/courseeditor/exporter"],(function(_exports,_drawer,_courseeditor,_exporter){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Course format component
   *
   * @module     format_flexsections/local/courseindex/drawer
   * @copyright  2022 Marina Glancy
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_drawer=_interopRequireDefault(_drawer),_exporter=_interopRequireDefault(_exporter);class Drawer extends _drawer.default{create(){this.name="courseindex-drawer-flexsections"}static init(target,selectors){const courseEditor=(0,_courseeditor.getCurrentCourseEditor)();return courseEditor.getExporter=()=&gt;new _exporter.default(courseEditor),new Drawer({element:document.getElementById(target),reactive:courseEditor,selectors:selectors})}}return _exports.default=Drawer,_exports.default}));
define("format_flexsections/local/courseindex/placeholder",["exports","core/templates","core_courseformat/courseeditor","core_courseformat/local/courseindex/placeholder","format_flexsections/local/courseeditor/exporter"],(function(_exports,_templates,_courseeditor,_placeholder,_exporter){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Course index placeholder replacer.
   *
   * @module     format_flexsections/local/courseindex/placeholder
   * @copyright  2022 Marina Glancy
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_templates=_interopRequireDefault(_templates),_placeholder=_interopRequireDefault(_placeholder),_exporter=_interopRequireDefault(_exporter);class Component extends _placeholder.default{static init(target,selectors){const courseEditor=(0,_courseeditor.getCurrentCourseEditor)();return courseEditor.getExporter=()=&gt;new _exporter.default(courseEditor),new Component({element:document.getElementById(target),reactive:courseEditor,selectors:selectors})}async loadTemplateContent(state){const data=this.reactive.getExporter().course(state);try{const{html:html,js:js}=await _templates.default.renderForPromise("format_flexsections/local/courseindex/courseindex",data);_templates.default.replaceNode(this.element,html,js),this.pendingContent.resolve(),this.reactive.setStorageValue("courseIndex",{html:html,js:js})}catch(error){throw this.pendingContent.resolve(error),error}}}return _exports.default=Component,_exports.default}));
define("format_flexsections/local/courseindex/courseindex",["exports","core_courseformat/courseeditor","core_courseformat/local/courseindex/courseindex","format_flexsections/local/courseeditor/exporter"],(function(_exports,_courseeditor,_courseindex,_exporter){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Course index main component.
   *
   * @module     format_flexsections/local/courseindex/courseindex
   * @copyright  2022 Marina Glancu
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_courseindex=_interopRequireDefault(_courseindex),_exporter=_interopRequireDefault(_exporter);class Component extends _courseindex.default{static init(target,selectors){const courseEditor=(0,_courseeditor.getCurrentCourseEditor)();return courseEditor.getExporter=()=&gt;new _exporter.default(courseEditor),new Component({element:document.getElementById(target),reactive:courseEditor,selectors:selectors})}create(descriptor){super.create(descriptor),this.name="course_format_flexsections_courseindex",this.selectors.COURSE_SUBSECTIONLIST="[data-for='subsectionlist']"}getWatchers(){let res=super.getWatchers();return res.push({watch:"course.hierarchy:updated",handler:this._refreshCourseSectionlist}),res}_refreshCourseSectionlist(_ref){var _element$hierarchy,_element$sectionlist;let{element:element}=_ref;const hierarchy=null!==(_element$hierarchy=element.hierarchy)&amp;&amp;void 0!==_element$hierarchy?_element$hierarchy:[];let dettachedSections=[];for(let i=0;i&lt;hierarchy.length;i++){const listparent=this.getElement(this.selectors.COURSE_SUBSECTIONLIST+"[data-parent='".concat(hierarchy[i].id,"']"));this._fixOrderFlexsections(listparent,hierarchy[i].children,dettachedSections)}this._fixOrderFlexsections(this.element,null!==(_element$sectionlist=element.sectionlist)&amp;&amp;void 0!==_element$sectionlist?_element$sectionlist:[],dettachedSections)}_refreshSectionCmlist(_ref2){var _element$cmlist;let{element:element}=_ref2;const cmlist=null!==(_element$cmlist=element.cmlist)&amp;&amp;void 0!==_element$cmlist?_element$cmlist:[],listparent=this.getElement(this.selectors.SECTION_CMLIST,element.id);listparent&amp;&amp;this._fixOrder(listparent,cmlist,this.cms)}async _fixOrderFlexsections(container,neworder,dettachedelements){if(void 0!==container&amp;&amp;container){for(container.classList.remove("hidden"),neworder.forEach(((itemid,index)=&gt;{var _this$getElement;let item=null!==(_this$getElement=this.getElement(this.selectors.SECTION,itemid))&amp;&amp;void 0!==_this$getElement?_this$getElement:dettachedelements[itemid];if(void 0===item)return;const currentitem=container.children[index];void 0!==currentitem?currentitem!==item&amp;&amp;container.insertBefore(item,currentitem):container.append(item)}));container.children.length&gt;neworder.length;){var _lastchild$dataset$id,_lastchild$dataset;const lastchild=container.lastChild;dettachedelements[null!==(_lastchild$dataset$id=null==lastchild||null===(_lastchild$dataset=lastchild.dataset)||void 0===_lastchild$dataset?void 0:_lastchild$dataset.id)&amp;&amp;void 0!==_lastchild$dataset$id?_lastchild$dataset$id:0]=lastchild,container.removeChild(lastchild)}neworder.length||container.classList.add("hidden")}}async _createSection(_ref3){var _this$getElement2;let{state:state,element:element}=_ref3;const sectionItem=null!==(_this$getElement2=this.getElement("section",element.id))&amp;&amp;void 0!==_this$getElement2?_this$getElement2:this._createFakeSection(this.element,element.id);const data=this.reactive.getExporter().section(state,element),newelement=(await this.renderComponent(sectionItem,"format_flexsections/local/courseindex/section",data)).getElement();this.sections[element.id]=newelement,sectionItem.parentNode.replaceChild(newelement,sectionItem)}_createFakeSection(container,sectionid){const fakeelement=document.createElement("div");return container.appendChild(fakeelement),fakeelement.classList.add("bg-pulse-grey","w-100"),fakeelement.dataset.for="section",fakeelement.dataset.id=sectionid,fakeelement.innerHTML="&amp;nbsp;",fakeelement}}return _exports.default=Component,_exports.default}));
define("format_flexsections/local/courseindex/section",["exports","core_courseformat/local/courseindex/section"],(function(_exports,_section){var obj;
/**
   * Course index section component.
   *
   * This component is used to control specific course section interactions like drag and drop.
   *
   * @module     format_flexsections/local/courseindex/section
   * @copyright  2022 Marina Glancy
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_section=(obj=_section)&amp;&amp;obj.__esModule?obj:{default:obj};class Component extends _section.default{static init(target,selectors){return new Component({element:document.getElementById(target),selectors:selectors})}configDragDrop(sectionitem){sectionitem.draggable=!1,super.configDragDrop(sectionitem)}}return _exports.default=Component,_exports.default}));
define("format_flexsections/local/content",["exports","core_courseformat/local/content","core_courseformat/courseeditor","format_flexsections/local/content/section","core_courseformat/local/content/section/cmitem","format_flexsections/local/courseeditor/mutations","format_flexsections/local/content/actions","format_flexsections/local/courseeditor/exporter"],(function(_exports,_content,_courseeditor,_section,_cmitem,_mutations,_actions,_exporter){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Course format component
   *
   * @module     format_flexsections/local/content
   * @copyright  2022 Marina Glancy
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_content=_interopRequireDefault(_content),_section=_interopRequireDefault(_section),_cmitem=_interopRequireDefault(_cmitem),_mutations=_interopRequireDefault(_mutations),_actions=_interopRequireDefault(_actions),_exporter=_interopRequireDefault(_exporter);class FlexsectionComponent extends _content.default{static init(target,selectors,sectionReturn){var _courseEditor$mutatio,_courseEditor$mutatio2;const courseEditor=(0,_courseeditor.getCurrentCourseEditor)();courseEditor.getExporter=()=&gt;new _exporter.default(courseEditor);let legacyActivityAction=null!==(_courseEditor$mutatio=courseEditor.mutations.legacyActivityAction)&amp;&amp;void 0!==_courseEditor$mutatio?_courseEditor$mutatio:null,legacySectionAction=null!==(_courseEditor$mutatio2=courseEditor.mutations.legacySectionAction)&amp;&amp;void 0!==_courseEditor$mutatio2?_courseEditor$mutatio2:null;return courseEditor.setMutations(new _mutations.default),courseEditor.addMutations({...legacyActivityAction?{legacyActivityAction:legacyActivityAction}:{},...legacySectionAction?{legacySectionAction:legacySectionAction}:{}}),new FlexsectionComponent({element:document.getElementById(target),reactive:courseEditor,selectors:selectors,sectionReturn:sectionReturn})}create(descriptor){super.create(descriptor),this.name="course_format_flexsections",this.selectors.COURSE_SUBSECTIONLIST="[data-for='course_subsectionlist']"}stateReady(state){super.stateReady(state),this.reactive.supportComponents&amp;&amp;this.reactive.isEditing&amp;&amp;new _actions.default(this),state.course.accordion&amp;&amp;(this._ensureOnlyOneSectionIsExpanded(state),window.addEventListener("hashchange",this._hashHandler.bind(this)))}_ensureOnlyOneSectionIsExpanded(state){const isExpanded=sectionInfo=&gt;!sectionInfo.showaslink&amp;&amp;!sectionInfo.contentcollapsed,hasExpandedChildren=sectionInfo=&gt;{var _sectionInfo$children;return(null!==(_sectionInfo$children=sectionInfo.children)&amp;&amp;void 0!==_sectionInfo$children?_sectionInfo$children:[]).some((s=&gt;isExpanded(s)))};let firstExpandedSection=null;for(let sectionInfo of this._getSectionsWithCollapse(state))firstExpandedSection||!isExpanded(sectionInfo)||hasExpandedChildren(sectionInfo)||(firstExpandedSection=sectionInfo);if(firstExpandedSection){const sectionitem=this.getElement(this.selectors.SECTION,firstExpandedSection.id);this._collapseAllSectionsExceptFor(sectionitem,!1)}}getWatchers(){let res=super.getWatchers();return res.push({watch:"course.hierarchy:updated",handler:this._refreshCourseHierarchy}),res.push({watch:"section.showaslink:updated",handler:this._reloadSection}),res}_refreshCourseHierarchy(_ref){var _element$hierarchy;let{element:element}=_ref;const hierarchy=null!==(_element$hierarchy=element.hierarchy)&amp;&amp;void 0!==_element$hierarchy?_element$hierarchy:[],createSection=this._createSectionItem.bind(this);for(let i=0;i&lt;hierarchy.length;i++){const sectionlist=hierarchy[i].children,listparent=this.getElement(this.selectors.COURSE_SUBSECTIONLIST+"[data-parent='".concat(hierarchy[i].id,"']"));listparent&amp;&amp;this._fixOrder(listparent,sectionlist,this.selectors.SECTION,this.dettachedSections,createSection)}}_indexContents(){this._scanIndex(this.selectors.SECTION,this.sections,(item=&gt;new _section.default(item))),this._scanIndex(this.selectors.CM,this.cms,(item=&gt;new _cmitem.default(item)))}_sectionTogglers(event){const sectionlink=event.target.closest(this.selectors.TOGGLER),closestCollapse=event.target.closest(this.selectors.COLLAPSE),isChevron=null==closestCollapse?void 0:closestCollapse.closest(this.selectors.SECTION_ITEM);if(sectionlink||isChevron){var _toggler$classList$co;const section=event.target.closest(this.selectors.SECTION),toggler=section.querySelector(this.selectors.COLLAPSE),isCollapsed=null!==(_toggler$classList$co=null==toggler?void 0:toggler.classList.contains(this.classes.COLLAPSED))&amp;&amp;void 0!==_toggler$classList$co&amp;&amp;_toggler$classList$co;if(isChevron||isCollapsed){const sectionId=parseInt(section.getAttribute("data-id"));this.reactive.dispatch("sectionContentCollapsed",[sectionId],!isCollapsed)}isCollapsed&amp;&amp;this.reactive.stateManager.state.course.accordion&amp;&amp;this._collapseAllSectionsExceptFor(section)}}_collapseAllSectionsExceptFor(section){let scrollToSection=!(arguments.length&gt;1&amp;&amp;void 0!==arguments[1])||arguments[1];const sectionNumber=parseInt(section.getAttribute("data-sectionid")),leaveOpen=[...this._findAllParents(sectionNumber),sectionNumber];sectionNumber&gt;0&amp;&amp;leaveOpen.includes(0)&amp;&amp;leaveOpen.splice(leaveOpen.indexOf(0),1);const sectionIds=this._getSectionsWithCollapse(this.reactive.stateManager.state).filter((s=&gt;!leaveOpen.includes(parseInt(s.section)))).map((s=&gt;s.id));if(this.reactive.dispatch("sectionContentCollapsed",sectionIds,!0),scrollToSection){const toggler=section.querySelector(this.selectors.COLLAPSE);setTimeout((()=&gt;{toggler.scrollIntoView({behavior:"smooth",block:"nearest"})}),500)}}_refreshAllSectionsToggler(state){const target=this.getElement(this.selectors.TOGGLEALL);if(!target)return;let allcollapsed=!0;const mainSection=this._mainSection(),sections=this._getSectionsWithCollapse(state);for(let i in sections)parseInt(sections[i].parent)===mainSection&amp;&amp;(allcollapsed=allcollapsed&amp;&amp;sections[i].contentcollapsed);allcollapsed?(target.classList.add(this.classes.COLLAPSED),target.setAttribute("aria-expanded",!1)):(target.classList.remove(this.classes.COLLAPSED),target.setAttribute("aria-expanded",!0))}_allSectionToggler(event){event.preventDefault();const isAllCollapsed=event.target.closest(this.selectors.TOGGLEALL).classList.contains(this.classes.COLLAPSED),sections=this._getSectionsWithCollapse();let ids=[];for(let i in sections)ids.push(sections[i].id);this.reactive.dispatch("sectionContentCollapsed",ids,!isAllCollapsed)}_mainSection(){return parseInt(this.element.getAttribute("data-flexsections-mainsection"))}_getSectionsWithCollapse(state){void 0===state&amp;&amp;(state=this.reactive.stateManager.state);const mainSection=this._mainSection();let parents={};parents["".concat(mainSection)]="".concat(mainSection);let displayedSections=[];return state.section.forEach((section=&gt;{var _this$getElement;const sectionNumber=parseInt(section.number);(null===(_this$getElement=this.getElement(this.selectors.SECTION,section.id))||void 0===_this$getElement?void 0:_this$getElement.querySelector(this.selectors.COLLAPSE))&amp;&amp;"".concat(section.parent)in parents&amp;&amp;!section.showaslink&amp;&amp;(parents["".concat(sectionNumber)]="".concat(sectionNumber),displayedSections.push(section))})),displayedSections}_findAllParents(thisSectionNumber){if(thisSectionNumber===this._mainSection())return[];let section=this.reactive.stateManager.state.section.find((section=&gt;parseInt(section.number)===thisSectionNumber));if(section&amp;&amp;void 0!==section.parent){const parent=parseInt(section.parent);return[...this._findAllParents(parent),parent]}return[]}_hashHandler(){var _window$location$hash;if((null!==(_window$location$hash=window.location.hash)&amp;&amp;void 0!==_window$location$hash?_window$location$hash:"").length&lt;=1)return;const target=document.querySelector("".concat(window.location.hash).concat(this.selectors.SECTION));if(!target)return;if(target.querySelector(this.selectors.COLLAPSE)){const sectionNumber=parseInt(target.getAttribute("data-sectionid")),toExpand=[...this._findAllParents(sectionNumber),sectionNumber].filter((s=&gt;s&gt;0)),sectionIds=this._getSectionsWithCollapse(this.reactive.stateManager.state).filter((s=&gt;toExpand.includes(parseInt(s.section)))).map((s=&gt;s.id));this.reactive.dispatch("sectionContentCollapsed",sectionIds,!1),this._collapseAllSectionsExceptFor(target)}}}return _exports.default=FlexsectionComponent,_exports.default}));
define("format_flexsections/local/courseeditor/mutations",["exports","core_courseformat/local/courseeditor/mutations"],(function(_exports,_mutations){var obj;
/**
   * Mutations
   *
   * @module     format_flexsections/local/courseeditor/mutations
   * @copyright  2022 Marina Glancy
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_mutations=(obj=_mutations)&amp;&amp;obj.__esModule?obj:{default:obj};class _default extends _mutations.default{async sectionMergeUp(stateManager,sectionId){this.sectionLock(stateManager,[sectionId],!0);const course=stateManager.get("course"),updates=await this._callEditWebservice("section_mergeup",course.id,[],sectionId);stateManager.processUpdates(updates),this.sectionLock(stateManager,[sectionId],!1)}async addSubSection(stateManager,parentSectionId){const course=stateManager.get("course"),updates=await this._callEditWebservice("section_add_subsection",course.id,[],parentSectionId);stateManager.processUpdates(updates)}async insertSubSection(stateManager,parentSectionId){const course=stateManager.get("course"),updates=await this._callEditWebservice("section_insert_subsection",course.id,[],parentSectionId);stateManager.processUpdates(updates)}async sectionSwitchCollapsed(stateManager,sectionId){const course=stateManager.get("course"),updates=await this._callEditWebservice("section_switch_collapsed",course.id,[sectionId]);stateManager.processUpdates(updates)}}return _exports.default=_default,_exports.default}));
define("format_flexsections/local/courseeditor/exporter",["exports","core_courseformat/local/courseeditor/exporter"],(function(_exports,_exporter){var obj;
/**
   * Overriding default course format exporter
   *
   * @module     format_flexsections/local/courseeditor/exporter
   * @copyright  2022 Marina Glancy
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_exporter=(obj=_exporter)&amp;&amp;obj.__esModule?obj:{default:obj};class _default extends _exporter.default{section(state,sectioninfo){const children=sectioninfo.children,section=super.section(state,sectioninfo);if(section.children=[],children&amp;&amp;children.length)for(let i=0;i&lt;children.length;i++)section.children.push(this.section(state,children[i]));return section}course(state){const course=super.course(state);return course.maxsectiondepth=state.course.maxsectiondepth,course}allItemsArray(state){var _state$course$section;const items=[],sectionlist=null!==(_state$course$section=state.course.sectionlist)&amp;&amp;void 0!==_state$course$section?_state$course$section:[],addCms=sectioninfo=&gt;{var _sectioninfo$cmlist;(null!==(_sectioninfo$cmlist=sectioninfo.cmlist)&amp;&amp;void 0!==_sectioninfo$cmlist?_sectioninfo$cmlist:[]).forEach((cmid=&gt;{const cminfo=state.cm.get(cmid);items.push({type:"cm",id:cminfo.id,url:cminfo.url})}))},addChildItems=children=&gt;{if(children&amp;&amp;children.length)for(let i=0;i&lt;children.length;i++){const child=children[i];items.push({type:"section",id:child.id,url:child.sectionurl}),addCms(child),addChildItems(child.children)}};return sectionlist.forEach((sectionid=&gt;{const sectioninfo=state.section.get(sectionid);items.push({type:"section",id:sectioninfo.id,url:sectioninfo.sectionurl}),addCms(sectioninfo),addChildItems(sectioninfo.children)})),items}}return _exports.default=_default,_exports.default}));
define("format_flexsections/local/content/actions",["exports","core/reactive","core/str","core/notification","core/modal_factory","core/templates","core/pending"],(function(_exports,_reactive,_str,_notification,_modal_factory,_templates,_pending){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Actions
   *
   * @module     format_flexsections/local/content/actions
   * @copyright  2022 Marina Glancy
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_notification=_interopRequireDefault(_notification),_modal_factory=_interopRequireDefault(_modal_factory),_templates=_interopRequireDefault(_templates),_pending=_interopRequireDefault(_pending);class _default extends _reactive.BaseComponent{create(){this.name="content_actions_flexsections",this.selectors={ACTIONLINK:"[data-action-flexsections]",SECTIONLINK:"[data-for='section']"},this.classes={DISABLED:"disabled"}}stateReady(state){super.stateReady(state),this.addEventListener(this.element,"click",this._dispatchClick)}_dispatchClick(event){const target=event.target.closest(this.selectors.ACTIONLINK);if(!target)return;if(target.classList.contains(this.classes.DISABLED))return void event.preventDefault();const methodName=this._actionMethodName(target.getAttribute("data-action-flexsections"));void 0!==this[methodName]&amp;&amp;this[methodName](target,event)}_actionMethodName(name){const requestName=name.charAt(0).toUpperCase()+name.slice(1);return"_request".concat(requestName)}_requestDelete(target,event){var _sectionInfo$cmlist;const sectionId=target.dataset.id;if(!sectionId)return;event.preventDefault();const sectionInfo=this.reactive.get("section",sectionId);(null!==(_sectionInfo$cmlist=sectionInfo.cmlist)&amp;&amp;void 0!==_sectionInfo$cmlist?_sectionInfo$cmlist:[]).length||sectionInfo.hassummary||sectionInfo.rawtitle||sectionInfo.children.length?(0,_str.get_strings)([{key:"confirm",component:"moodle"},{key:"confirmdelete",component:"format_flexsections"},{key:"yes",component:"moodle"},{key:"no",component:"moodle"}]).done((strings=&gt;{_notification.default.confirm(strings[0],strings[1],strings[2],strings[3],(()=&gt;{this.reactive.dispatch("sectionDelete",[sectionId])}))})).fail(_notification.default.exception):this.reactive.dispatch("sectionDelete",[sectionId])}_requestMergeup(target,event){var _sectionInfo$cmlist2;const sectionId=target.dataset.id;if(!sectionId)return;event.preventDefault();const sectionInfo=this.reactive.get("section",sectionId);(null!==(_sectionInfo$cmlist2=sectionInfo.cmlist)&amp;&amp;void 0!==_sectionInfo$cmlist2?_sectionInfo$cmlist2:[]).length||sectionInfo.hassummary||sectionInfo.rawtitle||sectionInfo.children.length?(0,_str.get_strings)([{key:"confirm",component:"moodle"},{key:"confirmmerge",component:"format_flexsections"},{key:"yes",component:"moodle"},{key:"no",component:"moodle"}]).done((strings=&gt;{_notification.default.confirm(strings[0],strings[1],strings[2],strings[3],(()=&gt;{this.reactive.dispatch("sectionMergeUp",sectionId)}))})).fail(_notification.default.exception):this.reactive.dispatch("sectionMergeUp",sectionId)}_requestMoveSection(target,event){event.preventDefault();const sectionId=target.dataset.id,sectionInfo=this.reactive.get("section",sectionId),data=this.reactive.getExporter().course(this.reactive.state);data.sectiontitle=sectionInfo.title,1===data.sections.length&amp;&amp;"1"==="".concat(data.sections[0].singlesection)&amp;&amp;(data.singlesectionmode=1,data.sections[0].contentcollapsed=!1);const buildParents=(sections,parents)=&gt;{for(var i in sections)sections[i].parents=parents,sections[i].aftersectionid=i&gt;0?sections[i-1].id:0,buildParents(sections[i].children,parents+","+sections[i].id),sections[i].lastchildid=sections[i].children.length?sections[i].children[sections[i].children.length-1].id:0};buildParents(data.sections,""),data.lastchildid=data.sections.length?data.sections[data.sections.length-1].id:0,_modal_factory.default.create({type:_modal_factory.default.types.CANCEL,title:(0,_str.get_string)("movecoursesection","core"),large:!0,buttons:{cancel:(0,_str.get_string)("closebuttontitle","core")},removeOnClose:!0}).then((modal=&gt;(_templates.default.render("format_flexsections/local/content/movesection",data).then((body=&gt;(modal.setBody(body),this._setupMoveSection(modal,modal.getBody()[0],sectionId,data),null))).fail((()=&gt;null)),modal.show(),modal))).fail((()=&gt;null))}_requestMoveCm(target,event){event.preventDefault();const cmId=target.dataset.id;if(!cmId)return;const cmInfo=this.reactive.get("cm",cmId),data=this.reactive.getExporter().course(this.reactive.state);data.cmid=cmInfo.id,data.cmname=cmInfo.name,_modal_factory.default.create({type:_modal_factory.default.types.CANCEL,title:(0,_str.get_string)("movecoursemodule","core"),large:!0,buttons:{cancel:(0,_str.get_string)("closebuttontitle","core")},removeOnClose:!0}).then((modal=&gt;(_templates.default.render("format_flexsections/local/content/movecm",data).then((body=&gt;(modal.setBody(body),this._setupMoveCm(modal,modal.getBody()[0],cmId,data),null))).fail((()=&gt;null)),modal.show(),modal))).fail((()=&gt;null))}_setupMoveCm(modal,modalBody,cmId,data){let element=arguments.length&gt;4&amp;&amp;void 0!==arguments[4]?arguments[4]:null;modalBody.addEventListener("click",(event=&gt;{const target=event.target;if(!target.matches("a")||void 0===target.dataset.for||void 0===target.dataset.id)return;if(target.getAttribute("aria-disabled"))return;event.preventDefault();const targetSectionId="section"===target.dataset.for?target.dataset.id:0,targetCmId="cm"===target.dataset.for?target.dataset.id:0;this.reactive.dispatch("cmMove",[cmId],targetSectionId,targetCmId),this._destroyModal(modal,element)}))}_destroyModal(modal){let element=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]?arguments[1]:null;modal.hide();const pendingDestroy=new _pending.default("courseformat/actions:destroyModal");element&amp;&amp;element.focus(),setTimeout((()=&gt;{modal.destroy(),pendingDestroy.resolve()}),500)}_setupMoveSection(modal,modalBody,sectionId,data){let element=arguments.length&gt;4&amp;&amp;void 0!==arguments[4]?arguments[4]:null;const links=modalBody.querySelectorAll("".concat(this.selectors.SECTIONLINK));for(let i=0;i&lt;links.length;++i){const re=new RegExp(",".concat(sectionId,","),"g");(links[i].getAttribute("data-before")==="".concat(sectionId)||links[i].getAttribute("data-after")==="".concat(sectionId)||"".concat(links[i].getAttribute("data-parents"),",").match(re))&amp;&amp;this._disableLink(links[i]);const depth=("".concat(links[i].getAttribute("data-parents")).match(/,/g)||[]).length;data.maxsectiondepth&amp;&amp;depth&gt;=data.maxsectiondepth&amp;&amp;this._disableLink(links[i])}modalBody.addEventListener("click",(event=&gt;{const target=event.target;if(!target.matches("a")||"section"!==target.dataset.for||void 0===target.dataset.after)return;if(target.getAttribute("aria-disabled"))return;event.preventDefault();const afterId=parseInt(target.dataset.after),parentId=parseInt(target.dataset.parentid);this.reactive.dispatch("sectionMove",[sectionId],afterId||-parentId),this._destroyModal(modal,element)}))}_disableLink(element){element&amp;&amp;(element.style.pointerEvents="none",element.style.userSelect="none",element.classList.add("disabled"),element.setAttribute("aria-disabled",!0),element.addEventListener("click",(event=&gt;event.preventDefault())))}_requestAddSubSection(target,event){var _target$dataset$paren;event.preventDefault(),this.reactive.dispatch("addSubSection",parseInt(null!==(_target$dataset$paren=target.dataset.parentid)&amp;&amp;void 0!==_target$dataset$paren?_target$dataset$paren:0))}_requestInsertSubSection(target,event){var _target$dataset$paren2;event.preventDefault(),this.reactive.dispatch("insertSubSection",parseInt(null!==(_target$dataset$paren2=target.dataset.parentid)&amp;&amp;void 0!==_target$dataset$paren2?_target$dataset$paren2:0))}_requestSectionSwitchCollapsed(target,event){var _target$dataset$id;event.preventDefault(),this.reactive.dispatch("sectionSwitchCollapsed",null!==(_target$dataset$id=target.dataset.id)&amp;&amp;void 0!==_target$dataset$id?_target$dataset$id:0)}}return _exports.default=_default,_exports.default}));
define("format_flexsections/local/content/section",["exports","core_courseformat/local/content/section"],(function(_exports,_section){var obj;
/**
   * Course section format component.
   *
   * @module     format_flexsections/local/content/section
   * @copyright  2022 Marina Glancy
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_section=(obj=_section)&amp;&amp;obj.__esModule?obj:{default:obj};class _default extends _section.default{configDragDrop(headerComponent){super.configDragDrop(headerComponent),setTimeout((()=&gt;{"function"==typeof headerComponent.dragdrop.parent.getDraggableData&amp;&amp;headerComponent.dragdrop.setDraggable(!1)}),1500)}}return _exports.default=_default,_exports.default}));
define("format_grid/local/content",["exports","core_courseformat/local/content","core_courseformat/courseeditor","core/inplace_editable","core_courseformat/local/content/section","core_courseformat/local/content/section/cmitem","core_course/actions","core_courseformat/local/content/actions","core_course/events"],(function(_exports,_content,_courseeditor,_inplace_editable,_section,_cmitem,_actions,_actions2,CourseEvents){function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Grid format Course index main component.
   *
   * @module     format_grid/local/content
   * @class      format_grid/local/content
   * @copyright  2023 G J Barnard based upon work done by:
   * @copyright  2020 Ferran Recio &lt;ferran@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_content=_interopRequireDefault(_content),_inplace_editable=_interopRequireDefault(_inplace_editable),_section=_interopRequireDefault(_section),_cmitem=_interopRequireDefault(_cmitem),_actions=_interopRequireDefault(_actions),_actions2=_interopRequireDefault(_actions2),CourseEvents=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}(CourseEvents);class Component extends _content.default{create(descriptor){var _descriptor$sectionRe;this.name="grid_course_format",this.selectors={SECTION:"[data-for='section']",SECTION_ITEM:"[data-for='section_title']",SECTION_CMLIST:"[data-for='cmlist']",COURSE_SECTIONLIST:"[data-for='course_sectionlist']",CM:"[data-for='cmitem']",PAGE:"#page",ACTIVITYTAG:"li",SECTIONTAG:"li"},this.classes={ACTIVITY:"activity",STATEDREADY:"stateready",SECTION:"section"},this.dettachedCms={},this.dettachedSections={},this.sections={},this.cms={},this.sectionReturn=null!==(_descriptor$sectionRe=descriptor.sectionReturn)&amp;&amp;void 0!==_descriptor$sectionRe?_descriptor$sectionRe:0}static init(target,selectors,sectionReturn){return new Component({element:document.getElementById(target),reactive:(0,_courseeditor.getCurrentCourseEditor)(),selectors:selectors,sectionReturn:sectionReturn})}stateReady(){this._indexContents(),this.reactive.supportComponents&amp;&amp;(this.reactive.isEditing&amp;&amp;new _actions2.default(this),this.element.classList.add(this.classes.STATEDREADY)),this.addEventListener(this.element,CourseEvents.manualCompletionToggled,this._completionHandler),this.addEventListener(document.querySelector(this.selectors.PAGE),"scroll",this._scrollHandler)}getWatchers(){return this.reactive.sectionReturn=this.sectionReturn,this.reactive.supportComponents?[{watch:"cm.visible:updated",handler:this._reloadCm},{watch:"cm.stealth:updated",handler:this._reloadCm},{watch:"section.number:updated",handler:this._refreshSectionNumber},{watch:"transaction:start",handler:this._startProcessing},{watch:"course.sectionlist:updated",handler:this._refreshCourseSectionlist},{watch:"section.cmlist:updated",handler:this._refreshSectionCmlist},{watch:"state:updated",handler:this._indexContents},{watch:"cm.visible:updated",handler:this._reloadCm},{watch:"cm.sectionid:updated",handler:this._reloadCm}]:[]}_startProcessing(){this.dettachedCms={},this.dettachedSections={}}_completionHandler(_ref){let{detail:detail}=_ref;void 0!==detail&amp;&amp;this.reactive.dispatch("cmCompletion",[detail.cmid],detail.completed)}_scrollHandler(){const pageOffset=document.querySelector(this.selectors.PAGE).scrollTop,items=this.reactive.getExporter().allItemsArray(this.reactive.state);let pageItem=null;items.every((item=&gt;{const index="section"===item.type?this.sections:this.cms;if(void 0===index[item.id])return!0;const element=index[item.id].element;return"cm"!==item.type||item.url||this.reactive.isEditing?(pageItem=item,pageOffset&gt;=element.offsetTop):pageOffset&gt;=element.offsetTop})),pageItem&amp;&amp;this.reactive.dispatch("setPageItem",pageItem.type,pageItem.id)}_refreshSectionNumber(_ref2){let{element:element}=_ref2;const target=this.getElement(this.selectors.SECTION,element.id);if(!target)return;target.id="section-".concat(element.number),target.dataset.sectionid=element.number,target.dataset.number=element.number;const inplace=_inplace_editable.default.getInplaceEditable(target.querySelector(this.selectors.SECTION_ITEM));if(inplace){const currentvalue=inplace.getValue(),currentitemid=inplace.getItemId();""===inplace.getValue()&amp;&amp;(currentitemid!=element.id||currentvalue==element.rawtitle&amp;&amp;""!=element.rawtitle||inplace.setValue(element.rawtitle))}}_refreshSectionCmlist(_ref3){var _element$cmlist;let{element:element}=_ref3;const cmlist=null!==(_element$cmlist=element.cmlist)&amp;&amp;void 0!==_element$cmlist?_element$cmlist:[],section=this.getElement(this.selectors.SECTION,element.id),listparent=null==section?void 0:section.querySelector(this.selectors.SECTION_CMLIST),createCm=this._createCmItem.bind(this);listparent&amp;&amp;this._fixOrder(listparent,cmlist,this.selectors.CM,this.dettachedCms,createCm)}_refreshCourseSectionlist(_ref4){var _element$sectionlist;let{element:element}=_ref4;if(0!=this.reactive.sectionReturn)return;const sectionlist=null!==(_element$sectionlist=element.sectionlist)&amp;&amp;void 0!==_element$sectionlist?_element$sectionlist:[],listparent=this.getElement(this.selectors.COURSE_SECTIONLIST),createSection=this._createSectionItem.bind(this);listparent&amp;&amp;this._fixOrder(listparent,sectionlist,this.selectors.SECTION,this.dettachedSections,createSection)}_indexContents(){this._scanIndex(this.selectors.SECTION,this.sections,(item=&gt;new _section.default(item))),this._scanIndex(this.selectors.CM,this.cms,(item=&gt;new _cmitem.default(item)))}_scanIndex(selector,index,creationhandler){this.getElements("".concat(selector,":not([data-indexed])")).forEach((item=&gt;{var _item$dataset;null!=item&amp;&amp;null!==(_item$dataset=item.dataset)&amp;&amp;void 0!==_item$dataset&amp;&amp;_item$dataset.id&amp;&amp;(void 0!==index[item.dataset.id]&amp;&amp;index[item.dataset.id].unregister(),index[item.dataset.id]=creationhandler({...this,element:item}),item.dataset.indexed=!0)}))}_reloadCm(_ref5){let{element:element}=_ref5;const cmitem=this.getElement(this.selectors.CM,element.id);if(cmitem){_actions.default.refreshModule(cmitem,element.id).then((()=&gt;{this._indexContents()})).catch()}}_reloadSection(_ref6){let{element:element}=_ref6;const sectionitem=this.getElement(this.selectors.SECTION,element.id);if(sectionitem){_actions.default.refreshSection(sectionitem,element.id).then((()=&gt;{this._indexContents()})).catch()}}_createCmItem(container,cmid){const newItem=document.createElement(this.selectors.ACTIVITYTAG);return newItem.dataset.for="cmitem",newItem.dataset.id=cmid,newItem.id="module-".concat(cmid),newItem.classList.add(this.classes.ACTIVITY),container.append(newItem),this._reloadCm({element:this.reactive.get("cm",cmid)}),newItem}_createSectionItem(container,sectionid){const section=this.reactive.get("section",sectionid),newItem=document.createElement(this.selectors.SECTIONTAG);return newItem.dataset.for="section",newItem.dataset.id=sectionid,newItem.dataset.number=section.number,newItem.id="section-".concat(sectionid),newItem.classList.add(this.classes.SECTION),container.append(newItem),this._reloadSection({element:section}),newItem}async _fixOrder(container,neworder,selector,dettachedelements,createMethod){if(void 0===container)return;if(!neworder.length)return container.classList.add("hidden"),void(container.innerHTML="");let dndFakeActivity;for(container.classList.remove("hidden"),neworder.forEach(((itemid,index)=&gt;{var _ref7,_this$getElement;let item=null!==(_ref7=null!==(_this$getElement=this.getElement(selector,itemid))&amp;&amp;void 0!==_this$getElement?_this$getElement:dettachedelements[itemid])&amp;&amp;void 0!==_ref7?_ref7:createMethod(container,itemid);if(void 0===item)return;const currentitem=container.children[index];void 0!==currentitem?currentitem!==item&amp;&amp;container.insertBefore(item,currentitem):container.append(item)}));container.children.length&gt;neworder.length;){var _lastchild$classList;const lastchild=container.lastChild;var _lastchild$dataset$id,_lastchild$dataset;if(null!=lastchild&amp;&amp;null!==(_lastchild$classList=lastchild.classList)&amp;&amp;void 0!==_lastchild$classList&amp;&amp;_lastchild$classList.contains("dndupload-preview"))dndFakeActivity=lastchild;else dettachedelements[null!==(_lastchild$dataset$id=null==lastchild||null===(_lastchild$dataset=lastchild.dataset)||void 0===_lastchild$dataset?void 0:_lastchild$dataset.id)&amp;&amp;void 0!==_lastchild$dataset$id?_lastchild$dataset$id:0]=lastchild;container.removeChild(lastchild)}dndFakeActivity&amp;&amp;container.append(dndFakeActivity)}}return _exports.default=Component,_exports.default}));
define("format_grid/thegrid",["exports","core_course/events","jquery","core/log"],(function(_exports,CourseEvents,_jquery,_log){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,CourseEvents=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}
/**
   * JS module for the grid.
   *
   * @module      format_grid/thegrid
   * @copyright   &amp;copy; 2023-onwards G J Barnard.
   * @author      G J Barnard - gjbarnard at gmail dot com and {@link http://moodle.org/user/profile.php?id=442195}
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */(CourseEvents),_jquery=_interopRequireDefault(_jquery),_log=_interopRequireDefault(_log);let registered=!1,mctFired=!1;_exports.init=(sectionnumbers,popup,showcompletion)=&gt;{if(_log.default.debug("Grid thegrid JS init"),registered)_log.default.debug("Grid thegrid JS init already registered");else if(popup){_log.default.debug("Grid thegrid sectionnumbers "+sectionnumbers),document.addEventListener(CourseEvents.manualCompletionToggled,(()=&gt;{mctFired=!0})),registered=!0;var currentmodalsection=null,modalshown=!1,currentsection=null,currentsectionshown=!1,endsection=sectionnumbers.length-1,sectionchange=function(direction){null===currentsection&amp;&amp;(currentsection=direction&lt;0?endsection:0),null!==currentsection&amp;&amp;((0,_jquery.default)("#section-"+sectionnumbers[currentsection]).removeClass("grid-current-section"),(currentsection+=direction)&lt;0?currentsection=endsection:currentsection&gt;endsection&amp;&amp;(currentsection=0),(0,_jquery.default)("#section-"+sectionnumbers[currentsection]).addClass("grid-current-section"))},updatecurrentsection=function(){currentsectionshown&amp;&amp;(0,_jquery.default)("#section-"+sectionnumbers[currentsection]).removeClass("grid-current-section"),currentsection=currentmodalsection-1,currentsectionshown&amp;&amp;(0,_jquery.default)("#section-"+sectionnumbers[currentsection]).addClass("grid-current-section")};(0,_jquery.default)("#gridPopup").on("show.bs.modal",(function(event){if(modalshown=!0,null===currentmodalsection){var trigger=(0,_jquery.default)(event.relatedTarget);currentmodalsection=trigger.data("section")}updatecurrentsection();var gml=(0,_jquery.default)("#gridPopupLabel"),triggersectionname=(0,_jquery.default)("#gridpopupsection-"+currentmodalsection).data("sectiontitle");gml.text(triggersectionname),(0,_jquery.default)(this).find("#gridpopupsection-"+currentmodalsection).addClass("active"),(0,_jquery.default)("#gridPopupCarousel").on("slid.bs.carousel",(function(event){var item=(0,_jquery.default)(".gridcarousel-item.active"),st=item.data("sectiontitle");gml.text(st),_log.default.debug("Carousel direction: "+event.direction),currentmodalsection=item.data("section"),updatecurrentsection()}))})),(0,_jquery.default)("#gridPopup").on("hidden.bs.modal",(function(){updatecurrentsection(),null!==currentmodalsection&amp;&amp;(currentmodalsection=null),(0,_jquery.default)(".gridcarousel-item").removeClass("active"),showcompletion&amp;&amp;mctFired&amp;&amp;(mctFired=!1,window.location.reload()),modalshown=!1})),(0,_jquery.default)(".grid-section .grid-modal").on("keydown",(function(event){if(13==event.which||27==event.which){event.preventDefault();var trigger=(0,_jquery.default)(event.currentTarget);currentmodalsection=trigger.data("section"),(0,_jquery.default)("#gridPopup").modal("show")}})),(0,_jquery.default)(document).on("keydown",(function(event){37==event.which?(event.preventDefault(),currentsectionshown=!0,sectionchange(-1),_log.default.debug("Left: "+sectionnumbers[currentsection]),modalshown&amp;&amp;(0,_jquery.default)("#gridPopupCarouselLeft").trigger("click")):39==event.which?(event.preventDefault(),currentsectionshown=!0,sectionchange(1),_log.default.debug("Right: "+sectionnumbers[currentsection]),modalshown&amp;&amp;(0,_jquery.default)("#gridPopupCarouselRight").trigger("click")):13!=event.which&amp;&amp;27!=event.which||!modalshown&amp;&amp;currentsectionshown&amp;&amp;(null===currentmodalsection&amp;&amp;(currentmodalsection=sectionnumbers[currentsection]),(0,_jquery.default)("#gridPopup").modal("show"))}))}}}));
/**
 * Javascript Module to handle browser storage for format_tiles for student view.
 * (Can also be used by staff when they view the student view).
 * Stores and retrieves course content and settings
 * e.g. which filter button do I have pressed
 *
 * @module format_tiles/browser_storage
 * @copyright 2018 David Watson {@link http://evolutioncode.uk}
 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since Moodle 3.3
 */
define("format_tiles/browser_storage",["jquery","format_tiles/browser_storage_set_up"],(function($,storageSetUp){var courseId,userId,localStorageKeyElements_course="mdl-tiles-course-",localStorageKeyElements_lastSection="-lastSecId",localStorageKeyElements_collapseSecZero="-collapsesec0",localStorageKeyElements_user="-user-",encodeLastVistedSectionKeyName=function(){return localStorageKeyElements_course+courseId+localStorageKeyElements_user+userId+localStorageKeyElements_lastSection},collapseSecZeroKey=function(){return localStorageKeyElements_course+courseId+localStorageKeyElements_user+userId+localStorageKeyElements_collapseSecZero},setLastVisitedSection=function(sectionNum){sectionNum&amp;&amp;storageSetUp.Enabled.local?localStorage.setItem(encodeLastVistedSectionKeyName(),sectionNum.toString()):localStorage.removeItem(encodeLastVistedSectionKeyName())};return{init:function(course,isEditing,sectionNum,assumeDataStoreConsent,user){courseId=course.toString(),userId=user.toString(),storageSetUp.init(userId,assumeDataStoreConsent),$(document).ready((function(){isEditing&amp;&amp;setLastVisitedSection(sectionNum)}))},storageEnabledSession:function(){return storageSetUp.Enabled.session},storageEnabledLocal:function(){return storageSetUp.Enabled.local},getLastVisitedSection:function(){return storageSetUp.Enabled.local&amp;&amp;localStorage.getItem(encodeLastVistedSectionKeyName())},setSecZeroCollapseStatus:function(status){storageSetUp.Enabled.local&amp;&amp;storageSetUp.storageAllowed()&amp;&amp;("collapsed"===status?localStorage.removeItem(collapseSecZeroKey()):localStorage.setItem(collapseSecZeroKey(),"1"))},getSecZeroCollapseStatus:function(){return!!localStorage.getItem(collapseSecZeroKey())},setLastVisitedSection:function(sectionNum){storageSetUp.storageAllowed()?setLastVisitedSection(sectionNum):setLastVisitedSection(null)}}}));
/**
 * Javascript Module to handle changes which are made to the course &gt; edit settings
 * form as the user changes various options
 * e.g. if user deselects one item, this deselects another linked one for them
 * if the user picks an invalid option it will be detected by format_tiles::edit_form_validation (lib.php)
 * but this is to help them avoid triggering that if they have JS enabled
 *
 * @module      format_tiles/edit_form_helper
 * @copyright   2018 David Watson {@link http://evolutioncode.uk}
 * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since       Moodle 3.3
 */
define("format_tiles/edit_form_helper",["jquery","core/notification","core/str","core/templates"],(function($,Notification,str,Templates){return{init:function(pageType,courseDefaultIcon,courseId,userId,allowphototiles,documentationUrl){$(document).ready((function(){const useSubTilesCheckBox=$("input#id_courseusesubtiles"),useSubTilesSecZeroCheckBox=$("input#id_usesubtilesseczero");useSubTilesCheckBox.prop("checked")||(useSubTilesSecZeroCheckBox.prop("checked",!1),useSubTilesSecZeroCheckBox.attr("disabled",!0)),useSubTilesCheckBox.change((function(){useSubTilesCheckBox.prop("checked")?($("input#id_courseusebarforheadings").prop("checked",!1),useSubTilesSecZeroCheckBox.attr("disabled",!1)):(useSubTilesSecZeroCheckBox.prop("checked",!1),useSubTilesSecZeroCheckBox.attr("disabled",!0))})),$("select#id_courseshowtileprogress").change((function(e){if("0"!==e.currentTarget.value){var enableCompBox=$("select#id_enablecompletion");"0"===enableCompBox.val()&amp;&amp;(enableCompBox.val("1"),str.get_strings([{key:"completion",component:"completion"},{key:"completionswitchhelp",component:"format_tiles"}]).done((function(s){Notification.alert(s[0],s[1])})))}})),$("select#id_enablecompletion").change((function(e){"0"===e.currentTarget.value&amp;&amp;$("select#id_courseshowtileprogress").val("0")}));var selectedIconName,selectBox,currentIcon,colourSelectMenu=$("select#id_basecolour");(Templates.render("format_tiles/colour_picker",{colours:colourSelectMenu.find("option").map((function(index,option){var optselector=$(option),colour=optselector.attr("value");return{colour:colour,colourname:optselector.text(),selected:colour===colourSelectMenu.val(),id:colour.replace("#","")}})).toArray()}).done((function(html){$(html).insertAfter(colourSelectMenu),colourSelectMenu.hide();var circles=$(".colourpickercircle");circles.click((function(e){var clicked=$(e.currentTarget);circles.removeClass("selected"),clicked.addClass("selected"),colourSelectMenu.val(clicked.data("colour")),$("#colourselectnotify").fadeIn(200).fadeOut(1200)})),colourSelectMenu.change((function(){circles.removeClass("selected"),$("#colourpick_"+colourSelectMenu.val().replace("#","")).addClass("selected")}));var body=$("body");body.hasClass("format-tiles")||body.addClass("format-tiles")})),"course-edit"===pageType)&amp;&amp;(selectBox=$("#id_defaulttileicon"),selectedIconName=$("#id_defaulttileicon option:selected").text(),currentIcon=""===selectBox.val()?courseDefaultIcon:selectBox.val(),Templates.render("format_tiles/icon_picker_launch_btn",{initialicon:currentIcon,initialname:selectedIconName,sectionId:0,allowphototiles:allowphototiles}).done((function(html){$(html).insertAfter(selectBox),selectBox.hide(),require(["format_tiles/edit_icon_picker"],(function(iconPicker){iconPicker.init(courseId,pageType,allowphototiles,documentationUrl)}))})));Templates.render("format_tiles/edit_form_helptext",{documentationurl:documentationUrl+"teachers"}).done((function(html){$(html).appendTo($("#id_courseformathdr .fcontainer"))}))}))}}}));
/**
 * Javascript Module to handle fitting tiles to screen.
 * Called when in non editing mode.
 *
 * @module format_tiles/tile_fitter
 * @copyright 2019 David Watson {@link http://evolutioncode.uk}
 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since Moodle 3.3
 */
define("format_tiles/tile_fitter",["jquery","core/ajax"],(function($,ajax){var courseId,reOrgLocked=!1,Selector_TILE=".tile",Selector_TILEID="#tile-",Selector_TILE_COLLAPSED=".tile-collapsed",Selector_TILES=".format-tiles.jsenabled ul.tiles",Selector_SPACER=".spacer",Selector_SECTION_ID="#section-",Selector_OPEN_SECTION=".moveablesection:visible",Selector_SECTION_ZERO="#section-0",Selector_CONTENT_SECTIONS=".moveablesection",timeoutBeforeResizeAjax=null,resizeTilesDivWidth=function(){var winWidth=$(window).width(),dfd=new $.Deferred,tiles=$(Selector_TILES),TILE_WIDTHS_standard=260,TILE_WIDTHS_min=225,TILE_WIDTHS_mobileMin=160;try{var tilesParentWidth=tiles.parent().innerWidth(),firstTile=$(tiles.find(Selector_TILE)[0]),oneTileWidth=firstTile.width()?firstTile.width():TILE_WIDTHS_standard;oneTileWidth+=14;var resizeWidth="inherit",maxPossibleTilesPerRow=Math.floor(tilesParentWidth/TILE_WIDTHS_min),tileCount=$(Selector_TILE).not(Selector_SPACER).length;if(tilesParentWidth&lt;2*TILE_WIDTHS_mobileMin)dfd.reject("Too narrow to resize");else if(tileCount&lt;=3&amp;&amp;tilesParentWidth&gt;tileCount*TILE_WIDTHS_mobileMin)resizeWidth=4*TILE_WIDTHS_standard;else if(tilesParentWidth&lt;3*TILE_WIDTHS_min)resizeWidth=2*(TILE_WIDTHS_standard-14);else if(maxPossibleTilesPerRow&lt;4)resizeWidth=TILE_WIDTHS_standard*maxPossibleTilesPerRow;else{var rowMaxCount=Math.min(Math.floor(tilesParentWidth/oneTileWidth),tileCount);if(tileCount&lt;=rowMaxCount&amp;&amp;tileCount&gt;5)resizeWidth=(Math.floor(tileCount/2)+1)*oneTileWidth;else if(rowMaxCount&gt;3&amp;&amp;tileCount/rowMaxCount&lt;=3){var rowMinCount=Math.floor(tilesParentWidth/oneTileWidth),possibleRowCounts=function(start,end){for(var res=[];start&lt;=end;start+=1)res.push(start);return res}(rowMinCount,rowMaxCount).reverse(),lastRowRemainderTiles=possibleRowCounts.map((function(num){return tileCount%num}));resizeWidth=-1!==lastRowRemainderTiles.indexOf(0)?oneTileWidth*possibleRowCounts[lastRowRemainderTiles.indexOf(0)]:tileCount&lt;rowMinCount?tileCount*oneTileWidth:oneTileWidth*possibleRowCounts[lastRowRemainderTiles.indexOf(Math.max.apply(null,lastRowRemainderTiles))]}else resizeWidth=rowMaxCount*oneTileWidth}var existingWidth=parseInt(tiles.css("max-width").replace("px",""));if(Math.abs(resizeWidth-existingWidth)&lt;100)dfd.resolve();else{tiles.css("max-width",winWidth).animate({"max-width":resizeWidth},500,"swing",(function(){setTimeout((function(){dfd.resolve()}),600),$(Selector_CONTENT_SECTIONS).animate({"max-width":resizeWidth},500,"swing")}))}timeoutBeforeResizeAjax&amp;&amp;clearTimeout(timeoutBeforeResizeAjax),timeoutBeforeResizeAjax=setTimeout((function(){ajax.call([{methodname:"format_tiles_set_session_width",args:{courseid:courseId,width:Math.floor(resizeWidth)}}])}),3e3)}catch(err){tiles.css("max-width",winWidth).animate({"max-width":"100%"},500,"swing"),ajax.call([{methodname:"format_tiles_set_session_width",args:{courseid:courseId,width:0}}]),dfd.reject("Failed to resize")}return dfd.promise()},organiser={getContentSectionPositions:function(){var currentSectionId,previousTile,rows=[],openSections=$(Selector_OPEN_SECTION);openSections.css("display","none");var maxTilesPerRow=1,thisRowCount=0,allTiles=$(Selector_TILES).children(Selector_TILE).not(Selector_TILE_COLLAPSED).not(".spacer");return 0===allTiles.length?[]:(allTiles.each((function(index,tile){(currentSectionId=$(tile).data("section"))&amp;&amp;(0===index?thisRowCount=1:Math.abs($(tile).position().top-$(previousTile).position().top)&lt;=100?thisRowCount+=1:thisRowCount=0,thisRowCount&gt;maxTilesPerRow&amp;&amp;(maxTilesPerRow=thisRowCount),previousTile=tile)})),openSections.css("display","block"),allTiles.each((function(index,tile){currentSectionId=$(tile).data("section"),0===rows.length||rows[rows.length-1].sections.length&gt;=maxTilesPerRow?(rows.length&gt;=1&amp;&amp;(rows[rows.length-1].displayAfterTile=rows[rows.length-1].sections[rows[rows.length-1].sections.length-1]),rows.push({displayAfterTile:"",sections:[currentSectionId]})):rows[rows.length-1].sections.push(currentSectionId)})),rows[rows.length-1].displayAfterTile=rows[rows.length-1].sections[rows[rows.length-1].sections.length-1],rows)},moveContentSectionsToPlaces:function(positionData,callbacks){positionData.forEach((function(row){row.sections.forEach((function(contentSection){row.displayAfterTile===positionData[positionData.length-1].displayAfterTile?$(Selector_SECTION_ID+contentSection).detach().insertAfter($("ul.tiles .tile").last()):$(Selector_SECTION_ID+contentSection).detach().insertAfter($("#tile-"+row.displayAfterTile))}))})),callbacks.forEach((function(func){"function"==typeof func&amp;&amp;func()}))},runReOrg:function(delayBefore){var dfd=new $.Deferred;!0===reOrgLocked&amp;&amp;dfd.reject("Re-org locked"),reOrgLocked=!0;var action=function(){organiser.moveContentSectionsToPlaces(organiser.getContentSectionPositions(),[function(){$("body").removeClass("modal-open"),dfd.resolve("Finished organising tiles"),reOrgLocked=!1}])};return!0===delayBefore?setTimeout((function(){action(),dfd.resolve("Re-org complete")}),1e3):(action(),dfd.resolve("Re-org complete")),dfd.promise()}};return{init:function(courseIdInit,sectionOpen,fitTilesToWidth,isEditing){courseId=courseIdInit,$(document).ready((function(){"1"===$(Selector_TILES).css("opacity")&amp;&amp;organiser.runReOrg(!1).done((function(){0!==sectionOpen&amp;&amp;$(Selector_TILEID+sectionOpen).click()}));var organiseAndRevealTiles=function(){organiser.runReOrg(!1).done((function(){0!==sectionOpen&amp;&amp;0===$(Selector_OPEN_SECTION).length&amp;&amp;$(Selector_TILEID+sectionOpen).click(),$(Selector_TILES).animate({opacity:"1"},"fast"),$(Selector_SECTION_ZERO).animate({opacity:"1"},"fast"),$("#page-loading-icon").fadeOut(500).remove()}))};fitTilesToWidth&amp;&amp;!isEditing?resizeTilesDivWidth().done((function(){organiseAndRevealTiles()})).fail((function(){organiseAndRevealTiles()})):organiseAndRevealTiles()}))},resizeTilesDivWidth:function(){return resizeTilesDivWidth()},runReOrg:function(delayBefore){return organiser.runReOrg(delayBefore)}}}));
/**
 * Main Javascript module for format_tiles for when user is *NOT* editing.
 * See course_edit for if they are editing.
 * Handles the UI changes when tiles are selected and anything else not
 * covered by the specific modules
 *
 * @module      format_tiles/course
 * @copyright   2018 David Watson {@link http://evolutioncode.uk}
 * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("format_tiles/course",["jquery","core/templates","core/ajax","format_tiles/browser_storage","core/notification","core/str","format_tiles/tile_fitter","core/fragment"],(function($,Templates,ajax,browserStorage,Notification,str,tileFitter,Fragment){var isMobile,loadingIconHtml,courseId,courseContextId,enableCompletion,stringStore=[],reopenLastVisitedSection=!1,resizeLocked=!1,reorgSectionsDisabledUntil=0,openTile=0,Selector_BODY="body",Selector_PAGE="#page",Selector_TILE=".tile",Selector_TILEID="#tile-",Selector_MOVEABLE_SECTION=".moveablesection",Selector_FILTER_BUTTON=".filterbutton",Selector_TILE_LOADING_ICON=".tile-loading-icon",Selector_TILE_CLICKABLE=".tile-clickable",Selector_ACTIVITY=".activity",Selector_ACTIVITY_NAME=".activityname",Selector_ABOVE_TILES="#abovetiles",Selector_INSTANCE_NAME=".instancename",Selector_SPACER=".spacer",Selector_SECTION_ID="#section-",Selector_SECTION_TITLE=".sectiontitle",Selector_SECTION_MAIN=".section.main",Selector_SECTION_BUTTONS=".sectionbuttons",Selector_CLOSE_SEC_BTN=".closesectionbtn",Selector_HIDE_SEC0_BTN=".buttonhidesec0",Selector_SECTION_ZERO="#section-0",Selector_MOODLE_VIDEO=".mediaplugin.mediaplugin_videojs",Selector_MANUAL_COMPLETION='[data-action="toggle-manual-completion"]',Selector_MATHJAX_EQUATION=".filter_mathjaxloader_equation",ClassNames_SELECTED="selected",ClassNames_OPEN="open",ClassNames_CLOSED="closed",ClassNames_LAUNCH_CM_MODAL="launch-tiles-cm-modal",ClassNames_STATE_VISIBLE="state-visible",ClassNames_HAS_OPEN_TILE="format-tiles-tile-open",ClassNames_ON_TILE_CONTROL="on-tile-control",Event_CLICK="click",Event_KEYDOWN="keydown",CSS_DISPLAY="display",CSS_Z_INDEX="z-index",CSS_BG_COLOUR="background-color",Keyboard_ESCAPE=27,Keyboard_TAB=9,Keyboard_RETURN=13;var stopVideoPlaying=function(section,sectionId){var contentSection=$(Selector_SECTION_ID+section);contentSection.find("iframe").each((function(index,iframe){(iframe=$(iframe)).attr("src")&amp;&amp;(iframe.data("src",iframe.attr("src")),iframe.attr("src",""))})),contentSection.find(Selector_MOODLE_VIDEO).length&gt;0&amp;&amp;(contentSection.html(""),getSectionContentFromServer(courseContextId,sectionId).done((function(html,js){setCourseContentHTML(contentSection,html,js)})))},cancelTileSelections=function(sectionToFocus){$(Selector_MOVEABLE_SECTION).each((function(index,sec){(sec=$(sec)).is(":visible")&amp;&amp;(stopVideoPlaying(sec.data("section"),sec.data("sectionid")),sec.slideUp().removeClass(ClassNames_STATE_VISIBLE))})),$(Selector_TILE).removeClass(ClassNames_SELECTED).css(CSS_Z_INDEX,"").css(CSS_BG_COLOUR,""),$(".section "+ClassNames_SELECTED).removeClass(ClassNames_SELECTED).css(CSS_Z_INDEX,""),void 0!==sectionToFocus&amp;&amp;0!==sectionToFocus&amp;&amp;$(Selector_TILEID+sectionToFocus).focus(),$(Selector_TILE_LOADING_ICON).fadeOut(300,(function(){$(Selector_TILE_LOADING_ICON).html("")})),openTile=0,$(Selector_BODY).removeClass(ClassNames_HAS_OPEN_TILE),overlay.fadeOut(300)};const overlay=$("#format_tiles_overlay");var setCourseContentHTML=function(contentArea,html,js){if(html){if(contentArea.html(html),$(Selector_TILE_LOADING_ICON).fadeOut(300,(function(){$(Selector_TILE_LOADING_ICON).html("")})),contentArea.attr("id")!==Selector_SECTION_ZERO){var activities=contentArea.find(Selector_ACTIVITY).not(Selector_SPACER);contentArea.on(Event_KEYDOWN,(function(e){e.keyCode===Keyboard_ESCAPE&amp;&amp;(browserStorage.setLastVisitedSection(0),cancelTileSelections(0),$(Selector_TILEID+contentArea.data("section")).focus())})),activities.on(Event_KEYDOWN,(function(e){if(e.keyCode===Keyboard_RETURN){var toClick=$(e.currentTarget).find("a");toClick.hasClass(ClassNames_LAUNCH_CM_MODAL)?toClick.click():void 0!==toClick.attr("href")&amp;&amp;(window.location.href=toClick.attr("href"))}})),isMobile||(activities.last().on(Event_KEYDOWN,(function(e){e.keyCode!==Keyboard_TAB||e.shiftKey||$(e.relatedTarget).closest(Selector_SECTION_MAIN).attr("id")===contentArea.attr("id")||setTimeout((function(){contentArea.find(Selector_SECTION_TITLE).focus(),contentArea.find(Selector_SECTION_BUTTONS).css("top","")}),200)})),contentArea.find(Selector_SECTION_TITLE).on(Event_KEYDOWN,(function(e){e.keyCode===Keyboard_TAB&amp;&amp;e.shiftKey&amp;&amp;$(e.relatedTarget).closest(Selector_SECTION_MAIN).attr("id")!==contentArea.attr("id")&amp;&amp;setTimeout((function(){activities.last().focus()}),200)})))}isMobile||setTimeout((function(){try{const tooltipItems=contentArea.find(".badge-info");tooltipItems.length&gt;0&amp;&amp;"function"==typeof tooltipItems.tooltip&amp;&amp;tooltipItems.tooltip()}catch(err){require(["core/log"],(function(log){log.debug(err)}))}}),500),setTimeout((()=&gt;{contentArea.find(Selector_ACTIVITY_NAME).each(((i,el)=&gt;{(el=$(el)).height()&gt;110&amp;&amp;el.closest(Selector_INSTANCE_NAME).addClass("opaque-bg")}))}),100)}setTimeout((()=&gt;{if(js){0===$("head").find("script").filter(((index,script)=&gt;$(script).html()===js)).length&amp;&amp;Templates.runTemplateJS(js)}applyMathJax(contentArea);if(contentArea.find(Selector_MOODLE_VIDEO).length&gt;0){require(["media_videojs/loader"],(function(videoJS){videoJS.setUp()}));["fullscreenchange","webkitfullscreenchang","mozfullscreenchange","msfullscreenchange"].forEach((function(ev){document.addEventListener(ev,(function(){reorgSectionsDisabledUntil=Date.now()+1e3}))}))}}),1e3),$(document).trigger("format-tiles-section-content-changed",{courseId:parseInt(courseId),section:contentArea.data("section"),sectionid:contentArea.data("sectionid")})};const applyMathJax=function(contentArea){if(void 0!==window.MathJax)try{const mathJaxElems=contentArea.find(Selector_MATHJAX_EQUATION);mathJaxElems.length&amp;&amp;mathJaxElems.each(((i,node)=&gt;{window.MathJax.Hub.Queue(["Typeset",window.MathJax.Hub,node])}))}catch(err){require(["core/log"],(function(log){log.debug(err)}))}};var expandSection=function(contentArea,sectionNumber){const tile=$("#tile-"+sectionNumber);contentArea.addClass(ClassNames_STATE_VISIBLE),overlay.fadeIn(300),tile.addClass(ClassNames_SELECTED),$(Selector_BODY).addClass(ClassNames_HAS_OPEN_TILE),contentArea.slideDown(350,(function(){!function(){var scrollTo=tile.offset().top-$("#section-zero-container").offset().top+60;scrollTo===$(window).scrollTop&amp;&amp;(scrollTo+=1),contentArea.find(Selector_SECTION_TITLE).focus();var events="mousedown wheel DOMMouseScroll mousewheel keyup touchmove";const page=$(Selector_PAGE);page.on(events,(function(){page.stop()})),page.animate({scrollTop:scrollTo},"slow","swing",(function(){page.off(events,(function(){page.stop()}))})),openTile=sectionNumber,contentArea.find(Selector_SECTION_TITLE).focus();const iframes=contentArea.find("iframe");iframes.length&gt;0&amp;&amp;(iframes.each((function(index,iframe){""===(iframe=$(iframe)).attr("src")&amp;&amp;void 0!==iframe.data("src")&amp;&amp;iframe.attr("src",iframe.data("src"))})),enableCompletion&amp;&amp;setTimeout((()=&gt;{$(document).trigger("format-tiles-completion-changed",{courseid:courseId,section:sectionNumber})}),1e3))}()})),openTile=sectionNumber},reOrgSections=function(delayBefore,fitTilesToScreenWidth){var dfd=new $.Deferred;reorgSectionsDisabledUntil&gt;Date.now()&amp;&amp;dfd.resolve();reorgSectionsDisabledUntil=Date.now()+1e3;var openedSection=$(".moveablesection:visible"),openedSectionNum=0;openedSection.length&gt;0&amp;&amp;(openedSectionNum=openedSection.data("section"),cancelTileSelections(0));var reOrgFunc=function(delayBefore){tileFitter.runReOrg(delayBefore).done((function(result){0!==openedSectionNum&amp;&amp;expandSection(openedSection,openedSectionNum),dfd.resolve(result)})).fail((function(result){0!==openedSectionNum&amp;&amp;expandSection(openedSection,openedSectionNum),dfd.reject(result)}))};return fitTilesToScreenWidth?setTimeout((function(){tileFitter.resizeTilesDivWidth(courseId).done((function(){reOrgFunc(!1)}),delayBefore)})):reOrgFunc(delayBefore),dfd.promise()},getSectionContentFromServer=function(courseContextId,sectionId){return courseContextId&amp;&amp;sectionId||require(["core/log"],(function(log){log.debug("No course context ID '".concat(courseContextId.toString(),"' or section ID '").concat(sectionId.toString(),"'"))})),Fragment.loadFragment("format_tiles","get_cm_list",courseContextId,{sectionid:sectionId})},populateAndExpandSection=function(courseContextId,sectionId,sectionNumber){$(Selector_TILE).removeClass(ClassNames_SELECTED),openTile=sectionNumber,$(Selector_MOVEABLE_SECTION).each((function(index,sec){(sec=$(sec)).is(":visible")&amp;&amp;(stopVideoPlaying(sec.data("section"),sec.data("sectionid")),sec.slideUp(200).removeClass(ClassNames_STATE_VISIBLE))})),ajax.call([{methodname:"format_tiles_log_tile_click",args:{coursecontextid:courseContextId,sectionnumber:sectionNumber,sectionid:sectionId}}])[0].fail(Notification.exception);var relatedContentArea=$(Selector_SECTION_ID+sectionNumber);relatedContentArea.find(Selector_ACTIVITY).length&gt;0?(expandSection(relatedContentArea,sectionNumber),getSectionContentFromServer(courseContextId,sectionId).done((function(html,js){setCourseContentHTML(relatedContentArea,html,js)}))):(relatedContentArea.html(loadingIconHtml),getSectionContentFromServer(courseContextId,sectionId).done((function(html,js){setCourseContentHTML(relatedContentArea,html,js),expandSection(relatedContentArea,sectionNumber)})).fail((function(failResult){!function(sectionNum,failResult,contentArea){throw failResult?(Notification.confirm(stringStore.sectionerrortitle,stringStore.sectionerrorstring,stringStore.refresh,stringStore.cancel,(function(){window.location.reload()}),null),contentArea.html("")):(setCourseContentHTML(contentArea,"&lt;p&gt;"+stringStore.noconnectionerror+"&lt;/p&gt;",""),setTimeout((function(){expandSection(contentArea,sectionNum)}),500)),require(["core/log"],(function(log){log.debug(failResult)})),new Error("Not successful retrieving tile content by AJAX for section "+sectionNum)}(sectionNumber,failResult,relatedContentArea),cancelTileSelections(sectionNumber)}))),browserStorage.setLastVisitedSection(sectionNumber)};const removeUrlParam=function(pattern){window.location.href.match(pattern)&amp;&amp;history.pushState(null,null,window.location.href.replace(pattern,""))};return{init:function(courseIdInit,useJavascriptNav,isMobileInit,sectionNum,useFilterButtons,assumeDataStoreConsent,reopenLastSectionInit,userId,fitTilesToWidth,enableCompletionInit,useSubTiles,courseContextIdInit){courseId=courseIdInit,courseContextId=courseContextIdInit,isMobile=isMobileInit,reopenLastVisitedSection="1"===reopenLastSectionInit,assumeDataStoreConsent="1"===assumeDataStoreConsent,enableCompletion="1"===enableCompletionInit,browserStorage.init(courseId,!1,sectionNum,assumeDataStoreConsent,userId),$(document).ready((function(){useSubTiles&amp;&amp;$(Selector_BODY).addClass("format-tiles-subtiles");var pageContent=$("#page-content");0===pageContent.length&amp;&amp;(pageContent=$("#region-main")),0!==sectionNum?openTile=sectionNum:reopenLastVisitedSection&amp;&amp;browserStorage.storageEnabledLocal&amp;&amp;(openTile=browserStorage.getLastVisitedSection()),0!==openTile?tileFitter.init(courseId,openTile,fitTilesToWidth,!1):($(Selector_TILEID+"1").focus(),tileFitter.init(courseId,null,fitTilesToWidth,!1));const pageContentElem=$("#page-content"),widthObservedElement=pageContentElem.length?pageContentElem:$(window);var observedElementWidth=widthObservedElement.outerWidth();if(useJavascriptNav){pageContent.on(Event_CLICK,Selector_TILE_CLICKABLE,(function(e){if(!useJavascriptNav)return;if(!$(e.target).hasClass(ClassNames_ON_TILE_CONTROL)){e.preventDefault(),$(Selector_TILE_LOADING_ICON).fadeOut(300,(function(){$(Selector_TILE_LOADING_ICON).html()}));var thisTile=$(e.currentTarget).closest(Selector_TILE),dataSection=parseInt(thisTile.data("section"));thisTile.hasClass(ClassNames_SELECTED)?(cancelTileSelections(dataSection),browserStorage.setLastVisitedSection(0),overlay.fadeOut(300)):populateAndExpandSection(courseContextId,thisTile.data("true-sectionid"),dataSection)}})),overlay.on(Event_CLICK,(function(e){cancelTileSelections(0),browserStorage.setLastVisitedSection(0),function(e){var clickedItem=$(e.currentTarget);if("format_tiles_overlay"===clickedItem.attr("id")){clickedItem.hide();var BottomElement=$(document.elementFromPoint(e.clientX,e.clientY));if(clickedItem.show(),BottomElement.hasClass("filterbutton")||BottomElement.hasClass("list-group-item"))BottomElement.click();else{var clickedTile=BottomElement.closest(Selector_TILE);clickedTile&amp;&amp;clickedTile.click()}}}(e)}));new ResizeObserver((()=&gt;{resizeLocked||observedElementWidth===widthObservedElement.outerWidth()||(resizeLocked=!0,setTimeout((function(){if(!(reorgSectionsDisabledUntil&gt;Date.now())){var resizeRequired=!0,openContentSection=$(".moveablesection:visible");if(0!==openContentSection.length){var iframes=openContentSection.find("iframe");0!==iframes.length&amp;&amp;iframes.each((function(index,player){(player=$(player)).outerWidth()&gt;openContentSection.outerWidth()&amp;&amp;(resizeRequired=!1)}))}resizeRequired&amp;&amp;(observedElementWidth=widthObservedElement.outerWidth(),reOrgSections(!0,fitTilesToWidth)),resizeLocked=!1}}),600))})).observe(document.getElementById("page-content")),pageContent.on(Event_CLICK,Selector_CLOSE_SEC_BTN,(function(e){cancelTileSelections($(e.currentTarget).data("section"))})),function(){var buttonHideSecZero=$(Selector_HIDE_SEC0_BTN),sectionZero=$(Selector_SECTION_ZERO);browserStorage.storageEnabledLocal()?!0===browserStorage.getSecZeroCollapseStatus()?(sectionZero.slideUp(0),buttonHideSecZero.addClass(ClassNames_CLOSED).removeClass(ClassNames_OPEN),$(Selector_ABOVE_TILES).addClass("sec-zero-closed")):(sectionZero.slideDown(300),buttonHideSecZero.addClass(ClassNames_OPEN).removeClass(ClassNames_CLOSED),$(Selector_ABOVE_TILES).removeClass("sec-zero-closed")):(buttonHideSecZero.addClass(ClassNames_OPEN).removeClass(ClassNames_CLOSED),sectionZero.slideDown(300),$(Selector_ABOVE_TILES).removeClass("sec-zero-closed"))}(),removeUrlParam(/(&amp;|\\?)cmid=\d+/gi),removeUrlParam(/(&amp;|\\?)section=\d+/gi)}$(document).on("format-tiles-completion-changed",(function(e,data){var _contentArea$data;if(data.courseid&amp;&amp;parseInt(courseId)!==parseInt(data.courseid))return;const allSectionNums=$(Selector_TILE).not(Selector_SPACER).map(((i,tile)=&gt;parseInt($(tile).data("section")))).toArray();allSectionNums.push(0);const contentArea=$(Selector_SECTION_ID+data.section),sectionId=null!==(_contentArea$data=contentArea.data("sectionid"))&amp;&amp;void 0!==_contentArea$data?_contentArea$data:contentArea.data("section-id");Fragment.loadFragment("format_tiles","get_cm_list",courseContextId,{sectionid:sectionId}).done(((html,js)=&gt;{setCourseContentHTML(contentArea,html,js)})).catch((err=&gt;{require(["core/log"],(function(log){log.debug(err)}))})),ajax.call([{methodname:"format_tiles_get_section_information",args:{courseid:courseId,sectionnums:allSectionNums}}])[0].done((response=&gt;{require(["format_tiles/completion"],(function(completion){completion.updateSectionsInfo(response.sections,response.overall.complete,response.overall.outof)}))})).catch((err=&gt;{require(["core/log"],(function(log){log.debug(err)}))}))})),enableCompletion&amp;&amp;pageContent.on(Event_CLICK,Selector_MANUAL_COMPLETION,(function(e){const currentTarget=$(e.currentTarget),sectionNum=currentTarget.closest(Selector_SECTION_MAIN).data("section"),cmid=currentTarget.data("cmid");require(["format_tiles/completion"],(function(completion){setTimeout((()=&gt;{completion.triggerCompletionChangedEvent(sectionNum?parseInt(sectionNum):0,cmid?parseInt(cmid):0)}),500)}))}));const sectionZero=$(Selector_SECTION_ZERO);pageContent.on(Event_CLICK,Selector_HIDE_SEC0_BTN,(function(e){"none"===sectionZero.css(CSS_DISPLAY)?(sectionZero.slideDown(250),$(Selector_ABOVE_TILES).removeClass("sec-zero-closed"),$(e.currentTarget).addClass(ClassNames_OPEN).removeClass(ClassNames_CLOSED),browserStorage.setSecZeroCollapseStatus("collapsed")):(sectionZero.slideUp(250),$(Selector_ABOVE_TILES).addClass("sec-zero-closed"),$(e.currentTarget).addClass(ClassNames_CLOSED).removeClass(ClassNames_OPEN),browserStorage.setSecZeroCollapseStatus("expanded"))})),useFilterButtons&amp;&amp;(require(["format_tiles/filter_buttons"],(function(filterButtons){filterButtons.init(courseId,browserStorage.storageEnabledLocal)})),useJavascriptNav&amp;&amp;pageContent.on(Event_CLICK,Selector_FILTER_BUTTON,(function(){cancelTileSelections(0),reOrgSections(!0,!1)}))),$(".tiles_coursenav").removeClass("hidden"),Templates.render("format_tiles/loading",{}).done((function(html){loadingIconHtml=html}));var stringKeys=[{key:"sectionerrortitle",component:"format_tiles"},{key:"sectionerrorstring",component:"format_tiles"},{key:"refresh"},{key:"cancel",component:"moodle"},{key:"noconnectionerror",component:"format_tiles"},{key:"show"},{key:"hide"},{key:"other",component:"format_tiles"}];str.get_strings(stringKeys).done((function(s){s.forEach((function(str,index){str?stringStore[stringKeys[index].key]=str:(stringStore[stringKeys[index].key]="Error.",require(["core/log"],(function(log){log.debug("Format tiles get_strings error ".concat(index)),log.debug(s)})))}))})).fail((function(err){require(["core/log"],(function(log){log.debug(err)}))})),isMobile?pageContent.on(Event_CLICK,Selector_ACTIVITY+".video a",(function(e){var target=$(e.currentTarget),url=target.closest(Selector_ACTIVITY).data("url-secondary");if(void 0!==url){e.preventDefault(),e.stopPropagation();var cm=target.closest(Selector_ACTIVITY);ajax.call([{methodname:"format_tiles_log_mod_view",args:{courseid:courseId,cmid:cm.data("cmid")}}])[0].done((function(){window.location.href=url}))}})):$(Selector_TILE).on(Event_KEYDOWN,(function(e){e.keyCode===Keyboard_RETURN&amp;&amp;$(e.currentTarget).click()}));let fixButtonsDisabled=!1;$(window).scroll((function(){if(!fixButtonsDisabled)try{$(window).scrollTop()&gt;=300&amp;&amp;$(".moveablesection.state-visible").each(((i,s)=&gt;{s=$(s);const sectionRect=document.getElementById("section-"+s.data("section")).getBoundingClientRect(),right=document.body.clientWidth-sectionRect.right+30,sectionButtons=s.find(".sectionbuttons"),topMargin=$("#page").offset().top;sectionRect.top+topMargin&lt;0&amp;&amp;sectionRect.bottom-topMargin&gt;0?(sectionButtons.addClass("position-fixed"),sectionButtons.css({top:topMargin+10,right:right})):(sectionButtons.removeClass("position-fixed"),sectionButtons.css({top:"unset",right:"unset"}))}))}catch(err){require(["core/log"],(function(log){log.debug(err)})),fixButtonsDisabled=!0}}));const urlMatches=window.location.href.match(/.*\/course\/view\.php\?id=([\d]+)#sectionid-([\d+]+)-title/);if(urlMatches&amp;&amp;3===urlMatches.length){const sectionId=urlMatches[2],redirectUrl=urlMatches[0].replace("#sectionid-".concat(sectionId,"-title"),"&amp;sectionid=".concat(sectionId));window.location.replace(redirectUrl)}}))},populateAndExpandSection(courseContextId,sectionId,sectionNumber){populateAndExpandSection(courseContextId,sectionId,sectionNumber)}}}));
/**
 * Javascript Module to handle filter buttons which appear above the tiles if used for format_tiles
 *
 * @module      format_tiles/filter_buttons
 * @copyright   2018 David Watson {@link http://evolutioncode.uk}
 * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since Moodle 3.3
 */
define("format_tiles/filter_buttons",["jquery"],(function($){var Selector_FILTER_BUTTON=".filterbutton",Selector_TILE=".tile",Selector_COLLAPSING=".tile-collapsing",Selector_COLLAPSED=".tile-collapsed",Selector_SPACER=".spacer",Selector_PAGE_CONTENT="#page-content",Selector_REGION_MAIN="#region-main",ClassNames_COLLAPSING="tile-collapsing",ClassNames_COLLAPSED="tile-collapsed",ClassNames_SELECTED="selected",Module_getPressedFilterButton=function(courseId,storageEnabled){return storageEnabled?localStorage.getItem("mdl-course-"+courseId+"-filter-btn"):null},Module_setPressedFilterButton=function(courseId,buttonId,storageEnabled){storageEnabled&amp;&amp;(0===buttonId?localStorage.removeItem("mdl-course-"+courseId+"-filter-btn"):localStorage.setItem("mdl-course-"+courseId+"-filter-btn",buttonId))},Module_unCollapseTiles=function(tileIds){tileIds.forEach((function(index,tileId){$("#tile-"+tileIds[tileId]).addClass(ClassNames_COLLAPSING).removeClass(ClassNames_COLLAPSED)})),setTimeout((function(){$(Selector_COLLAPSING).removeClass(ClassNames_COLLAPSING)}),300)},Module_collapseAllTiles=function(){$(Selector_TILE).not($(Selector_COLLAPSED)).not($(Selector_SPACER)).addClass(ClassNames_COLLAPSING),setTimeout((function(){$(Selector_COLLAPSING).addClass(ClassNames_COLLAPSED).removeClass(ClassNames_COLLAPSING)}),250)},Module_unCollapseAllTiles=function(){setTimeout((function(){$(Selector_FILTER_BUTTON).removeClass(ClassNames_SELECTED),$(Selector_COLLAPSED).addClass(ClassNames_COLLAPSING).removeClass(ClassNames_COLLAPSED),setTimeout((function(){$(Selector_COLLAPSING).removeClass(ClassNames_COLLAPSING)}),250),$("#filterbutton-all").addClass(ClassNames_SELECTED)}),250)};return{init:function(courseId,storageEnabledLocal){$(document).ready((function(){const getSectionsForButtons=function(buttons){let sections=[];return buttons.forEach((button=&gt;{if((button=$(button)).attr("data-sections")){JSON.parse(button.attr("data-sections")).forEach((s=&gt;{sections.includes(s)||sections.push(s)}))}else{$("li.tile.filter-"+button.attr("data-buttonid")).map(((index,tile)=&gt;$(tile).attr("data-section"))).toArray().forEach((s=&gt;{sections.includes(s)||sections.push(s)}))}})),sections};var buttonAlreadyPressed=Module_getPressedFilterButton(courseId,storageEnabledLocal);if(buttonAlreadyPressed){var pressedButton=$("#filterbutton"+buttonAlreadyPressed);pressedButton||Module_setPressedFilterButton(courseId,0),$(Selector_FILTER_BUTTON).removeClass(ClassNames_SELECTED);const sections=getSectionsForButtons([pressedButton]);sections.length?(pressedButton.addClass(ClassNames_SELECTED),Module_collapseAllTiles(),setTimeout((function(){Module_unCollapseTiles(sections)}),250),Module_setPressedFilterButton(courseId,buttonAlreadyPressed,storageEnabledLocal)):Module_unCollapseAllTiles()}else $("#filterbutton-all").addClass(ClassNames_SELECTED);var pageContent=$(Selector_PAGE_CONTENT);0===pageContent.length&amp;&amp;(pageContent=$(Selector_REGION_MAIN)),pageContent.on("click",Selector_FILTER_BUTTON,(function(e){var button=$(e.target),buttonId=button.attr("data-buttonid");if("all"===buttonId)Module_collapseAllTiles(),setTimeout((function(){Module_unCollapseAllTiles()}),500),$(Selector_FILTER_BUTTON).removeClass(ClassNames_SELECTED),Module_setPressedFilterButton(courseId,0,storageEnabledLocal),$("#filterbutton-all").addClass(ClassNames_SELECTED);else{const pressedButtons=$(Selector_FILTER_BUTTON+"."+ClassNames_SELECTED+':not("#filterbutton-all"):not("#filterbutton'+buttonId+'")'),pressedButtonsArr=pressedButtons.toArray(),areUnPressing=button.hasClass(ClassNames_SELECTED);areUnPressing||pressedButtonsArr.push(button),$(Selector_FILTER_BUTTON).removeClass(ClassNames_SELECTED),areUnPressing?button.removeClass(ClassNames_SELECTED):button.addClass(ClassNames_SELECTED);const sections=getSectionsForButtons(pressedButtonsArr);sections.length?(pressedButtons.addClass(ClassNames_SELECTED),Module_collapseAllTiles(),setTimeout((function(){Module_unCollapseTiles(sections)}),250),Module_setPressedFilterButton(courseId,buttonId,storageEnabledLocal)):Module_unCollapseAllTiles()}}))}))}}}));
/**
 * Javascript Module to handle rendering of course modules (e.g. resource/PDF, resource/html, page) in modal windows
 *
 * When the user clicks a PDF course module subtile or old style resource
 * if we are using modals for it (e.g. PDF) , create, populate, launch and size the modal
 *
 * @module      format_tiles/course_mod_modal
 * @copyright   2018 David Watson {@link http://evolutioncode.uk}
 * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since       Moodle 3.3
 */
define("format_tiles/course_mod_modal",["jquery","core/modal_factory","core/config","core/templates","core/notification","core/ajax","core/fragment","core/modal_events"],(function($,modalFactory,config,Templates,Notification,ajax,Fragment,ModalEvents){var loadingIconHtml,modalStore={};const win=$(window);var courseId,tilesConfig;const Selector_modal=".modal",Selector_modalDialog=".modal-dialog",Selector_modalBody=".modal-body",Selector_sectionMain=".section.main",Selector_pageContent="#page-content",Selector_regionMain="#region-main",Selector_moodleMediaPlayer=".mediaplugin_videojs",Selector_closeBtn="button.close",Selector_modalHeader=".modal-header",Selector_embedModuleButtons=".embed-module-buttons",Selector_iframe="iframe",CLASS_COMPLETION_ENABLED="completion-enabled",CLASS_COMPLETION_MANUAL="completion-manual",CLASS_COMPLETION_CHECK_BOX="completioncheckbox",CLASS_COMPLETION_DROPDOWN="completion-dropdown",modalMinWidth=function(){return Math.min(win.width(),1100)},stopAllVideosOnDismiss=function(modal){modal.on(ModalEvents.hidden,(function(){const iframes=modal.find(Selector_iframe),objects=modal.find("object"),moodleMediaPlayer=modal.find(Selector_moodleMediaPlayer);(iframes.length||objects.length||moodleMediaPlayer.length)&amp;&amp;(modalStore[modal.data("cmid")]=void 0,modal.remove())}))},launchCmModal=function(cmId,moduleContextId,sectionNum,title,objectType,pluginfileUrl,completionEnabled,existingCompletionState,isManualCompletion,secondaryUrl){return modalFactory.create({type:modalFactory.types.DEFAULT,title:title,body:loadingIconHtml}).done((function(modal){modalStore[cmId]=modal,modal.setLarge(),modal.show();const modalRoot=$(modal.root);if(modalRoot.attr("id","embed_mod_modal_"+cmId),modalRoot.data("cmid",cmId),modalRoot.data("section",sectionNum),modalRoot.addClass("embed_cm_modal"),"page"===objectType)modalRoot.addClass("mod_"+objectType),stopAllVideosOnDismiss(modalRoot),Fragment.loadFragment("format_tiles","get_cm_content",moduleContextId,{contextid:moduleContextId}).done((function(html,js){modal.setBody(html),Templates.runTemplateJS(js)}));else{var templateData={id:cmId,pluginfileUrl:pluginfileUrl,objectType:null,width:"100%",height:Math.round(win.height()-60),cmid:cmId,tileid:sectionNum,isediting:0,sesskey:config.sesskey,activityname:title,config:{wwwroot:config.wwwroot},completionstring:"",secondaryurl:secondaryUrl},template=null;"resource_html"===objectType?(templateData.objectType="text/html",template="format_tiles/embed_file_modal_body"):"resource_pdf"===objectType?(templateData.objectType="application/pdf",template="format_tiles/embed_file_modal_body"):"url"===objectType&amp;&amp;(templateData.objectType="url",template="format_tiles/embed_url_modal_body"),Templates.render(template,templateData).done((function(html){modal.setBody(html),modalRoot.find(Selector_modalBody).animate({"min-height":Math.round(win.height()-120)},"fast"),"resource_html"===objectType||"url"===objectType?(modalRoot.find(Selector_modal).animate({"max-width":"100%"},"fast"),modalRoot.find(Selector_modalDialog).animate({"max-width":"100%"},"fast"),modalRoot.find(Selector_modalBody).animate({"max-width":"100%"},"fast"),stopAllVideosOnDismiss(modalRoot),"url"===objectType&amp;&amp;modalRoot.find(Selector_modalBody).addClass("text-center")):"resource_pdf"===objectType&amp;&amp;(modalRoot.find(Selector_modal).animate({"max-width":modalMinWidth()},"fast"),modalRoot.find(Selector_modalDialog).animate({"max-width":modalMinWidth()},"fast"))})).fail(Notification.exception)}var headerTemplateData={cmid:cmId,activityname:title,tileid:sectionNum,showDownload:"resource_pdf"===objectType?1:0,showNewWindow:["resource_pdf","url"].includes(objectType)?1:0,pluginfileUrl:pluginfileUrl,forModal:!0,secondaryurl:secondaryUrl};if(completionEnabled){headerTemplateData.istrackeduser=1,headerTemplateData.hascompletion=1;const oldState=1===existingCompletionState;headerTemplateData.overallcomplete=oldState?1:0,headerTemplateData.overallincomplete=oldState?0:1,headerTemplateData.completionIsManual=isManualCompletion,headerTemplateData.completionIsManual||(headerTemplateData.statuscomplete=headerTemplateData.overallcomplete,headerTemplateData.statusincomplete=headerTemplateData.overallincomplete),oldState!==headerTemplateData.completionstate&amp;&amp;require(["format_tiles/completion"],(function(completion){completion.triggerCompletionChangedEvent(parseInt(sectionNum),parseInt(cmId))}))}return Templates.render("format_tiles/embed_module_modal_header_btns",headerTemplateData).done((function(html){modalRoot.find(Selector_embedModuleButtons).remove(),modalRoot.find($("button.close")).remove(),modalRoot.find(Selector_modalHeader).append(html),modalRoot.find(Selector_closeBtn).detach().appendTo(modalRoot.find(Selector_embedModuleButtons));modalRoot.find('[data-action="toggle-manual-completion"]').on("click",(()=&gt;{require(["format_tiles/completion"],(function(completion){setTimeout((()=&gt;{completion.triggerCompletionChangedEvent(parseInt(modalRoot.data("section")),parseInt(modalRoot.data("cmid")))}),300)}))}))})).fail(Notification.exception),setTimeout((()=&gt;{modalHeightChangeWatcher(modalRoot,3,1e3)}),500),!0})),!1};var resizeModal=function(modalRoot){modalRoot.find(Selector_modal).animate({"max-width":modalMinWidth()},"fast");var mediaPlayer=$(Selector_moodleMediaPlayer);mediaPlayer.find("div").each((function(index,child){$(child).css("max-width","")})),mediaPlayer.length&gt;0&amp;&amp;stopAllVideosOnDismiss(modalRoot),modalRoot.find(Selector_iframe).each((function(index,iframe){const iframeSelector=$(iframe);var modal;0===(modal=modalRoot.find(Selector_modalDialog)).length&amp;&amp;(modal=modalRoot.find(Selector_modal));var iframeWidth=Math.min(iframeSelector.width(),win.width());iframeWidth&gt;modal.width()-70&amp;&amp;(modal.animate({"max-width":Math.max(iframeWidth+70,modalMinWidth())},"fast"),modalRoot.find(Selector_modal).animate({"max-width":Math.max(iframeWidth+70,modalMinWidth())},"fast"));var modalBody=modalRoot.find(Selector_modalBody);iframeSelector.height()&gt;modalBody.height()-70&amp;&amp;iframeSelector.attr("height",modalBody.height()-70),stopAllVideosOnDismiss(modalRoot)}))};const modalHeightChangeWatcher=function(modalRoot,howManyChecks,duration){let oldHeight=arguments.length&gt;3&amp;&amp;void 0!==arguments[3]?arguments[3]:0;const iframe=modalRoot.find(Selector_modalBody);if(iframe){const newHeight=Math.round(iframe.height());newHeight&amp;&amp;newHeight&gt;oldHeight+10&amp;&amp;resizeModal(modalRoot),howManyChecks&gt;0&amp;&amp;setTimeout((()=&gt;{modalHeightChangeWatcher(modalRoot,howManyChecks-1,duration,newHeight)}),duration)}},modalRequired=function(cmId,url){return void 0!==tilesConfig.modalallowedmodnames&amp;&amp;(void 0!==tilesConfig.modalallowedcmids&amp;&amp;(!!tilesConfig.modalallowedcmids.includes(cmId)&amp;&amp;(tilesConfig.modalallowedmodnames.includes("page")&amp;&amp;url.startsWith("".concat(config.wwwroot,"/mod/page/view.php"))||tilesConfig.modalallowedmodnames.includes("url")&amp;&amp;url.startsWith("".concat(config.wwwroot,"/mod/url/view.php"))||tilesConfig.modalallowedmodnames.includes("pdf")&amp;&amp;url.startsWith("".concat(config.wwwroot,"/mod/resource/view.php"))||tilesConfig.modalallowedmodnames.includes("html")&amp;&amp;url.startsWith("".concat(config.wwwroot,"/mod/resource/view.php")))))};return{init:function(courseIdInit,isEditing,pageType,launchModalCmid,usingJsNav){courseId=courseIdInit,$(document).ready((function(){tilesConfig=$("#format-tiles-js-config").data();const courseIndex=$("nav#courseindex");if(["course-view-tiles","section-view-tiles"].includes(pageType)){courseIndex.length&gt;0&amp;&amp;courseIndex.on("click",(function(e){const target=$(e.target),link=target.hasClass("courseindex-link")?target:target.find("a.courseindex-link");if(link&amp;&amp;"cm_name"===link.data("for")){e.preventDefault();const linkUrl=link.attr("href");if(linkUrl){const cmId=link.closest("li.courseindex-item").data("id");modalRequired(cmId,linkUrl)?ajax.call([{methodname:"format_tiles_get_course_mod_info",args:{cmid:cmId}}])[0].done((function(data){if(data&amp;&amp;data.modalallowed)if(usingJsNav){0===$("li#section-".concat(data.sectionnumber,".state-visible")).length&amp;&amp;require(["format_tiles/course"],(function(course){course.populateAndExpandSection(data.coursecontextid,data.sectionid,data.sectionnumber)})),launchCmModal(cmId,data.modulecontextid,data.sectionnumber,data.name,"resource"===data.modname?"resource_".concat(data.resourcetype):data.modname,"url"===data.modname||"html"===data.resourcetype?data.pluginfileurl:linkUrl,data.completionenabled?1:0,data.iscomplete?1:0,data.ismanualcompletion,data.pluginfileurl)}else window.location.href=config.wwwroot+"/course/view.php?id=".concat(courseId)+"&amp;section=".concat(data.sectionnumber,"&amp;cmid=").concat(cmId);else window.location.href=linkUrl})).fail((function(){window.location.href=linkUrl})):window.location.href=linkUrl}}})),launchModalCmid&amp;&amp;ajax.call([{methodname:"format_tiles_get_course_mod_info",args:{cmid:launchModalCmid}}])[0].done((function(data){if(data&amp;&amp;data.modalallowed){0===$("li#section-".concat(data.sectionnumber,".state-visible")).length&amp;&amp;usingJsNav&amp;&amp;require(["format_tiles/course"],(function(course){course.populateAndExpandSection(data.coursecontextid,data.sectionid,data.sectionnumber)})),launchCmModal(launchModalCmid,data.modulecontextid,data.sectionnumber,data.name,"resource"===data.modname?"resource_".concat(data.resourcetype):data.modname,["url","resource"].includes(data.modname)?data.pluginfileurl:"",data.completionenabled?1:0,data.iscomplete?1:0,data.ismanualcompletion,data.secondaryurl)}}));var modalSelectors=["launch-tiles-resource-modal","launch-tiles-module-modal","launch-tiles-url-modal"].map((function(action){return'[data-action="'.concat(action,'"]')})).join(", "),pageContent=$(Selector_pageContent);0===pageContent.length&amp;&amp;(pageContent=$(Selector_regionMain)),pageContent.on("click",modalSelectors,(function(e){const tgt=$(e.target);if(tgt.hasClass(CLASS_COMPLETION_CHECK_BOX)||tgt.parent().hasClass(CLASS_COMPLETION_CHECK_BOX)||tgt.hasClass(CLASS_COMPLETION_DROPDOWN)||tgt.parent().hasClass(CLASS_COMPLETION_DROPDOWN)||tgt.is(":button")||tgt.hasClass("expanded-content")||tgt.hasClass("collapsed-content"))return;e.preventDefault();var clickedCmObject=$(e.currentTarget).closest("li.activity");const cmId=clickedCmObject.data("cmid"),moduleContextId=clickedCmObject.data("contextid"),sectionNum=clickedCmObject.closest(Selector_sectionMain).data("section");var existingModal=modalStore[cmId];"object"==typeof existingModal?existingModal.show():(!function(cmId){ajax.call([{methodname:"format_tiles_log_mod_view",args:{courseid:courseId,cmid:cmId}}])[0].fail(Notification.exception)}(cmId),launchCmModal(cmId,moduleContextId,sectionNum,clickedCmObject.data("title"),clickedCmObject.data("modtype"),clickedCmObject.data("url"),clickedCmObject.hasClass(CLASS_COMPLETION_ENABLED),clickedCmObject.data("completion-state")?parseInt(clickedCmObject.data("completion-state")):null,clickedCmObject.hasClass(CLASS_COMPLETION_MANUAL),clickedCmObject.data("url-secondary")))})),Templates.render("format_tiles/loading",{}).catch(Notification.exception).done((function(html){loadingIconHtml=html})).fail(Notification.exception),$(document).on("format-tiles-completion-changed",(function(e,data){data.cmid&amp;&amp;modalStore[data.cmid]&amp;&amp;(modalStore[data.cmid]=void 0)}))}else pageType.match("^mod-[a-z]+-view$")&amp;&amp;courseIndex.on("click",(function(e){const target=$(e.target),link=target.hasClass("courseindex-link")?target:target.find("a.courseindex-link");if(link&amp;&amp;"cm_name"===link.data("for")){e.preventDefault();const linkUrl=link.attr("href");if(linkUrl){const link=$(e.target),cmId=link.closest("li.courseindex-item").data("id");if(modalRequired(cmId,linkUrl))if(usingJsNav)window.location.href="".concat(config.wwwroot,"/course/view.php?id=").concat(courseId,"&amp;cmid=").concat(cmId);else{const sectionElement=link.closest(".courseindex-section"),sectionNumber=sectionElement?sectionElement.data("number"):0;window.location.href="".concat(config.wwwroot,"/course/view.php?id=").concat(courseId)+"&amp;section=".concat(sectionNumber,"&amp;cmid=").concat(cmId)}else window.location.href=linkUrl}}}))}))}}}));
/**
 * Javascript Module to help set up user needs browser storage.
 *
 * @module format_tiles/browser_storage_set_up
 * @copyright 2019 David Watson {@link http://evolutioncode.uk}
 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since Moodle 3.3
 */
define("format_tiles/browser_storage_set_up",["jquery"],(function($){var userId,storageUserConsent_GIVEN="yes",storageUserConsent_DENIED="no",localStorageKeyElements_userPrefStorage="mdl-tiles-userPrefStorage",localStorageKeyElements_user="-user-",storageType_local="local",storageType_session="session",Enabled={local:!1,session:!1},userChoice=null,encodeStorageKey=function(){return localStorageKeyElements_userPrefStorage+localStorageKeyElements_user+userId},storageAllowed=function(){if(null!==userChoice)return userChoice;var browserChoice=localStorage.getItem(encodeStorageKey());return browserChoice?userChoice=browserChoice===storageUserConsent_GIVEN:null},setAllowed=function(allowedOrNot){allowedOrNot?(userChoice=!0,localStorage.setItem(encodeStorageKey(),storageUserConsent_GIVEN)):(userChoice=!1,localStorage.setItem(encodeStorageKey(),storageUserConsent_DENIED))},obtainUserPreference=function(){require(["core/str","core/notification"],(function(str,Notification){str.get_strings([{key:"datapref",component:"format_tiles"},{key:"dataprefquestion",component:"format_tiles"},{key:"yes"},{key:"cancel",component:"moodle"}]).done((function(s){Notification.confirm(s[0],s[1],s[2],s[3],(function(){setAllowed(!0)}),(function(){setAllowed(!1)}))}))}))},storageInitialCheck=function(localOrSession){var storage;try{return localOrSession===storageType_local?storage=localStorage:localOrSession===storageType_session&amp;&amp;(storage=sessionStorage),void 0===storage?!1:(storage.setItem("testItem","testValue"),"testValue"===storage.getItem("testItem")&amp;&amp;(storage.removeItem("testItem"),!0))}catch(err){return require(["core/log"],(function(log){log.debug(err)})),!1}};return{setAllowed:function(allowedOrNot){setAllowed(allowedOrNot)},storageAllowed:function(){return storageAllowed()},getStorageKey:function(){return encodeStorageKey()},Enabled:Enabled,init:function(userIdInit,assumeConsent){userId=userIdInit,$(document).ready((function(){Enabled.local=storageInitialCheck(storageType_local),Enabled.session=storageInitialCheck(storageType_session),assumeConsent?userChoice=!0:null===storageAllowed()&amp;&amp;Enabled.local&amp;&amp;setTimeout((function(){obtainUserPreference()}),3e3),$('a[href*="datapref"]').click((function(e){e.preventDefault(),obtainUserPreference()}))}))}}}));
/**
 * Javascript Module to help out if registration of pluign via curl fails.
 *
 * @module format_tiles/registration
 * @copyright 2019 David Watson {@link http://evolutioncode.uk}
 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since Moodle 3.3
 */
define("format_tiles/registration",["jquery","core/notification","core/config","core/str"],(function($,Notification,config,str){return{attemptRegistration:function(sesskey,serverUrl,data){data.useragent=navigator.userAgent,data.browserlanguages=navigator.languages,$(document).ready((function(){$.ajax({url:serverUrl,type:"POST",crossDomain:!0,contentType:"application/json",data:JSON.stringify(data),dataType:"json",success:function(data){if(data.status){str.get_strings([{key:"registration",component:"admin"},{key:"registeredthanks",component:"format_tiles"},{key:"registerclicktocomplete",component:"format_tiles"},{key:"ok",component:"format_tiles"},{key:"cancel",component:"moodle"}]).done((function(s){Notification.confirm(s[0],s[1]+" "+s[2],s[3],s[4],(function(){window.location.href=config.wwwroot+"/course/format/tiles/editor/register.php?key="+data.key+"&amp;sesskey="+sesskey}),(function(){window.location.href=config.wwwroot+"/admin/settings.php?section=formatsettingtiles"}))}))}},error:function(e){require(["core/log"],(function(log){log.debug("Error registering",e.message)}))}})}))}}}));
/**
 * Javascript Module to handle the icon picker dialogue for format_tiles
 * which the editing user uses to select an icon for a tile or the default icon
 * for all tiles in the course
 *
 * @module      format_tiles/icon_picker
 * @copyright   2018 David Watson {@link http://evolutioncode.uk}
 * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since       Moodle 3.3
 */
define("format_tiles/edit_icon_picker",["jquery","core/templates","core/ajax","core/str","core/notification","core/config"],(function($,Templates,ajax,str,Notification,config){var modalStored,stringStore={pickAnIcon:""},iconSet=[],recentPhotoSet=[],getAndStoreIconSet=function(courseId,callback){var photosPromises=ajax.call([{methodname:"format_tiles_get_icon_set",args:{courseid:courseId}}]);photosPromises[0].done((function(response){response.photos&amp;&amp;(recentPhotoSet=JSON.parse(response.photos));var icons=JSON.parse(response.icons);Object.keys(icons).forEach((function(icon){iconSet.push({filename:icon,displayname:icons[icon]})})),iconSet.length&lt;=0&amp;&amp;require(["core/log"],(function(log){log.error("Error empty icon set"),log.debug(response)})),"function"==typeof callback&amp;&amp;callback();var photoNames=recentPhotoSet.map((function(photo){return photo.filename}));$("#iconpickerphotos").find(".photo").each((function(index,ph){ph=$(ph),-1===photoNames.indexOf(ph.data("filename"))&amp;&amp;ph.fadeOut(500)})),!0!==response.status&amp;&amp;require(["core/log"],(function(log){log.error("Non true status response when getting icon set"),log.debug(response)}))})),photosPromises[0].fail((function(response){require(["core/log"],(function(log){log.error("Fail when getting icon set"),log.debug(response)}))}))},getPhotoTileButtonUrl=function(courseId,sectionId){let cmid=arguments.length&gt;2&amp;&amp;void 0!==arguments[2]?arguments[2]:0;const url=config.wwwroot+"/course/format/tiles/editor/editimage.php?courseid="+courseId+"&amp;sectionid="+sectionId;return cmid?url+"&amp;cmid="+cmid.toString():url},setIcon=function(sectionId,sectionNum,cmid,icon,displayname,pageType,courseId,imageType,sourcecontextid,sourceitemid){var selectedIcon=$("#selectedicon"),changeUiTilePhoto=function(jqueryObjToChange,imageUrl,imageType){var templateToRender="",templateParams={tileicon:icon,tileid:sectionNum,secid:sectionId,isediting:1};switch(imageType){case"tileicon":templateToRender="tileicon";break;case"tilephoto":if(!imageUrl){templateParams.tileicon=$("#format-tiles-js-config").data("defaultcourseicon"),templateToRender="tileicon";break}templateToRender="tilebarphoto",templateParams.phototileurl=imageUrl,templateParams.phototileediturl=getPhotoTileButtonUrl(courseId,sectionId),templateParams.iamgetype=imageType,jqueryObjToChange.closest(".tileiconcontainer").addClass("hasphoto"),setTimeout((function(){getAndStoreIconSet(courseId)}),3e3);break;case"draftfile":templateToRender="tilebarphoto",templateParams.phototileurl=imageUrl,templateParams.phototileediturl=getPhotoTileButtonUrl(courseId,sectionId),templateParams.iamgetype=imageType;break;default:throw new Error("Invalid image type "+imageType)}var divToAnimate="course-view-tiles"===pageType?jqueryObjToChange:selectedIcon;divToAnimate.animate({opacity:0},500,(function(){Templates.render("format_tiles/"+templateToRender,templateParams).done((function(html){divToAnimate.html(html).animate({opacity:1},500)}))}))};$(".tooltip").tooltip("hide");const extrasEnabled=1===$("#icon-picker-modal-body").data("extra");var ajaxIconPickArgs={image:icon,courseid:courseId,sectionid:void 0===sectionId?0:sectionId,cmid:extrasEnabled&amp;&amp;void 0!==cmid?cmid:0,imagetype:imageType,sourcecontextid:void 0===sourcecontextid?0:sourcecontextid,sourceitemid:void 0===sourceitemid?0:sourceitemid};ajax.call([{methodname:"format_tiles_set_image",args:ajaxIconPickArgs}])[0].done((function(response){if(!0===response.status){if(void 0!==cmid&amp;&amp;extrasEnabled&amp;&amp;0!==parseInt(cmid)){const mod=$("#module-".concat(cmid," .activityiconcontainer"));response.imageurl?(mod.css("background-image","url(".concat(response.imageurl,")")).addClass("hasphoto"),mod.find("img.activityicon").hide()):response.iconurl?(mod.removeClass("hasphoto").css("background-image","none"),mod.find("img.activityicon").attr("src",response.iconurl).show()):mod.css("background-image","").removeClass("hasphoto").find(".subtile-bg").css("display","none")}else if("course-view-tiles"===pageType)changeUiTilePhoto($("#tileicon_"+sectionNum),response.imageurl,imageType);else if("course-edit"===pageType){$("#id_defaulttileicon").val(icon),"tileicon"===imageType?Templates.renderPix("tileicon/"+icon,"format_tiles",displayname).done((function(newIcon){selectedIcon.html(newIcon)})):"tilephoto"===imageType&amp;&amp;changeUiTilePhoto($("#tileicon_"+sectionNum),response.imageurl,imageType)}}else require(["core/log"],(function(log){log.error("False response setting icon"),log.debug(response)}))})).fail((function(response){require(["core/log"],(function(log){log.error("Fail setting icon"),log.debug(response)}))}))},launchIconPicker=function(pageType,courseId,sectionId,section,cmid,allowPhotoTiles,documentationurl){const hideShowTabs=function(modalRoot){void 0!==cmid&amp;&amp;modalRoot.find("#launch-photo-library").click()};if("object"!=typeof modalStored){var renderModal=function(){Templates.render("format_tiles/icon_picker_modal_body",{icon_picker_icons:iconSet,showphotos:allowPhotoTiles,showicons:!0,wwwroot:config.wwwroot,documentationurl:documentationurl}).done((function(iconsHTML){require(["core/modal_factory"],(function(modalFact){modalFact.create({type:modalFact.types.DEFAULT,title:stringStore.pickAnIcon,body:iconsHTML}).done((function(modal){modalStored=modal,modal.setLarge(),modal.show();var modalRoot=$(modal.root);modalRoot.attr("id","icon_picker_modal"),modalRoot.data("true-sectionid",sectionId),modalRoot.data("section",section),modalRoot.data("cmid",cmid),modalRoot.addClass("icon_picker_modal"),modalRoot.on("click",".pickericon",(function(e){var newIcon=$(e.currentTarget);setIcon(sectionId,section,cmid,newIcon.data("icon"),newIcon.attr("title"),pageType,courseId,"tileicon",newIcon.data("contextid"),newIcon.data("itemid")),modal.hide()})),modalRoot.on("input","input.iconsearch",(function(e){var searchText=e.currentTarget.value.toLowerCase();modalRoot.find(".pickericon").show(),searchText.length&gt;=3&amp;&amp;modalRoot.find(".pickericon").filter((function(index,icon){return $(icon).data("original-title").toLowerCase().indexOf(searchText)&lt;0})).hide()}));try{const pickerIcon=$(".pickericon");"function"==typeof pickerIcon.tooltip&amp;&amp;pickerIcon.tooltip()}catch(err){require(["core/log"],(function(log){log.debug(err)}))}if(allowPhotoTiles){var url=getPhotoTileButtonUrl(courseId,sectionId,cmid);modalRoot.find("#phototilebtn").attr("href",url),$("#launch-photo-library").click((function(){0!==recentPhotoSet.length&amp;&amp;Templates.render("format_tiles/icon_picker_photos",{icon_picker_photos:recentPhotoSet,wwwroot:config.wwwroot}).done((function(photosHTML){!function(photosHTML,modalRoot,modal){var photoLibrary=$("#iconpickerphotos");photoLibrary.html(photosHTML);var doLast=[];photoLibrary.find(".photo").each((function(index,image){(image=$(image)).data("filesize")&lt;2e5&amp;&amp;image.data("url")?setTimeout((function(){image.attr("style","background-image: url('".concat(image.data("url"),"');"))}),20*index):doLast.push(image),image.click((function(e){var _modalRoot$data,clickedImage=$(e.currentTarget);setIcon(modalRoot.data("cmid")?0:modalRoot.data("true-sectionid"),modalRoot.data("cmid")?0:modalRoot.data("section"),null!==(_modalRoot$data=modalRoot.data("cmid"))&amp;&amp;void 0!==_modalRoot$data?_modalRoot$data:0,clickedImage.data("filename"),clickedImage.data("filename"),pageType,courseId,clickedImage.data("imagetype"),clickedImage.data("contextid"),clickedImage.data("itemid")),modal.hide()}))})),setTimeout((function(){doLast.forEach((function(image){image.attr("src",image.data("url"))}))}),1e3)}(photosHTML,modalRoot,modal)}))}))}hideShowTabs(modalRoot),$(document).trigger("format-tiles-icon-picker-modal-created")}))}))}))};iconSet.length&lt;=0?getAndStoreIconSet(courseId,renderModal):renderModal()}else{if(modalStored.root.data("true-sectionid",sectionId),modalStored.root.data("section",section),modalStored.root.data("cmid",void 0===cmid?0:cmid),modalStored.root.off("click"),modalStored.root.on("click",".pickericon",(function(e){var newIcon=$(e.currentTarget);setIcon(sectionId,section,cmid,newIcon.data("icon"),newIcon.attr("title"),pageType,courseId,newIcon.data("imagetype"),newIcon.data("contextid"),newIcon.data("itemid")),modalStored.hide()})),allowPhotoTiles){var url=getPhotoTileButtonUrl(courseId,sectionId,cmid);modalStored.root.find("#phototilebtn").attr("href",url)}hideShowTabs(modalStored.root),modalStored.show()}};return{init:function(courseId,pageType,allowPhotoTiles,documentationurl){$(document).ready((function(){var stringKey=allowPhotoTiles?"picknewiconphoto":"picknewicon";str.get_string(stringKey,"format_tiles").done((function(pickAnIcon){stringStore.pickAnIcon=pickAnIcon})),getAndStoreIconSet(courseId);var pageContent=$("#page-content");0===pageContent.length&amp;&amp;(pageContent=$("#region-main")),pageContent.on("click",'[data-tiles-action="launch-tiles-icon-picker"]',(function(e){e.preventDefault();var clickedIcon=$(e.currentTarget);launchIconPicker(pageType,courseId,clickedIcon.data("true-sectionid"),clickedIcon.data("section"),clickedIcon.data("cmid"),allowPhotoTiles,documentationurl)}))}))}}}));
/**
 * Javascript Module to help out when editing user is uploading a tile photo.
 *
 * @module format_tiles/edit_upload_image_helper
 * @copyright 2019 David Watson {@link http://evolutioncode.uk}
 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since Moodle 3.3
 */
define("format_tiles/edit_upload_image_helper",["jquery"],(function($){return{init:function(){$(document).ready((function(){$(".fp-btn-choose").click((function(){$("#id_headertag").addClass("collapsed"),$("#id_guidance").addClass("collapsed")}))}))}}}));
/**
 * Load the format_tiles JavaScript for the course edit settings page /course/edit.php?id=xxx
 *
 * @module      format_tiles/completion
 * @copyright   2018 David Watson {@link http://evolutioncode.uk}
 * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("format_tiles/completion",["jquery","core/templates","core/config","core/ajax","core/str","core_course/manual_completion_toggle"],(function($,Templates,config,ajax,str,coreManualCompletion){var courseId;const dataKeys_numberOutOf="data-numoutof",dataKeys_section="data-section",Selector_section="li.section.main",Selector_toggleCompletionSubtile='[data-action="tiles-toggle-manual-completion-subtile"]',Selector_tileNumber="#tile-",Selector_progressIndicatorSecNumber="#tileprogress-",Selector_tile=".tile",Selector_spacer=".spacer",Selector_availabilityinfo=".availabilityinfo";var progressTemplateData=function(tileNumber,numComplete,outOf,asPercent){var data={tileid:tileNumber,numComplete:numComplete,numOutOf:outOf,showAsPercent:asPercent,percent:outOf&gt;0?Math.round(numComplete/outOf*100):0,percentCircumf:106.8,percentOffset:outOf&gt;0?Math.round((outOf-numComplete)/outOf*106.8):0,isComplete:!1,isSingleDigit:!1,hastilephoto:$(Selector_tileNumber+tileNumber).hasClass("phototile")};return data.isOverall=0===tileNumber?1:0,outOf&gt;0&amp;&amp;numComplete&gt;=outOf&amp;&amp;(data.isComplete=!0),data.percent&lt;10&amp;&amp;(data.isSingleDigit=!0),data};const triggerCompletionChangedEvent=function(sectionNum,cmId){if(sectionNum&gt;0||cmId&gt;0){const data={courseid:courseId,section:sectionNum,cmid:cmId};$(document).trigger("format-tiles-completion-changed",data)}},updateSectionsInfo=function(sections,overallcomplete,overalloutof){var newValue,outOf;sections.forEach((sec=&gt;{if(sec.sectionnum&gt;0){const tile=$(Selector_tileNumber+sec.sectionnum);sec.isavailable&amp;&amp;tile.hasClass("tile-restricted")?tile.removeClass("tile-restricted"):sec.isavailable||tile.addClass("tile-restricted"),sec.isclickable&amp;&amp;!tile.hasClass("tile-clickable")?tile.addClass("tile-clickable"):!sec.isclickable&amp;&amp;tile.hasClass("tile-clickable")&amp;&amp;tile.removeClass("tile-clickable"),sec.iscomplete?tile.addClass("is-complete"):tile.removeClass("is-complete");const progressIndicator=$(Selector_progressIndicatorSecNumber+sec.sectionnum.toString());progressIndicator.length&amp;&amp;(sectionNum=sec.sectionnum,tileProgressIndicator=progressIndicator,(newTileProgressValue=sec.numcomplete)&lt;0||newTileProgressValue&gt;tileProgressIndicator.attr(dataKeys_numberOutOf)||sectionNum&amp;&amp;Templates.render("format_tiles/progress",progressTemplateData(sectionNum,newTileProgressValue,parseInt(tileProgressIndicator.attr(dataKeys_numberOutOf)),tileProgressIndicator.hasClass("percent"))).done((function(html){tileProgressIndicator.replaceWith(html)})));const availabilityInfoDiv=tile.find(Selector_availabilityinfo);availabilityInfoDiv.length&gt;0&amp;&amp;sec.isavailable&amp;&amp;!sec.availabilitymessage?availabilityInfoDiv.fadeOut():!sec.isavailable&amp;&amp;sec.availabilitymessage&amp;&amp;(availabilityInfoDiv.length&gt;0?(availabilityInfoDiv.html="NEW"+sec.availabilitymessage,availabilityInfoDiv.fadeIn()):Templates.render("format_tiles/availability_info",{availabilitymessage:sec.availabilitymessage,visible:!0}).done((function(html){progressIndicator.replaceWith(html)})))}var sectionNum,tileProgressIndicator,newTileProgressValue})),newValue=overallcomplete,outOf=overalloutof,Templates.render("format_tiles/progress",progressTemplateData(0,newValue,outOf,!0)).done((function(html){$("#tileprogress-0").replaceWith(html).fadeOut(0).animate({opacity:1},500)}))};return{init:function(courseIdInit){courseId=courseIdInit,$(document).ready((function(){var loadingString="...";str.get_strings([{key:"loading",component:"format_tiles"}]).done((function(s){loadingString=s[0]+"  ..."})),$("body").on("click",Selector_toggleCompletionSubtile,(function(e){const currentTarget=$(e.currentTarget),section=currentTarget.closest("li.section");currentTarget.replaceWith('&lt;span class="completionspinner spinner-grow spinner-grow-sm text-secondary mt-2 mr-2" role="status"&gt;&lt;span class="sr-only"&gt;'+loadingString+"&lt;/span&gt;&lt;/span&gt;");const cmId=parseInt(currentTarget.data("cmid"));if(ajax.call([{methodname:"core_completion_update_activity_completion_status_manually",args:{cmid:cmId,completed:1!==currentTarget.data("complete")}}])[0].done((res=&gt;{!0===res.status&amp;&amp;triggerCompletionChangedEvent(parseInt(section.attr("data-section")),cmId)})),0!==currentTarget.closest(".embed-module-buttons").length){const cmId=currentTarget.data("cmid"),sectionNum=$("li#module-"+cmId).closest(Selector_section).attr(dataKeys_section);triggerCompletionChangedEvent(sectionNum?parseInt(sectionNum):0,cmId?parseInt(cmId):0)}}));var pageContent=$("#page-content");0===pageContent.length&amp;&amp;(pageContent=$("#region-main")),$("li.section").on("click",(function(e){const target=$(e.target);if(target.attr("onclick")&amp;&amp;0===target.attr("onclick").indexOf("window.open")){const cm=target.closest("li.activity");if(cm.hasClass("completion-view")){const section=target.closest("li.section").data("section");triggerCompletionChangedEvent(section,cm.data("cmid"))}}})),coreManualCompletion.init()}))},triggerCompletionChangedEvent:function(sectionNum,cmid){triggerCompletionChangedEvent(sectionNum,cmid)},updateTileInformation:function(sectionNumbers){try{void 0===(sectionNums=sectionNumbers)&amp;&amp;(sectionNums=$(Selector_tile).not(Selector_spacer).map(((i,t)=&gt;parseInt($(t).attr(dataKeys_section)))).toArray()),ajax.call([{methodname:"format_tiles_get_section_information",args:{courseid:courseId,sectionnums:sectionNums}}])[0].done((res=&gt;{updateSectionsInfo(res.sections,res.overall.complete,res.overall.outof)})).fail((err=&gt;{require(["core/log"],(function(log){log.debug("Failed to get section information to check completion status of section"),log.debug(err)}))}))}catch(err){require(["core/log"],(function(log){log.debug(err)}))}var sectionNums},updateSectionsInfo:function(sections,overallcomplete,overalloutof){updateSectionsInfo(sections,overallcomplete,overalloutof)}}}));
/**
 * Main JS module.
 *
 * @package    report_allylti
 * @copyright  Copyright (c) 2019 Open LMS (https://www.openlms.net) / 2023 Anthology Inc. and its affiliates
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("report_allylti/main",["jquery"],(function($){return{init:function(){$('body:not(.moodlebehat-test) a[href*="report/allylti/launch.php?reporttype=course"]').attr("target","_blank")}}}));
/**
 * Module to navigation between users in a course.
 *
 * @module report_competency/user_course_navigation
 * @copyright  2015 Damyon Wiese
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("report_competency/user_course_navigation",["jquery"],(function($){var UserCourseNavigation=function(userSelector,moduleSelector,baseUrl,userId,courseId,moduleId){this._baseUrl=baseUrl,this._userId=userId+"",this._courseId=courseId,this._moduleId=moduleId,$(userSelector).on("change",this._userChanged.bind(this)),$(moduleSelector).on("change",this._moduleChanged.bind(this))};return UserCourseNavigation.prototype._userChanged=function(e){M.util.js_pending("report_competency/user_course_navigation:_userChanged");var queryStr="?user="+$(e.target).val()+"&amp;id="+this._courseId+"&amp;mod="+this._moduleId;document.location=this._baseUrl+queryStr},UserCourseNavigation.prototype._moduleChanged=function(e){M.util.js_pending("report_competency/user_course_navigation:_moduleChanged");var queryStr="?mod="+$(e.target).val()+"&amp;id="+this._courseId+"&amp;user="+this._userId;document.location=this._baseUrl+queryStr},UserCourseNavigation.prototype._userId=null,UserCourseNavigation.prototype._moduleId=null,UserCourseNavigation.prototype._courseId=null,UserCourseNavigation.prototype._baseUrl=null,UserCourseNavigation}));
/**
 * Module to enable inline editing of a comptency grade.
 *
 * @module report_competency/grading_popup
 * @copyright  2015 Damyon Wiese
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("report_competency/grading_popup",["jquery","core/notification","core/str","core/ajax","core/log","core/templates","tool_lp/dialogue"],(function($,notification,str,ajax,log,templates,Dialogue){var GradingPopup=function(regionSelector,userCompetencySelector){this._regionSelector=regionSelector,this._userCompetencySelector=userCompetencySelector,$(this._regionSelector).on("click",this._userCompetencySelector,this._handleClick.bind(this))};return GradingPopup.prototype._handleClick=function(e){var cell=$(e.target).closest(this._userCompetencySelector),competencyId=$(cell).data("competencyid"),courseId=$(cell).data("courseid"),userId=$(cell).data("userid");log.debug("Clicked on cell: competencyId="+competencyId+", courseId="+courseId+", userId="+userId);var requests=ajax.call([{methodname:"tool_lp_data_for_user_competency_summary_in_course",args:{userid:userId,competencyid:competencyId,courseid:courseId}},{methodname:"core_competency_user_competency_viewed_in_course",args:{userid:userId,competencyid:competencyId,courseid:courseId}}]);$.when(requests[0],requests[1]).then(this._contextLoaded.bind(this)).catch(notification.exception)},GradingPopup.prototype._contextLoaded=function(context){return context.displayuser=!0,M.util.js_pending("report_competency/grading_popup:_contextLoaded"),$.when(str.get_string("usercompetencysummary","report_competency"),templates.render("tool_lp/user_competency_summary_in_course",context)).then(function(title,templateData){return new Dialogue(title,templateData[0],(function(){templates.runTemplateJS(templateData[1]),M.util.js_complete("report_competency/grading_popup:_contextLoaded")}),this._refresh.bind(this),!0)}.bind(this))},GradingPopup.prototype._refresh=function(){var region=$(this._regionSelector),courseId=region.data("courseid"),moduleId=region.data("moduleid"),userId=region.data("userid");return""===moduleId&amp;&amp;(moduleId=0),ajax.call([{methodname:"report_competency_data_for_report",args:{courseid:courseId,userid:userId,moduleid:moduleId},done:this._pageContextLoaded.bind(this),fail:notification.exception}])},GradingPopup.prototype._pageContextLoaded=function(context){templates.render("report_competency/report",context).then(function(html,js){templates.replaceNode(this._regionSelector,html,js)}.bind(this)).catch(notification.exception)},GradingPopup.prototype._regionSelector=null,GradingPopup.prototype._userCompetencySelector=null,GradingPopup}));
/**
 * Message users.
 *
 * @module     report_insights/message_users
 * @copyright  2019 David Monllao
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("report_insights/message_users",["jquery","core/str","core/log","core/modal_factory","core/modal_events","core/templates","core/notification","core/ajax"],(function($,Str,Log,ModalFactory,ModalEvents,Templates,Notification,Ajax){var SELECTORS_BULKACTIONSELECT="#formactionid",MessageUsers=function(rootNode,actionName){this.actionName=actionName,this.attachEventListeners(rootNode)};return MessageUsers.prototype.actionName=null,MessageUsers.prototype.modal=null,MessageUsers.prototype.attachEventListeners=function(rootNode){$(rootNode+" button[data-bulk-sendmessage]").on("click",function(e){e.preventDefault();var cTarget=$(e.currentTarget),users={},predictionToUserMapping=cTarget.data("prediction-to-user-id");return $('.insights-list input[data-togglegroup^="insight-bulk-action"][data-toggle="slave"]:checked').each((function(index,value){var predictionId=$(value).closest("tr[data-prediction-id]").data("prediction-id");if(void 0!==predictionToUserMapping[predictionId]){var userId=predictionToUserMapping[predictionId];users[predictionId]=userId}else Log.error("Unknown user for prediction "+predictionId)})),0===Object.keys(users).length||this.showSendMessage(users),this}.bind(this))},MessageUsers.prototype.showSendMessage=function(users){var userIds=new Set(Object.values(users));if(0==userIds.length)return $.Deferred().resolve().promise();var titlePromise=null;return titlePromise=1==userIds.size?Str.get_string("sendbulkmessagesingle","core_message"):Str.get_string("sendbulkmessage","core_message",userIds.size),$.when(ModalFactory.create({type:ModalFactory.types.SAVE_CANCEL,body:Templates.render("core_user/send_bulk_message",{})}),titlePromise).then(function(modal,title){return this.modal=modal,this.modal.setTitle(title),this.modal.setSaveButtonText(title),this.modal.getRoot().on(ModalEvents.hidden,function(){$(SELECTORS_BULKACTIONSELECT).focus(),this.modal.getRoot().remove()}.bind(this)),this.modal.getRoot().on(ModalEvents.save,this.submitSendMessage.bind(this,users)),this.modal.show(),this.modal}.bind(this))},MessageUsers.prototype.submitSendMessage=function(users){var messageText=this.modal.getRoot().find("form textarea").val(),messages=[];new Set(Object.values(users)).forEach((function(userId){messages.push({touserid:userId,text:messageText})}));var actionName=this.actionName,message=null;return Ajax.call([{methodname:"core_message_send_instant_messages",args:{messages:messages}}])[0].then((function(messageIds){return 1==messageIds.length?Str.get_string("sendbulkmessagesentsingle","core_message"):Str.get_string("sendbulkmessagesent","core_message",messageIds.length)})).then((function(msg){return message=msg,Ajax.call([{methodname:"report_insights_action_executed",args:{actionname:actionName,predictionids:Object.keys(users)}}])[0]})).then((function(){return Notification.addNotification({message:message,type:"success"}),!0})).catch(Notification.exception)},{init:function(rootNode,actionName){return new MessageUsers(rootNode,actionName)}}}));
/**
 * Module to manage report insights actions that are executed using AJAX.
 *
 * @copyright  2017 David Monllao {@link http://www.davidmonllao.com}
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("report_insights/actions",["jquery","core/str","core/ajax","core/notification","core/url","core/modal_factory","core/modal_events"],(function($,Str,Ajax,Notification,Url,ModalFactory,ModalEvents){return{initBulk:function(rootNode){$(rootNode+" [data-bulk-actionname]").on("click",(function(e){e.preventDefault();var action=$(e.currentTarget),actionName=action.data("bulk-actionname"),actionVisibleName=action.text().trim(),predictionIds=[],predictionContainers=[];if($('.insights-list input[data-togglegroup^="insight-bulk-action-"][data-toggle="slave"]:checked').each((function(){var container=$(this).closest("tr[data-prediction-id]");predictionContainers.push(container),predictionIds.push(container.data("prediction-id"))})),0===predictionIds.length)return this;var strings=[];return Str.get_strings([{key:"confirmbulkaction",component:"report_insights",param:{action:actionVisibleName,nitems:predictionIds.length}},{key:"confirm",component:"moodle"}]).then((function(strs){return strings=strs,ModalFactory.create({type:ModalFactory.types.SAVE_CANCEL,title:actionVisibleName,body:strings[0]})})).then((function(modal){return modal.setSaveButtonText(strings[1]),modal.show(),modal.getRoot().on(ModalEvents.save,(function(){return function(predictionIds,predictionContainers,actionName){return Ajax.call([{methodname:"report_insights_action_executed",args:{predictionids:predictionIds,actionname:actionName}}])[0].then((function(){var tableNode=!1;if(predictionContainers.forEach((function(el){!1===tableNode&amp;&amp;(tableNode=el.closest("table")),el.remove()})),0===tableNode.find("tbody &gt; tr").length){let params={contextid:tableNode.closest("div.insight-container").data("context-id"),modelid:tableNode.closest("div.insight-container").data("model-id")};window.location.assign(Url.relativeUrl("report/insights/insights.php",params,!1))}})).catch(Notification.exception)}(predictionIds,predictionContainers,actionName)})),modal})).catch(Notification.exception),this}))}}}));
define("report_participation/participants",["exports","jquery","core/custom_interaction_events","core/modal_events","core/notification","core_user/local/participants/bulkactions"],(function(_exports,_jquery,_custom_interaction_events,_modal_events,_notification,_bulkactions){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Some UI stuff for participants page.
   * This is also used by the report/participants/index.php because it has the same functionality.
   *
   * @module     core_user/participants
   * @copyright  2017 Damyon Wiese
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_jquery=_interopRequireDefault(_jquery),_custom_interaction_events=_interopRequireDefault(_custom_interaction_events),_modal_events=_interopRequireDefault(_modal_events),_notification=_interopRequireDefault(_notification);const Selectors_bulkActionSelect="#formactionid",Selectors_bulkUserSelectedCheckBoxes="input[data-togglegroup^='participants-table'][data-toggle='slave']:checked",Selectors_participantsForm="#participantsform";_exports.init=()=&gt;{const root=document.querySelector(Selectors_participantsForm),resetBulkAction=bulkActionSelect=&gt;{bulkActionSelect.value=""};_custom_interaction_events.default.define(Selectors_bulkActionSelect,[_custom_interaction_events.default.events.accessibleChange]),(0,_jquery.default)(Selectors_bulkActionSelect).on(_custom_interaction_events.default.events.accessibleChange,(e=&gt;{const action=e.target.value,checkboxes=root.querySelectorAll(Selectors_bulkUserSelectedCheckBoxes);if(-1!==action.indexOf("#")){e.preventDefault();const ids=[];checkboxes.forEach((checkbox=&gt;{ids.push(checkbox.getAttribute("name").replace("user",""))})),"#messageselect"===action&amp;&amp;(0,_bulkactions.showSendMessage)(ids).then((modal=&gt;(modal.getRoot().on(_modal_events.default.hidden,(()=&gt;{const bulkActionSelector=root.querySelector(Selectors_bulkActionSelect);resetBulkAction(bulkActionSelector),bulkActionSelector.focus()})),modal))).catch(_notification.default.exception)}else""!==action&amp;&amp;checkboxes.length&amp;&amp;e.target.form().submit();resetBulkAction(e.target)}))}}));
/**
 * AMD module to handle overriding activity completion status.
 *
 * @module     report_progress/completion_override
 * @copyright  2016 onwards Eiz Eddin Al Katrib &lt;eiz@barasoft.co.uk&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.1
 */
define("report_progress/completion_override",["jquery","core/ajax","core/str","core/modal_factory","core/modal_events","core/notification","core/custom_interaction_events","core/templates","core/pending"],(function($,Ajax,Str,ModalFactory,ModalEvents,Notification,CustomEvents,Templates,Pending){var userFullName,triggerElement,userConfirm=function(e,data){data.originalEvent.preventDefault(),data.originalEvent.stopPropagation(),e.preventDefault(),e.stopPropagation();var elemData=(triggerElement=$(e.currentTarget)).data("changecompl").split("-"),override={userid:elemData[0],cmid:elemData[1],newstate:elemData[2]},newStateStr=1==override.newstate?"completion-y":"completion-n";Str.get_strings([{key:newStateStr,component:"completion"}]).then((function(strings){return Str.get_strings([{key:"confirm",component:"moodle"},{key:"areyousureoverridecompletion",component:"completion",param:strings[0]}])})).then((function(strings){return ModalFactory.create({type:ModalFactory.types.SAVE_CANCEL,title:strings[0],body:strings[1]})})).then((function(modal){modal.getRoot().on(ModalEvents.save,(function(){!function(override){const pendingPromise=new Pending("report_progress/compeletion_override/setOverride");Templates.render("core/loading",{}).then((function(html){return triggerElement.append(html),Ajax.call([{methodname:"core_completion_override_activity_completion_status",args:override}])[0]})).then((function(results){var completionState=results.state&gt;0?1:0,tooltipKey=completionState?"completion-y-override":"completion-n-override";Str.get_string(tooltipKey,"completion",userFullName).then((function(stateString){var params={state:stateString,date:"",user:triggerElement.attr("data-userfullname"),activity:triggerElement.attr("data-activityname")};return Str.get_string("progress-title","completion",params)})).then((function(titleString){var tracking,completionTracking=triggerElement.attr("data-completiontracking");return Templates.renderPix((tracking=completionTracking,completionState&gt;0?"i/completion-"+tracking+"-y-override":"i/completion-"+tracking+"-n-override"),"core",titleString)})).then((function(html){var oppositeState=completionState&gt;0?0:1;triggerElement.find(".loading-icon").remove(),triggerElement.data("changecompl",override.userid+"-"+override.cmid+"-"+oppositeState),triggerElement.attr("data-changecompl",override.userid+"-"+override.cmid+"-"+oppositeState),triggerElement.children("img").replaceWith(html)})).catch(Notification.exception)})).then((()=&gt;{pendingPromise.resolve()})).catch(Notification.exception)}(override)})),modal.getRoot().on(ModalEvents.hidden,(function(){triggerElement.focus(),modal.destroy()})),modal.show()})).catch(Notification.exception)};return{init:function(fullName){userFullName=fullName,$("#completion-progress a.changecompl").each((function(index,element){CustomEvents.define(element,[CustomEvents.events.activate])})),$("#completion-progress").on(CustomEvents.events.activate,"a.changecompl",(function(e,data){userConfirm(e,data)}))}}}));
define("gradereport_grader/stickycolspan",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0;
/**
   * Javascript module for fixing the position of sticky headers with multiple colspans
   *
   * @module      gradereport_grader/stickycolspan
   * @copyright   2022 Bas Brands &lt;bas@moodle.com&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */
const SELECTORS_GRADEPARENT=".gradeparent",SELECTORS_STUDENTHEADER="#studentheader",SELECTORS_TABLEHEADER="th.header",SELECTORS_BEHAT="body.behat-site";_exports.init=()=&gt;{if(document.querySelector(SELECTORS_BEHAT))return;const grader=document.querySelector(SELECTORS_GRADEPARENT),studentHeader=grader.querySelector(SELECTORS_STUDENTHEADER),leftOffset=getComputedStyle(studentHeader).getPropertyValue("left"),rightOffset=getComputedStyle(studentHeader).getPropertyValue("right");grader.querySelectorAll(SELECTORS_TABLEHEADER).forEach((tableHeader=&gt;{if(tableHeader.colSpan&gt;1){const addOffset=tableHeader.offsetWidth-studentHeader.offsetWidth;window.right_to_left()?tableHeader.style.right="calc("+rightOffset+" - "+addOffset+"px )":tableHeader.style.left="calc("+leftOffset+" - "+addOffset+"px )"}}))}}));
define("gradereport_singleview/grade",["exports","core/pending","core/templates","core_grades/searchwidget/repository","core_grades/searchwidget/basewidget","jquery","core_grades/searchwidget/selectors"],(function(_exports,_pending,Templates,Repository,WidgetBase,_jquery,Selectors){function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * A small modal to search grade items within the gradebook.
   *
   * @module    gradereport_singleview
   * @copyright 2022 Mathew May &lt;mathew.solutions&gt;
   * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_pending=_interopRequireDefault(_pending),Templates=_interopRequireWildcard(Templates),Repository=_interopRequireWildcard(Repository),WidgetBase=_interopRequireWildcard(WidgetBase),_jquery=_interopRequireDefault(_jquery),Selectors=_interopRequireWildcard(Selectors);_exports.init=()=&gt;{const pendingPromise=new _pending.default;registerListenerEvents(),pendingPromise.resolve()};const registerListenerEvents=()=&gt;{let{bodyPromiseResolver:bodyPromiseResolver,bodyPromise:bodyPromise}=WidgetBase.promisesAndResolvers();const dropdownMenuContainer=document.querySelector(Selectors.elements.getSearchWidgetDropdownSelector("grade"));(0,_jquery.default)(Selectors.elements.getSearchWidgetSelector("grade")).on("show.bs.dropdown",(async e=&gt;{const courseID=e.relatedTarget.dataset.courseid;await WidgetBase.showLoader(dropdownMenuContainer);const data=await Repository.gradeitemFetch(courseID).catch((async e=&gt;{const errorTemplateData={errormessage:e.message};bodyPromiseResolver(await Templates.render("core_grades/searchwidget/error",errorTemplateData))}));data!==[]&amp;&amp;(await WidgetBase.init(dropdownMenuContainer,bodyPromise,data.gradeitems,searchGradeitems()),bodyPromiseResolver(Templates.render("gradereport_singleview/gradesearch_body",[])))})),(0,_jquery.default)(Selectors.elements.getSearchWidgetSelector("grade")).on("hide.bs.dropdown",(()=&gt;{dropdownMenuContainer.innerHTML=""}))},searchGradeitems=()=&gt;()=&gt;(modules,searchTerm)=&gt;{if(""===searchTerm)return modules;searchTerm=searchTerm.toLowerCase();const searchResults=[];return modules.forEach((module=&gt;{module.name.toLowerCase().includes(searchTerm)&amp;&amp;searchResults.push(module)})),searchResults}}));
define("gradereport_singleview/selectors",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0;var name,value,_default={actions:{bulkaction:(name="role",value="bulkaction","[data-".concat(name,'="').concat(value,'"]'))},elements:{override:"input[type=checkbox][name^=override]",exclude:"input[type=checkbox][name^=exclude]",modalsave:'[data-action="save"]',warningcheckbox:'input[type="checkbox"]',modalformdata:".formdata",modalradio:'input[type="radio"]',modalinput:'input[type="text"]',modalradiochecked:'input[type="radio"]:checked',enablebulkinsert:'input[type="checkbox"][name^=bulk]',formradio:"select[name^=bulk]",modalgrade:".form-control",formgrade:'input[type="text"][name^=bulk]',formsave:'input[type="submit"]'}};return _exports.default=_default,_exports.default}));
define("gradereport_singleview/user",["exports","core/pending","core/templates","core_grades/searchwidget/repository","core_grades/searchwidget/basewidget","core/url","jquery","core_grades/searchwidget/selectors"],(function(_exports,_pending,Templates,Repository,WidgetBase,_url,_jquery,Selectors){function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * A small modal to search users within the gradebook.
   *
   * @module    gradereport_singleview/user
   * @copyright 2022 Mathew May &lt;mathew.solutions&gt;
   * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_pending=_interopRequireDefault(_pending),Templates=_interopRequireWildcard(Templates),Repository=_interopRequireWildcard(Repository),WidgetBase=_interopRequireWildcard(WidgetBase),_url=_interopRequireDefault(_url),_jquery=_interopRequireDefault(_jquery),Selectors=_interopRequireWildcard(Selectors);_exports.init=()=&gt;{const pendingPromise=new _pending.default;registerListenerEvents(),pendingPromise.resolve()};const registerListenerEvents=()=&gt;{let{bodyPromiseResolver:bodyPromiseResolver,bodyPromise:bodyPromise}=WidgetBase.promisesAndResolvers();const dropdownMenuContainer=document.querySelector(Selectors.elements.getSearchWidgetDropdownSelector("user"));(0,_jquery.default)(Selectors.elements.getSearchWidgetSelector("user")).on("show.bs.dropdown",(async e=&gt;{const courseID=e.relatedTarget.dataset.courseid,groupId=e.relatedTarget.dataset.groupid,actionBaseUrl=_url.default.relativeUrl("/grade/report/singleview/index.php",{item:"user"},!1);await WidgetBase.showLoader(dropdownMenuContainer);const data=await Repository.userFetch(courseID,actionBaseUrl,groupId).catch((async e=&gt;{const errorTemplateData={errormessage:e.message};bodyPromiseResolver(await Templates.render("core_grades/searchwidget/error",errorTemplateData))}));data!==[]&amp;&amp;(await WidgetBase.init(dropdownMenuContainer,bodyPromise,data.users,searchUsers()),bodyPromiseResolver(Templates.render("core_grades/searchwidget/user/usersearch_body",[])))})),(0,_jquery.default)(Selectors.elements.getSearchWidgetSelector("user")).on("hide.bs.dropdown",(()=&gt;{dropdownMenuContainer.innerHTML=""}))},searchUsers=()=&gt;()=&gt;(users,searchTerm)=&gt;{if(""===searchTerm)return users;searchTerm=searchTerm.toLowerCase();const searchResults=[];return users.forEach((user=&gt;{user.fullname.toLowerCase().includes(searchTerm)&amp;&amp;searchResults.push(user)})),searchResults}}));
define("gradereport_singleview/bulkactions",["exports","core/pending","core/custom_interaction_events","core/modal_factory","core/templates","core/modal_events","core/str","core/notification","gradereport_singleview/selectors"],(function(_exports,_pending,_custom_interaction_events,_modal_factory,_templates,_modal_events,Str,_notification,_selectors){function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Javascript module for bulk actions.
   *
   * @module      gradereport_singleview/bulkactions
   * @copyright   2022 Ilya Tregubov &lt;ilya@moodle.com&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_pending=_interopRequireDefault(_pending),_custom_interaction_events=_interopRequireDefault(_custom_interaction_events),_modal_factory=_interopRequireDefault(_modal_factory),_templates=_interopRequireDefault(_templates),_modal_events=_interopRequireDefault(_modal_events),Str=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}(Str),_notification=_interopRequireDefault(_notification),_selectors=_interopRequireDefault(_selectors);_exports.init=()=&gt;{const pendingPromise=new _pending.default;registerListenerEvents(),pendingPromise.resolve()};const registerListenerEvents=()=&gt;{const events=["click",_custom_interaction_events.default.events.activate,_custom_interaction_events.default.events.keyboardActivate];_custom_interaction_events.default.define(document,events),events.forEach((event=&gt;{document.addEventListener(event,(async e=&gt;{const trigger=e.target.closest(_selectors.default.actions.bulkaction);if(trigger)if("overrideallgrades"===trigger.dataset.action||"overridenonegrades"===trigger.dataset.action){const override=document.querySelectorAll(_selectors.default.elements.override);"overridenonegrades"===trigger.dataset.action?Str.get_strings([{key:"removeoverride",component:"gradereport_singleview"},{key:"overridenoneconfirm",component:"gradereport_singleview"},{key:"removeoverridesave",component:"gradereport_singleview"},{key:"cancel",component:"moodle"}]).done((strings=&gt;{_notification.default.confirm(strings[0],strings[1],strings[2],strings[3],(()=&gt;{override.forEach((el=&gt;{el.checked&amp;&amp;el.click()}))}))})).fail(_notification.default.exception):override.forEach((el=&gt;{el.checked||el.click()}))}else if("excludeallgrades"===trigger.dataset.action||"excludenonegrades"===trigger.dataset.action){const exclude=document.querySelectorAll(_selectors.default.elements.exclude),checked="excludeallgrades"===trigger.dataset.action;exclude.forEach((el=&gt;{el.checked=checked}))}else"bulklegend"===trigger.dataset.action&amp;&amp;Str.get_strings([{key:"bulklegend",component:"gradereport_singleview"},{key:"save",component:"moodle"}]).done((strings=&gt;{_modal_factory.default.create({type:_modal_factory.default.types.SAVE_CANCEL,body:_templates.default.render("gradereport_singleview/bulkinsert",{id:"bulkinsertmodal",name:"bulkinsertmodal"}),title:strings[0]}).then((modal=&gt;(modal.setSaveButtonText(strings[1]),modal.getFooter().find(_selectors.default.elements.modalsave).attr("disabled",!0),modal.getRoot().on(_modal_events.default.hidden,(()=&gt;{modal.getRoot().remove()})),modal.getRoot().on("change",_selectors.default.elements.warningcheckbox,(e=&gt;{if(e.preventDefault(),e.target.checked){modal.getRoot().find(_selectors.default.elements.modalformdata).removeClass("dimmed_text"),modal.getRoot().find(_selectors.default.elements.modalradio).removeAttr("disabled"),modal.getRoot().find(_selectors.default.elements.modalinput).removeAttr("disabled");modal.getRoot().find(_selectors.default.elements.modalradiochecked).val()&amp;&amp;modal.getFooter().find(_selectors.default.elements.modalsave).removeAttr("disabled")}else modal.getRoot().find(_selectors.default.elements.modalformdata).addClass("dimmed_text"),modal.getRoot().find(_selectors.default.elements.modalradio).attr("disabled",!0),modal.getRoot().find(_selectors.default.elements.modalinput).attr("disabled",!0),modal.getFooter().find(_selectors.default.elements.modalsave).attr("disabled",!0)})),modal.getRoot().on("change",_selectors.default.elements.modalradio,(e=&gt;{e.preventDefault(),modal.getFooter().find(_selectors.default.elements.modalsave).removeAttr("disabled")})),modal.getRoot().on(_modal_events.default.save,(()=&gt;{document.querySelector(_selectors.default.elements.enablebulkinsert).checked=!0;const formRadioData=modal.getRoot().find(_selectors.default.elements.modalradiochecked).val();document.querySelector(_selectors.default.elements.formradio).value=formRadioData;const formData=modal.getRoot().find(_selectors.default.elements.modalgrade).val();document.querySelector(_selectors.default.elements.formgrade).value=formData,document.querySelector(_selectors.default.elements.formsave).click()})),modal.show(),modal))).fail(_notification.default.exception)})).fail(_notification.default.exception)}))}))}}));
define("gradereport_user/gradecategorytoggle",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0;
/**
   * Javascript module for toggling the visibility of the grade categories in the user report.
   *
   * @module    gradereport_user/gradecategorytoggle
   * @copyright 2022 Mihail Geshoski &lt;mihail@moodle.com&gt;
   * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */
const SELECTORS_CATEGORY_TOGGLE=".toggle-category",SELECTORS_USER_REPORT_TABLE=".user-grade",toggleCategory=toggleElement=&gt;{const target=toggleElement.dataset.target,categoryId=toggleElement.dataset.categoryid,isCollapsing="true"===toggleElement.getAttribute("aria-expanded"),targetRows=toggleElement.closest(SELECTORS_USER_REPORT_TABLE).querySelectorAll(target);isCollapsing?(toggleElement.setAttribute("aria-expanded","false"),toggleElement.dataset.target="[data-hidden-by='".concat(categoryId,"']")):(toggleElement.setAttribute("aria-expanded","true"),toggleElement.dataset.target=".cat_".concat(categoryId,"[data-hidden='false']")),targetRows.forEach((row=&gt;{isCollapsing?(row.dataset.hidden="true",row.dataset.hiddenBy=categoryId):(row.dataset.hidden="false",row.dataset.hiddenBy="")})),updateParentCategoryRowspans(toggleElement,targetRows.length)},updateParentCategoryRowspans=(toggleElement,num)=&gt;{const userReport=toggleElement.closest(SELECTORS_USER_REPORT_TABLE);toggleElement.closest("tr").classList.forEach((className=&gt;{const parentCategoryToggleElement=userReport.querySelector('[data-target=".'.concat(className,"[data-hidden='false']\""));if(parentCategoryToggleElement){const categoryRowSpanElement=parentCategoryToggleElement.closest("tr").nextElementSibling.querySelector("[rowspan]");"true"===toggleElement.getAttribute("aria-expanded")?categoryRowSpanElement.rowSpan=categoryRowSpanElement.rowSpan+num:categoryRowSpanElement.rowSpan=categoryRowSpanElement.rowSpan-num}}))};_exports.init=userReportId=&gt;{(userReportId=&gt;{document.querySelector("#"+userReportId).querySelector(SELECTORS_USER_REPORT_TABLE).addEventListener("click",(e=&gt;{const toggle=e.target.closest(SELECTORS_CATEGORY_TOGGLE);toggle&amp;&amp;toggleCategory(toggle)}))})(userReportId)}}));
define("gradereport_user/user",["exports","core/pending","core/templates","core_grades/searchwidget/repository","core_grades/searchwidget/basewidget","core/str","core/url","jquery","core_grades/searchwidget/selectors"],(function(_exports,_pending,Templates,Repository,WidgetBase,_str,_url,_jquery,Selectors){function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * A widget to search users within the gradebook.
   *
   * @module    gradereport_user/user
   * @copyright 2022 Mathew May &lt;mathew.solutions&gt;
   * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_pending=_interopRequireDefault(_pending),Templates=_interopRequireWildcard(Templates),Repository=_interopRequireWildcard(Repository),WidgetBase=_interopRequireWildcard(WidgetBase),_url=_interopRequireDefault(_url),_jquery=_interopRequireDefault(_jquery),Selectors=_interopRequireWildcard(Selectors);_exports.init=()=&gt;{const pendingPromise=new _pending.default;registerListenerEvents(),pendingPromise.resolve()};const registerListenerEvents=()=&gt;{let{bodyPromiseResolver:bodyPromiseResolver,bodyPromise:bodyPromise}=WidgetBase.promisesAndResolvers();const dropdownMenuContainer=document.querySelector(Selectors.elements.getSearchWidgetDropdownSelector("user"));(0,_jquery.default)(Selectors.elements.getSearchWidgetSelector("user")).on("show.bs.dropdown",(async e=&gt;{const courseID=e.relatedTarget.dataset.courseid,groupId=e.relatedTarget.dataset.groupid,actionBaseUrl=_url.default.relativeUrl("/grade/report/user/index.php",{},!1);await WidgetBase.showLoader(dropdownMenuContainer);const data=await Repository.userFetch(courseID,actionBaseUrl,groupId).catch((async e=&gt;{const errorTemplateData={errormessage:e.message};bodyPromiseResolver(await Templates.render("core_grades/searchwidget/error",errorTemplateData))}));if(data===[])return;const allUsersOptionName=await(0,_str.get_string)("allusersnum","gradereport_user",data.users.length),allUsersOption=await Templates.render("gradereport_user/all_users_item",{id:0,name:allUsersOptionName,url:_url.default.relativeUrl("/grade/report/user/index.php",{id:courseID,userid:0},!1)});await WidgetBase.init(dropdownMenuContainer,bodyPromise,data.users,searchUsers(),allUsersOption),bodyPromiseResolver(Templates.render("core_grades/searchwidget/user/usersearch_body",{displayunsearchablecontent:!0}))})),(0,_jquery.default)(Selectors.elements.getSearchWidgetSelector("user")).on("hide.bs.dropdown",(()=&gt;{dropdownMenuContainer.innerHTML=""}))},searchUsers=()=&gt;()=&gt;(users,searchTerm)=&gt;{if(""===searchTerm)return users;searchTerm=searchTerm.toLowerCase();const searchResults=[];return users.forEach((user=&gt;{user.fullname.toLowerCase().includes(searchTerm)&amp;&amp;searchResults.push(user)})),searchResults}}));
/**
 * AMD code for the frequently used comments chooser for the marking guide grading form.
 *
 * @module     gradingform_guide/comment_chooser
 * @copyright  2015 Jun Pataleta &lt;jun@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("gradingform_guide/comment_chooser",["jquery","core/templates","core/notification","core/yui"],(function($,templates,notification){return{initialise:function(criterionId,buttonId,remarkId,commentOptions){function generateCommentsChooser(){var context={criterionId:criterionId,comments:commentOptions};templates.render("gradingform_guide/comment_chooser",context).done((function(compiledSource){!function(compiledSource,comments){var titleLabel="&lt;label&gt;"+M.util.get_string("insertcomment","gradingform_guide")+"&lt;/label&gt;",cancelButtonId="comment-chooser-"+criterionId+"-cancel",cancelButton='&lt;button id="'+cancelButtonId+'"&gt;'+M.util.get_string("cancel","moodle")+"&lt;/button&gt;",chooserDialog=new M.core.dialogue({modal:!0,headerContent:titleLabel,bodyContent:compiledSource,footerContent:cancelButton,focusAfterHide:"#"+remarkId,id:"comments-chooser-dialog-"+criterionId});$("#"+cancelButtonId).click((function(){chooserDialog.hide()})),$.each(comments,(function(index,comment){var commentOptionId="#comment-option-"+criterionId+"-"+comment.id;$(commentOptionId).click((function(){var remarkTextArea=$("#"+remarkId),remarkText=remarkTextArea.val();""!==remarkText.trim()&amp;&amp;(remarkText+="\n"),remarkText+=comment.description,remarkTextArea.val(remarkText),chooserDialog.hide()})),$(document).off("keypress",commentOptionId).on("keypress",commentOptionId,(function(){var keyCode=event.which||event.keyCode;13!=keyCode&amp;&amp;32!=keyCode||$(commentOptionId).click()}))})),chooserDialog.after("visibleChange",(function(e){e.prevVal&amp;&amp;!e.newVal&amp;&amp;this.destroy()}),chooserDialog),chooserDialog.show()}(compiledSource,commentOptions)})).fail(notification.exception)}$("#"+buttonId).click((function(e){e.preventDefault(),generateCommentsChooser()}))}}}));
define("gradingform_guide/grades/grader/gradingpanel",["exports","core/ajax","core_grades/grades/grader/gradingpanel/normalise","core_grades/grades/grader/gradingpanel/comparison","jquery"],(function(_exports,_ajax,_normalise,_comparison,_jquery){var obj;
/**
   * Grading panel for gradingform_guide.
   *
   * @module     gradingform_guide/grades/grader/gradingpanel
   * @copyright  2019 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.storeCurrentGrade=_exports.fetchCurrentGrade=void 0,_jquery=(obj=_jquery)&amp;&amp;obj.__esModule?obj:{default:obj};_exports.fetchCurrentGrade=(component,contextid,itemname,gradeduserid)=&gt;(0,_ajax.call)([{methodname:"gradingform_guide_grader_gradingpanel_fetch",args:{component:component,contextid:contextid,itemname:itemname,gradeduserid:gradeduserid}}])[0];_exports.storeCurrentGrade=async(component,contextid,itemname,gradeduserid,notifyUser,rootNode)=&gt;{const form=rootNode.querySelector("form");return!0===(0,_comparison.compareData)(form)?(0,_normalise.normaliseResult)(await(0,_ajax.call)([{methodname:"gradingform_guide_grader_gradingpanel_store",args:{component:component,contextid:contextid,itemname:itemname,gradeduserid:gradeduserid,notifyuser:notifyUser,formdata:(0,_jquery.default)(form).serialize()}}])[0]):""}}));
define("gradingform_guide/grades/grader/gradingpanel/comments/selectors",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0;return _exports.default={frequentComment:'[data-gradingform_guide-role="frequent-comment"]',criterion:'[data-gradingform-guide-role="criterion"]',remark:'[data-gradingform-guide-role="remark"]'},_exports.default}));
define("gradingform_guide/grades/grader/gradingpanel/comments",["exports","./comments/selectors"],(function(_exports,_selectors){var obj;
/**
   * Grading panel frequently used comments selector.
   *
   * @module     gradingform_guide/grades/grader/gradingpanel/comments
   * @copyright  2019 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_selectors=(obj=_selectors)&amp;&amp;obj.__esModule?obj:{default:obj};_exports.init=rootId=&gt;{document.querySelector("#".concat(rootId)).addEventListener("click",(e=&gt;{if(!e.target.matches(_selectors.default.frequentComment))return;e.preventDefault();const clicked=e.target.closest(_selectors.default.frequentComment),remark=clicked.closest(_selectors.default.criterion).querySelector(_selectors.default.remark);remark&amp;&amp;(remark.value.trim()?remark.value+="\n".concat(clicked.innerHTML):remark.value+=clicked.innerHTML)}))}}));
define("gradingform_rubric/grades/grader/gradingpanel",["exports","core/ajax","core_grades/grades/grader/gradingpanel/normalise","core_grades/grades/grader/gradingpanel/comparison","jquery"],(function(_exports,_ajax,_normalise,_comparison,_jquery){var obj;
/**
   * Grading panel for gradingform_rubric.
   *
   * @module     gradingform_rubric/grades/grader/gradingpanel
   * @copyright  2019 Mathew May &lt;mathew.solutions&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.storeCurrentGrade=_exports.fetchCurrentGrade=void 0,_jquery=(obj=_jquery)&amp;&amp;obj.__esModule?obj:{default:obj};_exports.fetchCurrentGrade=(component,contextid,itemname,gradeduserid)=&gt;(0,_ajax.call)([{methodname:"gradingform_rubric_grader_gradingpanel_fetch",args:{component:component,contextid:contextid,itemname:itemname,gradeduserid:gradeduserid}}])[0];_exports.storeCurrentGrade=async(component,contextid,itemname,gradeduserid,notifyUser,rootNode)=&gt;{const form=rootNode.querySelector("form");return!0===(0,_comparison.compareData)(form)?(0,_normalise.normaliseResult)(await(0,_ajax.call)([{methodname:"gradingform_rubric_grader_gradingpanel_store",args:{component:component,contextid:contextid,itemname:itemname,gradeduserid:gradeduserid,notifyuser:notifyUser,formdata:(0,_jquery.default)(form).serialize()}}])[0]):""}}));
define("qbank_columnsortorder/sort_columns",["exports","core/ajax","core/notification","core/sortable_list","jquery"],(function(_exports,_ajax,_notification,_sortable_list,_jquery){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Javascript for sorting columns in question bank view.
   *
   * @copyright  2021 Catalyst IT Australia Pty Ltd
   * @author     Ghaly Marc-Alexandre &lt;marc-alexandreghaly@catalyst-ca.net&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_sortable_list=_interopRequireDefault(_sortable_list),_jquery=_interopRequireDefault(_jquery);const setOrder=columns=&gt;(0,_ajax.call)([{methodname:"qbank_columnsortorder_set_columnbank_order",args:{columns:columns}}])[0],getColumnOrder=listRoot=&gt;{const columns=Array.from(listRoot.querySelectorAll("[data-pluginname]")).map((column=&gt;column.dataset.pluginname));return columns.filter(((value,index)=&gt;columns.indexOf(value)===index))};_exports.init=id=&gt;{(listRoot=&gt;{new _sortable_list.default(".list",{moveHandlerSelector:".item"}),(0,_jquery.default)(".item").on(_sortable_list.default.EVENTS.DROP,(()=&gt;{const columns=getColumnOrder(listRoot);setOrder(columns).catch(_notification.exception),listRoot.querySelectorAll(".item").forEach((item=&gt;item.classList.remove("active")))})),(0,_jquery.default)(".item").on(_sortable_list.default.EVENTS.DRAGSTART,(event=&gt;{event.currentTarget.classList.add("active")}))})(document.querySelector("#".concat(id)))}}));
define("qbank_comment/comment",["exports","core/fragment","core/str","core/modal_events","core/modal_factory","core/notification"],(function(_exports,_fragment,Str,_modal_events,_modal_factory,_notification){function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Column selector js.
   *
   * @module    qbank_comment/comment
   * @copyright 2021 Catalyst IT Australia Pty Ltd
   * @author    Safat Shahin &lt;safatshahin@catalyst-au.net&gt;
   * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_fragment=_interopRequireDefault(_fragment),Str=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}(Str),_modal_events=_interopRequireDefault(_modal_events),_modal_factory=_interopRequireDefault(_modal_factory),_notification=_interopRequireDefault(_notification);_exports.init=questionSelector=&gt;{const target=document.querySelector(questionSelector);target.addEventListener("click",(()=&gt;{((questionId,courseID,contextId)=&gt;{let args={questionid:questionId,courseid:courseID};_modal_factory.default.create({type:_modal_factory.default.types.SAVE_CANCEL,title:Str.get_string("commentheader","qbank_comment"),body:_fragment.default.loadFragment("qbank_comment","question_comment",contextId,args),large:!0}).then((modal=&gt;{let root=modal.getRoot();return root.on(_modal_events.default.bodyRendered,(function(){document.querySelectorAll("div.comment-area a")[0].style.display="none"})),root.on("change","#question_comment_version_dropdown",(function(e){args.questionid=e.target.value,modal.setBody(_fragment.default.loadFragment("qbank_comment","question_comment",contextId,args))})),Str.get_strings([{key:"addcomment",component:"qbank_comment"},{key:"close",component:"qbank_comment"}]).then((strings=&gt;{modal.setButtonText("save",strings[0]),modal.setButtonText("cancel",strings[1])})).fail(_notification.default.exception),root.on(_modal_events.default.cancel,(function(){location.reload(),modal.hide()})),root.on(_modal_events.default.save,(function(e){e.preventDefault();const submitlink=document.querySelectorAll("div.comment-area a")[0],textarea=document.querySelectorAll("div.comment-area textarea")[0];textarea.value!=textarea.getAttribute("aria-label")&amp;&amp;""!=textarea.value&amp;&amp;submitlink.click()})),root.on("click",'button[data-action="hide"]',(()=&gt;{location.reload(),modal.hide()})),modal.show(),modal})).fail(_notification.default.exception)})(target.dataset.questionid,target.dataset.courseid,target.dataset.contextid)}))}}));
define("qbank_editquestion/question_status",["exports","core/ajax","core/notification"],(function(_exports,_ajax,_notification){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Status column selector js.
   *
   * @module     qbank_editquestion/question_status
   * @copyright  2021 Catalyst IT Australia Pty Ltd
   * @author     Safat Shahin &lt;safatshahin@catalyst-au.net&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_ajax=_interopRequireDefault(_ajax),_notification=_interopRequireDefault(_notification);_exports.init=questionId=&gt;{document.querySelector("#question_status_dropdown-"+questionId).addEventListener("change",(e=&gt;{const questionStatus=e.target.value;((questionId,status)=&gt;_ajax.default.call([{methodname:"qbank_editquestion_set_status",args:{questionid:questionId,status:status}}])[0])(questionId,questionStatus).then((response=&gt;{response.error&amp;&amp;_notification.default.addNotification({type:"error",message:response.error})})).catch()}))}}));
define("qbank_previewquestion/preview",["exports","jquery"],(function(_exports,_jquery){var obj;
/**
   * Javascript for preview.
   *
   * @module     qbank_preview/preview
   * @copyright  2021 Catalyst IT Australia Pty Ltd
   * @author     Safat Shahin &lt;safatshahin@catalyst-au.net&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_jquery=(obj=_jquery)&amp;&amp;obj.__esModule?obj:{default:obj};_exports.init=(redirect,url)=&gt;{if(!redirect){document.getElementById("close-previewquestion-page").onclick=()=&gt;{null===window.opener?location.href=url:window.close()}}setupQuestionForm("responseform")};const setupQuestionForm=formElement=&gt;{let form=document.getElementById(formElement);form&amp;&amp;(autocompleteOff(form),preventRepeatSubmission(form),removeClass(".questionflagsavebutton",form),scrollToSavedPos(form))},autocompleteOff=form=&gt;{form.setAttribute("autocomplete","off")},preventRepeatSubmission=form=&gt;{form.addEventListener("submit",(function(){return(0,_jquery.default)(this).submit((function(){return!1})),!0}))},removeClass=(classname,form)=&gt;{form.querySelectorAll(classname).forEach((e=&gt;e.remove()))},scrollToSavedPos=form=&gt;{let matches=window.location.href.match(/^.*[?&amp;]scrollpos=(\d*)(?:&amp;|$|#).*$/,"$1");matches&amp;&amp;(window.scrollTo(0,matches[1]),form.addEventListener("DOMContentLoaded",(()=&gt;{window.scrollTo(0,matches[1])})))}}));
/**
 * The purpose of this module is to centralize selectors related to question.
 *
 * @module     qbank_tagquestion/question_selectors
 * @copyright  2018 Simey Lameze &lt;lameze@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("qbank_tagquestion/selectors",[],(function(){return{actions:{save:'[data-action="save"]',edittags:'[data-action="edittags"]'},containers:{loadingIcon:'[data-region="overlay-icon-container"]'}}}));
/**
 * A javascript module to handle question ajax actions.
 *
 * @module     qbank_tagquestion/repository
 * @class      repository
 * @copyright  2017 Simey Lameze &lt;lameze@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("qbank_tagquestion/repository",["jquery","core/ajax"],(function($,Ajax){return{submitTagCreateUpdateForm:function(questionId,contextId,formdata){var request={methodname:"qbank_tagquestion_submit_tags_form",args:{questionid:questionId,contextid:contextId,formdata:formdata}};return Ajax.call([request])[0]}}}));
/**
 * A javascript module to handle question tags editing.
 *
 * @module     qbank_tagquestion/edit_tags
 * @copyright  2018 Simey Lameze &lt;simey@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("qbank_tagquestion/edit_tags",["jquery","core/fragment","core/str","core/modal_events","core/modal_factory","core/notification","core/custom_interaction_events","qbank_tagquestion/repository","qbank_tagquestion/selectors"],(function($,Fragment,Str,ModalEvents,ModalFactory,Notification,CustomEvents,Repository,QuestionSelectors){var enableSaveButton=function(root){root.find(QuestionSelectors.actions.save).prop("disabled",!1)},disableSaveButton=function(root){root.find(QuestionSelectors.actions.save).prop("disabled",!0)},startLoading=function(root){root.find(QuestionSelectors.containers.loadingIcon).removeClass("hidden")},stopLoading=function(root){root.find(QuestionSelectors.containers.loadingIcon).addClass("hidden")},save=function(modal,root){disableSaveButton(root),startLoading(root);var formData=function(modal){return modal.getBody().find("form").serialize()}(modal),questionId=function(modal){return modal.getBody().data("questionid")}(modal),contextId=function(modal){return modal.getBody().data("contextid")}(modal);return Repository.submitTagCreateUpdateForm(questionId,contextId,formData).always((function(){stopLoading(root),enableSaveButton(root)})).fail(Notification.exception)};return{init:function(root){!function(root){var modalPromise=ModalFactory.create({type:ModalFactory.types.SAVE_CANCEL,large:!1},[root,QuestionSelectors.actions.edittags]).then((function(modal){return Str.get_string("questiontags","question").then((function(string){return modal.setTitle(string),string})).fail(Notification.exception),modal.getRoot().on(ModalEvents.save,(function(e){modal.getBody().find("form").submit(),e.preventDefault()})),modal.getRoot().on("submit","form",(function(e){save(modal,root).then((function(){modal.hide(),location.reload()})).fail(Notification.exception),e.preventDefault(),e.stopPropagation()})),modal}));root.on(CustomEvents.events.activate,QuestionSelectors.actions.edittags,(function(e){var currentTarget=$(e.currentTarget),questionId=currentTarget.data("questionid"),canTag=!!currentTarget.data("cantag"),contextId=currentTarget.data("contextid");modalPromise.then((function(modal){disableSaveButton(root),startLoading(root);var args={id:questionId},tagsFragment=Fragment.loadFragment("qbank_tagquestion","tags_form",contextId,args);return modal.setBody(tagsFragment),tagsFragment.then((function(){enableSaveButton(root)})).always((function(){stopLoading(root)})).fail(Notification.exception),canTag?modal.getRoot().find(QuestionSelectors.actions.save).show():modal.getRoot().find(QuestionSelectors.actions.save).hide(),function(modal,questionId){modal.getBody().attr("data-questionid",questionId)}(modal,questionId),function(modal,contextId){modal.getBody().attr("data-contextid",contextId)}(modal,contextId),modal})).fail(Notification.exception),e.preventDefault()}))}(root=$(root))}}}));
define("qbank_usage/usage",["exports","core/fragment","core/modal_factory","core/notification","core/str"],(function(_exports,_fragment,_modal_factory,_notification,Str){function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Usage column selector js.
   *
   * @module     qbank_usage/usage
   * @copyright  2021 Catalyst IT Australia Pty Ltd
   * @author     Safat Shahin &lt;safatshahin@catalyst-au.net&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_fragment=_interopRequireDefault(_fragment),_modal_factory=_interopRequireDefault(_modal_factory),_notification=_interopRequireDefault(_notification),Str=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}(Str);_exports.init=(questionSelector,contextId)=&gt;{let target=document.querySelector(questionSelector),questionId=target.getAttribute("data-questionid");target.addEventListener("click",(()=&gt;{((questionId,contextId)=&gt;{let args={questionid:questionId};_modal_factory.default.create({type:_modal_factory.default.types.CANCEL,title:Str.get_string("usageheader","qbank_usage"),body:_fragment.default.loadFragment("qbank_usage","question_usage",contextId,args),large:!0}).then((modal=&gt;(modal.show(),modal.getRoot().on("click","a[href].page-link",(function(e){e.preventDefault();let attr=e.target.getAttribute("href");"#"!==attr&amp;&amp;(args.querystring=attr,modal.setBody(_fragment.default.loadFragment("qbank_usage","question_usage",contextId,args)))})),modal.getRoot().on("change","#question_usage_version_dropdown",(function(e){args.questionid=e.target.value,modal.setBody(_fragment.default.loadFragment("qbank_usage","question_usage",contextId,args))})),modal))).fail(_notification.default.exception)})(questionId,contextId)}))}}));
define("plagiarism_turnitin/quickmarkLaunch",["jquery","core/templates","core/modal_factory","core/modal_events","plagiarism_turnitin/modal_quickmark_launch"],function($,Templates,ModalFactory,ModalEvents,ModalQuickmarkLaunch){return{quickmarkLaunch:function(){$(".plagiarism_turnitin_quickmark_manager_launch").on("click",function(event){event.preventDefault();ModalFactory.create({type:ModalQuickmarkLaunch.TYPE,templateContext:{cmid:$('input[name="coursemodule"]').val(),wwwroot:M.cfg.wwwroot},large:true}).then(function(modal){modal.show()})})}}});
define("plagiarism_turnitin/newQuickmarkLaunch",["jquery","core/templates","core/modal","core/modal_events","plagiarism_turnitin/modal_quickmark_launch"],function($,Templates,Modal,ModalEvents,ModalQuickmarkLaunch){return{newQuickmarkLaunch:function(){$(".plagiarism_turnitin_quickmark_manager_launch").on("click",function(event){event.preventDefault();Modal.create({type:ModalQuickmarkLaunch.TYPE,template:ModalQuickmarkLaunch.TEMPLATE,templateContext:{cmid:$('input[name="coursemodule"]').val(),wwwroot:M.cfg.wwwroot},large:true}).then(function(modal){modal.show()})})}}});
define("plagiarism_turnitin/modal_peermark_manager_launch",["jquery","core/ajax","core/notification","core/custom_interaction_events","core/modal","core/modal_registry","core/modal_events"],function($,Ajax,Notification,CustomEvents,Modal,ModalRegistry,ModalEvents){var registered=false;var SELECTORS={HIDE_BUTTON:'[data-action="hide"]',MODAL:'[data-region="modal"]'};var ModalPeermarkManagerLaunch=function(root){Modal.call(this,root)};ModalPeermarkManagerLaunch.TYPE="plagiarism_turnitin-modal_peermark_manager_launch";ModalPeermarkManagerLaunch.TEMPLATE="plagiarism_turnitin/modal_peermark_manager_launch";ModalPeermarkManagerLaunch.prototype=Object.create(Modal.prototype);ModalPeermarkManagerLaunch.prototype.constructor=ModalPeermarkManagerLaunch;ModalPeermarkManagerLaunch.prototype.registerEventListeners=function(){Modal.prototype.registerEventListeners.call(this);this.getModal().on(CustomEvents.events.activate,SELECTORS.HIDE_BUTTON,function(e,data){var cancelEvent=$.Event(ModalEvents.cancel);this.getRoot().trigger(cancelEvent,this);if(!cancelEvent.isDefaultPrevented()){this.hide();data.originalEvent.preventDefault();refreshPeermarkAssignments()}}.bind(this));this.getRoot().click(function(e){if(!$(e.target).closest(SELECTORS.MODAL).length){refreshPeermarkAssignments()}}.bind(this))};function refreshPeermarkAssignments(){$.ajax({type:"POST",url:M.cfg.wwwroot+"/plagiarism/turnitin/ajax.php",dataType:"json",data:{action:"refresh_peermark_assignments",cmid:$('input[name="coursemodule"]').val(),sesskey:M.cfg.sesskey}})}if(!registered){ModalRegistry.register(ModalPeermarkManagerLaunch.TYPE,ModalPeermarkManagerLaunch,"plagiarism_turnitin/modal_peermark_manager_launch");registered=true}return ModalPeermarkManagerLaunch});
//# sourcemappingURL=modal_peermark_manager_launch.min.js.map
define("plagiarism_turnitin/modal_quickmark_launch",["jquery","core/ajax","core/notification","core/custom_interaction_events","core/modal","core/modal_registry","core/modal_events"],function($,Ajax,Notification,CustomEvents,Modal,ModalRegistry,ModalEvents){var registered=false;var SELECTORS={HIDE_BUTTON:'[data-action="hide"]',MODAL:'[data-region="modal"]'};var ModalQuickmarkLaunch=function(root){Modal.call(this,root)};ModalQuickmarkLaunch.TYPE="plagiarism_turnitin-modal_quickmark_launch";ModalQuickmarkLaunch.TEMPLATE="plagiarism_turnitin/modal_quickmark_launch";ModalQuickmarkLaunch.prototype=Object.create(Modal.prototype);ModalQuickmarkLaunch.prototype.constructor=ModalQuickmarkLaunch;ModalQuickmarkLaunch.prototype.registerEventListeners=function(){Modal.prototype.registerEventListeners.call(this);this.getModal().on(CustomEvents.events.activate,SELECTORS.HIDE_BUTTON,function(e,data){var cancelEvent=$.Event(ModalEvents.cancel);this.getRoot().trigger(cancelEvent,this);if(!cancelEvent.isDefaultPrevented()){this.hide();data.originalEvent.preventDefault()}}.bind(this))};if(!registered){ModalRegistry.register(ModalQuickmarkLaunch.TYPE,ModalQuickmarkLaunch,"plagiarism_turnitin/modal_quickmark_launch");registered=true}return ModalQuickmarkLaunch});
define("plagiarism_turnitin/open_viewer",["jquery"],(function($){return{origreport_open:function(){var that=this;$(document).on("click",".pp_origreport_open",(function(){for(var classList=$(this).attr("class").replace(/\s+/," ").split(" "),i=0;i&lt;classList.length;i++)if(-1!==classList[i].indexOf("origreport_")&amp;&amp;"pp_origreport_open"!=classList[i]){var classStr=classList[i].split("_");that.openDV("origreport",classStr[1],classStr[2])}}))},grademark_open:function(){var that=this;$(document).on("click",".pp_grademark_open",(function(){for(var classList=$(this).attr("class").replace(/\s+/," ").split(" "),i=0;i&lt;classList.length;i++)if(-1!==classList[i].indexOf("grademark_")&amp;&amp;"pp_grademark_open"!=classList[i]){var classStr=classList[i].split("_");that.openDV("grademark",classStr[1],classStr[2])}}))},openDV:function(dvtype,submissionid,coursemoduleid){var that=this,dvWindow=window.open("","turnitin_viewer"),loading='&lt;div class="tii_dv_loading" style="text-align:center;"&gt;';loading+='&lt;img src="'+M.cfg.wwwroot+'/plagiarism/turnitin/pix/turnitin-icon.png" style="width:100px; height: 100px"&gt;',loading+='&lt;p style="font-family: Arial, Helvetica, sans-serif;"&gt;'+M.str.plagiarism_turnitin.loadingdv+"&lt;/p&gt;",loading+="&lt;/div&gt;",$(dvWindow.document.body).html(loading),$.ajax({type:"POST",url:M.cfg.wwwroot+"/plagiarism/turnitin/ajax.php",dataType:"json",data:{action:"get_dv_html",submissionid:submissionid,dvtype:dvtype,cmid:coursemoduleid,sesskey:M.cfg.sesskey},success:function(data){$(dvWindow.document.body).html(loading+data),dvWindow.document.forms[0].submit(),dvWindow.document.close(),that.checkDVClosed(submissionid,coursemoduleid,dvWindow)}})},checkDVClosed:function(submissionid,coursemoduleid,dvWindow){var that=this;dvWindow.closed?that.refreshScores(submissionid,coursemoduleid):setTimeout((function(){that.checkDVClosed(submissionid,coursemoduleid,dvWindow)}),500)},refreshScores:function(submission_id,coursemoduleid){var refreshStartTime=(new Date).getTime();$.ajax({type:"POST",url:M.cfg.wwwroot+"/plagiarism/turnitin/ajax.php",dataType:"json",data:{action:"update_grade",submission:submission_id,cmid:coursemoduleid,sesskey:M.cfg.sesskey},success:function(){(new Date).getTime()-refreshStartTime&lt;3e3||!$(".turnitin_score_refresh_alert").length?window.location=window.location+"":$(".turnitin_score_refresh_alert").show()}})}}}));
define("plagiarism_turnitin/newPeermarkLaunch",["jquery","core/templates","core/modal","core/modal_events","plagiarism_turnitin/modal_peermark_manager_launch","plagiarism_turnitin/modal_peermark_reviews_launch"],function($,Templates,Modal,ModalEvents,ModalPeermarkManagerLaunch,ModalPeermarkReviewsLaunch){return{newPeermarkLaunch:function(){var that=this;$(".peermark_manager_launch").on("click",function(event){event.preventDefault();that.peermarkModalCreate(ModalPeermarkManagerLaunch)});$(document).on("click",".peermark_reviews_pp_launch",function(){that.peermarkModalCreate(ModalPeermarkReviewsLaunch)})},peermarkModalCreate:function(modalType){if($('input[name="coursemodule"]').val()){var cmid=$('input[name="coursemodule"]').val()}else{var urlParams=new URLSearchParams(window.location.search);var cmid=urlParams.get("id")}Modal.create({type:modalType.TYPE,template:modalType.TEMPLATE,templateContext:{cmid:cmid,wwwroot:M.cfg.wwwroot},large:true}).then(function(modal){modal.show()})}}});
define("plagiarism_turnitin/newRubric",["jquery","core/templates","core/modal","core/modal_events","plagiarism_turnitin/modal_rubric_manager_launch","plagiarism_turnitin/modal_rubric_view_launch"],function($,Templates,Modal,ModalEvents,ModalRubricManagerLaunch,ModalRubricViewLaunch){return{newRubric:function(){var that=this;$(".rubric_manager_launch").on("click",function(){var courseid=$(this).data("courseid");var cmid=$(this).data("cmid");that.rubricCreateModal(ModalRubricManagerLaunch,courseid,cmid)});$(document).on("click",".rubric_view",function(){var courseid=$(this).data("courseid");var cmid=$(this).data("cmid");that.rubricCreateModal(ModalRubricViewLaunch,courseid,cmid)});$("#id_plagiarism_rubric").mousedown(function(){if($('input[name="instance"]').val()!=""&amp;&amp;$('input[name="rubric_warning_seen"]').val()!="Y"){if(confirm(M.str.plagiarism_turnitin.changerubricwarning)){$('input[name="rubric_warning_seen"]').val("Y")}}})},rubricCreateModal:function(modalType,courseid,cmid){Modal.create({type:modalType.TYPE,template:modalType.TEMPLATE,templateContext:{courseid:courseid,cmid:cmid,wwwroot:M.cfg.wwwroot},large:true}).then(function(modal){modal.show();modal.getRoot().find(".modal").addClass("tii_pp_modal_rubric");modal.getRoot().find(".modal-content").addClass("tii_pp_modal_rubric_content")})}}});
define("plagiarism_turnitin/refresh_submissions",["jquery"],(function($){return{refreshSubmissions:function(){$(".plagiarism_turnitin_refresh_grades").on("click",(function(){$(".plagiarism_turnitin_refresh_grades").hide(),$(".plagiarism_turnitin_refreshing_grades").show(),$.ajax({type:"POST",url:M.cfg.wwwroot+"/plagiarism/turnitin/ajax.php",dataType:"json",data:{action:"update_grade",cmid:$('input[name="coursemodule"]').val(),sesskey:M.cfg.sesskey},success:function(){$(".plagiarism_turnitin_refresh_grades").show(),$(".plagiarism_turnitin_refreshing_grades").hide()}})}))}}}));
define("plagiarism_turnitin/rubric",["jquery","core/templates","core/modal_factory","core/modal_events","plagiarism_turnitin/modal_rubric_manager_launch","plagiarism_turnitin/modal_rubric_view_launch"],function($,Templates,ModalFactory,ModalEvents,ModalRubricManagerLaunch,ModalRubricViewLaunch){return{rubric:function(){var that=this;$(".rubric_manager_launch").on("click",function(){var courseid=$(this).data("courseid");var cmid=$(this).data("cmid");that.rubricCreateModal(ModalRubricManagerLaunch.TYPE,courseid,cmid)});$(document).on("click",".rubric_view",function(){var courseid=$(this).data("courseid");var cmid=$(this).data("cmid");that.rubricCreateModal(ModalRubricViewLaunch.TYPE,courseid,cmid)});$("#id_plagiarism_rubric").mousedown(function(){if($('input[name="instance"]').val()!=""&amp;&amp;$('input[name="rubric_warning_seen"]').val()!="Y"){if(confirm(M.str.plagiarism_turnitin.changerubricwarning)){$('input[name="rubric_warning_seen"]').val("Y")}}})},rubricCreateModal:function(modalType,courseid,cmid){ModalFactory.create({type:modalType,templateContext:{courseid:courseid,cmid:cmid,wwwroot:M.cfg.wwwroot},large:true}).then(function(modal){modal.show();modal.getRoot().find(".modal").addClass("tii_pp_modal_rubric");modal.getRoot().find(".modal-content").addClass("tii_pp_modal_rubric_content")})}}});
define("plagiarism_turnitin/newEulaLaunch",["jquery","core/templates","core/modal","core/modal_events","plagiarism_turnitin/modal_eula_launch"],function($,Templates,Modal,ModalEvents,ModalEulaLaunch){return{newEulaLaunch:function(){var turnitinEulaClass=$(".pp_turnitin_eula");turnitinEulaClass.show();$(document).on("mod_forum-post-created",".forum-post-container",function(event,newid){var turnitinEulaClass=$("#post-content-"+newid+" .pp_turnitin_eula");turnitinEulaClass.show()});$(document).on("click",".pp_turnitin_eula_link",function(){Modal.create({type:ModalEulaLaunch.TYPE,template:ModalEulaLaunch.TEMPLATE,templateContext:{cmid:$('input[name="coursemodule"]').val(),wwwroot:M.cfg.wwwroot},large:true}).then(function(modal){modal.show();modal.getRoot().find(".modal").addClass("tii_pp_modal_eula");modal.getRoot().find(".modal-content").addClass("tii_pp_modal_eula_content")})});if($(".pp_turnitin_eula_ignored").length&gt;0){if($(".editsubmissionform").length&gt;0){$(".editsubmissionform").hide()}if(turnitinEulaClass.siblings(".mform").length&gt;0){turnitinEulaClass.siblings(".mform").hide()}}}}});
define("plagiarism_turnitin/eulaLaunch",["jquery","core/templates","core/modal_factory","core/modal_events","plagiarism_turnitin/modal_eula_launch"],function($,Templates,ModalFactory,ModalEvents,ModalEulaLaunch){return{eulaLaunch:function(){var turnitinEulaClass=$(".pp_turnitin_eula");turnitinEulaClass.show();$(document).on("mod_forum-post-created",".forum-post-container",function(event,newid){var turnitinEulaClass=$("#post-content-"+newid+" .pp_turnitin_eula");turnitinEulaClass.show()});$(document).on("click",".pp_turnitin_eula_link",function(){ModalFactory.create({type:ModalEulaLaunch.TYPE,templateContext:{cmid:$('input[name="coursemodule"]').val(),wwwroot:M.cfg.wwwroot},large:true}).then(function(modal){modal.show();modal.getRoot().find(".modal").addClass("tii_pp_modal_eula");modal.getRoot().find(".modal-content").addClass("tii_pp_modal_eula_content")})});if($(".pp_turnitin_eula_ignored").length&gt;0){if($(".editsubmissionform").length&gt;0){$(".editsubmissionform").hide()}if(turnitinEulaClass.siblings(".mform").length&gt;0){turnitinEulaClass.siblings(".mform").hide()}}}}});
define("plagiarism_turnitin/resend_submission",["jquery"],(function($){return{resendSubmission:function(){$(document).on("click",".plagiarism_turnitin_resubmit_link",(function(){$(this).hide(),$(this).siblings(".pp_resubmitting").removeClass("hidden");var that=$(this),submissionid=$(this).prop("id").split("_")[2],forumpost=$("#content_"+submissionid).html(),forumdata=$("#forumdata_"+submissionid).html();return $.ajax({type:"POST",url:M.cfg.wwwroot+"/plagiarism/turnitin/ajax.php",dataType:"json",data:{action:"resubmit_event",submissionid:submissionid,forumpost:forumpost,forumdata:forumdata,sesskey:M.cfg.sesskey},success:function(){that.siblings(".turnitin_status").removeClass("hidden"),that.siblings(".pp_resubmitting").addClass("hidden")},error:function(){that.show(),that.siblings(".pp_resubmitting").addClass("hidden")}}),!1}))}}}));
define("plagiarism_turnitin/modal_eula_launch",["jquery","core/ajax","core/notification","core/custom_interaction_events","core/modal","core/modal_registry","core/modal_events"],function($,Ajax,Notification,CustomEvents,Modal,ModalRegistry,ModalEvents){var registered=false;var SELECTORS={HIDE_BUTTON:'[data-action="hide"]',MODAL:'[data-region="modal"]'};var ModalEulaLaunch=function(root){Modal.call(this,root)};ModalEulaLaunch.TYPE="plagiarism_turnitin-modal_eula_launch";ModalEulaLaunch.TEMPLATE="plagiarism_turnitin/modal_eula_launch";ModalEulaLaunch.prototype=Object.create(Modal.prototype);ModalEulaLaunch.prototype.constructor=ModalEulaLaunch;ModalEulaLaunch.prototype.registerEventListeners=function(){Modal.prototype.registerEventListeners.call(this);processEula();this.getModal().on(CustomEvents.events.activate,SELECTORS.HIDE_BUTTON,function(e,data){var cancelEvent=$.Event(ModalEvents.cancel);this.getRoot().trigger(cancelEvent,this);if(!cancelEvent.isDefaultPrevented()){this.hide();data.originalEvent.preventDefault()}}.bind(this))};function processEula(){$(window).on("message",function(ev){var message=typeof ev.data==="undefined"?ev.originalEvent.data:ev.data;if(message==="turnitin_eula_declined"||message==="turnitin_eula_accepted"){$.ajax({type:"POST",url:M.cfg.wwwroot+"/plagiarism/turnitin/ajax.php",dataType:"json",data:{action:"actionuseragreement",message:message,sesskey:M.cfg.sesskey},success:function(){window.location.reload()},error:function(){window.location.reload()}})}})}if(!registered){ModalRegistry.register(ModalEulaLaunch.TYPE,ModalEulaLaunch,"plagiarism_turnitin/modal_eula_launch");registered=true}return ModalEulaLaunch});
define("plagiarism_turnitin/modal_rubric_view_launch",["jquery","core/ajax","core/notification","core/custom_interaction_events","core/modal","core/modal_registry","core/modal_events"],function($,Ajax,Notification,CustomEvents,Modal,ModalRegistry,ModalEvents){var registered=false;var SELECTORS={HIDE_BUTTON:'[data-action="hide"]',MODAL:'[data-region="modal"]'};var ModalRubricViewLaunch=function(root){Modal.call(this,root)};ModalRubricViewLaunch.TYPE="plagiarism_turnitin-modal_rubric_view_launch";ModalRubricViewLaunch.TEMPLATE="plagiarism_turnitin/modal_rubric_view_launch";ModalRubricViewLaunch.prototype=Object.create(Modal.prototype);ModalRubricViewLaunch.prototype.constructor=ModalRubricViewLaunch;ModalRubricViewLaunch.prototype.registerEventListeners=function(){Modal.prototype.registerEventListeners.call(this);this.getModal().on(CustomEvents.events.activate,SELECTORS.HIDE_BUTTON,function(e,data){var cancelEvent=$.Event(ModalEvents.cancel);this.getRoot().trigger(cancelEvent,this);if(!cancelEvent.isDefaultPrevented()){this.hide();data.originalEvent.preventDefault()}}.bind(this))};if(!registered){ModalRegistry.register(ModalRubricViewLaunch.TYPE,ModalRubricViewLaunch,"plagiarism_turnitin/modal_rubric_view_launch");registered=true}return ModalRubricViewLaunch});
define("plagiarism_turnitin/modal_rubric_manager_launch",["jquery","core/ajax","core/notification","core/custom_interaction_events","core/modal","core/modal_registry","core/modal_events"],function($,Ajax,Notification,CustomEvents,Modal,ModalRegistry,ModalEvents){var registered=false;var SELECTORS={HIDE_BUTTON:'[data-action="hide"]',MODAL:'[data-region="modal"]'};var ModalRubricManagerLaunch=function(root){Modal.call(this,root)};ModalRubricManagerLaunch.TYPE="plagiarism_turnitin-modal_rubric_manager_launch";ModalRubricManagerLaunch.TEMPLATE="plagiarism_turnitin/modal_rubric_manager_launch";ModalRubricManagerLaunch.prototype=Object.create(Modal.prototype);ModalRubricManagerLaunch.prototype.constructor=ModalRubricManagerLaunch;ModalRubricManagerLaunch.prototype.registerEventListeners=function(){Modal.prototype.registerEventListeners.call(this);this.getModal().on(CustomEvents.events.activate,SELECTORS.HIDE_BUTTON,function(e,data){var cancelEvent=$.Event(ModalEvents.cancel);this.getRoot().trigger(cancelEvent,this);if(!cancelEvent.isDefaultPrevented()){this.hide();data.originalEvent.preventDefault();refreshRubricSelect()}}.bind(this));this.getRoot().click(function(e){if(!$(e.target).closest(SELECTORS.MODAL).length){refreshRubricSelect()}}.bind(this))};function refreshRubricSelect(){var currentRubric=$("#id_plagiarism_rubric").val();$.ajax({dataType:"json",type:"POST",url:"../plagiarism/turnitin/ajax.php",data:{action:"refresh_rubric_select",assignment:$('input[name="instance"]').val(),modulename:$('input[name="modulename"]').val(),course:$('input[name="course"]').val()},success:function(data){$($("#id_plagiarism_rubric")).empty();var options=data;$.each(options,function(i,val){if(!$.isNumeric(i)&amp;&amp;i!==""){var optgroup=$("&lt;optgroup&gt;");optgroup.attr("label",i);$.each(val,function(j,rubric){var option=$("&lt;option&gt;&lt;/option&gt;");option.val(j);option.text(rubric);optgroup.append(option)});$("#id_plagiarism_rubric").append(optgroup)}else{$($("#id_plagiarism_rubric")).append($("&lt;option&gt;",{value:i,text:val}))}});$("#id_plagiarism_rubric"+' option[value="'+currentRubric+'"]').attr("selected","selected")}})}if(!registered){ModalRegistry.register(ModalRubricManagerLaunch.TYPE,ModalRubricManagerLaunch,"plagiarism_turnitin/modal_rubric_manager_launch");registered=true}return ModalRubricManagerLaunch});
define("plagiarism_turnitin/peermarkLaunch",["jquery","core/templates","core/modal_factory","core/modal_events","plagiarism_turnitin/modal_peermark_manager_launch","plagiarism_turnitin/modal_peermark_reviews_launch"],function($,Templates,ModalFactory,ModalEvents,ModalPeermarkManagerLaunch,ModalPeermarkReviewsLaunch){return{peermarkLaunch:function(){var that=this;$(".peermark_manager_launch").on("click",function(event){event.preventDefault();that.peermarkCreateModal(ModalPeermarkManagerLaunch)});$(document).on("click",".peermark_reviews_pp_launch",function(){that.peermarkCreateModal(ModalPeermarkReviewsLaunch)})},peermarkCreateModal:function(modalType){if($('input[name="coursemodule"]').val()){var cmid=$('input[name="coursemodule"]').val()}else{var urlParams=new URLSearchParams(window.location.search);var cmid=urlParams.get("id")}ModalFactory.create({type:modalType.TYPE,templateContext:{cmid:cmid,wwwroot:M.cfg.wwwroot},large:true}).then(function(modal){modal.show()})}}});
define("plagiarism_turnitin/modal_peermark_reviews_launch",["jquery","core/ajax","core/notification","core/custom_interaction_events","core/modal","core/modal_registry","core/modal_events"],function($,Ajax,Notification,CustomEvents,Modal,ModalRegistry,ModalEvents){var registered=false;var SELECTORS={HIDE_BUTTON:'[data-action="hide"]',MODAL:'[data-region="modal"]'};var ModalPeermarkReviewsLaunch=function(root){Modal.call(this,root)};ModalPeermarkReviewsLaunch.TYPE="plagiarism_turnitin-modal_peermark_reviews_launch";ModalPeermarkReviewsLaunch.TEMPLATE="plagiarism_turnitin/modal_peermark_reviews_launch";ModalPeermarkReviewsLaunch.prototype=Object.create(Modal.prototype);ModalPeermarkReviewsLaunch.prototype.constructor=ModalPeermarkReviewsLaunch;ModalPeermarkReviewsLaunch.prototype.registerEventListeners=function(){Modal.prototype.registerEventListeners.call(this);this.getModal().on(CustomEvents.events.activate,SELECTORS.HIDE_BUTTON,function(e,data){var cancelEvent=$.Event(ModalEvents.cancel);this.getRoot().trigger(cancelEvent,this);if(!cancelEvent.isDefaultPrevented()){this.hide();data.originalEvent.preventDefault()}}.bind(this))};if(!registered){ModalRegistry.register(ModalPeermarkReviewsLaunch.TYPE,ModalPeermarkReviewsLaunch,"plagiarism_turnitin/modal_peermark_reviews_launch");registered=true}return ModalPeermarkReviewsLaunch});
define("tool_ally/logviewer",["jquery","tool_ally/main","core/ajax","tool_ally/vuecomp/th-Filter","tool_ally/vuecomp/td-HTML","tool_ally/vuecomp/td-LogDetails"],(function($,main,ajax,thFilter,tdHTML,tdLogDetails){return{Vue:null,globalComponents:{},init:function(){var id,self=this,logData=null,dumpList={props:["data"],template:(id="dt-allylog",'&lt;div id="'+id+'"&gt;&lt;datatable v-bind="data"&gt;&lt;/datatable&gt;&lt;/div&gt;')};this.globalComponents.thFilter=thFilter,this.globalComponents.tdHTML=tdHTML,this.globalComponents.tdLogDetails=tdLogDetails,ajax.call([{methodname:"tool_ally_get_logs",args:{query:null}}])[0].then((function(data){var routes=[{path:"/",redirect:"/logView"},{path:"/logView",component:dumpList,props:{data:logData=data}}];main.init({data:{logData:logData},routes:routes,globalComponents:self.globalComponents,watch:{"logData.query":{handler:function(query){ajax.call([{methodname:"tool_ally_get_logs",args:{query:JSON.stringify(query)}}])[0].then((function(data){logData=data,self.Vue.logData.data=logData.data,self.Vue.logData.total=logData.total}))},deep:!0}}}).then((function(Vue){self.Vue=Vue}))}))}}}));
/**
 * Action selector.
 *
 * Ally admin tool log view.
 *
 * @package    tool_ally
 * @copyright  Code based on admin/tool/behatdump (c) Guy Thomas 2018
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
var pluginJSURL;pluginJSURL=function(path){return M.cfg.wwwroot+"/pluginfile.php/"+M.cfg.contextid+"/tool_ally/"+path},require.config({enforceDefine:!1,paths:{"tool_ally/vue_2_5_16":["https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.min",pluginJSURL("vendorjs/vue")],"tool_ally/vuerouter_2_5_3":["https://cdn.jsdelivr.net/npm/vue-router@2.5.3/dist/vue-router.min",pluginJSURL("vendorjs/vuerouter")],"tool_ally/vuedatatable":pluginJSURL("vendorjs/vuedatatable"),"tool_ally/vuecomp":[pluginJSURL("vue/comps")]}}),define("tool_ally/main",["jquery","tool_ally/vue_2_5_16","tool_ally/vuerouter_2_5_3","tool_ally/vuedatatable"],(function($,Vue,VueRouter,VueDataTable){return Vue.use(VueRouter),Vue.use(VueDataTable.default),{vue:null,getBootstrapVersion:function(){var version=2;return window.$&amp;&amp;window.$.fn&amp;&amp;window.$.fn.tooltip&amp;&amp;window.$.fn.tooltip.Constructor&amp;&amp;void 0===(version=window.$.fn.tooltip.Constructor.VERSION)&amp;&amp;(version=2),version=parseInt(version)},applyBootstrapClass:function(){$("body").addClass("bs-major-version-"+this.getBootstrapVersion())},init:function(vueOpts){this.applyBootstrapClass();var dfd=$.Deferred();return $(document).ready((function(){var opts={el:"#app",router:null};for(var property in vueOpts)vueOpts.hasOwnProperty(property)&amp;&amp;(opts[property]=vueOpts[property]);if(opts.routes&amp;&amp;(opts.router=new VueRouter({routes:opts.routes})),opts.globalComponents)for(var compKey in opts.globalComponents)if(opts.globalComponents.hasOwnProperty(compKey)){var component=opts.globalComponents[compKey];Vue.component(compKey,component)}this.vue=new Vue(opts).$mount("#app"),dfd.resolve(this.vue)})),dfd}}}));
/**
 * AMD module for model actions confirmation.
 *
 * @module     tool_analytics/model
 * @copyright  2017 David Monllao
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("tool_analytics/model",["jquery","core/str","core/log","core/notification","core/modal_factory","core/modal_events","core/templates"],(function($,Str,log,Notification,ModalFactory,ModalEvents,Templates){var actionsList={clear:{title:{key:"clearpredictions",component:"tool_analytics"},body:{key:"clearmodelpredictions",component:"tool_analytics"}},delete:{title:{key:"delete",component:"tool_analytics"},body:{key:"deletemodelconfirmation",component:"tool_analytics"}}};return{confirmAction:function(actionId,actionType){$('[data-action-id="'+actionId+'"]').on("click",(function(ev){ev.preventDefault();var a=$(ev.currentTarget);if(void 0!==actionsList[actionType]){var wrap,reqStrings=[actionsList[actionType].title,actionsList[actionType].body];reqStrings[1].param=(wrap=$(a).closest("[data-model-name]")).length?wrap.attr("data-model-name"):(log.error("Unexpected DOM error - unable to obtain the model name"),"");var stringsPromise=Str.get_strings(reqStrings),modalPromise=ModalFactory.create({type:ModalFactory.types.SAVE_CANCEL});$.when(stringsPromise,modalPromise).then((function(strings,modal){return modal.setTitle(strings[0]),modal.setBody(strings[1]),modal.setSaveButtonText(strings[0]),modal.getRoot().on(ModalEvents.save,(function(){window.location.href=a.attr("href")})),modal.show(),modal})).fail(Notification.exception)}else log.error('Action "'+actionType+'" is not allowed.')}))},selectEvaluationOptions:function(actionId,trainedOnlyExternally){$('[data-action-id="'+actionId+'"]').on("click",(function(ev){ev.preventDefault();var a=$(ev.currentTarget),timeSplittingMethods=$(this).attr("data-timesplitting-methods"),stringsPromise=Str.get_strings([{key:"evaluatemodel",component:"tool_analytics"},{key:"evaluate",component:"tool_analytics"}]),modalPromise=ModalFactory.create({type:ModalFactory.types.SAVE_CANCEL}),bodyPromise=Templates.render("tool_analytics/evaluation_options",{trainedexternally:trainedOnlyExternally,timesplittingmethods:JSON.parse(timeSplittingMethods)});$.when(stringsPromise,modalPromise).then((function(strings,modal){return modal.getRoot().on(ModalEvents.hidden,modal.destroy.bind(modal)),modal.setTitle(strings[0]),modal.setSaveButtonText(strings[1]),modal.setBody(bodyPromise),modal.getRoot().on(ModalEvents.save,(function(){"trainedmodel"==$("input[name='evaluationmode']:checked").val()&amp;&amp;a.attr("href",a.attr("href")+"&amp;mode=trainedmodel");var timeSplittingMethod=$("#id-evaluation-timesplitting").val();a.attr("href",a.attr("href")+"&amp;timesplitting="+timeSplittingMethod),window.location.href=a.attr("href")})),modal.show(),modal})).fail(Notification.exception)}))},selectExportOptions:function(actionId,isTrained){$('[data-action-id="'+actionId+'"]').on("click",(function(ev){ev.preventDefault();var a=$(ev.currentTarget);if(!isTrained)return a.attr("href",a.attr("href")+"&amp;action=exportmodel&amp;includeweights=0"),void(window.location.href=a.attr("href"));var stringsPromise=Str.get_strings([{key:"export",component:"tool_analytics"}]),modalPromise=ModalFactory.create({type:ModalFactory.types.SAVE_CANCEL}),bodyPromise=Templates.render("tool_analytics/export_options",{});$.when(stringsPromise,modalPromise).then((function(strings,modal){return modal.getRoot().on(ModalEvents.hidden,modal.destroy.bind(modal)),modal.setTitle(strings[0]),modal.setSaveButtonText(strings[0]),modal.setBody(bodyPromise),modal.getRoot().on(ModalEvents.save,(function(){"exportdata"==$("input[name='exportoption']:checked").val()?a.attr("href",a.attr("href")+"&amp;action=exportdata"):(a.attr("href",a.attr("href")+"&amp;action=exportmodel"),$("#id-includeweights").is(":checked")?a.attr("href",a.attr("href")+"&amp;includeweights=1"):a.attr("href",a.attr("href")+"&amp;includeweights=0")),window.location.href=a.attr("href")})),modal.show(),modal})).fail(Notification.exception)}))}}}));
/**
 * Shows a dialogue with info about this logs.
 *
 * @module     tool_analytics/log_info
 * @copyright  2017 David Monllao {@link http://www.davidmonllao.com}
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("tool_analytics/log_info",["jquery","core/str","core/modal_factory","core/notification"],(function($,str,ModalFactory,Notification){return{loadInfo:function(id,info){var link=$('[data-model-log-id="'+id+'"]');str.get_string("loginfo","tool_analytics").then((function(langString){var bodyInfo=$("&lt;ul&gt;");return info.forEach((function(item){bodyInfo.append("&lt;li&gt;"+item+"&lt;/li&gt;")})),bodyInfo.append("&lt;/ul&gt;"),ModalFactory.create({title:langString,body:bodyInfo.html(),large:!0},link)})).catch(Notification.exception)}}}));
/**
 * Potential contexts selector module.
 *
 * @module     tool_analytics/potential-contexts
 * @copyright  2019 David Monllao
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("tool_analytics/potential-contexts",["jquery","core/ajax"],(function($,Ajax){return{processResults:function(selector,results){var contexts=[];return $.isArray(results)?($.each(results,(function(index,context){contexts.push({value:context.id,label:context.name})})),contexts):results},transport:function(selector,query,success,failure){let modelid=$(selector).attr("modelid")||null;Ajax.call([{methodname:"tool_analytics_potential_contexts",args:{query:query,modelid:modelid}}])[0].then(success).fail(failure)}}}));
define("tool_behat/steps",["exports","core/ajax","core/templates","core/pending"],(function(_exports,_ajax,_templates,_pending){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Enhancements for the step definitions page.
   *
   * @module tool_behat/steps
   * @copyright 2022 Catalyst IT EU
   * @author Mark Johnson &lt;mark.johnson@catalyst-eu.net&gt;
   * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_ajax=_interopRequireDefault(_ajax),_templates=_interopRequireDefault(_templates),_pending=_interopRequireDefault(_pending);_exports.init=()=&gt;{document.addEventListener("change",(async e=&gt;{const entityElement=e.target.closest(".entities"),stepElement=e.target.closest(".stepcontent");if(!entityElement||!stepElement)return;const pendingPromise=new _pending.default("tool_behat/steps:change"),entityData=await(entityType=e.target.value,_ajax.default.call([{methodname:"tool_behat_get_entity_generator",args:{entitytype:entityType}}])[0]);var entityType;const{html:html,js:js}=await(entityData=&gt;{var _entityData$required;return null!==(_entityData$required=entityData.required)&amp;&amp;void 0!==_entityData$required&amp;&amp;_entityData$required.length?_templates.default.renderForPromise("tool_behat/steprequiredfields",{fields:entityData.required}):Promise.resolve({html:"",js:""})})(entityData),stepRequiredFields=stepElement.querySelector(".steprequiredfields");stepRequiredFields?await _templates.default.replaceNode(stepRequiredFields,html,js):await _templates.default.appendNodeContents(stepElement,html,js),pendingPromise.resolve()}))}}));
define("tool_componentlibrary/jsrunner",["exports","tool_componentlibrary/selectors"],(function(_exports,_selectors){var obj;
/**
   * Run the JS required for example code to work in the library.
   *
   * @module     tool_componentlibrary/jsrunner
   * @copyright  2021 Bas Brands &lt;bas@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.jsRunner=void 0,_selectors=(obj=_selectors)&amp;&amp;obj.__esModule?obj:{default:obj};_exports.jsRunner=()=&gt;{document.querySelector(_selectors.default.componentlibrary).querySelectorAll(_selectors.default.jscode).forEach((runjs=&gt;{const script=document.createElement("script");script.type="text/javascript",script.innerHTML=runjs.textContent,document.head.appendChild(script)}))}}));
define("tool_componentlibrary/search",["exports","tool_componentlibrary/lunr","tool_componentlibrary/selectors","core/log","core/notification","core/key_codes"],(function(_exports,_lunr,_selectors,_log,_notification,_key_codes){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Interface to the Lunr search engines.
   *
   * @module     tool_componentlibrary/search
   * @copyright  2021 Bas Brands &lt;bas@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.search=void 0,_lunr=_interopRequireDefault(_lunr),_selectors=_interopRequireDefault(_selectors),_log=_interopRequireDefault(_log),_notification=_interopRequireDefault(_notification);let lunrIndex=null,pagesIndex=null;const initLunr=jsonFile=&gt;{(async jsonFile=&gt;{const response=await fetch(jsonFile);return response.ok||_log.default.debug("Error getting Hugo index file: ".concat(response.status)),await response.json()})(jsonFile).then((jsondata=&gt;(pagesIndex=jsondata,lunrIndex=(0,_lunr.default)((function(){this.ref("uri"),this.field("title",{boost:10}),this.field("content"),this.field("tags",{boost:5}),jsondata.forEach((p=&gt;{this.add(p)}))})),null))).catch(_notification.default.exception)},searchIndex=query=&gt;lunrIndex.search(query+" "+query+"*").map((result=&gt;pagesIndex.filter((page=&gt;page.uri===result.ref))[0])),renderResults=results=&gt;{const dropdownMenu=document.querySelector(_selectors.default.dropdownmenu);if(!results.length)return void dropdownMenu.classList.remove("show");dropdownMenu.innerHTML="";const baseUrl=M.cfg.wwwroot+"/admin/tool/componentlibrary/docspage.php";results.slice(0,10).forEach((function(result){const link=document.createElement("a"),chapter=result.uri.split("/")[1];link.appendChild(document.createTextNode("".concat(chapter," &gt; ").concat(result.title))),link.classList.add("dropdown-item"),link.href=baseUrl+result.uri,dropdownMenu.appendChild(link)})),dropdownMenu.classList.add("show")};_exports.search=jsonFile=&gt;{initLunr(jsonFile),(()=&gt;{const searchInput=document.querySelector(_selectors.default.searchinput);searchInput.addEventListener("keyup",(e=&gt;{const query=e.currentTarget.value;query.length&lt;2?document.querySelector(_selectors.default.dropdownmenu).classList.remove("show"):renderResults(searchIndex(query))})),searchInput.addEventListener("keydown",(e=&gt;{e.keyCode===_key_codes.enter&amp;&amp;e.preventDefault(),e.keyCode===_key_codes.escape&amp;&amp;(searchInput.value="")}))})()}}));
define("tool_componentlibrary/selectors",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0;return _exports.default={clipboardbutton:".btn-clipboard",clipboardcontent:"figure.highlight, div.highlight",searchinput:'[data-region="docsearch"] input',searchsubmit:'[data-region="docsearch"] .btn-submit',dropdownmenu:'[data-region="docsearch"] .dropdown-menu',componentlibrary:'[data-region="componentlibrary"]',jscode:'[data-action="runjs"]',mustachecode:'[data-region="mustachecode"]',mustacherawcontext:'[data-region="rawcontext"]',mustacherendered:'[data-region="mustacherendered"]',mustachesource:'[data-region="mustachesource"]',mustachecontext:'[data-region="mustachecontext"]'},_exports.default}));
define("tool_componentlibrary/clipboardwrapper",["exports","core/copy_to_clipboard","tool_componentlibrary/selectors","core/templates"],(function(_exports,_copy_to_clipboard,_selectors,_templates){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Wrapper to ensure that all Hugo example snippets have a "Copy to clipboard" button.
   *
   * @module     tool_componentlibrary/clipboardwrapper
   * @copyright  2021 Bas Brands &lt;bas@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.clipboardWrapper=void 0,_selectors=_interopRequireDefault(_selectors),_templates=_interopRequireDefault(_templates);let idCounter=0;_exports.clipboardWrapper=async()=&gt;{document.querySelectorAll(_selectors.default.clipboardcontent).forEach((element=&gt;{element.id||(element.id="tool_componentlibrary_content-".concat(idCounter++)),_templates.default.renderForPromise("tool_componentlibrary/clipboardbutton",{clipboardtarget:"#".concat(element.id," code")}).then((_ref=&gt;{let{html:html,js:js}=_ref;_templates.default.prependNodeContents(element,html,js)})).catch()}))}}));
define("tool_componentlibrary/loader",["exports","./mustache","./jsrunner","./clipboardwrapper","./search"],(function(_exports,_mustache,_jsrunner,_clipboardwrapper,_search){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0;_exports.init=jsonFile=&gt;{(0,_mustache.mustache)(),(0,_jsrunner.jsRunner)(),(0,_clipboardwrapper.clipboardWrapper)(),(0,_search.search)(jsonFile)}}));
/**
 * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.9
 * Copyright (C) 2020 Oliver Nightingale
 * @license MIT
 */
!function(){var global,step2list,step3list,v,C,re_mgr0,re_mgr1,re_meq1,re_s_v,re_1a,re2_1a,re_1b,re2_1b,re_1b_2,re2_1b_2,re3_1b_2,re4_1b_2,re_1c,re_2,re_3,re_4,re2_4,re_5,re_5_1,re3_5,porterStemmer,root,factory,lunr=function(config){var builder=new lunr.Builder;return builder.pipeline.add(lunr.trimmer,lunr.stopWordFilter,lunr.stemmer),builder.searchPipeline.add(lunr.stemmer),config.call(builder,builder),builder.build()};lunr.version="2.3.9",lunr.utils={},lunr.utils.warn=(global=this,function(message){global.console&amp;&amp;console.warn&amp;&amp;console.warn(message)}),lunr.utils.asString=function(obj){return null==obj?"":obj.toString()},lunr.utils.clone=function(obj){if(null==obj)return obj;for(var clone=Object.create(null),keys=Object.keys(obj),i=0;i&lt;keys.length;i++){var key=keys[i],val=obj[key];if(Array.isArray(val))clone[key]=val.slice();else{if("string"!=typeof val&amp;&amp;"number"!=typeof val&amp;&amp;"boolean"!=typeof val)throw new TypeError("clone is not deep and does not support nested objects");clone[key]=val}}return clone},lunr.FieldRef=function(docRef,fieldName,stringValue){this.docRef=docRef,this.fieldName=fieldName,this._stringValue=stringValue},lunr.FieldRef.joiner="/",lunr.FieldRef.fromString=function(s){var n=s.indexOf(lunr.FieldRef.joiner);if(-1===n)throw"malformed field ref string";var fieldRef=s.slice(0,n),docRef=s.slice(n+1);return new lunr.FieldRef(docRef,fieldRef,s)},lunr.FieldRef.prototype.toString=function(){return null==this._stringValue&amp;&amp;(this._stringValue=this.fieldName+lunr.FieldRef.joiner+this.docRef),this._stringValue},lunr.Set=function(elements){if(this.elements=Object.create(null),elements){this.length=elements.length;for(var i=0;i&lt;this.length;i++)this.elements[elements[i]]=!0}else this.length=0},lunr.Set.complete={intersect:function(other){return other},union:function(){return this},contains:function(){return!0}},lunr.Set.empty={intersect:function(){return this},union:function(other){return other},contains:function(){return!1}},lunr.Set.prototype.contains=function(object){return!!this.elements[object]},lunr.Set.prototype.intersect=function(other){var a,b,elements,intersection=[];if(other===lunr.Set.complete)return this;if(other===lunr.Set.empty)return other;this.length&lt;other.length?(a=this,b=other):(a=other,b=this),elements=Object.keys(a.elements);for(var i=0;i&lt;elements.length;i++){var element=elements[i];element in b.elements&amp;&amp;intersection.push(element)}return new lunr.Set(intersection)},lunr.Set.prototype.union=function(other){return other===lunr.Set.complete?lunr.Set.complete:other===lunr.Set.empty?this:new lunr.Set(Object.keys(this.elements).concat(Object.keys(other.elements)))},lunr.idf=function(posting,documentCount){var documentsWithTerm=0;for(var fieldName in posting)"_index"!=fieldName&amp;&amp;(documentsWithTerm+=Object.keys(posting[fieldName]).length);var x=(documentCount-documentsWithTerm+.5)/(documentsWithTerm+.5);return Math.log(1+Math.abs(x))},lunr.Token=function(str,metadata){this.str=str||"",this.metadata=metadata||{}},lunr.Token.prototype.toString=function(){return this.str},lunr.Token.prototype.update=function(fn){return this.str=fn(this.str,this.metadata),this},lunr.Token.prototype.clone=function(fn){return fn=fn||function(s){return s},new lunr.Token(fn(this.str,this.metadata),this.metadata)},lunr.tokenizer=function(obj,metadata){if(null==obj||null==obj)return[];if(Array.isArray(obj))return obj.map((function(t){return new lunr.Token(lunr.utils.asString(t).toLowerCase(),lunr.utils.clone(metadata))}));for(var str=obj.toString().toLowerCase(),len=str.length,tokens=[],sliceEnd=0,sliceStart=0;sliceEnd&lt;=len;sliceEnd++){var sliceLength=sliceEnd-sliceStart;if(str.charAt(sliceEnd).match(lunr.tokenizer.separator)||sliceEnd==len){if(sliceLength&gt;0){var tokenMetadata=lunr.utils.clone(metadata)||{};tokenMetadata.position=[sliceStart,sliceLength],tokenMetadata.index=tokens.length,tokens.push(new lunr.Token(str.slice(sliceStart,sliceEnd),tokenMetadata))}sliceStart=sliceEnd+1}}return tokens},lunr.tokenizer.separator=/[\s\-]+/,lunr.Pipeline=function(){this._stack=[]},lunr.Pipeline.registeredFunctions=Object.create(null),lunr.Pipeline.registerFunction=function(fn,label){label in this.registeredFunctions&amp;&amp;lunr.utils.warn("Overwriting existing registered function: "+label),fn.label=label,lunr.Pipeline.registeredFunctions[fn.label]=fn},lunr.Pipeline.warnIfFunctionNotRegistered=function(fn){fn.label&amp;&amp;fn.label in this.registeredFunctions||lunr.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",fn)},lunr.Pipeline.load=function(serialised){var pipeline=new lunr.Pipeline;return serialised.forEach((function(fnName){var fn=lunr.Pipeline.registeredFunctions[fnName];if(!fn)throw new Error("Cannot load unregistered function: "+fnName);pipeline.add(fn)})),pipeline},lunr.Pipeline.prototype.add=function(){var fns=Array.prototype.slice.call(arguments);fns.forEach((function(fn){lunr.Pipeline.warnIfFunctionNotRegistered(fn),this._stack.push(fn)}),this)},lunr.Pipeline.prototype.after=function(existingFn,newFn){lunr.Pipeline.warnIfFunctionNotRegistered(newFn);var pos=this._stack.indexOf(existingFn);if(-1==pos)throw new Error("Cannot find existingFn");pos+=1,this._stack.splice(pos,0,newFn)},lunr.Pipeline.prototype.before=function(existingFn,newFn){lunr.Pipeline.warnIfFunctionNotRegistered(newFn);var pos=this._stack.indexOf(existingFn);if(-1==pos)throw new Error("Cannot find existingFn");this._stack.splice(pos,0,newFn)},lunr.Pipeline.prototype.remove=function(fn){var pos=this._stack.indexOf(fn);-1!=pos&amp;&amp;this._stack.splice(pos,1)},lunr.Pipeline.prototype.run=function(tokens){for(var stackLength=this._stack.length,i=0;i&lt;stackLength;i++){for(var fn=this._stack[i],memo=[],j=0;j&lt;tokens.length;j++){var result=fn(tokens[j],j,tokens);if(null!=result&amp;&amp;""!==result)if(Array.isArray(result))for(var k=0;k&lt;result.length;k++)memo.push(result[k]);else memo.push(result)}tokens=memo}return tokens},lunr.Pipeline.prototype.runString=function(str,metadata){var token=new lunr.Token(str,metadata);return this.run([token]).map((function(t){return t.toString()}))},lunr.Pipeline.prototype.reset=function(){this._stack=[]},lunr.Pipeline.prototype.toJSON=function(){return this._stack.map((function(fn){return lunr.Pipeline.warnIfFunctionNotRegistered(fn),fn.label}))},lunr.Vector=function(elements){this._magnitude=0,this.elements=elements||[]},lunr.Vector.prototype.positionForIndex=function(index){if(0==this.elements.length)return 0;for(var start=0,end=this.elements.length/2,sliceLength=end-start,pivotPoint=Math.floor(sliceLength/2),pivotIndex=this.elements[2*pivotPoint];sliceLength&gt;1&amp;&amp;(pivotIndex&lt;index&amp;&amp;(start=pivotPoint),pivotIndex&gt;index&amp;&amp;(end=pivotPoint),pivotIndex!=index);)sliceLength=end-start,pivotPoint=start+Math.floor(sliceLength/2),pivotIndex=this.elements[2*pivotPoint];return pivotIndex==index||pivotIndex&gt;index?2*pivotPoint:pivotIndex&lt;index?2*(pivotPoint+1):void 0},lunr.Vector.prototype.insert=function(insertIdx,val){this.upsert(insertIdx,val,(function(){throw"duplicate index"}))},lunr.Vector.prototype.upsert=function(insertIdx,val,fn){this._magnitude=0;var position=this.positionForIndex(insertIdx);this.elements[position]==insertIdx?this.elements[position+1]=fn(this.elements[position+1],val):this.elements.splice(position,0,insertIdx,val)},lunr.Vector.prototype.magnitude=function(){if(this._magnitude)return this._magnitude;for(var sumOfSquares=0,elementsLength=this.elements.length,i=1;i&lt;elementsLength;i+=2){var val=this.elements[i];sumOfSquares+=val*val}return this._magnitude=Math.sqrt(sumOfSquares)},lunr.Vector.prototype.dot=function(otherVector){for(var dotProduct=0,a=this.elements,b=otherVector.elements,aLen=a.length,bLen=b.length,aVal=0,bVal=0,i=0,j=0;i&lt;aLen&amp;&amp;j&lt;bLen;)(aVal=a[i])&lt;(bVal=b[j])?i+=2:aVal&gt;bVal?j+=2:aVal==bVal&amp;&amp;(dotProduct+=a[i+1]*b[j+1],i+=2,j+=2);return dotProduct},lunr.Vector.prototype.similarity=function(otherVector){return this.dot(otherVector)/this.magnitude()||0},lunr.Vector.prototype.toArray=function(){for(var output=new Array(this.elements.length/2),i=1,j=0;i&lt;this.elements.length;i+=2,j++)output[j]=this.elements[i];return output},lunr.Vector.prototype.toJSON=function(){return this.elements},lunr.stemmer=(step2list={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},step3list={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},v="[aeiouy]",C="[^aeiou][^aeiouy]*",re_mgr0=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy][aeiou]*[^aeiou][^aeiouy]*"),re_mgr1=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy][aeiou]*[^aeiou][^aeiouy]*[aeiouy][aeiou]*[^aeiou][^aeiouy]*"),re_meq1=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy][aeiou]*[^aeiou][^aeiouy]*([aeiouy][aeiou]*)?$"),re_s_v=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy]"),re_1a=/^(.+?)(ss|i)es$/,re2_1a=/^(.+?)([^s])s$/,re_1b=/^(.+?)eed$/,re2_1b=/^(.+?)(ed|ing)$/,re_1b_2=/.$/,re2_1b_2=/(at|bl|iz)$/,re3_1b_2=new RegExp("([^aeiouylsz])\\1$"),re4_1b_2=new RegExp("^"+C+v+"[^aeiouwxy]$"),re_1c=/^(.+?[^aeiou])y$/,re_2=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,re_3=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,re_4=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,re2_4=/^(.+?)(s|t)(ion)$/,re_5=/^(.+?)e$/,re_5_1=/ll$/,re3_5=new RegExp("^"+C+v+"[^aeiouwxy]$"),porterStemmer=function(w){var stem,suffix,firstch,re,re2,re3,re4;if(w.length&lt;3)return w;if("y"==(firstch=w.substr(0,1))&amp;&amp;(w=firstch.toUpperCase()+w.substr(1)),re2=re2_1a,(re=re_1a).test(w)?w=w.replace(re,"$1$2"):re2.test(w)&amp;&amp;(w=w.replace(re2,"$1$2")),re2=re2_1b,(re=re_1b).test(w)){var fp=re.exec(w);(re=re_mgr0).test(fp[1])&amp;&amp;(re=re_1b_2,w=w.replace(re,""))}else re2.test(w)&amp;&amp;(stem=(fp=re2.exec(w))[1],(re2=re_s_v).test(stem)&amp;&amp;(re3=re3_1b_2,re4=re4_1b_2,(re2=re2_1b_2).test(w=stem)?w+="e":re3.test(w)?(re=re_1b_2,w=w.replace(re,"")):re4.test(w)&amp;&amp;(w+="e")));return(re=re_1c).test(w)&amp;&amp;(w=(stem=(fp=re.exec(w))[1])+"i"),(re=re_2).test(w)&amp;&amp;(stem=(fp=re.exec(w))[1],suffix=fp[2],(re=re_mgr0).test(stem)&amp;&amp;(w=stem+step2list[suffix])),(re=re_3).test(w)&amp;&amp;(stem=(fp=re.exec(w))[1],suffix=fp[2],(re=re_mgr0).test(stem)&amp;&amp;(w=stem+step3list[suffix])),re2=re2_4,(re=re_4).test(w)?(stem=(fp=re.exec(w))[1],(re=re_mgr1).test(stem)&amp;&amp;(w=stem)):re2.test(w)&amp;&amp;(stem=(fp=re2.exec(w))[1]+fp[2],(re2=re_mgr1).test(stem)&amp;&amp;(w=stem)),(re=re_5).test(w)&amp;&amp;(stem=(fp=re.exec(w))[1],re2=re_meq1,re3=re3_5,((re=re_mgr1).test(stem)||re2.test(stem)&amp;&amp;!re3.test(stem))&amp;&amp;(w=stem)),re2=re_mgr1,(re=re_5_1).test(w)&amp;&amp;re2.test(w)&amp;&amp;(re=re_1b_2,w=w.replace(re,"")),"y"==firstch&amp;&amp;(w=firstch.toLowerCase()+w.substr(1)),w},function(token){return token.update(porterStemmer)}),lunr.Pipeline.registerFunction(lunr.stemmer,"stemmer"),lunr.generateStopWordFilter=function(stopWords){var words=stopWords.reduce((function(memo,stopWord){return memo[stopWord]=stopWord,memo}),{});return function(token){if(token&amp;&amp;words[token.toString()]!==token.toString())return token}},lunr.stopWordFilter=lunr.generateStopWordFilter(["a","able","about","across","after","all","almost","also","am","among","an","and","any","are","as","at","be","because","been","but","by","can","cannot","could","dear","did","do","does","either","else","ever","every","for","from","get","got","had","has","have","he","her","hers","him","his","how","however","i","if","in","into","is","it","its","just","least","let","like","likely","may","me","might","most","must","my","neither","no","nor","not","of","off","often","on","only","or","other","our","own","rather","said","say","says","she","should","since","so","some","than","that","the","their","them","then","there","these","they","this","tis","to","too","twas","us","wants","was","we","were","what","when","where","which","while","who","whom","why","will","with","would","yet","you","your"]),lunr.Pipeline.registerFunction(lunr.stopWordFilter,"stopWordFilter"),lunr.trimmer=function(token){return token.update((function(s){return s.replace(/^\W+/,"").replace(/\W+$/,"")}))},lunr.Pipeline.registerFunction(lunr.trimmer,"trimmer"),lunr.TokenSet=function(){this.final=!1,this.edges={},this.id=lunr.TokenSet._nextId,lunr.TokenSet._nextId+=1},lunr.TokenSet._nextId=1,lunr.TokenSet.fromArray=function(arr){for(var builder=new lunr.TokenSet.Builder,i=0,len=arr.length;i&lt;len;i++)builder.insert(arr[i]);return builder.finish(),builder.root},lunr.TokenSet.fromClause=function(clause){return"editDistance"in clause?lunr.TokenSet.fromFuzzyString(clause.term,clause.editDistance):lunr.TokenSet.fromString(clause.term)},lunr.TokenSet.fromFuzzyString=function(str,editDistance){for(var root=new lunr.TokenSet,stack=[{node:root,editsRemaining:editDistance,str:str}];stack.length;){var frame=stack.pop();if(frame.str.length&gt;0){var noEditNode,char=frame.str.charAt(0);char in frame.node.edges?noEditNode=frame.node.edges[char]:(noEditNode=new lunr.TokenSet,frame.node.edges[char]=noEditNode),1==frame.str.length&amp;&amp;(noEditNode.final=!0),stack.push({node:noEditNode,editsRemaining:frame.editsRemaining,str:frame.str.slice(1)})}if(0!=frame.editsRemaining){if("*"in frame.node.edges)var insertionNode=frame.node.edges["*"];else{insertionNode=new lunr.TokenSet;frame.node.edges["*"]=insertionNode}if(0==frame.str.length&amp;&amp;(insertionNode.final=!0),stack.push({node:insertionNode,editsRemaining:frame.editsRemaining-1,str:frame.str}),frame.str.length&gt;1&amp;&amp;stack.push({node:frame.node,editsRemaining:frame.editsRemaining-1,str:frame.str.slice(1)}),1==frame.str.length&amp;&amp;(frame.node.final=!0),frame.str.length&gt;=1){if("*"in frame.node.edges)var substitutionNode=frame.node.edges["*"];else{substitutionNode=new lunr.TokenSet;frame.node.edges["*"]=substitutionNode}1==frame.str.length&amp;&amp;(substitutionNode.final=!0),stack.push({node:substitutionNode,editsRemaining:frame.editsRemaining-1,str:frame.str.slice(1)})}if(frame.str.length&gt;1){var transposeNode,charA=frame.str.charAt(0),charB=frame.str.charAt(1);charB in frame.node.edges?transposeNode=frame.node.edges[charB]:(transposeNode=new lunr.TokenSet,frame.node.edges[charB]=transposeNode),1==frame.str.length&amp;&amp;(transposeNode.final=!0),stack.push({node:transposeNode,editsRemaining:frame.editsRemaining-1,str:charA+frame.str.slice(2)})}}}return root},lunr.TokenSet.fromString=function(str){for(var node=new lunr.TokenSet,root=node,i=0,len=str.length;i&lt;len;i++){var char=str[i],final=i==len-1;if("*"==char)node.edges[char]=node,node.final=final;else{var next=new lunr.TokenSet;next.final=final,node.edges[char]=next,node=next}}return root},lunr.TokenSet.prototype.toArray=function(){for(var words=[],stack=[{prefix:"",node:this}];stack.length;){var frame=stack.pop(),edges=Object.keys(frame.node.edges),len=edges.length;frame.node.final&amp;&amp;(frame.prefix.charAt(0),words.push(frame.prefix));for(var i=0;i&lt;len;i++){var edge=edges[i];stack.push({prefix:frame.prefix.concat(edge),node:frame.node.edges[edge]})}}return words},lunr.TokenSet.prototype.toString=function(){if(this._str)return this._str;for(var str=this.final?"1":"0",labels=Object.keys(this.edges).sort(),len=labels.length,i=0;i&lt;len;i++){var label=labels[i];str=str+label+this.edges[label].id}return str},lunr.TokenSet.prototype.intersect=function(b){for(var output=new lunr.TokenSet,frame=void 0,stack=[{qNode:b,output:output,node:this}];stack.length;){frame=stack.pop();for(var qEdges=Object.keys(frame.qNode.edges),qLen=qEdges.length,nEdges=Object.keys(frame.node.edges),nLen=nEdges.length,q=0;q&lt;qLen;q++)for(var qEdge=qEdges[q],n=0;n&lt;nLen;n++){var nEdge=nEdges[n];if(nEdge==qEdge||"*"==qEdge){var node=frame.node.edges[nEdge],qNode=frame.qNode.edges[qEdge],final=node.final&amp;&amp;qNode.final,next=void 0;nEdge in frame.output.edges?(next=frame.output.edges[nEdge]).final=next.final||final:((next=new lunr.TokenSet).final=final,frame.output.edges[nEdge]=next),stack.push({qNode:qNode,output:next,node:node})}}}return output},lunr.TokenSet.Builder=function(){this.previousWord="",this.root=new lunr.TokenSet,this.uncheckedNodes=[],this.minimizedNodes={}},lunr.TokenSet.Builder.prototype.insert=function(word){var node,commonPrefix=0;if(word&lt;this.previousWord)throw new Error("Out of order word insertion");for(var i=0;i&lt;word.length&amp;&amp;i&lt;this.previousWord.length&amp;&amp;word[i]==this.previousWord[i];i++)commonPrefix++;this.minimize(commonPrefix),node=0==this.uncheckedNodes.length?this.root:this.uncheckedNodes[this.uncheckedNodes.length-1].child;for(i=commonPrefix;i&lt;word.length;i++){var nextNode=new lunr.TokenSet,char=word[i];node.edges[char]=nextNode,this.uncheckedNodes.push({parent:node,char:char,child:nextNode}),node=nextNode}node.final=!0,this.previousWord=word},lunr.TokenSet.Builder.prototype.finish=function(){this.minimize(0)},lunr.TokenSet.Builder.prototype.minimize=function(downTo){for(var i=this.uncheckedNodes.length-1;i&gt;=downTo;i--){var node=this.uncheckedNodes[i],childKey=node.child.toString();childKey in this.minimizedNodes?node.parent.edges[node.char]=this.minimizedNodes[childKey]:(node.child._str=childKey,this.minimizedNodes[childKey]=node.child),this.uncheckedNodes.pop()}},lunr.Index=function(attrs){this.invertedIndex=attrs.invertedIndex,this.fieldVectors=attrs.fieldVectors,this.tokenSet=attrs.tokenSet,this.fields=attrs.fields,this.pipeline=attrs.pipeline},lunr.Index.prototype.search=function(queryString){return this.query((function(query){new lunr.QueryParser(queryString,query).parse()}))},lunr.Index.prototype.query=function(fn){for(var query=new lunr.Query(this.fields),matchingFields=Object.create(null),queryVectors=Object.create(null),termFieldCache=Object.create(null),requiredMatches=Object.create(null),prohibitedMatches=Object.create(null),i=0;i&lt;this.fields.length;i++)queryVectors[this.fields[i]]=new lunr.Vector;fn.call(query,query);for(i=0;i&lt;query.clauses.length;i++){var clause=query.clauses[i],terms=null,clauseMatches=lunr.Set.empty;terms=clause.usePipeline?this.pipeline.runString(clause.term,{fields:clause.fields}):[clause.term];for(var m=0;m&lt;terms.length;m++){var term=terms[m];clause.term=term;var termTokenSet=lunr.TokenSet.fromClause(clause),expandedTerms=this.tokenSet.intersect(termTokenSet).toArray();if(0===expandedTerms.length&amp;&amp;clause.presence===lunr.Query.presence.REQUIRED){for(var k=0;k&lt;clause.fields.length;k++){requiredMatches[field=clause.fields[k]]=lunr.Set.empty}break}for(var j=0;j&lt;expandedTerms.length;j++){var expandedTerm=expandedTerms[j],posting=this.invertedIndex[expandedTerm],termIndex=posting._index;for(k=0;k&lt;clause.fields.length;k++){var fieldPosting=posting[field=clause.fields[k]],matchingDocumentRefs=Object.keys(fieldPosting),termField=expandedTerm+"/"+field,matchingDocumentsSet=new lunr.Set(matchingDocumentRefs);if(clause.presence==lunr.Query.presence.REQUIRED&amp;&amp;(clauseMatches=clauseMatches.union(matchingDocumentsSet),void 0===requiredMatches[field]&amp;&amp;(requiredMatches[field]=lunr.Set.complete)),clause.presence!=lunr.Query.presence.PROHIBITED){if(queryVectors[field].upsert(termIndex,clause.boost,(function(a,b){return a+b})),!termFieldCache[termField]){for(var l=0;l&lt;matchingDocumentRefs.length;l++){var fieldMatch,matchingDocumentRef=matchingDocumentRefs[l],matchingFieldRef=new lunr.FieldRef(matchingDocumentRef,field),metadata=fieldPosting[matchingDocumentRef];void 0===(fieldMatch=matchingFields[matchingFieldRef])?matchingFields[matchingFieldRef]=new lunr.MatchData(expandedTerm,field,metadata):fieldMatch.add(expandedTerm,field,metadata)}termFieldCache[termField]=!0}}else void 0===prohibitedMatches[field]&amp;&amp;(prohibitedMatches[field]=lunr.Set.empty),prohibitedMatches[field]=prohibitedMatches[field].union(matchingDocumentsSet)}}}if(clause.presence===lunr.Query.presence.REQUIRED)for(k=0;k&lt;clause.fields.length;k++){requiredMatches[field=clause.fields[k]]=requiredMatches[field].intersect(clauseMatches)}}var allRequiredMatches=lunr.Set.complete,allProhibitedMatches=lunr.Set.empty;for(i=0;i&lt;this.fields.length;i++){var field;requiredMatches[field=this.fields[i]]&amp;&amp;(allRequiredMatches=allRequiredMatches.intersect(requiredMatches[field])),prohibitedMatches[field]&amp;&amp;(allProhibitedMatches=allProhibitedMatches.union(prohibitedMatches[field]))}var matchingFieldRefs=Object.keys(matchingFields),results=[],matches=Object.create(null);if(query.isNegated()){matchingFieldRefs=Object.keys(this.fieldVectors);for(i=0;i&lt;matchingFieldRefs.length;i++){matchingFieldRef=matchingFieldRefs[i];var fieldRef=lunr.FieldRef.fromString(matchingFieldRef);matchingFields[matchingFieldRef]=new lunr.MatchData}}for(i=0;i&lt;matchingFieldRefs.length;i++){var docRef=(fieldRef=lunr.FieldRef.fromString(matchingFieldRefs[i])).docRef;if(allRequiredMatches.contains(docRef)&amp;&amp;!allProhibitedMatches.contains(docRef)){var docMatch,fieldVector=this.fieldVectors[fieldRef],score=queryVectors[fieldRef.fieldName].similarity(fieldVector);if(void 0!==(docMatch=matches[docRef]))docMatch.score+=score,docMatch.matchData.combine(matchingFields[fieldRef]);else{var match={ref:docRef,score:score,matchData:matchingFields[fieldRef]};matches[docRef]=match,results.push(match)}}}return results.sort((function(a,b){return b.score-a.score}))},lunr.Index.prototype.toJSON=function(){var invertedIndex=Object.keys(this.invertedIndex).sort().map((function(term){return[term,this.invertedIndex[term]]}),this),fieldVectors=Object.keys(this.fieldVectors).map((function(ref){return[ref,this.fieldVectors[ref].toJSON()]}),this);return{version:lunr.version,fields:this.fields,fieldVectors:fieldVectors,invertedIndex:invertedIndex,pipeline:this.pipeline.toJSON()}},lunr.Index.load=function(serializedIndex){var attrs={},fieldVectors={},serializedVectors=serializedIndex.fieldVectors,invertedIndex=Object.create(null),serializedInvertedIndex=serializedIndex.invertedIndex,tokenSetBuilder=new lunr.TokenSet.Builder,pipeline=lunr.Pipeline.load(serializedIndex.pipeline);serializedIndex.version!=lunr.version&amp;&amp;lunr.utils.warn("Version mismatch when loading serialised index. Current version of lunr '"+lunr.version+"' does not match serialized index '"+serializedIndex.version+"'");for(var i=0;i&lt;serializedVectors.length;i++){var ref=(tuple=serializedVectors[i])[0],elements=tuple[1];fieldVectors[ref]=new lunr.Vector(elements)}for(i=0;i&lt;serializedInvertedIndex.length;i++){var tuple,term=(tuple=serializedInvertedIndex[i])[0],posting=tuple[1];tokenSetBuilder.insert(term),invertedIndex[term]=posting}return tokenSetBuilder.finish(),attrs.fields=serializedIndex.fields,attrs.fieldVectors=fieldVectors,attrs.invertedIndex=invertedIndex,attrs.tokenSet=tokenSetBuilder.root,attrs.pipeline=pipeline,new lunr.Index(attrs)},lunr.Builder=function(){this._ref="id",this._fields=Object.create(null),this._documents=Object.create(null),this.invertedIndex=Object.create(null),this.fieldTermFrequencies={},this.fieldLengths={},this.tokenizer=lunr.tokenizer,this.pipeline=new lunr.Pipeline,this.searchPipeline=new lunr.Pipeline,this.documentCount=0,this._b=.75,this._k1=1.2,this.termIndex=0,this.metadataWhitelist=[]},lunr.Builder.prototype.ref=function(ref){this._ref=ref},lunr.Builder.prototype.field=function(fieldName,attributes){if(/\//.test(fieldName))throw new RangeError("Field '"+fieldName+"' contains illegal character '/'");this._fields[fieldName]=attributes||{}},lunr.Builder.prototype.b=function(number){this._b=number&lt;0?0:number&gt;1?1:number},lunr.Builder.prototype.k1=function(number){this._k1=number},lunr.Builder.prototype.add=function(doc,attributes){var docRef=doc[this._ref],fields=Object.keys(this._fields);this._documents[docRef]=attributes||{},this.documentCount+=1;for(var i=0;i&lt;fields.length;i++){var fieldName=fields[i],extractor=this._fields[fieldName].extractor,field=extractor?extractor(doc):doc[fieldName],tokens=this.tokenizer(field,{fields:[fieldName]}),terms=this.pipeline.run(tokens),fieldRef=new lunr.FieldRef(docRef,fieldName),fieldTerms=Object.create(null);this.fieldTermFrequencies[fieldRef]=fieldTerms,this.fieldLengths[fieldRef]=0,this.fieldLengths[fieldRef]+=terms.length;for(var j=0;j&lt;terms.length;j++){var term=terms[j];if(null==fieldTerms[term]&amp;&amp;(fieldTerms[term]=0),fieldTerms[term]+=1,null==this.invertedIndex[term]){var posting=Object.create(null);posting._index=this.termIndex,this.termIndex+=1;for(var k=0;k&lt;fields.length;k++)posting[fields[k]]=Object.create(null);this.invertedIndex[term]=posting}null==this.invertedIndex[term][fieldName][docRef]&amp;&amp;(this.invertedIndex[term][fieldName][docRef]=Object.create(null));for(var l=0;l&lt;this.metadataWhitelist.length;l++){var metadataKey=this.metadataWhitelist[l],metadata=term.metadata[metadataKey];null==this.invertedIndex[term][fieldName][docRef][metadataKey]&amp;&amp;(this.invertedIndex[term][fieldName][docRef][metadataKey]=[]),this.invertedIndex[term][fieldName][docRef][metadataKey].push(metadata)}}}},lunr.Builder.prototype.calculateAverageFieldLengths=function(){for(var fieldRefs=Object.keys(this.fieldLengths),numberOfFields=fieldRefs.length,accumulator={},documentsWithField={},i=0;i&lt;numberOfFields;i++){var fieldRef=lunr.FieldRef.fromString(fieldRefs[i]),field=fieldRef.fieldName;documentsWithField[field]||(documentsWithField[field]=0),documentsWithField[field]+=1,accumulator[field]||(accumulator[field]=0),accumulator[field]+=this.fieldLengths[fieldRef]}var fields=Object.keys(this._fields);for(i=0;i&lt;fields.length;i++){var fieldName=fields[i];accumulator[fieldName]=accumulator[fieldName]/documentsWithField[fieldName]}this.averageFieldLength=accumulator},lunr.Builder.prototype.createFieldVectors=function(){for(var fieldVectors={},fieldRefs=Object.keys(this.fieldTermFrequencies),fieldRefsLength=fieldRefs.length,termIdfCache=Object.create(null),i=0;i&lt;fieldRefsLength;i++){for(var fieldRef=lunr.FieldRef.fromString(fieldRefs[i]),fieldName=fieldRef.fieldName,fieldLength=this.fieldLengths[fieldRef],fieldVector=new lunr.Vector,termFrequencies=this.fieldTermFrequencies[fieldRef],terms=Object.keys(termFrequencies),termsLength=terms.length,fieldBoost=this._fields[fieldName].boost||1,docBoost=this._documents[fieldRef.docRef].boost||1,j=0;j&lt;termsLength;j++){var idf,score,scoreWithPrecision,term=terms[j],tf=termFrequencies[term],termIndex=this.invertedIndex[term]._index;void 0===termIdfCache[term]?(idf=lunr.idf(this.invertedIndex[term],this.documentCount),termIdfCache[term]=idf):idf=termIdfCache[term],score=idf*((this._k1+1)*tf)/(this._k1*(1-this._b+this._b*(fieldLength/this.averageFieldLength[fieldName]))+tf),score*=fieldBoost,score*=docBoost,scoreWithPrecision=Math.round(1e3*score)/1e3,fieldVector.insert(termIndex,scoreWithPrecision)}fieldVectors[fieldRef]=fieldVector}this.fieldVectors=fieldVectors},lunr.Builder.prototype.createTokenSet=function(){this.tokenSet=lunr.TokenSet.fromArray(Object.keys(this.invertedIndex).sort())},lunr.Builder.prototype.build=function(){return this.calculateAverageFieldLengths(),this.createFieldVectors(),this.createTokenSet(),new lunr.Index({invertedIndex:this.invertedIndex,fieldVectors:this.fieldVectors,tokenSet:this.tokenSet,fields:Object.keys(this._fields),pipeline:this.searchPipeline})},lunr.Builder.prototype.use=function(fn){var args=Array.prototype.slice.call(arguments,1);args.unshift(this),fn.apply(this,args)},lunr.MatchData=function(term,field,metadata){for(var clonedMetadata=Object.create(null),metadataKeys=Object.keys(metadata||{}),i=0;i&lt;metadataKeys.length;i++){var key=metadataKeys[i];clonedMetadata[key]=metadata[key].slice()}this.metadata=Object.create(null),void 0!==term&amp;&amp;(this.metadata[term]=Object.create(null),this.metadata[term][field]=clonedMetadata)},lunr.MatchData.prototype.combine=function(otherMatchData){for(var terms=Object.keys(otherMatchData.metadata),i=0;i&lt;terms.length;i++){var term=terms[i],fields=Object.keys(otherMatchData.metadata[term]);null==this.metadata[term]&amp;&amp;(this.metadata[term]=Object.create(null));for(var j=0;j&lt;fields.length;j++){var field=fields[j],keys=Object.keys(otherMatchData.metadata[term][field]);null==this.metadata[term][field]&amp;&amp;(this.metadata[term][field]=Object.create(null));for(var k=0;k&lt;keys.length;k++){var key=keys[k];null==this.metadata[term][field][key]?this.metadata[term][field][key]=otherMatchData.metadata[term][field][key]:this.metadata[term][field][key]=this.metadata[term][field][key].concat(otherMatchData.metadata[term][field][key])}}}},lunr.MatchData.prototype.add=function(term,field,metadata){if(!(term in this.metadata))return this.metadata[term]=Object.create(null),void(this.metadata[term][field]=metadata);if(field in this.metadata[term])for(var metadataKeys=Object.keys(metadata),i=0;i&lt;metadataKeys.length;i++){var key=metadataKeys[i];key in this.metadata[term][field]?this.metadata[term][field][key]=this.metadata[term][field][key].concat(metadata[key]):this.metadata[term][field][key]=metadata[key]}else this.metadata[term][field]=metadata},lunr.Query=function(allFields){this.clauses=[],this.allFields=allFields},lunr.Query.wildcard=new String("*"),lunr.Query.wildcard.NONE=0,lunr.Query.wildcard.LEADING=1,lunr.Query.wildcard.TRAILING=2,lunr.Query.presence={OPTIONAL:1,REQUIRED:2,PROHIBITED:3},lunr.Query.prototype.clause=function(clause){return"fields"in clause||(clause.fields=this.allFields),"boost"in clause||(clause.boost=1),"usePipeline"in clause||(clause.usePipeline=!0),"wildcard"in clause||(clause.wildcard=lunr.Query.wildcard.NONE),clause.wildcard&amp;lunr.Query.wildcard.LEADING&amp;&amp;clause.term.charAt(0)!=lunr.Query.wildcard&amp;&amp;(clause.term="*"+clause.term),clause.wildcard&amp;lunr.Query.wildcard.TRAILING&amp;&amp;clause.term.slice(-1)!=lunr.Query.wildcard&amp;&amp;(clause.term=clause.term+"*"),"presence"in clause||(clause.presence=lunr.Query.presence.OPTIONAL),this.clauses.push(clause),this},lunr.Query.prototype.isNegated=function(){for(var i=0;i&lt;this.clauses.length;i++)if(this.clauses[i].presence!=lunr.Query.presence.PROHIBITED)return!1;return!0},lunr.Query.prototype.term=function(term,options){if(Array.isArray(term))return term.forEach((function(t){this.term(t,lunr.utils.clone(options))}),this),this;var clause=options||{};return clause.term=term.toString(),this.clause(clause),this},lunr.QueryParseError=function(message,start,end){this.name="QueryParseError",this.message=message,this.start=start,this.end=end},lunr.QueryParseError.prototype=new Error,lunr.QueryLexer=function(str){this.lexemes=[],this.str=str,this.length=str.length,this.pos=0,this.start=0,this.escapeCharPositions=[]},lunr.QueryLexer.prototype.run=function(){for(var state=lunr.QueryLexer.lexText;state;)state=state(this)},lunr.QueryLexer.prototype.sliceString=function(){for(var subSlices=[],sliceStart=this.start,sliceEnd=this.pos,i=0;i&lt;this.escapeCharPositions.length;i++)sliceEnd=this.escapeCharPositions[i],subSlices.push(this.str.slice(sliceStart,sliceEnd)),sliceStart=sliceEnd+1;return subSlices.push(this.str.slice(sliceStart,this.pos)),this.escapeCharPositions.length=0,subSlices.join("")},lunr.QueryLexer.prototype.emit=function(type){this.lexemes.push({type:type,str:this.sliceString(),start:this.start,end:this.pos}),this.start=this.pos},lunr.QueryLexer.prototype.escapeCharacter=function(){this.escapeCharPositions.push(this.pos-1),this.pos+=1},lunr.QueryLexer.prototype.next=function(){if(this.pos&gt;=this.length)return lunr.QueryLexer.EOS;var char=this.str.charAt(this.pos);return this.pos+=1,char},lunr.QueryLexer.prototype.width=function(){return this.pos-this.start},lunr.QueryLexer.prototype.ignore=function(){this.start==this.pos&amp;&amp;(this.pos+=1),this.start=this.pos},lunr.QueryLexer.prototype.backup=function(){this.pos-=1},lunr.QueryLexer.prototype.acceptDigitRun=function(){var char,charCode;do{charCode=(char=this.next()).charCodeAt(0)}while(charCode&gt;47&amp;&amp;charCode&lt;58);char!=lunr.QueryLexer.EOS&amp;&amp;this.backup()},lunr.QueryLexer.prototype.more=function(){return this.pos&lt;this.length},lunr.QueryLexer.EOS="EOS",lunr.QueryLexer.FIELD="FIELD",lunr.QueryLexer.TERM="TERM",lunr.QueryLexer.EDIT_DISTANCE="EDIT_DISTANCE",lunr.QueryLexer.BOOST="BOOST",lunr.QueryLexer.PRESENCE="PRESENCE",lunr.QueryLexer.lexField=function(lexer){return lexer.backup(),lexer.emit(lunr.QueryLexer.FIELD),lexer.ignore(),lunr.QueryLexer.lexText},lunr.QueryLexer.lexTerm=function(lexer){if(lexer.width()&gt;1&amp;&amp;(lexer.backup(),lexer.emit(lunr.QueryLexer.TERM)),lexer.ignore(),lexer.more())return lunr.QueryLexer.lexText},lunr.QueryLexer.lexEditDistance=function(lexer){return lexer.ignore(),lexer.acceptDigitRun(),lexer.emit(lunr.QueryLexer.EDIT_DISTANCE),lunr.QueryLexer.lexText},lunr.QueryLexer.lexBoost=function(lexer){return lexer.ignore(),lexer.acceptDigitRun(),lexer.emit(lunr.QueryLexer.BOOST),lunr.QueryLexer.lexText},lunr.QueryLexer.lexEOS=function(lexer){lexer.width()&gt;0&amp;&amp;lexer.emit(lunr.QueryLexer.TERM)},lunr.QueryLexer.termSeparator=lunr.tokenizer.separator,lunr.QueryLexer.lexText=function(lexer){for(;;){var char=lexer.next();if(char==lunr.QueryLexer.EOS)return lunr.QueryLexer.lexEOS;if(92!=char.charCodeAt(0)){if(":"==char)return lunr.QueryLexer.lexField;if("~"==char)return lexer.backup(),lexer.width()&gt;0&amp;&amp;lexer.emit(lunr.QueryLexer.TERM),lunr.QueryLexer.lexEditDistance;if("^"==char)return lexer.backup(),lexer.width()&gt;0&amp;&amp;lexer.emit(lunr.QueryLexer.TERM),lunr.QueryLexer.lexBoost;if("+"==char&amp;&amp;1===lexer.width())return lexer.emit(lunr.QueryLexer.PRESENCE),lunr.QueryLexer.lexText;if("-"==char&amp;&amp;1===lexer.width())return lexer.emit(lunr.QueryLexer.PRESENCE),lunr.QueryLexer.lexText;if(char.match(lunr.QueryLexer.termSeparator))return lunr.QueryLexer.lexTerm}else lexer.escapeCharacter()}},lunr.QueryParser=function(str,query){this.lexer=new lunr.QueryLexer(str),this.query=query,this.currentClause={},this.lexemeIdx=0},lunr.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var state=lunr.QueryParser.parseClause;state;)state=state(this);return this.query},lunr.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},lunr.QueryParser.prototype.consumeLexeme=function(){var lexeme=this.peekLexeme();return this.lexemeIdx+=1,lexeme},lunr.QueryParser.prototype.nextClause=function(){var completedClause=this.currentClause;this.query.clause(completedClause),this.currentClause={}},lunr.QueryParser.parseClause=function(parser){var lexeme=parser.peekLexeme();if(null!=lexeme)switch(lexeme.type){case lunr.QueryLexer.PRESENCE:return lunr.QueryParser.parsePresence;case lunr.QueryLexer.FIELD:return lunr.QueryParser.parseField;case lunr.QueryLexer.TERM:return lunr.QueryParser.parseTerm;default:var errorMessage="expected either a field or a term, found "+lexeme.type;throw lexeme.str.length&gt;=1&amp;&amp;(errorMessage+=" with value '"+lexeme.str+"'"),new lunr.QueryParseError(errorMessage,lexeme.start,lexeme.end)}},lunr.QueryParser.parsePresence=function(parser){var lexeme=parser.consumeLexeme();if(null!=lexeme){switch(lexeme.str){case"-":parser.currentClause.presence=lunr.Query.presence.PROHIBITED;break;case"+":parser.currentClause.presence=lunr.Query.presence.REQUIRED;break;default:var errorMessage="unrecognised presence operator'"+lexeme.str+"'";throw new lunr.QueryParseError(errorMessage,lexeme.start,lexeme.end)}var nextLexeme=parser.peekLexeme();if(null==nextLexeme){errorMessage="expecting term or field, found nothing";throw new lunr.QueryParseError(errorMessage,lexeme.start,lexeme.end)}switch(nextLexeme.type){case lunr.QueryLexer.FIELD:return lunr.QueryParser.parseField;case lunr.QueryLexer.TERM:return lunr.QueryParser.parseTerm;default:errorMessage="expecting term or field, found '"+nextLexeme.type+"'";throw new lunr.QueryParseError(errorMessage,nextLexeme.start,nextLexeme.end)}}},lunr.QueryParser.parseField=function(parser){var lexeme=parser.consumeLexeme();if(null!=lexeme){if(-1==parser.query.allFields.indexOf(lexeme.str)){var possibleFields=parser.query.allFields.map((function(f){return"'"+f+"'"})).join(", "),errorMessage="unrecognised field '"+lexeme.str+"', possible fields: "+possibleFields;throw new lunr.QueryParseError(errorMessage,lexeme.start,lexeme.end)}parser.currentClause.fields=[lexeme.str];var nextLexeme=parser.peekLexeme();if(null==nextLexeme){errorMessage="expecting term, found nothing";throw new lunr.QueryParseError(errorMessage,lexeme.start,lexeme.end)}if(nextLexeme.type===lunr.QueryLexer.TERM)return lunr.QueryParser.parseTerm;errorMessage="expecting term, found '"+nextLexeme.type+"'";throw new lunr.QueryParseError(errorMessage,nextLexeme.start,nextLexeme.end)}},lunr.QueryParser.parseTerm=function(parser){var lexeme=parser.consumeLexeme();if(null!=lexeme){parser.currentClause.term=lexeme.str.toLowerCase(),-1!=lexeme.str.indexOf("*")&amp;&amp;(parser.currentClause.usePipeline=!1);var nextLexeme=parser.peekLexeme();if(null!=nextLexeme)switch(nextLexeme.type){case lunr.QueryLexer.TERM:return parser.nextClause(),lunr.QueryParser.parseTerm;case lunr.QueryLexer.FIELD:return parser.nextClause(),lunr.QueryParser.parseField;case lunr.QueryLexer.EDIT_DISTANCE:return lunr.QueryParser.parseEditDistance;case lunr.QueryLexer.BOOST:return lunr.QueryParser.parseBoost;case lunr.QueryLexer.PRESENCE:return parser.nextClause(),lunr.QueryParser.parsePresence;default:var errorMessage="Unexpected lexeme type '"+nextLexeme.type+"'";throw new lunr.QueryParseError(errorMessage,nextLexeme.start,nextLexeme.end)}else parser.nextClause()}},lunr.QueryParser.parseEditDistance=function(parser){var lexeme=parser.consumeLexeme();if(null!=lexeme){var editDistance=parseInt(lexeme.str,10);if(isNaN(editDistance)){var errorMessage="edit distance must be numeric";throw new lunr.QueryParseError(errorMessage,lexeme.start,lexeme.end)}parser.currentClause.editDistance=editDistance;var nextLexeme=parser.peekLexeme();if(null!=nextLexeme)switch(nextLexeme.type){case lunr.QueryLexer.TERM:return parser.nextClause(),lunr.QueryParser.parseTerm;case lunr.QueryLexer.FIELD:return parser.nextClause(),lunr.QueryParser.parseField;case lunr.QueryLexer.EDIT_DISTANCE:return lunr.QueryParser.parseEditDistance;case lunr.QueryLexer.BOOST:return lunr.QueryParser.parseBoost;case lunr.QueryLexer.PRESENCE:return parser.nextClause(),lunr.QueryParser.parsePresence;default:errorMessage="Unexpected lexeme type '"+nextLexeme.type+"'";throw new lunr.QueryParseError(errorMessage,nextLexeme.start,nextLexeme.end)}else parser.nextClause()}},lunr.QueryParser.parseBoost=function(parser){var lexeme=parser.consumeLexeme();if(null!=lexeme){var boost=parseInt(lexeme.str,10);if(isNaN(boost)){var errorMessage="boost must be numeric";throw new lunr.QueryParseError(errorMessage,lexeme.start,lexeme.end)}parser.currentClause.boost=boost;var nextLexeme=parser.peekLexeme();if(null!=nextLexeme)switch(nextLexeme.type){case lunr.QueryLexer.TERM:return parser.nextClause(),lunr.QueryParser.parseTerm;case lunr.QueryLexer.FIELD:return parser.nextClause(),lunr.QueryParser.parseField;case lunr.QueryLexer.EDIT_DISTANCE:return lunr.QueryParser.parseEditDistance;case lunr.QueryLexer.BOOST:return lunr.QueryParser.parseBoost;case lunr.QueryLexer.PRESENCE:return parser.nextClause(),lunr.QueryParser.parsePresence;default:errorMessage="Unexpected lexeme type '"+nextLexeme.type+"'";throw new lunr.QueryParseError(errorMessage,nextLexeme.start,nextLexeme.end)}else parser.nextClause()}},root=this,factory=function(){return lunr},"function"==typeof define&amp;&amp;define.amd?define("tool_componentlibrary/lunr",factory):"object"==typeof exports?module.exports=factory():root.lunr=factory()}();
define("tool_componentlibrary/mustache",["exports","tool_componentlibrary/selectors","core/ajax","core/config","core/templates","core/log","core/notification"],(function(_exports,_selectors,_ajax,_config,_templates,_log,_notification){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Render mustache template examples within the component library.
   *
   * @module     tool_componentlibrary/mustache
   * @copyright  2021 Bas Brands &lt;bas@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.mustache=void 0,_selectors=_interopRequireDefault(_selectors),_ajax=_interopRequireDefault(_ajax),_config=_interopRequireDefault(_config),_templates=_interopRequireDefault(_templates),_log=_interopRequireDefault(_log),_notification=_interopRequireDefault(_notification);const loadTemplate=container=&gt;{const sourcecontainer=container.querySelector(_selectors.default.mustachesource),contextcontainer=container.querySelector(_selectors.default.mustachecontext),templateName=container.dataset.template;let context=container.querySelector(_selectors.default.mustacherawcontext).textContent;const parts=templateName.split("/"),request={methodname:"core_output_load_template",args:{component:parts.shift(),template:parts.join("/"),themename:_config.default.theme,includecomments:!0}};_ajax.default.call([request])[0].done((source=&gt;{if(sourcecontainer.textContent=source,!context){const example=source.match(/Example context \(json\):([\s\S]+?)(}})/);context=example[1];const precontainer=document.createElement("pre");precontainer.innerHTML=JSON.stringify(JSON.parse(context),null,4),contextcontainer.parentNode.appendChild(precontainer),contextcontainer.classList.add("d-none")}(async(container,templateName,context)=&gt;{try{context=JSON.parse(context)}catch(e){_log.default.debug("Could not parse json example context for template."),_log.default.debug(e)}const{html:html,js:js}=await _templates.default.renderForPromise(templateName,context),rendercontainer=container.querySelector(_selectors.default.mustacherendered);await _templates.default.replaceNodeContents(rendercontainer,html,js)})(container,templateName,context)})).fail(_notification.default.exception)};_exports.mustache=()=&gt;{document.querySelectorAll(_selectors.default.mustachecode).forEach((container=&gt;{loadTemplate(container)}))}}));
/**
 * Potential user selector module.
 *
 * @module     tool_dataprivacy/form-user-selector
 * @copyright  2018 Jun Pataleta
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("tool_dataprivacy/form-user-selector",["jquery","core/ajax","core/templates"],(function($,Ajax,Templates){return{processResults:function(selector,results){var users=[];return $.each(results,(function(index,user){users.push({value:user.id,label:user._label})})),users},transport:function(selector,query,success,failure){Ajax.call([{methodname:"tool_dataprivacy_get_users",args:{query:query}}])[0].then((function(results){var promises=[],i=0;return $.each(results,(function(index,user){promises.push(Templates.render("tool_dataprivacy/form-user-selector-suggestion",user))})),$.when.apply($.when,promises).then((function(){var args=arguments;$.each(results,(function(index,user){user._label=args[i],i++})),success(results)}))})).fail(failure)}}}));
/**
 * Module to add purposes.
 *
 * @module     tool_dataprivacy/add_purpose
 * @copyright  2018 David Monllao
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("tool_dataprivacy/add_purpose",["jquery","core/str","core/ajax","core/notification","core/modal_factory","core/modal_events","core/fragment","core_form/changechecker"],(function($,Str,Ajax,Notification,ModalFactory,ModalEvents,Fragment,FormChangeChecker){var SELECTORS_PURPOSE_LINK='[data-add-element="purpose"]',AddPurpose=function(contextId){this.contextId=contextId;this.strings=Str.get_strings([{key:"addpurpose",component:"tool_dataprivacy"},{key:"save",component:"admin"}]),this.registerEventListeners()};return AddPurpose.prototype.contextId=0,AddPurpose.prototype.strings=0,AddPurpose.prototype.registerEventListeners=function(){var trigger=$(SELECTORS_PURPOSE_LINK);trigger.on("click",function(){return this.strings.then(function(strings){ModalFactory.create({type:ModalFactory.types.SAVE_CANCEL,title:strings[0],body:""},trigger).done(function(modal){this.setupFormModal(modal,strings[1])}.bind(this))}.bind(this)).fail(Notification.exception)}.bind(this))},AddPurpose.prototype.getBody=function(formdata){var params=null;return void 0!==formdata&amp;&amp;(params={jsonformdata:JSON.stringify(formdata)}),Fragment.loadFragment("tool_dataprivacy","addpurpose_form",this.contextId,params)},AddPurpose.prototype.setupFormModal=function(modal,saveText){modal.setLarge(),modal.setSaveButtonText(saveText),modal.getRoot().on(ModalEvents.hidden,this.destroy.bind(this)),modal.setBody(this.getBody()),modal.getRoot().on(ModalEvents.save,this.submitForm.bind(this)),modal.getRoot().on("submit","form",this.submitFormAjax.bind(this)),this.modal=modal,modal.show()},AddPurpose.prototype.submitForm=function(e){e.preventDefault(),this.modal.getRoot().find("form").submit()},AddPurpose.prototype.submitFormAjax=function(e){e.preventDefault();var formData=this.modal.getRoot().find("form").serialize();Ajax.call([{methodname:"tool_dataprivacy_create_purpose_form",args:{jsonformdata:JSON.stringify(formData)},done:function(data){data.validationerrors?this.modal.setBody(this.getBody(formData)):this.close()}.bind(this),fail:Notification.exception}])},AddPurpose.prototype.close=function(){this.destroy(),document.location.reload()},AddPurpose.prototype.destroy=function(){FormChangeChecker.resetAllFormDirtyStates(),this.modal.destroy()},AddPurpose.prototype.removeListeners=function(){$(SELECTORS_PURPOSE_LINK).off("click")},{getInstance:function(contextId){return new AddPurpose(contextId)}}}));
/**
 * AMD module for purposes actions.
 *
 * @module     tool_dataprivacy/purposesactions
 * @copyright  2018 David Monllao
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("tool_dataprivacy/purposesactions",["jquery","core/ajax","core/notification","core/str","core/modal_factory","core/modal_events"],(function($,Ajax,Notification,Str,ModalFactory,ModalEvents){var ACTIONS_DELETE='[data-action="deletepurpose"]',PurposesActions=function(){this.registerEvents()};return PurposesActions.prototype.registerEvents=function(){$(ACTIONS_DELETE).click((function(e){e.preventDefault();var id=$(this).data("id"),stringkeys=[{key:"deletepurpose",component:"tool_dataprivacy"},{key:"deletepurposetext",component:"tool_dataprivacy",param:$(this).data("name")},{key:"delete"}];Str.get_strings(stringkeys).then((function(langStrings){var title=langStrings[0],confirmMessage=langStrings[1],buttonText=langStrings[2];return ModalFactory.create({title:title,body:confirmMessage,type:ModalFactory.types.SAVE_CANCEL}).then((function(modal){return modal.setSaveButtonText(buttonText),modal.getRoot().on(ModalEvents.save,(function(){var request={methodname:"tool_dataprivacy_delete_purpose",args:{id:id}};Ajax.call([request])[0].done((function(data){data.result?$('tr[data-purposeid="'+id+'"]').remove():Notification.addNotification({message:data.warnings[0].message,type:"error"})})).fail(Notification.exception)})),modal.getRoot().on(ModalEvents.hidden,(function(){modal.destroy()})),modal}))})).done((function(modal){modal.show()})).fail(Notification.exception)}))},{init:function(){return new PurposesActions}}}));
/**
 * Request actions.
 *
 * @module     tool_dataprivacy/data_registry
 * @copyright  2018 David Monllao
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("tool_dataprivacy/data_registry",["jquery","core/str","core/ajax","core/notification","core/templates","core/modal_factory","core/modal_events","core/fragment","tool_dataprivacy/add_purpose","tool_dataprivacy/add_category"],(function($,Str,Ajax,Notification,Templates,ModalFactory,ModalEvents,Fragment,AddPurpose,AddCategory){var SELECTORS_TREE_NODES="[data-context-tree-node=1]",SELECTORS_FORM_CONTAINER="#context-form-container",DataRegistry=function(systemContextId,initContextLevel,initContextId){this.systemContextId=systemContextId,this.currentContextLevel=initContextLevel,this.currentContextId=initContextId,this.init()};return DataRegistry.prototype.systemContextId=0,DataRegistry.prototype.currentContextLevel=0,DataRegistry.prototype.currentContextId=0,DataRegistry.prototype.addpurpose=null,DataRegistry.prototype.addcategory=null,DataRegistry.prototype.init=function(){this.addpurpose=AddPurpose.getInstance(this.systemContextId),this.addcategory=AddCategory.getInstance(this.systemContextId);this.strings=Str.get_strings([{key:"changessaved",component:"moodle"},{key:"contextpurposecategorysaved",component:"tool_dataprivacy"},{key:"noblockstoload",component:"tool_dataprivacy"},{key:"noactivitiestoload",component:"tool_dataprivacy"},{key:"nocoursestoload",component:"tool_dataprivacy"}]),this.registerEventListeners(),this.currentContextId?this.loadForm("context_form",[this.currentContextId],this.submitContextFormAjax.bind(this)):this.loadForm("contextlevel_form",[this.currentContextLevel],this.submitContextLevelFormAjax.bind(this))},DataRegistry.prototype.registerEventListeners=function(){$(SELECTORS_TREE_NODES).on("click",function(ev){ev.preventDefault();var trigger=$(ev.currentTarget);$(SELECTORS_TREE_NODES).removeClass("active"),trigger.addClass("active");var contextLevel=trigger.data("contextlevel"),contextId=trigger.data("contextid");if(contextLevel)window.history.pushState({},null,"?contextlevel="+contextLevel),this.addpurpose.removeListeners(),this.addcategory.removeListeners(),this.currentContextLevel=contextLevel,this.loadForm("contextlevel_form",[this.currentContextLevel],this.submitContextLevelFormAjax.bind(this));else if(contextId)window.history.pushState({},null,"?contextid="+contextId),this.addpurpose.removeListeners(),this.addcategory.removeListeners(),this.currentContextId=contextId,this.loadForm("context_form",[this.currentContextId],this.submitContextFormAjax.bind(this));else{var expandContextId=trigger.data("expandcontextid"),expandElement=trigger.data("expandelement"),expanded=trigger.data("expanded");expandElement&amp;&amp;(expanded?this.collapse(trigger):!trigger.data("loaded")&amp;&amp;expandContextId&amp;&amp;expandElement?(trigger.find("&gt; i").removeClass("fa-plus"),trigger.find("&gt; i").addClass("fa-circle-o-notch fa-spin"),this.loadExtra(trigger,expandContextId,expandElement)):this.expand(trigger))}}.bind(this))},DataRegistry.prototype.removeListeners=function(){$(SELECTORS_TREE_NODES).off("click")},DataRegistry.prototype.loadForm=function(fragmentName,fragmentArgs,formSubmitCallback){this.clearForm(),Fragment.loadFragment("tool_dataprivacy",fragmentName,this.systemContextId,fragmentArgs).done(function(html,js){$(SELECTORS_FORM_CONTAINER).html(html),Templates.runTemplateJS(js),this.addpurpose.registerEventListeners(),this.addcategory.registerEventListeners(),$(SELECTORS_FORM_CONTAINER).on("submit","form",formSubmitCallback)}.bind(this)).fail(Notification.exception)},DataRegistry.prototype.clearForm=function(){$(SELECTORS_FORM_CONTAINER).off("submit","form")},DataRegistry.prototype.submitForm=function(e){e.preventDefault(),$(SELECTORS_FORM_CONTAINER).find("form").submit()},DataRegistry.prototype.submitContextLevelFormAjax=function(e){this.submitFormAjax(e,"tool_dataprivacy_set_contextlevel_form")},DataRegistry.prototype.submitContextFormAjax=function(e){this.submitFormAjax(e,"tool_dataprivacy_set_context_form")},DataRegistry.prototype.submitFormAjax=function(e,saveMethodName){e.preventDefault();var formData=$(SELECTORS_FORM_CONTAINER).find("form").serialize();return this.strings.then((function(strings){Ajax.call([{methodname:saveMethodName,args:{jsonformdata:JSON.stringify(formData)},done:function(){Notification.alert(strings[0],strings[1])},fail:Notification.exception}])})).catch(Notification.exception)},DataRegistry.prototype.loadExtra=function(parentNode,expandContextId,expandElement){Ajax.call([{methodname:"tool_dataprivacy_tree_extra_branches",args:{contextid:expandContextId,element:expandElement},done:function(data){0!=data.branches.length?Templates.render("tool_dataprivacy/context_tree_branches",data).then(function(html){parentNode.after(html),this.removeListeners(),this.registerEventListeners(),this.expand(parentNode),parentNode.data("loaded",1)}.bind(this)).fail(Notification.exception):this.noElements(parentNode,expandElement)}.bind(this),fail:Notification.exception}])},DataRegistry.prototype.noElements=function(node,expandElement){node.data("expandcontextid",""),node.data("expandelement",""),this.strings.then((function(strings){var key=2;"module"==expandElement?key=3:"course"==expandElement&amp;&amp;(key=4),node.text(strings[key])})).fail(Notification.exception)},DataRegistry.prototype.collapse=function(node){node.data("expanded",0),node.siblings("nav").addClass("hidden"),node.find("&gt; i").removeClass("fa-minus"),node.find("&gt; i").addClass("fa-plus")},DataRegistry.prototype.expand=function(node){node.data("expanded",1),node.siblings("nav").removeClass("hidden"),node.find("&gt; i").removeClass("fa-plus"),node.find("&gt; i").removeClass("fa-circle-o-notch fa-spin"),node.find("&gt; i").addClass("fa-minus")},{init:function(systemContextId,initContextLevel,initContextId){return new DataRegistry(systemContextId,initContextLevel,initContextId)}}}));
/**
 * Request actions.
 *
 * @module     tool_dataprivacy/data_deletion
 * @copyright  2018 Jun Pataleta
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("tool_dataprivacy/data_deletion",["jquery","core/ajax","core/notification","core/str","core/modal_factory","core/modal_events"],(function($,Ajax,Notification,Str,ModalFactory,ModalEvents){var ACTIONS_MARK_FOR_DELETION='[data-action="markfordeletion"]',ACTIONS_SELECT_ALL='[data-action="selectall"]',SELECTORS_SELECTCONTEXT=".selectcontext",DataDeletionActions=function(){this.registerEvents()};return DataDeletionActions.prototype.registerEvents=function(){$(ACTIONS_MARK_FOR_DELETION).click((function(e){e.preventDefault();var ids,keys,wsfunction,modalTitle,selectedIds=[];$(SELECTORS_SELECTCONTEXT).each((function(){var checkbox=$(this);checkbox.is(":checked")&amp;&amp;selectedIds.push(checkbox.val())})),ids=selectedIds,keys=[{key:"confirm",component:"moodle"},{key:"confirmcontextdeletion",component:"tool_dataprivacy"}],wsfunction="tool_dataprivacy_confirm_contexts_for_deletion",modalTitle="",Str.get_strings(keys).then((function(langStrings){modalTitle=langStrings[0];var confirmMessage=langStrings[1];return ModalFactory.create({title:modalTitle,body:confirmMessage,type:ModalFactory.types.SAVE_CANCEL})})).then((function(modal){return modal.setSaveButtonText(modalTitle),modal.getRoot().on(ModalEvents.save,(function(){var request={methodname:wsfunction,args:{ids:ids}};Ajax.call([request])[0].done((function(data){data.result?window.location.reload():Notification.addNotification({message:data.warnings[0].message,type:"error"})})).fail(Notification.exception)})),modal.getRoot().on(ModalEvents.hidden,(function(){modal.destroy()})),modal})).done((function(modal){modal.show()})).fail(Notification.exception)})),$(ACTIONS_SELECT_ALL).change((function(e){e.preventDefault(),$(this).is(":checked")?$(SELECTORS_SELECTCONTEXT).attr("checked","checked"):$(SELECTORS_SELECTCONTEXT).removeAttr("checked")}))},DataDeletionActions}));
define("tool_dataprivacy/myrequestactions",["exports","core/ajax","core/notification","core/pending","core/str"],(function(_exports,_ajax,_notification,_pending,_str){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * AMD module to enable users to manage their own data requests.
   *
   * @module     tool_dataprivacy/myrequestactions
   * @copyright  2018 Jun Pataleta
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_ajax=_interopRequireDefault(_ajax),_notification=_interopRequireDefault(_notification),_pending=_interopRequireDefault(_pending);const SELECTORS_CANCEL_REQUEST='[data-action="cancel"][data-requestid]';_exports.init=()=&gt;{document.addEventListener("click",(event=&gt;{const triggerElement=event.target.closest(SELECTORS_CANCEL_REQUEST);if(null===triggerElement)return;event.preventDefault();(0,_str.get_strings)([{key:"cancelrequest",component:"tool_dataprivacy"},{key:"cancelrequestconfirmation",component:"tool_dataprivacy"}]).then((_ref=&gt;{let[cancelRequest,cancelConfirm]=_ref;return _notification.default.confirm(cancelRequest,cancelConfirm,cancelRequest,null,(()=&gt;{const pendingPromise=new _pending.default("tool/dataprivacy:cancelRequest"),request={methodname:"tool_dataprivacy_cancel_data_request",args:{requestid:triggerElement.dataset.requestid}};_ajax.default.call([request])[0].then((response=&gt;(response.result?window.location.reload():_notification.default.addNotification({type:"error",message:response.warnings[0].message}),pendingPromise.resolve()))).catch(_notification.default.exception)}))})).catch()}))}}));
/**
 * Module to add categories.
 *
 * @module     tool_dataprivacy/add_category
 * @copyright  2018 David Monllao
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("tool_dataprivacy/add_category",["jquery","core/str","core/ajax","core/notification","core/modal_factory","core/modal_events","core/fragment","core_form/changechecker"],(function($,Str,Ajax,Notification,ModalFactory,ModalEvents,Fragment,FormChangeChecker){var SELECTORS_CATEGORY_LINK='[data-add-element="category"]',AddCategory=function(contextId){this.contextId=contextId;this.strings=Str.get_strings([{key:"addcategory",component:"tool_dataprivacy"},{key:"save",component:"admin"}]),this.registerEventListeners()};return AddCategory.prototype.contextId=0,AddCategory.prototype.strings=0,AddCategory.prototype.registerEventListeners=function(){var trigger=$(SELECTORS_CATEGORY_LINK);trigger.on("click",function(){return this.strings.then(function(strings){ModalFactory.create({type:ModalFactory.types.SAVE_CANCEL,title:strings[0],body:""},trigger).done(function(modal){this.setupFormModal(modal,strings[1])}.bind(this))}.bind(this)).fail(Notification.exception)}.bind(this))},AddCategory.prototype.getBody=function(formdata){var params=null;return void 0!==formdata&amp;&amp;(params={jsonformdata:JSON.stringify(formdata)}),Fragment.loadFragment("tool_dataprivacy","addcategory_form",this.contextId,params)},AddCategory.prototype.setupFormModal=function(modal,saveText){modal.setLarge(),modal.setSaveButtonText(saveText),modal.getRoot().on(ModalEvents.hidden,this.destroy.bind(this)),modal.setBody(this.getBody()),modal.getRoot().on(ModalEvents.save,this.submitForm.bind(this)),modal.getRoot().on("submit","form",this.submitFormAjax.bind(this)),this.modal=modal,modal.show()},AddCategory.prototype.submitForm=function(e){e.preventDefault(),this.modal.getRoot().find("form").submit()},AddCategory.prototype.submitFormAjax=function(e){e.preventDefault();var formData=this.modal.getRoot().find("form").serialize();Ajax.call([{methodname:"tool_dataprivacy_create_category_form",args:{jsonformdata:JSON.stringify(formData)},done:function(data){data.validationerrors?this.modal.setBody(this.getBody(formData)):this.close()}.bind(this),fail:Notification.exception}])},AddCategory.prototype.close=function(){this.destroy(),document.location.reload()},AddCategory.prototype.destroy=function(){FormChangeChecker.resetAllFormDirtyStates(),this.modal.destroy()},AddCategory.prototype.removeListeners=function(){$(SELECTORS_CATEGORY_LINK).off("click")},{getInstance:function(contextId){return new AddCategory(contextId)}}}));
/**
 * Request actions.
 *
 * @module     tool_dataprivacy/data_request_modal
 * @copyright  2018 Jun Pataleta
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("tool_dataprivacy/data_request_modal",["jquery","core/notification","core/custom_interaction_events","core/modal","core/modal_registry","tool_dataprivacy/events"],(function($,Notification,CustomEvents,Modal,ModalRegistry,DataPrivacyEvents){var registered=!1,SELECTORS_APPROVE_BUTTON='[data-action="approve"]',SELECTORS_DENY_BUTTON='[data-action="deny"]',SELECTORS_COMPLETE_BUTTON='[data-action="complete"]',ModalDataRequest=function(root){Modal.call(this,root)};return ModalDataRequest.TYPE="tool_dataprivacy-data_request",(ModalDataRequest.prototype=Object.create(Modal.prototype)).constructor=ModalDataRequest,ModalDataRequest.prototype.registerEventListeners=function(){Modal.prototype.registerEventListeners.call(this),this.getModal().on(CustomEvents.events.activate,SELECTORS_APPROVE_BUTTON,function(e,data){var approveEvent=$.Event(DataPrivacyEvents.approve);this.getRoot().trigger(approveEvent,this),approveEvent.isDefaultPrevented()||(this.hide(),data.originalEvent.preventDefault())}.bind(this)),this.getModal().on(CustomEvents.events.activate,SELECTORS_DENY_BUTTON,function(e,data){var denyEvent=$.Event(DataPrivacyEvents.deny);this.getRoot().trigger(denyEvent,this),denyEvent.isDefaultPrevented()||(this.hide(),data.originalEvent.preventDefault())}.bind(this)),this.getModal().on(CustomEvents.events.activate,SELECTORS_COMPLETE_BUTTON,function(e,data){var completeEvent=$.Event(DataPrivacyEvents.complete);this.getRoot().trigger(completeEvent,this),completeEvent.isDefaultPrevented()||(this.hide(),data.originalEvent.preventDefault())}.bind(this))},registered||(ModalRegistry.register(ModalDataRequest.TYPE,ModalDataRequest,"tool_dataprivacy/data_request_modal"),registered=!0),ModalDataRequest}));
/**
 * Contain the events the data privacy tool can fire.
 *
 * @module     tool_dataprivacy/events
 * @copyright  2018 Jun Pataleta
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("tool_dataprivacy/events",[],(function(){return{approve:"tool_dataprivacy-data_request:approve",bulkApprove:"tool_dataprivacy-data_request:bulk_approve",deny:"tool_dataprivacy-data_request:deny",bulkDeny:"tool_dataprivacy-data_request:bulk_deny",complete:"tool_dataprivacy-data_request:complete"}}));
/**
 * Request actions.
 *
 * @module     tool_dataprivacy/requestactions
 * @copyright  2018 Jun Pataleta
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("tool_dataprivacy/requestactions",["jquery","core/ajax","core/notification","core/str","core/modal_factory","core/modal_events","core/templates","tool_dataprivacy/data_request_modal","tool_dataprivacy/events"],(function($,Ajax,Notification,Str,ModalFactory,ModalEvents,Templates,ModalDataRequest,DataPrivacyEvents){var ACTIONS_APPROVE_REQUEST='[data-action="approve"]',ACTIONS_DENY_REQUEST='[data-action="deny"]',ACTIONS_VIEW_REQUEST='[data-action="view"]',ACTIONS_MARK_COMPLETE='[data-action="complete"]',ACTIONS_CONFIRM_BULK_ACTION='[id="confirm-bulk-action"]',ACTIONS_SELECT_ALL='[data-action="selectall"]',BULK_ACTIONS_APPROVE=1,BULK_ACTIONS_DENY=2,SELECTORS_SELECT_REQUEST=".selectrequests",RequestActions=function(){this.registerEvents()};function approveEventWsData(requestId){return{wsfunction:"tool_dataprivacy_approve_data_request",wsparams:{requestid:requestId}}}function denyEventWsData(requestId){return{wsfunction:"tool_dataprivacy_deny_data_request",wsparams:{requestid:requestId}}}function showConfirmation(action,wsdata){var keys=[];switch(action){case DataPrivacyEvents.approve:keys=[{key:"approverequest",component:"tool_dataprivacy"},{key:"confirmapproval",component:"tool_dataprivacy"}];break;case DataPrivacyEvents.bulkApprove:keys=[{key:"bulkapproverequests",component:"tool_dataprivacy"},{key:"confirmbulkapproval",component:"tool_dataprivacy"}];break;case DataPrivacyEvents.deny:keys=[{key:"denyrequest",component:"tool_dataprivacy"},{key:"confirmdenial",component:"tool_dataprivacy"}];break;case DataPrivacyEvents.bulkDeny:keys=[{key:"bulkdenyrequests",component:"tool_dataprivacy"},{key:"confirmbulkdenial",component:"tool_dataprivacy"}];break;case DataPrivacyEvents.complete:keys=[{key:"markcomplete",component:"tool_dataprivacy"},{key:"confirmcompletion",component:"tool_dataprivacy"}]}var modalTitle="";Str.get_strings(keys).then((function(langStrings){modalTitle=langStrings[0];var confirmMessage=langStrings[1];return ModalFactory.create({title:modalTitle,body:confirmMessage,type:ModalFactory.types.SAVE_CANCEL})})).then((function(modal){modal.setSaveButtonText(modalTitle),modal.getRoot().on(ModalEvents.save,(function(){handleSave(wsdata.wsfunction,wsdata.wsparams)})),modal.getRoot().on(ModalEvents.hidden,(function(){modal.destroy()})),modal.show()})).catch(Notification.exception)}function handleSave(wsfunction,params){var request={methodname:wsfunction,args:params};Ajax.call([request])[0].done((function(data){data.result?window.location.reload():Notification.addNotification({message:data.warnings[0].message,type:"error"})})).fail(Notification.exception)}return RequestActions.prototype.registerEvents=function(){$(ACTIONS_VIEW_REQUEST).click((function(e){e.preventDefault();var requestId=$(this).data("requestid"),request={methodname:"tool_dataprivacy_get_data_request",args:{requestid:requestId}},promises=Ajax.call([request]);$.when(promises[0]).then((function(data){return data.result?data.result:(Notification.addNotification({message:data.warnings[0].message,type:"error"}),!1)})).then((function(data){var body=Templates.render("tool_dataprivacy/request_details",data),templateContext={approvedeny:data.approvedeny,canmarkcomplete:data.canmarkcomplete};return ModalFactory.create({title:data.typename,body:body,type:ModalDataRequest.TYPE,large:!0,templateContext:templateContext})})).then((function(modal){modal.getRoot().on(DataPrivacyEvents.approve,(function(){showConfirmation(DataPrivacyEvents.approve,approveEventWsData(requestId))})),modal.getRoot().on(DataPrivacyEvents.deny,(function(){showConfirmation(DataPrivacyEvents.deny,denyEventWsData(requestId))})),modal.getRoot().on(DataPrivacyEvents.complete,(function(){handleSave("tool_dataprivacy_mark_complete",{requestid:requestId})})),modal.getRoot().on(ModalEvents.hidden,(function(){modal.destroy()})),modal.show()})).catch(Notification.exception)})),$(ACTIONS_APPROVE_REQUEST).click((function(e){e.preventDefault();var requestId=$(this).data("requestid");showConfirmation(DataPrivacyEvents.approve,approveEventWsData(requestId))})),$(ACTIONS_DENY_REQUEST).click((function(e){e.preventDefault();var requestId=$(this).data("requestid");showConfirmation(DataPrivacyEvents.deny,denyEventWsData(requestId))})),$(ACTIONS_MARK_COMPLETE).click((function(e){e.preventDefault();var requestId=$(this).data("requestid");showConfirmation(DataPrivacyEvents.complete,function(requestId){return{wsfunction:"tool_dataprivacy_mark_complete",wsparams:{requestid:requestId}}}(requestId))})),$(ACTIONS_CONFIRM_BULK_ACTION).click((function(){var requestIds=[],actionEvent="",wsdata={},bulkActionKeys=[{key:"selectbulkaction",component:"tool_dataprivacy"},{key:"selectdatarequests",component:"tool_dataprivacy"},{key:"ok"}],bulkaction=parseInt($("#bulk-action").val());if(bulkaction==BULK_ACTIONS_APPROVE||bulkaction==BULK_ACTIONS_DENY)if($(".selectrequests:checked").each((function(){requestIds.push($(this).val())})),requestIds.length&lt;1)Str.get_strings(bulkActionKeys).done((function(langStrings){Notification.alert("",langStrings[1],langStrings[2])})).fail(Notification.exception);else{switch(bulkaction){case BULK_ACTIONS_APPROVE:actionEvent=DataPrivacyEvents.bulkApprove,wsdata=function(requestIds){return{wsfunction:"tool_dataprivacy_bulk_approve_data_requests",wsparams:{requestids:requestIds}}}(requestIds);break;case BULK_ACTIONS_DENY:actionEvent=DataPrivacyEvents.bulkDeny,wsdata=function(requestIds){return{wsfunction:"tool_dataprivacy_bulk_deny_data_requests",wsparams:{requestids:requestIds}}}(requestIds)}showConfirmation(actionEvent,wsdata)}else Str.get_strings(bulkActionKeys).done((function(langStrings){Notification.alert("",langStrings[0],langStrings[2])})).fail(Notification.exception)})),$(ACTIONS_SELECT_ALL).change((function(e){e.preventDefault();var selectAll=$(this).is(":checked");$(SELECTORS_SELECT_REQUEST).prop("checked",selectAll)}))},RequestActions}));
/**
 * AMD module for categories actions.
 *
 * @module     tool_dataprivacy/categoriesactions
 * @copyright  2018 David Monllao
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("tool_dataprivacy/categoriesactions",["jquery","core/ajax","core/notification","core/str","core/modal_factory","core/modal_events"],(function($,Ajax,Notification,Str,ModalFactory,ModalEvents){var ACTIONS_DELETE='[data-action="deletecategory"]',CategoriesActions=function(){this.registerEvents()};return CategoriesActions.prototype.registerEvents=function(){$(ACTIONS_DELETE).click((function(e){e.preventDefault();var id=$(this).data("id"),stringkeys=[{key:"deletecategory",component:"tool_dataprivacy"},{key:"deletecategorytext",component:"tool_dataprivacy",param:$(this).data("name")},{key:"delete"}];Str.get_strings(stringkeys).then((function(langStrings){var title=langStrings[0],confirmMessage=langStrings[1],buttonText=langStrings[2];return ModalFactory.create({title:title,body:confirmMessage,type:ModalFactory.types.SAVE_CANCEL}).then((function(modal){return modal.setSaveButtonText(buttonText),modal.getRoot().on(ModalEvents.save,(function(){var request={methodname:"tool_dataprivacy_delete_category",args:{id:id}};Ajax.call([request])[0].done((function(data){data.result?$('tr[data-categoryid="'+id+'"]').remove():Notification.addNotification({message:data.warnings[0].message,type:"error"})})).fail(Notification.exception)})),modal.getRoot().on(ModalEvents.hidden,(function(){modal.destroy()})),modal}))})).done((function(modal){modal.show()})).fail(Notification.exception)}))},{init:function(){return new CategoriesActions}}}));
/**
 * Module to update the displayed retention period.
 *
 * @module     tool_dataprivacy/effective_retention_period
 * @copyright  2018 David Monllao
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("tool_dataprivacy/effective_retention_period",["jquery"],(function($){var SELECTORS_PURPOSE_SELECT="#id_purposeid",SELECTORS_RETENTION_FIELD="#fitem_id_retention_current [data-fieldtype=static]",EffectiveRetentionPeriod=function(purposeRetentionPeriods){this.purposeRetentionPeriods=purposeRetentionPeriods,this.registerEventListeners()};return EffectiveRetentionPeriod.prototype.purposeRetentionPeriods=[],EffectiveRetentionPeriod.prototype.registerEventListeners=function(){$(SELECTORS_PURPOSE_SELECT).on("change",function(ev){var selected=$(ev.currentTarget).val(),selectedPurpose=this.purposeRetentionPeriods[selected];$(SELECTORS_RETENTION_FIELD).text(selectedPurpose)}.bind(this))},{init:function(purposeRetentionPeriods){return $(SELECTORS_PURPOSE_SELECT).off("change"),new EffectiveRetentionPeriod(purposeRetentionPeriods)}}}));
/**
 * Potential user selector module.
 *
 * @module     tool_dataprivacy/expand_contract
 * @copyright  2018 Adrian Greeve
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("tool_dataprivacy/expand_contract",["jquery","core/url","core/str","core/notification"],(function($,url,str,Notification){var expandedImage=$('&lt;img alt="" src="'+url.imageUrl("t/expanded")+'"/&gt;'),collapsedImage=$('&lt;img alt="" src="'+url.imageUrl("t/collapsed")+'"/&gt;'),CLASSES_EXPAND="fa-caret-right",CLASSES_COLLAPSE="fa-caret-down";return{expandCollapse:function(targetnode,thisnode){targetnode.hasClass("hide")?(targetnode.removeClass("hide"),targetnode.addClass("visible"),targetnode.attr("aria-expanded",!0),thisnode.find(":header i.fa").removeClass(CLASSES_EXPAND),thisnode.find(":header i.fa").addClass(CLASSES_COLLAPSE),thisnode.find(":header img.icon").attr("src",expandedImage.attr("src"))):(targetnode.removeClass("visible"),targetnode.addClass("hide"),targetnode.attr("aria-expanded",!1),thisnode.find(":header i.fa").removeClass(CLASSES_COLLAPSE),thisnode.find(":header i.fa").addClass(CLASSES_EXPAND),thisnode.find(":header img.icon").attr("src",collapsedImage.attr("src")))},expandCollapseAll:function(nextstate){var currentstate="visible"==nextstate?"hide":"visible",ariaexpandedstate="visible"==nextstate,iconclassnow="visible"==nextstate?CLASSES_EXPAND:CLASSES_COLLAPSE,iconclassnext="visible"==nextstate?CLASSES_COLLAPSE:CLASSES_EXPAND,imagenow="visible"==nextstate?expandedImage.attr("src"):collapsedImage.attr("src");$("."+currentstate).each((function(){$(this).removeClass(currentstate),$(this).addClass(nextstate),$(this).attr("aria-expanded",ariaexpandedstate)})),$(".tool_dataprivacy-expand-all").data("visibilityState",currentstate),str.get_string(currentstate,"tool_dataprivacy").then((function(langString){$(".tool_dataprivacy-expand-all").html(langString)})).catch(Notification.exception),$(":header i.fa").each((function(){$(this).removeClass(iconclassnow),$(this).addClass(iconclassnext)})),$(":header img.icon").each((function(){$(this).attr("src",imagenow)}))}}}));
/**
 * JS module for the data requests filter.
 *
 * @module     tool_dataprivacy/request_filter
 * @copyright  2018 Jun Pataleta
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("tool_dataprivacy/request_filter",["jquery","core/form-autocomplete","core/str","core/notification"],(function($,Autocomplete,Str,Notification){var SELECTORS_REQUEST_FILTERS="#request-filters";return{init:function(){!function(){Str.get_strings([{key:"filter",component:"moodle"},{key:"nofiltersapplied",component:"moodle"}]).then((function(langstrings){var placeholder=langstrings[0],noSelectionString=langstrings[1];return Autocomplete.enhance(SELECTORS_REQUEST_FILTERS,!1,"",placeholder,!1,!0,noSelectionString,!0)})).fail(Notification.exception);var last=$(SELECTORS_REQUEST_FILTERS).val();$(SELECTORS_REQUEST_FILTERS).on("change",(function(){var current=$(this).val();last.join(",")!==current.join(",")&amp;&amp;(0===current.length&amp;&amp;$("#filters-cleared").val(1),$(this.form).submit())}))}()}}}));
/**
 * AMD module for data registry defaults actions.
 *
 * @module     tool_dataprivacy/defaultsactions
 * @copyright  2018 Jun Pataleta
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("tool_dataprivacy/defaultsactions",["jquery","core/ajax","core/notification","core/str","core/modal_factory","core/modal_events","core/templates"],(function($,Ajax,Notification,Str,ModalFactory,ModalEvents,Templates){var ACTIONS_EDIT_LEVEL_DEFAULTS='[data-action="edit-level-defaults"]',ACTIONS_NEW_ACTIVITY_DEFAULTS='[data-action="new-activity-defaults"]',ACTIONS_EDIT_ACTIVITY_DEFAULTS='[data-action="edit-activity-defaults"]',ACTIONS_DELETE_ACTIVITY_DEFAULTS='[data-action="delete-activity-defaults"]',DefaultsActions=function(){this.registerEvents()};function showDefaultsFormModal(title,contextLevel,category,purpose,activity,categoryOptions,purposeOptions,activityOptions){null!==category&amp;&amp;categoryOptions.forEach((function(currentValue){currentValue.id===category&amp;&amp;(currentValue.selected=!0)})),null!==purpose&amp;&amp;purposeOptions.forEach((function(currentValue){currentValue.id===purpose&amp;&amp;(currentValue.selected=!0)}));var templateContext={contextlevel:contextLevel,categoryoptions:categoryOptions,purposeoptions:purposeOptions};null!==activityOptions&amp;&amp;activityOptions.length&amp;&amp;(null===activity?templateContext.newactivitydefaults=!0:activityOptions.forEach((function(currentValue){activity===currentValue.name&amp;&amp;(currentValue.selected=!0)})),templateContext.modemodule=!0,templateContext.activityoptions=activityOptions),ModalFactory.create({title:title,body:Templates.render("tool_dataprivacy/category_purpose_form",templateContext),type:ModalFactory.types.SAVE_CANCEL,large:!0}).then((function(modal){return modal.getRoot().on(ModalEvents.save,(function(){var activity=$("#activity"),activityVal=void 0!==activity?activity.val():null,override=$("#override"),overrideVal=void 0!==override&amp;&amp;override.is(":checked");setContextDefaults($("#contextlevel").val(),$("#category").val(),$("#purpose").val(),activityVal,overrideVal)})),modal.getRoot().on(ModalEvents.hidden,(function(){modal.destroy()})),modal.show(),modal})).catch(Notification.exception)}function setContextDefaults(contextLevel,category,purpose,activity,override){var request={methodname:"tool_dataprivacy_set_context_defaults",args:{contextlevel:contextLevel,category:category,purpose:purpose,override:override,activity:activity}};Ajax.call([request])[0].done((function(data){data.result&amp;&amp;window.location.reload()}))}return DefaultsActions.prototype.registerEvents=function(){$(ACTIONS_EDIT_LEVEL_DEFAULTS).click((function(e){e.preventDefault();var button=$(this),contextLevel=button.data("contextlevel"),category=button.data("category"),purpose=button.data("purpose"),promises=Ajax.call([{methodname:"tool_dataprivacy_get_category_options",args:{}},{methodname:"tool_dataprivacy_get_purpose_options",args:{}}]),titlePromise=Str.get_string("editdefaults","tool_dataprivacy",$("#defaults-header").text());$.when(promises[0],promises[1],titlePromise).then((function(categoryResponse,purposeResponse,title){var categories=categoryResponse.options,purposes=purposeResponse.options;return showDefaultsFormModal(title,contextLevel,category,purpose,null,categories,purposes,null),!0})).catch(Notification.exception)})),$(ACTIONS_NEW_ACTIVITY_DEFAULTS).click((function(e){e.preventDefault();var contextLevel=$(this).data("contextlevel"),promises=Ajax.call([{methodname:"tool_dataprivacy_get_category_options",args:{}},{methodname:"tool_dataprivacy_get_purpose_options",args:{}},{methodname:"tool_dataprivacy_get_activity_options",args:{nodefaults:!0}}]),titlePromise=Str.get_string("addnewdefaults","tool_dataprivacy");$.when(promises[0],promises[1],promises[2],titlePromise).then((function(categoryResponse,purposeResponse,activityResponse,title){var categories=categoryResponse.options,purposes=purposeResponse.options,activities=activityResponse.options;return showDefaultsFormModal(title,contextLevel,null,null,null,categories,purposes,activities),!0})).catch(Notification.exception)})),$(ACTIONS_EDIT_ACTIVITY_DEFAULTS).click((function(e){e.preventDefault();var button=$(this),contextLevel=button.data("contextlevel"),category=button.data("category"),purpose=button.data("purpose"),activity=button.data("activityname"),promises=Ajax.call([{methodname:"tool_dataprivacy_get_category_options",args:{}},{methodname:"tool_dataprivacy_get_purpose_options",args:{}},{methodname:"tool_dataprivacy_get_activity_options",args:{}}]),titlePromise=Str.get_string("editmoduledefaults","tool_dataprivacy");$.when(promises[0],promises[1],promises[2],titlePromise).then((function(categoryResponse,purposeResponse,activityResponse,title){var categories=categoryResponse.options,purposes=purposeResponse.options,activities=activityResponse.options;return showDefaultsFormModal(title,contextLevel,category,purpose,activity,categories,purposes,activities),!0})).catch(Notification.exception)})),$(ACTIONS_DELETE_ACTIVITY_DEFAULTS).click((function(e){e.preventDefault();var button=$(this),contextLevel=button.data("contextlevel"),activity=button.data("activityname"),activityDisplayName=button.data("activitydisplayname");ModalFactory.create({title:Str.get_string("deletedefaults","tool_dataprivacy",activityDisplayName),body:Templates.render("tool_dataprivacy/delete_activity_defaults",{activityname:activityDisplayName}),type:ModalFactory.types.SAVE_CANCEL,large:!0}).then((function(modal){return modal.setSaveButtonText(Str.get_string("delete")),modal.getRoot().on(ModalEvents.save,(function(){setContextDefaults(contextLevel,-1,-1,activity,!1)})),modal.getRoot().on(ModalEvents.hidden,(function(){modal.destroy()})),modal.show(),!0})).catch(Notification.exception)}))},{init:function(){return new DefaultsActions}}}));
define("tool_dataprivacy/contactdpo",["exports","core_form/modalform","core/notification","core/str","core/toast"],(function(_exports,_modalform,_notification,_str,_toast){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Javascript module for contacting the site DPO
   *
   * @module      tool_dataprivacy/contactdpo
   * @copyright   2021 Paul Holden &lt;paulh@moodle.com&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_modalform=_interopRequireDefault(_modalform),_notification=_interopRequireDefault(_notification);const SELECTORS_CONTACT_DPO='[data-action="contactdpo"]';_exports.init=()=&gt;{const triggerElement=document.querySelector(SELECTORS_CONTACT_DPO);triggerElement.addEventListener("click",(event=&gt;{event.preventDefault();const modalForm=new _modalform.default({modalConfig:{title:(0,_str.get_string)("contactdataprotectionofficer","tool_dataprivacy")},formClass:"tool_dataprivacy\\form\\contactdpo",saveButtonText:(0,_str.get_string)("send","tool_dataprivacy"),returnFocus:triggerElement});modalForm.addEventListener(modalForm.events.FORM_SUBMITTED,(event=&gt;{if(event.detail.result)(0,_str.get_string)("requestsubmitted","tool_dataprivacy").then(_toast.add).catch();else{const warningMessages=event.detail.warnings.map((warning=&gt;warning.message));_notification.default.addNotification({type:"error",message:warningMessages.join("&lt;br&gt;")})}})),modalForm.show()}))}}));
define("tool_langimport/search",["exports","core/pending","core/utils"],(function(_exports,_pending,_utils){var obj;
/**
   * Add search filtering of available language packs
   *
   * @module      tool_langimport/search
   * @copyright   2021 Paul Holden &lt;paulh@moodle.com&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_pending=(obj=_pending)&amp;&amp;obj.__esModule?obj:{default:obj};const SELECTORS_AVAILABLE_LANG_SELECT="select",SELECTORS_AVAILABLE_LANG_SEARCH='[data-action="search"]';_exports.init=form=&gt;{const availableLangsElement=form.querySelector(SELECTORS_AVAILABLE_LANG_SELECT),availableLanguages={};availableLangsElement.querySelectorAll("option").forEach((option=&gt;{availableLanguages[option.value]=option.text})),availableLangsElement.dataset.availableLanguages=JSON.stringify(availableLanguages);const availableLangsSearch=form.querySelector(SELECTORS_AVAILABLE_LANG_SEARCH);availableLangsSearch.addEventListener("keydown",(event=&gt;{"Enter"===event.key&amp;&amp;event.preventDefault()}));const availableLangsSearchDebounce=(0,_utils.debounce)((event=&gt;{const pendingPromise=new _pending.default("tool_langimport/search:filter");availableLangsElement.querySelectorAll("option").forEach((option=&gt;{option.remove()}));const searchTerm=event.target.value.toLowerCase(),availableLanguages=JSON.parse(availableLangsElement.dataset.availableLanguages),filteredLanguages=Object.keys(availableLanguages).reduce(((matches,langcode)=&gt;(availableLanguages[langcode].toLowerCase().includes(searchTerm)&amp;&amp;(matches[langcode]=availableLanguages[langcode]),matches)),[]);Object.entries(filteredLanguages).forEach((_ref=&gt;{let[langcode,langname]=_ref;const option=document.createElement("option");option.value=langcode,option.innerText=langname,availableLangsElement.append(option)})),pendingPromise.resolve()}),250);availableLangsSearch.addEventListener("keyup",(event=&gt;{const pendingPromise=new _pending.default("tool_langimport/search:keyup");availableLangsSearchDebounce(event),setTimeout((()=&gt;{pendingPromise.resolve()}),250)}))}}));
/**
 * Modal for confirming deletion of a custom license.
 *
 * @module     tool_licensemanager/delete_license
 * @copyright  2019 Tom Dickman &lt;tomdickman@catalyst-au.net&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("tool_licensemanager/delete_license",["jquery","core/modal_factory","core/modal_events","core/url","core/str"],(function($,ModalFactory,ModalEvents,Url,String){var trigger=$(".delete-license");ModalFactory.create({type:ModalFactory.types.SAVE_CANCEL,title:String.get_string("deletelicense","tool_licensemanager"),body:String.get_string("deletelicenseconfirmmessage","tool_licensemanager"),preShowCallback:function(triggerElement,modal){let params={action:"delete",license:(triggerElement=$(triggerElement)).data("license")};modal.deleteURL=Url.relativeUrl("/admin/tool/licensemanager/index.php",params,!0)},large:!0},trigger).done((function(modal){modal.getRoot().on(ModalEvents.save,(function(e){e.preventDefault(),window.location.href=modal.deleteURL}))}))}));
/**
 * Competency rule points module.
 *
 * @module     tool_lp/competency_rule_all
 * @copyright  2015 Frédéric Massart - FMCorz.net
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("tool_lp/competency_rule_points",["jquery","core/str","core/templates","tool_lp/competency_rule"],(function($,Str,Templates,RuleBase){var Rule=function(){RuleBase.apply(this,arguments)};return(Rule.prototype=Object.create(RuleBase.prototype))._container=null,Rule.prototype._templateLoaded=!1,Rule.prototype.getConfig=function(){return JSON.stringify({base:{points:this._getRequiredPoints()},competencies:this._getCompetenciesConfig()})},Rule.prototype._getCompetenciesConfig=function(){var competencies=[];return this._container.find("[data-competency]").each((function(){var node=$(this),id=node.data("competency"),points=parseInt(node.find('[name="points"]').val(),10),required=node.find('[name="required"]').prop("checked");competencies.push({id:id,points:points,required:required?1:0})})),competencies},Rule.prototype._getRequiredPoints=function(){return parseInt(this._container.find('[name="requiredpoints"]').val()||1,10)},Rule.prototype.getType=function(){return"core_competency\\competency_rule_points"},Rule.prototype.injectTemplate=function(container){var context,self=this,children=this._tree.getChildren(this._competency.id),config={base:{points:2},competencies:[]};if(this._templateLoaded=!1,self._competency.ruletype==self.getType())try{config=JSON.parse(self._competency.ruleconfig)}catch(e){}return context={requiredpoints:config&amp;&amp;config.base?config.base.points:2,competency:self._competency,children:[]},$.each(children,(function(index,child){var competency={id:child.id,shortname:child.shortname,required:!1,points:0};config&amp;&amp;$.each(config.competencies,(function(index,comp){comp.id==competency.id&amp;&amp;(competency.required=!!comp.required,competency.points=comp.points)})),context.children.push(competency)})),Templates.render("tool_lp/competency_rule_points",context).then((function(html){self._container=container,container.html(html),container.find("input").change((function(){self._triggerChange()})),self._templateLoaded=!0,self._triggerChange()}))},Rule.prototype.isValid=function(){if(!this._templateLoaded)return!1;var required=this._getRequiredPoints(),max=0,valid=!0;return $.each(this._getCompetenciesConfig(),(function(index,competency){competency.points&lt;0&amp;&amp;(valid=!1),max+=competency.points})),valid=valid&amp;&amp;max&gt;=required},Rule}));
/**
 * Competency rule config.
 *
 * @module     tool_lp/competency_outcomes
 * @copyright  2015 Frédéric Massart - FMCorz.net
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("tool_lp/competency_outcomes",["jquery","core/str"],(function($,Str){return{NONE:0,EVIDENCE:1,COMPLETE:2,RECOMMEND:3,getAll:function(){var self=this;return Str.get_strings([{key:"competencyoutcome_none",component:"tool_lp"},{key:"competencyoutcome_evidence",component:"tool_lp"},{key:"competencyoutcome_recommend",component:"tool_lp"},{key:"competencyoutcome_complete",component:"tool_lp"}]).then((function(strings){var outcomes={};return outcomes[self.NONE]={code:self.NONE,name:strings[0]},outcomes[self.EVIDENCE]={code:self.EVIDENCE,name:strings[1]},outcomes[self.RECOMMEND]={code:self.RECOMMEND,name:strings[2]},outcomes[self.COMPLETE]={code:self.COMPLETE,name:strings[3]},outcomes}))},getString:function(id){return this.getAll().then((function(outcomes){return void 0===outcomes[id]?$.Deferred().reject().promise():outcomes[id].name}))}}}));
/**
 * Frameworks datasource.
 *
 * This module is compatible with core/form-autocomplete.
 *
 * @module     tool_lp/frameworks_datasource
 * @copyright  2016 Frédéric Massart - FMCorz.net
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("tool_lp/frameworks_datasource",["jquery","core/ajax","core/notification"],(function($,Ajax,Notification){return{list:function(contextId,options){var args={context:{contextid:contextId}};return $.extend(args,void 0===options?{}:options),Ajax.call([{methodname:"core_competency_list_competency_frameworks",args:args}])[0]},processResults:function(selector,results){var options=[];return $.each(results,(function(index,data){options.push({value:data.id,label:data.shortname+" "+data.idnumber})})),options},transport:function(selector,query,callback){var el=$(selector),contextId=el.data("contextid"),onlyVisible=el.data("onlyvisible");if(!contextId)throw new Error("The attribute data-contextid is required on "+selector);this.list(contextId,{query:query,onlyvisible:onlyVisible}).then(callback).catch(Notification.exception)}}}));
/**
 * Cohort selector module.
 *
 * @module     tool_lp/form-cohort-selector
 * @copyright  2015 Frédéric Massart - FMCorz.net
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("tool_lp/form-cohort-selector",["jquery","core/ajax","core/templates"],(function($,Ajax,Templates){return{processResults:function(selector,results){var cohorts=[];return $.each(results,(function(index,cohort){cohorts.push({value:cohort.id,label:cohort._label})})),cohorts},transport:function(selector,query,success,failure){var contextid=parseInt($(selector).data("contextid"),10),includes=$(selector).data("includes");Ajax.call([{methodname:"tool_lp_search_cohorts",args:{query:query,context:{contextid:contextid},includes:includes}}])[0].then((function(results){var promises=[],i=0;return $.each(results.cohorts,(function(index,cohort){promises.push(Templates.render("tool_lp/form-cohort-selector-suggestion",cohort))})),$.when.apply($.when,promises).then((function(){var args=arguments;$.each(results.cohorts,(function(index,cohort){cohort._label=args[i],i++})),success(results.cohorts)}))})).catch(failure)}}}));
/**
 * User selector module.
 *
 * @module     tool_lp/form-user-selector
 * @copyright  2015 Frédéric Massart - FMCorz.net
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("tool_lp/form-user-selector",["jquery","core/ajax","core/templates"],(function($,Ajax,Templates){return{processResults:function(selector,results){var users=[];return $.each(results,(function(index,user){users.push({value:user.id,label:user._label})})),users},transport:function(selector,query,success,failure){var capability=$(selector).data("capability");void 0===capability&amp;&amp;(capability=""),Ajax.call([{methodname:"tool_lp_search_users",args:{query:query,capability:capability}}])[0].then((function(results){var promises=[],i=0;return $.each(results.users,(function(index,user){var ctx=user,identity=[];$.each(["idnumber","email","phone1","phone2","department","institution"],(function(i,k){void 0!==user[k]&amp;&amp;""!==user[k]&amp;&amp;(ctx.hasidentity=!0,identity.push(user[k]))})),ctx.identity=identity.join(", "),promises.push(Templates.render("tool_lp/form-user-selector-suggestion",ctx))})),$.when.apply($.when,promises).then((function(){var args=arguments;$.each(results.users,(function(index,user){user._label=args[i],i++})),success(results.users)}))})).catch(failure)}}}));
/**
 * Handle selection changes and actions on the competency tree.
 *
 * @module     tool_lp/competencyactions
 * @copyright  2015 Damyon Wiese &lt;damyon@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("tool_lp/competencyactions",["jquery","core/url","core/templates","core/notification","core/str","core/ajax","tool_lp/dragdrop-reorder","tool_lp/tree","tool_lp/dialogue","tool_lp/menubar","tool_lp/competencypicker","tool_lp/competency_outcomes","tool_lp/competencyruleconfig","core/pending"],(function($,url,templates,notification,str,ajax,dragdrop,Ariatree,Dialogue,menubar,Picker,Outcomes,RuleConfig,Pending){var pageContextId,pickerInstance,ruleConfigInstance,relatedTarget,taxonomiesConstants,rulesModules,treeModel=null,moveSource=null,moveTarget=null,selectedCompetencyId=null,addHandler=function(){var parent=$('[data-region="competencyactions"]').data("competency"),params={competencyframeworkid:treeModel.getCompetencyFrameworkId(),pagecontextid:pageContextId};null!==parent&amp;&amp;(params.parentid=parent.id);var relocate=function(){var queryparams=$.param(params);window.location=url.relativeUrl("/admin/tool/lp/editcompetency.php?"+queryparams)};null!==parent&amp;&amp;treeModel.hasRule(parent.id)?str.get_strings([{key:"confirm",component:"moodle"},{key:"addingcompetencywillresetparentrule",component:"tool_lp",param:parent.shortname},{key:"yes",component:"core"},{key:"no",component:"core"}]).done((function(strings){notification.confirm(strings[0],strings[1],strings[2],strings[3],relocate)})).fail(notification.exception):relocate()},doMove=function(){var frameworkid=$('[data-region="filtercompetencies"]').data("frameworkid");ajax.call([{methodname:"core_competency_set_parent_competency",args:{competencyid:moveSource,parentid:moveTarget}},{methodname:"tool_lp_data_for_competencies_manage_page",args:{competencyframeworkid:frameworkid,search:$('[data-region="filtercompetencies"] input').val()}}])[1].done(reloadPage).fail(notification.exception)},confirmMove=function(){if((moveTarget=void 0===moveTarget?0:moveTarget)!=moveSource){var targetComp=treeModel.getCompetency(moveTarget)||{},sourceComp=treeModel.getCompetency(moveSource)||{},confirmMessage="movecompetencywillresetrules",showConfirm=!1;sourceComp.parentid!=moveTarget&amp;&amp;(targetComp.path&amp;&amp;targetComp.path.indexOf("/"+sourceComp.id+"/")&gt;=0&amp;&amp;(confirmMessage="movecompetencytochildofselfwillresetrules",showConfirm=showConfirm||treeModel.hasRule(sourceComp.id)),(showConfirm=showConfirm||treeModel.hasRule(targetComp.id)||treeModel.hasRule(sourceComp.parentid))?str.get_strings([{key:"confirm",component:"moodle"},{key:confirmMessage,component:"tool_lp"},{key:"yes",component:"moodle"},{key:"no",component:"moodle"}]).done((function(strings){notification.confirm(strings[0],strings[1],strings[2],strings[3],doMove)})).fail(notification.exception):doMove())}},initMovePopup=function(popup){var body=$(popup.getContent()),treeRoot=body.find("[data-enhance=movetree]");new Ariatree(treeRoot,!1).on("selectionchanged",(function(evt,params){var target=params.selected;moveTarget=$(target).data("id")})),treeRoot.show(),body.on("click",'[data-action="move"]',(function(){popup.close(),confirmMove()})),body.on("click",'[data-action="cancel"]',(function(){popup.close()}))},addCompetencyChildren=function(parent,competencies){var i;for(i=0;i&lt;competencies.length;i++)competencies[i].parentid==parent.id&amp;&amp;(parent.haschildren=!0,competencies[i].children=[],competencies[i].haschildren=!1,parent.children[parent.children.length]=competencies[i],addCompetencyChildren(competencies[i],competencies))},moveHandler=function(e){e.preventDefault();var competency=$('[data-region="competencyactions"]').data("competency");moveSource=competency.id;var requests=ajax.call([{methodname:"core_competency_search_competencies",args:{competencyframeworkid:competency.competencyframeworkid,searchtext:""}},{methodname:"core_competency_read_competency_framework",args:{id:competency.competencyframeworkid}}]);$.when.apply(null,requests).done((function(competencies,framework){var i,competenciestree=[];for(i=0;i&lt;competencies.length;i++){var onecompetency=competencies[i];"0"==onecompetency.parentid&amp;&amp;(onecompetency.children=[],onecompetency.haschildren=0,competenciestree[competenciestree.length]=onecompetency,addCompetencyChildren(onecompetency,competencies))}str.get_strings([{key:"movecompetency",component:"tool_lp",param:competency.shortname},{key:"move",component:"tool_lp"},{key:"cancel",component:"moodle"}]).done((function(strings){var context={framework:framework,competencies:competenciestree};templates.render("tool_lp/competencies_move_tree",context).done((function(tree){new Dialogue(strings[0],tree,initMovePopup)})).fail(notification.exception)})).fail(notification.exception)})).fail(notification.exception)},editHandler=function(){var competency=$('[data-region="competencyactions"]').data("competency"),params={competencyframeworkid:treeModel.getCompetencyFrameworkId(),id:competency.id,parentid:competency.parentid,pagecontextid:pageContextId},queryparams=$.param(params);window.location=url.relativeUrl("/admin/tool/lp/editcompetency.php?"+queryparams)},reloadPage=function(context){templates.render("tool_lp/manage_competencies_page",context).done((function(newhtml,newjs){$('[data-region="managecompetencies"]').replaceWith(newhtml),templates.runTemplateJS(newjs)})).fail(notification.exception)},updateSearchHandler=function(e){e.preventDefault();var frameworkid=$('[data-region="filtercompetencies"]').data("frameworkid");ajax.call([{methodname:"tool_lp_data_for_competencies_manage_page",args:{competencyframeworkid:frameworkid,search:$('[data-region="filtercompetencies"] input').val()}}])[0].done(reloadPage).fail(notification.exception)},moveUpHandler=function(){var competency=$('[data-region="competencyactions"]').data("competency");ajax.call([{methodname:"core_competency_move_up_competency",args:{id:competency.id}},{methodname:"tool_lp_data_for_competencies_manage_page",args:{competencyframeworkid:competency.competencyframeworkid,search:$('[data-region="filtercompetencies"] input').val()}}])[1].done(reloadPage).fail(notification.exception)},moveDownHandler=function(){var competency=$('[data-region="competencyactions"]').data("competency");ajax.call([{methodname:"core_competency_move_down_competency",args:{id:competency.id}},{methodname:"tool_lp_data_for_competencies_manage_page",args:{competencyframeworkid:competency.competencyframeworkid,search:$('[data-region="filtercompetencies"] input').val()}}])[1].done(reloadPage).fail(notification.exception)},seeCoursesHandler=function(){var competency=$('[data-region="competencyactions"]').data("competency");ajax.call([{methodname:"tool_lp_list_courses_using_competency",args:{id:competency.id}}])[0].done((function(courses){var context={courses:courses};templates.render("tool_lp/linked_courses_summary",context).done((function(html){str.get_string("linkedcourses","tool_lp").done((function(linkedcourses){new Dialogue(linkedcourses,html,initMovePopup)})).fail(notification.exception)})).fail(notification.exception)})).fail(notification.exception)},relateCompetenciesHandler=function(){relatedTarget=$('[data-region="competencyactions"]').data("competency"),pickerInstance||(pickerInstance=new Picker(pageContextId,relatedTarget.competencyframeworkid)).on("save",(function(e,data){var pendingPromise=new Pending,compIds=data.competencyIds,calls=[];$.each(compIds,(function(index,value){calls.push({methodname:"core_competency_add_related_competency",args:{competencyid:value,relatedcompetencyid:relatedTarget.id}})})),calls.push({methodname:"tool_lp_data_for_related_competencies_section",args:{competencyid:relatedTarget.id}}),ajax.call(calls)[calls.length-1].then((function(context){return templates.render("tool_lp/related_competencies",context)})).then((function(html,js){$('[data-region="relatedcompetencies"]').replaceWith(html),templates.runTemplateJS(js),updatedRelatedCompetencies()})).then(pendingPromise.resolve).catch(notification.exception)})),pickerInstance.setDisallowedCompetencyIDs([relatedTarget.id]),pickerInstance.display()},ruleConfigHandler=function(e){e.preventDefault(),relatedTarget=$('[data-region="competencyactions"]').data("competency"),ruleConfigInstance.setTargetCompetencyId(relatedTarget.id),ruleConfigInstance.display()},ruleConfigSaveHandler=function(e,config){var update={id:relatedTarget.id,shortname:relatedTarget.shortname,idnumber:relatedTarget.idnumber,description:relatedTarget.description,descriptionformat:relatedTarget.descriptionformat,ruletype:config.ruletype,ruleoutcome:config.ruleoutcome,ruleconfig:config.ruleconfig};ajax.call([{methodname:"core_competency_update_competency",args:{competency:update}}])[0].then((function(result){result&amp;&amp;(relatedTarget.ruletype=config.ruletype,relatedTarget.ruleoutcome=config.ruleoutcome,relatedTarget.ruleconfig=config.ruleconfig,renderCompetencySummary(relatedTarget))})).catch(notification.exception)},doDelete=function(){var competency=$('[data-region="competencyactions"]').data("competency"),requests=ajax.call([{methodname:"core_competency_delete_competency",args:{id:competency.id}},{methodname:"tool_lp_data_for_competencies_manage_page",args:{competencyframeworkid:competency.competencyframeworkid,search:$('[data-region="filtercompetencies"] input').val()}}]);requests[0].done((function(success){!1===success&amp;&amp;str.get_strings([{key:"competencycannotbedeleted",component:"tool_lp",param:competency.shortname},{key:"cancel",component:"moodle"}]).done((function(strings){notification.alert(null,strings[0])})).fail(notification.exception)})).fail(notification.exception),requests[1].done(reloadPage).fail(notification.exception)},deleteCompetencyHandler=function(){var competency=$('[data-region="competencyactions"]').data("competency"),confirmMessage="deletecompetency";treeModel.hasRule(competency.parentid)&amp;&amp;(confirmMessage="deletecompetencyparenthasrule"),str.get_strings([{key:"confirm",component:"moodle"},{key:confirmMessage,component:"tool_lp",param:competency.shortname},{key:"delete",component:"moodle"},{key:"cancel",component:"moodle"}]).done((function(strings){notification.confirm(strings[0],strings[1],strings[2],strings[3],doDelete)})).fail(notification.exception)},dragStart=function(e){e.originalEvent.dataTransfer.setData("text",$(e.target).parent().data("id"))},allowDrop=function(e){e.originalEvent.dataTransfer.dropEffect="move",e.preventDefault()},dragEnter=function(e){e.preventDefault(),$(this).addClass("currentdragtarget")},dragLeave=function(e){e.preventDefault(),$(this).removeClass("currentdragtarget")},dropOver=function(e){e.preventDefault(),moveSource=e.originalEvent.dataTransfer.getData("text"),moveTarget=$(e.target).parent().data("id"),$(this).removeClass("currentdragtarget"),confirmMove()},deleteRelatedHandler=function(e){e.preventDefault();var relatedid=this.id.substr(11),competency=$('[data-region="competencyactions"]').data("competency");ajax.call([{methodname:"core_competency_remove_related_competency",args:{relatedcompetencyid:relatedid,competencyid:competency.id}},{methodname:"tool_lp_data_for_related_competencies_section",args:{competencyid:competency.id}}])[1].done((function(context){templates.render("tool_lp/related_competencies",context).done((function(html){$('[data-region="relatedcompetencies"]').replaceWith(html),updatedRelatedCompetencies()})).fail(notification.exception)})).fail(notification.exception)},updatedRelatedCompetencies=function(){$('[data-action="deleterelation"]').on("click",deleteRelatedHandler)},getTaxonomyAtLevel=function(level){var constant=taxonomiesConstants[level];return constant||(constant="competency"),constant},renderCompetencySummary=function(competency){var promise=$.Deferred().resolve().promise(),context={};context.competency=competency,context.showdeleterelatedaction=!0,context.showrelatedcompetencies=!0,context.showrule=!1,context.pluginbaseurl=url.relativeUrl("/admin/tool/lp"),competency.ruleoutcome!=Outcomes.NONE&amp;&amp;(promise=Outcomes.getString(competency.ruleoutcome).then((function(str){var name;return $.each(rulesModules,(function(index,modInfo){modInfo.type==competency.ruletype&amp;&amp;(name=modInfo.name)})),[str,name]}))),promise.then((function(strs){return void 0!==strs&amp;&amp;(context.showrule=!0,context.rule={outcome:strs[0],type:strs[1]}),context})).then((function(context){return templates.render("tool_lp/competency_summary",context)})).then((function(html){return $('[data-region="competencyinfo"]').html(html),$('[data-action="deleterelation"]').on("click",deleteRelatedHandler),templates.render("tool_lp/loading",{})})).then((function(html,js){return templates.replaceNodeContents('[data-region="relatedcompetencies"]',html,js),ajax.call([{methodname:"tool_lp_data_for_related_competencies_section",args:{competencyid:competency.id}}])[0]})).then((function(context){return templates.render("tool_lp/related_competencies",context)})).then((function(html,js){$('[data-region="relatedcompetencies"]').replaceWith(html),templates.runTemplateJS(js),updatedRelatedCompetencies()})).catch(notification.exception)},selectionChanged=function(evt,params){var node=params.selected,id=$(node).data("id"),btn=$('[data-region="competencyactions"] [data-action="add"]'),actionMenu=$('[data-region="competencyactionsmenu"]'),selectedTitle=$('[data-region="selected-competency"]'),level=0,sublevel=1;if(menubar.closeAll(),void 0===id)$('[data-region="competencyinfo"]').html(node.clone().children().remove().end().text()),$('[data-region="competencyactions"]').data("competency",null),actionMenu.hide();else{var competency=treeModel.getCompetency(id);sublevel=(level=treeModel.getCompetencyLevel(id))+1,actionMenu.show(),$('[data-region="competencyactions"]').data("competency",competency),renderCompetencySummary(competency),function(competency){competency.id!==selectedCompetencyId&amp;&amp;(selectedCompetencyId=competency.id,ajax.call([{methodname:"core_competency_competency_viewed",args:{id:competency.id}}]))}(competency)}return function(level){return str.get_string("taxonomy_selected_"+getTaxonomyAtLevel(level),"tool_lp")}(level).then((function(str){selectedTitle.text(str)})).catch(notification.exception),function(level){return str.get_string("taxonomy_add_"+getTaxonomyAtLevel(level),"tool_lp")}(sublevel).then((function(str){btn.show().find('[data-region="term"]').text(str)})).catch(notification.exception),evt.preventDefault(),!1};return{init:function(model,pagectxid,taxonomies,rulesMods){var all;treeModel=model,pageContextId=pagectxid,(all=taxonomies.split(",")).unshift(""),delete all[0],taxonomiesConstants=all,rulesModules=rulesMods,$('[data-region="competencyactions"] [data-action="add"]').on("click",addHandler),menubar.enhance(".competencyactionsmenu",{'[data-action="edit"]':editHandler,'[data-action="delete"]':deleteCompetencyHandler,'[data-action="move"]':moveHandler,'[data-action="moveup"]':moveUpHandler,'[data-action="movedown"]':moveDownHandler,'[data-action="linkedcourses"]':seeCoursesHandler,'[data-action="relatedcompetencies"]':relateCompetenciesHandler.bind(this),'[data-action="competencyrules"]':ruleConfigHandler.bind(this)}),$('[data-region="competencyactionsmenu"]').hide(),$('[data-region="competencyactions"] [data-action="add"]').hide(),$('[data-region="filtercompetencies"]').on("submit",updateSearchHandler),$('[data-region="managecompetencies"] [data-enhance="tree"]').on("dragstart","li&gt;span",dragStart).on("dragover","li&gt;span",allowDrop).on("dragenter","li&gt;span",dragEnter).on("dragleave","li&gt;span",dragLeave).on("drop","li&gt;span",dropOver),model.on("selectionchanged",selectionChanged),(ruleConfigInstance=new RuleConfig(treeModel,rulesModules)).on("save",ruleConfigSaveHandler.bind(this))}}}));
/**
 * Drag and drop reorder via HTML5.
 *
 * @module     tool_lp/dragdrop-reorder
 * @copyright  2015 Damyon Wiese &lt;damyon@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("tool_lp/dragdrop-reorder",["core/str","core/yui"],(function(str,Y){var dragDropInstance=null,proxyCallback=function(e){var dragNode=e.drag.get("node"),dropNode=e.drop.get("node");this.callback(dragNode.getDOMNode(),dropNode.getDOMNode())};return{dragdrop:function(group,dragHandleText,sameNodeText,parentNodeText,sameNodeClass,parentNodeClass,dragHandleInsertClass,callback){str.get_strings([{key:"emptydragdropregion",component:"moodle"},{key:"movecontent",component:"moodle"},{key:"tocontent",component:"moodle"}]).done((function(){Y.use("moodle-tool_lp-dragdrop-reorder",(function(){var context={callback:callback};dragDropInstance&amp;&amp;dragDropInstance.destroy(),dragDropInstance=M.tool_lp.dragdrop_reorder({group:group,dragHandleText:dragHandleText,sameNodeText:sameNodeText,parentNodeText:parentNodeText,sameNodeClass:sameNodeClass,parentNodeClass:parentNodeClass,dragHandleInsertClass:dragHandleInsertClass,callback:Y.bind(proxyCallback,context)})}))}))}}}));
/**
 * Competency picker.
 *
 * To handle 'save' events use: picker.on('save')
 * This will receive a object with either a single 'competencyId', or an array in 'competencyIds'
 * depending on the value of multiSelect.
 *
 * @module     tool_lp/competencypicker
 * @copyright  2015 Frédéric Massart - FMCorz.net
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("tool_lp/competencypicker",["jquery","core/notification","core/ajax","core/templates","tool_lp/dialogue","core/str","tool_lp/tree","core/pending"],(function($,Notification,Ajax,Templates,Dialogue,Str,Tree,Pending){var Picker=function(pageContextId,singleFramework,pageContextIncludes,multiSelect){this._eventNode=$("&lt;div&gt;&lt;/div&gt;"),this._frameworks=[],this._reset(),this._pageContextId=pageContextId,this._pageContextIncludes=pageContextIncludes||"children",this._multiSelect=void 0===multiSelect||!0===multiSelect,singleFramework&amp;&amp;(this._frameworkId=singleFramework,this._singleFramework=!0)};return Picker.prototype._competencies=null,Picker.prototype._disallowedCompetencyIDs=null,Picker.prototype._eventNode=null,Picker.prototype._frameworks=null,Picker.prototype._frameworkId=null,Picker.prototype._pageContextId=null,Picker.prototype._pageContextIncludes=null,Picker.prototype._popup=null,Picker.prototype._searchText="",Picker.prototype._selectedCompetencies=null,Picker.prototype._singleFramework=!1,Picker.prototype._multiSelect=!0,Picker.prototype._onlyVisible=!0,Picker.prototype._afterRender=function(){var self=this,tree=new Tree(self._find("[data-enhance=linktree]"),self._multiSelect);self._find("[data-enhance=linktree]").show(),tree.on("selectionchanged",(function(evt,params){var selected=params.selected;evt.preventDefault();var validIds=[];$.each(selected,(function(index,item){var compId=$(item).data("id"),valid=!0;void 0===compId?valid=!1:$.each(self._disallowedCompetencyIDs,(function(i,id){id==compId&amp;&amp;(valid=!1)})),valid&amp;&amp;validIds.push(compId)})),self._selectedCompetencies=validIds,self._selectedCompetencies.length?self._find('[data-region="competencylinktree"] [data-action="add"]').removeAttr("disabled"):self._find('[data-region="competencylinktree"] [data-action="add"]').attr("disabled","disabled")})),self._singleFramework||self._find('[data-action="chooseframework"]').change((function(e){self._frameworkId=$(e.target).val(),self._loadCompetencies().then(self._refresh.bind(self)).catch(Notification.exception)})),self._find('[data-region="filtercompetencies"] button').click((function(e){return e.preventDefault(),$(e.target).attr("disabled","disabled"),self._searchText=self._find('[data-region="filtercompetencies"] input').val()||"",self._refresh().always((function(){$(e.target).removeAttr("disabled")}))})),self._find('[data-region="competencylinktree"] [data-action="cancel"]').click((function(e){e.preventDefault(),self.close()})),self._find('[data-region="competencylinktree"] [data-action="add"]').click((function(e){e.preventDefault();var pendingPromise=new Pending;self._selectedCompetencies.length&amp;&amp;(self._multiSelect?self._trigger("save",{competencyIds:self._selectedCompetencies}):self._trigger("save",{competencyId:self._selectedCompetencies[0]}),self.close(),pendingPromise.resolve())}));var currentItems=self._selectedCompetencies.slice(0);$.each(currentItems,(function(index,id){var node=self._find("[data-id="+id+"]");node.length&amp;&amp;(tree.toggleItem(node),tree.updateFocus(node))}))},Picker.prototype.close=function(){this._popup.close(),this._reset()},Picker.prototype.display=function(){var self=this;return $.when(Str.get_string("competencypicker","tool_lp"),self._render()).then((function(title,render){self._popup=new Dialogue(title,render[0],self._afterRender.bind(self))})).catch(Notification.exception)},Picker.prototype._fetchCompetencies=function(frameworkId,searchText){var self=this;return Ajax.call([{methodname:"core_competency_search_competencies",args:{searchtext:searchText,competencyframeworkid:frameworkId}}])[0].done((function(competencies){function addCompetencyChildren(parent,competencies){for(var i=0;i&lt;competencies.length;i++)competencies[i].parentid==parent.id&amp;&amp;(parent.haschildren=!0,competencies[i].children=[],competencies[i].haschildren=!1,parent.children[parent.children.length]=competencies[i],addCompetencyChildren(competencies[i],competencies))}var i,comp,tree=[];for(i=0;i&lt;competencies.length;i++)"0"==(comp=competencies[i]).parentid&amp;&amp;(comp.children=[],comp.haschildren=0,tree[tree.length]=comp,addCompetencyChildren(comp,competencies));self._competencies=tree})).fail(Notification.exception)},Picker.prototype._find=function(selector){return $(this._popup.getContent()).find(selector)},Picker.prototype._getFramework=function(fid){var frm;return $.each(this._frameworks,(function(i,f){f.id!=fid||(frm=f)})),frm},Picker.prototype._loadCompetencies=function(){return this._fetchCompetencies(this._frameworkId,this._searchText)},Picker.prototype._loadFrameworks=function(){var self=this;return self._frameworks.length&gt;0?$.when():(self._singleFramework?Ajax.call([{methodname:"core_competency_read_competency_framework",args:{id:this._frameworkId}}])[0].then((function(framework){return[framework]})):Ajax.call([{methodname:"core_competency_list_competency_frameworks",args:{sort:"shortname",context:{contextid:self._pageContextId},includes:self._pageContextIncludes,onlyvisible:self._onlyVisible}}])[0]).done((function(frameworks){self._frameworks=frameworks})).fail(Notification.exception)},Picker.prototype.on=function(type,handler){this._eventNode.on(type,handler)},Picker.prototype._preRender=function(){var self=this;return self._loadFrameworks().then((function(){return!self._frameworkId&amp;&amp;self._frameworks.length&gt;0&amp;&amp;(self._frameworkId=self._frameworks[0].id),self._frameworkId?self._loadCompetencies():(self._frameworks=[],$.when())}))},Picker.prototype._refresh=function(){var self=this;return self._render().then((function(html){self._find('[data-region="competencylinktree"]').replaceWith(html),self._afterRender()}))},Picker.prototype._render=function(){var self=this;return self._preRender().then((function(){self._singleFramework||$.each(self._frameworks,(function(i,framework){framework.id==self._frameworkId?framework.selected=!0:framework.selected=!1}));var context={competencies:self._competencies,framework:self._getFramework(self._frameworkId),frameworks:self._frameworks,search:self._searchText,singleFramework:self._singleFramework};return Templates.render("tool_lp/competency_picker",context)}))},Picker.prototype._reset=function(){this._competencies=[],this._disallowedCompetencyIDs=[],this._popup=null,this._searchText="",this._selectedCompetencies=[]},Picker.prototype.setDisallowedCompetencyIDs=function(ids){this._disallowedCompetencyIDs=ids},Picker.prototype._trigger=function(type,data){this._eventNode.trigger(type,[data])},Picker}));
/**
 * Module to navigation between users in a course.
 *
 * @module     tool_lp/module_navigation
 * @copyright  2019 Damyon Wiese
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("tool_lp/module_navigation",["jquery"],(function($){var ModuleNavigation=function(moduleSelector,baseUrl,courseId,moduleId){this._baseUrl=baseUrl,this._moduleId=moduleId,this._courseId=courseId,$(moduleSelector).on("change",this._moduleChanged.bind(this))};return ModuleNavigation.prototype._moduleChanged=function(e){var queryStr="?mod="+$(e.target).val()+"&amp;courseid="+this._courseId;document.location=this._baseUrl+queryStr},ModuleNavigation.prototype._courseId=null,ModuleNavigation.prototype._moduleId=null,ModuleNavigation.prototype._baseUrl=null,ModuleNavigation}));
/**
 * Module to enable inline editing of a comptency grade.
 *
 * @module     tool_lp/grade_user_competency_inline
 * @copyright  2015 Damyon Wiese
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("tool_lp/grade_user_competency_inline",["jquery","core/notification","core/ajax","core/log","tool_lp/grade_dialogue","tool_lp/event_base","tool_lp/scalevalues"],(function($,notification,ajax,log,GradeDialogue,EventBase,ScaleValues){var InlineEditor=function(selector,scaleId,competencyId,userId,planId,courseId,chooseStr){EventBase.prototype.constructor.apply(this,[]);var trigger=$(selector);if(!trigger.length)throw new Error("Could not find the trigger");this._scaleId=scaleId,this._competencyId=competencyId,this._userId=userId,this._planId=planId,this._courseId=courseId,this._chooseStr=chooseStr,this._setUp(),trigger.click(function(e){e.preventDefault(),this._dialogue.display()}.bind(this)),this._planId?(this._methodName="core_competency_grade_competency_in_plan",this._args={competencyid:this._competencyId,planid:this._planId}):this._courseId?(this._methodName="core_competency_grade_competency_in_course",this._args={competencyid:this._competencyId,courseid:this._courseId,userid:this._userId}):(this._methodName="core_competency_grade_competency",this._args={userid:this._userId,competencyid:this._competencyId})};return(InlineEditor.prototype=Object.create(EventBase.prototype))._setUp=function(){var options=[],self=this;M.util.js_pending("tool_lp/grade_user_competency_inline:_setUp"),ScaleValues.get_values(self._scaleId).then((function(scalevalues){options.push({value:"",name:self._chooseStr});for(var i=0;i&lt;scalevalues.length;i++){var optionConfig=scalevalues[i];options.push({value:optionConfig.id,name:optionConfig.name})}return options})).then((function(options){return new GradeDialogue(options)})).then((function(dialogue){return dialogue.on("rated",(function(e,data){var args=self._args;args.grade=data.rating,args.note=data.note,ajax.call([{methodname:self._methodName,args:args,done:function(evidence){self._trigger("competencyupdated",{args:args,evidence:evidence})},fail:notification.exception}])})),dialogue})).then((function(dialogue){self._dialogue=dialogue,M.util.js_complete("tool_lp/grade_user_competency_inline:_setUp")})).fail(notification.exception)},InlineEditor.prototype._scaleId=null,InlineEditor.prototype._competencyId=null,InlineEditor.prototype._userId=null,InlineEditor.prototype._planId=null,InlineEditor.prototype._courseId=null,InlineEditor.prototype._chooseStr=null,InlineEditor.prototype._dialogue=null,InlineEditor}));
/**
 * Module to refresh a user competency summary in a page.
 *
 * @module     tool_lp/user_competency_info
 * @copyright  2015 Damyon Wiese
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("tool_lp/user_competency_info",["jquery","core/notification","core/ajax","core/templates"],(function($,notification,ajax,templates){var Info=function(rootElement,competencyId,userId,planId,courseId,displayuser){this._rootElement=rootElement,this._competencyId=competencyId,this._userId=userId,this._planId=planId,this._courseId=courseId,this._valid=!0,this._displayuser=void 0!==displayuser&amp;&amp;displayuser,this._planId?(this._methodName="tool_lp_data_for_user_competency_summary_in_plan",this._args={competencyid:this._competencyId,planid:this._planId},this._templateName="tool_lp/user_competency_summary_in_plan"):this._courseId?(this._methodName="tool_lp_data_for_user_competency_summary_in_course",this._args={userid:this._userId,competencyid:this._competencyId,courseid:this._courseId},this._templateName="tool_lp/user_competency_summary_in_course"):(this._methodName="tool_lp_data_for_user_competency_summary",this._args={userid:this._userId,competencyid:this._competencyId},this._templateName="tool_lp/user_competency_summary")};return Info.prototype.reload=function(){var self=this;this._valid&amp;&amp;ajax.call([{methodname:this._methodName,args:this._args}])[0].done((function(context){self._displayuser&amp;&amp;(context.displayuser=!0),templates.render(self._templateName,context).done((function(html,js){templates.replaceNode(self._rootElement,html,js)})).fail(notification.exception)})).fail(notification.exception)},Info.prototype._rootElement=null,Info.prototype._courseId=null,Info.prototype._valid=null,Info.prototype._planId=null,Info.prototype._competencyId=null,Info.prototype._userId=null,Info.prototype._methodName=null,Info.prototype._args=null,Info.prototype._templateName=null,Info.prototype._displayuser=!1,Info}));
/**
 * Competency rule base module.
 *
 * @module     tool_lp/competencyrule
 * @copyright  2015 Frédéric Massart - FMCorz.net
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("tool_lp/competency_rule",["jquery"],(function($){var Rule=function(tree){this._eventNode=$("&lt;div&gt;"),this._ready=$.Deferred(),this._tree=tree};return Rule.prototype._competency=null,Rule.prototype._eventNode=null,Rule.prototype._ready=null,Rule.prototype._tree=null,Rule.prototype.canConfig=function(){return this._tree.hasChildren(this._competency.id)},Rule.prototype.getConfig=function(){return null},Rule.prototype.getType=function(){throw new Error("Not implemented")},Rule.prototype.init=function(){return this._load()},Rule.prototype.injectTemplate=function(){return $.Deferred().reject().promise()},Rule.prototype.isValid=function(){return!1},Rule.prototype._load=function(){return $.when()},Rule.prototype.on=function(type,handler){this._eventNode.on(type,handler)},Rule.prototype.setTargetCompetency=function(competency){this._competency=competency},Rule.prototype._trigger=function(type,data){this._eventNode.trigger(type,[data])},Rule.prototype._triggerChange=function(){this._trigger("change",this)},Rule}));
/**
 * Grade dialogue.
 *
 * @module     tool_lp/grade_dialogue
 * @copyright  2016 Frédéric Massart - FMCorz.net
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("tool_lp/grade_dialogue",["jquery","core/notification","core/templates","tool_lp/dialogue","tool_lp/event_base","core/str"],(function($,Notification,Templates,Dialogue,EventBase,Str){var Grade=function(ratingOptions){EventBase.prototype.constructor.apply(this,[]),this._ratingOptions=ratingOptions};return(Grade.prototype=Object.create(EventBase.prototype))._popup=null,Grade.prototype._ratingOptions=null,Grade.prototype._afterRender=function(){var btnRate=this._find('[data-action="rate"]'),lstRating=this._find('[name="rating"]'),txtComment=this._find('[name="comment"]');this._find('[data-action="cancel"]').click(function(e){e.preventDefault(),this._trigger("cancelled"),this.close()}.bind(this)),lstRating.change((function(){$(this).val()?btnRate.prop("disabled",!1):btnRate.prop("disabled",!0)})).change(),btnRate.click(function(e){e.preventDefault();var val=lstRating.val();val&amp;&amp;(this._trigger("rated",{rating:val,note:txtComment.val()}),this.close())}.bind(this))},Grade.prototype.close=function(){this._popup.close(),this._popup=null},Grade.prototype.display=function(){return M.util.js_pending("tool_lp/grade_dialogue:display"),$.when(Str.get_string("rate","tool_lp"),this._render()).then(function(title,templateResult){return this._popup=new Dialogue(title,templateResult[0],function(){this._afterRender(),M.util.js_complete("tool_lp/grade_dialogue:display")}.bind(this)),this._popup}.bind(this)).catch(Notification.exception)},Grade.prototype._find=function(selector){return $(this._popup.getContent()).find(selector)},Grade.prototype._render=function(){var context={cangrade:this._canGrade,ratings:this._ratingOptions};return Templates.render("tool_lp/competency_grader",context)},Grade}));
/**
 * Badge select competency actions
 *
 * @module     tool_lp/form_competency_element
 * @copyright  2019 Damyon Wiese &lt;damyon@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("tool_lp/form_competency_element",["jquery","tool_lp/competencypicker","core/ajax","core/notification","core/templates"],(function($,Picker,Ajax,Notification,Templates){var pickerInstance=null,pageContextId=1,renderCompetencies=function(){var currentCompetencies=$('[data-action="competencies"]').val(),requests=[],i=0;if(""!=currentCompetencies)for(currentCompetencies=currentCompetencies.split(","),i=0;i&lt;currentCompetencies.length;i++)requests[requests.length]={methodname:"core_competency_read_competency",args:{id:currentCompetencies[i]}};return $.when.apply($,Ajax.call(requests,!1)).then((function(){var i=0,competencies=[];for(i=0;i&lt;arguments.length;i++)competencies[i]=arguments[i];var context={competencies:competencies};return Templates.render("tool_lp/form_competency_list",context)})).then((function(html,js){return Templates.replaceNode($('[data-region="competencies"]'),html,js),!0})).fail(Notification.exception),!0},unpickCompetenciesHandler=function(e){var i,currentCompetencies=$('[data-action="competencies"]').val().split(","),newCompetencies=[],toRemove=$(e.currentTarget).data("id");for(i=0;i&lt;currentCompetencies.length;i++)currentCompetencies[i]!=toRemove&amp;&amp;(newCompetencies[newCompetencies.length]=currentCompetencies[i]);return $('[data-action="competencies"]').val(newCompetencies.join(",")),renderCompetencies()},pickCompetenciesHandler=function(){var currentCompetencies=$('[data-action="competencies"]').val().split(",");pickerInstance||(pickerInstance=new Picker(pageContextId,!1,"parents",!0)).on("save",(function(e,data){var before=$('[data-action="competencies"]').val(),compIds=data.competencyIds;""!=before&amp;&amp;(compIds=compIds.concat(before.split(",")));var value=compIds.join(",");return $('[data-action="competencies"]').val(value),renderCompetencies()})),pickerInstance.setDisallowedCompetencyIDs(currentCompetencies),pickerInstance.display()};return{init:function(contextId){pageContextId=contextId,renderCompetencies(),$('[data-action="select-competencies"]').on("click",pickCompetenciesHandler),$("body").on("click",'[data-action="deselect-competency"]',unpickCompetenciesHandler)}}}));
/**
 * Competency rule config.
 *
 * @module     tool_lp/competencyruleconfig
 * @copyright  2015 Frédéric Massart - FMCorz.net
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("tool_lp/competencyruleconfig",["jquery","core/notification","core/templates","tool_lp/dialogue","tool_lp/competency_outcomes","core/str"],(function($,Notification,Templates,Dialogue,Outcomes,Str){var RuleConfig=function(tree,rulesModules){this._eventNode=$("&lt;div&gt;&lt;/div&gt;"),this._tree=tree,this._rulesModules=rulesModules,this._setUp()};return RuleConfig.prototype._competency=null,RuleConfig.prototype._eventNode=null,RuleConfig.prototype._outcomesOption=null,RuleConfig.prototype._popup=null,RuleConfig.prototype._ready=null,RuleConfig.prototype._rules=null,RuleConfig.prototype._rulesModules=null,RuleConfig.prototype._tree=null,RuleConfig.prototype._afterChange=function(){this._isValid()?this._find('[data-action="save"]').prop("disabled",!1):this._find('[data-action="save"]').prop("disabled",!0)},RuleConfig.prototype._afterRuleConfigChange=function(e,rule){rule==this._getRule()&amp;&amp;this._afterChange()},RuleConfig.prototype._afterRender=function(){var self=this;self._find('[name="outcome"]').on("change",(function(){self._switchedOutcome()})).trigger("change"),self._find('[name="rule"]').on("change",(function(){self._switchedRule()})).trigger("change"),self._find('[data-action="save"]').on("click",(function(){self._trigger("save",self._getConfig()),self.close()})),self._find('[data-action="cancel"]').on("click",(function(){self.close()}))},RuleConfig.prototype.canBeConfigured=function(){var can=!1;return $.each(this._rules,(function(index,rule){rule.canConfig()&amp;&amp;(can=!0)})),can},RuleConfig.prototype.close=function(){this._popup.close(),this._popup=null},RuleConfig.prototype.display=function(){var self=this;return!!self._competency&amp;&amp;$.when(Str.get_string("competencyrule","tool_lp"),self._render()).then((function(title,render){self._popup=new Dialogue(title,render[0],self._afterRender.bind(self),null,!1,"515px")})).fail(Notification.exception)},RuleConfig.prototype._find=function(selector){return $(this._popup.getContent()).find(selector)},RuleConfig.prototype._getApplicableOutcomesOptions=function(){var self=this,options=[];return $.each(self._outcomesOption,(function(index,outcome){options.push({code:outcome.code,name:outcome.name,selected:outcome.code==self._competency.ruleoutcome})})),options},RuleConfig.prototype._getApplicableRulesOptions=function(){var self=this,options=[];return $.each(self._rules,(function(index,rule){rule.canConfig()&amp;&amp;options.push({name:self._getRuleName(rule.getType()),type:rule.getType(),selected:rule.getType()==self._competency.ruletype})})),options},RuleConfig.prototype._getConfig=function(){var rule=this._getRule();return{ruletype:rule?rule.getType():null,ruleconfig:rule?rule.getConfig():null,ruleoutcome:this._getOutcome()}},RuleConfig.prototype._getOutcome=function(){return this._find('[name="outcome"]').val()},RuleConfig.prototype._getRule=function(){var result,type=this._find('[name="rule"]').val();return $.each(this._rules,(function(index,rule){rule.getType()!=type||(result=rule)})),result},RuleConfig.prototype._getRuleName=function(type){var name;return $.each(this._rulesModules,(function(index,modInfo){modInfo.type!=type||(name=modInfo.name)})),name},RuleConfig.prototype._initOutcomes=function(){var self=this;return Outcomes.getAll().then((function(outcomes){self._outcomesOption=outcomes}))},RuleConfig.prototype._initRules=function(){var self=this,promises=[];return $.each(self._rules,(function(index,rule){var promise=rule.init().then((function(){rule.setTargetCompetency(self._competency),rule.on("change",self._afterRuleConfigChange.bind(self))}),(function(){return self._rules.splice(index,1),$.when()}));promises.push(promise)})),$.when.apply($.when,promises)},RuleConfig.prototype._isValid=function(){var outcome=this._getOutcome(),rule=this._getRule();return outcome==Outcomes.NONE||!!rule&amp;&amp;rule.isValid()},RuleConfig.prototype.on=function(type,handler){this._eventNode.on(type,handler)},RuleConfig.prototype._preRender=function(){return this.ready()},RuleConfig.prototype.ready=function(){return this._ready.promise()},RuleConfig.prototype._render=function(){var self=this;return this._preRender().then((function(){var config;self.canBeConfigured()?((config={}).outcomes=self._getApplicableOutcomesOptions(),config.rules=self._getApplicableRulesOptions()):config=!1;var context={competencyshortname:self._competency.shortname,config:config};return Templates.render("tool_lp/competency_rule_config",context)}))},RuleConfig.prototype.setTargetCompetencyId=function(competencyId){var self=this;self._competency=self._tree.getCompetency(competencyId),$.each(self._rules,(function(index,rule){rule.setTargetCompetency(self._competency)}))},RuleConfig.prototype._setUp=function(){var self=this,promises=[],modules=[];self._ready=$.Deferred(),self._rules=[],$.each(self._rulesModules,(function(index,rule){modules.push(rule.amd)})),require(modules,(function(){$.each(arguments,(function(index,Module){var rule=new Module(self._tree);self._rules.push(rule)})),promises.push(self._initRules()),promises.push(self._initOutcomes()),$.when.apply($.when,promises).always((function(){self._ready.resolve()}))}))},RuleConfig.prototype._switchedOutcome=function(){if(this._getOutcome()==Outcomes.NONE)return this._find('[data-region="rule-type"]').hide().find('[name="rule"]').val(-1),this._find('[data-region="rule-config"]').empty().hide(),void this._afterChange();this._find('[data-region="rule-type"]').show(),this._find('[data-region="rule-config"]').show(),this._afterChange()},RuleConfig.prototype._switchedRule=function(){var self=this,container=self._find('[data-region="rule-config"]'),rule=self._getRule();if(!rule)return container.empty().hide(),void self._afterChange();rule.injectTemplate(container).then((function(){container.show()})).always((function(){self._afterChange()})).catch((function(){container.empty().hide()}))},RuleConfig.prototype._trigger=function(type,data){this._eventNode.trigger(type,[data])},RuleConfig}));
/**
 * Handle opening a dialogue to configure scale data.
 *
 * @module     tool_lp/scaleconfig
 * @copyright  2015 Adrian Greeve &lt;adrian@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("tool_lp/scaleconfig",["jquery","core/notification","core/templates","core/ajax","tool_lp/dialogue","tool_lp/scalevalues"],(function($,notification,templates,ajax,Dialogue,ModScaleValues){var ScaleConfig=function(selectSelector,inputSelector,triggerSelector){this.selectSelector=selectSelector,this.inputSelector=inputSelector,this.triggerSelector=triggerSelector,this.originalscaleid=$(selectSelector).val(),$(selectSelector).on("change",this.scaleChangeHandler.bind(this)).change(),$(triggerSelector).click(this.showConfig.bind(this))};return ScaleConfig.prototype.selectSelector=null,ScaleConfig.prototype.inputSelector=null,ScaleConfig.prototype.triggerSelector=null,ScaleConfig.prototype.scalevalues=null,ScaleConfig.prototype.originalscaleid=0,ScaleConfig.prototype.scaleid=0,ScaleConfig.prototype.popup=null,ScaleConfig.prototype.showConfig=function(){var self=this;if(this.scaleid=$(this.selectSelector).val(),!(this.scaleid&lt;=0)){var scalename=$(this.selectSelector).find("option:selected").text();this.getScaleValues(this.scaleid).done((function(){var context={scalename:scalename,scales:self.scalevalues};templates.render("tool_lp/scale_configuration_page",context).done((function(html){new Dialogue(scalename,html,self.initScaleConfig.bind(self))})).fail(notification.exception)})).fail(notification.exception)}},ScaleConfig.prototype.retrieveOriginalScaleConfig=function(){var jsonstring=$(this.inputSelector).val();if(""!==jsonstring){var scaleconfiguration=$.parseJSON(jsonstring);if(scaleconfiguration.shift().scaleid===this.originalscaleid)return scaleconfiguration}return""},ScaleConfig.prototype.initScaleConfig=function(popup){this.popup=popup;var body=$(popup.getContent());if(this.originalscaleid===this.scaleid){var currentconfig=this.retrieveOriginalScaleConfig();""!==currentconfig&amp;&amp;currentconfig.forEach((function(value){1===value.scaledefault&amp;&amp;body.find('[data-field="tool_lp_scale_default_'+value.id+'"]').attr("checked",!0),1===value.proficient&amp;&amp;body.find('[data-field="tool_lp_scale_proficient_'+value.id+'"]').attr("checked",!0)}))}body.on("click",'[data-action="close"]',function(){this.setScaleConfig(),popup.close()}.bind(this)),body.on("click",'[data-action="cancel"]',(function(){popup.close()}))},ScaleConfig.prototype.setScaleConfig=function(){var body=$(this.popup.getContent()),data=[{scaleid:this.scaleid}];this.scalevalues.forEach((function(value){var scaledefault=0,proficient=0;body.find('[data-field="tool_lp_scale_default_'+value.id+'"]').is(":checked")&amp;&amp;(scaledefault=1),body.find('[data-field="tool_lp_scale_proficient_'+value.id+'"]').is(":checked")&amp;&amp;(proficient=1),(scaledefault||proficient)&amp;&amp;data.push({id:value.id,scaledefault:scaledefault,proficient:proficient})}));var datastring=JSON.stringify(data);$(this.inputSelector).val(datastring),this.originalscaleid=this.scaleid},ScaleConfig.prototype.getScaleValues=function(scaleid){return ModScaleValues.get_values(scaleid).then(function(values){return this.scalevalues=values,values}.bind(this))},ScaleConfig.prototype.scaleChangeHandler=function(e){$(e.target).val()&lt;=0?$(this.triggerSelector).prop("disabled",!0):$(this.triggerSelector).prop("disabled",!1)},{init:function(selectSelector,inputSelector,triggerSelector){return new ScaleConfig(selectSelector,inputSelector,triggerSelector)}}}));
/**
 * Competency picker from user plans.
 *
 * To handle 'save' events use: picker.on('save').
 *
 * This will receive a object with either a single 'competencyId', or an array in 'competencyIds'
 * depending on the value of multiSelect.
 *
 * @module     tool_lp/competencypicker_user_plans
 * @copyright  2015 Frédéric Massart - FMCorz.net
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("tool_lp/competencypicker_user_plans",["jquery","core/notification","core/ajax","core/templates","core/str","tool_lp/tree","tool_lp/competencypicker"],(function($,Notification,Ajax,Templates,Str,Tree,PickerBase){var Picker=function(userId,singlePlan,multiSelect){PickerBase.prototype.constructor.apply(this,[1,!1,"self",multiSelect]),this._userId=userId,this._plans=[],singlePlan&amp;&amp;(this._planId=singlePlan,this._singlePlan=!0)};return(Picker.prototype=Object.create(PickerBase.prototype))._plans=null,Picker.prototype._planId=null,Picker.prototype._singlePlan=!1,Picker.prototype._userId=null,Picker.prototype._afterRender=function(){var self=this;PickerBase.prototype._afterRender.apply(self,arguments),self._singlePlan||self._find('[data-action="chooseplan"]').change((function(e){self._planId=$(e.target).val(),self._loadCompetencies().then(self._refresh.bind(self)).catch(Notification.exception)}))},Picker.prototype._fetchCompetencies=function(planId,searchText){var self=this;return Ajax.call([{methodname:"core_competency_list_plan_competencies",args:{id:planId}}])[0].done((function(competencies){var i,comp,tree=[];for(i=0;i&lt;competencies.length;i++)(comp=competencies[i].competency).shortname.toLowerCase().indexOf(searchText.toLowerCase())&lt;0||(comp.children=[],comp.haschildren=0,tree.push(comp));self._competencies=tree})).fail(Notification.exception)},Picker.prototype._getPlan=function(id){var plan;return $.each(this._plans,(function(i,f){f.id!=id||(plan=f)})),plan},Picker.prototype._loadCompetencies=function(){return this._fetchCompetencies(this._planId,this._searchText)},Picker.prototype._loadPlans=function(){var self=this;return self._plans.length&gt;0?$.when():(self._singlePlan?Ajax.call([{methodname:"core_competency_read_plan",args:{id:this._planId}}])[0].then((function(plan){return[plan]})):Ajax.call([{methodname:"core_competency_list_user_plans",args:{userid:self._userId}}])[0]).done((function(plans){self._plans=plans})).fail(Notification.exception)},Picker.prototype._preRender=function(){var self=this;return self._loadPlans().then((function(){return!self._planId&amp;&amp;self._plans.length&gt;0&amp;&amp;(self._planId=self._plans[0].id),self._planId?self._loadCompetencies():(self._plans=[],$.when())}))},Picker.prototype._render=function(){var self=this;return self._preRender().then((function(){self._singlePlan||$.each(self._plans,(function(i,plan){plan.id==self._planId?plan.selected=!0:plan.selected=!1}));var context={competencies:self._competencies,plan:self._getPlan(self._planId),plans:self._plans,search:self._searchText,singlePlan:self._singlePlan};return Templates.render("tool_lp/competency_picker_user_plans",context)}))},Picker}));
/**
 * Module to enable inline editing of a comptency grade.
 *
 * @module     tool_lp/user_competency_course_navigation
 * @copyright  2015 Damyon Wiese
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("tool_lp/user_competency_course_navigation",["jquery"],(function($){var UserCompetencyCourseNavigation=function(userSelector,competencySelector,baseUrl,userId,competencyId,courseId){this._baseUrl=baseUrl,this._userId=userId+"",this._competencyId=competencyId+"",this._courseId=courseId,$(userSelector).on("change",this._userChanged.bind(this)),$(competencySelector).on("change",this._competencyChanged.bind(this))};return UserCompetencyCourseNavigation.prototype._userChanged=function(e){var queryStr="?userid="+$(e.target).val()+"&amp;courseid="+this._courseId+"&amp;competencyid="+this._competencyId;document.location=this._baseUrl+queryStr},UserCompetencyCourseNavigation.prototype._competencyChanged=function(e){var newCompetencyId=$(e.target).val(),queryStr="?userid="+this._userId+"&amp;courseid="+this._courseId+"&amp;competencyid="+newCompetencyId;document.location=this._baseUrl+queryStr},UserCompetencyCourseNavigation.prototype._competencyId=null,UserCompetencyCourseNavigation.prototype._userId=null,UserCompetencyCourseNavigation.prototype._courseId=null,UserCompetencyCourseNavigation.prototype._baseUrl=null,UserCompetencyCourseNavigation.prototype._ignoreFirstCompetency=null,UserCompetencyCourseNavigation}));
/**
 * Change the course competency settings in a popup.
 *
 * @module     tool_lp/configurecoursecompetencysettings
 * @copyright  2015 Damyon Wiese &lt;damyon@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("tool_lp/course_competency_settings",["jquery","core/notification","tool_lp/dialogue","core/str","core/ajax","core/templates","core/pending"],(function($,notification,Dialogue,str,ajax,templates,Pending){var settingsMod=function(selector){$(selector).on("click",this.configureSettings.bind(this))};return settingsMod.prototype._dialogue=null,settingsMod.prototype.configureSettings=function(e){var pendingPromise=new Pending,context={courseid:$(e.target).closest("a").data("courseid"),settings:{pushratingstouserplans:$(e.target).closest("a").data("pushratingstouserplans")}};e.preventDefault(),$.when(str.get_string("configurecoursecompetencysettings","tool_lp"),templates.render("tool_lp/course_competency_settings",context)).then(function(title,templateResult){return this._dialogue=new Dialogue(title,templateResult[0],this.addListeners.bind(this)),this._dialogue}.bind(this)).then(pendingPromise.resolve).catch(notification.exception)},settingsMod.prototype.addListeners=function(){this._find('[data-action="save"]').on("click",this.saveSettings.bind(this)),this._find('[data-action="cancel"]').on("click",this.cancelChanges.bind(this))},settingsMod.prototype.cancelChanges=function(e){e.preventDefault(),this._dialogue.close()},settingsMod.prototype._find=function(selector){return $('[data-region="coursecompetencysettings"]').find(selector)},settingsMod.prototype.saveSettings=function(e){var pendingPromise=new Pending;e.preventDefault();var newValue=this._find('input[name="pushratingstouserplans"]:checked').val(),courseId=this._find('input[name="courseid"]').val(),settings={pushratingstouserplans:newValue};ajax.call([{methodname:"core_competency_update_course_competency_settings",args:{courseid:courseId,settings:settings}}])[0].then(function(){return this.refreshCourseCompetenciesPage()}.bind(this)).then(pendingPromise.resolve).catch(notification.exception)},settingsMod.prototype.refreshCourseCompetenciesPage=function(){var courseId=this._find('input[name="courseid"]').val(),pendingPromise=new Pending;ajax.call([{methodname:"tool_lp_data_for_course_competencies_page",args:{courseid:courseId,moduleid:0}}])[0].then((function(context){return templates.render("tool_lp/course_competencies_page",context)})).then(function(html,js){templates.replaceNode($('[data-region="coursecompetenciespage"]'),html,js),this._dialogue.close()}.bind(this)).then(pendingPromise.resolve).catch(notification.exception)},settingsMod}));
/**
 * Module to open user competency plan in popup
 *
 * @module     tool_lp/user_competency_plan_popup
 * @copyright  2016 Issam Taboubi &lt;issam.taboubi@umontreal.ca&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("tool_lp/user_competency_plan_popup",["jquery","core/notification","core/str","core/ajax","core/templates","tool_lp/dialogue"],(function($,notification,str,ajax,templates,Dialogue){var UserCompetencyPopup=function(regionSelector,userCompetencySelector,planId){this._regionSelector=regionSelector,this._userCompetencySelector=userCompetencySelector,this._planId=planId,$(this._regionSelector).on("click",this._userCompetencySelector,this._handleClick.bind(this))};return UserCompetencyPopup.prototype._handleClick=function(e){e.preventDefault();var tr=$(e.target).closest("tr"),competencyId=$(tr).data("competencyid"),userId=$(tr).data("userid"),planId=this._planId;ajax.call([{methodname:"tool_lp_data_for_user_competency_summary_in_plan",args:{competencyid:competencyId,planid:planId},done:this._contextLoaded.bind(this),fail:notification.exception}])[0].then((function(result){var eventMethodName="core_competency_user_competency_viewed_in_plan";return result.plan.iscompleted&amp;&amp;(eventMethodName="core_competency_user_competency_plan_viewed"),ajax.call([{methodname:eventMethodName,args:{competencyid:competencyId,userid:userId,planid:planId}}])[0]})).catch(notification.exception)},UserCompetencyPopup.prototype._contextLoaded=function(context){var self=this;templates.render("tool_lp/user_competency_summary_in_plan",context).done((function(html,js){str.get_string("usercompetencysummary","report_competency").done((function(title){new Dialogue(title,html,templates.runTemplateJS.bind(templates,js),self._refresh.bind(self),!0)})).fail(notification.exception)})).fail(notification.exception)},UserCompetencyPopup.prototype._refresh=function(){var planId=this._planId;ajax.call([{methodname:"tool_lp_data_for_plan_page",args:{planid:planId},done:this._pageContextLoaded.bind(this),fail:notification.exception}])},UserCompetencyPopup.prototype._pageContextLoaded=function(context){var self=this;templates.render("tool_lp/plan_page",context).done((function(html,js){templates.replaceNode(self._regionSelector,html,js)})).fail(notification.exception)},UserCompetencyPopup.prototype._regionSelector=null,UserCompetencyPopup.prototype._userCompetencySelector=null,UserCompetencyPopup.prototype._planId=null,UserCompetencyPopup}));
/**
 * Event click on selecting competency in the competency autocomplete.
 *
 * @module     tool_lp/competency_plan_navigation
 * @copyright  2016 Issam Taboubi &lt;issam.taboubi@umontreal.ca&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("tool_lp/competency_plan_navigation",["jquery"],(function($){var CompetencyPlanNavigation=function(competencySelector,baseUrl,userId,competencyId,planId){this._baseUrl=baseUrl,this._userId=userId+"",this._competencyId=competencyId+"",this._planId=planId,this._ignoreFirstCompetency=!0,$(competencySelector).on("change",this._competencyChanged.bind(this))};return CompetencyPlanNavigation.prototype._competencyChanged=function(e){if(this._ignoreFirstCompetency)this._ignoreFirstCompetency=!1;else{var newCompetencyId=$(e.target).val(),queryStr="?userid="+this._userId+"&amp;planid="+this._planId+"&amp;competencyid="+newCompetencyId;document.location=this._baseUrl+queryStr}},CompetencyPlanNavigation.prototype._competencyId=null,CompetencyPlanNavigation.prototype._userId=null,CompetencyPlanNavigation.prototype._planId=null,CompetencyPlanNavigation.prototype._baseUrl=null,CompetencyPlanNavigation.prototype._ignoreFirstCompetency=null,CompetencyPlanNavigation}));
/**
 * Event base javascript module.
 *
 * @module     tool_lp/event_base
 * @copyright  2015 Frédéric Massart - FMCorz.net
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("tool_lp/event_base",["jquery"],(function($){var Base=function(){this._eventNode=$("&lt;div&gt;&lt;/div&gt;")};return Base.prototype._eventNode=null,Base.prototype.on=function(type,handler){this._eventNode.on(type,handler)},Base.prototype._trigger=function(type,data){this._eventNode.trigger(type,[data])},Base}));
/**
 * Handle add/remove competency links.
 *
 * @module     tool_lp/competencies
 * @copyright  2015 Damyon Wiese &lt;damyon@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("tool_lp/competencies",["jquery","core/notification","core/ajax","core/templates","core/str","tool_lp/competencypicker","tool_lp/dragdrop-reorder","core/pending"],(function($,notification,ajax,templates,str,Picker,dragdrop,Pending){var competencies=function(itemid,itemtype,pagectxid){this.itemid=itemid,this.itemtype=itemtype,this.pageContextId=pagectxid,this.pickerInstance=null,$('[data-region="actions"] button').prop("disabled",!1),this.registerEvents(),this.registerDragDrop()};return competencies.prototype.registerDragDrop=function(){var localthis=this;str.get_string("movecompetency","tool_lp").done((function(movestring){dragdrop.dragdrop("movecompetency",movestring,{identifier:"movecompetency",component:"tool_lp"},{identifier:"movecompetencyafter",component:"tool_lp"},"drag-samenode","drag-parentnode","drag-handlecontainer",(function(drag,drop){localthis.handleDrop(drag,drop)}))})).fail(notification.exception)},competencies.prototype.handleDrop=function(drag,drop){var fromid=$(drag).data("id"),toid=$(drop).data("id"),requests=[];if("course"==this.itemtype)requests=ajax.call([{methodname:"core_competency_reorder_course_competency",args:{courseid:this.itemid,competencyidfrom:fromid,competencyidto:toid}}]);else if("template"==this.itemtype)requests=ajax.call([{methodname:"core_competency_reorder_template_competency",args:{templateid:this.itemid,competencyidfrom:fromid,competencyidto:toid}}]);else{if("plan"!=this.itemtype)return;requests=ajax.call([{methodname:"core_competency_reorder_plan_competency",args:{planid:this.itemid,competencyidfrom:fromid,competencyidto:toid}}])}requests[0].fail(notification.exception)},competencies.prototype.pickCompetency=function(){var requests,pagerender,pageregion,pageContextIncludes,self=this;return self.pickerInstance||("template"!==self.itemtype&amp;&amp;"course"!==self.itemtype||(pageContextIncludes="parents"),self.pickerInstance=new Picker(self.pageContextId,!1,pageContextIncludes),self.pickerInstance.on("save",(function(e,data){var compIds=data.competencyIds,pendingPromise=new Pending;"course"===self.itemtype?(requests=[],$.each(compIds,(function(index,compId){requests.push({methodname:"core_competency_add_competency_to_course",args:{courseid:self.itemid,competencyid:compId}})})),requests.push({methodname:"tool_lp_data_for_course_competencies_page",args:{courseid:self.itemid,moduleid:0}}),pagerender="tool_lp/course_competencies_page",pageregion="coursecompetenciespage"):"template"===self.itemtype?(requests=[],$.each(compIds,(function(index,compId){requests.push({methodname:"core_competency_add_competency_to_template",args:{templateid:self.itemid,competencyid:compId}})})),requests.push({methodname:"tool_lp_data_for_template_competencies_page",args:{templateid:self.itemid,pagecontext:{contextid:self.pageContextId}}}),pagerender="tool_lp/template_competencies_page",pageregion="templatecompetenciespage"):"plan"===self.itemtype&amp;&amp;(requests=[],$.each(compIds,(function(index,compId){requests.push({methodname:"core_competency_add_competency_to_plan",args:{planid:self.itemid,competencyid:compId}})})),requests.push({methodname:"tool_lp_data_for_plan_page",args:{planid:self.itemid}}),pagerender="tool_lp/plan_page",pageregion="plan-page"),ajax.call(requests)[requests.length-1].then((function(context){return templates.render(pagerender,context)})).then((function(html,js){templates.replaceNode($('[data-region="'+pageregion+'"]'),html,js)})).then(pendingPromise.resolve).catch(notification.exception)}))),self.pickerInstance.display()},competencies.prototype.doDelete=function(deleteid){var requests=[],pagerender="",pageregion="";"course"==this.itemtype?(requests=ajax.call([{methodname:"core_competency_remove_competency_from_course",args:{courseid:this.itemid,competencyid:deleteid}},{methodname:"tool_lp_data_for_course_competencies_page",args:{courseid:this.itemid,moduleid:0}}]),pagerender="tool_lp/course_competencies_page",pageregion="coursecompetenciespage"):"template"==this.itemtype?(requests=ajax.call([{methodname:"core_competency_remove_competency_from_template",args:{templateid:this.itemid,competencyid:deleteid}},{methodname:"tool_lp_data_for_template_competencies_page",args:{templateid:this.itemid,pagecontext:{contextid:this.pageContextId}}}]),pagerender="tool_lp/template_competencies_page",pageregion="templatecompetenciespage"):"plan"==this.itemtype&amp;&amp;(requests=ajax.call([{methodname:"core_competency_remove_competency_from_plan",args:{planid:this.itemid,competencyid:deleteid}},{methodname:"tool_lp_data_for_plan_page",args:{planid:this.itemid}}]),pagerender="tool_lp/plan_page",pageregion="plan-page"),requests[1].done((function(context){templates.render(pagerender,context).done((function(html,js){$('[data-region="'+pageregion+'"]').replaceWith(html),templates.runTemplateJS(js)})).fail(notification.exception)})).fail(notification.exception)},competencies.prototype.deleteHandler=function(deleteid){var message,localthis=this;if("course"==localthis.itemtype)message="unlinkcompetencycourse";else if("template"==localthis.itemtype)message="unlinkcompetencytemplate";else{if("plan"!=localthis.itemtype)return;message="unlinkcompetencyplan"}ajax.call([{methodname:"core_competency_read_competency",args:{id:deleteid}}])[0].done((function(competency){str.get_strings([{key:"confirm",component:"moodle"},{key:message,component:"tool_lp",param:competency.shortname},{key:"confirm",component:"moodle"},{key:"cancel",component:"moodle"}]).done((function(strings){notification.confirm(strings[0],strings[1],strings[2],strings[3],(function(){localthis.doDelete(deleteid)}))})).fail(notification.exception)})).fail(notification.exception)},competencies.prototype.registerEvents=function(){var localthis=this;"course"==localthis.itemtype&amp;&amp;$('[data-region="coursecompetenciespage"]').on("change",'select[data-field="ruleoutcome"]',(function(e){var pendingPromise=new Pending,coursecompetencyid=$(e.target).data("id"),ruleoutcome=$(e.target).val();ajax.call([{methodname:"core_competency_set_course_competency_ruleoutcome",args:{coursecompetencyid:coursecompetencyid,ruleoutcome:ruleoutcome}},{methodname:"tool_lp_data_for_course_competencies_page",args:{courseid:localthis.itemid,moduleid:0}}])[1].then((function(context){return templates.render("tool_lp/course_competencies_page",context)})).then((function(html,js){return templates.replaceNode($('[data-region="coursecompetenciespage"]'),html,js)})).then(pendingPromise.resolve).catch(notification.exception)})),$('[data-region="actions"] button').click((function(e){var pendingPromise=new Pending;e.preventDefault(),localthis.pickCompetency().then(pendingPromise.resolve).catch()})),$('[data-action="delete-competency-link"]').click((function(e){e.preventDefault();var deleteid=$(e.target).closest("[data-id]").data("id");localthis.deleteHandler(deleteid)}))},competencies}));
/**
 * Module to get the scale values.
 *
 * @module     tool_lp/scalevalues
 * @copyright  2016 Serge Gauthier
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("tool_lp/scalevalues",["jquery","core/ajax"],(function($,ajax){var localCache=[];return{get_values:function(scaleid){var deferred=$.Deferred();return void 0===localCache[scaleid]?ajax.call([{methodname:"core_competency_get_scale_values",args:{scaleid:scaleid},done:function(scaleinfo){localCache[scaleid]=scaleinfo,deferred.resolve(scaleinfo)},fail:deferred.reject}]):deferred.resolve(localCache[scaleid]),deferred.promise()}}}));
/**
 * User competency workflow.
 *
 * @module     tool_lp/user_competency_workflow
 * @copyright  2015 Frédéric Massart - FMCorz.net
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("tool_lp/user_competency_workflow",["jquery","core/templates","core/ajax","core/notification","core/str","tool_lp/menubar","tool_lp/event_base"],(function($,Templates,Ajax,Notification,Str,Menubar,EventBase){var UserCompetencyWorkflow=function(){EventBase.prototype.constructor.apply(this,[])};return(UserCompetencyWorkflow.prototype=Object.create(EventBase.prototype))._nodeSelector='[data-node="user-competency"]',UserCompetencyWorkflow.prototype._cancelReviewRequest=function(data){var call={methodname:"core_competency_user_competency_cancel_review_request",args:{userid:data.userid,competencyid:data.competencyid}};Ajax.call([call])[0].then(function(){this._trigger("review-request-cancelled",data),this._trigger("status-changed",data)}.bind(this)).catch(function(){this._trigger("error-occured",data)}.bind(this))},UserCompetencyWorkflow.prototype.cancelReviewRequest=function(data){this._cancelReviewRequest(data)},UserCompetencyWorkflow.prototype._cancelReviewRequestHandler=function(e){e.preventDefault();var data=this._findUserCompetencyData($(e.target));this.cancelReviewRequest(data)},UserCompetencyWorkflow.prototype._requestReview=function(data){var call={methodname:"core_competency_user_competency_request_review",args:{userid:data.userid,competencyid:data.competencyid}};Ajax.call([call])[0].then(function(){this._trigger("review-requested",data),this._trigger("status-changed",data)}.bind(this)).catch(function(){this._trigger("error-occured",data)}.bind(this))},UserCompetencyWorkflow.prototype.requestReview=function(data){this._requestReview(data)},UserCompetencyWorkflow.prototype._requestReviewHandler=function(e){e.preventDefault();var data=this._findUserCompetencyData($(e.target));this.requestReview(data)},UserCompetencyWorkflow.prototype._startReview=function(data){var call={methodname:"core_competency_user_competency_start_review",args:{userid:data.userid,competencyid:data.competencyid}};Ajax.call([call])[0].then(function(){this._trigger("review-started",data),this._trigger("status-changed",data)}.bind(this)).catch(function(){this._trigger("error-occured",data)}.bind(this))},UserCompetencyWorkflow.prototype.startReview=function(data){this._startReview(data)},UserCompetencyWorkflow.prototype._startReviewHandler=function(e){e.preventDefault();var data=this._findUserCompetencyData($(e.target));this.startReview(data)},UserCompetencyWorkflow.prototype._stopReview=function(data){var call={methodname:"core_competency_user_competency_stop_review",args:{userid:data.userid,competencyid:data.competencyid}};Ajax.call([call])[0].then(function(){this._trigger("review-stopped",data),this._trigger("status-changed",data)}.bind(this)).catch(function(){this._trigger("error-occured",data)}.bind(this))},UserCompetencyWorkflow.prototype.stopReview=function(data){this._stopReview(data)},UserCompetencyWorkflow.prototype._stopReviewHandler=function(e){e.preventDefault();var data=this._findUserCompetencyData($(e.target));this.stopReview(data)},UserCompetencyWorkflow.prototype.enhanceMenubar=function(selector){Menubar.enhance(selector,{'[data-action="request-review"]':this._requestReviewHandler.bind(this),'[data-action="cancel-review-request"]':this._cancelReviewRequestHandler.bind(this)})},UserCompetencyWorkflow.prototype._findUserCompetencyData=function(node){var data,parent=node.parents(this._nodeSelector);if(1!=parent.length)throw new Error("The evidence node was not located.");if(void 0===(data=parent.data())||void 0===data.userid||void 0===data.competencyid)throw new Error("User competency data could not be found.");return data},UserCompetencyWorkflow.prototype.enhanceMenubar=function(selector){Menubar.enhance(selector,{'[data-action="request-review"]':this._requestReviewHandler.bind(this),'[data-action="cancel-review-request"]':this._cancelReviewRequestHandler.bind(this),'[data-action="start-review"]':this._startReviewHandler.bind(this),'[data-action="stop-review"]':this._stopReviewHandler.bind(this)})},UserCompetencyWorkflow.prototype.registerEvents=function(selector){var wrapper=$(selector);wrapper.find('[data-action="request-review"]').click(this._requestReviewHandler.bind(this)),wrapper.find('[data-action="cancel-review-request"]').click(this._cancelReviewRequestHandler.bind(this)),wrapper.find('[data-action="start-review"]').click(this._startReviewHandler.bind(this)),wrapper.find('[data-action="stop-review"]').click(this._stopReviewHandler.bind(this))},UserCompetencyWorkflow}));
/**
 * User evidence actions.
 *
 * @module     tool_lp/user_evidence_actions
 * @copyright  2015 Frédéric Massart - FMCorz.net
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("tool_lp/user_evidence_actions",["jquery","core/templates","core/ajax","core/notification","core/str","tool_lp/menubar","tool_lp/competencypicker_user_plans"],(function($,templates,ajax,notification,str,Menubar,PickerUserPlans){var UserEvidenceActions=function(type){if(this._type=type,"evidence"===type)this._region='[data-region="user-evidence-page"]',this._evidenceNode='[data-region="user-evidence-page"]',this._template="tool_lp/user_evidence_page",this._contextMethod="tool_lp_data_for_user_evidence_page";else{if("list"!==type)throw new TypeError("Unexpected type.");this._region='[data-region="user-evidence-list"]',this._evidenceNode='[data-region="user-evidence-node"]',this._template="tool_lp/user_evidence_list_page",this._contextMethod="tool_lp_data_for_user_evidence_list_page"}};return UserEvidenceActions.prototype._contextMethod=null,UserEvidenceActions.prototype._evidenceNode=null,UserEvidenceActions.prototype._region=null,UserEvidenceActions.prototype._template=null,UserEvidenceActions.prototype._type=null,UserEvidenceActions.prototype._getContextArgs=function(evidenceData){var args={};return"evidence"===this._type?args={id:evidenceData.id}:"list"===this._type&amp;&amp;(args={userid:evidenceData.userid}),args},UserEvidenceActions.prototype._renderView=function(context){var self=this;return templates.render(self._template,context).then((function(newhtml,newjs){templates.replaceNode($(self._region),newhtml,newjs)}))},UserEvidenceActions.prototype._callAndRefresh=function(calls,evidenceData){var self=this;return calls.push({methodname:self._contextMethod,args:self._getContextArgs(evidenceData)}),$.when.apply($.when,ajax.call(calls)).then((function(){return self._renderView(arguments[arguments.length-1])})).fail(notification.exception)},UserEvidenceActions.prototype._doDelete=function(evidenceData){var calls=[{methodname:"core_competency_delete_user_evidence",args:{id:evidenceData.id}}];this._callAndRefresh(calls,evidenceData)},UserEvidenceActions.prototype.deleteEvidence=function(evidenceData){var self=this;ajax.call([{methodname:"core_competency_read_user_evidence",args:{id:evidenceData.id}}])[0].done((function(evidence){str.get_strings([{key:"confirm",component:"moodle"},{key:"deleteuserevidence",component:"tool_lp",param:evidence.name},{key:"delete",component:"moodle"},{key:"cancel",component:"moodle"}]).done((function(strings){notification.confirm(strings[0],strings[1],strings[2],strings[3],(function(){self._doDelete(evidenceData)}))})).fail(notification.exception)})).fail(notification.exception)},UserEvidenceActions.prototype._deleteEvidenceHandler=function(e){e.preventDefault();var data=this._findEvidenceData($(e.target));this.deleteEvidence(data)},UserEvidenceActions.prototype._doCreateUserEvidenceCompetency=function(evidenceData,competencyIds){var calls=[];$.each(competencyIds,(function(index,competencyId){calls.push({methodname:"core_competency_create_user_evidence_competency",args:{userevidenceid:evidenceData.id,competencyid:competencyId}})})),this._callAndRefresh(calls,evidenceData)},UserEvidenceActions.prototype.createUserEvidenceCompetency=function(evidenceData){var self=this,picker=new PickerUserPlans(evidenceData.userid);picker.on("save",(function(e,data){var competencyIds=data.competencyIds;self._doCreateUserEvidenceCompetency(evidenceData,competencyIds,data.requestReview)})),picker.display()},UserEvidenceActions.prototype._createUserEvidenceCompetencyHandler=function(e){e.preventDefault();var data=this._findEvidenceData($(e.target));this.createUserEvidenceCompetency(data)},UserEvidenceActions.prototype._doDeleteUserEvidenceCompetency=function(evidenceData,competencyId){var calls=[];calls.push({methodname:"core_competency_delete_user_evidence_competency",args:{userevidenceid:evidenceData.id,competencyid:competencyId}}),this._callAndRefresh(calls,evidenceData)},UserEvidenceActions.prototype.deleteUserEvidenceCompetency=function(evidenceData,competencyId){this._doDeleteUserEvidenceCompetency(evidenceData,competencyId)},UserEvidenceActions.prototype._deleteUserEvidenceCompetencyHandler=function(e){var data=this._findEvidenceData($(e.currentTarget)),competencyId=$(e.currentTarget).data("id");e.preventDefault(),this.deleteUserEvidenceCompetency(data,competencyId)},UserEvidenceActions.prototype._doReviewUserEvidenceCompetencies=function(evidenceData){var calls=[{methodname:"core_competency_request_review_of_user_evidence_linked_competencies",args:{id:evidenceData.id}}];this._callAndRefresh(calls,evidenceData)},UserEvidenceActions.prototype.reviewUserEvidenceCompetencies=function(evidenceData){var self=this;ajax.call([{methodname:"core_competency_read_user_evidence",args:{id:evidenceData.id}}])[0].done((function(evidence){str.get_strings([{key:"confirm",component:"moodle"},{key:"sendallcompetenciestoreview",component:"tool_lp",param:evidence.name},{key:"confirm",component:"moodle"},{key:"cancel",component:"moodle"}]).done((function(strings){notification.confirm(strings[0],strings[1],strings[2],strings[3],(function(){self._doReviewUserEvidenceCompetencies(evidenceData)}))})).fail(notification.exception)})).fail(notification.exception)},UserEvidenceActions.prototype._reviewUserEvidenceCompetenciesHandler=function(e){e.preventDefault();var data=this._findEvidenceData($(e.target));this.reviewUserEvidenceCompetencies(data)},UserEvidenceActions.prototype._findEvidenceData=function(node){var data,parent=node.parentsUntil($(this._region).parent(),this._evidenceNode);if(1!=parent.length)throw new Error("The evidence node was not located.");if(void 0===(data=parent.data())||void 0===data.id)throw new Error("Evidence data could not be found.");return data},UserEvidenceActions.prototype.enhanceMenubar=function(selector){Menubar.enhance(selector,{'[data-action="user-evidence-delete"]':this._deleteEvidenceHandler.bind(this),'[data-action="link-competency"]':this._createUserEvidenceCompetencyHandler.bind(this),'[data-action="send-competencies-review"]':this._reviewUserEvidenceCompetenciesHandler.bind(this)})},UserEvidenceActions.prototype.registerEvents=function(){var wrapper=$(this._region);wrapper.find('[data-action="user-evidence-delete"]').click(this._deleteEvidenceHandler.bind(this)),wrapper.find('[data-action="link-competency"]').click(this._createUserEvidenceCompetencyHandler.bind(this)),wrapper.find('[data-action="delete-competency-link"]').click(this._deleteUserEvidenceCompetencyHandler.bind(this)),wrapper.find('[data-action="send-competencies-review"]').click(this._reviewUserEvidenceCompetenciesHandler.bind(this))},UserEvidenceActions}));
/**
 * Wrapper for the YUI M.core.notification class. Allows us to
 * use the YUI version in AMD code until it is replaced.
 *
 * @module     tool_lp/dialogue
 * @copyright  2015 Damyon Wiese &lt;damyon@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("tool_lp/dialogue",["core/yui"],(function(Y){var dialogue=function(title,content,afterShow,afterHide,wide,height){M.util.js_pending("tool_lp/dialogue:dialogue"),this.yuiDialogue=null;var parent=this;void 0===wide&amp;&amp;(wide=!1),Y.use("moodle-core-notification","timers",(function(){var width="480px";wide&amp;&amp;(width="800px"),height||(height="auto"),parent.yuiDialogue=new M.core.dialogue({headerContent:title,bodyContent:content,draggable:!0,visible:!1,center:!0,modal:!0,width:width,height:height}),parent.yuiDialogue.before("visibleChange",(function(){M.util.js_pending("tool_lp/dialogue:before:visibleChange")})),parent.yuiDialogue.after("visibleChange",(function(e){e.newVal?void 0!==afterShow?Y.soon((function(){afterShow(parent),parent.yuiDialogue.centerDialogue(),M.util.js_complete("tool_lp/dialogue:before:visibleChange")})):M.util.js_complete("tool_lp/dialogue:before:visibleChange"):void 0!==afterHide?Y.soon((function(){afterHide(parent),M.util.js_complete("tool_lp/dialogue:before:visibleChange")})):M.util.js_complete("tool_lp/dialogue:before:visibleChange")})),parent.yuiDialogue.show(),M.util.js_complete("tool_lp/dialogue:dialogue")}))};return dialogue.prototype.close=function(){this.yuiDialogue.hide(),this.yuiDialogue.destroy()},dialogue.prototype.getContent=function(){return this.yuiDialogue.bodyNode.getDOMNode()},dialogue}));
/**
 * Implement an accessible aria tree widget, from a nested unordered list.
 * Based on http://oaa-accessibility.org/example/41/
 *
 * To respond to selection changed events - use tree.on("selectionchanged", handler).
 * The handler will receive an array of nodes, which are the list items that are currently
 * selected. (Or a single node if multiselect is disabled).
 *
 * @module     tool_lp/tree
 * @copyright  2015 Damyon Wiese &lt;damyon@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("tool_lp/tree",["jquery","core/url","core/log"],(function($,url,log){var expandedImage=$('&lt;img alt="" src="'+url.imageUrl("t/expanded")+'"/&gt;'),collapsedImage=$('&lt;img alt="" src="'+url.imageUrl("t/collapsed")+'"/&gt;'),Tree=function(selector,multiSelect){this.treeRoot=$(selector),this.multiSelect=void 0===multiSelect||!0===multiSelect,this.items=this.treeRoot.find("li"),this.expandAll=this.items.length&lt;20,this.parents=this.treeRoot.find("li:has(ul)"),multiSelect&amp;&amp;this.treeRoot.attr("aria-multiselectable","true"),this.items.attr("aria-selected","false"),this.visibleItems=null,this.activeItem=null,this.lastActiveItem=null,this.keys={tab:9,enter:13,space:32,pageup:33,pagedown:34,end:35,home:36,left:37,up:38,right:39,down:40,eight:56,asterisk:106},this.init(),this.bindEventHandlers()};return Tree.prototype.init=function(){this.parents.attr("aria-expanded","true"),this.parents.prepend(expandedImage.clone()),this.items.attr("role","tree-item"),this.items.attr("tabindex","-1"),this.parents.attr("role","group"),this.treeRoot.attr("role","tree"),this.visibleItems=this.treeRoot.find("li");var thisObj=this;this.expandAll||(this.parents.each((function(){thisObj.collapseGroup($(this))})),this.expandGroup(this.parents.first()))},Tree.prototype.expandGroup=function(item){item.children("ul").show().attr("aria-hidden","false"),item.attr("aria-expanded","true"),item.children("img").attr("src",expandedImage.attr("src")),this.visibleItems=this.treeRoot.find("li:visible")},Tree.prototype.collapseGroup=function(item){item.children("ul").hide().attr("aria-hidden","true"),item.attr("aria-expanded","false"),item.children("img").attr("src",collapsedImage.attr("src")),this.visibleItems=this.treeRoot.find("li:visible")},Tree.prototype.toggleGroup=function(item){"true"==item.attr("aria-expanded")?this.collapseGroup(item):this.expandGroup(item)},Tree.prototype.triggerChange=function(){var allSelected=this.items.filter("[aria-selected=true]");this.multiSelect||(allSelected=allSelected.first()),this.treeRoot.trigger("selectionchanged",{selected:allSelected})},Tree.prototype.multiSelectItem=function(item){if(this.multiSelect){if(null!==this.lastActiveItem){for(var lastIndex=this.visibleItems.index(this.lastActiveItem),currentIndex=this.visibleItems.index(this.activeItem);lastIndex&lt;currentIndex;)$(this.visibleItems.get(lastIndex)).attr("aria-selected","true"),lastIndex++;for(;lastIndex&gt;currentIndex;)$(this.visibleItems.get(lastIndex)).attr("aria-selected","true"),lastIndex--}}else this.items.attr("aria-selected","false");item.attr("aria-selected","true"),this.triggerChange()},Tree.prototype.selectItem=function(item){for(var walk=item.parent();"tree"!=walk.attr("role");)"false"==(walk=walk.parent()).attr("aria-expanded")&amp;&amp;this.expandGroup(walk),walk=walk.parent();this.items.attr("aria-selected","false"),item.attr("aria-selected","true"),this.triggerChange()},Tree.prototype.toggleItem=function(item){if(this.multiSelect){var current=item.attr("aria-selected");current="true"===current?"false":"true",item.attr("aria-selected",current),this.triggerChange()}else this.selectItem(item)},Tree.prototype.updateFocus=function(item){this.lastActiveItem=this.activeItem,this.activeItem=item;for(var walk=item.parent();"tree"!=walk.attr("role");)"false"==(walk=walk.parent()).attr("aria-expanded")&amp;&amp;this.expandGroup(walk),walk=walk.parent();this.items.attr("tabindex","-1"),item.attr("tabindex",0)},Tree.prototype.handleKeyDown=function(item,e){var currentIndex=this.visibleItems.index(item),newItem=null,hasKeyModifier=e.shiftKey||e.ctrlKey||e.metaKey||e.altKey,thisObj=this;switch(e.keyCode){case this.keys.home:return(newItem=this.parents.first()).focus(),e.shiftKey?this.multiSelectItem(newItem):hasKeyModifier||this.selectItem(newItem),e.stopPropagation(),!1;case this.keys.end:return(newItem=this.visibleItems.last()).focus(),e.shiftKey?this.multiSelectItem(newItem):hasKeyModifier||this.selectItem(newItem),e.stopPropagation(),!1;case this.keys.enter:case this.keys.space:return e.shiftKey?this.multiSelectItem(item):e.metaKey||e.ctrlKey?this.toggleItem(item):this.selectItem(item),e.stopPropagation(),!1;case this.keys.left:if(item.has("ul")&amp;&amp;"true"==item.attr("aria-expanded"))this.collapseGroup(item);else{var itemParent=item.parent().parent();itemParent.is("li")&amp;&amp;(itemParent.focus(),e.shiftKey?this.multiSelectItem(itemParent):hasKeyModifier||this.selectItem(itemParent))}return e.stopPropagation(),!1;case this.keys.right:return item.has("ul")&amp;&amp;"false"==item.attr("aria-expanded")?this.expandGroup(item):(newItem=item.children("ul").children("li").first()).length&gt;0&amp;&amp;(newItem.focus(),e.shiftKey?this.multiSelectItem(newItem):hasKeyModifier||this.selectItem(newItem)),e.stopPropagation(),!1;case this.keys.up:if(currentIndex&gt;0){var prev=this.visibleItems.eq(currentIndex-1);prev.focus(),e.shiftKey?this.multiSelectItem(prev):hasKeyModifier||this.selectItem(prev)}return e.stopPropagation(),!1;case this.keys.down:if(currentIndex&lt;this.visibleItems.length-1){var next=this.visibleItems.eq(currentIndex+1);next.focus(),e.shiftKey?this.multiSelectItem(next):hasKeyModifier||this.selectItem(next)}return e.stopPropagation(),!1;case this.keys.asterisk:return this.parents.each((function(){thisObj.expandGroup($(this))})),e.stopPropagation(),!1;case this.keys.eight:return e.shiftKey&amp;&amp;(this.parents.each((function(){thisObj.expandGroup($(this))})),e.stopPropagation()),!1}return!0},Tree.prototype.handleKeyPress=function(item,e){if(e.altKey||e.ctrlKey||e.shiftKey||e.metaKey)return!0;switch(e.keyCode){case this.keys.tab:return!0;case this.keys.enter:case this.keys.home:case this.keys.end:case this.keys.left:case this.keys.right:case this.keys.up:case this.keys.down:return e.stopPropagation(),!1;default:var chr=String.fromCharCode(e.which),match=!1,itemIndex=this.visibleItems.index(item),itemCount=this.visibleItems.length,currentIndex=itemIndex+1;for(currentIndex==itemCount&amp;&amp;(currentIndex=0);currentIndex!=itemIndex;){var currentItem=this.visibleItems.eq(currentIndex),titleChr=currentItem.text().charAt(0);if(currentItem.has("ul")&amp;&amp;(titleChr=currentItem.find("span").text().charAt(0)),titleChr.toLowerCase()==chr){match=!0;break}(currentIndex+=1)==itemCount&amp;&amp;(currentIndex=0)}return!0===match&amp;&amp;this.updateFocus(this.visibleItems.eq(currentIndex)),e.stopPropagation(),!1}return!0},Tree.prototype.on=function(eventname,handler){"selectionchanged"!==eventname?log.warning('Invalid custom event name for tree. Only "selectionchanged" is supported.'):this.treeRoot.on(eventname,handler)},Tree.prototype.handleDblClick=function(item,e){return!!(e.altKey||e.ctrlKey||e.shiftKey||e.metaKey)||(this.updateFocus(item),this.toggleGroup(item),e.stopPropagation(),!1)},Tree.prototype.handleExpandCollapseClick=function(item,e){return this.toggleGroup(item),e.stopPropagation(),!1},Tree.prototype.handleClick=function(item,e){return e.shiftKey?this.multiSelectItem(item):e.metaKey||e.ctrlKey?this.toggleItem(item):this.selectItem(item),this.updateFocus(item),e.stopPropagation(),!1},Tree.prototype.handleBlur=function(){return!0},Tree.prototype.handleFocus=function(item){return this.updateFocus(item),!0},Tree.prototype.bindEventHandlers=function(){var thisObj=this;this.parents.dblclick((function(e){return thisObj.handleDblClick($(this),e)})),this.items.click((function(e){return thisObj.handleClick($(this),e)})),this.items.children("img").click((function(e){return thisObj.handleExpandCollapseClick($(this).parent(),e)})),this.items.keydown((function(e){return thisObj.handleKeyDown($(this),e)})),this.items.keypress((function(e){return thisObj.handleKeyPress($(this),e)})),this.items.focus((function(e){return thisObj.handleFocus($(this),e)})),this.items.blur((function(e){return thisObj.handleBlur($(this),e)}))},Tree}));
/**
 * Evidence delete.
 *
 * @module     tool_lp/evidence_delete
 * @copyright  2016 Frédéric Massart - FMCorz.net
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("tool_lp/evidence_delete",["jquery","core/notification","core/ajax","core/str","core/log"],(function($,Notification,Ajax,Str,Log){var selectors={};return{register:function(triggerSelector,containerSelector){void 0===selectors[triggerSelector]&amp;&amp;(selectors[triggerSelector]=$("body").delegate(triggerSelector,"click",(function(e){var parent=$(e.currentTarget).parents(containerSelector);if(!parent.length||parent.length&gt;1)Log.error("None or too many evidence container were found.");else{var evidenceId=parent.data("id");evidenceId?(e.preventDefault(),e.stopPropagation(),Str.get_strings([{key:"confirm",component:"moodle"},{key:"areyousure",component:"moodle"},{key:"delete",component:"moodle"},{key:"cancel",component:"moodle"}]).done((function(strings){Notification.confirm(strings[0],strings[1],strings[2],strings[3],(function(){Ajax.call([{methodname:"core_competency_delete_evidence",args:{id:evidenceId}}])[0].then((function(){parent.remove()})).fail(Notification.exception)}))})).fail(Notification.exception)):Log.error("Evidence ID was not found.")}})))}}}));
/**
 * Action selector.
 *
 * To handle 'save' events use: actionselector.on('save')
 * This will receive the information to display in popup.
 * The actions have the format [{'text': sometext, 'value' : somevalue}].
 *
 * @module     tool_lp/actionselector
 * @copyright  2016 Serge Gauthier - &lt;serge.gauthier.2@umontreal.ca&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("tool_lp/actionselector",["jquery","core/notification","core/ajax","core/templates","tool_lp/dialogue","tool_lp/event_base"],(function($,Notification,Ajax,Templates,Dialogue,EventBase){var ActionSelector=function(title,message,actions,confirm,cancel){EventBase.prototype.constructor.apply(this,[]),this._title=title,this._message=message,this._actions=actions,this._confirm=confirm,this._cancel=cancel,this._selectedValue=null,this._reset()};return(ActionSelector.prototype=Object.create(EventBase.prototype))._selectedValue=null,ActionSelector.prototype._popup=null,ActionSelector.prototype._title=null,ActionSelector.prototype._message=null,ActionSelector.prototype._actions=null,ActionSelector.prototype._confirm=null,ActionSelector.prototype._cancel=null,ActionSelector.prototype._afterRender=function(){var self=this;self._find('[data-action="action-selector-confirm"]').attr("disabled","disabled"),self._find('[data-region="action-selector-radio-buttons"]').change((function(){self._selectedValue=$("input[type='radio']:checked").val(),self._find('[data-action="action-selector-confirm"]').removeAttr("disabled"),self._refresh.bind(self)})),self._find('[data-action="action-selector-cancel"]').click((function(e){e.preventDefault(),self.close()})),self._find('[data-action="action-selector-confirm"]').click((function(e){e.preventDefault(),self._selectedValue.length&amp;&amp;(self._trigger("save",{action:self._selectedValue}),self.close())}))},ActionSelector.prototype.close=function(){this._popup.close(),this._reset()},ActionSelector.prototype.display=function(){var self=this;return self._render().then((function(html){self._popup=new Dialogue(self._title,html,self._afterRender.bind(self))})).fail(Notification.exception)},ActionSelector.prototype._find=function(selector){return $(this._popup.getContent()).find(selector)},ActionSelector.prototype._refresh=function(){var self=this;return self._render().then((function(html){self._find('[data-region="action-selector"]').replaceWith(html),self._afterRender()}))},ActionSelector.prototype._render=function(){var choices=[];for(var i in this._actions)choices.push(this._actions[i]);var content={message:this._message,choices:choices,confirm:this._confirm,cancel:this._cancel};return Templates.render("tool_lp/action_selector",content)},ActionSelector.prototype._reset=function(){this._popup=null,this._selectedValue=""},ActionSelector}));
/**
 * Handle actions on learning plan templates via ajax.
 *
 * @module     tool_lp/templateactions
 * @copyright  2015 Damyon Wiese &lt;damyon@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("tool_lp/templateactions",["jquery","core/templates","core/ajax","core/notification","core/str","tool_lp/actionselector"],(function($,templates,ajax,notification,str,Actionselector){var pagecontextid=0,templateid=0,deleteplans=!0,updatePage=function(newhtml,newjs){$('[data-region="managetemplates"]').replaceWith(newhtml),templates.runTemplateJS(newjs)},reloadList=function(context){templates.render("tool_lp/manage_templates_page",context).done(updatePage).fail(notification.exception)},doDelete=function(){ajax.call([{methodname:"core_competency_delete_template",args:{id:templateid,deleteplans:deleteplans}},{methodname:"tool_lp_data_for_templates_manage_page",args:{pagecontext:{contextid:pagecontextid}}}])[1].done(reloadList).fail(notification.exception)};return{deleteHandler:function(e){e.preventDefault();var id=$(this).attr("data-templateid");templateid=id,deleteplans=!0;var requests=ajax.call([{methodname:"core_competency_read_template",args:{id:templateid}},{methodname:"core_competency_template_has_related_data",args:{id:templateid}}]);requests[0].done((function(template){requests[1].done((function(templatehasrelateddata){templatehasrelateddata?str.get_strings([{key:"deletetemplate",component:"tool_lp",param:template.shortname},{key:"deletetemplatewithplans",component:"tool_lp"},{key:"deleteplans",component:"tool_lp"},{key:"unlinkplanstemplate",component:"tool_lp"},{key:"confirm",component:"moodle"},{key:"cancel",component:"moodle"}]).done((function(strings){var actions=[{text:strings[2],value:"delete"},{text:strings[3],value:"unlink"}],actionselector=new Actionselector(strings[0],strings[1],actions,strings[4],strings[5]);actionselector.display(),actionselector.on("save",(function(e,data){"delete"!=data.action&amp;&amp;(deleteplans=!1),doDelete()}))})).fail(notification.exception):str.get_strings([{key:"confirm",component:"moodle"},{key:"deletetemplate",component:"tool_lp",param:template.shortname},{key:"delete",component:"moodle"},{key:"cancel",component:"moodle"}]).done((function(strings){notification.confirm(strings[0],strings[1],strings[2],strings[3],doDelete)})).fail(notification.exception)})).fail(notification.exception)})).fail(notification.exception)},duplicateHandler:function(e){e.preventDefault(),templateid=$(this).attr("data-templateid"),ajax.call([{methodname:"core_competency_duplicate_template",args:{id:templateid}},{methodname:"tool_lp_data_for_templates_manage_page",args:{pagecontext:{contextid:pagecontextid}}}])[1].done(reloadList).fail(notification.exception)},init:function(contextid){pagecontextid=contextid}}}));
/**
 * Handle selecting parent competency in competency form.
 *
 * @module     tool_lp/parentcompetency_form
 * @copyright  2015 Issam Taboubi &lt;issam.taboubi@umontreal.ca&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("tool_lp/parentcompetency_form",["jquery","core/ajax","core/str","tool_lp/competencypicker","core/templates","core/notification"],(function($,ajax,Str,Picker,Templates,Notification){var ParentCompetencyForm=function(buttonSelector,inputHiddenSelector,staticElementSelector,frameworkId,pageContextId){this.buttonSelector=buttonSelector,this.inputHiddenSelector=inputHiddenSelector,this.staticElementSelector=staticElementSelector,this.frameworkId=frameworkId,this.pageContextId=pageContextId,this.registerEvents()};return ParentCompetencyForm.prototype.buttonSelector=null,ParentCompetencyForm.prototype.inputHiddenSelector=null,ParentCompetencyForm.prototype.staticElementSelector=null,ParentCompetencyForm.prototype.frameworkId=null,ParentCompetencyForm.prototype.pageContextId=null,ParentCompetencyForm.prototype.setParent=function(data){var self=this;0!==data.competencyId?ajax.call([{methodname:"core_competency_read_competency",args:{id:data.competencyId}}])[0].done((function(competency){$(self.staticElementSelector).html(competency.shortname),$(self.inputHiddenSelector).val(competency.id)})).fail(Notification.exception):Str.get_string("competencyframeworkroot","tool_lp").then((function(rootframework){$(self.staticElementSelector).html(rootframework),$(self.inputHiddenSelector).val(data.competencyId)})).fail(Notification.exception)},ParentCompetencyForm.prototype.registerEvents=function(){var self=this;$(self.buttonSelector).on("click",(function(e){e.preventDefault();var picker=new Picker(self.pageContextId,self.frameworkId,"self",!1);picker._render=function(){var self=this;return self._preRender().then((function(){var context={competencies:self._competencies,framework:self._getFramework(self._frameworkId),frameworks:self._frameworks,search:self._searchText,singleFramework:self._singleFramework};return Templates.render("tool_lp/competency_picker_competencyform",context)}))},picker.on("save",(function(e,data){self.setParent(data)})),picker.display()}))},{init:function(buttonSelector,inputSelector,staticElementSelector,frameworkId,pageContextId){new ParentCompetencyForm(buttonSelector,inputSelector,staticElementSelector,frameworkId,pageContextId)}}}));
/**
 * Aria menubar functionality. Enhances a simple nested list structure into a full aria widget.
 * Based on the open ajax example: http://oaa-accessibility.org/example/26/
 *
 * @module     tool_lp/menubar
 * @copyright  2015 Damyon Wiese &lt;damyon@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("tool_lp/menubar",["jquery"],(function($){var documentClickHandlerRegistered=!1,menuActive=!1,closeAllSubMenus=function(){$(".tool-lp-menu .tool-lp-sub-menu").attr("aria-hidden","true"),menuActive=!1},Menubar=function(menuRoot,handlers){this.menuRoot=menuRoot,this.handlers=handlers,this.rootMenus=this.menuRoot.children("li"),this.subMenus=this.rootMenus.children("ul"),this.subMenuItems=this.subMenus.children("li"),this.allItems=this.rootMenus.add(this.subMenuItems),this.activeItem=null,this.isChildOpen=!1,this.keys={tab:9,enter:13,esc:27,space:32,left:37,up:38,right:39,down:40},this.addAriaAttributes(),this.addEventListeners()};return Menubar.prototype.openSubMenu=function(menu){this.setOpenDirection(),closeAllSubMenus(),menu.attr("aria-hidden","false"),menuActive=!0},Menubar.prototype.addEventListeners=function(){var currentThis=this;!1===documentClickHandlerRegistered&amp;&amp;($(document).click((function(){menuActive&amp;&amp;closeAllSubMenus()})),documentClickHandlerRegistered=!0),this.subMenuItems.mouseenter((function(){return $(this).addClass("menu-hover"),!0})),this.subMenuItems.mouseout((function(){return $(this).removeClass("menu-hover"),!0})),this.allItems.click((function(e){return currentThis.handleClick($(this),e)})),this.allItems.keydown((function(e){return currentThis.handleKeyDown($(this),e)})),this.allItems.focus((function(){return currentThis.handleFocus($(this))})),this.allItems.blur((function(){return currentThis.handleBlur($(this))}))},Menubar.prototype.handleClick=function(item,e){if(e.stopPropagation(),item.parent().is(".tool-lp-menu"))"true"==item.children("ul").first().attr("aria-hidden")?this.openSubMenu(item.children("ul").first()):item.children("ul").first().attr("aria-hidden","true");else{this.allItems.removeClass("menu-hover menu-focus"),this.activeItem=null,this.menuRoot.find("ul").not(".root-level").attr("aria-hidden","true");var anchor=item.find("a").first(),clickEvent=new $.Event("click");clickEvent.target=anchor;var eventHandled=!1;this.handlers&amp;&amp;$.each(this.handlers,(function(selector,handler){if(!eventHandled&amp;&amp;item.find(selector).length&gt;0){var callable=$.proxy(handler,anchor);eventHandled=!1===callable(clickEvent)||clickEvent.isDefaultPrevented()}})),eventHandled||"#"===anchor.attr("href")||(window.location.href=anchor.attr("href"))}return!1},Menubar.prototype.handleFocus=function(item){if(null===this.activeItem)this.activeItem=item;else if(item[0]!=this.activeItem[0])return!0;var parentItems=this.activeItem.parentsUntil("ul.tool-lp-menu").filter("li");(this.allItems.removeClass("menu-focus"),this.activeItem.addClass("menu-focus"),parentItems.addClass("menu-focus"),!0===this.isChildOpen)&amp;&amp;(item.parent().is(".tool-lp-menu")&amp;&amp;"true"==item.attr("aria-haspopup")&amp;&amp;this.openSubMenu(item.children("ul").first()));return!0},Menubar.prototype.handleBlur=function(item){return item.removeClass("menu-focus"),!0},Menubar.prototype.setOpenDirection=function(){var pos=this.menuRoot.offset(),isRTL=$(document.body).hasClass("dir-rtl"),heightmenuRoot=this.rootMenus.outerHeight(),widthmenuRoot=this.rootMenus.outerWidth(),subMenuContainer=this.rootMenus.find("ul.tool-lp-sub-menu");subMenuContainer.css("margin-right",""),subMenuContainer.css("margin-left",""),subMenuContainer.css("margin-top",""),subMenuContainer.attr("aria-hidden",!1);var menuRealWidth=subMenuContainer.outerWidth(),menuRealHeight=subMenuContainer.outerHeight(),margintop=null,marginright=null,marginleft=null;pos.top-$(window).scrollTop()+menuRealHeight&gt;$(window).height()&amp;&amp;(margintop=menuRealHeight+heightmenuRoot,subMenuContainer.css("margin-top","-"+margintop+"px")),isRTL?pos.left-menuRealWidth&lt;0&amp;&amp;(marginright=menuRealWidth-widthmenuRoot,subMenuContainer.css("margin-right","-"+marginright+"px")):pos.left+menuRealWidth&gt;$(window).width()&amp;&amp;(marginleft=menuRealWidth-widthmenuRoot,subMenuContainer.css("margin-left","-"+marginleft+"px")),this.menuRoot.addClass("tool-lp-menu-open-left")},Menubar.prototype.handleKeyDown=function(item,e){if(e.altKey||e.ctrlKey)return!0;switch(e.keyCode){case this.keys.tab:this.menuRoot.find("ul").attr("aria-hidden","true"),this.allItems.removeClass("menu-focus"),this.activeItem=null,this.isChildOpen=!1;break;case this.keys.esc:var itemUL=item.parent();return itemUL.is(".tool-lp-menu")?item.children("ul").first().attr("aria-hidden","true"):(this.activeItem=itemUL.parent(),this.isChildOpen=!1,this.activeItem.focus(),itemUL.attr("aria-hidden","true")),e.stopPropagation(),!1;case this.keys.enter:case this.keys.space:return this.handleClick(item,e);case this.keys.left:return this.activeItem=this.moveToPrevious(item),this.activeItem.focus(),e.stopPropagation(),!1;case this.keys.right:return this.activeItem=this.moveToNext(item),this.activeItem.focus(),e.stopPropagation(),!1;case this.keys.up:return this.activeItem=this.moveUp(item),this.activeItem.focus(),e.stopPropagation(),!1;case this.keys.down:return this.activeItem=this.moveDown(item),this.activeItem.focus(),e.stopPropagation(),!1}return!0},Menubar.prototype.moveToNext=function(item){var itemUL=item.parent(),menuItems=itemUL.children("li"),menuNum=menuItems.length,menuIndex=menuItems.index(item),newItem=null,childMenu=null;if(itemUL.is(".tool-lp-menu"))newItem=menuIndex&lt;menuNum-1?item.next():menuItems.first(),"true"==item.attr("aria-haspopup")&amp;&amp;"false"==(childMenu=item.children("ul").first()).attr("aria-hidden")&amp;&amp;(childMenu.attr("aria-hidden","true"),this.isChildOpen=!0),item.removeClass("menu-focus"),"true"===newItem.attr("aria-haspopup")&amp;&amp;!0===this.isChildOpen&amp;&amp;(childMenu=newItem.children("ul").first(),this.openSubMenu(childMenu));else if("true"==item.attr("aria-haspopup"))newItem=(childMenu=item.children("ul").first()).children("li").first(),this.openSubMenu(childMenu);else{var parentMenus=null,rootItem=null;(parentMenus=item.parentsUntil("ul.tool-lp-menu").filter("ul").not(".tool-lp-menu")).attr("aria-hidden","true"),parentMenus.find("li").removeClass("menu-focus"),parentMenus.last().parent().removeClass("menu-focus"),rootItem=parentMenus.last().parent(),(newItem=(menuIndex=this.rootMenus.index(rootItem))&lt;this.rootMenus.length-1?rootItem.next():this.rootMenus.first()).addClass("menu-focus"),"true"==newItem.attr("aria-haspopup")&amp;&amp;(childMenu=newItem.children("ul").first(),newItem=childMenu.children("li").first(),this.openSubMenu(childMenu),this.isChildOpen=!0)}return newItem},Menubar.prototype.moveToPrevious=function(item){var itemUL=item.parent(),menuItems=itemUL.children("li"),menuIndex=menuItems.index(item),newItem=null,childMenu=null;if(itemUL.is(".tool-lp-menu"))newItem=menuIndex&gt;0?item.prev():menuItems.last(),"true"==item.attr("aria-haspopup")&amp;&amp;"false"==(childMenu=item.children("ul").first()).attr("aria-hidden")&amp;&amp;(childMenu.attr("aria-hidden","true"),this.isChildOpen=!0),item.removeClass("menu-focus"),"true"===newItem.attr("aria-haspopup")&amp;&amp;!0===this.isChildOpen&amp;&amp;(childMenu=newItem.children("ul").first(),this.openSubMenu(childMenu));else{var parentLI=itemUL.parent();parentLI.parent().is(".tool-lp-menu")?(itemUL.attr("aria-hidden","true"),item.removeClass("menu-focus"),parentLI.removeClass("menu-focus"),(newItem=(menuIndex=this.rootMenus.index(parentLI))&gt;0?parentLI.prev():this.rootMenus.last()).addClass("menu-focus"),"true"==newItem.attr("aria-haspopup")&amp;&amp;(childMenu=newItem.children("ul").first(),this.openSubMenu(childMenu),this.isChildOpen=!0,newItem=childMenu.children("li").first())):(newItem=itemUL.parent(),itemUL.attr("aria-hidden","true"),item.removeClass("menu-focus"))}return newItem},Menubar.prototype.moveDown=function(item,startChr){var itemUL=item.parent(),menuItems=itemUL.children("li").not(".separator"),menuNum=menuItems.length,menuIndex=menuItems.index(item),newItem=null,newItemUL=null;if(itemUL.is(".tool-lp-menu"))return"true"!=item.attr("aria-haspopup")?item:(newItem=(newItemUL=item.children("ul").first()).children("li").first(),this.openSubMenu(newItemUL),newItem);if(startChr){var match=!1,curNdx=menuIndex+1;for(curNdx==menuNum&amp;&amp;(curNdx=0);curNdx!=menuIndex;){if(menuItems.eq(curNdx).html().charAt(0).toLowerCase()==startChr){match=!0;break}(curNdx+=1)==menuNum&amp;&amp;(curNdx=0)}return!0===match?(newItem=menuItems.eq(curNdx),item.removeClass("menu-focus"),newItem):item}return newItem=menuIndex&lt;menuNum-1?menuItems.eq(menuIndex+1):menuItems.first(),item.removeClass("menu-focus"),newItem},Menubar.prototype.moveUp=function(item){var itemUL=item.parent(),menuItems=itemUL.children("li").not(".separator"),menuIndex=menuItems.index(item),newItem=null;return itemUL.is(".tool-lp-menu")?item:(newItem=menuIndex&gt;0?menuItems.eq(menuIndex-1):menuItems.last(),item.removeClass("menu-focus"),newItem)},Menubar.prototype.addAriaAttributes=function(){this.menuRoot.attr("role","menubar"),this.rootMenus.attr("role","menuitem"),this.rootMenus.attr("tabindex","0"),this.rootMenus.attr("aria-haspopup","true"),this.subMenus.attr("role","menu"),this.subMenus.attr("aria-hidden","true"),this.subMenuItems.attr("role","menuitem"),this.subMenuItems.attr("tabindex","-1"),this.menuRoot.addClass("tool-lp-menu"),this.allItems.addClass("tool-lp-menu-item"),this.rootMenus.addClass("tool-lp-root-menu"),this.subMenus.addClass("tool-lp-sub-menu"),this.subMenuItems.addClass("dropdown-item")},{enhance:function(selector,handler){$(selector).each((function(index,element){var menuRoot=$(element);!0!==menuRoot.data("menubarEnhanced")&amp;&amp;(new Menubar(menuRoot,handler),menuRoot.data("menubarEnhanced",!0))}))},closeAll:closeAllSubMenus}}));
/**
 * Competency rule all module.
 *
 * @module     tool_lp/competency_rule_all
 * @copyright  2015 Frédéric Massart - FMCorz.net
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("tool_lp/competency_rule_all",["jquery","core/str","tool_lp/competency_rule"],(function($,Str,RuleBase){var Rule=function(){RuleBase.apply(this,arguments)};return(Rule.prototype=Object.create(RuleBase.prototype)).getType=function(){return"core_competency\\competency_rule_all"},Rule.prototype.isValid=function(){return!0},Rule}));
/**
 * Display Competency in dialogue box.
 *
 * @module     tool_lp/Competencydialogue
 * @copyright  2015 Issam Taboubi &lt;issam.taboubi@umontreal.ca&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("tool_lp/competencydialogue",["jquery","core/notification","core/ajax","core/templates","core/str","tool_lp/dialogue"],(function($,notification,ajax,templates,str,Dialogue){var instance,Competencydialogue=function(){};return Competencydialogue.prototype.triggerCompetencyViewedEvent=function(competencyId){ajax.call([{methodname:"core_competency_competency_viewed",args:{id:competencyId}}])},Competencydialogue.prototype.showDialogue=function(competencyid,options){var datapromise=this.getCompetencyDataPromise(competencyid,options),localthis=this;datapromise.done((function(data){templates.render("tool_lp/competency_summary",data).done((function(html){localthis.triggerCompetencyViewedEvent(competencyid),new Dialogue(data.competency.shortname,html)})).fail(notification.exception)})).fail(notification.exception)},Competencydialogue.prototype.showDialogueFromData=function(dataSource){var localthis=this;templates.render("tool_lp/competency_summary",dataSource).done((function(html){localthis.triggerCompetencyViewedEvent(dataSource.id),new Dialogue(dataSource.shortname,html,localthis.enhanceDialogue)})).fail(notification.exception)},Competencydialogue.prototype.clickEventHandler=function(e){var compdialogue=e.data.compdialogue,currentTarget=$(e.currentTarget),competencyid=currentTarget.data("id"),includerelated=!currentTarget.data("excluderelated"),includecourses=currentTarget.data("includecourses");compdialogue.showDialogue(competencyid,{includerelated:includerelated,includecourses:includecourses}),e.preventDefault()},Competencydialogue.prototype.getCompetencyDataPromise=function(competencyid,options){return ajax.call([{methodname:"tool_lp_data_for_competency_summary",args:{competencyid:competencyid,includerelated:options.includerelated||!1,includecourses:options.includecourses||!1}}])[0].then((function(context){return context})).fail(notification.exception)},{init:function(){void 0===instance&amp;&amp;(instance=new Competencydialogue,$("body").delegate('[data-action="competency-dialogue"]',"click",{compdialogue:instance},instance.clickEventHandler.bind(instance)))}}}));
/**
 * Competency frameworks actions via ajax.
 *
 * @module     tool_lp/frameworkactions
 * @copyright  2015 Damyon Wiese &lt;damyon@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("tool_lp/frameworkactions",["jquery","core/templates","core/ajax","core/notification","core/str"],(function($,templates,ajax,notification,str){var pagecontextid=0,frameworkid=0,updatePage=function(newhtml,newjs){$('[data-region="managecompetencies"]').replaceWith(newhtml),templates.runTemplateJS(newjs)},reloadList=function(context){templates.render("tool_lp/manage_competency_frameworks_page",context).done(updatePage).fail(notification.exception)},doDelete=function(){var requests=ajax.call([{methodname:"core_competency_delete_competency_framework",args:{id:frameworkid}},{methodname:"tool_lp_data_for_competency_frameworks_manage_page",args:{pagecontext:{contextid:pagecontextid}}}]);requests[0].done((function(success){!1===success&amp;&amp;ajax.call([{methodname:"core_competency_read_competency_framework",args:{id:frameworkid}}])[0].done((function(framework){str.get_strings([{key:"frameworkcannotbedeleted",component:"tool_lp",param:framework.shortname},{key:"cancel",component:"moodle"}]).done((function(strings){notification.alert(null,strings[0])})).fail(notification.exception)}))})).fail(notification.exception),requests[1].done(reloadList).fail(notification.exception)};return{deleteHandler:function(e){e.preventDefault();var id=$(this).attr("data-frameworkid");frameworkid=id,ajax.call([{methodname:"core_competency_read_competency_framework",args:{id:frameworkid}}])[0].done((function(framework){str.get_strings([{key:"confirm",component:"moodle"},{key:"deletecompetencyframework",component:"tool_lp",param:framework.shortname},{key:"delete",component:"moodle"},{key:"cancel",component:"moodle"}]).done((function(strings){notification.confirm(strings[0],strings[1],strings[2],strings[3],doDelete)})).fail(notification.exception)})).fail(notification.exception)},duplicateHandler:function(e){e.preventDefault(),frameworkid=$(this).attr("data-frameworkid"),ajax.call([{methodname:"core_competency_duplicate_competency_framework",args:{id:frameworkid}},{methodname:"tool_lp_data_for_competency_frameworks_manage_page",args:{pagecontext:{contextid:pagecontextid}}}])[1].done(reloadList).fail(notification.exception)},init:function(contextid){pagecontextid=contextid}}}));
/**
 * Handle selection changes on the competency tree.
 *
 * @module     tool_lp/competencyselect
 * @copyright  2015 Damyon Wiese &lt;damyon@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("tool_lp/competencytree",["core/ajax","core/notification","core/templates","tool_lp/tree","tool_lp/competency_outcomes","jquery"],(function(ajax,notification,templates,Ariatree,CompOutcomes,$){var competencies={},competencyFrameworkId=0,competencyFrameworkShortName="",treeSelector="",currentNodeId="",competencyFramworkCanManage=!1,addChildren=function(parent,all){var i=0,current=!1;for(parent.haschildren=!1,parent.children=[],i=0;i&lt;all.length;i++)(current=all[i]).parentid==parent.id&amp;&amp;(parent.haschildren=!0,parent.children.push(current),addChildren(current,all))},loadCompetencies=function(searchtext){var deferred=$.Deferred();return templates.render("tool_lp/loading",{}).done((function(loadinghtml,loadingjs){templates.replaceNodeContents($(treeSelector),loadinghtml,loadingjs),ajax.call([{methodname:"core_competency_search_competencies",args:{searchtext:searchtext,competencyframeworkid:competencyFrameworkId}}])[0].done((function(result){competencies={};var i=0;for(i=0;i&lt;result.length;i++)competencies[result[i].id]=result[i];var children=[],competency=!1;for(i=0;i&lt;result.length;i++)competency=result[i],0===parseInt(competency.parentid,10)&amp;&amp;(children.push(competency),addChildren(competency,result));var context={shortname:competencyFrameworkShortName,canmanage:competencyFramworkCanManage,competencies:children};templates.render("tool_lp/competencies_tree_root",context).done((function(html,js){templates.replaceNodeContents($(treeSelector),$(html).html(),js);var tree=new Ariatree(treeSelector,!1);if(currentNodeId){var node=$(treeSelector).find("[data-id="+currentNodeId+"]");node.length&amp;&amp;(tree.selectItem(node),tree.updateFocus(node))}deferred.resolve(competencies)})).fail(deferred.reject)})).fail(deferred.reject)})),deferred.promise()},rememberCurrent=function(evt,params){var node=params.selected;currentNodeId=node.attr("data-id")};return{init:function(id,shortname,search,selector,canmanage,competencyid){competencyFrameworkId=id,competencyFrameworkShortName=shortname,competencyFramworkCanManage=canmanage,treeSelector=selector,loadCompetencies(search).fail(notification.exception),competencyid&gt;0&amp;&amp;(currentNodeId=competencyid),this.on("selectionchanged",rememberCurrent)},on:function(eventname,handler){$(treeSelector).on(eventname,handler)},getChildren:function(id){var children=[];return $.each(competencies,(function(index,competency){competency.parentid==id&amp;&amp;children.push(competency)})),children},getCompetencyFrameworkId:function(){return competencyFrameworkId},getCompetency:function(id){return competencies[id]},getCompetencyLevel:function(id){return this.getCompetency(id).path.replace(/^\/|\/$/g,"").split("/").length},hasChildren:function(id){return this.getChildren(id).length&gt;0},hasRule:function(id){var comp=this.getCompetency(id);return!!comp&amp;&amp;(comp.ruleoutcome!=CompOutcomes.OUTCOME_NONE&amp;&amp;comp.ruletype)},reloadCompetencies:function(){return loadCompetencies("").fail(notification.exception)},listCompetencies:function(){return competencies}}}));
/**
 * Plan actions via ajax.
 *
 * @module     tool_lp/planactions
 * @copyright  2015 David Monllao
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("tool_lp/planactions",["jquery","core/templates","core/ajax","core/notification","core/str","tool_lp/menubar","tool_lp/dialogue"],(function($,templates,ajax,notification,str,Menubar,Dialogue){var PlanActions=function(type){if(this._type=type,"plan"===type)this._region='[data-region="plan-page"]',this._planNode='[data-region="plan-page"]',this._template="tool_lp/plan_page",this._contextMethod="tool_lp_data_for_plan_page";else{if("plans"!==type)throw new TypeError("Unexpected type.");this._region='[data-region="plans"]',this._planNode='[data-region="plan-node"]',this._template="tool_lp/plans_page",this._contextMethod="tool_lp_data_for_plans_page"}};return PlanActions.prototype._contextMethod=null,PlanActions.prototype._planNode=null,PlanActions.prototype._region=null,PlanActions.prototype._template=null,PlanActions.prototype._type=null,PlanActions.prototype._getContextArgs=function(planData){var args={};return"plan"===this._type?args={planid:planData.id}:"plans"===this._type&amp;&amp;(args={userid:planData.userid}),args},PlanActions.prototype.refresh=function(selector){var planData=this._findPlanData($(selector));this._callAndRefresh([],planData)},PlanActions.prototype._renderView=function(context){var self=this;return templates.render(self._template,context).then((function(newhtml,newjs){$(self._region).replaceWith(newhtml),templates.runTemplateJS(newjs)}))},PlanActions.prototype._callAndRefresh=function(calls,planData){var callKey="tool_lp/planactions:_callAndRefresh-"+Math.floor(Math.random()*Math.floor(1e3));M.util.js_pending(callKey);var self=this;return calls.push({methodname:self._contextMethod,args:self._getContextArgs(planData)}),$.when.apply($,ajax.call(calls)).then((function(){return self._renderView(arguments[arguments.length-1])})).fail(notification.exception).always((function(){return M.util.js_complete(callKey)}))},PlanActions.prototype._doDelete=function(planData){var calls=[{methodname:"core_competency_delete_plan",args:{id:planData.id}}];this._callAndRefresh(calls,planData)},PlanActions.prototype.deletePlan=function(planData){var self=this;ajax.call([{methodname:"core_competency_read_plan",args:{id:planData.id}}])[0].done((function(plan){str.get_strings([{key:"confirm",component:"moodle"},{key:"deleteplan",component:"tool_lp",param:plan.name},{key:"delete",component:"moodle"},{key:"cancel",component:"moodle"}]).done((function(strings){notification.confirm(strings[0],strings[1],strings[2],strings[3],(function(){self._doDelete(planData)}))})).fail(notification.exception)})).fail(notification.exception)},PlanActions.prototype._doReopenPlan=function(planData){var calls=[{methodname:"core_competency_reopen_plan",args:{planid:planData.id}}];this._callAndRefresh(calls,planData)},PlanActions.prototype.reopenPlan=function(planData){var self=this;ajax.call([{methodname:"core_competency_read_plan",args:{id:planData.id}}])[0].done((function(plan){str.get_strings([{key:"confirm",component:"moodle"},{key:"reopenplanconfirm",component:"tool_lp",param:plan.name},{key:"reopenplan",component:"tool_lp"},{key:"cancel",component:"moodle"}]).done((function(strings){notification.confirm(strings[0],strings[1],strings[2],strings[3],(function(){self._doReopenPlan(planData)}))})).fail(notification.exception)})).fail(notification.exception)},PlanActions.prototype._doCompletePlan=function(planData){var calls=[{methodname:"core_competency_complete_plan",args:{planid:planData.id}}];this._callAndRefresh(calls,planData)},PlanActions.prototype.completePlan=function(planData){var self=this;ajax.call([{methodname:"core_competency_read_plan",args:{id:planData.id}}])[0].done((function(plan){str.get_strings([{key:"confirm",component:"moodle"},{key:"completeplanconfirm",component:"tool_lp",param:plan.name},{key:"completeplan",component:"tool_lp"},{key:"cancel",component:"moodle"}]).done((function(strings){notification.confirm(strings[0],strings[1],strings[2],strings[3],(function(){self._doCompletePlan(planData)}))})).fail(notification.exception)})).fail(notification.exception)},PlanActions.prototype._doUnlinkPlan=function(planData){var calls=[{methodname:"core_competency_unlink_plan_from_template",args:{planid:planData.id}}];this._callAndRefresh(calls,planData)},PlanActions.prototype.unlinkPlan=function(planData){var self=this;ajax.call([{methodname:"core_competency_read_plan",args:{id:planData.id}}])[0].done((function(plan){str.get_strings([{key:"confirm",component:"moodle"},{key:"unlinkplantemplateconfirm",component:"tool_lp",param:plan.name},{key:"unlinkplantemplate",component:"tool_lp"},{key:"cancel",component:"moodle"}]).done((function(strings){notification.confirm(strings[0],strings[1],strings[2],strings[3],(function(){self._doUnlinkPlan(planData)}))})).fail(notification.exception)})).fail(notification.exception)},PlanActions.prototype._doRequestReview=function(planData){var calls=[{methodname:"core_competency_plan_request_review",args:{id:planData.id}}];this._callAndRefresh(calls,planData)},PlanActions.prototype.requestReview=function(planData){this._doRequestReview(planData)},PlanActions.prototype._doCancelReviewRequest=function(planData){var calls=[{methodname:"core_competency_plan_cancel_review_request",args:{id:planData.id}}];this._callAndRefresh(calls,planData)},PlanActions.prototype.cancelReviewRequest=function(planData){this._doCancelReviewRequest(planData)},PlanActions.prototype._doStartReview=function(planData){var calls=[{methodname:"core_competency_plan_start_review",args:{id:planData.id}}];this._callAndRefresh(calls,planData)},PlanActions.prototype.startReview=function(planData){this._doStartReview(planData)},PlanActions.prototype._doStopReview=function(planData){var calls=[{methodname:"core_competency_plan_stop_review",args:{id:planData.id}}];this._callAndRefresh(calls,planData)},PlanActions.prototype.stopReview=function(planData){this._doStopReview(planData)},PlanActions.prototype._doApprove=function(planData){var calls=[{methodname:"core_competency_approve_plan",args:{id:planData.id}}];this._callAndRefresh(calls,planData)},PlanActions.prototype.approve=function(planData){this._doApprove(planData)},PlanActions.prototype._doUnapprove=function(planData){var calls=[{methodname:"core_competency_unapprove_plan",args:{id:planData.id}}];this._callAndRefresh(calls,planData)},PlanActions.prototype.unapprove=function(planData){this._doUnapprove(planData)},PlanActions.prototype._showLinkedCoursesHandler=function(e){e.preventDefault();var competencyid=$(e.target).data("id");ajax.call([{methodname:"tool_lp_list_courses_using_competency",args:{id:competencyid}}])[0].done((function(courses){var context={courses:courses};templates.render("tool_lp/linked_courses_summary",context).done((function(html){str.get_string("linkedcourses","tool_lp").done((function(linkedcourses){new Dialogue(linkedcourses,html)})).fail(notification.exception)})).fail(notification.exception)})).fail(notification.exception)},PlanActions.prototype._eventHandler=function(method,e){e.preventDefault();var data=this._findPlanData($(e.target));this[method](data)},PlanActions.prototype._findPlanData=function(node){var data,parent=node.parentsUntil($(this._region).parent(),this._planNode);if(1!=parent.length)throw new Error("The plan node was not located.");if(void 0===(data=parent.data())||void 0===data.id)throw new Error("Plan data could not be found.");return data},PlanActions.prototype.enhanceMenubar=function(selector){Menubar.enhance(selector,{'[data-action="plan-delete"]':this._eventHandler.bind(this,"deletePlan"),'[data-action="plan-complete"]':this._eventHandler.bind(this,"completePlan"),'[data-action="plan-reopen"]':this._eventHandler.bind(this,"reopenPlan"),'[data-action="plan-unlink"]':this._eventHandler.bind(this,"unlinkPlan"),'[data-action="plan-request-review"]':this._eventHandler.bind(this,"requestReview"),'[data-action="plan-cancel-review-request"]':this._eventHandler.bind(this,"cancelReviewRequest"),'[data-action="plan-start-review"]':this._eventHandler.bind(this,"startReview"),'[data-action="plan-stop-review"]':this._eventHandler.bind(this,"stopReview"),'[data-action="plan-approve"]':this._eventHandler.bind(this,"approve"),'[data-action="plan-unapprove"]':this._eventHandler.bind(this,"unapprove")})},PlanActions.prototype.registerEvents=function(){var wrapper=$(this._region);wrapper.find('[data-action="plan-delete"]').click(this._eventHandler.bind(this,"deletePlan")),wrapper.find('[data-action="plan-complete"]').click(this._eventHandler.bind(this,"completePlan")),wrapper.find('[data-action="plan-reopen"]').click(this._eventHandler.bind(this,"reopenPlan")),wrapper.find('[data-action="plan-unlink"]').click(this._eventHandler.bind(this,"unlinkPlan")),wrapper.find('[data-action="plan-request-review"]').click(this._eventHandler.bind(this,"requestReview")),wrapper.find('[data-action="plan-cancel-review-request"]').click(this._eventHandler.bind(this,"cancelReviewRequest")),wrapper.find('[data-action="plan-start-review"]').click(this._eventHandler.bind(this,"startReview")),wrapper.find('[data-action="plan-stop-review"]').click(this._eventHandler.bind(this,"stopReview")),wrapper.find('[data-action="plan-approve"]').click(this._eventHandler.bind(this,"approve")),wrapper.find('[data-action="plan-unapprove"]').click(this._eventHandler.bind(this,"unapprove")),wrapper.find('[data-action="find-courses-link"]').click(this._showLinkedCoursesHandler.bind(this))},PlanActions}));
/**
 * Define all of the selectors we will be using within MoodleNet plugin.
 *
 * @module     tool_moodlenet/selectors
 * @copyright  2020 Mathew May &lt;mathew.solutions&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("tool_moodlenet/selectors",[],(function(){return{action:{browse:'[data-action="browse"]',submit:'[data-action="submit"]',showMoodleNet:'[data-action="show-moodlenet"]',closeOption:'[data-action="close-chooser-option-summary"]'},region:{clearIcon:'[data-region="clear-icon"]',courses:'[data-region="mnet-courses"]',instancePage:'[data-region="moodle-net"]',searchInput:'[data-region="search-input"]',searchIcon:'[data-region="search-icon"]',selectPage:'[data-region="moodle-net-select"]',spinner:'[data-region="spinner"]',validationArea:'[data-region="validation-area"]',carousel:'[data-region="carousel"]',moodleNet:'[data-region="pluginCarousel"]'}}}));
/**
 * Our validator that splits the user's input then fires off to a webservice
 *
 * @module     tool_moodlenet/validator
 * @copyright  2020 Mathew May &lt;mathew.solutions&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("tool_moodlenet/validator",["jquery","core/ajax","core/str","core/notification"],(function($,Ajax,Str,Notification){return{validation:function(inputElement){var inputValue=inputElement.value;return""!==inputValue&amp;&amp;inputValue.includes("@")||$.when(Str.get_string("profilevalidationerror","tool_moodlenet")).then((function(strings){return Promise.reject().catch((function(){return{result:!1,message:strings[0]}}))})).fail(Notification.exception),Ajax.call([{methodname:"tool_moodlenet_verify_webfinger",args:{profileurl:inputValue,course:inputElement.dataset.courseid,section:inputElement.dataset.sectionid}}])[0].then((function(result){return result})).catch()}}}));
/**
 * When returning to Moodle let the user select which course to add the resource to.
 *
 * @module     tool_moodlenet/select_page
 * @copyright  2020 Mathew May &lt;mathew.solutions&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("tool_moodlenet/select_page",["core/ajax","core/templates","tool_moodlenet/selectors","core/notification"],(function(Ajax,Templates,Selectors,Notification){var importId,searchCourses=function(inputValue,page,areaReplace){var searchIcon=page.querySelector(Selectors.region.searchIcon),clearIcon=page.querySelector(Selectors.region.clearIcon);""!==inputValue?(searchIcon.classList.add("d-none"),clearIcon.parentElement.classList.remove("d-none")):(searchIcon.classList.remove("d-none"),clearIcon.parentElement.classList.add("d-none"));var args={searchvalue:inputValue};Ajax.call([{methodname:"tool_moodlenet_search_courses",args:args}])[0].then((function(result){return 0===result.courses.length?function(areaReplace){return Templates.renderPix("courses","tool_moodlenet").then((function(img){return img})).then((function(img){var temp=document.createElement("div");return temp.innerHTML=img.trim(),Templates.render("core_course/no-courses",{nocoursesimg:temp.firstChild.src})})).then((function(html,js){Templates.replaceNodeContents(areaReplace,html,js),areaReplace.classList.add("mx-auto"),areaReplace.classList.add("w-25")}))}(areaReplace):(result.courses.forEach((function(course){course.viewurl+="&amp;id="+importId})),function(areaReplace,courses){return Templates.render("tool_moodlenet/view-cards",{courses:courses}).then((function(html,js){Templates.replaceNodeContents(areaReplace,html,js),areaReplace.classList.remove("mx-auto"),areaReplace.classList.remove("w-25")}))}(areaReplace,result.courses))})).catch(Notification.exception)},registerListenerEvents=function(page){var input=page.querySelector(Selectors.region.searchInput),courseArea=page.querySelector(Selectors.region.courses);page.querySelector(Selectors.region.clearIcon).addEventListener("click",(function(){input.value="",searchCourses("",page,courseArea)})),input.addEventListener("input",debounce((function(){searchCourses(input.value,page,courseArea)}),300))},addCourses=function(page){var courseArea=page.querySelector(Selectors.region.courses);searchCourses("",page,courseArea)},debounce=function(func,wait,immediate){var timeout;return function(){var context=this,args=arguments,later=function(){timeout=null,immediate||func.apply(context,args)},callNow=immediate&amp;&amp;!timeout;clearTimeout(timeout),timeout=setTimeout(later,wait),callNow&amp;&amp;func.apply(context,args)}};return{init:function(importIdString){importId=importIdString;var page=document.querySelector(Selectors.region.selectPage);registerListenerEvents(page),addCourses(page)}}}));
/**
 * Our basic form manager for when a user either enters
 * their profile url or just wants to browse.
 *
 * This file is a mishmash of JS functions we need for both the standalone (M3.7, M3.8)
 * plugin &amp; Moodle 3.9 functions. The 3.9 Functions have a base understanding that certain
 * things exist i.e. directory structures for templates. When this feature goes 3.9+ only
 * The goal is that we can quickly gut all AMD modules into bare JS files and use ES6 guidelines.
 * Till then this will have to do.
 *
 * @module     tool_moodlenet/instance_form
 * @copyright  2020 Mathew May &lt;mathew.solutions&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("tool_moodlenet/instance_form",["tool_moodlenet/validator","tool_moodlenet/selectors","core/loadingicon","core/templates","core/notification","jquery"],(function(Validator,Selectors,LoadingIcon,Templates,Notification,$){var chooserNavigateToMnet=function(showMoodleNet,footerData,carousel,modal){showMoodleNet.innerHTML="";var page,spinnerPromise=LoadingIcon.addIconToContainer(showMoodleNet),transitionPromiseResolver=null,transitionPromise=new Promise((resolve=&gt;{transitionPromiseResolver=resolve}));$.when(spinnerPromise,transitionPromise).then((function(){Templates.replaceNodeContents(showMoodleNet,footerData.customcarouseltemplate,"")})).catch(Notification.exception),(page=showMoodleNet).addEventListener("click",(function(e){if(e.target.matches(Selectors.action.submit)){var input=page.querySelector('[data-var="mnet-link"]'),overlay=page.querySelector(Selectors.region.spinner),validationArea=document.querySelector(Selectors.region.validationArea);overlay.classList.remove("d-none");var spinner=LoadingIcon.addIconToContainerWithPromise(overlay);Validator.validation(input).then((function(result){spinner.resolve(),overlay.classList.add("d-none"),result.result?(input.classList.remove("is-invalid"),input.classList.add("is-valid"),validationArea.innerText=result.message,validationArea.classList.remove("text-danger"),validationArea.classList.add("text-success"),setTimeout((function(){window.location=result.domain}),1e3)):(input.classList.add("is-invalid"),validationArea.innerText=result.message,validationArea.classList.add("text-danger"))})).catch()}})),carousel.one("slid.bs.carousel",(function(){transitionPromiseResolver()})),carousel.carousel(2),modal.setFooter(Templates.render("tool_moodlenet/chooser_footer_close_mnet",{}))};return{footerClickListener:function(e,footerData,modal){if(e.target.matches(Selectors.action.showMoodleNet)||e.target.closest(Selectors.action.showMoodleNet)){e.preventDefault();const carousel=$(modal.getBody()[0].querySelector(Selectors.region.carousel)),showMoodleNet=carousel.find(Selectors.region.moodleNet)[0];chooserNavigateToMnet(showMoodleNet,footerData,carousel,modal)}if(e.target.matches(Selectors.action.closeOption)){!function(carousel,modal,footerData){carousel.carousel(0),modal.setFooter(footerData.customfootertemplate)}($(modal.getBody()[0].querySelector(Selectors.region.carousel)),modal,footerData)}}}}));
/**
 * Unified filter page JS module for the course participants page.
 *
 * @module     tool_policy/acceptances_filter
 * @copyright  2017 Jun Pataleta
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("tool_policy/acceptances_filter",["jquery","core/form-autocomplete","core/str","core/notification"],(function($,Autocomplete,Str,Notification){var SELECTORS_UNIFIED_FILTERS="#unified-filters";return{init:function(){!function(){M.util.js_pending("acceptances_filter_datasource"),Str.get_strings([{key:"filterplaceholder",component:"tool_policy"},{key:"nofiltersapplied",component:"tool_policy"}]).done((function(langstrings){var placeholder=langstrings[0],noSelectionString=langstrings[1];Autocomplete.enhance(SELECTORS_UNIFIED_FILTERS,!0,"tool_policy/acceptances_filter_datasource",placeholder,!1,!0,noSelectionString,!0).then((function(){M.util.js_complete("acceptances_filter_datasource")})).fail(Notification.exception)})).fail(Notification.exception);var last=$(SELECTORS_UNIFIED_FILTERS).val();$(SELECTORS_UNIFIED_FILTERS).on("change",(function(){var current=$(this).val(),listoffilters=[],textfilters=[],updatedselectedfilters=!1;if($.each(current,(function(index,catoption){var catandoption=catoption.split(":",2);if(2!==catandoption.length)return textfilters.push(catoption),!0;var category=catandoption[0],option=catandoption[1];return void 0!==listoffilters[category]&amp;&amp;(updatedselectedfilters=!0),listoffilters[category]=option,!0})),updatedselectedfilters){var updatefilters=[];for(var category in listoffilters)updatefilters.push(category+":"+listoffilters[category]);updatefilters=updatefilters.concat(textfilters),$(this).val(updatefilters)}last.join(",")!=current.join(",")&amp;&amp;this.form.submit()}))}()},getForm:function(){return $(SELECTORS_UNIFIED_FILTERS).closest("form")}}}));
define("tool_policy/jquery-eu-cookie-law-popup",["jquery"],(function($){window.console||(window.console={}),window.console.log||(window.console.log=function(){}),$.fn.euCookieLawPopup=function(){var _self=this;_self.params={cookiePolicyUrl:"/?cookie-policy",popupPosition:"top",colorStyle:"default",compactStyle:!1,popupTitle:"This website is using cookies",popupText:"We use cookies to ensure that we give you the best experience on our website. If you continue without changing your settings, we'll assume that you are happy to receive all cookies on this website.",buttonContinueTitle:"Continue",buttonLearnmoreTitle:"Learn&amp;nbsp;more",buttonLearnmoreOpenInNewWindow:!0,agreementExpiresInDays:30,autoAcceptCookiePolicy:!1,htmlMarkup:null},_self.vars={INITIALISED:!1,HTML_MARKUP:null,COOKIE_NAME:"EU_COOKIE_LAW_CONSENT"};var setUserAcceptsCookies=function(consent){var d=new Date,expiresInDays=24*_self.params.agreementExpiresInDays*60*60*1e3;d.setTime(d.getTime()+expiresInDays);var expires="expires="+d.toGMTString();document.cookie=_self.vars.COOKIE_NAME+"="+consent+"; "+expires+";path=/",$(document).trigger("user_cookie_consent_changed",{consent:consent})},hideContainer=function(){$(".eupopup-container").animate({opacity:0,height:0},200,(function(){$(".eupopup-container").hide(0)}))};return{init:function(settings){!function(object,markup,settings){if(object){var className=$(object).attr("class")?$(object).attr("class"):"";className.indexOf("eupopup-top")&gt;-1?_self.params.popupPosition="top":className.indexOf("eupopup-fixedtop")&gt;-1?_self.params.popupPosition="fixedtop":className.indexOf("eupopup-bottomright")&gt;-1?_self.params.popupPosition="bottomright":className.indexOf("eupopup-bottomleft")&gt;-1?_self.params.popupPosition="bottomleft":className.indexOf("eupopup-bottom")&gt;-1?_self.params.popupPosition="bottom":className.indexOf("eupopup-block")&gt;-1&amp;&amp;(_self.params.popupPosition="block"),className.indexOf("eupopup-color-default")&gt;-1?_self.params.colorStyle="default":className.indexOf("eupopup-color-inverse")&gt;-1&amp;&amp;(_self.params.colorStyle="inverse"),className.indexOf("eupopup-style-compact")&gt;-1&amp;&amp;(_self.params.compactStyle=!0)}markup&amp;&amp;(_self.params.htmlMarkup=markup),settings&amp;&amp;(void 0!==settings.cookiePolicyUrl&amp;&amp;(_self.params.cookiePolicyUrl=settings.cookiePolicyUrl),void 0!==settings.popupPosition&amp;&amp;(_self.params.popupPosition=settings.popupPosition),void 0!==settings.colorStyle&amp;&amp;(_self.params.colorStyle=settings.colorStyle),void 0!==settings.popupTitle&amp;&amp;(_self.params.popupTitle=settings.popupTitle),void 0!==settings.popupText&amp;&amp;(_self.params.popupText=settings.popupText),void 0!==settings.buttonContinueTitle&amp;&amp;(_self.params.buttonContinueTitle=settings.buttonContinueTitle),void 0!==settings.buttonLearnmoreTitle&amp;&amp;(_self.params.buttonLearnmoreTitle=settings.buttonLearnmoreTitle),void 0!==settings.buttonLearnmoreOpenInNewWindow&amp;&amp;(_self.params.buttonLearnmoreOpenInNewWindow=settings.buttonLearnmoreOpenInNewWindow),void 0!==settings.agreementExpiresInDays&amp;&amp;(_self.params.agreementExpiresInDays=settings.agreementExpiresInDays),void 0!==settings.autoAcceptCookiePolicy&amp;&amp;(_self.params.autoAcceptCookiePolicy=settings.autoAcceptCookiePolicy),void 0!==settings.htmlMarkup&amp;&amp;(_self.params.htmlMarkup=settings.htmlMarkup))}($(".eupopup").first(),$(".eupopup-markup").html(),settings),function(){for(var userAcceptedCookies=!1,cookies=document.cookie.split(";"),i=0;i&lt;cookies.length;i++){var c=cookies[i].trim();-1!==c.indexOf(_self.vars.COOKIE_NAME)&amp;&amp;(userAcceptedCookies=c.substring(_self.vars.COOKIE_NAME.length+1,c.length))}return userAcceptedCookies}()?$(document).trigger("user_cookie_already_accepted",{consent:!0}):_self.vars.INITIALISED||(_self.vars.INITIALISED=!0,_self.vars.HTML_MARKUP=_self.params.htmlMarkup?_self.params.htmlMarkup:'&lt;div class="eupopup-container eupopup-container-'+_self.params.popupPosition+(_self.params.compactStyle?" eupopup-style-compact":"")+" eupopup-color-"+_self.params.colorStyle+'"&gt;&lt;div class="eupopup-head"&gt;'+_self.params.popupTitle+'&lt;/div&gt;&lt;div class="eupopup-body"&gt;'+_self.params.popupText+'&lt;/div&gt;&lt;div class="eupopup-buttons"&gt;&lt;a href="#" class="eupopup-button eupopup-button_1"&gt;'+_self.params.buttonContinueTitle+'&lt;/a&gt;&lt;a href="'+_self.params.cookiePolicyUrl+'"'+(_self.params.buttonLearnmoreOpenInNewWindow?" target=_blank ":"")+' class="eupopup-button eupopup-button_2"&gt;'+_self.params.buttonLearnmoreTitle+'&lt;/a&gt;&lt;div class="clearfix"&gt;&lt;/div&gt;&lt;/div&gt;&lt;a href="#" class="eupopup-closebutton"&gt;x&lt;/a&gt;&lt;/div&gt;',$(".eupopup-block").length&gt;0?$(".eupopup-block").append(_self.vars.HTML_MARKUP):$("BODY").append(_self.vars.HTML_MARKUP),$(".eupopup-button_1").click((function(){return setUserAcceptsCookies(!0),hideContainer(),!1})),$(".eupopup-closebutton").click((function(){return setUserAcceptsCookies(!0),hideContainer(),!1})),$(".eupopup-container").show(),_self.params.autoAcceptCookiePolicy&amp;&amp;setUserAcceptsCookies(!0))}}}}));
/**
 * Adds support for confirmation via JS modal for some management actions at the Manage policies page.
 *
 * @module      tool_policy/managedocsactions
 * @copyright   2018 David Mudrák &lt;david@moodle.com&gt;
 * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("tool_policy/managedocsactions",["jquery","core/log","core/config","core/str","core/modal_factory","core/modal_events"],(function($,Log,Config,Str,ModalFactory,ModalEvents){var ACTION_LINKS="[data-action]",ACTION_MAKE_CURRENT='[data-action="makecurrent"]',ACTION_INACTIVATE='[data-action="inactivate"]',ACTION_DELETE='[data-action="delete"]';function ManageDocsActions(base){this.base=base,this.initEvents()}return ManageDocsActions.prototype.initEvents=function(){this.base.on("click",ACTION_LINKS,(function(e){e.stopPropagation();var promise,strings,link=$(e.currentTarget);if(link.is(ACTION_MAKE_CURRENT))promise=Str.get_strings([{key:"activating",component:"tool_policy"},{key:"activateconfirm",component:"tool_policy",param:{name:link.closest("[data-policy-name]").attr("data-policy-name"),revision:link.closest("[data-policy-revision]").attr("data-policy-revision")}},{key:"activateconfirmyes",component:"tool_policy"}]);else if(link.is(ACTION_INACTIVATE))promise=Str.get_strings([{key:"inactivating",component:"tool_policy"},{key:"inactivatingconfirm",component:"tool_policy",param:{name:link.closest("[data-policy-name]").attr("data-policy-name"),revision:link.closest("[data-policy-revision]").attr("data-policy-revision")}},{key:"inactivatingconfirmyes",component:"tool_policy"}]);else{if(!link.is(ACTION_DELETE))return void Log.error("unknown action type detected","tool_policy/managedocsactions");promise=Str.get_strings([{key:"deleting",component:"tool_policy"},{key:"deleteconfirm",component:"tool_policy",param:{name:link.closest("[data-policy-name]").attr("data-policy-name"),revision:link.closest("[data-policy-revision]").attr("data-policy-revision")}},{key:"delete",component:"core"}])}e.preventDefault(),promise.then((function(strs){return strings=strs,ModalFactory.create({title:strings[0],body:strings[1],type:ModalFactory.types.SAVE_CANCEL})})).then((function(modal){return modal.setSaveButtonText(strings[2]),modal.getRoot().on(ModalEvents.save,(function(){window.location.href=link.attr("href")+"&amp;sesskey="+Config.sesskey+"&amp;confirm=1"})),modal.getRoot().on(ModalEvents.hidden,(function(){modal.destroy()})),modal.show(),!0})).catch((function(e){return Log.error(e),!1}))}))},{init:function(baseid){var base=$(document.getElementById(baseid));if(base.length)return new ManageDocsActions(base);throw new Error("managedocsactions: Invalid base element identifier")}}}));
/**
 * Policy actions.
 *
 * @module     tool_policy/policyactions
 * @copyright  2018 Sara Arjona (sara@moodle.com)
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("tool_policy/policyactions",["jquery","core/ajax","core/notification","core/modal_factory","core/modal_events"],(function($,Ajax,Notification,ModalFactory,ModalEvents){var PolicyActions=function(root){this.registerEvents(root)};return PolicyActions.prototype.registerEvents=function(root){root.on("click",(function(e){e.preventDefault();var request={methodname:"tool_policy_get_policy_version",args:{versionid:$(this).data("versionid"),behalfid:$(this).data("behalfid")}},modalTitle=$.Deferred(),modalBody=$.Deferred(),modal=ModalFactory.create({title:modalTitle,body:modalBody,large:!0}).then((function(modal){return modal.getRoot().on(ModalEvents.hidden,(function(){modal.destroy()})),modal})).then((function(modal){return modal.show(),modal})).catch(Notification.exception),promises=Ajax.call([request]);$.when(promises[0]).then((function(data){if(data.result.policy)return modalTitle.resolve(data.result.policy.name),modalBody.resolve(data.result.policy.content),data;throw new Error(data.warnings[0].message)})).catch((function(message){return modal.then((function(modal){return modal.hide(),modal.destroy(),modal})).catch(Notification.exception),Notification.addNotification({message:message,type:"error"})}))}))},{init:function(root){return root=$(root),new PolicyActions(root)}}}));
/**
 * Add policy consent modal to the page
 *
 * @module     tool_policy/acceptmodal
 * @copyright  2018 Marina Glancy
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("tool_policy/acceptmodal",["jquery","core/str","core/modal_factory","core/modal_events","core/notification","core/fragment","core/ajax","core_form/changechecker"],(function($,Str,ModalFactory,ModalEvents,Notification,Fragment,Ajax,FormChangeChecker){var AcceptOnBehalf=function(contextid){this.contextid=contextid,this.init()};return AcceptOnBehalf.prototype.modal=null,AcceptOnBehalf.prototype.contextid=-1,AcceptOnBehalf.prototype.currentTrigger=null,AcceptOnBehalf.prototype.triggers={SINGLE:"a[data-action=acceptmodal]",BULK:"input[data-action=acceptmodal]"},AcceptOnBehalf.prototype.init=function(){$(this.triggers.SINGLE).on("click",function(e){e.preventDefault(),this.currentTrigger=$(e.currentTarget);var href=$(e.currentTarget).attr("href"),formData=href.slice(href.indexOf("?")+1);this.showFormModal(formData)}.bind(this)),$(this.triggers.BULK).on("click",function(e){e.preventDefault(),this.currentTrigger=$(e.currentTarget);var form=$(e.currentTarget).closest("form");if(form.find('input[type=checkbox][name="userids[]"]:checked').length){var formData=form.serialize();this.showFormModal(formData)}else Str.get_strings([{key:"notice"},{key:"selectusersforconsent",component:"tool_policy"},{key:"ok"}]).then((function(strings){Notification.alert(strings[0],strings[1],strings[2])})).fail(Notification.exception)}.bind(this))},AcceptOnBehalf.prototype.showFormModal=function(formData){for(var action,params=formData.split("&amp;"),i=0;i&lt;params.length;i++){var pair=params[i].split("=");"action"==pair[0]&amp;&amp;(action=pair[1])}Str.get_strings([{key:"statusformtitleaccept",component:"tool_policy"},{key:"iagreetothepolicy",component:"tool_policy"},{key:"statusformtitlerevoke",component:"tool_policy"},{key:"irevokethepolicy",component:"tool_policy"},{key:"statusformtitledecline",component:"tool_policy"},{key:"declinethepolicy",component:"tool_policy"}]).then(function(strings){var title,saveText;return"accept"==action?(title=strings[0],saveText=strings[1]):"revoke"==action?(title=strings[2],saveText=strings[3]):"decline"==action&amp;&amp;(title=strings[4],saveText=strings[5]),ModalFactory.create({type:ModalFactory.types.SAVE_CANCEL,title:title,body:""}).done(function(modal){this.modal=modal,this.setupFormModal(formData,saveText)}.bind(this))}.bind(this)).catch(Notification.exception)},AcceptOnBehalf.prototype.setupFormModal=function(formData,saveText){var modal=this.modal;modal.setLarge(),modal.setSaveButtonText(saveText),modal.getRoot().on(ModalEvents.hidden,this.destroy.bind(this)),modal.setBody(this.getBody(formData)),modal.getRoot().on(ModalEvents.save,this.submitForm.bind(this)),modal.getRoot().on("submit","form",this.submitFormAjax.bind(this)),modal.show()},AcceptOnBehalf.prototype.getBody=function(formData){void 0===formData&amp;&amp;(formData={});var params={jsonformdata:JSON.stringify(formData)};return Fragment.loadFragment("tool_policy","accept_on_behalf",this.contextid,params)},AcceptOnBehalf.prototype.submitFormAjax=function(e){e.preventDefault();var formData=this.modal.getRoot().find("form").serialize();Ajax.call([{methodname:"tool_policy_submit_accept_on_behalf",args:{jsonformdata:JSON.stringify(formData)}}])[0].done(function(data){data.validationerrors?this.modal.setBody(this.getBody(formData)):this.close()}.bind(this)).fail(Notification.exception)},AcceptOnBehalf.prototype.submitForm=function(e){e.preventDefault(),this.modal.getRoot().find("form").submit()},AcceptOnBehalf.prototype.close=function(){this.destroy(),document.location.reload()},AcceptOnBehalf.prototype.destroy=function(){FormChangeChecker.resetAllFormDirtyStates(),this.modal.destroy(),this.currentTrigger.focus()},{getInstance:function(contextid){return new AcceptOnBehalf(contextid)}}}));
/**
 * Datasource for the tool_policy/acceptances_filter.
 *
 * This module is compatible with core/form-autocomplete.
 *
 * @copyright  2017 Jun Pataleta
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("tool_policy/acceptances_filter_datasource",["jquery","core/ajax","core/notification"],(function($,Ajax,Notification){return{list:function(selector,query){var filteredOptions=[],el=$(selector),originalOptions=$(selector).data("originaloptionsjson"),selectedFilters=el.val();$.each(originalOptions,(function(index,option){return""!==query.trim()&amp;&amp;-1===option.label.toLocaleLowerCase().indexOf(query.toLocaleLowerCase())||$.inArray(option.value,selectedFilters)&gt;-1||filteredOptions.push(option),!0}));var deferred=new $.Deferred;return deferred.resolve(filteredOptions),deferred.promise()},processResults:function(selector,results){var options=[];return $.each(results,(function(index,data){options.push({value:data.value,label:data.label})})),options},transport:function(selector,query,callback){this.list(selector,query).then(callback).catch(Notification.exception)}}}));
/**
 * This module adds ajax search functions to the template library page.
 *
 * @module     tool_templatelibrary/search
 * @copyright  2015 Damyon Wiese &lt;damyon@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("tool_templatelibrary/search",["jquery","core/ajax","core/log","core/notification","core/templates","core/config"],(function($,ajax,log,notification,templates,config){var reloadListTemplate=function(templateList){templates.render("tool_templatelibrary/search_results",{templates:templateList}).done((function(result,js){templates.replaceNode($('[data-region="searchresults"]'),result,js)})).fail(notification.exception)},refreshSearch=function(themename){var componentStr=$('[data-field="component"]').val(),searchStr=$('[data-region="list-templates"] [data-region="input"]').val();""!==searchStr?$('[data-region="list-templates"] [data-action="clearsearch"]').removeClass("d-none"):$('[data-region="list-templates"] [data-action="clearsearch"]').addClass("d-none"),ajax.call([{methodname:"tool_templatelibrary_list_templates",args:{component:componentStr,search:searchStr,themename:themename},done:reloadListTemplate,fail:notification.exception}],!0,!1)},throttle=null,changeHandler=function(){var callback,delay;callback=refreshSearch.bind(this,config.theme),delay=400,null!==throttle&amp;&amp;window.clearTimeout(throttle),throttle=window.setTimeout((function(){callback(),throttle=null}),delay)};return $('[data-region="list-templates"]').on("change",'[data-field="component"]',changeHandler),$('[data-region="list-templates"]').on("input",'[data-region="input"]',changeHandler),$('[data-action="clearsearch"]').on("click",(function(){$('[data-region="input"]').val(""),refreshSearch(config.theme),$(this).addClass("d-none")})),refreshSearch(config.theme),{}}));
/**
 * This module adds ajax display functions to the template library page.
 *
 * @module     tool_templatelibrary/display
 * @copyright  2015 Damyon Wiese &lt;damyon@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("tool_templatelibrary/display",["jquery","core/ajax","core/log","core/notification","core/templates","core/config","core/str"],(function($,ajax,log,notification,templates,config,str){var findDocsSection=function(templateSource,templateName){if(!templateSource)return!1;var sections,marker="@template "+templateName,i=0;if(null!==(sections=templateSource.match(/{{!([\s\S]*?)}}/g)))for(i=0;i&lt;sections.length;i++){var section=sections[i],start=section.indexOf(marker);if(-1!==start){var offset=start+marker.length+1;return section=section.substr(offset,section.length-2-offset)}}return!1},loadTemplate=function(templateName){var parts=templateName.split("/"),component=parts.shift(),name=parts.join("/"),promises=ajax.call([{methodname:"core_output_load_template",args:{component:component,template:name,themename:config.theme,includecomments:!0}},{methodname:"tool_templatelibrary_load_canonical_template",args:{component:component,template:name}}],!0,!1);$.when.apply($,promises).done((function(source,originalSource){!function(templateName,source,originalSource){str.get_string("templateselected","tool_templatelibrary",templateName).done((function(s){$('[data-region="displaytemplateheader"]').text(s)})).fail(notification.exception);var docs=findDocsSection(source,templateName);!1===docs&amp;&amp;(docs=findDocsSection(originalSource,templateName)),docs&amp;&amp;(source=docs),$('[data-region="displaytemplatesource"]').text(source);var example=source.match(/Example context \(json\):([\s\S]*)/),context=!1;if(example){var rawJSON=example[1].trim();try{context=$.parseJSON(rawJSON)}catch(e){log.debug("Could not parse json example context for template."),log.debug(e)}}context?templates.render(templateName,context).done((function(html,js){templates.replaceNodeContents($('[data-region="displaytemplateexample"]'),html,js)})).fail(notification.exception):str.get_string("templatehasnoexample","tool_templatelibrary").done((function(s){$('[data-region="displaytemplateexample"]').text(s)})).fail(notification.exception)}(templateName,source,originalSource)})).fail(notification.exception)};return $('[data-region="list-templates"]').on("click","[data-templatename]",(function(e){var templatename=$(this).data("templatename");e.preventDefault(),loadTemplate(templatename)})),{}}));
define("tool_usertours/managetours",["exports","core/prefetch","core/str","core/notification"],(function(_exports,_prefetch,_str,_notification){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.setup=void 0;const removeTourHandler=e=&gt;{const deleteButton=e.target.closest('[data-action="delete"]');deleteButton&amp;&amp;(e.preventDefault(),removeTourFromLink(deleteButton.href))},removeTourFromLink=targetUrl=&gt;{(0,_notification.confirm)((0,_str.get_string)("confirmtourremovaltitle","tool_usertours"),(0,_str.get_string)("confirmtourremovalquestion","tool_usertours"),(0,_str.get_string)("yes","core"),(0,_str.get_string)("no","core"),(()=&gt;{window.location=targetUrl}))};_exports.setup=()=&gt;{(0,_prefetch.prefetchStrings)("tool_usertours",["confirmtourremovaltitle","confirmtourremovalquestion"]),(0,_prefetch.prefetchStrings)("core",["yes","no"]),document.querySelector("body").addEventListener("click",removeTourHandler)}}));
define("tool_usertours/repository",["exports","core/ajax","core/config"],(function(_exports,_ajax,_config){var obj;Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.resetTourState=_exports.markTourComplete=_exports.markStepShown=_exports.fetchTour=void 0,_config=(obj=_config)&amp;&amp;obj.__esModule?obj:{default:obj};_exports.resetTourState=tourid=&gt;(0,_ajax.call)([{methodname:"tool_usertours_reset_tour",args:{tourid:tourid,context:_config.default.contextid,pageurl:window.location.href}}])[0];_exports.markTourComplete=(stepid,tourid,stepindex)=&gt;(0,_ajax.call)([{methodname:"tool_usertours_complete_tour",args:{stepid:stepid,stepindex:stepindex,tourid:tourid,context:_config.default.contextid,pageurl:window.location.href}}])[0];_exports.fetchTour=tourid=&gt;(0,_ajax.call)([{methodname:"tool_usertours_fetch_and_start_tour",args:{tourid:tourid,context:_config.default.contextid,pageurl:window.location.href}}])[0];_exports.markStepShown=(stepid,tourid,stepindex)=&gt;(0,_ajax.call)([{methodname:"tool_usertours_step_shown",args:{tourid:tourid,stepid:stepid,stepindex:stepindex,context:_config.default.contextid,pageurl:window.location.href}}])[0]}));
define("tool_usertours/usertours",["exports","./tour","core/templates","core/log","core/notification","./repository","core/pending","./events"],(function(_exports,_tour,_templates,_log,_notification,tourRepository,_pending,_events){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.resetTourState=_exports.init=void 0,_tour=_interopRequireDefault(_tour),_templates=_interopRequireDefault(_templates),_log=_interopRequireDefault(_log),_notification=_interopRequireDefault(_notification),tourRepository=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}(tourRepository),_pending=_interopRequireDefault(_pending);var _systemImportTransformerGlobalIdentifier="undefined"!=typeof window?window:"undefined"!=typeof self?self:"undefined"!=typeof global?global:{};function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}let currentTour=null,tourId=null,restartTourAndKeepProgress=!1,currentStepNo=null;_exports.init=async(tourDetails,filters)=&gt;{const requirements=[];filters.forEach((filter=&gt;{requirements.push("function"==typeof _systemImportTransformerGlobalIdentifier.define&amp;&amp;_systemImportTransformerGlobalIdentifier.define.amd?new Promise((function(resolve,reject){_systemImportTransformerGlobalIdentifier.require(["tool_usertours/filter_".concat(filter)],resolve,reject)})):"undefined"!=typeof module&amp;&amp;module.exports&amp;&amp;"undefined"!=typeof require||"undefined"!=typeof module&amp;&amp;module.component&amp;&amp;_systemImportTransformerGlobalIdentifier.require&amp;&amp;"component"===_systemImportTransformerGlobalIdentifier.require.loader?Promise.resolve(require("tool_usertours/filter_".concat(filter))):Promise.resolve(_systemImportTransformerGlobalIdentifier["tool_usertours/filter_".concat(filter)]))}));const matchingTour=((tourDetails,filters)=&gt;tourDetails.find((tour=&gt;filters.some((filter=&gt;!filter||!filter.filterMatches||filter.filterMatches(tour))))))(tourDetails,await Promise.all(requirements));if(!matchingTour)return;tourId=matchingTour.tourId;let startTour=matchingTour.startTour;void 0===startTour&amp;&amp;(startTour=!0),startTour&amp;&amp;fetchTour(tourId),addResetLink(),document.querySelector("body").addEventListener("click",(e=&gt;{e.target.closest("#resetpagetour")&amp;&amp;(e.preventDefault(),resetTourState(tourId))})),window.addEventListener("resize",(()=&gt;{currentTour&amp;&amp;currentTour.tourRunning&amp;&amp;(clearTimeout(window.resizedFinished),window.resizedFinished=setTimeout((()=&gt;{currentStepNo=currentTour.getCurrentStepNumber(),restartTourAndKeepProgress=!0,resetTourState(tourId)}),250))}))};const fetchTour=async tourId=&gt;{const pendingPromise=new _pending.default("admin_usertour_fetchTour:".concat(tourId));try{const response=await tourRepository.fetchTour(tourId);if(response.hasOwnProperty("tourconfig")){const{html:html}=await _templates.default.renderForPromise("tool_usertours/tourstep",response.tourconfig);startBootstrapTour(tourId,html,response.tourconfig)}pendingPromise.resolve()}catch(error){pendingPromise.resolve(),_notification.default.exception(error)}},addResetLink=()=&gt;{const pendingPromise=new _pending.default("admin_usertour_addResetLink");_templates.default.render("tool_usertours/resettour",{}).then((function(html,js){_templates.default.appendNodeContents((()=&gt;{let location=document.querySelector(".tool_usertours-resettourcontainer");return location||(location=document.querySelector(".logininfo"),location||(location=document.querySelector("footer"),location||document.body))})(),html,js)})).catch().then(pendingPromise.resolve).catch()},startBootstrapTour=(tourId,template,tourConfig)=&gt;{currentTour&amp;&amp;currentTour.tourRunning&amp;&amp;(currentTour.endTour(),currentTour=null),document.addEventListener(_events.eventTypes.tourEnded,markTourComplete),document.addEventListener(_events.eventTypes.stepRenderer,markStepShown),tourConfig.tourName=tourConfig.name,delete tourConfig.name,tourConfig.template=template,tourConfig.steps=tourConfig.steps.map((function(step){return void 0!==step.element&amp;&amp;(step.target=step.element,delete step.element),void 0!==step.reflex&amp;&amp;(step.moveOnClick=!!step.reflex,delete step.reflex),void 0!==step.content&amp;&amp;(step.body=step.content,delete step.content),step})),currentTour=new _tour.default(tourConfig);let startAt=0;return restartTourAndKeepProgress&amp;&amp;currentStepNo&amp;&amp;(startAt=currentStepNo,restartTourAndKeepProgress=!1,currentStepNo=null),currentTour.startTour(startAt)},markStepShown=e=&gt;{const tour=e.detail.tour,stepConfig=tour.getStepConfig(tour.getCurrentStepNumber());tourRepository.markStepShown(stepConfig.stepid,tourId,tour.getCurrentStepNumber()).catch(_log.default.error)},markTourComplete=e=&gt;{document.removeEventListener(_events.eventTypes.tourEnded,markTourComplete),document.removeEventListener(_events.eventTypes.stepRenderer,markStepShown);const tour=e.detail.tour,stepConfig=tour.getStepConfig(tour.getCurrentStepNumber());tourRepository.markTourComplete(stepConfig.stepid,tourId,tour.getCurrentStepNumber()).catch(_log.default.error)},resetTourState=tourId=&gt;tourRepository.resetTourState(tourId).then((response=&gt;{response.startTour&amp;&amp;fetchTour(response.startTour)})).catch(_notification.default.exception);_exports.resetTourState=resetTourState}));
define("tool_usertours/filter_cssselector",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.filterMatches=void 0;_exports.filterMatches=function(tourConfig){let filterValues=tourConfig.filtervalues.cssselector;return!filterValues[0]||!!document.querySelector(filterValues[0])}}));
define("tool_usertours/events",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.eventTypes=void 0;_exports.eventTypes={stepRender:"tool_usertours/stepRender",stepRendered:"tool_usertours/stepRendered",tourStart:"tool_usertours/tourStart",tourStarted:"tool_usertours/tourStarted",tourEnd:"tool_usertours/tourEnd",tourEnded:"tool_usertours/tourEnded",stepHide:"tool_usertours/stepHide",stepHidden:"tool_usertours/stepHidden"}}));
define("tool_usertours/managesteps",["exports","core/prefetch","core/str","core/notification"],(function(_exports,_prefetch,_str,_notification){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.setup=void 0;const removeStepHandler=e=&gt;{const deleteButton=e.target.closest('[data-action="delete"]');deleteButton&amp;&amp;(e.preventDefault(),removeStepFromLink(deleteButton.href))},removeStepFromLink=targetUrl=&gt;{(0,_notification.confirm)((0,_str.get_string)("confirmstepremovaltitle","tool_usertours"),(0,_str.get_string)("confirmstepremovalquestion","tool_usertours"),(0,_str.get_string)("yes","core"),(0,_str.get_string)("no","core"),(()=&gt;{window.location=targetUrl}))};_exports.setup=()=&gt;{(0,_prefetch.prefetchStrings)("tool_usertours",["confirmstepremovaltitle","confirmstepremovalquestion"]),(0,_prefetch.prefetchStrings)("core",["yes","no"]),document.querySelector("body").addEventListener("click",removeStepHandler)}}));
define("tool_usertours/tour",["exports","jquery","core/aria","core/popper","core/event_dispatcher","./events","core/str","core/prefetch","core/pending"],(function(_exports,_jquery,Aria,_popper,_event_dispatcher,_events,_str,_prefetch,_pending){function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_jquery=_interopRequireDefault(_jquery),Aria=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}(Aria),_popper=_interopRequireDefault(_popper),_pending=_interopRequireDefault(_pending);var _default=class{constructor(config){var obj,key,value;value=!1,(key="tourRunning")in(obj=this)?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,this.init(config)}init(config){this.eventHandlers={},this.reset(),this.originalConfiguration=config||{},this.configure.apply(this,arguments),this.possitionNeedToBeRecalculated=!1,this.recalculatedNo=0;try{this.storage=window.sessionStorage,this.storageKey="tourstate_"+this.tourName}catch(e){this.storage=!1,this.storageKey=""}return(0,_prefetch.prefetchStrings)("tool_usertours",["nextstep_sequence","skip_tour"]),this}reset(){return this.hide(),this.eventHandlers=[],this.resetStepListeners(),this.originalConfiguration={},this.steps=[],this.currentStepNumber=0,this}configure(config){if("object"==typeof config){if(void 0!==config.tourName&amp;&amp;(this.tourName=config.tourName),config.eventHandlers)for(let eventName in config.eventHandlers)config.eventHandlers[eventName].forEach((function(handler){this.addEventHandler(eventName,handler)}),this);this.resetStepDefaults(!0),"object"==typeof config.steps&amp;&amp;(this.steps=config.steps),void 0!==config.template&amp;&amp;(this.templateContent=config.template)}return this.checkMinimumRequirements(),this}checkMinimumRequirements(){if(!this.tourName)throw new Error("Tour Name required");if(!this.steps||!this.steps.length)throw new Error("Steps must be specified")}resetStepDefaults(loadOriginalConfiguration){return void 0===loadOriginalConfiguration&amp;&amp;(loadOriginalConfiguration=!0),this.stepDefaults={},loadOriginalConfiguration&amp;&amp;void 0!==this.originalConfiguration.stepDefaults?this.setStepDefaults(this.originalConfiguration.stepDefaults):this.setStepDefaults({}),this}setStepDefaults(stepDefaults){return this.stepDefaults||(this.stepDefaults={}),_jquery.default.extend(this.stepDefaults,{element:"",placement:"top",delay:0,moveOnClick:!1,moveAfterTime:0,orphan:!1,direction:1},stepDefaults),this}getCurrentStepNumber(){return parseInt(this.currentStepNumber,10)}setCurrentStepNumber(stepNumber){if(this.currentStepNumber=stepNumber,this.storage)try{this.storage.setItem(this.storageKey,stepNumber)}catch(e){e.code===DOMException.QUOTA_EXCEEDED_ERR&amp;&amp;this.storage.removeItem(this.storageKey)}}getNextStepNumber(stepNumber){void 0===stepNumber&amp;&amp;(stepNumber=this.getCurrentStepNumber());let nextStepNumber=stepNumber+1;for(;nextStepNumber&lt;=this.steps.length;){if(this.isStepPotentiallyVisible(this.getStepConfig(nextStepNumber)))return nextStepNumber;nextStepNumber++}return null}getPreviousStepNumber(stepNumber){void 0===stepNumber&amp;&amp;(stepNumber=this.getCurrentStepNumber());let previousStepNumber=stepNumber-1;for(;previousStepNumber&gt;=0;){if(this.isStepPotentiallyVisible(this.getStepConfig(previousStepNumber)))return previousStepNumber;previousStepNumber--}return null}isLastStep(stepNumber){return null===this.getNextStepNumber(stepNumber)}isStepPotentiallyVisible(stepConfig){return!!stepConfig&amp;&amp;(!!this.isStepActuallyVisible(stepConfig)||(!(void 0===stepConfig.orphan||!stepConfig.orphan)||!(void 0===stepConfig.delay||!stepConfig.delay)))}getPotentiallyVisibleSteps(){let position=1,result=[];for(let stepNumber=0;stepNumber&lt;this.steps.length;stepNumber++){const stepConfig=this.getStepConfig(stepNumber);this.isStepPotentiallyVisible(stepConfig)&amp;&amp;(result[stepNumber]={stepId:stepConfig.stepid,position:position},position++)}return result}isStepActuallyVisible(stepConfig){if(!stepConfig)return!1;if(!this.isCSSAllowed())return!1;let target=this.getStepTarget(stepConfig);return!!(target&amp;&amp;target.length&amp;&amp;target.is(":visible"))&amp;&amp;!!target.length}isCSSAllowed(){const testCSSElement=document.createElement("div");testCSSElement.classList.add("hide"),document.body.appendChild(testCSSElement);const isAllowed="none"===window.getComputedStyle(testCSSElement).display;return testCSSElement.remove(),isAllowed}next(){return this.gotoStep(this.getNextStepNumber())}previous(){return this.gotoStep(this.getPreviousStepNumber(),-1)}gotoStep(stepNumber,direction){if(stepNumber&lt;0)return this.endTour();let stepConfig=this.getStepConfig(stepNumber);return null===stepConfig?this.endTour():this._gotoStep(stepConfig,direction)}_gotoStep(stepConfig,direction){if(!stepConfig)return this.endTour();const pendingPromise=new _pending.default("tool_usertours/tour:_gotoStep-".concat(stepConfig.stepNumber));if(void 0!==stepConfig.delay&amp;&amp;stepConfig.delay&amp;&amp;!stepConfig.delayed)return stepConfig.delayed=!0,window.setTimeout((function(stepConfig,direction){this._gotoStep(stepConfig,direction),pendingPromise.resolve()}),stepConfig.delay,stepConfig,direction),this;if(!stepConfig.orphan&amp;&amp;!this.isStepActuallyVisible(stepConfig)){const fn=-1==direction?"getPreviousStepNumber":"getNextStepNumber";return this.gotoStep(this[fn](stepConfig.stepNumber),direction),pendingPromise.resolve(),this}this.hide();return this.dispatchEvent(_events.eventTypes.stepRender,{stepConfig:stepConfig},!0).defaultPrevented||(this.renderStep(stepConfig),this.dispatchEvent(_events.eventTypes.stepRendered,{stepConfig:stepConfig})),pendingPromise.resolve(),this}getStepConfig(stepNumber){if(null===stepNumber||stepNumber&lt;0||stepNumber&gt;=this.steps.length)return null;let stepConfig=this.normalizeStepConfig(this.steps[stepNumber]);return stepConfig=_jquery.default.extend(stepConfig,{stepNumber:stepNumber}),stepConfig}normalizeStepConfig(stepConfig){return void 0!==stepConfig.reflex&amp;&amp;void 0===stepConfig.moveAfterClick&amp;&amp;(stepConfig.moveAfterClick=stepConfig.reflex),void 0!==stepConfig.element&amp;&amp;void 0===stepConfig.target&amp;&amp;(stepConfig.target=stepConfig.element),void 0!==stepConfig.content&amp;&amp;void 0===stepConfig.body&amp;&amp;(stepConfig.body=stepConfig.content),stepConfig=_jquery.default.extend({},this.stepDefaults,stepConfig),(stepConfig=_jquery.default.extend({},{attachTo:stepConfig.target,attachPoint:"after"},stepConfig)).attachTo&amp;&amp;(stepConfig.attachTo=(0,_jquery.default)(stepConfig.attachTo).first()),stepConfig}getStepTarget(stepConfig){return stepConfig.target?(0,_jquery.default)(stepConfig.target):null}dispatchEvent(eventName){let detail=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]?arguments[1]:{},cancelable=arguments.length&gt;2&amp;&amp;void 0!==arguments[2]&amp;&amp;arguments[2];return(0,_event_dispatcher.dispatchEvent)(eventName,{tour:this,...detail},document,{cancelable:cancelable})}addEventHandler(eventName,handler){return void 0===this.eventHandlers[eventName]&amp;&amp;(this.eventHandlers[eventName]=[]),this.eventHandlers[eventName].push(handler),this}processStepListeners(stepConfig){if(this.listeners.push({node:this.currentStepNode,args:["click",'[data-role="next"]',_jquery.default.proxy(this.next,this)]},{node:this.currentStepNode,args:["click",'[data-role="end"]',_jquery.default.proxy(this.endTour,this)]},{node:(0,_jquery.default)('[data-flexitour="backdrop"]'),args:["click",_jquery.default.proxy(this.hide,this)]},{node:(0,_jquery.default)("body"),args:["keydown",_jquery.default.proxy(this.handleKeyDown,this)]}),stepConfig.moveOnClick){var targetNode=this.getStepTarget(stepConfig);this.listeners.push({node:targetNode,args:["click",_jquery.default.proxy((function(e){0===(0,_jquery.default)(e.target).parents('[data-flexitour="container"]').length&amp;&amp;window.setTimeout(_jquery.default.proxy(this.next,this),500)}),this)]})}return this.listeners.forEach((function(listener){listener.node.on.apply(listener.node,listener.args)})),this}resetStepListeners(){return this.listeners&amp;&amp;this.listeners.forEach((function(listener){listener.node.off.apply(listener.node,listener.args)})),this.listeners=[],this}renderStep(stepConfig){this.currentStepConfig=stepConfig,this.setCurrentStepNumber(stepConfig.stepNumber);let template=(0,_jquery.default)(this.getTemplateContent());template.find('[data-placeholder="title"]').html(stepConfig.title),template.find('[data-placeholder="body"]').html(stepConfig.body);const nextBtn=template.find('[data-role="next"]'),endBtn=template.find('[data-role="end"]');if(this.isLastStep(stepConfig.stepNumber)?(nextBtn.hide(),endBtn.removeClass("btn-secondary").addClass("btn-primary")):(nextBtn.prop("disabled",!1),(0,_str.get_string)("skip_tour","tool_usertours").then((value=&gt;{endBtn.html(value)})).catch()),nextBtn.attr("role","button"),endBtn.attr("role","button"),this.originalConfiguration.displaystepnumbers){const stepsPotentiallyVisible=this.getPotentiallyVisibleSteps(),totalStepsPotentiallyVisible=stepsPotentiallyVisible.length,position=stepsPotentiallyVisible[stepConfig.stepNumber].position;totalStepsPotentiallyVisible&gt;1&amp;&amp;(0,_str.get_string)("nextstep_sequence","tool_usertours",{position:position,total:totalStepsPotentiallyVisible}).then((value=&gt;{nextBtn.html(value)})).catch()}return stepConfig.template=template,this.addStepToPage(stepConfig),this.processStepListeners(stepConfig),this}getTemplateContent(){return(0,_jquery.default)(this.templateContent).clone()}addStepToPage(stepConfig){let currentStepNode=(0,_jquery.default)('&lt;span data-flexitour="container"&gt;&lt;/span&gt;').html(stepConfig.template).hide(),animationTarget=(0,_jquery.default)("body, html").stop(!0,!0);if(this.isStepActuallyVisible(stepConfig)){let targetNode=this.getStepTarget(stepConfig);targetNode.parents('[data-usertour="scroller"]').length&amp;&amp;(animationTarget=targetNode.parents('[data-usertour="scroller"]')),targetNode.data("flexitour","target");let zIndex=this.calculateZIndex(targetNode);zIndex&amp;&amp;(stepConfig.zIndex=zIndex+1),stepConfig.zIndex&amp;&amp;currentStepNode.css("zIndex",stepConfig.zIndex+1),this.positionBackdrop(stepConfig),(0,_jquery.default)(document.body).append(currentStepNode),this.currentStepNode=currentStepNode,this.currentStepNode.css({top:0,left:0});const pendingPromise=new _pending.default("tool_usertours/tour:addStepToPage-".concat(stepConfig.stepNumber));animationTarget.animate({scrollTop:this.calculateScrollTop(stepConfig)}).promise().then(function(){this.positionStep(stepConfig),this.revealStep(stepConfig),pendingPromise.resolve()}.bind(this)).catch((function(){}))}else stepConfig.orphan&amp;&amp;(stepConfig.isOrphan=!0,stepConfig.attachTo=(0,_jquery.default)("body").first(),stepConfig.attachPoint="append",this.positionBackdrop(stepConfig),currentStepNode.addClass("orphan"),(0,_jquery.default)(document.body).append(currentStepNode),this.currentStepNode=currentStepNode,this.currentStepNode.css("position","fixed"),this.currentStepPopper=new _popper.default((0,_jquery.default)("body"),this.currentStepNode[0],{removeOnDestroy:!0,placement:stepConfig.placement+"-start",arrowElement:'[data-role="arrow"]',modifiers:{hide:{enabled:!1},applyStyle:{onLoad:null,enabled:!1}},onCreate:()=&gt;{const images=this.currentStepNode.find("img");images.length&amp;&amp;images.on("load",(()=&gt;{this.calculateStepPositionInPage(currentStepNode)})),this.calculateStepPositionInPage(currentStepNode)}}),this.revealStep(stepConfig));return this}revealStep(stepConfig){const pendingPromise=new _pending.default("tool_usertours/tour:revealStep-".concat(stepConfig.stepNumber));return this.currentStepNode.fadeIn("",_jquery.default.proxy((function(){this.announceStep(stepConfig),this.currentStepNode.focus(),window.setTimeout(_jquery.default.proxy((function(){this.currentStepNode&amp;&amp;this.currentStepNode.focus(),pendingPromise.resolve()}),this),100)}),this)),this}announceStep(stepConfig){let stepId="tour-step-"+this.tourName+"-"+stepConfig.stepNumber;this.currentStepNode.attr("id",stepId);let bodyRegion=this.currentStepNode.find('[data-placeholder="body"]').first();bodyRegion.attr("id",stepId+"-body"),bodyRegion.attr("role","document");let headerRegion=this.currentStepNode.find('[data-placeholder="title"]').first();headerRegion.attr("id",stepId+"-title"),headerRegion.attr("aria-labelledby",stepId+"-body"),this.currentStepNode.attr("role","dialog"),this.currentStepNode.attr("tabindex",0),this.currentStepNode.attr("aria-labelledby",stepId+"-title"),this.currentStepNode.attr("aria-describedby",stepId+"-body");let target=this.getStepTarget(stepConfig);return target&amp;&amp;(target.data("original-tabindex",target.attr("tabindex")),target.attr("tabindex")||target.attr("tabindex",0),target.data("original-describedby",target.attr("aria-describedby")).attr("aria-describedby",stepId+"-body")),this.accessibilityShow(stepConfig),this}handleKeyDown(e){let tabbableSelector="a[href], link[href], [draggable=true], [contenteditable=true], ";switch(tabbableSelector+=":input:enabled, [tabindex], button:enabled",e.keyCode){case 27:this.endTour();break;case 9:(function(){if(!this.currentStepConfig.hasBackdrop)return;let currentIndex,nextIndex,nextNode,focusRelevant,activeElement=(0,_jquery.default)(document.activeElement),stepTarget=this.getStepTarget(this.currentStepConfig),tabbableNodes=(0,_jquery.default)(tabbableSelector),dialogContainer=(0,_jquery.default)('span[data-flexitour="container"]');if(stepTarget&amp;&amp;(tabbableNodes=tabbableNodes.filter((function(index,element){return null!==stepTarget&amp;&amp;(stepTarget.has(element).length||dialogContainer.has(element).length||stepTarget.is(element)||dialogContainer.is(element))}))),tabbableNodes.each((function(index,element){return!activeElement.is(element)||(currentIndex=index,!1)})),null!=currentIndex){let direction=1;e.shiftKey&amp;&amp;(direction=-1),nextIndex=currentIndex;do{nextIndex+=direction,nextNode=(0,_jquery.default)(tabbableNodes[nextIndex])}while(nextNode.length&amp;&amp;nextNode.is(":disabled")||nextNode.is(":hidden"));nextNode.length?(focusRelevant=nextNode.closest(stepTarget).length,focusRelevant=focusRelevant||nextNode.closest(this.currentStepNode).length):focusRelevant=!1}focusRelevant?nextNode.focus():e.shiftKey?this.currentStepNode.find(tabbableSelector).last().focus():this.currentStepConfig.isOrphan?this.currentStepNode.focus():stepTarget.focus(),e.preventDefault()}).call(this)}}startTour(startAt){if(this.storage&amp;&amp;void 0===startAt){let storageStartValue=this.storage.getItem(this.storageKey);if(storageStartValue){let storageStartAt=parseInt(storageStartValue,10);storageStartAt&lt;=this.steps.length&amp;&amp;(startAt=storageStartAt)}}void 0===startAt&amp;&amp;(startAt=this.getCurrentStepNumber());return this.dispatchEvent(_events.eventTypes.tourStart,{startAt:startAt},!0).defaultPrevented||(this.gotoStep(startAt),this.tourRunning=!0,this.dispatchEvent(_events.eventTypes.tourStarted,{startAt:startAt})),this}restartTour(){return this.startTour(0)}endTour(){if(this.dispatchEvent(_events.eventTypes.tourEnd,{},!0).defaultPrevented)return this;if(this.currentStepConfig){let previousTarget=this.getStepTarget(this.currentStepConfig);previousTarget&amp;&amp;(previousTarget.attr("tabindex")||previousTarget.attr("tabindex","-1"),previousTarget.focus())}return this.hide(!0),this.tourRunning=!1,this.dispatchEvent(_events.eventTypes.tourEnded),this}hide(transition){if(this.dispatchEvent(_events.eventTypes.stepHide,{},!0).defaultPrevented)return this;const pendingPromise=new _pending.default("tool_usertours/tour:hide");if(this.currentStepNode&amp;&amp;this.currentStepNode.length&amp;&amp;(this.currentStepNode.hide(),this.currentStepPopper&amp;&amp;this.currentStepPopper.destroy()),this.currentStepConfig){let target=this.getStepTarget(this.currentStepConfig);target&amp;&amp;(target.data("original-labelledby")&amp;&amp;target.attr("aria-labelledby",target.data("original-labelledby")),target.data("original-describedby")&amp;&amp;target.attr("aria-describedby",target.data("original-describedby")),target.data("original-tabindex")?target.attr("tabindex",target.data("tabindex")):window.setTimeout((()=&gt;{target.removeAttr("tabindex")}),400)),this.currentStepConfig=null}(0,_jquery.default)('[data-flexitour="step-background"]').remove(),(0,_jquery.default)('[data-flexitour="step-backdrop"]').removeAttr("data-flexitour");const backdrop=(0,_jquery.default)('[data-flexitour="backdrop"]');if(backdrop.length)if(transition){const backdropRemovalPromise=new _pending.default("tool_usertours/tour:hide:backdrop");backdrop.fadeOut(400,(function(){(0,_jquery.default)(this).remove(),backdropRemovalPromise.resolve()}))}else backdrop.remove();if(this.currentStepNode&amp;&amp;this.currentStepNode.length){let stepId=this.currentStepNode.attr("id");if(stepId){let currentStepElement='[aria-describedby="'+stepId+'-body"]';(0,_jquery.default)(currentStepElement).removeAttr("tabindex"),(0,_jquery.default)(currentStepElement).removeAttr("aria-describedby")}}return this.resetStepListeners(),this.accessibilityHide(),this.dispatchEvent(_events.eventTypes.stepHidden),this.currentStepNode=null,this.currentStepPopper=null,pendingPromise.resolve(),this}show(){let startAt=this.getCurrentStepNumber();return this.gotoStep(startAt)}getStepContainer(){return(0,_jquery.default)(this.currentStepNode)}calculateScrollTop(stepConfig){let viewportHeight=(0,_jquery.default)(window).height(),targetNode=this.getStepTarget(stepConfig),scrollParent=(0,_jquery.default)(window);targetNode.parents('[data-usertour="scroller"]').length&amp;&amp;(scrollParent=targetNode.parents('[data-usertour="scroller"]'));let scrollTop=scrollParent.scrollTop();return scrollTop="top"===stepConfig.placement?targetNode.offset().top-viewportHeight/2:"bottom"===stepConfig.placement?targetNode.offset().top+targetNode.height()+scrollTop-viewportHeight/2:targetNode.height()&lt;=.8*viewportHeight?targetNode.offset().top-(viewportHeight-targetNode.height())/2:targetNode.offset().top-.2*viewportHeight,scrollTop=Math.max(0,scrollTop),scrollTop=Math.min((0,_jquery.default)(document).height()-viewportHeight,scrollTop),Math.ceil(scrollTop)}calculateStepPositionInPage(currentStepNode){let top=10;const viewportHeight=(0,_jquery.default)(window).height(),stepHeight=currentStepNode.height(),viewportWidth=(0,_jquery.default)(window).width(),stepWidth=currentStepNode.width();if(viewportHeight&gt;=stepHeight+20)top=Math.ceil((viewportHeight-stepHeight)/2);else{var _currentStepNode$find,_currentStepNode$find2;const maxHeight=viewportHeight-20-(null!==(_currentStepNode$find=currentStepNode.find(".modal-header").first().outerHeight())&amp;&amp;void 0!==_currentStepNode$find?_currentStepNode$find:0)-(null!==(_currentStepNode$find2=currentStepNode.find(".modal-footer").first().outerHeight())&amp;&amp;void 0!==_currentStepNode$find2?_currentStepNode$find2:0);currentStepNode.find('[data-placeholder="body"]').first().css({"max-height":maxHeight+"px",overflow:"auto"})}currentStepNode.offset({top:top,left:Math.ceil((viewportWidth-stepWidth)/2)})}positionStep(stepConfig){let flipBehavior,content=this.currentStepNode,thisT=this;if(!content||!content.length)return this;switch(stepConfig.placement=this.recalculatePlacement(stepConfig),stepConfig.placement){case"left":flipBehavior=["left","right","top","bottom"];break;case"right":flipBehavior=["right","left","top","bottom"];break;case"top":flipBehavior=["top","bottom","right","left"];break;case"bottom":flipBehavior=["bottom","top","right","left"];break;default:flipBehavior="flip"}let target=this.getStepTarget(stepConfig);var config={placement:stepConfig.placement+"-start",removeOnDestroy:!0,modifiers:{flip:{behaviour:flipBehavior},arrow:{element:'[data-role="arrow"]'}},onCreate:function(data){recalculateArrowPosition(data),recalculateStepPosition(data)},onUpdate:function(data){recalculateArrowPosition(data),thisT.possitionNeedToBeRecalculated&amp;&amp;(thisT.recalculatedNo++,thisT.possitionNeedToBeRecalculated=!1,recalculateStepPosition(data))}};let recalculateArrowPosition=function(data){let placement=data.placement.split("-")[0];const isVertical=-1!==["left","right"].indexOf(placement),arrowElement=data.instance.popper.querySelector('[data-role="arrow"]'),stepElement=(0,_jquery.default)(data.instance.popper.querySelector('[data-role="flexitour-step"]'));if(isVertical){let arrowHeight=parseFloat(window.getComputedStyle(arrowElement).height),arrowOffset=parseFloat(window.getComputedStyle(arrowElement).top),popperHeight=parseFloat(window.getComputedStyle(data.instance.popper).height),popperOffset=parseFloat(window.getComputedStyle(data.instance.popper).top),popperBorderWidth=parseFloat(stepElement.css("borderTopWidth")),popperBorderRadiusWidth=2*parseFloat(stepElement.css("borderTopLeftRadius")),arrowPos=arrowOffset+arrowHeight/2,maxPos=popperHeight+popperOffset-popperBorderWidth-popperBorderRadiusWidth,minPos=popperOffset+popperBorderWidth+popperBorderRadiusWidth;if(arrowPos&gt;=maxPos||arrowPos&lt;=minPos){let newArrowPos=0;newArrowPos=arrowPos&gt;popperHeight/2?maxPos-arrowHeight:minPos+arrowHeight,(0,_jquery.default)(arrowElement).css("top",newArrowPos)}}else{let arrowWidth=parseFloat(window.getComputedStyle(arrowElement).width),arrowOffset=parseFloat(window.getComputedStyle(arrowElement).left),popperWidth=parseFloat(window.getComputedStyle(data.instance.popper).width),popperOffset=parseFloat(window.getComputedStyle(data.instance.popper).left),popperBorderWidth=parseFloat(stepElement.css("borderTopWidth")),popperBorderRadiusWidth=2*parseFloat(stepElement.css("borderTopLeftRadius")),arrowPos=arrowOffset+arrowWidth/2,maxPos=popperWidth+popperOffset-popperBorderWidth-popperBorderRadiusWidth,minPos=popperOffset+popperBorderWidth+popperBorderRadiusWidth;if(arrowPos&gt;=maxPos||arrowPos&lt;=minPos){let newArrowPos=0;newArrowPos=arrowPos&gt;popperWidth/2?maxPos-arrowWidth:minPos+arrowWidth,(0,_jquery.default)(arrowElement).css("left",newArrowPos)}}};const recalculateStepPosition=function(data){var _headerEle$outerHeigh,_footerEle$outerHeigh;const placement=data.placement.split("-")[0],isVertical=-1!==["left","right"].indexOf(placement),popperElement=(0,_jquery.default)(data.instance.popper),targetElement=(0,_jquery.default)(data.instance.reference),arrowElement=popperElement.find('[data-role="arrow"]'),stepElement=popperElement.find('[data-role="flexitour-step"]'),viewportHeight=(0,_jquery.default)(window).height(),viewportWidth=(0,_jquery.default)(window).width(),arrowHeight=parseFloat(arrowElement.outerHeight(!0)),popperHeight=parseFloat(popperElement.outerHeight(!0)),targetHeight=parseFloat(targetElement.outerHeight(!0)),arrowWidth=parseFloat(arrowElement.outerWidth(!0)),popperWidth=parseFloat(popperElement.outerWidth(!0)),targetWidth=parseFloat(targetElement.outerWidth(!0));let maxHeight;if(thisT.recalculatedNo&gt;1&amp;&amp;(thisT.currentStepPopper.options.placement=isVertical?"auto-left":"auto-bottom"),thisT.recalculatedNo&gt;2)return;if(isVertical){const leftSpace=targetElement.offset().left&gt;0?targetElement.offset().left:0,rightSpace=viewportWidth-leftSpace-targetWidth,remainingSpace=leftSpace&gt;=rightSpace?leftSpace:rightSpace;if(maxHeight=viewportHeight-20,remainingSpace&lt;popperWidth+arrowWidth){const maxWidth=remainingSpace-10-arrowWidth;maxWidth&gt;0&amp;&amp;(popperElement.css({"max-width":maxWidth+"px"}),thisT.possitionNeedToBeRecalculated=!0)}else maxHeight&lt;popperHeight&amp;&amp;popperElement.css({"max-height":maxHeight+"px"})}else{const topSpace=targetElement.offset().top&gt;0?targetElement.offset().top:0,bottomSpace=viewportHeight-topSpace-targetHeight,remainingSpace=topSpace&gt;=bottomSpace?topSpace:bottomSpace;maxHeight=remainingSpace-10-arrowHeight,remainingSpace&lt;popperHeight+arrowHeight&amp;&amp;(thisT.possitionNeedToBeRecalculated=!0)}const currentStepBody=stepElement.find('[data-placeholder="body"]').first(),headerEle=stepElement.find(".modal-header").first(),footerEle=stepElement.find(".modal-footer").first();maxHeight=maxHeight-(null!==(_headerEle$outerHeigh=headerEle.outerHeight(!0))&amp;&amp;void 0!==_headerEle$outerHeigh?_headerEle$outerHeigh:0)-(null!==(_footerEle$outerHeigh=footerEle.outerHeight(!0))&amp;&amp;void 0!==_footerEle$outerHeigh?_footerEle$outerHeigh:0),maxHeight&gt;0?(headerEle.removeClass("minimal"),footerEle.removeClass("minimal"),currentStepBody.css({"max-height":maxHeight+"px",overflow:"auto"})):(headerEle.addClass("minimal"),footerEle.addClass("minimal")),thisT.currentStepPopper.update()};let background=(0,_jquery.default)('[data-flexitour="step-background"]');return background.length&amp;&amp;(target=background),this.currentStepPopper=new _popper.default(target,content[0],config),this}recalculatePlacement(stepConfig){let target=this.getStepTarget(stepConfig),widthContent=this.currentStepNode.width()+16,targetOffsetLeft=target.offset().left-10,targetOffsetRight=target.offset().left+target.width()+10,placement=stepConfig.placement;return-1!==["left","right"].indexOf(placement)&amp;&amp;targetOffsetLeft&lt;widthContent+10&amp;&amp;targetOffsetRight+widthContent+10&gt;document.documentElement.clientWidth&amp;&amp;(placement="top"),placement}positionBackdrop(stepConfig){if(stepConfig.backdrop){this.currentStepConfig.hasBackdrop=!0;let backdrop=(0,_jquery.default)('&lt;div data-flexitour="backdrop"&gt;&lt;/div&gt;');if(stepConfig.zIndex?"append"===stepConfig.attachPoint?stepConfig.attachTo.append(backdrop):backdrop.insertAfter(stepConfig.attachTo):(0,_jquery.default)("body").append(backdrop),this.isStepActuallyVisible(stepConfig)){let background=(0,_jquery.default)('[data-flexitour="step-background"]');background.length||(background=(0,_jquery.default)('&lt;div data-flexitour="step-background"&gt;&lt;/div&gt;'));let targetNode=this.getStepTarget(stepConfig),buffer=10,colorNode=targetNode;buffer&amp;&amp;(colorNode=(0,_jquery.default)("body"));let drawertop=0;if(targetNode.parents('[data-usertour="scroller"]').length){const scrollerElement=targetNode.parents('[data-usertour="scroller"]'),navigationBuffer=scrollerElement.offset().top;scrollerElement.scrollTop()&gt;=navigationBuffer&amp;&amp;(drawertop=scrollerElement.scrollTop()-navigationBuffer,background.css({position:"fixed"}))}background.css({width:targetNode.outerWidth()+buffer+buffer,height:targetNode.outerHeight()+buffer+buffer,left:targetNode.offset().left-buffer,top:targetNode.offset().top+drawertop-buffer,backgroundColor:this.calculateInherittedBackgroundColor(colorNode)}),targetNode.offset().left&lt;buffer&amp;&amp;background.css({width:targetNode.outerWidth()+targetNode.offset().left+buffer,left:targetNode.offset().left}),targetNode.offset().top+drawertop&lt;buffer&amp;&amp;background.css({height:targetNode.outerHeight()+targetNode.offset().top+buffer,top:targetNode.offset().top});let targetRadius=targetNode.css("borderRadius");targetRadius&amp;&amp;targetRadius!==(0,_jquery.default)("body").css("borderRadius")&amp;&amp;background.css("borderRadius",targetRadius),"absolute"===this.calculatePosition(targetNode)&amp;&amp;background.css("position","fixed");let fader=background.clone();if(fader.css({backgroundColor:backdrop.css("backgroundColor"),opacity:backdrop.css("opacity")}),fader.attr("data-flexitour","step-background-fader"),targetNode.parents('[data-region="fixed-drawer"]').length){let targetClone=targetNode.clone();background.append(targetClone)}stepConfig.zIndex?"append"===stepConfig.attachPoint?stepConfig.attachTo.append(background):(fader.insertAfter(stepConfig.attachTo),background.insertAfter(stepConfig.attachTo)):((0,_jquery.default)("body").append(fader),(0,_jquery.default)("body").append(background)),targetNode.attr("data-flexitour","step-backdrop"),stepConfig.zIndex&amp;&amp;(backdrop.css("zIndex",stepConfig.zIndex),background.css("zIndex",stepConfig.zIndex+1),targetNode.css("zIndex",stepConfig.zIndex+2)),fader.fadeOut("2000",(function(){(0,_jquery.default)(this).remove()}))}}return this}calculateZIndex(elem){for(elem=(0,_jquery.default)(elem);elem.length&amp;&amp;elem[0]!==document;){let position=elem.css("position");if("absolute"===position||"relative"===position||"fixed"===position){let value=parseInt(elem.css("zIndex"),10);if(!isNaN(value)&amp;&amp;0!==value)return value}elem=elem.parent()}return 0}calculateInherittedBackgroundColor(elem){let fakeNode=(0,_jquery.default)("&lt;div&gt;").hide();(0,_jquery.default)("body").append(fakeNode);let fakeElemColor=fakeNode.css("backgroundColor");for(fakeNode.remove(),elem=(0,_jquery.default)(elem);elem.length&amp;&amp;elem[0]!==document;){let color=elem.css("backgroundColor");if(color!==fakeElemColor)return color;elem=elem.parent()}return null}calculatePosition(elem){for(elem=(0,_jquery.default)(elem);elem.length&amp;&amp;elem[0]!==document;){let position=elem.css("position");if("static"!==position)return position;elem=elem.parent()}return null}accessibilityShow(){let hideFunction=function(child){let flexitourRole=child.data("flexitour");if(flexitourRole)switch(flexitourRole){case"container":case"target":return}child.attr("aria-hidden")||(child.attr("data-has-hidden",!0),Aria.hide(child))};this.currentStepNode.siblings().each((function(index,node){hideFunction((0,_jquery.default)(node))})),this.currentStepNode.parentsUntil("body").siblings().each((function(index,node){hideFunction((0,_jquery.default)(node))}))}accessibilityHide(){(0,_jquery.default)("[data-has-hidden]").each((function(index,node){var child;void 0!==(child=(0,_jquery.default)(node)).attr("data-has-hidden")&amp;&amp;(child.removeAttr("data-has-hidden"),Aria.unhide(child))}))}};return _exports.default=_default,_exports.default}));
define("tool_xmldb/move",["jquery","core/sortable_list","core/ajax","core/notification"],(function($,SortableList,Ajax,Notification){return{init:function(tableid,moveaction){var origIndex;new SortableList("#"+tableid+" tbody").getElementName=function(element){return $.Deferred().resolve(element.attr("data-name"))},$("#"+tableid+" tbody tr").on(SortableList.EVENTS.DRAGSTART,(function(_,info){origIndex=info.sourceList.children().index(info.element),setTimeout((function(){$(".sortable-list-is-dragged").width(info.element.width())}),501)})).on(SortableList.EVENTS.DROP,(function(_,info){var newIndex=info.targetList.children().index(info.element),t=info.element.find("[data-action="+moveaction+"]");if(info.positionChanged&amp;&amp;t.length){var request={methodname:"tool_xmldb_invoke_move_action",args:{action:moveaction,dir:t.attr("data-dir"),table:t.attr("data-table"),field:t.attr("data-field"),key:t.attr("data-key"),index:t.attr("data-index"),position:newIndex-origIndex}};Ajax.call([request])[0].fail(Notification.exception)}}))}}}));
define("theme_boost/toast",["exports","./bootstrap/toast"],(function(_exports,_toast){var obj;Object.defineProperty(_exports,"__esModule",{value:!0}),Object.defineProperty(_exports,"Toast",{enumerable:!0,get:function(){return _toast.default}}),_toast=(obj=_toast)&amp;&amp;obj.__esModule?obj:{default:obj}}));
/**
 * Contain the logic for a drawer.
 *
 * @module theme_boost/drawer
 * @copyright  2016 Damyon Wiese
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("theme_boost/drawer",["jquery","core/custom_interaction_events","core/log","core/pubsub","core/aria"],(function($,CustomEvents,Log,PubSub,Aria){var SELECTORS_TOGGLE_REGION='[data-region="drawer-toggle"]',SELECTORS_TOGGLE_ACTION='[data-action="toggle-drawer"]',SELECTORS_BODY="body",SELECTORS_SECTION='.list-group-item[href*="#section-"]',SELECTORS_DRAWER="#nav-drawer",small=$(document).width()&lt;768,Drawer=function(){$(SELECTORS_TOGGLE_REGION).length||Log.debug("Page is missing a drawer region"),$(SELECTORS_TOGGLE_ACTION).length||Log.debug("Page is missing a drawer toggle link"),$(SELECTORS_TOGGLE_REGION).each(function(index,ele){var trigger=$(ele).find(SELECTORS_TOGGLE_ACTION),drawerid=trigger.attr("aria-controls"),drawer=$(document.getElementById(drawerid)),hidden="false"==trigger.attr("aria-expanded"),side=trigger.attr("data-side"),body=$(SELECTORS_BODY),preference=trigger.attr("data-preference");small&amp;&amp;M.util.set_user_preference(preference,"false"),drawer.on("mousewheel DOMMouseScroll",this.preventPageScroll),hidden?trigger.attr("aria-expanded","false"):(body.addClass("drawer-open-"+side),trigger.attr("aria-expanded","true"))}.bind(this)),this.registerEventListeners(),small&amp;&amp;this.closeAll()};return Drawer.prototype.closeAll=function(){$(SELECTORS_TOGGLE_REGION).each((function(index,ele){var trigger=$(ele).find(SELECTORS_TOGGLE_ACTION),side=trigger.attr("data-side"),body=$(SELECTORS_BODY),drawerid=trigger.attr("aria-controls"),drawer=$(document.getElementById(drawerid)),preference=trigger.attr("data-preference");trigger.attr("aria-expanded","false"),body.removeClass("drawer-open-"+side),Aria.hide(drawer.get()),drawer.addClass("closed"),small||M.util.set_user_preference(preference,"false")}))},Drawer.prototype.toggleDrawer=function(e){var trigger=$(e.target).closest("[data-action=toggle-drawer]"),drawerid=trigger.attr("aria-controls"),drawer=$(document.getElementById(drawerid)),body=$(SELECTORS_BODY),side=trigger.attr("data-side"),preference=trigger.attr("data-preference");small&amp;&amp;M.util.set_user_preference(preference,"false"),body.addClass("drawer-ease");var open="true"==trigger.attr("aria-expanded");open?(body.removeClass("drawer-open-"+side),trigger.attr("aria-expanded","false"),drawer.addClass("closed").delay(500).queue((function(){$(this).hasClass("closed")&amp;&amp;Aria.hide(this),$(this).dequeue()})),small||M.util.set_user_preference(preference,"false")):(trigger.attr("aria-expanded","true"),Aria.unhide(drawer.get()),drawer.focus(),body.addClass("drawer-open-"+side),drawer.removeClass("closed"),small||M.util.set_user_preference(preference,"true")),PubSub.publish("nav-drawer-toggle-start",open)},Drawer.prototype.preventPageScroll=function(e){var delta=e.wheelDelta||e.originalEvent&amp;&amp;e.originalEvent.wheelDelta||-e.originalEvent.detail,bottomOverflow=this.scrollTop+$(this).outerHeight()-this.scrollHeight&gt;=0,topOverflow=this.scrollTop&lt;=0;(delta&lt;0&amp;&amp;bottomOverflow||delta&gt;0&amp;&amp;topOverflow)&amp;&amp;e.preventDefault()},Drawer.prototype.registerEventListeners=function(){$(SELECTORS_TOGGLE_ACTION).each(function(index,element){CustomEvents.define($(element),[CustomEvents.events.activate]),$(element).on(CustomEvents.events.activate,function(e,data){this.toggleDrawer(data.originalEvent),data.originalEvent.preventDefault()}.bind(this))}.bind(this)),$(SELECTORS_SECTION).click(function(){small&amp;&amp;this.closeAll()}.bind(this)),$(SELECTORS_DRAWER).on("webkitTransitionEnd msTransitionEnd transitionend",(function(e){var open=!!$(e.target).closest(SELECTORS_DRAWER).attr("aria-hidden");PubSub.publish("nav-drawer-toggle-end",open)}))},{init:function(){return new Drawer}}}));
define("theme_boost/aria",["exports","jquery","core/pending"],(function(_exports,_jquery,_pending){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Enhancements to Bootstrap components for accessibility.
   *
   * @module     theme_boost/aria
   * @copyright  2018 Damyon Wiese &lt;damyon@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_jquery=_interopRequireDefault(_jquery),_pending=_interopRequireDefault(_pending);const dropdownFix=()=&gt;{let focusEnd=!1;const setFocusEnd=function(){let end=!(arguments.length&gt;0&amp;&amp;void 0!==arguments[0])||arguments[0];focusEnd=end},shiftFocus=element=&gt;{setTimeout((pendingPromise=&gt;{element.focus(),pendingPromise.resolve()}),50,new _pending.default("core/aria:delayed-focus"))},handleMenuButton=e=&gt;{const trigger=e.key;let fixFocus=!1;if(" "!==trigger&amp;&amp;"Enter"!==trigger||(fixFocus=!0,e.preventDefault(),e.target.click()),"ArrowUp"!==trigger&amp;&amp;"ArrowDown"!==trigger||(fixFocus=!0),!fixFocus)return;const menu=e.target.parentElement.querySelector('[role="menu"]');let menuItems=!1,foundMenuItem=!1;menu&amp;&amp;(menuItems=menu.querySelectorAll('[role="menuitem"]')),menuItems&amp;&amp;menuItems.length&gt;0&amp;&amp;("ArrowUp"===trigger?setFocusEnd():setFocusEnd(!1),foundMenuItem=(()=&gt;{const result=focusEnd;return focusEnd=!1,result})()?menuItems[menuItems.length-1]:menuItems[0]),foundMenuItem&amp;&amp;shiftFocus(foundMenuItem)};document.addEventListener("keypress",(e=&gt;{if(e.target.matches('.dropdown [role="menu"] [role="menuitem"]')){const menu=e.target.closest('[role="menu"]');if(!menu)return;const menuItems=menu.querySelectorAll('[role="menuitem"]');if(!menuItems)return;const trigger=e.key.toLowerCase();for(let i=0;i&lt;menuItems.length;i++){const item=menuItems[i];if(0==item.text.trim().toLowerCase().indexOf(trigger)){shiftFocus(item);break}}}})),document.addEventListener("keydown",(e=&gt;{if(e.target.matches('[data-toggle="dropdown"]')&amp;&amp;handleMenuButton(e),e.target.matches('.dropdown [role="menu"] [role="menuitem"]')){const trigger=e.key;let next=!1;const menu=e.target.closest('[role="menu"]');if(!menu)return;const menuItems=menu.querySelectorAll('[role="menuitem"]');if(!menuItems)return;if("ArrowDown"==trigger){for(let i=0;i&lt;menuItems.length-1;i++)if(menuItems[i]==e.target){next=menuItems[i+1];break}next||(next=menuItems[0])}else if("ArrowUp"==trigger){for(let i=1;i&lt;menuItems.length;i++)if(menuItems[i]==e.target){next=menuItems[i-1];break}next||(next=menuItems[menuItems.length-1])}else"Home"==trigger?next=menuItems[0]:"End"==trigger&amp;&amp;(next=menuItems[menuItems.length-1]);next&amp;&amp;(e.preventDefault(),shiftFocus(next))}else;})),(0,_jquery.default)(".dropdown").on("hidden.bs.dropdown",(e=&gt;{const trigger=e.target.querySelector('[data-toggle="dropdown"]'),focused=document.activeElement!=document.body?document.activeElement:null;trigger&amp;&amp;focused&amp;&amp;e.target.contains(focused)&amp;&amp;shiftFocus(trigger)}))},tabElementFix=()=&gt;{document.addEventListener("keydown",(e=&gt;{["ArrowUp","ArrowDown","ArrowLeft","ArrowRight","Home","End"].includes(e.key)&amp;&amp;e.target.matches('[role="tablist"] [role="tab"]')&amp;&amp;(e=&gt;{const tabList=e.target.closest('[role="tablist"]'),vertical="vertical"==tabList.getAttribute("aria-orientation"),rtl=window.right_to_left(),arrowNext=vertical?"ArrowDown":rtl?"ArrowLeft":"ArrowRight",arrowPrevious=vertical?"ArrowUp":rtl?"ArrowRight":"ArrowLeft",tabs=Array.prototype.filter.call(tabList.querySelectorAll('[role="tab"]'),(tab=&gt;!!tab.offsetHeight));for(let i=0;i&lt;tabs.length;i++)tabs[i].index=i;switch(e.key){case arrowNext:e.preventDefault(),void 0!==e.target.index&amp;&amp;tabs[e.target.index+1]?tabs[e.target.index+1].focus():tabs[0].focus();break;case arrowPrevious:e.preventDefault(),void 0!==e.target.index&amp;&amp;tabs[e.target.index-1]?tabs[e.target.index-1].focus():tabs[tabs.length-1].focus();break;case"Home":e.preventDefault(),tabs[0].focus();break;case"End":e.preventDefault(),tabs[tabs.length-1].focus()}})(e)})),document.addEventListener("click",(e=&gt;{if(e.target.matches('[role="tablist"] [data-toggle="tab"], [role="tablist"] [data-toggle="pill"]')){const tabs=e.target.closest('[role="tablist"]').querySelectorAll('[data-toggle="tab"], [data-toggle="pill"]');e.preventDefault(),(0,_jquery.default)(e.target).tab("show"),tabs.forEach((tab=&gt;{tab.tabIndex=-1})),e.target.tabIndex=0}}))};_exports.init=()=&gt;{dropdownFix(),(()=&gt;{(0,_jquery.default)(document).on("show.bs.dropdown",(e=&gt;{if(e.relatedTarget.matches('[role="combobox"]')){const combobox=e.relatedTarget,listbox=combobox.parentElement.querySelector('[role="listbox"]'),selectedOption=listbox.querySelector('[role="option"][aria-selected="true"]');setTimeout((()=&gt;{if(selectedOption)selectedOption.classList.add("active"),combobox.setAttribute("aria-activedescendant",selectedOption.id);else{const firstOption=listbox.querySelector('[role="option"]');firstOption.setAttribute("aria-selected","true"),firstOption.classList.add("active"),combobox.setAttribute("aria-activedescendant",firstOption.id)}}),0)}})),(0,_jquery.default)(document).on("hidden.bs.dropdown",(e=&gt;{if(e.relatedTarget.matches('[role="combobox"]')){const combobox=e.relatedTarget,listbox=combobox.parentElement.querySelector('[role="listbox"]');combobox.removeAttribute("aria-activedescendant"),setTimeout((()=&gt;{listbox.querySelectorAll('.active[role="option"]').forEach((option=&gt;{option.classList.remove("active")}))}),0)}})),document.addEventListener("keydown",(e=&gt;{if(e.target.matches('.select-menu [role="combobox"]')){const combobox=e.target,trigger=e.key;let next=null;const options=combobox.parentElement.querySelectorAll('[role="listbox"] [role="option"]'),activeOption=combobox.parentElement.querySelector('[role="listbox"] .active[role="option"]');if(options&amp;&amp;activeOption){if("ArrowDown"==trigger)for(let i=0;i&lt;options.length-1;i++)if(options[i]==activeOption){next=options[i+1];break}if("ArrowUp"==trigger){for(let i=1;i&lt;options.length;i++)if(options[i]==activeOption){next=options[i-1];break}}else if("Home"==trigger)next=options[0];else if("End"==trigger)next=options[options.length-1];else if(" "==trigger||"Enter"==trigger)selectOption(combobox,activeOption);else for(let i=0;i&lt;options.length;i++){const option=options[i],optionText=option.textContent.trim().toLowerCase(),keyPressed=e.key.toLowerCase();if(0==optionText.indexOf(keyPressed)){next=option;break}}next&amp;&amp;(e.preventDefault(),activeOption.classList.remove("active"),next.classList.add("active"),combobox.setAttribute("aria-activedescendant",next.id))}}})),document.addEventListener("click",(e=&gt;{if(e.target.matches('.select-menu [role="option"]')){const option=e.target,combobox=option.closest(".select-menu").querySelector('[role="combobox"]');combobox.focus(),selectOption(combobox,option)}})),document.addEventListener("change",(e=&gt;{if(e.target.matches('.select-menu input[type="hidden"]')){const combobox=e.target.parentElement.querySelector('[role="combobox"]'),option=e.target.parentElement.querySelector('[role="option"][data-value="'.concat(e.target.value,'"]'));combobox&amp;&amp;option&amp;&amp;selectOption(combobox,option)}}));const selectOption=(combobox,option)=&gt;{const oldSelectedOption=combobox.parentElement.querySelector('[role="listbox"] [role="option"][aria-selected="true"]'),inputElement=combobox.parentElement.querySelector('input[type="hidden"]');oldSelectedOption!=option&amp;&amp;(oldSelectedOption&amp;&amp;oldSelectedOption.removeAttribute("aria-selected"),option.setAttribute("aria-selected","true")),combobox.textContent=option.textContent,inputElement.value!=option.dataset.value&amp;&amp;(inputElement.value=option.dataset.value,inputElement.dispatchEvent(new Event("change",{bubbles:!0})))}})(),window.addEventListener("load",(()=&gt;{const alerts=document.querySelectorAll('[data-aria-autofocus="true"][role="alert"]');Array.prototype.forEach.call(alerts,(autofocusElement=&gt;{autofocusElement.innerHTML+=" ",autofocusElement.removeAttribute("data-aria-autofocus")}))})),tabElementFix(),document.addEventListener("keydown",(e=&gt;{e.target.matches('[data-toggle="collapse"]')&amp;&amp;" "===e.key&amp;&amp;(e.preventDefault(),e.target.click())}))}}));
define("theme_boost/loader",["exports","jquery","./aria","./index","core/pending","./bootstrap/tools/sanitizer","./pending"],(function(_exports,_jquery,Aria,_index,_pending,_sanitizer,_pending2){function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Template renderer for Moodle. Load and render Moodle templates with Mustache.
   *
   * @module     theme_boost/loader
   * @copyright  2015 Damyon Wiese &lt;damyon@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   * @since      2.9
   */Object.defineProperty(_exports,"__esModule",{value:!0}),Object.defineProperty(_exports,"Bootstrap",{enumerable:!0,get:function(){return _index.default}}),_jquery=_interopRequireDefault(_jquery),Aria=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}(Aria),_index=_interopRequireDefault(_index),_pending=_interopRequireDefault(_pending),_pending2=_interopRequireDefault(_pending2);const pendingPromise=new _pending.default("theme_boost/loader:init");(0,_pending2.default)(),Aria.init(),(()=&gt;{(0,_jquery.default)('a[data-toggle="tab"]').on("shown.bs.tab",(function(e){var hash=(0,_jquery.default)(e.target).attr("href");history.replaceState?history.replaceState(null,null,hash):location.hash=hash}));const hash=window.location.hash;if(hash){const tab=document.querySelector('[role="tablist"] [href="'+hash+'"]');tab&amp;&amp;tab.click()}})(),(0,_jquery.default)("body").popover({container:"body",selector:'[data-toggle="popover"]',trigger:"focus",whitelist:Object.assign(_sanitizer.DefaultWhitelist,{table:[],thead:[],tbody:[],tr:[],th:[],td:[]})}),document.addEventListener("keydown",(e=&gt;{"Escape"===e.key&amp;&amp;e.target.closest('[data-toggle="popover"]')&amp;&amp;(0,_jquery.default)(e.target).popover("hide")})),(0,_jquery.default)("body").tooltip({container:"body",selector:'[data-toggle="tooltip"]'}),_jquery.default.fn.dropdown.Constructor.Default.popperConfig={modifiers:{flip:{enabled:!1},storeTopPosition:{enabled:!0,fn:(data,options)=&gt;(data.storedTop=data.offsets.popper.top,data),order:299},restoreTopPosition:{enabled:!0,fn:(data,options)=&gt;(data.offsets.popper.top=data.storedTop,data),order:301}}},pendingPromise.resolve()}));
define("theme_boost/index",["exports","./bootstrap/alert","./bootstrap/button","./bootstrap/carousel","./bootstrap/collapse","./bootstrap/dropdown","./bootstrap/modal","./bootstrap/popover","./bootstrap/scrollspy","./bootstrap/tab","./bootstrap/toast","./bootstrap/tooltip","./bootstrap/util"],(function(_exports,_alert,_button,_carousel,_collapse,_dropdown,_modal,_popover,_scrollspy,_tab,_toast,_tooltip,_util){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}Object.defineProperty(_exports,"__esModule",{value:!0}),Object.defineProperty(_exports,"Alert",{enumerable:!0,get:function(){return _alert.default}}),Object.defineProperty(_exports,"Button",{enumerable:!0,get:function(){return _button.default}}),Object.defineProperty(_exports,"Carousel",{enumerable:!0,get:function(){return _carousel.default}}),Object.defineProperty(_exports,"Collapse",{enumerable:!0,get:function(){return _collapse.default}}),Object.defineProperty(_exports,"Dropdown",{enumerable:!0,get:function(){return _dropdown.default}}),Object.defineProperty(_exports,"Modal",{enumerable:!0,get:function(){return _modal.default}}),Object.defineProperty(_exports,"Popover",{enumerable:!0,get:function(){return _popover.default}}),Object.defineProperty(_exports,"Scrollspy",{enumerable:!0,get:function(){return _scrollspy.default}}),Object.defineProperty(_exports,"Tab",{enumerable:!0,get:function(){return _tab.default}}),Object.defineProperty(_exports,"Toast",{enumerable:!0,get:function(){return _toast.default}}),Object.defineProperty(_exports,"Tooltip",{enumerable:!0,get:function(){return _tooltip.default}}),Object.defineProperty(_exports,"Util",{enumerable:!0,get:function(){return _util.default}}),_alert=_interopRequireDefault(_alert),_button=_interopRequireDefault(_button),_carousel=_interopRequireDefault(_carousel),_collapse=_interopRequireDefault(_collapse),_dropdown=_interopRequireDefault(_dropdown),_modal=_interopRequireDefault(_modal),_popover=_interopRequireDefault(_popover),_scrollspy=_interopRequireDefault(_scrollspy),_tab=_interopRequireDefault(_tab),_toast=_interopRequireDefault(_toast),_tooltip=_interopRequireDefault(_tooltip),_util=_interopRequireDefault(_util)}));
define("theme_boost/sticky-footer",["exports","core/pending"],(function(_exports,_pending){var obj;
/**
   * Sticky footer module.
   *
   * @module     theme_boost/sticky-footer
   * @copyright  2022 Ferran Recio &lt;ferran@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=_exports.enableStickyFooter=_exports.disableStickyFooter=void 0,_pending=(obj=_pending)&amp;&amp;obj.__esModule?obj:{default:obj};const SELECTORS_STICKYFOOTER=".stickyfooter",SELECTORS_PAGE="#page",CLASSES_HASSTICKYFOOTER="hasstickyfooter";let initialized=!1,previousScrollPosition=0;const scrollSpy=()=&gt;{if(document.body.clientWidth&gt;=768)return;let scrollPosition=(()=&gt;{const page=document.querySelector(SELECTORS_PAGE);return page?page.scrollTop:window.pageYOffset})();scrollPosition&gt;previousScrollPosition?disableStickyFooter():enableStickyFooter(),previousScrollPosition=scrollPosition},enableStickyFooter=()=&gt;{const pendingPromise=new _pending.default("theme_boost/sticky-footer:enabling"),footer=document.querySelector(SELECTORS_STICKYFOOTER),page=document.querySelector(SELECTORS_PAGE);footer&amp;&amp;page&amp;&amp;(document.body.classList.add(CLASSES_HASSTICKYFOOTER),page.classList.add(CLASSES_HASSTICKYFOOTER)),setTimeout((()=&gt;pendingPromise.resolve()),1e3)};_exports.enableStickyFooter=enableStickyFooter;const disableStickyFooter=()=&gt;{document.body.classList.remove(CLASSES_HASSTICKYFOOTER);const page=document.querySelector(SELECTORS_PAGE);null==page||page.classList.remove(CLASSES_HASSTICKYFOOTER)};_exports.disableStickyFooter=disableStickyFooter;_exports.init=()=&gt;{var _document$querySelect;if(initialized||document.body.classList.contains("behat-site"))return;initialized=!0,enableStickyFooter();(null!==(_document$querySelect=document.querySelector(SELECTORS_PAGE))&amp;&amp;void 0!==_document$querySelect?_document$querySelect:document.body).addEventListener("scroll",scrollSpy)}}));
define("theme_boost/pending",["exports","jquery"],(function(_exports,_jquery){var obj;
/**
   * Add Pending JS checks to stock Bootstrap transitions.
   *
   * @module     theme_boost/pending
   * @copyright  2019 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_jquery=(obj=_jquery)&amp;&amp;obj.__esModule?obj:{default:obj};const moduleTransitions={alert:[{start:"close",end:"closed"}],carousel:[{start:"slide",end:"slid"}],collapse:[{start:"hide",end:"hidden"},{start:"show",end:"shown"}],dropdown:[{start:"hide",end:"hidden"},{start:"show",end:"shown"}],modal:[{start:"hide",end:"hidden"},{start:"show",end:"shown"}],popover:[{start:"hide",end:"hidden"},{start:"show",end:"shown"}],tab:[{start:"hide",end:"hidden"},{start:"show",end:"shown"}],toast:[{start:"hide",end:"hidden"},{start:"show",end:"shown"}],tooltip:[{start:"hide",end:"hidden"},{start:"show",end:"shown"}]};return _exports.default=()=&gt;{Object.entries(moduleTransitions).forEach((_ref=&gt;{let[key,pairs]=_ref;pairs.forEach((pair=&gt;{const eventStart="".concat(pair.start,".bs.").concat(key),eventEnd="".concat(pair.end,".bs.").concat(key);(0,_jquery.default)(document.body).on(eventStart,(e=&gt;{M.util.js_pending(eventEnd),(0,_jquery.default)(e.target).one(eventEnd,(()=&gt;{M.util.js_complete(eventEnd)}))}))}))}))},_exports.default}));
define("theme_boost/popover",["exports","./bootstrap/popover"],(function(_exports,_popover){var obj;Object.defineProperty(_exports,"__esModule",{value:!0}),Object.defineProperty(_exports,"Popover",{enumerable:!0,get:function(){return _popover.default}}),_popover=(obj=_popover)&amp;&amp;obj.__esModule?obj:{default:obj}}));
/**
 * Custom form error event handler to manipulate the bootstrap markup and show
 * nicely styled errors in an mform.
 *
 * @module     theme_boost/form-display-errors
 * @copyright  2016 Damyon Wiese &lt;damyon@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("theme_boost/form-display-errors",["jquery","core_form/events"],(function($,FormEvent){return{enhance:function(elementid){var element=document.getElementById(elementid);if(element){element.addEventListener(FormEvent.eventTypes.formFieldValidationFailed,(e=&gt;{const msg=e.detail.message;e.preventDefault();var parent=$(element).closest(".form-group"),feedback=parent.find(".form-control-feedback");const feedbackId=feedback.attr("id");let describedBy=$(element).attr("aria-describedby");void 0===describedBy&amp;&amp;(describedBy="");let describedByIds=[];describedBy.length&amp;&amp;(describedByIds=describedBy.split(" "));const feedbackIndex=describedByIds.indexOf(feedbackId);"TEXTAREA"==$(element).prop("tagName")&amp;&amp;parent.find("[contenteditable]").length&gt;0&amp;&amp;(element=parent.find("[contenteditable]")),""!==msg?(parent.addClass("has-danger"),parent.data("client-validation-error",!0),$(element).addClass("is-invalid"),-1===feedbackIndex&amp;&amp;(describedByIds.push(feedbackId),$(element).attr("aria-describedby",describedByIds.join(" "))),$(element).attr("aria-invalid",!0),feedback.attr("tabindex",0),feedback.html(msg),feedback.is(":visible")||(feedback.show(),feedback.focus())):!0===parent.data("client-validation-error")&amp;&amp;(parent.removeClass("has-danger"),parent.data("client-validation-error",!1),$(element).removeClass("is-invalid"),feedbackIndex&gt;-1&amp;&amp;describedByIds.splice(feedbackIndex,1),describedByIds.length?(describedBy=describedByIds.join(" "),$(element).attr("aria-describedby",describedBy)):$(element).removeAttr("aria-describedby"),$(element).attr("aria-invalid",!1),feedback.hide())}));var form=element.closest("form");form&amp;&amp;!("boostFormErrorsEnhanced"in form.dataset)&amp;&amp;(form.addEventListener("submit",(function(){var visibleError=$(".form-control-feedback:visible");visibleError.length&amp;&amp;visibleError[0].focus()})),form.dataset.boostFormErrorsEnhanced=1)}}}}));
define("theme_boost/footer-popover",["exports","jquery","./popover"],(function(_exports,_jquery,_popover){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Shows the footer content in a popover.
   *
   * @module     theme_boost/footer-popover
   * @copyright  2021 Bas Brands
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),Object.defineProperty(_exports,"Popover",{enumerable:!0,get:function(){return _popover.default}}),_exports.init=void 0,_jquery=_interopRequireDefault(_jquery),_popover=_interopRequireDefault(_popover);const SELECTORS_FOOTERCONTAINER='[data-region="footer-container-popover"]',SELECTORS_FOOTERCONTENT='[data-region="footer-content-popover"]',SELECTORS_FOOTERBUTTON='[data-action="footer-popover"]';let footerIsShown=!1;_exports.init=()=&gt;{const container=document.querySelector(SELECTORS_FOOTERCONTAINER),footerButton=document.querySelector(SELECTORS_FOOTERBUTTON);(0,_jquery.default)(footerButton).popover({content:getFooterContent,container:container,html:!0,placement:"top",customClass:"footer",trigger:"click"}),document.addEventListener("click",(e=&gt;{footerIsShown&amp;&amp;!e.target.closest(SELECTORS_FOOTERCONTAINER)&amp;&amp;(0,_jquery.default)(footerButton).popover("hide")}),!0),document.addEventListener("keydown",(e=&gt;{footerIsShown&amp;&amp;"Escape"===e.key&amp;&amp;((0,_jquery.default)(footerButton).popover("hide"),footerButton.focus())})),document.addEventListener("focus",(e=&gt;{footerIsShown&amp;&amp;!e.target.closest(SELECTORS_FOOTERCONTAINER)&amp;&amp;(0,_jquery.default)(footerButton).popover("hide")}),!0),(0,_jquery.default)(footerButton).on("show.bs.popover",(()=&gt;{footerIsShown=!0})),(0,_jquery.default)(footerButton).on("hide.bs.popover",(()=&gt;{footerIsShown=!1}))};const getFooterContent=()=&gt;document.querySelector(SELECTORS_FOOTERCONTENT).innerHTML}));
define("theme_boost/drawers",["exports","core/modal_backdrop","core/templates","core/aria","core/event_dispatcher","core/utils","core/pending","jquery"],(function(_exports,_modal_backdrop,_templates,Aria,_event_dispatcher,_utils,_pending,_jquery){function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}function _defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_modal_backdrop=_interopRequireDefault(_modal_backdrop),_templates=_interopRequireDefault(_templates),Aria=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}(Aria),_pending=_interopRequireDefault(_pending),_jquery=_interopRequireDefault(_jquery);let backdropPromise=null;const drawerMap=new Map,SELECTORS_BUTTONS='[data-toggler="drawers"]',SELECTORS_CLOSEBTN='[data-toggler="drawers"][data-action="closedrawer"]',SELECTORS_OPENBTN='[data-toggler="drawers"][data-action="opendrawer"]',SELECTORS_TOGGLEBTN='[data-toggler="drawers"][data-action="toggle"]',SELECTORS_DRAWERS='[data-region="fixed-drawer"]',SELECTORS_CONTAINER="#page.drawers",SELECTORS_DRAWERCONTENT=".drawercontent",CLASSES_SCROLLED="scrolled",CLASSES_SHOW="show",CLASSES_NOTINITIALISED="not-initialized",CLASSES_TOGGLERIGHT=".drawer-right-toggle",sizes_medium=991,sizes_large=1400,getCurrentWidth=()=&gt;{const DomRect=document.body.getBoundingClientRect();return DomRect.x+DomRect.width},isSmall=()=&gt;getCurrentWidth()&lt;sizes_medium,getBackdrop=()=&gt;(backdropPromise||(backdropPromise=_templates.default.render("core/modal_backdrop",{}).then((html=&gt;new _modal_backdrop.default(html))).then((modalBackdrop=&gt;(modalBackdrop.getAttachmentPoint().get(0).addEventListener("click",(e=&gt;{e.preventDefault(),Drawers.closeAllDrawers()})),modalBackdrop))).catch()),backdropPromise),getDrawerOpenButton=drawerId=&gt;{let openButton=document.querySelector("".concat(SELECTORS_OPENBTN,'[data-target="').concat(drawerId,'"]'));return openButton||(openButton=document.querySelector("".concat(SELECTORS_TOGGLEBTN,'[data-target="').concat(drawerId,'"]'))),openButton},disableDrawerTooltips=drawerNode=&gt;{[drawerNode.querySelector(SELECTORS_CLOSEBTN),getDrawerOpenButton(drawerNode.id)].forEach((button=&gt;{button&amp;&amp;disableButtonTooltip(button)}))},disableButtonTooltip=(button,enableOnBlur)=&gt;{button.hasAttribute("data-original-title")?((0,_jquery.default)(button).tooltip("disable"),button.setAttribute("title",button.dataset.originalTitle)):(button.dataset.disabledToggle=button.dataset.toggle,button.removeAttribute("data-toggle")),enableOnBlur&amp;&amp;(button.dataset.restoreTooltipOnBlur=!0)},enableButtonTooltip=button=&gt;{button.hasAttribute("data-original-title")?((0,_jquery.default)(button).tooltip("enable"),button.removeAttribute("title")):button.dataset.disabledToggle&amp;&amp;(button.dataset.toggle=button.dataset.disabledToggle,(0,_jquery.default)(button).tooltip()),delete button.dataset.restoreTooltipOnBlur};class Drawers{constructor(drawerNode){_defineProperty(this,"drawerNode",null),this.drawerNode=drawerNode,isSmall()&amp;&amp;this.closeDrawer({focusOnOpenButton:!1,updatePreferences:!1}),this.drawerNode.classList.contains(CLASSES_SHOW)?this.openDrawer({focusOnCloseButton:!1}):1==this.drawerNode.dataset.forceopen?isSmall()||this.openDrawer({focusOnCloseButton:!1}):Aria.hide(this.drawerNode),isSmall()&amp;&amp;disableDrawerTooltips(this.drawerNode),(drawerNode=&gt;{const content=drawerNode.querySelector(SELECTORS_DRAWERCONTENT);content&amp;&amp;content.addEventListener("scroll",(()=&gt;{drawerNode.classList.toggle(CLASSES_SCROLLED,0!=content.scrollTop)}))})(this.drawerNode),drawerMap.set(drawerNode,this),drawerNode.classList.remove(CLASSES_NOTINITIALISED)}get isOpen(){return this.drawerNode.classList.contains(CLASSES_SHOW)}get closeOnResize(){return!!parseInt(this.drawerNode.dataset.closeOnResize)}static getDrawerInstanceForNode(drawerNode){return drawerMap.has(drawerNode)||new Drawers(drawerNode),drawerMap.get(drawerNode)}dispatchEvent(eventname){let cancelable=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]&amp;&amp;arguments[1];return(0,_event_dispatcher.dispatchEvent)(eventname,{drawerInstance:this},this.drawerNode,{cancelable:cancelable})}openDrawer(){var _this$drawerNode$quer;let{focusOnCloseButton:focusOnCloseButton=!0}=arguments.length&gt;0&amp;&amp;void 0!==arguments[0]?arguments[0]:{};const pendingPromise=new _pending.default("theme_boost/drawers:open");if(this.dispatchEvent(Drawers.eventTypes.drawerShow,!0).defaultPrevented)return;null===(_this$drawerNode$quer=this.drawerNode.querySelector(SELECTORS_CLOSEBTN))||void 0===_this$drawerNode$quer||_this$drawerNode$quer.classList.toggle("hidden",!0);let openButton=getDrawerOpenButton(this.drawerNode.id);var _jQuery;openButton&amp;&amp;openButton.hasAttribute("data-original-title")&amp;&amp;(null===(_jQuery=(0,_jquery.default)(openButton))||void 0===_jQuery||_jQuery.tooltip("hide"));Aria.unhide(this.drawerNode),this.drawerNode.classList.add(CLASSES_SHOW);const preference=this.drawerNode.dataset.preference;preference&amp;&amp;!isSmall()&amp;&amp;1!=this.drawerNode.dataset.forceopen&amp;&amp;M.util.set_user_preference(preference,!0);const state=this.drawerNode.dataset.state;if(state){document.getElementById("page").classList.add(state)}isSmall()&amp;&amp;getBackdrop().then((backdrop=&gt;{backdrop.show();return document.getElementById("page").style.overflow="hidden",backdrop})).catch();const closeButton=this.drawerNode.querySelector(SELECTORS_CLOSEBTN);focusOnCloseButton&amp;&amp;closeButton&amp;&amp;disableButtonTooltip(closeButton,!0),setTimeout((()=&gt;{closeButton.classList.toggle("hidden",!1),focusOnCloseButton&amp;&amp;closeButton.focus(),pendingPromise.resolve()}),300),this.dispatchEvent(Drawers.eventTypes.drawerShown)}closeDrawer(){let{focusOnOpenButton:focusOnOpenButton=!0,updatePreferences:updatePreferences=!0}=arguments.length&gt;0&amp;&amp;void 0!==arguments[0]?arguments[0]:{};const pendingPromise=new _pending.default("theme_boost/drawers:close");if(this.dispatchEvent(Drawers.eventTypes.drawerHide,!0).defaultPrevented)return;const closeButton=this.drawerNode.querySelector(SELECTORS_CLOSEBTN);var _jQuery2;(null==closeButton||closeButton.classList.toggle("hidden",!0),closeButton.hasAttribute("data-original-title"))&amp;&amp;(null===(_jQuery2=(0,_jquery.default)(closeButton))||void 0===_jQuery2||_jQuery2.tooltip("hide"));const preference=this.drawerNode.dataset.preference;preference&amp;&amp;updatePreferences&amp;&amp;!isSmall()&amp;&amp;M.util.set_user_preference(preference,!1);const state=this.drawerNode.dataset.state;if(state){document.getElementById("page").classList.remove(state)}Aria.hide(this.drawerNode),this.drawerNode.classList.remove(CLASSES_SHOW),getBackdrop().then((backdrop=&gt;{if(backdrop.hide(),isSmall()){document.getElementById("page").style.overflow="auto"}return backdrop})).catch();let openButton=getDrawerOpenButton(this.drawerNode.id);openButton&amp;&amp;disableButtonTooltip(openButton,!0),setTimeout((()=&gt;{openButton&amp;&amp;focusOnOpenButton&amp;&amp;openButton.focus(),pendingPromise.resolve()}),300),this.dispatchEvent(Drawers.eventTypes.drawerHidden)}toggleVisibility(){this.drawerNode.classList.contains(CLASSES_SHOW)?this.closeDrawer():this.openDrawer()}static closeAllDrawers(){drawerMap.forEach((drawerInstance=&gt;{drawerInstance.closeDrawer()}))}static closeOtherDrawers(comparisonInstance){drawerMap.forEach((drawerInstance=&gt;{drawerInstance!==comparisonInstance&amp;&amp;drawerInstance.closeDrawer()}))}}_exports.default=Drawers,_defineProperty(Drawers,"eventTypes",{drawerShow:"theme_boost/drawers:show",drawerShown:"theme_boost/drawers:shown",drawerHide:"theme_boost/drawers:hide",drawerHidden:"theme_boost/drawers:hidden"});const scrollbarVisible=htmlNode=&gt;htmlNode.scrollHeight&gt;htmlNode.clientHeight,setLastUsedToggle=toggleButton=&gt;{toggleButton.dataset.target&amp;&amp;(document.querySelectorAll("".concat(SELECTORS_BUTTONS,'[data-target="').concat(toggleButton.dataset.target,'"]')).forEach((btn=&gt;{btn.dataset.lastused=!1})),toggleButton.dataset.lastused=!0)};(()=&gt;{const body=document.querySelector("body"),drawerLayout=document.querySelector(SELECTORS_CONTAINER);if(drawerLayout){const drawerRight=document.querySelector(SELECTORS_CONTAINER+" "+CLASSES_TOGGLERIGHT);!scrollbarVisible(drawerLayout)&amp;&amp;drawerRight&amp;&amp;(drawerRight.style.marginRight="0"),drawerLayout.addEventListener("scroll",(()=&gt;{drawerLayout.scrollTop&gt;=window.innerHeight?body.classList.add(CLASSES_SCROLLED):body.classList.remove(CLASSES_SCROLLED)}))}})(),(()=&gt;{document.addEventListener("click",(e=&gt;{const toggleButton=e.target.closest(SELECTORS_TOGGLEBTN);if(toggleButton&amp;&amp;toggleButton.dataset.target){e.preventDefault();const targetDrawer=document.getElementById(toggleButton.dataset.target),drawerInstance=Drawers.getDrawerInstanceForNode(targetDrawer);setLastUsedToggle(toggleButton),drawerInstance.toggleVisibility()}const openDrawerButton=e.target.closest(SELECTORS_OPENBTN);if(openDrawerButton&amp;&amp;openDrawerButton.dataset.target){e.preventDefault();const targetDrawer=document.getElementById(openDrawerButton.dataset.target),drawerInstance=Drawers.getDrawerInstanceForNode(targetDrawer);setLastUsedToggle(toggleButton),drawerInstance.openDrawer()}const closeDrawerButton=e.target.closest(SELECTORS_CLOSEBTN);if(closeDrawerButton&amp;&amp;closeDrawerButton.dataset.target){e.preventDefault();const targetDrawer=document.getElementById(closeDrawerButton.dataset.target);Drawers.getDrawerInstanceForNode(targetDrawer).closeDrawer(),(target=&gt;{const lastUsedButton=document.querySelector("".concat(SELECTORS_BUTTONS,'[data-target="').concat(target,'"][data-lastused="true"'));lastUsedButton&amp;&amp;lastUsedButton.focus()})(closeDrawerButton.dataset.target)}})),document.addEventListener(Drawers.eventTypes.drawerShow,(e=&gt;{getCurrentWidth()&gt;=sizes_large||Drawers.closeOtherDrawers(e.detail.drawerInstance)}));const btnSelector="".concat(SELECTORS_TOGGLEBTN,", ").concat(SELECTORS_OPENBTN,", ").concat(SELECTORS_CLOSEBTN);document.addEventListener("focusout",(e=&gt;{const button=e.target.closest(btnSelector);void 0!==(null==button?void 0:button.dataset.restoreTooltipOnBlur)&amp;&amp;enableButtonTooltip(button)}));window.addEventListener("resize",(0,_utils.debounce)((()=&gt;{if(isSmall()){let anyOpen=!1;drawerMap.forEach((drawerInstance=&gt;{disableDrawerTooltips(drawerInstance.drawerNode),drawerInstance.isOpen&amp;&amp;(drawerInstance.closeOnResize?drawerInstance.closeDrawer():anyOpen=!0)})),anyOpen&amp;&amp;getBackdrop().then((backdrop=&gt;backdrop.show())).catch()}else drawerMap.forEach((drawerInstance=&gt;{var drawerNode;[(drawerNode=drawerInstance.drawerNode).querySelector(SELECTORS_CLOSEBTN),getDrawerOpenButton(drawerNode.id)].forEach((button=&gt;{button&amp;&amp;enableButtonTooltip(button)}))})),getBackdrop().then((backdrop=&gt;backdrop.hide())).catch()}),400,{pending:!0}))})();return document.querySelectorAll(SELECTORS_DRAWERS).forEach((drawerNode=&gt;Drawers.getDrawerInstanceForNode(drawerNode))),_exports.default}));
define("theme_boost/bootstrap/toast",["exports","jquery","./util"],(function(_exports,_jquery,_util){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_jquery=_interopRequireDefault(_jquery),_util=_interopRequireDefault(_util);const NAME="toast",EVENT_KEY=".".concat("bs.toast"),JQUERY_NO_CONFLICT=_jquery.default.fn.toast,EVENT_CLICK_DISMISS="click.dismiss".concat(EVENT_KEY),EVENT_HIDE="hide".concat(EVENT_KEY),EVENT_HIDDEN="hidden".concat(EVENT_KEY),EVENT_SHOW="show".concat(EVENT_KEY),EVENT_SHOWN="shown".concat(EVENT_KEY),Default={animation:!0,autohide:!0,delay:500},DefaultType={animation:"boolean",autohide:"boolean",delay:"number"};class Toast{constructor(element,config){this._element=element,this._config=this._getConfig(config),this._timeout=null,this._setListeners()}static get VERSION(){return"4.6.2"}static get DefaultType(){return DefaultType}static get Default(){return Default}show(){const showEvent=_jquery.default.Event(EVENT_SHOW);if((0,_jquery.default)(this._element).trigger(showEvent),showEvent.isDefaultPrevented())return;this._clearTimeout(),this._config.animation&amp;&amp;this._element.classList.add("fade");const complete=()=&gt;{this._element.classList.remove("showing"),this._element.classList.add("show"),(0,_jquery.default)(this._element).trigger(EVENT_SHOWN),this._config.autohide&amp;&amp;(this._timeout=setTimeout((()=&gt;{this.hide()}),this._config.delay))};if(this._element.classList.remove("hide"),_util.default.reflow(this._element),this._element.classList.add("showing"),this._config.animation){const transitionDuration=_util.default.getTransitionDurationFromElement(this._element);(0,_jquery.default)(this._element).one(_util.default.TRANSITION_END,complete).emulateTransitionEnd(transitionDuration)}else complete()}hide(){if(!this._element.classList.contains("show"))return;const hideEvent=_jquery.default.Event(EVENT_HIDE);(0,_jquery.default)(this._element).trigger(hideEvent),hideEvent.isDefaultPrevented()||this._close()}dispose(){this._clearTimeout(),this._element.classList.contains("show")&amp;&amp;this._element.classList.remove("show"),(0,_jquery.default)(this._element).off(EVENT_CLICK_DISMISS),_jquery.default.removeData(this._element,"bs.toast"),this._element=null,this._config=null}_getConfig(config){return config={...Default,...(0,_jquery.default)(this._element).data(),..."object"==typeof config&amp;&amp;config?config:{}},_util.default.typeCheckConfig(NAME,config,this.constructor.DefaultType),config}_setListeners(){(0,_jquery.default)(this._element).on(EVENT_CLICK_DISMISS,'[data-dismiss="toast"]',(()=&gt;this.hide()))}_close(){const complete=()=&gt;{this._element.classList.add("hide"),(0,_jquery.default)(this._element).trigger(EVENT_HIDDEN)};if(this._element.classList.remove("show"),this._config.animation){const transitionDuration=_util.default.getTransitionDurationFromElement(this._element);(0,_jquery.default)(this._element).one(_util.default.TRANSITION_END,complete).emulateTransitionEnd(transitionDuration)}else complete()}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static _jQueryInterface(config){return this.each((function(){const $element=(0,_jquery.default)(this);let data=$element.data("bs.toast");if(data||(data=new Toast(this,"object"==typeof config&amp;&amp;config),$element.data("bs.toast",data)),"string"==typeof config){if(void 0===data[config])throw new TypeError('No method named "'.concat(config,'"'));data[config](this)}}))}}_jquery.default.fn.toast=Toast._jQueryInterface,_jquery.default.fn.toast.Constructor=Toast,_jquery.default.fn.toast.noConflict=()=&gt;(_jquery.default.fn.toast=JQUERY_NO_CONFLICT,Toast._jQueryInterface);var _default=Toast;return _exports.default=_default,_exports.default}));
define("theme_boost/bootstrap/scrollspy",["exports","jquery","./util"],(function(_exports,_jquery,_util){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_jquery=_interopRequireDefault(_jquery),_util=_interopRequireDefault(_util);const NAME="scrollspy",EVENT_KEY=".".concat("bs.scrollspy"),JQUERY_NO_CONFLICT=_jquery.default.fn[NAME],EVENT_ACTIVATE="activate".concat(EVENT_KEY),EVENT_SCROLL="scroll".concat(EVENT_KEY),EVENT_LOAD_DATA_API="load".concat(EVENT_KEY).concat(".data-api"),Default={offset:10,method:"auto",target:""},DefaultType={offset:"number",method:"string",target:"(string|element)"};class ScrollSpy{constructor(element,config){this._element=element,this._scrollElement="BODY"===element.tagName?window:element,this._config=this._getConfig(config),this._selector="".concat(this._config.target," ").concat(".nav-link",",")+"".concat(this._config.target," ").concat(".list-group-item",",")+"".concat(this._config.target," ").concat(".dropdown-item"),this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,(0,_jquery.default)(this._scrollElement).on(EVENT_SCROLL,(event=&gt;this._process(event))),this.refresh(),this._process()}static get VERSION(){return"4.6.2"}static get Default(){return Default}refresh(){const autoMethod=this._scrollElement===this._scrollElement.window?"offset":"position",offsetMethod="auto"===this._config.method?autoMethod:this._config.method,offsetBase="position"===offsetMethod?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight();[].slice.call(document.querySelectorAll(this._selector)).map((element=&gt;{let target;const targetSelector=_util.default.getSelectorFromElement(element);if(targetSelector&amp;&amp;(target=document.querySelector(targetSelector)),target){const targetBCR=target.getBoundingClientRect();if(targetBCR.width||targetBCR.height)return[(0,_jquery.default)(target)[offsetMethod]().top+offsetBase,targetSelector]}return null})).filter(Boolean).sort(((a,b)=&gt;a[0]-b[0])).forEach((item=&gt;{this._offsets.push(item[0]),this._targets.push(item[1])}))}dispose(){_jquery.default.removeData(this._element,"bs.scrollspy"),(0,_jquery.default)(this._scrollElement).off(EVENT_KEY),this._element=null,this._scrollElement=null,this._config=null,this._selector=null,this._offsets=null,this._targets=null,this._activeTarget=null,this._scrollHeight=null}_getConfig(config){if("string"!=typeof(config={...Default,..."object"==typeof config&amp;&amp;config?config:{}}).target&amp;&amp;_util.default.isElement(config.target)){let id=(0,_jquery.default)(config.target).attr("id");id||(id=_util.default.getUID(NAME),(0,_jquery.default)(config.target).attr("id",id)),config.target="#".concat(id)}return _util.default.typeCheckConfig(NAME,config,DefaultType),config}_getScrollTop(){return this._scrollElement===window?this._scrollElement.pageYOffset:this._scrollElement.scrollTop}_getScrollHeight(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)}_getOffsetHeight(){return this._scrollElement===window?window.innerHeight:this._scrollElement.getBoundingClientRect().height}_process(){const scrollTop=this._getScrollTop()+this._config.offset,scrollHeight=this._getScrollHeight(),maxScroll=this._config.offset+scrollHeight-this._getOffsetHeight();if(this._scrollHeight!==scrollHeight&amp;&amp;this.refresh(),scrollTop&gt;=maxScroll){const target=this._targets[this._targets.length-1];this._activeTarget!==target&amp;&amp;this._activate(target)}else{if(this._activeTarget&amp;&amp;scrollTop&lt;this._offsets[0]&amp;&amp;this._offsets[0]&gt;0)return this._activeTarget=null,void this._clear();for(let i=this._offsets.length;i--;){this._activeTarget!==this._targets[i]&amp;&amp;scrollTop&gt;=this._offsets[i]&amp;&amp;(void 0===this._offsets[i+1]||scrollTop&lt;this._offsets[i+1])&amp;&amp;this._activate(this._targets[i])}}}_activate(target){this._activeTarget=target,this._clear();const queries=this._selector.split(",").map((selector=&gt;"".concat(selector,'[data-target="').concat(target,'"],').concat(selector,'[href="').concat(target,'"]'))),$link=(0,_jquery.default)([].slice.call(document.querySelectorAll(queries.join(","))));$link.hasClass("dropdown-item")?($link.closest(".dropdown").find(".dropdown-toggle").addClass("active"),$link.addClass("active")):($link.addClass("active"),$link.parents(".nav, .list-group").prev("".concat(".nav-link",", ").concat(".list-group-item")).addClass("active"),$link.parents(".nav, .list-group").prev(".nav-item").children(".nav-link").addClass("active")),(0,_jquery.default)(this._scrollElement).trigger(EVENT_ACTIVATE,{relatedTarget:target})}_clear(){[].slice.call(document.querySelectorAll(this._selector)).filter((node=&gt;node.classList.contains("active"))).forEach((node=&gt;node.classList.remove("active")))}static _jQueryInterface(config){return this.each((function(){let data=(0,_jquery.default)(this).data("bs.scrollspy");if(data||(data=new ScrollSpy(this,"object"==typeof config&amp;&amp;config),(0,_jquery.default)(this).data("bs.scrollspy",data)),"string"==typeof config){if(void 0===data[config])throw new TypeError('No method named "'.concat(config,'"'));data[config]()}}))}}(0,_jquery.default)(window).on(EVENT_LOAD_DATA_API,(()=&gt;{const scrollSpys=[].slice.call(document.querySelectorAll('[data-spy="scroll"]'));for(let i=scrollSpys.length;i--;){const $spy=(0,_jquery.default)(scrollSpys[i]);ScrollSpy._jQueryInterface.call($spy,$spy.data())}})),_jquery.default.fn[NAME]=ScrollSpy._jQueryInterface,_jquery.default.fn[NAME].Constructor=ScrollSpy,_jquery.default.fn[NAME].noConflict=()=&gt;(_jquery.default.fn[NAME]=JQUERY_NO_CONFLICT,ScrollSpy._jQueryInterface);var _default=ScrollSpy;return _exports.default=_default,_exports.default}));
define("theme_boost/bootstrap/collapse",["exports","jquery","./util"],(function(_exports,_jquery,_util){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_jquery=_interopRequireDefault(_jquery),_util=_interopRequireDefault(_util);const NAME="collapse",DATA_KEY="bs.collapse",EVENT_KEY=".".concat(DATA_KEY),JQUERY_NO_CONFLICT=_jquery.default.fn[NAME],EVENT_SHOW="show".concat(EVENT_KEY),EVENT_SHOWN="shown".concat(EVENT_KEY),EVENT_HIDE="hide".concat(EVENT_KEY),EVENT_HIDDEN="hidden".concat(EVENT_KEY),EVENT_CLICK_DATA_API="click".concat(EVENT_KEY).concat(".data-api"),Default={toggle:!0,parent:""},DefaultType={toggle:"boolean",parent:"(string|element)"};class Collapse{constructor(element,config){this._isTransitioning=!1,this._element=element,this._config=this._getConfig(config),this._triggerArray=[].slice.call(document.querySelectorAll('[data-toggle="collapse"][href="#'.concat(element.id,'"],')+'[data-toggle="collapse"][data-target="#'.concat(element.id,'"]')));const toggleList=[].slice.call(document.querySelectorAll('[data-toggle="collapse"]'));for(let i=0,len=toggleList.length;i&lt;len;i++){const elem=toggleList[i],selector=_util.default.getSelectorFromElement(elem),filterElement=[].slice.call(document.querySelectorAll(selector)).filter((foundElem=&gt;foundElem===element));null!==selector&amp;&amp;filterElement.length&gt;0&amp;&amp;(this._selector=selector,this._triggerArray.push(elem))}this._parent=this._config.parent?this._getParent():null,this._config.parent||this._addAriaAndCollapsedClass(this._element,this._triggerArray),this._config.toggle&amp;&amp;this.toggle()}static get VERSION(){return"4.6.2"}static get Default(){return Default}toggle(){(0,_jquery.default)(this._element).hasClass("show")?this.hide():this.show()}show(){if(this._isTransitioning||(0,_jquery.default)(this._element).hasClass("show"))return;let actives,activesData;if(this._parent&amp;&amp;(actives=[].slice.call(this._parent.querySelectorAll(".show, .collapsing")).filter((elem=&gt;"string"==typeof this._config.parent?elem.getAttribute("data-parent")===this._config.parent:elem.classList.contains("collapse"))),0===actives.length&amp;&amp;(actives=null)),actives&amp;&amp;(activesData=(0,_jquery.default)(actives).not(this._selector).data(DATA_KEY),activesData&amp;&amp;activesData._isTransitioning))return;const startEvent=_jquery.default.Event(EVENT_SHOW);if((0,_jquery.default)(this._element).trigger(startEvent),startEvent.isDefaultPrevented())return;actives&amp;&amp;(Collapse._jQueryInterface.call((0,_jquery.default)(actives).not(this._selector),"hide"),activesData||(0,_jquery.default)(actives).data(DATA_KEY,null));const dimension=this._getDimension();(0,_jquery.default)(this._element).removeClass("collapse").addClass("collapsing"),this._element.style[dimension]=0,this._triggerArray.length&amp;&amp;(0,_jquery.default)(this._triggerArray).removeClass("collapsed").attr("aria-expanded",!0),this.setTransitioning(!0);const capitalizedDimension=dimension[0].toUpperCase()+dimension.slice(1),scrollSize="scroll".concat(capitalizedDimension),transitionDuration=_util.default.getTransitionDurationFromElement(this._element);(0,_jquery.default)(this._element).one(_util.default.TRANSITION_END,(()=&gt;{(0,_jquery.default)(this._element).removeClass("collapsing").addClass("".concat("collapse"," ").concat("show")),this._element.style[dimension]="",this.setTransitioning(!1),(0,_jquery.default)(this._element).trigger(EVENT_SHOWN)})).emulateTransitionEnd(transitionDuration),this._element.style[dimension]="".concat(this._element[scrollSize],"px")}hide(){if(this._isTransitioning||!(0,_jquery.default)(this._element).hasClass("show"))return;const startEvent=_jquery.default.Event(EVENT_HIDE);if((0,_jquery.default)(this._element).trigger(startEvent),startEvent.isDefaultPrevented())return;const dimension=this._getDimension();this._element.style[dimension]="".concat(this._element.getBoundingClientRect()[dimension],"px"),_util.default.reflow(this._element),(0,_jquery.default)(this._element).addClass("collapsing").removeClass("".concat("collapse"," ").concat("show"));const triggerArrayLength=this._triggerArray.length;if(triggerArrayLength&gt;0)for(let i=0;i&lt;triggerArrayLength;i++){const trigger=this._triggerArray[i],selector=_util.default.getSelectorFromElement(trigger);if(null!==selector){(0,_jquery.default)([].slice.call(document.querySelectorAll(selector))).hasClass("show")||(0,_jquery.default)(trigger).addClass("collapsed").attr("aria-expanded",!1)}}this.setTransitioning(!0);this._element.style[dimension]="";const transitionDuration=_util.default.getTransitionDurationFromElement(this._element);(0,_jquery.default)(this._element).one(_util.default.TRANSITION_END,(()=&gt;{this.setTransitioning(!1),(0,_jquery.default)(this._element).removeClass("collapsing").addClass("collapse").trigger(EVENT_HIDDEN)})).emulateTransitionEnd(transitionDuration)}setTransitioning(isTransitioning){this._isTransitioning=isTransitioning}dispose(){_jquery.default.removeData(this._element,DATA_KEY),this._config=null,this._parent=null,this._element=null,this._triggerArray=null,this._isTransitioning=null}_getConfig(config){return(config={...Default,...config}).toggle=Boolean(config.toggle),_util.default.typeCheckConfig(NAME,config,DefaultType),config}_getDimension(){return(0,_jquery.default)(this._element).hasClass("width")?"width":"height"}_getParent(){let parent;_util.default.isElement(this._config.parent)?(parent=this._config.parent,void 0!==this._config.parent.jquery&amp;&amp;(parent=this._config.parent[0])):parent=document.querySelector(this._config.parent);const selector='[data-toggle="collapse"][data-parent="'.concat(this._config.parent,'"]'),children=[].slice.call(parent.querySelectorAll(selector));return(0,_jquery.default)(children).each(((i,element)=&gt;{this._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element),[element])})),parent}_addAriaAndCollapsedClass(element,triggerArray){const isOpen=(0,_jquery.default)(element).hasClass("show");triggerArray.length&amp;&amp;(0,_jquery.default)(triggerArray).toggleClass("collapsed",!isOpen).attr("aria-expanded",isOpen)}static _getTargetFromElement(element){const selector=_util.default.getSelectorFromElement(element);return selector?document.querySelector(selector):null}static _jQueryInterface(config){return this.each((function(){const $element=(0,_jquery.default)(this);let data=$element.data(DATA_KEY);const _config={...Default,...$element.data(),..."object"==typeof config&amp;&amp;config?config:{}};if(!data&amp;&amp;_config.toggle&amp;&amp;"string"==typeof config&amp;&amp;/show|hide/.test(config)&amp;&amp;(_config.toggle=!1),data||(data=new Collapse(this,_config),$element.data(DATA_KEY,data)),"string"==typeof config){if(void 0===data[config])throw new TypeError('No method named "'.concat(config,'"'));data[config]()}}))}}(0,_jquery.default)(document).on(EVENT_CLICK_DATA_API,'[data-toggle="collapse"]',(function(event){"A"===event.currentTarget.tagName&amp;&amp;event.preventDefault();const $trigger=(0,_jquery.default)(this),selector=_util.default.getSelectorFromElement(this),selectors=[].slice.call(document.querySelectorAll(selector));(0,_jquery.default)(selectors).each((function(){const $target=(0,_jquery.default)(this),config=$target.data(DATA_KEY)?"toggle":$trigger.data();Collapse._jQueryInterface.call($target,config)}))})),_jquery.default.fn[NAME]=Collapse._jQueryInterface,_jquery.default.fn[NAME].Constructor=Collapse,_jquery.default.fn[NAME].noConflict=()=&gt;(_jquery.default.fn[NAME]=JQUERY_NO_CONFLICT,Collapse._jQueryInterface);var _default=Collapse;return _exports.default=_default,_exports.default}));
define("theme_boost/bootstrap/button",["exports","jquery"],(function(_exports,_jquery){var obj;Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_jquery=(obj=_jquery)&amp;&amp;obj.__esModule?obj:{default:obj};const NAME="button",EVENT_KEY=".".concat("bs.button"),JQUERY_NO_CONFLICT=_jquery.default.fn[NAME],EVENT_CLICK_DATA_API="click".concat(EVENT_KEY).concat(".data-api"),EVENT_FOCUS_BLUR_DATA_API="focus".concat(EVENT_KEY).concat(".data-api"," ")+"blur".concat(EVENT_KEY).concat(".data-api"),EVENT_LOAD_DATA_API="load".concat(EVENT_KEY).concat(".data-api");class Button{constructor(element){this._element=element,this.shouldAvoidTriggerChange=!1}static get VERSION(){return"4.6.2"}toggle(){let triggerChangeEvent=!0,addAriaPressed=!0;const rootElement=(0,_jquery.default)(this._element).closest('[data-toggle="buttons"]')[0];if(rootElement){const input=this._element.querySelector('input:not([type="hidden"])');if(input){if("radio"===input.type)if(input.checked&amp;&amp;this._element.classList.contains("active"))triggerChangeEvent=!1;else{const activeElement=rootElement.querySelector(".active");activeElement&amp;&amp;(0,_jquery.default)(activeElement).removeClass("active")}triggerChangeEvent&amp;&amp;("checkbox"!==input.type&amp;&amp;"radio"!==input.type||(input.checked=!this._element.classList.contains("active")),this.shouldAvoidTriggerChange||(0,_jquery.default)(input).trigger("change")),input.focus(),addAriaPressed=!1}}this._element.hasAttribute("disabled")||this._element.classList.contains("disabled")||(addAriaPressed&amp;&amp;this._element.setAttribute("aria-pressed",!this._element.classList.contains("active")),triggerChangeEvent&amp;&amp;(0,_jquery.default)(this._element).toggleClass("active"))}dispose(){_jquery.default.removeData(this._element,"bs.button"),this._element=null}static _jQueryInterface(config,avoidTriggerChange){return this.each((function(){const $element=(0,_jquery.default)(this);let data=$element.data("bs.button");data||(data=new Button(this),$element.data("bs.button",data)),data.shouldAvoidTriggerChange=avoidTriggerChange,"toggle"===config&amp;&amp;data[config]()}))}}(0,_jquery.default)(document).on(EVENT_CLICK_DATA_API,'[data-toggle^="button"]',(event=&gt;{let button=event.target;const initialButton=button;if((0,_jquery.default)(button).hasClass("btn")||(button=(0,_jquery.default)(button).closest(".btn")[0]),!button||button.hasAttribute("disabled")||button.classList.contains("disabled"))event.preventDefault();else{const inputBtn=button.querySelector('input:not([type="hidden"])');if(inputBtn&amp;&amp;(inputBtn.hasAttribute("disabled")||inputBtn.classList.contains("disabled")))return void event.preventDefault();"INPUT"!==initialButton.tagName&amp;&amp;"LABEL"===button.tagName||Button._jQueryInterface.call((0,_jquery.default)(button),"toggle","INPUT"===initialButton.tagName)}})).on(EVENT_FOCUS_BLUR_DATA_API,'[data-toggle^="button"]',(event=&gt;{const button=(0,_jquery.default)(event.target).closest(".btn")[0];(0,_jquery.default)(button).toggleClass("focus",/^focus(in)?$/.test(event.type))})),(0,_jquery.default)(window).on(EVENT_LOAD_DATA_API,(()=&gt;{let buttons=[].slice.call(document.querySelectorAll('[data-toggle="buttons"] .btn'));for(let i=0,len=buttons.length;i&lt;len;i++){const button=buttons[i],input=button.querySelector('input:not([type="hidden"])');input.checked||input.hasAttribute("checked")?button.classList.add("active"):button.classList.remove("active")}buttons=[].slice.call(document.querySelectorAll('[data-toggle="button"]'));for(let i=0,len=buttons.length;i&lt;len;i++){const button=buttons[i];"true"===button.getAttribute("aria-pressed")?button.classList.add("active"):button.classList.remove("active")}})),_jquery.default.fn[NAME]=Button._jQueryInterface,_jquery.default.fn[NAME].Constructor=Button,_jquery.default.fn[NAME].noConflict=()=&gt;(_jquery.default.fn[NAME]=JQUERY_NO_CONFLICT,Button._jQueryInterface);var _default=Button;return _exports.default=_default,_exports.default}));
define("theme_boost/bootstrap/util",["exports","jquery"],(function(_exports,_jquery){var obj;Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_jquery=(obj=_jquery)&amp;&amp;obj.__esModule?obj:{default:obj};function toType(obj){return null==obj?"".concat(obj):{}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase()}function transitionEndEmulator(duration){let called=!1;return(0,_jquery.default)(this).one(Util.TRANSITION_END,(()=&gt;{called=!0})),setTimeout((()=&gt;{called||Util.triggerTransitionEnd(this)}),duration),this}const Util={TRANSITION_END:"bsTransitionEnd",getUID(prefix){do{prefix+=~~(1e6*Math.random())}while(document.getElementById(prefix));return prefix},getSelectorFromElement(element){let selector=element.getAttribute("data-target");if(!selector||"#"===selector){const hrefAttr=element.getAttribute("href");selector=hrefAttr&amp;&amp;"#"!==hrefAttr?hrefAttr.trim():""}try{return document.querySelector(selector)?selector:null}catch(_){return null}},getTransitionDurationFromElement(element){if(!element)return 0;let transitionDuration=(0,_jquery.default)(element).css("transition-duration"),transitionDelay=(0,_jquery.default)(element).css("transition-delay");const floatTransitionDuration=parseFloat(transitionDuration),floatTransitionDelay=parseFloat(transitionDelay);return floatTransitionDuration||floatTransitionDelay?(transitionDuration=transitionDuration.split(",")[0],transitionDelay=transitionDelay.split(",")[0],1e3*(parseFloat(transitionDuration)+parseFloat(transitionDelay))):0},reflow:element=&gt;element.offsetHeight,triggerTransitionEnd(element){(0,_jquery.default)(element).trigger("transitionend")},supportsTransitionEnd:()=&gt;Boolean("transitionend"),isElement:obj=&gt;(obj[0]||obj).nodeType,typeCheckConfig(componentName,config,configTypes){for(const property in configTypes)if(Object.prototype.hasOwnProperty.call(configTypes,property)){const expectedTypes=configTypes[property],value=config[property],valueType=value&amp;&amp;Util.isElement(value)?"element":toType(value);if(!new RegExp(expectedTypes).test(valueType))throw new Error("".concat(componentName.toUpperCase(),": ")+'Option "'.concat(property,'" provided type "').concat(valueType,'" ')+'but expected type "'.concat(expectedTypes,'".'))}},findShadowRoot(element){if(!document.documentElement.attachShadow)return null;if("function"==typeof element.getRootNode){const root=element.getRootNode();return root instanceof ShadowRoot?root:null}return element instanceof ShadowRoot?element:element.parentNode?Util.findShadowRoot(element.parentNode):null},jQueryDetection(){if(void 0===_jquery.default)throw new TypeError("Bootstrap's JavaScript requires jQuery. jQuery must be included before Bootstrap's JavaScript.");const version=_jquery.default.fn.jquery.split(" ")[0].split(".");if(version[0]&lt;2&amp;&amp;version[1]&lt;9||1===version[0]&amp;&amp;9===version[1]&amp;&amp;version[2]&lt;1||version[0]&gt;=4)throw new Error("Bootstrap's JavaScript requires at least jQuery v1.9.1 but less than v4.0.0")}};Util.jQueryDetection(),_jquery.default.fn.emulateTransitionEnd=transitionEndEmulator,_jquery.default.event.special[Util.TRANSITION_END]={bindType:"transitionend",delegateType:"transitionend",handle(event){if((0,_jquery.default)(event.target).is(this))return event.handleObj.handler.apply(this,arguments)}};var _default=Util;return _exports.default=_default,_exports.default}));
define("theme_boost/bootstrap/modal",["exports","jquery","./util"],(function(_exports,_jquery,_util){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_jquery=_interopRequireDefault(_jquery),_util=_interopRequireDefault(_util);const NAME="modal",EVENT_KEY=".".concat("bs.modal"),JQUERY_NO_CONFLICT=_jquery.default.fn.modal,EVENT_HIDE="hide".concat(EVENT_KEY),EVENT_HIDE_PREVENTED="hidePrevented".concat(EVENT_KEY),EVENT_HIDDEN="hidden".concat(EVENT_KEY),EVENT_SHOW="show".concat(EVENT_KEY),EVENT_SHOWN="shown".concat(EVENT_KEY),EVENT_FOCUSIN="focusin".concat(EVENT_KEY),EVENT_RESIZE="resize".concat(EVENT_KEY),EVENT_CLICK_DISMISS="click.dismiss".concat(EVENT_KEY),EVENT_KEYDOWN_DISMISS="keydown.dismiss".concat(EVENT_KEY),EVENT_MOUSEUP_DISMISS="mouseup.dismiss".concat(EVENT_KEY),EVENT_MOUSEDOWN_DISMISS="mousedown.dismiss".concat(EVENT_KEY),EVENT_CLICK_DATA_API="click".concat(EVENT_KEY).concat(".data-api"),Default={backdrop:!0,keyboard:!0,focus:!0,show:!0},DefaultType={backdrop:"(boolean|string)",keyboard:"boolean",focus:"boolean",show:"boolean"};class Modal{constructor(element,config){this._config=this._getConfig(config),this._element=element,this._dialog=element.querySelector(".modal-dialog"),this._backdrop=null,this._isShown=!1,this._isBodyOverflowing=!1,this._ignoreBackdropClick=!1,this._isTransitioning=!1,this._scrollbarWidth=0}static get VERSION(){return"4.6.2"}static get Default(){return Default}toggle(relatedTarget){return this._isShown?this.hide():this.show(relatedTarget)}show(relatedTarget){if(this._isShown||this._isTransitioning)return;const showEvent=_jquery.default.Event(EVENT_SHOW,{relatedTarget:relatedTarget});(0,_jquery.default)(this._element).trigger(showEvent),showEvent.isDefaultPrevented()||(this._isShown=!0,(0,_jquery.default)(this._element).hasClass("fade")&amp;&amp;(this._isTransitioning=!0),this._checkScrollbar(),this._setScrollbar(),this._adjustDialog(),this._setEscapeEvent(),this._setResizeEvent(),(0,_jquery.default)(this._element).on(EVENT_CLICK_DISMISS,'[data-dismiss="modal"]',(event=&gt;this.hide(event))),(0,_jquery.default)(this._dialog).on(EVENT_MOUSEDOWN_DISMISS,(()=&gt;{(0,_jquery.default)(this._element).one(EVENT_MOUSEUP_DISMISS,(event=&gt;{(0,_jquery.default)(event.target).is(this._element)&amp;&amp;(this._ignoreBackdropClick=!0)}))})),this._showBackdrop((()=&gt;this._showElement(relatedTarget))))}hide(event){if(event&amp;&amp;event.preventDefault(),!this._isShown||this._isTransitioning)return;const hideEvent=_jquery.default.Event(EVENT_HIDE);if((0,_jquery.default)(this._element).trigger(hideEvent),!this._isShown||hideEvent.isDefaultPrevented())return;this._isShown=!1;const transition=(0,_jquery.default)(this._element).hasClass("fade");if(transition&amp;&amp;(this._isTransitioning=!0),this._setEscapeEvent(),this._setResizeEvent(),(0,_jquery.default)(document).off(EVENT_FOCUSIN),(0,_jquery.default)(this._element).removeClass("show"),(0,_jquery.default)(this._element).off(EVENT_CLICK_DISMISS),(0,_jquery.default)(this._dialog).off(EVENT_MOUSEDOWN_DISMISS),transition){const transitionDuration=_util.default.getTransitionDurationFromElement(this._element);(0,_jquery.default)(this._element).one(_util.default.TRANSITION_END,(event=&gt;this._hideModal(event))).emulateTransitionEnd(transitionDuration)}else this._hideModal()}dispose(){[window,this._element,this._dialog].forEach((htmlElement=&gt;(0,_jquery.default)(htmlElement).off(EVENT_KEY))),(0,_jquery.default)(document).off(EVENT_FOCUSIN),_jquery.default.removeData(this._element,"bs.modal"),this._config=null,this._element=null,this._dialog=null,this._backdrop=null,this._isShown=null,this._isBodyOverflowing=null,this._ignoreBackdropClick=null,this._isTransitioning=null,this._scrollbarWidth=null}handleUpdate(){this._adjustDialog()}_getConfig(config){return config={...Default,...config},_util.default.typeCheckConfig(NAME,config,DefaultType),config}_triggerBackdropTransition(){const hideEventPrevented=_jquery.default.Event(EVENT_HIDE_PREVENTED);if((0,_jquery.default)(this._element).trigger(hideEventPrevented),hideEventPrevented.isDefaultPrevented())return;const isModalOverflowing=this._element.scrollHeight&gt;document.documentElement.clientHeight;isModalOverflowing||(this._element.style.overflowY="hidden"),this._element.classList.add("modal-static");const modalTransitionDuration=_util.default.getTransitionDurationFromElement(this._dialog);(0,_jquery.default)(this._element).off(_util.default.TRANSITION_END),(0,_jquery.default)(this._element).one(_util.default.TRANSITION_END,(()=&gt;{this._element.classList.remove("modal-static"),isModalOverflowing||(0,_jquery.default)(this._element).one(_util.default.TRANSITION_END,(()=&gt;{this._element.style.overflowY=""})).emulateTransitionEnd(this._element,modalTransitionDuration)})).emulateTransitionEnd(modalTransitionDuration),this._element.focus()}_showElement(relatedTarget){const transition=(0,_jquery.default)(this._element).hasClass("fade"),modalBody=this._dialog?this._dialog.querySelector(".modal-body"):null;this._element.parentNode&amp;&amp;this._element.parentNode.nodeType===Node.ELEMENT_NODE||document.body.appendChild(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),(0,_jquery.default)(this._dialog).hasClass("modal-dialog-scrollable")&amp;&amp;modalBody?modalBody.scrollTop=0:this._element.scrollTop=0,transition&amp;&amp;_util.default.reflow(this._element),(0,_jquery.default)(this._element).addClass("show"),this._config.focus&amp;&amp;this._enforceFocus();const shownEvent=_jquery.default.Event(EVENT_SHOWN,{relatedTarget:relatedTarget}),transitionComplete=()=&gt;{this._config.focus&amp;&amp;this._element.focus(),this._isTransitioning=!1,(0,_jquery.default)(this._element).trigger(shownEvent)};if(transition){const transitionDuration=_util.default.getTransitionDurationFromElement(this._dialog);(0,_jquery.default)(this._dialog).one(_util.default.TRANSITION_END,transitionComplete).emulateTransitionEnd(transitionDuration)}else transitionComplete()}_enforceFocus(){(0,_jquery.default)(document).off(EVENT_FOCUSIN).on(EVENT_FOCUSIN,(event=&gt;{document!==event.target&amp;&amp;this._element!==event.target&amp;&amp;0===(0,_jquery.default)(this._element).has(event.target).length&amp;&amp;this._element.focus()}))}_setEscapeEvent(){this._isShown?(0,_jquery.default)(this._element).on(EVENT_KEYDOWN_DISMISS,(event=&gt;{this._config.keyboard&amp;&amp;27===event.which?(event.preventDefault(),this.hide()):this._config.keyboard||27!==event.which||this._triggerBackdropTransition()})):this._isShown||(0,_jquery.default)(this._element).off(EVENT_KEYDOWN_DISMISS)}_setResizeEvent(){this._isShown?(0,_jquery.default)(window).on(EVENT_RESIZE,(event=&gt;this.handleUpdate(event))):(0,_jquery.default)(window).off(EVENT_RESIZE)}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._showBackdrop((()=&gt;{(0,_jquery.default)(document.body).removeClass("modal-open"),this._resetAdjustments(),this._resetScrollbar(),(0,_jquery.default)(this._element).trigger(EVENT_HIDDEN)}))}_removeBackdrop(){this._backdrop&amp;&amp;((0,_jquery.default)(this._backdrop).remove(),this._backdrop=null)}_showBackdrop(callback){const animate=(0,_jquery.default)(this._element).hasClass("fade")?"fade":"";if(this._isShown&amp;&amp;this._config.backdrop){if(this._backdrop=document.createElement("div"),this._backdrop.className="modal-backdrop",animate&amp;&amp;this._backdrop.classList.add(animate),(0,_jquery.default)(this._backdrop).appendTo(document.body),(0,_jquery.default)(this._element).on(EVENT_CLICK_DISMISS,(event=&gt;{this._ignoreBackdropClick?this._ignoreBackdropClick=!1:event.target===event.currentTarget&amp;&amp;("static"===this._config.backdrop?this._triggerBackdropTransition():this.hide())})),animate&amp;&amp;_util.default.reflow(this._backdrop),(0,_jquery.default)(this._backdrop).addClass("show"),!callback)return;if(!animate)return void callback();const backdropTransitionDuration=_util.default.getTransitionDurationFromElement(this._backdrop);(0,_jquery.default)(this._backdrop).one(_util.default.TRANSITION_END,callback).emulateTransitionEnd(backdropTransitionDuration)}else if(!this._isShown&amp;&amp;this._backdrop){(0,_jquery.default)(this._backdrop).removeClass("show");const callbackRemove=()=&gt;{this._removeBackdrop(),callback&amp;&amp;callback()};if((0,_jquery.default)(this._element).hasClass("fade")){const backdropTransitionDuration=_util.default.getTransitionDurationFromElement(this._backdrop);(0,_jquery.default)(this._backdrop).one(_util.default.TRANSITION_END,callbackRemove).emulateTransitionEnd(backdropTransitionDuration)}else callbackRemove()}else callback&amp;&amp;callback()}_adjustDialog(){const isModalOverflowing=this._element.scrollHeight&gt;document.documentElement.clientHeight;!this._isBodyOverflowing&amp;&amp;isModalOverflowing&amp;&amp;(this._element.style.paddingLeft="".concat(this._scrollbarWidth,"px")),this._isBodyOverflowing&amp;&amp;!isModalOverflowing&amp;&amp;(this._element.style.paddingRight="".concat(this._scrollbarWidth,"px"))}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}_checkScrollbar(){const rect=document.body.getBoundingClientRect();this._isBodyOverflowing=Math.round(rect.left+rect.right)&lt;window.innerWidth,this._scrollbarWidth=this._getScrollbarWidth()}_setScrollbar(){if(this._isBodyOverflowing){const fixedContent=[].slice.call(document.querySelectorAll(".fixed-top, .fixed-bottom, .is-fixed, .sticky-top")),stickyContent=[].slice.call(document.querySelectorAll(".sticky-top"));(0,_jquery.default)(fixedContent).each(((index,element)=&gt;{const actualPadding=element.style.paddingRight,calculatedPadding=(0,_jquery.default)(element).css("padding-right");(0,_jquery.default)(element).data("padding-right",actualPadding).css("padding-right","".concat(parseFloat(calculatedPadding)+this._scrollbarWidth,"px"))})),(0,_jquery.default)(stickyContent).each(((index,element)=&gt;{const actualMargin=element.style.marginRight,calculatedMargin=(0,_jquery.default)(element).css("margin-right");(0,_jquery.default)(element).data("margin-right",actualMargin).css("margin-right","".concat(parseFloat(calculatedMargin)-this._scrollbarWidth,"px"))}));const actualPadding=document.body.style.paddingRight,calculatedPadding=(0,_jquery.default)(document.body).css("padding-right");(0,_jquery.default)(document.body).data("padding-right",actualPadding).css("padding-right","".concat(parseFloat(calculatedPadding)+this._scrollbarWidth,"px"))}(0,_jquery.default)(document.body).addClass("modal-open")}_resetScrollbar(){const fixedContent=[].slice.call(document.querySelectorAll(".fixed-top, .fixed-bottom, .is-fixed, .sticky-top"));(0,_jquery.default)(fixedContent).each(((index,element)=&gt;{const padding=(0,_jquery.default)(element).data("padding-right");(0,_jquery.default)(element).removeData("padding-right"),element.style.paddingRight=padding||""}));const elements=[].slice.call(document.querySelectorAll("".concat(".sticky-top")));(0,_jquery.default)(elements).each(((index,element)=&gt;{const margin=(0,_jquery.default)(element).data("margin-right");void 0!==margin&amp;&amp;(0,_jquery.default)(element).css("margin-right",margin).removeData("margin-right")}));const padding=(0,_jquery.default)(document.body).data("padding-right");(0,_jquery.default)(document.body).removeData("padding-right"),document.body.style.paddingRight=padding||""}_getScrollbarWidth(){const scrollDiv=document.createElement("div");scrollDiv.className="modal-scrollbar-measure",document.body.appendChild(scrollDiv);const scrollbarWidth=scrollDiv.getBoundingClientRect().width-scrollDiv.clientWidth;return document.body.removeChild(scrollDiv),scrollbarWidth}static _jQueryInterface(config,relatedTarget){return this.each((function(){let data=(0,_jquery.default)(this).data("bs.modal");const _config={...Default,...(0,_jquery.default)(this).data(),..."object"==typeof config&amp;&amp;config?config:{}};if(data||(data=new Modal(this,_config),(0,_jquery.default)(this).data("bs.modal",data)),"string"==typeof config){if(void 0===data[config])throw new TypeError('No method named "'.concat(config,'"'));data[config](relatedTarget)}else _config.show&amp;&amp;data.show(relatedTarget)}))}}(0,_jquery.default)(document).on(EVENT_CLICK_DATA_API,'[data-toggle="modal"]',(function(event){let target;const selector=_util.default.getSelectorFromElement(this);selector&amp;&amp;(target=document.querySelector(selector));const config=(0,_jquery.default)(target).data("bs.modal")?"toggle":{...(0,_jquery.default)(target).data(),...(0,_jquery.default)(this).data()};"A"!==this.tagName&amp;&amp;"AREA"!==this.tagName||event.preventDefault();const $target=(0,_jquery.default)(target).one(EVENT_SHOW,(showEvent=&gt;{showEvent.isDefaultPrevented()||$target.one(EVENT_HIDDEN,(()=&gt;{(0,_jquery.default)(this).is(":visible")&amp;&amp;this.focus()}))}));Modal._jQueryInterface.call((0,_jquery.default)(target),config,this)})),_jquery.default.fn.modal=Modal._jQueryInterface,_jquery.default.fn.modal.Constructor=Modal,_jquery.default.fn.modal.noConflict=()=&gt;(_jquery.default.fn.modal=JQUERY_NO_CONFLICT,Modal._jQueryInterface);var _default=Modal;return _exports.default=_default,_exports.default}));
define("theme_boost/bootstrap/tab",["exports","jquery","./util"],(function(_exports,_jquery,_util){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_jquery=_interopRequireDefault(_jquery),_util=_interopRequireDefault(_util);const EVENT_KEY=".".concat("bs.tab"),JQUERY_NO_CONFLICT=_jquery.default.fn.tab,EVENT_HIDE="hide".concat(EVENT_KEY),EVENT_HIDDEN="hidden".concat(EVENT_KEY),EVENT_SHOW="show".concat(EVENT_KEY),EVENT_SHOWN="shown".concat(EVENT_KEY),EVENT_CLICK_DATA_API="click".concat(EVENT_KEY).concat(".data-api");class Tab{constructor(element){this._element=element}static get VERSION(){return"4.6.2"}show(){if(this._element.parentNode&amp;&amp;this._element.parentNode.nodeType===Node.ELEMENT_NODE&amp;&amp;(0,_jquery.default)(this._element).hasClass("active")||(0,_jquery.default)(this._element).hasClass("disabled")||this._element.hasAttribute("disabled"))return;let target,previous;const listElement=(0,_jquery.default)(this._element).closest(".nav, .list-group")[0],selector=_util.default.getSelectorFromElement(this._element);if(listElement){const itemSelector="UL"===listElement.nodeName||"OL"===listElement.nodeName?"&gt; li &gt; .active":".active";previous=_jquery.default.makeArray((0,_jquery.default)(listElement).find(itemSelector)),previous=previous[previous.length-1]}const hideEvent=_jquery.default.Event(EVENT_HIDE,{relatedTarget:this._element}),showEvent=_jquery.default.Event(EVENT_SHOW,{relatedTarget:previous});if(previous&amp;&amp;(0,_jquery.default)(previous).trigger(hideEvent),(0,_jquery.default)(this._element).trigger(showEvent),showEvent.isDefaultPrevented()||hideEvent.isDefaultPrevented())return;selector&amp;&amp;(target=document.querySelector(selector)),this._activate(this._element,listElement);const complete=()=&gt;{const hiddenEvent=_jquery.default.Event(EVENT_HIDDEN,{relatedTarget:this._element}),shownEvent=_jquery.default.Event(EVENT_SHOWN,{relatedTarget:previous});(0,_jquery.default)(previous).trigger(hiddenEvent),(0,_jquery.default)(this._element).trigger(shownEvent)};target?this._activate(target,target.parentNode,complete):complete()}dispose(){_jquery.default.removeData(this._element,"bs.tab"),this._element=null}_activate(element,container,callback){const active=(!container||"UL"!==container.nodeName&amp;&amp;"OL"!==container.nodeName?(0,_jquery.default)(container).children(".active"):(0,_jquery.default)(container).find("&gt; li &gt; .active"))[0],isTransitioning=callback&amp;&amp;active&amp;&amp;(0,_jquery.default)(active).hasClass("fade"),complete=()=&gt;this._transitionComplete(element,active,callback);if(active&amp;&amp;isTransitioning){const transitionDuration=_util.default.getTransitionDurationFromElement(active);(0,_jquery.default)(active).removeClass("show").one(_util.default.TRANSITION_END,complete).emulateTransitionEnd(transitionDuration)}else complete()}_transitionComplete(element,active,callback){if(active){(0,_jquery.default)(active).removeClass("active");const dropdownChild=(0,_jquery.default)(active.parentNode).find("&gt; .dropdown-menu .active")[0];dropdownChild&amp;&amp;(0,_jquery.default)(dropdownChild).removeClass("active"),"tab"===active.getAttribute("role")&amp;&amp;active.setAttribute("aria-selected",!1)}(0,_jquery.default)(element).addClass("active"),"tab"===element.getAttribute("role")&amp;&amp;element.setAttribute("aria-selected",!0),_util.default.reflow(element),element.classList.contains("fade")&amp;&amp;element.classList.add("show");let parent=element.parentNode;if(parent&amp;&amp;"LI"===parent.nodeName&amp;&amp;(parent=parent.parentNode),parent&amp;&amp;(0,_jquery.default)(parent).hasClass("dropdown-menu")){const dropdownElement=(0,_jquery.default)(element).closest(".dropdown")[0];if(dropdownElement){const dropdownToggleList=[].slice.call(dropdownElement.querySelectorAll(".dropdown-toggle"));(0,_jquery.default)(dropdownToggleList).addClass("active")}element.setAttribute("aria-expanded",!0)}callback&amp;&amp;callback()}static _jQueryInterface(config){return this.each((function(){const $this=(0,_jquery.default)(this);let data=$this.data("bs.tab");if(data||(data=new Tab(this),$this.data("bs.tab",data)),"string"==typeof config){if(void 0===data[config])throw new TypeError('No method named "'.concat(config,'"'));data[config]()}}))}}(0,_jquery.default)(document).on(EVENT_CLICK_DATA_API,'[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',(function(event){event.preventDefault(),Tab._jQueryInterface.call((0,_jquery.default)(this),"show")})),_jquery.default.fn.tab=Tab._jQueryInterface,_jquery.default.fn.tab.Constructor=Tab,_jquery.default.fn.tab.noConflict=()=&gt;(_jquery.default.fn.tab=JQUERY_NO_CONFLICT,Tab._jQueryInterface);var _default=Tab;return _exports.default=_default,_exports.default}));
define("theme_boost/bootstrap/carousel",["exports","jquery","./util"],(function(_exports,_jquery,_util){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_jquery=_interopRequireDefault(_jquery),_util=_interopRequireDefault(_util);const NAME="carousel",DATA_KEY="bs.carousel",EVENT_KEY=".".concat(DATA_KEY),JQUERY_NO_CONFLICT=_jquery.default.fn[NAME],EVENT_SLIDE="slide".concat(EVENT_KEY),EVENT_SLID="slid".concat(EVENT_KEY),EVENT_KEYDOWN="keydown".concat(EVENT_KEY),EVENT_MOUSEENTER="mouseenter".concat(EVENT_KEY),EVENT_MOUSELEAVE="mouseleave".concat(EVENT_KEY),EVENT_TOUCHSTART="touchstart".concat(EVENT_KEY),EVENT_TOUCHMOVE="touchmove".concat(EVENT_KEY),EVENT_TOUCHEND="touchend".concat(EVENT_KEY),EVENT_POINTERDOWN="pointerdown".concat(EVENT_KEY),EVENT_POINTERUP="pointerup".concat(EVENT_KEY),EVENT_DRAG_START="dragstart".concat(EVENT_KEY),EVENT_LOAD_DATA_API="load".concat(EVENT_KEY).concat(".data-api"),EVENT_CLICK_DATA_API="click".concat(EVENT_KEY).concat(".data-api"),Default={interval:5e3,keyboard:!0,slide:!1,pause:"hover",wrap:!0,touch:!0},DefaultType={interval:"(number|boolean)",keyboard:"boolean",slide:"(boolean|string)",pause:"(string|boolean)",wrap:"boolean",touch:"boolean"},PointerType={TOUCH:"touch",PEN:"pen"};class Carousel{constructor(element,config){this._items=null,this._interval=null,this._activeElement=null,this._isPaused=!1,this._isSliding=!1,this.touchTimeout=null,this.touchStartX=0,this.touchDeltaX=0,this._config=this._getConfig(config),this._element=element,this._indicatorsElement=this._element.querySelector(".carousel-indicators"),this._touchSupported="ontouchstart"in document.documentElement||navigator.maxTouchPoints&gt;0,this._pointerEvent=Boolean(window.PointerEvent||window.MSPointerEvent),this._addEventListeners()}static get VERSION(){return"4.6.2"}static get Default(){return Default}next(){this._isSliding||this._slide("next")}nextWhenVisible(){const $element=(0,_jquery.default)(this._element);!document.hidden&amp;&amp;$element.is(":visible")&amp;&amp;"hidden"!==$element.css("visibility")&amp;&amp;this.next()}prev(){this._isSliding||this._slide("prev")}pause(event){event||(this._isPaused=!0),this._element.querySelector(".carousel-item-next, .carousel-item-prev")&amp;&amp;(_util.default.triggerTransitionEnd(this._element),this.cycle(!0)),clearInterval(this._interval),this._interval=null}cycle(event){event||(this._isPaused=!1),this._interval&amp;&amp;(clearInterval(this._interval),this._interval=null),this._config.interval&amp;&amp;!this._isPaused&amp;&amp;(this._updateInterval(),this._interval=setInterval((document.visibilityState?this.nextWhenVisible:this.next).bind(this),this._config.interval))}to(index){this._activeElement=this._element.querySelector(".active.carousel-item");const activeIndex=this._getItemIndex(this._activeElement);if(index&gt;this._items.length-1||index&lt;0)return;if(this._isSliding)return void(0,_jquery.default)(this._element).one(EVENT_SLID,(()=&gt;this.to(index)));if(activeIndex===index)return this.pause(),void this.cycle();const direction=index&gt;activeIndex?"next":"prev";this._slide(direction,this._items[index])}dispose(){(0,_jquery.default)(this._element).off(EVENT_KEY),_jquery.default.removeData(this._element,DATA_KEY),this._items=null,this._config=null,this._element=null,this._interval=null,this._isPaused=null,this._isSliding=null,this._activeElement=null,this._indicatorsElement=null}_getConfig(config){return config={...Default,...config},_util.default.typeCheckConfig(NAME,config,DefaultType),config}_handleSwipe(){const absDeltax=Math.abs(this.touchDeltaX);if(absDeltax&lt;=40)return;const direction=absDeltax/this.touchDeltaX;this.touchDeltaX=0,direction&gt;0&amp;&amp;this.prev(),direction&lt;0&amp;&amp;this.next()}_addEventListeners(){this._config.keyboard&amp;&amp;(0,_jquery.default)(this._element).on(EVENT_KEYDOWN,(event=&gt;this._keydown(event))),"hover"===this._config.pause&amp;&amp;(0,_jquery.default)(this._element).on(EVENT_MOUSEENTER,(event=&gt;this.pause(event))).on(EVENT_MOUSELEAVE,(event=&gt;this.cycle(event))),this._config.touch&amp;&amp;this._addTouchEventListeners()}_addTouchEventListeners(){if(!this._touchSupported)return;const start=event=&gt;{this._pointerEvent&amp;&amp;PointerType[event.originalEvent.pointerType.toUpperCase()]?this.touchStartX=event.originalEvent.clientX:this._pointerEvent||(this.touchStartX=event.originalEvent.touches[0].clientX)},move=event=&gt;{this.touchDeltaX=event.originalEvent.touches&amp;&amp;event.originalEvent.touches.length&gt;1?0:event.originalEvent.touches[0].clientX-this.touchStartX},end=event=&gt;{this._pointerEvent&amp;&amp;PointerType[event.originalEvent.pointerType.toUpperCase()]&amp;&amp;(this.touchDeltaX=event.originalEvent.clientX-this.touchStartX),this._handleSwipe(),"hover"===this._config.pause&amp;&amp;(this.pause(),this.touchTimeout&amp;&amp;clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout((event=&gt;this.cycle(event)),500+this._config.interval))};(0,_jquery.default)(this._element.querySelectorAll(".carousel-item img")).on(EVENT_DRAG_START,(e=&gt;e.preventDefault())),this._pointerEvent?((0,_jquery.default)(this._element).on(EVENT_POINTERDOWN,(event=&gt;start(event))),(0,_jquery.default)(this._element).on(EVENT_POINTERUP,(event=&gt;end(event))),this._element.classList.add("pointer-event")):((0,_jquery.default)(this._element).on(EVENT_TOUCHSTART,(event=&gt;start(event))),(0,_jquery.default)(this._element).on(EVENT_TOUCHMOVE,(event=&gt;move(event))),(0,_jquery.default)(this._element).on(EVENT_TOUCHEND,(event=&gt;end(event))))}_keydown(event){if(!/input|textarea/i.test(event.target.tagName))switch(event.which){case 37:event.preventDefault(),this.prev();break;case 39:event.preventDefault(),this.next()}}_getItemIndex(element){return this._items=element&amp;&amp;element.parentNode?[].slice.call(element.parentNode.querySelectorAll(".carousel-item")):[],this._items.indexOf(element)}_getItemByDirection(direction,activeElement){const isNextDirection="next"===direction,isPrevDirection="prev"===direction,activeIndex=this._getItemIndex(activeElement),lastItemIndex=this._items.length-1;if((isPrevDirection&amp;&amp;0===activeIndex||isNextDirection&amp;&amp;activeIndex===lastItemIndex)&amp;&amp;!this._config.wrap)return activeElement;const itemIndex=(activeIndex+("prev"===direction?-1:1))%this._items.length;return-1===itemIndex?this._items[this._items.length-1]:this._items[itemIndex]}_triggerSlideEvent(relatedTarget,eventDirectionName){const targetIndex=this._getItemIndex(relatedTarget),fromIndex=this._getItemIndex(this._element.querySelector(".active.carousel-item")),slideEvent=_jquery.default.Event(EVENT_SLIDE,{relatedTarget:relatedTarget,direction:eventDirectionName,from:fromIndex,to:targetIndex});return(0,_jquery.default)(this._element).trigger(slideEvent),slideEvent}_setActiveIndicatorElement(element){if(this._indicatorsElement){const indicators=[].slice.call(this._indicatorsElement.querySelectorAll(".active"));(0,_jquery.default)(indicators).removeClass("active");const nextIndicator=this._indicatorsElement.children[this._getItemIndex(element)];nextIndicator&amp;&amp;(0,_jquery.default)(nextIndicator).addClass("active")}}_updateInterval(){const element=this._activeElement||this._element.querySelector(".active.carousel-item");if(!element)return;const elementInterval=parseInt(element.getAttribute("data-interval"),10);elementInterval?(this._config.defaultInterval=this._config.defaultInterval||this._config.interval,this._config.interval=elementInterval):this._config.interval=this._config.defaultInterval||this._config.interval}_slide(direction,element){const activeElement=this._element.querySelector(".active.carousel-item"),activeElementIndex=this._getItemIndex(activeElement),nextElement=element||activeElement&amp;&amp;this._getItemByDirection(direction,activeElement),nextElementIndex=this._getItemIndex(nextElement),isCycling=Boolean(this._interval);let directionalClassName,orderClassName,eventDirectionName;if("next"===direction?(directionalClassName="carousel-item-left",orderClassName="carousel-item-next",eventDirectionName="left"):(directionalClassName="carousel-item-right",orderClassName="carousel-item-prev",eventDirectionName="right"),nextElement&amp;&amp;(0,_jquery.default)(nextElement).hasClass("active"))return void(this._isSliding=!1);if(this._triggerSlideEvent(nextElement,eventDirectionName).isDefaultPrevented())return;if(!activeElement||!nextElement)return;this._isSliding=!0,isCycling&amp;&amp;this.pause(),this._setActiveIndicatorElement(nextElement),this._activeElement=nextElement;const slidEvent=_jquery.default.Event(EVENT_SLID,{relatedTarget:nextElement,direction:eventDirectionName,from:activeElementIndex,to:nextElementIndex});if((0,_jquery.default)(this._element).hasClass("slide")){(0,_jquery.default)(nextElement).addClass(orderClassName),_util.default.reflow(nextElement),(0,_jquery.default)(activeElement).addClass(directionalClassName),(0,_jquery.default)(nextElement).addClass(directionalClassName);const transitionDuration=_util.default.getTransitionDurationFromElement(activeElement);(0,_jquery.default)(activeElement).one(_util.default.TRANSITION_END,(()=&gt;{(0,_jquery.default)(nextElement).removeClass("".concat(directionalClassName," ").concat(orderClassName)).addClass("active"),(0,_jquery.default)(activeElement).removeClass("".concat("active"," ").concat(orderClassName," ").concat(directionalClassName)),this._isSliding=!1,setTimeout((()=&gt;(0,_jquery.default)(this._element).trigger(slidEvent)),0)})).emulateTransitionEnd(transitionDuration)}else(0,_jquery.default)(activeElement).removeClass("active"),(0,_jquery.default)(nextElement).addClass("active"),this._isSliding=!1,(0,_jquery.default)(this._element).trigger(slidEvent);isCycling&amp;&amp;this.cycle()}static _jQueryInterface(config){return this.each((function(){let data=(0,_jquery.default)(this).data(DATA_KEY),_config={...Default,...(0,_jquery.default)(this).data()};"object"==typeof config&amp;&amp;(_config={..._config,...config});const action="string"==typeof config?config:_config.slide;if(data||(data=new Carousel(this,_config),(0,_jquery.default)(this).data(DATA_KEY,data)),"number"==typeof config)data.to(config);else if("string"==typeof action){if(void 0===data[action])throw new TypeError('No method named "'.concat(action,'"'));data[action]()}else _config.interval&amp;&amp;_config.ride&amp;&amp;(data.pause(),data.cycle())}))}static _dataApiClickHandler(event){const selector=_util.default.getSelectorFromElement(this);if(!selector)return;const target=(0,_jquery.default)(selector)[0];if(!target||!(0,_jquery.default)(target).hasClass("carousel"))return;const config={...(0,_jquery.default)(target).data(),...(0,_jquery.default)(this).data()},slideIndex=this.getAttribute("data-slide-to");slideIndex&amp;&amp;(config.interval=!1),Carousel._jQueryInterface.call((0,_jquery.default)(target),config),slideIndex&amp;&amp;(0,_jquery.default)(target).data(DATA_KEY).to(slideIndex),event.preventDefault()}}(0,_jquery.default)(document).on(EVENT_CLICK_DATA_API,"[data-slide], [data-slide-to]",Carousel._dataApiClickHandler),(0,_jquery.default)(window).on(EVENT_LOAD_DATA_API,(()=&gt;{const carousels=[].slice.call(document.querySelectorAll('[data-ride="carousel"]'));for(let i=0,len=carousels.length;i&lt;len;i++){const $carousel=(0,_jquery.default)(carousels[i]);Carousel._jQueryInterface.call($carousel,$carousel.data())}})),_jquery.default.fn[NAME]=Carousel._jQueryInterface,_jquery.default.fn[NAME].Constructor=Carousel,_jquery.default.fn[NAME].noConflict=()=&gt;(_jquery.default.fn[NAME]=JQUERY_NO_CONFLICT,Carousel._jQueryInterface);var _default=Carousel;return _exports.default=_default,_exports.default}));
define("theme_boost/bootstrap/tools/sanitizer",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.DefaultWhitelist=void 0,_exports.sanitizeHtml=function(unsafeHtml,whiteList,sanitizeFn){if(0===unsafeHtml.length)return unsafeHtml;if(sanitizeFn&amp;&amp;"function"==typeof sanitizeFn)return sanitizeFn(unsafeHtml);const createdDocument=(new window.DOMParser).parseFromString(unsafeHtml,"text/html"),whitelistKeys=Object.keys(whiteList),elements=[].slice.call(createdDocument.body.querySelectorAll("*"));for(let i=0,len=elements.length;i&lt;len;i++){const el=elements[i],elName=el.nodeName.toLowerCase();if(-1===whitelistKeys.indexOf(el.nodeName.toLowerCase())){el.parentNode.removeChild(el);continue}const attributeList=[].slice.call(el.attributes),whitelistedAttributes=[].concat(whiteList["*"]||[],whiteList[elName]||[]);attributeList.forEach((attr=&gt;{allowedAttribute(attr,whitelistedAttributes)||el.removeAttribute(attr.nodeName)}))}return createdDocument.body.innerHTML};const uriAttrs=["background","cite","href","itemtype","longdesc","poster","src","xlink:href"],DefaultWhitelist={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]};_exports.DefaultWhitelist=DefaultWhitelist;const SAFE_URL_PATTERN=/^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&amp;/:?]*(?:[#/?]|$))/i,DATA_URL_PATTERN=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i;function allowedAttribute(attr,allowedAttributeList){const attrName=attr.nodeName.toLowerCase();if(-1!==allowedAttributeList.indexOf(attrName))return-1===uriAttrs.indexOf(attrName)||Boolean(SAFE_URL_PATTERN.test(attr.nodeValue)||DATA_URL_PATTERN.test(attr.nodeValue));const regExp=allowedAttributeList.filter((attrRegex=&gt;attrRegex instanceof RegExp));for(let i=0,len=regExp.length;i&lt;len;i++)if(regExp[i].test(attrName))return!0;return!1}}));
define("theme_boost/bootstrap/dropdown",["exports","jquery","core/popper","./util"],(function(_exports,_jquery,_popper,_util){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_jquery=_interopRequireDefault(_jquery),_popper=_interopRequireDefault(_popper),_util=_interopRequireDefault(_util);const NAME="dropdown",DATA_KEY="bs.dropdown",EVENT_KEY=".".concat(DATA_KEY),JQUERY_NO_CONFLICT=_jquery.default.fn[NAME],REGEXP_KEYDOWN=new RegExp("".concat(38,"|").concat(40,"|").concat(27)),EVENT_HIDE="hide".concat(EVENT_KEY),EVENT_HIDDEN="hidden".concat(EVENT_KEY),EVENT_SHOW="show".concat(EVENT_KEY),EVENT_SHOWN="shown".concat(EVENT_KEY),EVENT_CLICK="click".concat(EVENT_KEY),EVENT_CLICK_DATA_API="click".concat(EVENT_KEY).concat(".data-api"),EVENT_KEYDOWN_DATA_API="keydown".concat(EVENT_KEY).concat(".data-api"),EVENT_KEYUP_DATA_API="keyup".concat(EVENT_KEY).concat(".data-api"),Default={offset:0,flip:!0,boundary:"scrollParent",reference:"toggle",display:"dynamic",popperConfig:null},DefaultType={offset:"(number|string|function)",flip:"boolean",boundary:"(string|element)",reference:"(string|element)",display:"string",popperConfig:"(null|object)"};class Dropdown{constructor(element,config){this._element=element,this._popper=null,this._config=this._getConfig(config),this._menu=this._getMenuElement(),this._inNavbar=this._detectNavbar(),this._addEventListeners()}static get VERSION(){return"4.6.2"}static get Default(){return Default}static get DefaultType(){return DefaultType}toggle(){if(this._element.disabled||(0,_jquery.default)(this._element).hasClass("disabled"))return;const isActive=(0,_jquery.default)(this._menu).hasClass("show");Dropdown._clearMenus(),isActive||this.show(!0)}show(){let usePopper=arguments.length&gt;0&amp;&amp;void 0!==arguments[0]&amp;&amp;arguments[0];if(this._element.disabled||(0,_jquery.default)(this._element).hasClass("disabled")||(0,_jquery.default)(this._menu).hasClass("show"))return;const relatedTarget={relatedTarget:this._element},showEvent=_jquery.default.Event(EVENT_SHOW,relatedTarget),parent=Dropdown._getParentFromElement(this._element);if((0,_jquery.default)(parent).trigger(showEvent),!showEvent.isDefaultPrevented()){if(!this._inNavbar&amp;&amp;usePopper){if(void 0===_popper.default)throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org)");let referenceElement=this._element;"parent"===this._config.reference?referenceElement=parent:_util.default.isElement(this._config.reference)&amp;&amp;(referenceElement=this._config.reference,void 0!==this._config.reference.jquery&amp;&amp;(referenceElement=this._config.reference[0])),"scrollParent"!==this._config.boundary&amp;&amp;(0,_jquery.default)(parent).addClass("position-static"),this._popper=new _popper.default(referenceElement,this._menu,this._getPopperConfig())}"ontouchstart"in document.documentElement&amp;&amp;0===(0,_jquery.default)(parent).closest(".navbar-nav").length&amp;&amp;(0,_jquery.default)(document.body).children().on("mouseover",null,_jquery.default.noop),this._element.focus(),this._element.setAttribute("aria-expanded",!0),(0,_jquery.default)(this._menu).toggleClass("show"),(0,_jquery.default)(parent).toggleClass("show").trigger(_jquery.default.Event(EVENT_SHOWN,relatedTarget))}}hide(){if(this._element.disabled||(0,_jquery.default)(this._element).hasClass("disabled")||!(0,_jquery.default)(this._menu).hasClass("show"))return;const relatedTarget={relatedTarget:this._element},hideEvent=_jquery.default.Event(EVENT_HIDE,relatedTarget),parent=Dropdown._getParentFromElement(this._element);(0,_jquery.default)(parent).trigger(hideEvent),hideEvent.isDefaultPrevented()||(this._popper&amp;&amp;this._popper.destroy(),(0,_jquery.default)(this._menu).toggleClass("show"),(0,_jquery.default)(parent).toggleClass("show").trigger(_jquery.default.Event(EVENT_HIDDEN,relatedTarget)))}dispose(){_jquery.default.removeData(this._element,DATA_KEY),(0,_jquery.default)(this._element).off(EVENT_KEY),this._element=null,this._menu=null,null!==this._popper&amp;&amp;(this._popper.destroy(),this._popper=null)}update(){this._inNavbar=this._detectNavbar(),null!==this._popper&amp;&amp;this._popper.scheduleUpdate()}_addEventListeners(){(0,_jquery.default)(this._element).on(EVENT_CLICK,(event=&gt;{event.preventDefault(),event.stopPropagation(),this.toggle()}))}_getConfig(config){return config={...this.constructor.Default,...(0,_jquery.default)(this._element).data(),...config},_util.default.typeCheckConfig(NAME,config,this.constructor.DefaultType),config}_getMenuElement(){if(!this._menu){const parent=Dropdown._getParentFromElement(this._element);parent&amp;&amp;(this._menu=parent.querySelector(".dropdown-menu"))}return this._menu}_getPlacement(){const $parentDropdown=(0,_jquery.default)(this._element.parentNode);let placement="bottom-start";return $parentDropdown.hasClass("dropup")?placement=(0,_jquery.default)(this._menu).hasClass("dropdown-menu-right")?"top-end":"top-start":$parentDropdown.hasClass("dropright")?placement="right-start":$parentDropdown.hasClass("dropleft")?placement="left-start":(0,_jquery.default)(this._menu).hasClass("dropdown-menu-right")&amp;&amp;(placement="bottom-end"),placement}_detectNavbar(){return(0,_jquery.default)(this._element).closest(".navbar").length&gt;0}_getOffset(){const offset={};return"function"==typeof this._config.offset?offset.fn=data=&gt;(data.offsets={...data.offsets,...this._config.offset(data.offsets,this._element)},data):offset.offset=this._config.offset,offset}_getPopperConfig(){const popperConfig={placement:this._getPlacement(),modifiers:{offset:this._getOffset(),flip:{enabled:this._config.flip},preventOverflow:{boundariesElement:this._config.boundary}}};return"static"===this._config.display&amp;&amp;(popperConfig.modifiers.applyStyle={enabled:!1}),{...popperConfig,...this._config.popperConfig}}static _jQueryInterface(config){return this.each((function(){let data=(0,_jquery.default)(this).data(DATA_KEY);if(data||(data=new Dropdown(this,"object"==typeof config?config:null),(0,_jquery.default)(this).data(DATA_KEY,data)),"string"==typeof config){if(void 0===data[config])throw new TypeError('No method named "'.concat(config,'"'));data[config]()}}))}static _clearMenus(event){if(event&amp;&amp;(3===event.which||"keyup"===event.type&amp;&amp;9!==event.which))return;const toggles=[].slice.call(document.querySelectorAll('[data-toggle="dropdown"]'));for(let i=0,len=toggles.length;i&lt;len;i++){const parent=Dropdown._getParentFromElement(toggles[i]),context=(0,_jquery.default)(toggles[i]).data(DATA_KEY),relatedTarget={relatedTarget:toggles[i]};if(event&amp;&amp;"click"===event.type&amp;&amp;(relatedTarget.clickEvent=event),!context)continue;const dropdownMenu=context._menu;if(!(0,_jquery.default)(parent).hasClass("show"))continue;if(event&amp;&amp;("click"===event.type&amp;&amp;/input|textarea/i.test(event.target.tagName)||"keyup"===event.type&amp;&amp;9===event.which)&amp;&amp;_jquery.default.contains(parent,event.target))continue;const hideEvent=_jquery.default.Event(EVENT_HIDE,relatedTarget);(0,_jquery.default)(parent).trigger(hideEvent),hideEvent.isDefaultPrevented()||("ontouchstart"in document.documentElement&amp;&amp;(0,_jquery.default)(document.body).children().off("mouseover",null,_jquery.default.noop),toggles[i].setAttribute("aria-expanded","false"),context._popper&amp;&amp;context._popper.destroy(),(0,_jquery.default)(dropdownMenu).removeClass("show"),(0,_jquery.default)(parent).removeClass("show").trigger(_jquery.default.Event(EVENT_HIDDEN,relatedTarget)))}}static _getParentFromElement(element){let parent;const selector=_util.default.getSelectorFromElement(element);return selector&amp;&amp;(parent=document.querySelector(selector)),parent||element.parentNode}static _dataApiKeydownHandler(event){if(/input|textarea/i.test(event.target.tagName)?32===event.which||27!==event.which&amp;&amp;(40!==event.which&amp;&amp;38!==event.which||(0,_jquery.default)(event.target).closest(".dropdown-menu").length):!REGEXP_KEYDOWN.test(event.which))return;if(this.disabled||(0,_jquery.default)(this).hasClass("disabled"))return;const parent=Dropdown._getParentFromElement(this),isActive=(0,_jquery.default)(parent).hasClass("show");if(!isActive&amp;&amp;27===event.which)return;if(event.preventDefault(),event.stopPropagation(),!isActive||27===event.which||32===event.which)return 27===event.which&amp;&amp;(0,_jquery.default)(parent.querySelector('[data-toggle="dropdown"]')).trigger("focus"),void(0,_jquery.default)(this).trigger("click");const items=[].slice.call(parent.querySelectorAll(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)")).filter((item=&gt;(0,_jquery.default)(item).is(":visible")));if(0===items.length)return;let index=items.indexOf(event.target);38===event.which&amp;&amp;index&gt;0&amp;&amp;index--,40===event.which&amp;&amp;index&lt;items.length-1&amp;&amp;index++,index&lt;0&amp;&amp;(index=0),items[index].focus()}}(0,_jquery.default)(document).on(EVENT_KEYDOWN_DATA_API,'[data-toggle="dropdown"]',Dropdown._dataApiKeydownHandler).on(EVENT_KEYDOWN_DATA_API,".dropdown-menu",Dropdown._dataApiKeydownHandler).on("".concat(EVENT_CLICK_DATA_API," ").concat(EVENT_KEYUP_DATA_API),Dropdown._clearMenus).on(EVENT_CLICK_DATA_API,'[data-toggle="dropdown"]',(function(event){event.preventDefault(),event.stopPropagation(),Dropdown._jQueryInterface.call((0,_jquery.default)(this),"toggle")})).on(EVENT_CLICK_DATA_API,".dropdown form",(e=&gt;{e.stopPropagation()})),_jquery.default.fn[NAME]=Dropdown._jQueryInterface,_jquery.default.fn[NAME].Constructor=Dropdown,_jquery.default.fn[NAME].noConflict=()=&gt;(_jquery.default.fn[NAME]=JQUERY_NO_CONFLICT,Dropdown._jQueryInterface);var _default=Dropdown;return _exports.default=_default,_exports.default}));
define("theme_boost/bootstrap/popover",["exports","jquery","./tooltip"],(function(_exports,_jquery,_tooltip){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_jquery=_interopRequireDefault(_jquery),_tooltip=_interopRequireDefault(_tooltip);const NAME="popover",EVENT_KEY=".".concat("bs.popover"),JQUERY_NO_CONFLICT=_jquery.default.fn[NAME],BSCLS_PREFIX_REGEX=new RegExp("(^|\\s)".concat("bs-popover","\\S+"),"g"),Default={..._tooltip.default.Default,placement:"right",trigger:"click",content:"",template:'&lt;div class="popover" role="tooltip"&gt;&lt;div class="arrow"&gt;&lt;/div&gt;&lt;h3 class="popover-header"&gt;&lt;/h3&gt;&lt;div class="popover-body"&gt;&lt;/div&gt;&lt;/div&gt;'},DefaultType={..._tooltip.default.DefaultType,content:"(string|element|function)"},Event={HIDE:"hide".concat(EVENT_KEY),HIDDEN:"hidden".concat(EVENT_KEY),SHOW:"show".concat(EVENT_KEY),SHOWN:"shown".concat(EVENT_KEY),INSERTED:"inserted".concat(EVENT_KEY),CLICK:"click".concat(EVENT_KEY),FOCUSIN:"focusin".concat(EVENT_KEY),FOCUSOUT:"focusout".concat(EVENT_KEY),MOUSEENTER:"mouseenter".concat(EVENT_KEY),MOUSELEAVE:"mouseleave".concat(EVENT_KEY)};class Popover extends _tooltip.default{static get VERSION(){return"4.6.2"}static get Default(){return Default}static get NAME(){return NAME}static get DATA_KEY(){return"bs.popover"}static get Event(){return Event}static get EVENT_KEY(){return EVENT_KEY}static get DefaultType(){return DefaultType}isWithContent(){return this.getTitle()||this._getContent()}addAttachmentClass(attachment){(0,_jquery.default)(this.getTipElement()).addClass("".concat("bs-popover","-").concat(attachment))}getTipElement(){return this.tip=this.tip||(0,_jquery.default)(this.config.template)[0],this.tip}setContent(){const $tip=(0,_jquery.default)(this.getTipElement());this.setElementContent($tip.find(".popover-header"),this.getTitle());let content=this._getContent();"function"==typeof content&amp;&amp;(content=content.call(this.element)),this.setElementContent($tip.find(".popover-body"),content),$tip.removeClass("".concat("fade"," ").concat("show"))}_getContent(){return this.element.getAttribute("data-content")||this.config.content}_cleanTipClass(){const $tip=(0,_jquery.default)(this.getTipElement()),tabClass=$tip.attr("class").match(BSCLS_PREFIX_REGEX);null!==tabClass&amp;&amp;tabClass.length&gt;0&amp;&amp;$tip.removeClass(tabClass.join(""))}static _jQueryInterface(config){return this.each((function(){let data=(0,_jquery.default)(this).data("bs.popover");const _config="object"==typeof config?config:null;if((data||!/dispose|hide/.test(config))&amp;&amp;(data||(data=new Popover(this,_config),(0,_jquery.default)(this).data("bs.popover",data)),"string"==typeof config)){if(void 0===data[config])throw new TypeError('No method named "'.concat(config,'"'));data[config]()}}))}}_jquery.default.fn[NAME]=Popover._jQueryInterface,_jquery.default.fn[NAME].Constructor=Popover,_jquery.default.fn[NAME].noConflict=()=&gt;(_jquery.default.fn[NAME]=JQUERY_NO_CONFLICT,Popover._jQueryInterface);var _default=Popover;return _exports.default=_default,_exports.default}));
define("theme_boost/bootstrap/tooltip",["exports","./tools/sanitizer","jquery","core/popper","./util"],(function(_exports,_sanitizer,_jquery,_popper,_util){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_jquery=_interopRequireDefault(_jquery),_popper=_interopRequireDefault(_popper),_util=_interopRequireDefault(_util);const NAME="tooltip",EVENT_KEY=".".concat("bs.tooltip"),JQUERY_NO_CONFLICT=_jquery.default.fn[NAME],BSCLS_PREFIX_REGEX=new RegExp("(^|\\s)".concat("bs-tooltip","\\S+"),"g"),DISALLOWED_ATTRIBUTES=["sanitize","whiteList","sanitizeFn"],AttachmentMap={AUTO:"auto",TOP:"top",RIGHT:"right",BOTTOM:"bottom",LEFT:"left"},Default={animation:!0,template:'&lt;div class="tooltip" role="tooltip"&gt;&lt;div class="arrow"&gt;&lt;/div&gt;&lt;div class="tooltip-inner"&gt;&lt;/div&gt;&lt;/div&gt;',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent",customClass:"",sanitize:!0,sanitizeFn:null,whiteList:_sanitizer.DefaultWhitelist,popperConfig:null},DefaultType={animation:"boolean",template:"string",title:"(string|element|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"(number|string|function)",container:"(string|element|boolean)",fallbackPlacement:"(string|array)",boundary:"(string|element)",customClass:"(string|function)",sanitize:"boolean",sanitizeFn:"(null|function)",whiteList:"object",popperConfig:"(null|object)"},Event={HIDE:"hide".concat(EVENT_KEY),HIDDEN:"hidden".concat(EVENT_KEY),SHOW:"show".concat(EVENT_KEY),SHOWN:"shown".concat(EVENT_KEY),INSERTED:"inserted".concat(EVENT_KEY),CLICK:"click".concat(EVENT_KEY),FOCUSIN:"focusin".concat(EVENT_KEY),FOCUSOUT:"focusout".concat(EVENT_KEY),MOUSEENTER:"mouseenter".concat(EVENT_KEY),MOUSELEAVE:"mouseleave".concat(EVENT_KEY)};class Tooltip{constructor(element,config){if(void 0===_popper.default)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=element,this.config=this._getConfig(config),this.tip=null,this._setListeners()}static get VERSION(){return"4.6.2"}static get Default(){return Default}static get NAME(){return NAME}static get DATA_KEY(){return"bs.tooltip"}static get Event(){return Event}static get EVENT_KEY(){return EVENT_KEY}static get DefaultType(){return DefaultType}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(event){if(this._isEnabled)if(event){const dataKey=this.constructor.DATA_KEY;let context=(0,_jquery.default)(event.currentTarget).data(dataKey);context||(context=new this.constructor(event.currentTarget,this._getDelegateConfig()),(0,_jquery.default)(event.currentTarget).data(dataKey,context)),context._activeTrigger.click=!context._activeTrigger.click,context._isWithActiveTrigger()?context._enter(null,context):context._leave(null,context)}else{if((0,_jquery.default)(this.getTipElement()).hasClass("show"))return void this._leave(null,this);this._enter(null,this)}}dispose(){clearTimeout(this._timeout),_jquery.default.removeData(this.element,this.constructor.DATA_KEY),(0,_jquery.default)(this.element).off(this.constructor.EVENT_KEY),(0,_jquery.default)(this.element).closest(".modal").off("hide.bs.modal",this._hideModalHandler),this.tip&amp;&amp;(0,_jquery.default)(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,this._activeTrigger=null,this._popper&amp;&amp;this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null}show(){if("none"===(0,_jquery.default)(this.element).css("display"))throw new Error("Please use show on visible elements");const showEvent=_jquery.default.Event(this.constructor.Event.SHOW);if(this.isWithContent()&amp;&amp;this._isEnabled){(0,_jquery.default)(this.element).trigger(showEvent);const shadowRoot=_util.default.findShadowRoot(this.element),isInTheDom=_jquery.default.contains(null!==shadowRoot?shadowRoot:this.element.ownerDocument.documentElement,this.element);if(showEvent.isDefaultPrevented()||!isInTheDom)return;const tip=this.getTipElement(),tipId=_util.default.getUID(this.constructor.NAME);tip.setAttribute("id",tipId),this.element.setAttribute("aria-describedby",tipId),this.setContent(),this.config.animation&amp;&amp;(0,_jquery.default)(tip).addClass("fade");const placement="function"==typeof this.config.placement?this.config.placement.call(this,tip,this.element):this.config.placement,attachment=this._getAttachment(placement);this.addAttachmentClass(attachment);const container=this._getContainer();(0,_jquery.default)(tip).data(this.constructor.DATA_KEY,this),_jquery.default.contains(this.element.ownerDocument.documentElement,this.tip)||(0,_jquery.default)(tip).appendTo(container),(0,_jquery.default)(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new _popper.default(this.element,tip,this._getPopperConfig(attachment)),(0,_jquery.default)(tip).addClass("show"),(0,_jquery.default)(tip).addClass(this.config.customClass),"ontouchstart"in document.documentElement&amp;&amp;(0,_jquery.default)(document.body).children().on("mouseover",null,_jquery.default.noop);const complete=()=&gt;{this.config.animation&amp;&amp;this._fixTransition();const prevHoverState=this._hoverState;this._hoverState=null,(0,_jquery.default)(this.element).trigger(this.constructor.Event.SHOWN),"out"===prevHoverState&amp;&amp;this._leave(null,this)};if((0,_jquery.default)(this.tip).hasClass("fade")){const transitionDuration=_util.default.getTransitionDurationFromElement(this.tip);(0,_jquery.default)(this.tip).one(_util.default.TRANSITION_END,complete).emulateTransitionEnd(transitionDuration)}else complete()}}hide(callback){const tip=this.getTipElement(),hideEvent=_jquery.default.Event(this.constructor.Event.HIDE),complete=()=&gt;{"show"!==this._hoverState&amp;&amp;tip.parentNode&amp;&amp;tip.parentNode.removeChild(tip),this._cleanTipClass(),this.element.removeAttribute("aria-describedby"),(0,_jquery.default)(this.element).trigger(this.constructor.Event.HIDDEN),null!==this._popper&amp;&amp;this._popper.destroy(),callback&amp;&amp;callback()};if((0,_jquery.default)(this.element).trigger(hideEvent),!hideEvent.isDefaultPrevented()){if((0,_jquery.default)(tip).removeClass("show"),"ontouchstart"in document.documentElement&amp;&amp;(0,_jquery.default)(document.body).children().off("mouseover",null,_jquery.default.noop),this._activeTrigger.click=!1,this._activeTrigger.focus=!1,this._activeTrigger.hover=!1,(0,_jquery.default)(this.tip).hasClass("fade")){const transitionDuration=_util.default.getTransitionDurationFromElement(tip);(0,_jquery.default)(tip).one(_util.default.TRANSITION_END,complete).emulateTransitionEnd(transitionDuration)}else complete();this._hoverState=""}}update(){null!==this._popper&amp;&amp;this._popper.scheduleUpdate()}isWithContent(){return Boolean(this.getTitle())}addAttachmentClass(attachment){(0,_jquery.default)(this.getTipElement()).addClass("".concat("bs-tooltip","-").concat(attachment))}getTipElement(){return this.tip=this.tip||(0,_jquery.default)(this.config.template)[0],this.tip}setContent(){const tip=this.getTipElement();this.setElementContent((0,_jquery.default)(tip.querySelectorAll(".tooltip-inner")),this.getTitle()),(0,_jquery.default)(tip).removeClass("".concat("fade"," ").concat("show"))}setElementContent($element,content){"object"!=typeof content||!content.nodeType&amp;&amp;!content.jquery?this.config.html?(this.config.sanitize&amp;&amp;(content=(0,_sanitizer.sanitizeHtml)(content,this.config.whiteList,this.config.sanitizeFn)),$element.html(content)):$element.text(content):this.config.html?(0,_jquery.default)(content).parent().is($element)||$element.empty().append(content):$element.text((0,_jquery.default)(content).text())}getTitle(){let title=this.element.getAttribute("data-original-title");return title||(title="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),title}_getPopperConfig(attachment){return{...{placement:attachment,modifiers:{offset:this._getOffset(),flip:{behavior:this.config.fallbackPlacement},arrow:{element:".arrow"},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:data=&gt;{data.originalPlacement!==data.placement&amp;&amp;this._handlePopperPlacementChange(data)},onUpdate:data=&gt;this._handlePopperPlacementChange(data)},...this.config.popperConfig}}_getOffset(){const offset={};return"function"==typeof this.config.offset?offset.fn=data=&gt;(data.offsets={...data.offsets,...this.config.offset(data.offsets,this.element)},data):offset.offset=this.config.offset,offset}_getContainer(){return!1===this.config.container?document.body:_util.default.isElement(this.config.container)?(0,_jquery.default)(this.config.container):(0,_jquery.default)(document).find(this.config.container)}_getAttachment(placement){return AttachmentMap[placement.toUpperCase()]}_setListeners(){this.config.trigger.split(" ").forEach((trigger=&gt;{if("click"===trigger)(0,_jquery.default)(this.element).on(this.constructor.Event.CLICK,this.config.selector,(event=&gt;this.toggle(event)));else if("manual"!==trigger){const eventIn="hover"===trigger?this.constructor.Event.MOUSEENTER:this.constructor.Event.FOCUSIN,eventOut="hover"===trigger?this.constructor.Event.MOUSELEAVE:this.constructor.Event.FOCUSOUT;(0,_jquery.default)(this.element).on(eventIn,this.config.selector,(event=&gt;this._enter(event))).on(eventOut,this.config.selector,(event=&gt;this._leave(event)))}})),this._hideModalHandler=()=&gt;{this.element&amp;&amp;this.hide()},(0,_jquery.default)(this.element).closest(".modal").on("hide.bs.modal",this._hideModalHandler),this.config.selector?this.config={...this.config,trigger:"manual",selector:""}:this._fixTitle()}_fixTitle(){const titleType=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!==titleType)&amp;&amp;(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))}_enter(event,context){const dataKey=this.constructor.DATA_KEY;(context=context||(0,_jquery.default)(event.currentTarget).data(dataKey))||(context=new this.constructor(event.currentTarget,this._getDelegateConfig()),(0,_jquery.default)(event.currentTarget).data(dataKey,context)),event&amp;&amp;(context._activeTrigger["focusin"===event.type?"focus":"hover"]=!0),(0,_jquery.default)(context.getTipElement()).hasClass("show")||"show"===context._hoverState?context._hoverState="show":(clearTimeout(context._timeout),context._hoverState="show",context.config.delay&amp;&amp;context.config.delay.show?context._timeout=setTimeout((()=&gt;{"show"===context._hoverState&amp;&amp;context.show()}),context.config.delay.show):context.show())}_leave(event,context){const dataKey=this.constructor.DATA_KEY;(context=context||(0,_jquery.default)(event.currentTarget).data(dataKey))||(context=new this.constructor(event.currentTarget,this._getDelegateConfig()),(0,_jquery.default)(event.currentTarget).data(dataKey,context)),event&amp;&amp;(context._activeTrigger["focusout"===event.type?"focus":"hover"]=!1),context._isWithActiveTrigger()||(clearTimeout(context._timeout),context._hoverState="out",context.config.delay&amp;&amp;context.config.delay.hide?context._timeout=setTimeout((()=&gt;{"out"===context._hoverState&amp;&amp;context.hide()}),context.config.delay.hide):context.hide())}_isWithActiveTrigger(){for(const trigger in this._activeTrigger)if(this._activeTrigger[trigger])return!0;return!1}_getConfig(config){const dataAttributes=(0,_jquery.default)(this.element).data();return Object.keys(dataAttributes).forEach((dataAttr=&gt;{-1!==DISALLOWED_ATTRIBUTES.indexOf(dataAttr)&amp;&amp;delete dataAttributes[dataAttr]})),"number"==typeof(config={...this.constructor.Default,...dataAttributes,..."object"==typeof config&amp;&amp;config?config:{}}).delay&amp;&amp;(config.delay={show:config.delay,hide:config.delay}),"number"==typeof config.title&amp;&amp;(config.title=config.title.toString()),"number"==typeof config.content&amp;&amp;(config.content=config.content.toString()),_util.default.typeCheckConfig(NAME,config,this.constructor.DefaultType),config.sanitize&amp;&amp;(config.template=(0,_sanitizer.sanitizeHtml)(config.template,config.whiteList,config.sanitizeFn)),config}_getDelegateConfig(){const config={};if(this.config)for(const key in this.config)this.constructor.Default[key]!==this.config[key]&amp;&amp;(config[key]=this.config[key]);return config}_cleanTipClass(){const $tip=(0,_jquery.default)(this.getTipElement()),tabClass=$tip.attr("class").match(BSCLS_PREFIX_REGEX);null!==tabClass&amp;&amp;tabClass.length&amp;&amp;$tip.removeClass(tabClass.join(""))}_handlePopperPlacementChange(popperData){this.tip=popperData.instance.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(popperData.placement))}_fixTransition(){const tip=this.getTipElement(),initConfigAnimation=this.config.animation;null===tip.getAttribute("x-placement")&amp;&amp;((0,_jquery.default)(tip).removeClass("fade"),this.config.animation=!1,this.hide(),this.show(),this.config.animation=initConfigAnimation)}static _jQueryInterface(config){return this.each((function(){const $element=(0,_jquery.default)(this);let data=$element.data("bs.tooltip");const _config="object"==typeof config&amp;&amp;config;if((data||!/dispose|hide/.test(config))&amp;&amp;(data||(data=new Tooltip(this,_config),$element.data("bs.tooltip",data)),"string"==typeof config)){if(void 0===data[config])throw new TypeError('No method named "'.concat(config,'"'));data[config]()}}))}}_jquery.default.fn[NAME]=Tooltip._jQueryInterface,_jquery.default.fn[NAME].Constructor=Tooltip,_jquery.default.fn[NAME].noConflict=()=&gt;(_jquery.default.fn[NAME]=JQUERY_NO_CONFLICT,Tooltip._jQueryInterface);var _default=Tooltip;return _exports.default=_default,_exports.default}));
define("theme_boost/bootstrap/alert",["exports","jquery","./util"],(function(_exports,_jquery,_util){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_jquery=_interopRequireDefault(_jquery),_util=_interopRequireDefault(_util);const EVENT_KEY=".".concat("bs.alert"),JQUERY_NO_CONFLICT=_jquery.default.fn.alert,EVENT_CLOSE="close".concat(EVENT_KEY),EVENT_CLOSED="closed".concat(EVENT_KEY),EVENT_CLICK_DATA_API="click".concat(EVENT_KEY).concat(".data-api");class Alert{constructor(element){this._element=element}static get VERSION(){return"4.6.2"}close(element){let rootElement=this._element;element&amp;&amp;(rootElement=this._getRootElement(element));this._triggerCloseEvent(rootElement).isDefaultPrevented()||this._removeElement(rootElement)}dispose(){_jquery.default.removeData(this._element,"bs.alert"),this._element=null}_getRootElement(element){const selector=_util.default.getSelectorFromElement(element);let parent=!1;return selector&amp;&amp;(parent=document.querySelector(selector)),parent||(parent=(0,_jquery.default)(element).closest(".".concat("alert"))[0]),parent}_triggerCloseEvent(element){const closeEvent=_jquery.default.Event(EVENT_CLOSE);return(0,_jquery.default)(element).trigger(closeEvent),closeEvent}_removeElement(element){if((0,_jquery.default)(element).removeClass("show"),!(0,_jquery.default)(element).hasClass("fade"))return void this._destroyElement(element);const transitionDuration=_util.default.getTransitionDurationFromElement(element);(0,_jquery.default)(element).one(_util.default.TRANSITION_END,(event=&gt;this._destroyElement(element,event))).emulateTransitionEnd(transitionDuration)}_destroyElement(element){(0,_jquery.default)(element).detach().trigger(EVENT_CLOSED).remove()}static _jQueryInterface(config){return this.each((function(){const $element=(0,_jquery.default)(this);let data=$element.data("bs.alert");data||(data=new Alert(this),$element.data("bs.alert",data)),"close"===config&amp;&amp;data[config](this)}))}static _handleDismiss(alertInstance){return function(event){event&amp;&amp;event.preventDefault(),alertInstance.close(this)}}}(0,_jquery.default)(document).on(EVENT_CLICK_DATA_API,'[data-dismiss="alert"]',Alert._handleDismiss(new Alert)),_jquery.default.fn.alert=Alert._jQueryInterface,_jquery.default.fn.alert.Constructor=Alert,_jquery.default.fn.alert.noConflict=()=&gt;(_jquery.default.fn.alert=JQUERY_NO_CONFLICT,Alert._jQueryInterface);var _default=Alert;return _exports.default=_default,_exports.default}));
/**
 * Theme settings modal js.
 *
 * @package
 * @copyright  2020 Willian Mano - http://conecti.me
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("theme_moove/accessibilitysettings_modal",["jquery","core/notification","core/custom_interaction_events","core/modal","core/modal_registry","core/ajax"],(function(jQuery,Notification,CustomEvents,Modal,ModalRegistry,Ajax){var registered=!1,SELECTORS_SAVE_BUTTON='[data-action="save"]',SELECTORS_CANCEL_BUTTON='[data-action="cancel"]',AccessibilityModal=function(root){Modal.call(this,root),Ajax.call([{methodname:"theme_moove_getthemesettings",args:{}}])[0].done((function(result){document.getElementById("fonttype").value=result.fonttype,result.enableaccessibilitytoolbar&amp;&amp;(document.getElementById("enableaccessibilitytoolbar").checked=!0)}))};return AccessibilityModal.TYPE="theme_moove-themesettings_modal",(AccessibilityModal.prototype=Object.create(Modal.prototype)).constructor=AccessibilityModal,AccessibilityModal.prototype.registerEventListeners=function(){Modal.prototype.registerEventListeners.call(this),this.getModal().on(CustomEvents.events.activate,SELECTORS_SAVE_BUTTON,function(){Ajax.call([{methodname:"theme_moove_savethemesettings",args:{formdata:this.getFormData()}}])[0].done((function(){document.location.reload(!0)})).fail(function(error){var message=error.message;message||(message=error.error),Notification.addNotification({message:message,type:"error"}),this.hide(),this.destroy()}.bind(this))}.bind(this)),this.getModal().on(CustomEvents.events.activate,SELECTORS_CANCEL_BUTTON,function(){this.hide(),this.destroy()}.bind(this))},AccessibilityModal.prototype.getFormData=function(){return this.getForm().serialize()},AccessibilityModal.prototype.getForm=function(){return this.getBody().find("form")},registered||(ModalRegistry.register(AccessibilityModal.TYPE,AccessibilityModal,"theme_moove/accessibilitysettings_modal"),registered=!0),AccessibilityModal}));
/**
 * Contain the logic for dark mode.
 *
 * @copyright  2020 Willian Mano - http://conecti.me
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("theme_moove/darkmode",["jquery","core/str","core/ajax"],(function($,Str,Ajax){var SELECTORS_TRIGGER="#toggle-darkmode-input",SELECTORS_MODECLASS="moove-darkmode",ISACTIVATED=!1,DarkMode=function(){this.registerEventListeners(),$("body").hasClass(SELECTORS_MODECLASS)&amp;&amp;(ISACTIVATED=!0),this.setTriggerStatus()};return DarkMode.prototype.registerEventListeners=function(){$(SELECTORS_TRIGGER).click(function(){this.toggleDarkMode()}.bind(this))},DarkMode.prototype.toggleDarkMode=function(){$("body").toggleClass(SELECTORS_MODECLASS),ISACTIVATED=!ISACTIVATED,Ajax.call([{methodname:"theme_moove_toggledarkmode",args:{}}])[0].done(function(){this.setTriggerStatus()}.bind(this))},DarkMode.prototype.setTriggerStatus=function(){return ISACTIVATED?$(SELECTORS_TRIGGER).attr("checked","checked"):$(SELECTORS_TRIGGER).removeAttr("checked")},{init:function(){return new DarkMode}}}));
/**
 * Theme settings js logic
 *
 * @package
 * @copyright  2020 Willian Mano - http://conecti.me
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("theme_moove/accessibilitysettings",["jquery","core/modal_factory","theme_moove/accessibilitysettings_modal"],(function($,ModalFactory,AccessibilitySettingsModal){var SELECTORS_TOGGLE_REGION="#accessibilitysettings-control",AccessibilitySettings=function(){this.registerEventListeners()};return AccessibilitySettings.prototype.openAccessibilitySettingsModal=function(){ModalFactory.create({type:AccessibilitySettingsModal.TYPE}).then((function(modal){return modal.show()}))},AccessibilitySettings.prototype.registerEventListeners=function(){$(SELECTORS_TOGGLE_REGION).click(function(e){this.openAccessibilitySettingsModal(e),e.preventDefault()}.bind(this))},{init:function(){return new AccessibilitySettings}}}));
/**
 * Contain the logic for accessibility bar.
 *
 * @package
 * @copyright  2020 Willian Mano - http://conecti.me
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define("theme_moove/accessibilitybar",["jquery","core/ajax"],(function(jQuery,Ajax){window.jQuery=jQuery;var SELECTORS_FONT_SIZE="#fontsize_dec, #fontsize_reset, #fontsize_inc",SELECTORS_SITE_COLOR="#sitecolor_color1, #sitecolor_color2, #sitecolor_color3, #sitecolor_color4",fontsizeClass=null,fontsizeClassOp=null,fontsizeClassSize=null,fontsizeCurrentAction=null,sitecolorCurrentAction=null,AccessibilityBar=function(){var classList=jQuery("body").attr("class").split(/\s+/);jQuery.each(classList,(function(index,item){if(item.includes("fontsize-inc-")||item.includes("fontsize-dec-")){var itemarr=item.split("-");fontsizeClass=item,fontsizeClassOp=itemarr[1],fontsizeClassSize=itemarr[2]}})),this.toggleFontsizeButtons(),this.registerEventListeners()};return AccessibilityBar.prototype.registerEventListeners=function(){jQuery(SELECTORS_FONT_SIZE).click(function(element){var btn=jQuery(element.currentTarget);fontsizeCurrentAction=btn.data("action"),this.fontSize()}.bind(this)),jQuery(SELECTORS_SITE_COLOR).click(function(element){var btn=jQuery(element.currentTarget);sitecolorCurrentAction=btn.data("action"),this.siteColor()}.bind(this))},AccessibilityBar.prototype.fontSize=function(){Ajax.call([{methodname:"theme_moove_fontsize",args:{action:fontsizeCurrentAction}}])[0].done(function(){this.reloadFontsizeClass()}.bind(this))},AccessibilityBar.prototype.reloadFontsizeClass=function(){if("reset"===fontsizeCurrentAction||"increase"===fontsizeCurrentAction&amp;&amp;"fontsize-dec-1"===fontsizeClass||"decrease"===fontsizeCurrentAction&amp;&amp;"fontsize-inc-1"===fontsizeClass)return jQuery("body").removeClass(fontsizeClass),fontsizeClass=null,fontsizeClassOp=null,fontsizeClassSize=null,void this.toggleFontsizeButtons();"increase"===fontsizeCurrentAction&amp;&amp;(null===fontsizeClassSize?(fontsizeClass="fontsize-inc-1",fontsizeClassOp="inc",fontsizeClassSize=1):"inc"===fontsizeClassOp&amp;&amp;fontsizeClassSize&lt;6?(jQuery("body").removeClass(fontsizeClass),fontsizeClassSize++,fontsizeClass="fontsize-inc-"+fontsizeClassSize):"dec"===fontsizeClassOp&amp;&amp;(jQuery("body").removeClass(fontsizeClass),fontsizeClassSize--,fontsizeClass="fontsize-dec-"+fontsizeClassSize),jQuery("body").addClass(fontsizeClass)),"decrease"===fontsizeCurrentAction&amp;&amp;(null===fontsizeClassSize?(fontsizeClass="fontsize-dec-1",fontsizeClassOp="dec",fontsizeClassSize=1):"dec"===fontsizeClassOp&amp;&amp;fontsizeClassSize&lt;6?(jQuery("body").removeClass(fontsizeClass),fontsizeClassSize++,fontsizeClass="fontsize-dec-"+fontsizeClassSize):"inc"===fontsizeClassOp&amp;&amp;(jQuery("body").removeClass(fontsizeClass),fontsizeClassSize--,fontsizeClass="fontsize-inc-"+fontsizeClassSize),jQuery("body").addClass(fontsizeClass)),this.toggleFontsizeButtons()},AccessibilityBar.prototype.toggleFontsizeButtons=function(){null===fontsizeClass&amp;&amp;(jQuery("#fontsize_reset").addClass("disabled"),jQuery("#fontsize_inc").removeClass("disabled"),jQuery("#fontsize_dec").removeClass("disabled")),null!==fontsizeClass&amp;&amp;jQuery("#fontsize_reset").removeClass("disabled"),"inc"===fontsizeClassOp&amp;&amp;(6==fontsizeClassSize&amp;&amp;jQuery("#fontsize_inc").addClass("disabled"),fontsizeClassSize&lt;6&amp;&amp;jQuery("#fontsize_inc").removeClass("disabled")),"dec"===fontsizeClassOp&amp;&amp;(6==fontsizeClassSize&amp;&amp;jQuery("#fontsize_dec").addClass("disabled"),fontsizeClassSize&lt;6&amp;&amp;jQuery("#fontsize_dec").removeClass("disabled"))},AccessibilityBar.prototype.siteColor=function(){Ajax.call([{methodname:"theme_moove_sitecolor",args:{action:sitecolorCurrentAction}}])[0].done(function(){this.reloadSitecolorClass()}.bind(this))},AccessibilityBar.prototype.reloadSitecolorClass=function(){jQuery("body").removeClass((function(index,className){return(className.match(/(^|\s)sitecolor-color-\S+/g)||[]).join(" ")})),"reset"!==sitecolorCurrentAction&amp;&amp;jQuery("body").addClass(sitecolorCurrentAction)},{init:function(){return new AccessibilityBar}}}));
define ("local_intelliboard/setup",["jquery","local_intelliboard/setup_moodle_settings","local_intelliboard/setup_terms","local_intelliboard/setup_authentication"],function(a,b,c,d){var e={activeRequest:!1,serviceToken:"",useRestProtocol:!0,init:function init(){e.moodleSettingsHandler();e.termsHandler()},moodleSettingsHandler:function moodleSettingsHandler(){a(".moodle-settings .tab-header-button button.next, .moodle-settings .tab-body-button button.next").unbind("click");a(".moodle-settings .tab-header-button button.next, .moodle-settings .tab-body-button button.next").on("click",function(){if(e.activeRequest){return}e.activeRequest=!0;b.hideErrors();b.loaderContainer.removeClass("hidden");b.save(function(d){e.activeRequest=!1;b.loaderContainer.addClass("hidden");if("success"===d.status){e.serviceToken=JSON.parse(d.data).token;e.useRestProtocol=a("#rest_protocol").is(":checked");b.closeTab();c.openTab()}else{b.showErrors(d.data)}})});a(".moodle-settings .choose-group .item").unbind("click");a(".moodle-settings .choose-group .item").on("click",function(){a(".moodle-settings .choose-group .item").removeClass("active");a(".moodle-settings .choose-group .item input").prop("checked",!1).attr("checked","");a(this).addClass("active");a(this).find("input").attr("checked","checked").prop("checked",!0)})},termsHandler:function termsHandler(){a(".tab-item.terms .tab-header-button button.next, .tab-item.terms .tab-body-button button.next").unbind("click");a(".tab-item.terms .tab-header-button button.next, .tab-item.terms .tab-body-button button.next").on("click",function(){if(e.activeRequest){return}c.hideErrors();c.loaderContainer.removeClass("hidden");if(c.termsIsAccepted()){c.loaderContainer.addClass("hidden");c.closeTab();e.authenticationHandler()}else{c.showErrorMessage(function(){c.loaderContainer.addClass("hidden")})}});a(".tab-item.terms .tab-header-button button.back, .tab-item.terms .tab-body-button button.back").on("click",function(){c.closeTab();b.openTab()})},authenticationHandler:function authenticationHandler(){var b=a("#subscription_email").val();d.openTab();d.setFormEmail(b);d.loaderContainer.removeClass("hidden");d.checkEmail(b,function(b){if(b.email_exists){d.showLoginForm();d.loginHandler(e.serviceToken,e.useRestProtocol,function(){d.closeTab();a(".setup-wrapper .tab-item.congrats").removeClass("closed")})}else{d.showRegisterForm();d.registerHandler(e.serviceToken,e.useRestProtocol,function(){d.closeTab();a(".setup-wrapper .tab-item.congrats").removeClass("closed")})}});a(".tab-item.authentication .tab-header-button button.back, .tab-item.authentication .tab-body-button button.back").on("click",function(){d.closeTab();d.hideLoginForm();d.hideRegisterForm();c.openTab()})}};return e});
function _typeof(a){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&amp;&amp;"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&amp;&amp;"function"==typeof Symbol&amp;&amp;a.constructor===Symbol&amp;&amp;a!==Symbol.prototype?"symbol":typeof a},_typeof(a)}define ("local_intelliboard/intb_multipleselect",["jquery"],function(a){(function(a){"use strict";function b(b,c){var d=this,e=b.attr("name")||c.name||"";b.parent().hide();var f=b.css("width");b.parent().show();if("0px"==f){f=b.outerWidth()+20}this.$el=b.hide();this.options=c;this.$parent=a("&lt;div"+a.map(["class","title"],function(a){var b=d.$el.attr(a)||"";b=("class"===a?"ms-parent"+(b?" ":""):"")+b;return b?" "+a+"=\""+b+"\"":""}).join("")+" /&gt;");this.$choice=a("&lt;button type=\"button\" class=\"ms-choice\"&gt;&lt;span class=\"placeholder\"&gt;"+c.placeholder+"&lt;/span&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;");this.$drop=a("&lt;div class=\"ms-drop "+c.position+"\"&gt;&lt;/div&gt;");this.$el.after(this.$parent);this.$parent.append(this.$choice);this.$parent.append(this.$drop);if(this.$el.prop("disabled")){this.$choice.addClass("disabled")}this.$parent.css("width",c.width||f);if(!this.options.keepOpen){a("body").click(function(b){if(a(b.target)[0]===d.$choice[0]||a(b.target).parents(".ms-choice")[0]===d.$choice[0]){return}if("INPUT"===b.target.tagName.toUpperCase()&amp;&amp;(a(b.target)[0]===d.$drop[0]||a(b.target).parents(".ms-drop")[0]!==d.$drop[0])&amp;&amp;d.options.isOpen){d.close()}})}this.selectAllName="name=\"selectAll"+e+"\"";this.selectGroupName="name=\"selectGroup"+e+"\"";this.selectItemName="name=\"selectItem"+e+"\""}b.prototype={constructor:b,init:function init(){var b=this,c=[];if(this.options.filter){c.push("&lt;div class=\"ms-search\"&gt;","&lt;input type=\"text\" autocomplete=\"off\" autocorrect=\"off\" autocapitilize=\"off\" spellcheck=\"false\"&gt;","&lt;/div&gt;")}c.push("&lt;ul&gt;");if(this.options.selectAll&amp;&amp;!this.options.single){c.push("&lt;li class=\"ms-select-all\"&gt;","&lt;label&gt;","&lt;input type=\"checkbox\" "+this.selectAllName+" /&gt; ",this.options.selectAllDelimiter[0]+this.options.selectAllText+this.options.selectAllDelimiter[1],"&lt;/label&gt;","&lt;/li&gt;")}a.each(this.$el.children(),function(a,d){c.push(b.optionToHtml(a,d))});c.push("&lt;li class=\"ms-no-results\"&gt;"+this.options.noMatchesFound+"&lt;/li&gt;");c.push("&lt;/ul&gt;");this.$drop.html(c.join(""));this.$drop.find("ul").css("max-height",this.options.maxHeight+"px");this.$drop.find(".multiple").css("width",this.options.multipleWidth+"px");this.$searchInput=this.$drop.find(".ms-search input");this.$selectAll=this.$drop.find("input["+this.selectAllName+"]");this.$selectGroups=this.$drop.find("input["+this.selectGroupName+"]");this.$selectItems=this.$drop.find("input["+this.selectItemName+"]:enabled");this.$disableItems=this.$drop.find("input["+this.selectItemName+"]:disabled");this.$noResults=this.$drop.find(".ms-no-results");this.events();this.updateSelectAll(!0);this.update(!0);if(this.options.isOpen){this.open()}},optionToHtml:function optionToHtml(b,c,d,e){var f=this,g=a(c),h=[],i=this.options.multiple,j=a.map(["class","title"],function(a){var b="class"===a&amp;&amp;i,c=g.attr(a)||"";return b||c?" "+a+"=\""+(b?"multiple"+(c?" ":""):"")+c+"\"":""}).join(""),k,l=this.options.single?"radio":"checkbox";if(g.is("option")){var m=g.val(),n=f.options.textTemplate(g),o=f.$el.attr("multiple")!=void 0?g.prop("selected"):"selected"==g.attr("selected"),p=this.options.styler(m)?" style=\""+this.options.styler(m)+"\"":"";k=e||g.prop("disabled");if(""&lt;this.options.blockSeparator&amp;&amp;this.options.blockSeparator==g.val()){h.push("&lt;li  title=\""+n+"\" "+j+p+"&gt;","&lt;label class=\""+this.options.blockSeparator+(k?"disabled":"")+"\"&gt;",n,"&lt;/label&gt;","&lt;/li&gt;")}else{h.push("&lt;li  title=\""+n+"\" "+j+p+"&gt;","&lt;label"+(k?" class=\"disabled\"":"")+"&gt;","&lt;input type=\""+l+"\" "+this.selectItemName+" value=\""+m+"\""+(o?" checked=\"checked\"":"")+(k?" disabled=\"disabled\"":"")+(d?" data-group=\""+d+"\"":"")+"/&gt; ",n,"&lt;/label&gt;","&lt;/li&gt;")}}else if(!d&amp;&amp;g.is("optgroup")){var q="group_"+b,r=g.attr("label");k=g.prop("disabled");h.push("&lt;li class=\"group\"&gt;","&lt;label class=\"optgroup"+(k?" disabled":"")+"\" data-group=\""+q+"\"&gt;",this.options.hideOptgroupCheckboxes?"":"&lt;input type=\"checkbox\" "+this.selectGroupName+(k?" disabled=\"disabled\"":"")+" /&gt; ",r,"&lt;/label&gt;","&lt;/li&gt;");a.each(g.children(),function(a,b){h.push(f.optionToHtml(a,b,q,k))})}return h.join("")},events:function events(){var b=this;function c(a){a.preventDefault();b[b.options.isOpen?"close":"open"]()}var d=this.$el.parent().closest("label")[0]||a("label[for="+this.$el.attr("id")+"]")[0];if(d){a(d).off("click").on("click",function(a){if("label"!==a.target.nodeName.toLowerCase()||a.target!==this){return}c(a);if(!b.options.filter||!b.options.isOpen){b.focus()}a.stopPropagation()})}this.$choice.off("click").on("click",c).off("focus").on("focus",this.options.onFocus).off("blur").on("blur",this.options.onBlur);this.$parent.off("keydown").on("keydown",function(a){switch(a.which){case 27:b.close();b.$choice.focus();break;}});this.$searchInput.off("keydown").on("keydown",function(a){if(9===a.keyCode&amp;&amp;a.shiftKey){b.close()}}).off("keyup").on("keyup",function(a){if(b.options.filterAcceptOnEnter&amp;&amp;(13===a.which||32==a.which)&amp;&amp;b.$searchInput.val()){b.$selectAll.click();b.close();b.focus();return}b.filter()});this.$selectAll.off("click").on("click",function(){var c=a(this).prop("checked"),d=b.$selectItems.filter(":visible");if(d.length===b.$selectItems.length){b[c?"checkAll":"uncheckAll"]()}else{b.$selectGroups.prop("checked",c);d.prop("checked",c);b.options[c?"onCheckAll":"onUncheckAll"]();b.update()}});this.$selectGroups.off("click").on("click",function(){var c=a(this).parent().attr("data-group"),d=b.$selectItems.filter(":visible"),e=d.filter("[data-group=\""+c+"\"]"),f=e.length!==e.filter(":checked").length;e.prop("checked",f);b.updateSelectAll();b.update();b.options.onOptgroupClick({label:a(this).parent().text(),checked:f,children:e.get()})});this.$selectItems.off("click").on("click",function(){b.updateSelectAll();b.update();b.updateOptGroupSelect();b.options.onClick({label:a(this).parent().text(),value:a(this).val(),checked:a(this).prop("checked")});if(b.options.single&amp;&amp;b.options.isOpen&amp;&amp;!b.options.keepOpen){b.close()}})},open:function open(){if(this.$choice.hasClass("disabled")){return}this.options.isOpen=!0;this.$choice.find("&gt;div").addClass("open");this.$drop.show();this.$selectAll.parent().show();this.$noResults.hide();if(0===this.$el.children().length){this.$selectAll.parent().hide();this.$noResults.show()}if(this.options.container){var b=this.$drop.offset();this.$drop.appendTo(a(this.options.container));this.$drop.offset({top:b.top,left:b.left})}if(this.options.filter){this.$searchInput.val("");this.$searchInput.focus();this.filter()}this.options.onOpen()},close:function close(){this.options.isOpen=!1;this.$choice.find("&gt;div").removeClass("open");this.$drop.hide();if(this.options.container){this.$parent.append(this.$drop);this.$drop.css({top:"auto",left:"auto"})}this.options.onClose()},update:function update(b){var c=this.getSelects(),d=this.$choice.find("&gt;span");if(0===c.length){d.addClass("placeholder").html(this.options.placeholder)}else if(this.options.countSelected&amp;&amp;c.length&lt;this.options.minimumCountSelected){d.removeClass("placeholder").html((this.options.displayValues?c:this.getSelects("text")).join(this.options.delimiter))}else if(this.options.allSelected&amp;&amp;c.length===this.$selectItems.length+this.$disableItems.length){d.removeClass("placeholder").html(this.options.allSelected)}else if((this.options.countSelected||this.options.etcaetera)&amp;&amp;c.length&gt;this.options.minimumCountSelected){if(this.options.etcaetera){d.removeClass("placeholder").html((this.options.displayValues?c:this.getSelects("text").slice(0,this.options.minimumCountSelected)).join(this.options.delimiter)+"...")}else{d.removeClass("placeholder").html(this.options.countSelected.replace("#",c.length).replace("%",this.$selectItems.length+this.$disableItems.length))}}else{d.removeClass("placeholder").html((this.options.displayValues?c:this.getSelects("text")).join(this.options.delimiter))}this.$el.val(this.getSelects());this.$drop.find("li").removeClass("selected");this.$drop.find("input["+this.selectItemName+"]:checked").each(function(){a(this).parents("li").first().addClass("selected")});if(!b){this.$el.trigger("change")}},updateSelectAll:function updateSelectAll(a){var b=this.$selectItems;if(!a){b=b.filter(":visible")}this.$selectAll.prop("checked",b.length&amp;&amp;b.length===b.filter(":checked").length);if(this.$selectAll.prop("checked")){this.options.onCheckAll()}},updateOptGroupSelect:function updateOptGroupSelect(){var b=this.$selectItems.filter(":visible");a.each(this.$selectGroups,function(c,d){var e=a(d).parent().attr("data-group"),f=b.filter("[data-group=\""+e+"\"]");a(d).prop("checked",f.length&amp;&amp;f.length===f.filter(":checked").length)})},getSelects:function getSelects(b){var c=this,d=[],e=[];this.$drop.find("input["+this.selectItemName+"]:checked").each(function(){d.push(a(this).parents("li").first().text());e.push(a(this).val())});if("text"===b&amp;&amp;this.$selectGroups.length){d=[];this.$selectGroups.each(function(){var b=[],e=a.trim(a(this).parent().text()),f=a(this).parent().data("group"),g=c.$drop.find("["+c.selectItemName+"][data-group=\""+f+"\"]"),h=g.filter(":checked");if(0===h.length){return}b.push("[");b.push(e);if(g.length&gt;h.length){var i=[];h.each(function(){i.push(a(this).parent().text())});b.push(": "+i.join(", "))}b.push("]");d.push(b.join(""))})}return"text"===b?d:e},setSelects:function setSelects(b){var c=this;this.$selectItems.prop("checked",!1);a.each(b,function(a,b){c.$selectItems.filter("[value=\""+b+"\"]").prop("checked",!0)});this.$selectAll.prop("checked",this.$selectItems.length===this.$selectItems.filter(":checked").length);this.update()},enable:function enable(){this.$choice.removeClass("disabled")},disable:function disable(){this.$choice.addClass("disabled")},checkAll:function checkAll(){this.$selectItems.prop("checked",!0);this.$selectGroups.prop("checked",!0);this.$selectAll.prop("checked",!0);this.update();this.options.onCheckAll()},uncheckAll:function uncheckAll(){this.$selectItems.prop("checked",!1);this.$selectGroups.prop("checked",!1);this.$selectAll.prop("checked",!1);this.update();this.options.onUncheckAll()},focus:function focus(){this.$choice.focus();this.options.onFocus()},blur:function blur(){this.$choice.blur();this.options.onBlur()},refresh:function refresh(){this.init()},filter:function filter(){var b=this,c=a.trim(this.$searchInput.val()).toLowerCase();if(0===c.length){this.$selectItems.parent().show();this.$disableItems.parent().show();this.$selectGroups.parent().show()}else{this.$selectItems.each(function(){var b=a(this).parent();b[0&gt;b.text().toLowerCase().indexOf(c)?"hide":"show"]()});this.$disableItems.parent().hide();this.$selectGroups.each(function(){var c=a(this).parent(),d=c.attr("data-group"),e=b.$selectItems.filter(":visible");c[0===e.filter("[data-group=\""+d+"\"]").length?"hide":"show"]()});if(this.$selectItems.filter(":visible").length){this.$selectAll.parent().show();this.$noResults.hide()}else{this.$selectAll.parent().hide();this.$noResults.show()}}this.updateOptGroupSelect();this.updateSelectAll()}};a.fn.multipleSelect=function(){var c=arguments[0],d=arguments,e,f=["getSelects","setSelects","enable","disable","checkAll","uncheckAll","focus","blur","refresh","close"];this.each(function(){var g=a(this),h=g.data("multipleSelect"),i=a.extend({},a.fn.multipleSelect.defaults,g.data(),"object"===_typeof(c)&amp;&amp;c);if(!h){h=new b(g,i);g.data("multipleSelect",h)}if("string"==typeof c){if(0&gt;a.inArray(c,f)){throw"Unknown method: "+c}e=h[c](d[1])}else{h.init();if(d[1]){e=h[d[1]].apply(h,[].slice.call(d,2))}}});return e?e:this};a.fn.multipleSelect.defaults={name:"",isOpen:!1,placeholder:"",selectAll:!0,selectAllText:"Select all",selectAllDelimiter:["[","]"],allSelected:"All selected",minimumCountSelected:3,countSelected:"# of % selected",noMatchesFound:"No matches found",multiple:!1,multipleWidth:80,single:!1,filter:!1,width:void 0,maxHeight:250,container:null,position:"bottom",keepOpen:!1,blockSeparator:"",displayValues:!1,delimiter:", ",styler:function styler(){return!1},textTemplate:function textTemplate(a){return a.text()},onOpen:function onOpen(){return!1},onClose:function onClose(){return!1},onCheckAll:function onCheckAll(){return!1},onUncheckAll:function onUncheckAll(){return!1},onFocus:function onFocus(){return!1},onBlur:function onBlur(){return!1},onOptgroupClick:function onOptgroupClick(){return!1},onClick:function onClick(){return!1}}})(a)});
define ("local_intelliboard/intelliboard",["jquery","local_intelliboard/intb_circlechart"],function(a){return{circleProgress:function circleProgress(b){b=JSON.parse(b);a(document).ready(function(){a(".circle-progress").percentcircle(b)})}}});
define ("local_intelliboard/instructor",["jquery","core/ajax","local_intelliboard/intb_multipleselect"],function(a,b){return{dashboardSettings:function dashboardSettings(c,d,e){var f=a(".instructor-courses-settings"),g=a(".instructor-dashboard-settings-wrapper");f.multipleSelect({multiple:!0,placeholder:c,allSelected:d,selectAllText:e,multipleWidth:350,filter:!0});g.find(".ms-drop.bottom").append("&lt;button class=\"btn btn-primary\"&gt;OK&lt;/button&gt;");g.find(".ms-drop.bottom button").on("click",function(){var a=f.val();if(null==a){a=[]}var c=b.call([{methodname:"local_intelliboard_save_instructor_courses",args:{data:JSON.stringify({courses:a})}}]);c[0].done(function(){window.location.reload()})})}}});
define('local_intelliboard/instructor_actions', ["core/ajax"],function(a){var b={execAction:function(b,c,d){a.call([{methodname:"local_intelliboard_instructor_action",args:{action:b,params:c}}])[0].done(function(a){a.data&amp;&amp;d(JSON.parse(a.data))})}};return b});
define ("local_intelliboard/setup_authentication",["jquery","core/ajax","local_intelliboard/validator","core/str"],function(a,b,c,d){var e={errorsContainer:a(".tab-item.authentication .warnings-block"),loaderContainer:a(".tab-item.authentication .loader"),showErrors:function showErrors(a){e.errorsContainer.html(a);e.errorsContainer.removeClass("hidden")},hideErrors:function hideErrors(){e.errorsContainer.html("");e.errorsContainer.addClass("hidden")},closeTab:function closeTab(){a(".tab-item.authentication").addClass("closed")},openTab:function openTab(){a(".tab-item.authentication").removeClass("closed")},showLoginForm:function showLoginForm(){a(".tab-item .tab-body .login-form").removeClass("hidden")},hideLoginForm:function hideLoginForm(){a(".tab-item .tab-body .login-form").addClass("hidden")},showRegisterForm:function showRegisterForm(){a(".tab-item .tab-body .register-form").removeClass("hidden")},hideRegisterForm:function hideRegisterForm(){a(".tab-item .tab-body .register-form").addClass("hidden")},setFormEmail:function setFormEmail(b){a("#loginEmail").val(b);a("#registerEmail").val(b)},checkEmail:function checkEmail(d,e){if(c.validateEmail(d)){var f=b.call([{methodname:"local_intelliboard_setup_check_email",args:{email:a("#subscription_email").val()}}]);f[0].done(function(a){e(a)});f[0].fail(function(){e({email_exists:!1})})}else{e({email_exists:!1})}},loginHandler:function loginHandler(c,f,g){e.loaderContainer.addClass("hidden");a(".tab-body .login-form .sign-in").unbind("click");a(".tab-body .login-form .sign-in").on("click",function(){var h=a("#loginEmail").val(),i=a("#loginPassword").val();e.loaderContainer.removeClass("hidden");e.hideErrors();if(!h||!i){var j=d.get_string("all_fields_required","local_intelliboard");a.when(j).done(function(a){e.loaderContainer.addClass("hidden");e.showErrors(a)})}else{var k=b.call([{methodname:"local_intelliboard_setup_login",args:{email:h,password:i,moodle_service_token:c,restProtocol:f}}]);k[0].done(function(a){e.loaderContainer.addClass("hidden");if("error"===a.status){e.showErrors(a.message)}else{g()}});k[0].fail(function(){var b=d.get_string("server_error","local_intelliboard");a.when(b).done(function(a){e.loaderContainer.addClass("hidden");e.showErrors("&lt;p&gt;"+a+"&lt;/p&gt;")})})}})},registerHandler:function registerHandler(c,f,g){e.loaderContainer.addClass("hidden");a(".tab-body .register-form .sign-up").unbind("click");a(".tab-body .register-form .sign-up").on("click",function(){var h=a("#registerEmail").val(),i=a("#registerPassword").val(),j=a("#registerName").val();e.loaderContainer.removeClass("hidden");e.hideErrors();if(!h||!i||!j){var k=d.get_string("all_fields_required","local_intelliboard");a.when(k).done(function(a){e.loaderContainer.addClass("hidden");e.showErrors(a)})}else{var l=b.call([{methodname:"local_intelliboard_setup_register",args:{name:j,email:h,password:i,country:a("#registerCountry").val(),moodle_service_token:c,restProtocol:f}}]);l[0].done(function(a){e.loaderContainer.addClass("hidden");if("error"===a.status){e.showErrors(a.message)}else{g()}});l[0].fail(function(){var b=d.get_string("server_error","local_intelliboard");a.when(b).done(function(a){e.loaderContainer.addClass("hidden");e.showErrors("&lt;p&gt;"+a+"&lt;/p&gt;")})})}})}};return e});
define ("local_intelliboard/competency_dashboard",["jquery","local_intelliboard/intb_multipleselect","core/str"],function(a,b,c){return{cohortFilter:function cohortFilter(){var b=a("#competencyCohortFilter");if(b.length){var d=c.get_string("all_cohorts","local_intelliboard");a.when(d).done(function(c){b.multipleSelect({placeholder:c,selectAll:!1,filter:!0,single:!0,onClick:function onClick(){window.location.href=a("#competencyCohortFilter option:selected").data("href")}})})}}}});
define ("local_intelliboard/intb_circlechart",["jquery"],function(a){(function(a){a.fn.extend({percentcircle:function percentcircle(b){var c={animate:!0,diameter:100,guage:2,coverBg:"#fff",bgColor:"#efefef",fillColor:"#5c93c8",percentSize:"15px",percentWeight:"normal"};c=a.extend(c,b);var d={cirContainer:{width:c.diameter,height:c.diameter},cir:{position:"relative","text-align":"center",width:c.diameter,height:c.diameter,"border-radius":"100%","background-color":c.bgColor,"background-image":"linear-gradient(91deg, transparent 50%, "+c.bgColor+" 50%), linear-gradient(90deg, "+c.bgColor+" 50%, transparent 50%)"},cirCover:{position:"relative",top:c.guage,left:c.guage,"text-align":"center",width:c.diameter-2*c.guage,height:c.diameter-2*c.guage,"border-radius":"100%","background-color":c.coverBg},percent:{display:"block",width:c.diameter,height:c.diameter,"line-height":c.diameter+"px","vertical-align":"middle","font-size":c.percentSize,"font-weight":c.percentWeight,color:c.fillColor}},e=this;var f=function(a,b,d){var e=b;if(b&lt;=a){if(180&lt;=e){d.css("background-image","linear-gradient("+(90+e)+"deg, transparent 50%, "+c.fillColor+" 50%),linear-gradient(90deg, "+c.fillColor+" 50%, transparent 50%)")}else{d.css("background-image","linear-gradient("+(e-90)+"deg, transparent 50%, "+c.bgColor+" 50%),linear-gradient(90deg, "+c.fillColor+" 50%, transparent 50%)")}b++;setTimeout(function(){f(a,b,d)},1)}};(function(){e.each(function(){var b=a(this),e=b.data("percent"),g=Math.round(e),h=3.6*g,i=c.animate?0:h,j=a("&lt;div&gt;&lt;div class=\"ab\"&gt;&lt;div class=\"cir\"&gt;&lt;span class=\"perc\"&gt;{{percentage}}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;".replace("{{percentage}}",isNaN(e)?e:Math.max(e,g)+"%"));j.css(d.cirContainer).find(".ab").css(d.cir).find(".cir").css(d.cirCover).find(".perc").css(d.percent);b.append(j);setTimeout(function(){f(h,parseInt(i),j.find(".ab"))},250)})})()}})})(a)});
define ("local_intelliboard/setup_terms",["jquery","core/str"],function(a,b){var c={errorsContainer:a(".tab-item.terms .warnings-block"),loaderContainer:a(".tab-item.terms .loader"),errorMessage:"",isInit:!1,showErrorMessage:function showErrorMessage(d){if(!c.errorMessage){var e=b.get_string("please_accept_terms_and_conditions","local_intelliboard");a.when(e).done(function(a){c.errorMessage=a;c.errorsContainer.html(a);c.errorsContainer.removeClass("hidden");d()})}else{c.errorsContainer.html(c.errorMessage);c.errorsContainer.removeClass("hidden");d()}},hideErrors:function hideErrors(){c.errorsContainer.html("");c.errorsContainer.addClass("hidden")},closeTab:function closeTab(){a(".tab-item.terms").addClass("closed")},openTab:function openTab(){a(".tab-item.terms").removeClass("closed")},termsIsAccepted:function termsIsAccepted(){var b=a("#termsField").is(":checked"),c=a("#shieldField").is(":checked"),d=a("#privacyField").is(":checked");return b&amp;&amp;c&amp;&amp;d}};return c});
define ("local_intelliboard/validator",[],function(){return{validateEmail:function validateEmail(a){var b=/^(([^&lt;&gt;()\[\]\\.,;:\s@"]+(\.[^&lt;&gt;()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;return b.test((a+"").toLowerCase())}}});
define ("local_intelliboard/setup_moodle_settings",["jquery","core/ajax","local_intelliboard/validator","core/str"],function(a,b,c,d){var e={errorsContainer:a(".moodle-settings .warnings-block"),loaderContainer:a(".moodle-settings .loader"),save:function save(e){if(c.validateEmail(a("#subscription_email").val())){var f=b.call([{methodname:"local_intelliboard_setup_base_settings",args:{params:{webservice:a("#webservice").is(":checked"),rest_protocol:a("#rest_protocol").is(":checked"),soap_protocol:a("#soap_protocol").is(":checked"),user_identifier:a("#usernameorid").val(),enable_tracking:a("#enable_tracking").is(":checked"),enable_sso_link:a("#enable_sso_link").is(":checked"),email:a("#subscription_email").val()}}}]);f[0].done(function(a){e(a)});f[0].fail(function(){var b=d.get_string("server_error","local_intelliboard");a.when(b).done(function(a){e({status:"error",data:"&lt;p&gt;"+a+"&lt;/p&gt;"})})})}else{var g=d.get_string("invalid_email","local_intelliboard");a.when(g).done(function(a){e({status:"error",data:"&lt;p&gt;"+a+"&lt;/p&gt;"})})}},showErrors:function showErrors(a){e.errorsContainer.html(a);e.errorsContainer.removeClass("hidden")},hideErrors:function hideErrors(){e.errorsContainer.html("");e.errorsContainer.addClass("hidden")},closeTab:function closeTab(){a(".moodle-settings").addClass("closed")},openTab:function openTab(){a(".moodle-settings").removeClass("closed")}};return e});
define('local_intelliboard/flatpickr', ["jquery"],function(e){function t(e,n){function o(e){return e.bind(ee)}function l(e){ee.config.noCalendar&amp;&amp;!ee.selectedDates.length&amp;&amp;(ee.selectedDates=[ee.now]),function(e){e.preventDefault();var t="keydown"===e.type,n=(e.type,e.type,e.target);if(ee.amPM&amp;&amp;e.target===ee.amPM)return e.target.textContent=["AM","PM"]["AM"===e.target.textContent|0];var a=Number(n.min),i=Number(n.max),r=Number(n.step),o=parseInt(n.value,10),l=o+r*(e.delta||(t?38===e.which?1:-1:Math.max(-1,Math.min(1,e.wheelDelta||-e.deltaY))||0));if(void 0!==n.value&amp;&amp;2===n.value.length){var s=n===ee.hourElement,c=n===ee.minuteElement;l&lt;a?(l=i+l+!s+(s&amp;&amp;!ee.amPM),c&amp;&amp;M(null,-1,ee.hourElement)):l&gt;i&amp;&amp;(l=n===ee.hourElement?l-i-!ee.amPM:a,c&amp;&amp;M(null,1,ee.hourElement)),ee.amPM&amp;&amp;s&amp;&amp;(1===r?l+o===23:Math.abs(l-o)&gt;r)&amp;&amp;(ee.amPM.textContent="PM"===ee.amPM.textContent?"AM":"PM"),n.value=ee.pad(l)}}(e),ee.selectedDates.length&amp;&amp;(!ee.minDateHasTime||"input"!==e.type||e.target.value.length&gt;=2?(s(),V()):setTimeout(function(){s(),V()},1e3))}function s(){if(ee.config.enableTime){var e=(parseInt(ee.hourElement.value,10)||0)%(ee.amPM?12:24),t=(parseInt(ee.minuteElement.value,10)||0)%60,n=ee.config.enableSeconds?(parseInt(ee.secondElement.value,10)||0)%60:0;void 0!==ee.amPM&amp;&amp;(e=e%12+12*("PM"===ee.amPM.textContent)),ee.minDateHasTime&amp;&amp;0===X(ee.latestSelectedDateObj,ee.config.minDate)&amp;&amp;(e=Math.max(e,ee.config.minDate.getHours()))===ee.config.minDate.getHours()&amp;&amp;(t=Math.max(t,ee.config.minDate.getMinutes())),ee.maxDateHasTime&amp;&amp;0===X(ee.latestSelectedDateObj,ee.config.maxDate)&amp;&amp;(e=Math.min(e,ee.config.maxDate.getHours()))===ee.config.maxDate.getHours()&amp;&amp;(t=Math.min(t,ee.config.maxDate.getMinutes())),d(e,t,n)}}function c(e){var t=e||ee.latestSelectedDateObj;t&amp;&amp;d(t.getHours(),t.getMinutes(),t.getSeconds())}function d(e,t,n){ee.selectedDates.length&amp;&amp;ee.latestSelectedDateObj.setHours(e%24,t,n||0,0),ee.config.enableTime&amp;&amp;!ee.isMobile&amp;&amp;(ee.hourElement.value=ee.pad(ee.config.time_24hr?e:(12+e)%12+12*(e%12==0)),ee.minuteElement.value=ee.pad(t),ee.config.time_24hr||(ee.amPM.textContent=e&gt;=12?"PM":"AM"),!0===ee.config.enableSeconds&amp;&amp;(ee.secondElement.value=ee.pad(n)))}function u(e){var t=e.target.value;e.delta&amp;&amp;(t=(parseInt(t)+e.delta).toString()),4!==t.length&amp;&amp;"Enter"!==e.key||(ee.currentYearElement.blur(),/[^\d]/.test(t)||I(t))}function f(e,t,n){return t instanceof Array?t.forEach(function(t){return f(e,t,n)}):e instanceof Array?e.forEach(function(e){return f(e,t,n)}):(e.addEventListener(t,n),void ee._handlers.push({element:e,event:t,handler:n}))}function m(e){return function(t){return 1===t.which&amp;&amp;e(t)}}function g(){if(ee._handlers=[],ee._animationLoop=[],ee.config.wrap&amp;&amp;["open","close","toggle","clear"].forEach(function(e){Array.prototype.forEach.call(ee.element.querySelectorAll("[data-"+e+"]"),function(t){return f(t,"mousedown",m(ee[e]))})}),ee.isMobile)return function(){var e=ee.config.enableTime?ee.config.noCalendar?"time":"datetime-local":"date";ee.mobileInput=$("input",ee.input.className+" flatpickr-mobile"),ee.mobileInput.step="any",ee.mobileInput.tabIndex=1,ee.mobileInput.type=e,ee.mobileInput.disabled=ee.input.disabled,ee.mobileInput.placeholder=ee.input.placeholder,ee.mobileFormatStr="datetime-local"===e?"Y-m-d\\TH:i:S":"date"===e?"Y-m-d":"H:i:S",ee.selectedDates.length&amp;&amp;(ee.mobileInput.defaultValue=ee.mobileInput.value=ee.formatDate(ee.selectedDates[0],ee.mobileFormatStr)),ee.config.minDate&amp;&amp;(ee.mobileInput.min=ee.formatDate(ee.config.minDate,"Y-m-d")),ee.config.maxDate&amp;&amp;(ee.mobileInput.max=ee.formatDate(ee.config.maxDate,"Y-m-d")),ee.input.type="hidden",ee.config.altInput&amp;&amp;(ee.altInput.type="hidden");try{ee.input.parentNode.insertBefore(ee.mobileInput,ee.input.nextSibling)}catch(e){}ee.mobileInput.addEventListener("change",function(e){ee.setDate(e.target.value,!1,ee.mobileFormatStr),W("Change"),W("Close")})}();if(ee.debouncedResize=Q(Y,50),ee.triggerChange=function(){W("Change")},ee.debouncedChange=Q(ee.triggerChange,300),"range"===ee.config.mode&amp;&amp;ee.daysContainer&amp;&amp;f(ee.daysContainer,"mouseover",function(e){return F(e.target)}),f(window.document.body,"keydown",_),ee.config.static||f(ee._input,"keydown",_),ee.config.inline||ee.config.static||f(window,"resize",ee.debouncedResize),void 0!==window.ontouchstart&amp;&amp;f(window.document,"touchstart",A),f(window.document,"mousedown",m(A)),f(ee._input,"blur",A),!0===ee.config.clickOpens&amp;&amp;(f(ee._input,"focus",ee.open),f(ee._input,"mousedown",m(ee.open))),ee.config.noCalendar||(ee.monthNav.addEventListener("wheel",function(e){return e.preventDefault()}),f(ee.monthNav,"wheel",Q(U,10)),f(ee.monthNav,"mousedown",m(G)),f(ee.monthNav,["keyup","increment"],u),f(ee.daysContainer,"mousedown",m(H)),ee.config.animate&amp;&amp;(f(ee.daysContainer,["webkitAnimationEnd","animationend"],p),f(ee.monthNav,["webkitAnimationEnd","animationend"],D))),ee.config.enableTime){f(ee.timeContainer,["wheel","input","increment"],l),f(ee.timeContainer,"mousedown",m(b)),f(ee.timeContainer,["wheel","increment"],ee.debouncedChange),f(ee.timeContainer,"input",ee.triggerChange),f([ee.hourElement,ee.minuteElement],"focus",function(e){return e.target.select()}),void 0!==ee.secondElement&amp;&amp;f(ee.secondElement,"focus",function(){return ee.secondElement.select()}),void 0!==ee.amPM&amp;&amp;f(ee.amPM,"mousedown",m(function(e){l(e),ee.triggerChange(e)}))}}function h(){for(var e=ee._animationLoop.length;e--;)ee._animationLoop[e](),ee._animationLoop.splice(e,1)}function p(e){if(ee.daysContainer.childNodes.length&gt;1)switch(e.animationName){case"fpSlideLeft":ee.daysContainer.lastChild.classList.remove("slideLeftNew"),ee.daysContainer.removeChild(ee.daysContainer.firstChild),ee.days=ee.daysContainer.firstChild,h();break;case"fpSlideRight":ee.daysContainer.firstChild.classList.remove("slideRightNew"),ee.daysContainer.removeChild(ee.daysContainer.lastChild),ee.days=ee.daysContainer.firstChild,h()}}function D(e){switch(e.animationName){case"fpSlideLeftNew":case"fpSlideRightNew":ee.navigationCurrentMonth.classList.remove("slideLeftNew"),ee.navigationCurrentMonth.classList.remove("slideRightNew");for(var t=ee.navigationCurrentMonth;t.nextSibling&amp;&amp;/curr/.test(t.nextSibling.className);)ee.monthNav.removeChild(t.nextSibling);for(;t.previousSibling&amp;&amp;/curr/.test(t.previousSibling.className);)ee.monthNav.removeChild(t.previousSibling);ee.oldCurMonth=null}}function v(e){e=e?ee.parseDate(e):ee.latestSelectedDateObj||(ee.config.minDate&gt;ee.now?ee.config.minDate:ee.config.maxDate&amp;&amp;ee.config.maxDate&lt;ee.now?ee.config.maxDate:ee.now);try{ee.currentYear=e.getFullYear(),ee.currentMonth=e.getMonth()}catch(t){console.error(t.stack),console.warn("Invalid date supplied: "+e)}ee.redraw()}function b(e){~e.target.className.indexOf("arrow")&amp;&amp;M(e,e.target.classList.contains("arrowUp")?1:-1)}function M(e,t,n){var a=n||e.target.parentNode.childNodes[0],i=z("increment");i.delta=t,a.dispatchEvent(i)}function C(e){var t=$("div","numInputWrapper"),n=$("input","numInput "+e),a=$("span","arrowUp"),i=$("span","arrowDown");return n.type="text",n.pattern="\\d*",t.appendChild(n),t.appendChild(a),t.appendChild(i),t}function w(){var e=window.document.createDocumentFragment();ee.calendarContainer=$("div","flatpickr-calendar"),ee.calendarContainer.tabIndex=-1,ee.config.noCalendar||(e.appendChild(function(){var e=window.document.createDocumentFragment();ee.monthNav=$("div","flatpickr-month"),ee.prevMonthNav=$("span","flatpickr-prev-month"),ee.prevMonthNav.innerHTML=ee.config.prevArrow,ee.currentMonthElement=$("span","cur-month"),ee.currentMonthElement.title=ee.l10n.scrollTitle;var t=C("cur-year");return ee.currentYearElement=t.childNodes[0],ee.currentYearElement.title=ee.l10n.scrollTitle,ee.config.minDate&amp;&amp;(ee.currentYearElement.min=ee.config.minDate.getFullYear()),ee.config.maxDate&amp;&amp;(ee.currentYearElement.max=ee.config.maxDate.getFullYear(),ee.currentYearElement.disabled=ee.config.minDate&amp;&amp;ee.config.minDate.getFullYear()===ee.config.maxDate.getFullYear()),ee.nextMonthNav=$("span","flatpickr-next-month"),ee.nextMonthNav.innerHTML=ee.config.nextArrow,ee.navigationCurrentMonth=$("span","flatpickr-current-month"),ee.navigationCurrentMonth.appendChild(ee.currentMonthElement),ee.navigationCurrentMonth.appendChild(t),e.appendChild(ee.prevMonthNav),e.appendChild(ee.navigationCurrentMonth),e.appendChild(ee.nextMonthNav),ee.monthNav.appendChild(e),Object.defineProperty(ee,"_hidePrevMonthArrow",{get:function(){return this.__hidePrevMonthArrow},set:function(e){this.__hidePrevMonthArrow!==e&amp;&amp;(ee.prevMonthNav.style.display=e?"none":"block"),this.__hidePrevMonthArrow=e}}),Object.defineProperty(ee,"_hideNextMonthArrow",{get:function(){return this.__hideNextMonthArrow},set:function(e){this.__hideNextMonthArrow!==e&amp;&amp;(ee.nextMonthNav.style.display=e?"none":"block"),this.__hideNextMonthArrow=e}}),B(),ee.monthNav}()),ee.innerContainer=$("div","flatpickr-innerContainer"),ee.config.weekNumbers&amp;&amp;ee.innerContainer.appendChild((ee.calendarContainer.classList.add("hasWeeks"),ee.weekWrapper=$("div","flatpickr-weekwrapper"),ee.weekWrapper.appendChild($("span","flatpickr-weekday",ee.l10n.weekAbbreviation)),ee.weekNumbers=$("div","flatpickr-weeks"),ee.weekWrapper.appendChild(ee.weekNumbers),ee.weekWrapper)),ee.rContainer=$("div","flatpickr-rContainer"),ee.rContainer.appendChild(E()),ee.daysContainer||(ee.daysContainer=$("div","flatpickr-days"),ee.daysContainer.tabIndex=-1),S(),ee.rContainer.appendChild(ee.daysContainer),ee.innerContainer.appendChild(ee.rContainer),e.appendChild(ee.innerContainer)),ee.config.enableTime&amp;&amp;e.appendChild(function(){ee.calendarContainer.classList.add("hasTime"),ee.config.noCalendar&amp;&amp;ee.calendarContainer.classList.add("noCalendar"),ee.timeContainer=$("div","flatpickr-time"),ee.timeContainer.tabIndex=-1;var e=$("span","flatpickr-time-separator",":"),t=C("flatpickr-hour");ee.hourElement=t.childNodes[0];var n=C("flatpickr-minute");if(ee.minuteElement=n.childNodes[0],ee.hourElement.tabIndex=ee.minuteElement.tabIndex=-1,ee.hourElement.value=ee.pad(ee.latestSelectedDateObj?ee.latestSelectedDateObj.getHours():ee.config.defaultHour),ee.minuteElement.value=ee.pad(ee.latestSelectedDateObj?ee.latestSelectedDateObj.getMinutes():ee.config.defaultMinute),ee.hourElement.step=ee.config.hourIncrement,ee.minuteElement.step=ee.config.minuteIncrement,ee.hourElement.min=ee.config.time_24hr?0:1,ee.hourElement.max=ee.config.time_24hr?23:12,ee.minuteElement.min=0,ee.minuteElement.max=59,ee.hourElement.title=ee.minuteElement.title=ee.l10n.scrollTitle,ee.timeContainer.appendChild(t),ee.timeContainer.appendChild(e),ee.timeContainer.appendChild(n),ee.config.time_24hr&amp;&amp;ee.timeContainer.classList.add("time24hr"),ee.config.enableSeconds){ee.timeContainer.classList.add("hasSeconds");var a=C("flatpickr-second");ee.secondElement=a.childNodes[0],ee.secondElement.value=ee.latestSelectedDateObj?ee.pad(ee.latestSelectedDateObj.getSeconds()):"00",ee.secondElement.step=ee.minuteElement.step,ee.secondElement.min=ee.minuteElement.min,ee.secondElement.max=ee.minuteElement.max,ee.timeContainer.appendChild($("span","flatpickr-time-separator",":")),ee.timeContainer.appendChild(a)}return ee.config.time_24hr||(ee.amPM=$("span","flatpickr-am-pm",["AM","PM"][ee.hourElement.value&gt;11|0]),ee.amPM.title=ee.l10n.toggleTitle,ee.amPM.tabIndex=-1,ee.timeContainer.appendChild(ee.amPM)),ee.timeContainer}()),Z(ee.calendarContainer,"rangeMode","range"===ee.config.mode),Z(ee.calendarContainer,"animate",ee.config.animate),ee.calendarContainer.appendChild(e);var t=ee.config.appendTo&amp;&amp;ee.config.appendTo.nodeType;if(ee.config.inline||ee.config.static){if(ee.calendarContainer.classList.add(ee.config.inline?"inline":"static"),ee.config.inline&amp;&amp;!t)return ee.element.parentNode.insertBefore(ee.calendarContainer,ee._input.nextSibling);if(ee.config.static){var n=$("div","flatpickr-wrapper");return ee.element.parentNode.insertBefore(n,ee.element),n.appendChild(ee.element),ee.altInput&amp;&amp;n.appendChild(ee.altInput),void n.appendChild(ee.calendarContainer)}}(t?ee.config.appendTo:window.document.body).appendChild(ee.calendarContainer)}function y(e,t,n,a){var i=O(t,!0),r=$("span","flatpickr-day "+e,t.getDate());return r.dateObj=t,r.$i=a,r.setAttribute("aria-label",ee.formatDate(t,ee.config.ariaDateFormat)),0===X(t,ee.now)&amp;&amp;(ee.todayDateElem=r,r.classList.add("today")),i?(r.tabIndex=-1,K(t)&amp;&amp;(r.classList.add("selected"),ee.selectedDateElem=r,"range"===ee.config.mode&amp;&amp;(Z(r,"startRange",0===X(t,ee.selectedDates[0])),Z(r,"endRange",0===X(t,ee.selectedDates[1]))))):(r.classList.add("disabled"),ee.selectedDates[0]&amp;&amp;t&gt;ee.minRangeDate&amp;&amp;t&lt;ee.selectedDates[0]?ee.minRangeDate=t:ee.selectedDates[0]&amp;&amp;t&lt;ee.maxRangeDate&amp;&amp;t&gt;ee.selectedDates[0]&amp;&amp;(ee.maxRangeDate=t)),"range"===ee.config.mode&amp;&amp;(function(e){return!("range"!==ee.config.mode||ee.selectedDates.length&lt;2)&amp;&amp;X(e,ee.selectedDates[0])&gt;=0&amp;&amp;X(e,ee.selectedDates[1])&lt;=0}(t)&amp;&amp;!K(t)&amp;&amp;r.classList.add("inRange"),1===ee.selectedDates.length&amp;&amp;(t&lt;ee.minRangeDate||t&gt;ee.maxRangeDate)&amp;&amp;r.classList.add("notAllowed")),ee.config.weekNumbers&amp;&amp;"prevMonthDay"!==e&amp;&amp;n%7==1&amp;&amp;ee.weekNumbers.insertAdjacentHTML("beforeend","&lt;span class='disabled flatpickr-day'&gt;"+ee.config.getWeek(t)+"&lt;/span&gt;"),W("DayCreate",r),r}function k(e,t){var n=e+t||0,a=void 0!==e?ee.days.childNodes[n]:ee.selectedDateElem||ee.todayDateElem||ee.days.childNodes[0],i=function(){(a=a||ee.days.childNodes[n]).focus(),"range"===ee.config.mode&amp;&amp;F(a)};if(void 0===a&amp;&amp;0!==t)return t&gt;0?(ee.changeMonth(1),n%=42):t&lt;0&amp;&amp;(ee.changeMonth(-1),n+=42),x(i);i()}function x(e){if(!0===ee.config.animate)return ee._animationLoop.push(e);e()}function S(e){var t=(new Date(ee.currentYear,ee.currentMonth,1).getDay()-ee.l10n.firstDayOfWeek+7)%7,n="range"===ee.config.mode;ee.prevMonthDays=ee.utils.getDaysinMonth((ee.currentMonth-1+12)%12),ee.selectedDateElem=void 0,ee.todayDateElem=void 0;var a=ee.utils.getDaysinMonth(),i=window.document.createDocumentFragment(),r=ee.prevMonthDays+1-t,o=0;for(ee.config.weekNumbers&amp;&amp;ee.weekNumbers.firstChild&amp;&amp;(ee.weekNumbers.textContent=""),n&amp;&amp;(ee.minRangeDate=new Date(ee.currentYear,ee.currentMonth-1,r),ee.maxRangeDate=new Date(ee.currentYear,ee.currentMonth+1,(42-t)%a));r&lt;=ee.prevMonthDays;r++,o++)i.appendChild(y("prevMonthDay",new Date(ee.currentYear,ee.currentMonth-1,r),r,o));for(r=1;r&lt;=a;r++,o++)i.appendChild(y("",new Date(ee.currentYear,ee.currentMonth,r),r,o));for(var l=a+1;l&lt;=42-t;l++,o++)i.appendChild(y("nextMonthDay",new Date(ee.currentYear,ee.currentMonth+1,l%a),l,o));n&amp;&amp;1===ee.selectedDates.length&amp;&amp;i.childNodes[0]?(ee._hidePrevMonthArrow=ee._hidePrevMonthArrow||ee.minRangeDate&gt;i.childNodes[0].dateObj,ee._hideNextMonthArrow=ee._hideNextMonthArrow||ee.maxRangeDate&lt;new Date(ee.currentYear,ee.currentMonth+1,1)):B();var s=$("div","dayContainer");if(s.appendChild(i),ee.config.animate&amp;&amp;void 0!==e)for(;ee.daysContainer.childNodes.length&gt;1;)ee.daysContainer.removeChild(ee.daysContainer.firstChild);else!function(e){for(;e.firstChild;)e.removeChild(e.firstChild)}(ee.daysContainer);return e&gt;=0?ee.daysContainer.appendChild(s):ee.daysContainer.insertBefore(s,ee.daysContainer.firstChild),ee.days=ee.daysContainer.firstChild,ee.daysContainer}function E(){ee.weekdayContainer||(ee.weekdayContainer=$("div","flatpickr-weekdays"));var e=ee.l10n.firstDayOfWeek,t=ee.l10n.weekdays.shorthand.slice();return e&gt;0&amp;&amp;e&lt;t.length&amp;&amp;(t=[].concat(t.splice(e,t.length),t.splice(0,e))),ee.weekdayContainer.innerHTML="\n\t\t&lt;span class=flatpickr-weekday&gt;\n\t\t\t"+t.join("&lt;/span&gt;&lt;span class=flatpickr-weekday&gt;")+"\n\t\t&lt;/span&gt;\n\t\t",ee.weekdayContainer}function N(e,t,n){var a=(t=void 0===t||t)?e:e-ee.currentMonth,i=!ee.config.animate||!1===n;if(!(a&lt;0&amp;&amp;ee._hidePrevMonthArrow||a&gt;0&amp;&amp;ee._hideNextMonthArrow)){if(ee.currentMonth+=a,(ee.currentMonth&lt;0||ee.currentMonth&gt;11)&amp;&amp;(ee.currentYear+=ee.currentMonth&gt;11?1:-1,ee.currentMonth=(ee.currentMonth+12)%12,W("YearChange")),S(i?void 0:a),i)return W("MonthChange"),B();var r=ee.navigationCurrentMonth;if(a&lt;0)for(;r.nextSibling&amp;&amp;/curr/.test(r.nextSibling.className);)ee.monthNav.removeChild(r.nextSibling);else if(a&gt;0)for(;r.previousSibling&amp;&amp;/curr/.test(r.previousSibling.className);)ee.monthNav.removeChild(r.previousSibling);if(ee.oldCurMonth=ee.navigationCurrentMonth,ee.navigationCurrentMonth=ee.monthNav.insertBefore(ee.oldCurMonth.cloneNode(!0),a&gt;0?ee.oldCurMonth.nextSibling:ee.oldCurMonth),a&gt;0?(ee.daysContainer.firstChild.classList.add("slideLeft"),ee.daysContainer.lastChild.classList.add("slideLeftNew"),ee.oldCurMonth.classList.add("slideLeft"),ee.navigationCurrentMonth.classList.add("slideLeftNew")):a&lt;0&amp;&amp;(ee.daysContainer.firstChild.classList.add("slideRightNew"),ee.daysContainer.lastChild.classList.add("slideRight"),ee.oldCurMonth.classList.add("slideRight"),ee.navigationCurrentMonth.classList.add("slideRightNew")),ee.currentMonthElement=ee.navigationCurrentMonth.firstChild,ee.currentYearElement=ee.navigationCurrentMonth.lastChild.childNodes[0],B(),ee.oldCurMonth.firstChild.textContent=ee.utils.monthToStr(ee.currentMonth-a),W("MonthChange"),document.activeElement&amp;&amp;document.activeElement.$i){var o=document.activeElement.$i;x(function(){k(o,0)})}}}function T(e){return!(!ee.config.appendTo||!ee.config.appendTo.contains(e))||ee.calendarContainer.contains(e)}function A(e){if(ee.isOpen&amp;&amp;!ee.config.inline){var t=T(e.target),n=e.target===ee.input||e.target===ee.altInput||ee.element.contains(e.target)||e.path&amp;&amp;e.path.indexOf&amp;&amp;(~e.path.indexOf(ee.input)||~e.path.indexOf(ee.altInput));("blur"===e.type?n&amp;&amp;e.relatedTarget&amp;&amp;!T(e.relatedTarget):!n&amp;&amp;!t)&amp;&amp;-1===ee.config.ignoredFocusElements.indexOf(e.target)&amp;&amp;(ee.close(),"range"===ee.config.mode&amp;&amp;1===ee.selectedDates.length&amp;&amp;(ee.clear(!1),ee.redraw()))}}function I(e){if(!(!e||ee.currentYearElement.min&amp;&amp;e&lt;ee.currentYearElement.min||ee.currentYearElement.max&amp;&amp;e&gt;ee.currentYearElement.max)){var t=parseInt(e,10),n=ee.currentYear!==t;ee.currentYear=t||ee.currentYear,ee.config.maxDate&amp;&amp;ee.currentYear===ee.config.maxDate.getFullYear()?ee.currentMonth=Math.min(ee.config.maxDate.getMonth(),ee.currentMonth):ee.config.minDate&amp;&amp;ee.currentYear===ee.config.minDate.getFullYear()&amp;&amp;(ee.currentMonth=Math.max(ee.config.minDate.getMonth(),ee.currentMonth)),n&amp;&amp;(ee.redraw(),W("YearChange"))}}function O(e,t){if(ee.config.minDate&amp;&amp;X(e,ee.config.minDate,void 0!==t?t:!ee.minDateHasTime)&lt;0||ee.config.maxDate&amp;&amp;X(e,ee.config.maxDate,void 0!==t?t:!ee.maxDateHasTime)&gt;0)return!1;if(!ee.config.enable.length&amp;&amp;!ee.config.disable.length)return!0;for(var n,a=ee.parseDate(e,null,!0),i=ee.config.enable.length&gt;0,o=i?ee.config.enable:ee.config.disable,l=0;l&lt;o.length;l++){if((n=o[l])instanceof Function&amp;&amp;n(a))return i;if(n instanceof Date&amp;&amp;n.getTime()===a.getTime())return i;if("string"==typeof n&amp;&amp;ee.parseDate(n,null,!0).getTime()===a.getTime())return i;if("object"===(void 0===n?"undefined":r(n))&amp;&amp;n.from&amp;&amp;n.to&amp;&amp;a&gt;=n.from&amp;&amp;a&lt;=n.to)return i}return!i}function _(e){var t=e.target===ee._input,n=T(e.target),a=ee.config.allowInput,i=ee.isOpen&amp;&amp;(!a||!t),r=ee.config.inline&amp;&amp;t&amp;&amp;!a;if("Enter"===e.key&amp;&amp;a&amp;&amp;t)return ee.setDate(ee._input.value,!0,e.target===ee.altInput?ee.config.altFormat:ee.config.dateFormat),e.target.blur();if(n||i||r){var o=ee.timeContainer&amp;&amp;ee.timeContainer.contains(e.target);switch(e.key){case"Enter":o?V():H(e);break;case"Escape":e.preventDefault(),ee.close();break;case"ArrowLeft":case"ArrowRight":if(!o)if(e.preventDefault(),ee.daysContainer){var c="ArrowRight"===e.key?1:-1;e.ctrlKey?N(c,!0):k(e.target.$i,c)}else ee.config.enableTime&amp;&amp;!o&amp;&amp;ee.hourElement.focus();break;case"ArrowUp":case"ArrowDown":e.preventDefault();var d="ArrowDown"===e.key?1:-1;ee.daysContainer?e.ctrlKey?(I(ee.currentYear-d),k(e.target.$i,0)):o||k(e.target.$i,7*d):ee.config.enableTime&amp;&amp;(o||ee.hourElement.focus(),l(e));break;case"Tab":e.target===ee.hourElement?(e.preventDefault(),ee.minuteElement.select()):e.target===ee.minuteElement&amp;&amp;(ee.secondElement||ee.amPM)?(e.preventDefault(),(ee.secondElement||ee.amPM).focus()):e.target===ee.secondElement&amp;&amp;(e.preventDefault(),ee.amPM.focus());break;case"a":e.target===ee.amPM&amp;&amp;(ee.amPM.textContent="AM",s(),V());break;case"p":e.target===ee.amPM&amp;&amp;(ee.amPM.textContent="PM",s(),V())}W("KeyDown",e)}}function F(e){if(1===ee.selectedDates.length&amp;&amp;e.classList.contains("flatpickr-day")){for(var t=e.dateObj,n=ee.parseDate(ee.selectedDates[0],null,!0),a=Math.min(t.getTime(),ee.selectedDates[0].getTime()),i=Math.max(t.getTime(),ee.selectedDates[0].getTime()),r=!1,o=a;o&lt;i;o+=ee.utils.duration.DAY)if(!O(new Date(o))){r=!0;break}for(var l=ee.days.childNodes[0].dateObj.getTime(),s=0;s&lt;42;s++,l+=ee.utils.duration.DAY)!function(o,l){var s=o&lt;ee.minRangeDate.getTime()||o&gt;ee.maxRangeDate.getTime(),c=ee.days.childNodes[l];if(s)return ee.days.childNodes[l].classList.add("notAllowed"),["inRange","startRange","endRange"].forEach(function(e){c.classList.remove(e)}),"continue";if(r&amp;&amp;!s)return"continue";["startRange","inRange","endRange","notAllowed"].forEach(function(e){c.classList.remove(e)});var d=Math.max(ee.minRangeDate.getTime(),a),u=Math.min(ee.maxRangeDate.getTime(),i);e.classList.add(t&lt;ee.selectedDates[0]?"startRange":"endRange"),n&lt;t&amp;&amp;o===n.getTime()?c.classList.add("startRange"):n&gt;t&amp;&amp;o===n.getTime()&amp;&amp;c.classList.add("endRange"),o&gt;=d&amp;&amp;o&lt;=u&amp;&amp;c.classList.add("inRange")}(l,s)}}function Y(){!ee.isOpen||ee.config.static||ee.config.inline||P()}function L(e){return function(t){var n=ee.config["_"+e+"Date"]=ee.parseDate(t),a=ee.config["_"+("min"===e?"max":"min")+"Date"],i=t&amp;&amp;n instanceof Date;i&amp;&amp;(ee[e+"DateHasTime"]=n.getHours()||n.getMinutes()||n.getSeconds()),ee.selectedDates&amp;&amp;(ee.selectedDates=ee.selectedDates.filter(function(e){return O(e)}),ee.selectedDates.length||"min"!==e||c(n),V()),ee.daysContainer&amp;&amp;(j(),i?ee.currentYearElement[e]=n.getFullYear():ee.currentYearElement.removeAttribute(e),ee.currentYearElement.disabled=a&amp;&amp;n&amp;&amp;a.getFullYear()===n.getFullYear())}}function P(){var e=arguments.length&gt;0&amp;&amp;void 0!==arguments[0]?arguments[0]:ee._positionElement;if(void 0!==ee.calendarContainer){var t=ee.calendarContainer.offsetHeight,n=ee.calendarContainer.offsetWidth,a=ee.config.position,i=e.getBoundingClientRect(),r=window.innerHeight-i.bottom,o="above"===a||"below"!==a&amp;&amp;r&lt;t&amp;&amp;i.top&gt;t,l=window.pageYOffset+i.top+(o?-t-2:e.offsetHeight+2);if(Z(ee.calendarContainer,"arrowTop",!o),Z(ee.calendarContainer,"arrowBottom",o),!ee.config.inline){var s=window.pageXOffset+i.left,c=window.document.body.offsetWidth-i.right,d=s+n&gt;window.document.body.offsetWidth;Z(ee.calendarContainer,"rightMost",d),ee.config.static||(ee.calendarContainer.style.top=l+"px",d?(ee.calendarContainer.style.left="auto",ee.calendarContainer.style.right=c+"px"):(ee.calendarContainer.style.left=s+"px",ee.calendarContainer.style.right="auto"))}}}function j(){ee.config.noCalendar||ee.isMobile||(E(),B(),S())}function H(e){if(e.preventDefault(),e.stopPropagation(),e.target.classList.contains("flatpickr-day")&amp;&amp;!e.target.classList.contains("disabled")&amp;&amp;!e.target.classList.contains("notAllowed")){var t=ee.latestSelectedDateObj=new Date(e.target.dateObj.getTime()),n=t.getMonth()!==ee.currentMonth&amp;&amp;"range"!==ee.config.mode;if(ee.selectedDateElem=e.target,"single"===ee.config.mode)ee.selectedDates=[t];else if("multiple"===ee.config.mode){var a=K(t);a?ee.selectedDates.splice(a,1):ee.selectedDates.push(t)}else"range"===ee.config.mode&amp;&amp;(2===ee.selectedDates.length&amp;&amp;ee.clear(),ee.selectedDates.push(t),0!==X(t,ee.selectedDates[0],!0)&amp;&amp;ee.selectedDates.sort(function(e,t){return e.getTime()-t.getTime()}));if(s(),n){var i=ee.currentYear!==t.getFullYear();ee.currentYear=t.getFullYear(),ee.currentMonth=t.getMonth(),i&amp;&amp;W("YearChange"),W("MonthChange")}if(S(),ee.minDateHasTime&amp;&amp;ee.config.enableTime&amp;&amp;0===X(t,ee.config.minDate)&amp;&amp;c(ee.config.minDate),V(),ee.config.enableTime&amp;&amp;setTimeout(function(){return ee.showTimeInput=!0},50),"range"===ee.config.mode&amp;&amp;(1===ee.selectedDates.length?(F(e.target),ee._hidePrevMonthArrow=ee._hidePrevMonthArrow||ee.minRangeDate&gt;ee.days.childNodes[0].dateObj,ee._hideNextMonthArrow=ee._hideNextMonthArrow||ee.maxRangeDate&lt;new Date(ee.currentYear,ee.currentMonth+1,1)):B()),W("Change"),n?x(function(){return ee.selectedDateElem.focus()}):k(e.target.$i,0),ee.config.enableTime&amp;&amp;setTimeout(function(){return ee.hourElement.select()},451),ee.config.closeOnSelect){var r="single"===ee.config.mode&amp;&amp;!ee.config.enableTime,o="range"===ee.config.mode&amp;&amp;2===ee.selectedDates.length&amp;&amp;!ee.config.enableTime;(r||o)&amp;&amp;ee.close()}}}function R(e,t){if(e instanceof Array)ee.selectedDates=e.map(function(e){return ee.parseDate(e,t)});else if(e instanceof Date||!isNaN(e))ee.selectedDates=[ee.parseDate(e,t)];else if(e&amp;&amp;e.substring)switch(ee.config.mode){case"single":ee.selectedDates=[ee.parseDate(e,t)];break;case"multiple":ee.selectedDates=e.split("; ").map(function(e){return ee.parseDate(e,t)});break;case"range":ee.selectedDates=e.split(ee.l10n.rangeSeparator).map(function(e){return ee.parseDate(e,t)})}ee.selectedDates=ee.selectedDates.filter(function(e){return e instanceof Date&amp;&amp;O(e,!1)}),ee.selectedDates.sort(function(e,t){return e.getTime()-t.getTime()})}function J(e){for(var t=e.length;t--;)"string"==typeof e[t]||+e[t]?e[t]=ee.parseDate(e[t],null,!0):e[t]&amp;&amp;e[t].from&amp;&amp;e[t].to&amp;&amp;(e[t].from=ee.parseDate(e[t].from),e[t].to=ee.parseDate(e[t].to));return e.filter(function(e){return e})}function W(e,t){var n=ee.config["on"+e];if(void 0!==n&amp;&amp;n.length&gt;0)for(var a=0;n[a]&amp;&amp;a&lt;n.length;a++)n[a](ee.selectedDates,ee.input.value,ee,t);"Change"===e&amp;&amp;(ee.input.dispatchEvent(z("change")),ee.input.dispatchEvent(z("input")))}function z(e){return ee._supportsEvents?new Event(e,{bubbles:!0}):(ee._[e+"Event"]=document.createEvent("Event"),ee._[e+"Event"].initEvent(e,!0,!0),ee._[e+"Event"])}function K(e){for(var t=0;t&lt;ee.selectedDates.length;t++)if(0===X(ee.selectedDates[t],e))return""+t;return!1}function B(){ee.config.noCalendar||ee.isMobile||!ee.monthNav||(ee.currentMonthElement.textContent=ee.utils.monthToStr(ee.currentMonth)+" ",ee.currentYearElement.value=ee.currentYear,ee._hidePrevMonthArrow=ee.config.minDate&amp;&amp;(ee.currentYear===ee.config.minDate.getFullYear()?ee.currentMonth&lt;=ee.config.minDate.getMonth():ee.currentYear&lt;ee.config.minDate.getFullYear()),ee._hideNextMonthArrow=ee.config.maxDate&amp;&amp;(ee.currentYear===ee.config.maxDate.getFullYear()?ee.currentMonth+1&gt;ee.config.maxDate.getMonth():ee.currentYear&gt;ee.config.maxDate.getFullYear()))}function V(e){if(!ee.selectedDates.length)return ee.clear(e);ee.isMobile&amp;&amp;(ee.mobileInput.value=ee.selectedDates.length?ee.formatDate(ee.latestSelectedDateObj,ee.mobileFormatStr):"");var t="range"!==ee.config.mode?"; ":ee.l10n.rangeSeparator;ee.input.value=ee.selectedDates.map(function(e){return ee.formatDate(e,ee.config.dateFormat)}).join(t),ee.config.altInput&amp;&amp;(ee.altInput.value=ee.selectedDates.map(function(e){return ee.formatDate(e,ee.config.altFormat)}).join(t)),!1!==e&amp;&amp;W("ValueUpdate")}function U(e){e.preventDefault();var t=ee.currentYearElement.parentNode.contains(e.target);if(e.target===ee.currentMonthElement||t){var n=function(e){return Math.max(-1,Math.min(1,e.wheelDelta||-e.deltaY))}(e);t?(I(ee.currentYear+n),e.target.value=ee.currentYear):ee.changeMonth(n,!0,!1)}}function G(e){var t=ee.prevMonthNav.contains(e.target),n=ee.nextMonthNav.contains(e.target);t||n?N(t?-1:1):e.target===ee.currentYearElement?(e.preventDefault(),ee.currentYearElement.select()):"arrowUp"===e.target.className?ee.changeYear(ee.currentYear+1):"arrowDown"===e.target.className&amp;&amp;ee.changeYear(ee.currentYear-1)}function $(e,t,n){var a=window.document.createElement(e);return t=t||"",n=n||"",a.className=t,void 0!==n&amp;&amp;(a.textContent=n),a}function q(e){return e instanceof Array?e:[e]}function Z(e,t,n){if(n)return e.classList.add(t);e.classList.remove(t)}function Q(e,t,n){var a=void 0;return function(){var i=this,r=arguments;clearTimeout(a),a=setTimeout(function(){a=null,n||e.apply(i,r)},t),n&amp;&amp;!a&amp;&amp;e.apply(i,r)}}function X(e,t,n){return e instanceof Date&amp;&amp;t instanceof Date&amp;&amp;(!1!==n?new Date(e.getTime()).setHours(0,0,0,0)-new Date(t.getTime()).setHours(0,0,0,0):e.getTime()-t.getTime())}var ee=this;return ee._={},ee._.afterDayAnim=x,ee._bind=f,ee._compareDates=X,ee._setHoursFromDate=c,ee.changeMonth=N,ee.changeYear=I,ee.clear=function(e){ee.input.value="",ee.altInput&amp;&amp;(ee.altInput.value=""),ee.mobileInput&amp;&amp;(ee.mobileInput.value=""),ee.selectedDates=[],ee.latestSelectedDateObj=void 0,ee.showTimeInput=!1,ee.redraw(),!1!==e&amp;&amp;W("Change")},ee.close=function(){ee.isOpen=!1,ee.isMobile||(ee.calendarContainer.classList.remove("open"),ee._input.classList.remove("active")),W("Close")},ee._createElement=$,ee.destroy=function(){void 0!==ee.config&amp;&amp;W("Destroy");for(var e=ee._handlers.length;e--;){var t=ee._handlers[e];t.element.removeEventListener(t.event,t.handler)}ee._handlers=[],ee.mobileInput?(ee.mobileInput.parentNode&amp;&amp;ee.mobileInput.parentNode.removeChild(ee.mobileInput),ee.mobileInput=null):ee.calendarContainer&amp;&amp;ee.calendarContainer.parentNode&amp;&amp;ee.calendarContainer.parentNode.removeChild(ee.calendarContainer),ee.altInput&amp;&amp;(ee.input.type="text",ee.altInput.parentNode&amp;&amp;ee.altInput.parentNode.removeChild(ee.altInput),delete ee.altInput),ee.input&amp;&amp;(ee.input.type=ee.input._type,ee.input.classList.remove("flatpickr-input"),ee.input.removeAttribute("readonly"),ee.input.value=""),["_showTimeInput","latestSelectedDateObj","_hideNextMonthArrow","_hidePrevMonthArrow","__hideNextMonthArrow","__hidePrevMonthArrow","isMobile","isOpen","selectedDateElem","minDateHasTime","maxDateHasTime","days","daysContainer","_input","_positionElement","innerContainer","rContainer","monthNav","todayDateElem","calendarContainer","weekdayContainer","prevMonthNav","nextMonthNav","currentMonthElement","currentYearElement","navigationCurrentMonth","selectedDateElem","config"].forEach(function(e){return delete ee[e]})},ee.isEnabled=O,ee.jumpToDate=v,ee.open=function(e,t){if(ee.isMobile)return e&amp;&amp;(e.preventDefault(),e.target.blur()),setTimeout(function(){ee.mobileInput.click()},0),void W("Open");ee.isOpen||ee._input.disabled||ee.config.inline||(ee.isOpen=!0,ee.calendarContainer.classList.add("open"),P(t),ee._input.classList.add("active"),W("Open"))},ee.redraw=j,ee.set=function(e,t){ee.config[e]=t,ee.redraw(),v()},ee.setDate=function(e,t,n){if(0!==e&amp;&amp;!e)return ee.clear(t);R(e,n),ee.showTimeInput=ee.selectedDates.length&gt;0,ee.latestSelectedDateObj=ee.selectedDates[0],ee.redraw(),v(),c(),V(t),t&amp;&amp;W("Change")},ee.toggle=function(){if(ee.isOpen)return ee.close();ee.open()},ee.element=ee.input=e,ee.instanceConfig=n||{},ee.parseDate=t.prototype.parseDate.bind(ee),ee.formatDate=t.prototype.formatDate.bind(ee),ee.formats=Object.create(t.prototype.formats),["D","F","J","M","W","l"].forEach(function(e){ee.formats[e]=t.prototype.formats[e].bind(ee)}),ee.revFormat.F=t.prototype.revFormat.F.bind(ee),ee.revFormat.M=t.prototype.revFormat.M.bind(ee),function(){var e=["wrap","weekNumbers","allowInput","clickOpens","time_24hr","enableTime","noCalendar","altInput","shorthandCurrentMonth","inline","static","enableSeconds","disableMobile"],t=["onChange","onClose","onDayCreate","onDestroy","onKeyDown","onMonthChange","onOpen","onParseConfig","onReady","onValueUpdate","onYearChange"];ee.config=Object.create(a.defaultConfig);var n=i({},ee.instanceConfig,JSON.parse(JSON.stringify(ee.element.dataset||{})));ee.config.parseDate=n.parseDate,ee.config.formatDate=n.formatDate,Object.defineProperty(ee.config,"enable",{get:function(){return ee.config._enable||[]},set:function(e){return ee.config._enable=J(e)}}),Object.defineProperty(ee.config,"disable",{get:function(){return ee.config._disable||[]},set:function(e){return ee.config._disable=J(e)}}),i(ee.config,n),!n.dateFormat&amp;&amp;n.enableTime&amp;&amp;(ee.config.dateFormat=ee.config.noCalendar?"H:i"+(ee.config.enableSeconds?":S":""):a.defaultConfig.dateFormat+" H:i"+(ee.config.enableSeconds?":S":"")),n.altInput&amp;&amp;n.enableTime&amp;&amp;!n.altFormat&amp;&amp;(ee.config.altFormat=ee.config.noCalendar?"h:i"+(ee.config.enableSeconds?":S K":" K"):a.defaultConfig.altFormat+" h:i"+(ee.config.enableSeconds?":S":"")+" K"),Object.defineProperty(ee.config,"minDate",{get:function(){return this._minDate},set:L("min")}),Object.defineProperty(ee.config,"maxDate",{get:function(){return this._maxDate},set:L("max")}),ee.config.minDate=n.minDate,ee.config.maxDate=n.maxDate;for(var r=0;r&lt;e.length;r++)ee.config[e[r]]=!0===ee.config[e[r]]||"true"===ee.config[e[r]];for(var l=t.length;l--;)void 0!==ee.config[t[l]]&amp;&amp;(ee.config[t[l]]=q(ee.config[t[l]]||[]).map(o));for(var s=0;s&lt;ee.config.plugins.length;s++){var c=ee.config.plugins[s](ee)||{};for(var d in c)ee.config[d]instanceof Array||~t.indexOf(d)?ee.config[d]=q(c[d]).map(o).concat(ee.config[d]):void 0===n[d]&amp;&amp;(ee.config[d]=c[d])}W("ParseConfig")}(),"object"!==r(ee.config.locale)&amp;&amp;void 0===a.l10ns[ee.config.locale]&amp;&amp;console.warn("flatpickr: invalid locale "+ee.config.locale),ee.l10n=i(Object.create(a.l10ns.default),"object"===r(ee.config.locale)?ee.config.locale:"default"!==ee.config.locale&amp;&amp;a.l10ns[ee.config.locale]||{}),function(){if(ee.input=ee.config.wrap?ee.element.querySelector("[data-input]"):ee.element,!ee.input)return console.warn("Error: invalid input element specified",ee.input);ee.input._type=ee.input.type,ee.input.type="text",ee.input.classList.add("flatpickr-input"),ee._input=ee.input,ee.config.altInput&amp;&amp;(ee.altInput=$(ee.input.nodeName,ee.input.className+" "+ee.config.altInputClass),ee._input=ee.altInput,ee.altInput.placeholder=ee.input.placeholder,ee.altInput.disabled=ee.input.disabled,ee.altInput.required=ee.input.required,ee.altInput.type="text",ee.input.type="hidden",!ee.config.static&amp;&amp;ee.input.parentNode&amp;&amp;ee.input.parentNode.insertBefore(ee.altInput,ee.input.nextSibling)),ee.config.allowInput||ee._input.setAttribute("readonly","readonly"),ee._positionElement=ee.config.positionElement||ee._input}(),function(){ee.selectedDates=[],ee.now=new Date;var e=ee.config.defaultDate||ee.input.value;e&amp;&amp;R(e,ee.config.dateFormat);var t=ee.selectedDates.length?ee.selectedDates[0]:ee.config.minDate&amp;&amp;ee.config.minDate.getTime()&gt;ee.now?ee.config.minDate:ee.config.maxDate&amp;&amp;ee.config.maxDate.getTime()&lt;ee.now?ee.config.maxDate:ee.now;ee.currentYear=t.getFullYear(),ee.currentMonth=t.getMonth(),ee.selectedDates.length&amp;&amp;(ee.latestSelectedDateObj=ee.selectedDates[0]),ee.minDateHasTime=ee.config.minDate&amp;&amp;(ee.config.minDate.getHours()||ee.config.minDate.getMinutes()||ee.config.minDate.getSeconds()),ee.maxDateHasTime=ee.config.maxDate&amp;&amp;(ee.config.maxDate.getHours()||ee.config.maxDate.getMinutes()||ee.config.maxDate.getSeconds()),Object.defineProperty(ee,"latestSelectedDateObj",{get:function(){return ee._selectedDateObj||ee.selectedDates[ee.selectedDates.length-1]},set:function(e){ee._selectedDateObj=e}}),ee.isMobile||Object.defineProperty(ee,"showTimeInput",{get:function(){return ee._showTimeInput},set:function(e){ee._showTimeInput=e,ee.calendarContainer&amp;&amp;Z(ee.calendarContainer,"showTimeInput",e),P()}})}(),ee.utils={duration:{DAY:864e5},getDaysinMonth:function(e,t){return e=void 0===e?ee.currentMonth:e,t=void 0===t?ee.currentYear:t,1===e&amp;&amp;(t%4==0&amp;&amp;t%100!=0||t%400==0)?29:ee.l10n.daysInMonth[e]},monthToStr:function(e,t){return t=void 0===t?ee.config.shorthandCurrentMonth:t,ee.l10n.months[(t?"short":"long")+"hand"][e]}},ee.isOpen=!1,ee.isMobile=!ee.config.disableMobile&amp;&amp;!ee.config.inline&amp;&amp;"single"===ee.config.mode&amp;&amp;!ee.config.disable.length&amp;&amp;!ee.config.enable.length&amp;&amp;!ee.config.weekNumbers&amp;&amp;/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),ee.isMobile||w(),g(),(ee.selectedDates.length||ee.config.noCalendar)&amp;&amp;(ee.config.enableTime&amp;&amp;c(ee.config.noCalendar?ee.latestSelectedDateObj||ee.config.minDate:null),V()),ee.showTimeInput=ee.selectedDates.length&gt;0||ee.config.noCalendar,ee.config.weekNumbers&amp;&amp;(ee.calendarContainer.style.width=ee.daysContainer.offsetWidth+ee.weekWrapper.offsetWidth+"px"),ee.isMobile||P(),W("Ready"),ee}function n(e,n){for(var a=Array.prototype.slice.call(e),i=[],r=0;r&lt;a.length;r++)try{if(null!==a[r].getAttribute("data-fp-omit"))continue;a[r]._flatpickr&amp;&amp;(a[r]._flatpickr.destroy(),a[r]._flatpickr=null),a[r]._flatpickr=new t(a[r],n||{}),i.push(a[r]._flatpickr)}catch(e){console.warn(e,e.stack)}return 1===i.length?i[0]:i}function a(e,t){return e instanceof NodeList?n(e,t):e instanceof HTMLElement?n([e],t):n(window.document.querySelectorAll(e),t)}var i=Object.assign||function(e){for(var t=1;t&lt;arguments.length;t++){var n=arguments[t];for(var a in n)Object.prototype.hasOwnProperty.call(n,a)&amp;&amp;(e[a]=n[a])}return e},r="function"==typeof Symbol&amp;&amp;"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&amp;&amp;"function"==typeof Symbol&amp;&amp;e.constructor===Symbol&amp;&amp;e!==Symbol.prototype?"symbol":typeof e};t.prototype={formats:{Z:function(e){return e.toISOString()},D:function(e){return this.l10n.weekdays.shorthand[this.formats.w(e)]},F:function(e){return this.utils.monthToStr(this.formats.n(e)-1,!1)},G:function(e){return t.prototype.pad(t.prototype.formats.h(e))},H:function(e){return t.prototype.pad(e.getHours())},J:function(e){return e.getDate()+this.l10n.ordinal(e.getDate())},K:function(e){return e.getHours()&gt;11?"PM":"AM"},M:function(e){return this.utils.monthToStr(e.getMonth(),!0)},S:function(e){return t.prototype.pad(e.getSeconds())},U:function(e){return e.getTime()/1e3},W:function(e){return this.config.getWeek(e)},Y:function(e){return e.getFullYear()},d:function(e){return t.prototype.pad(e.getDate())},h:function(e){return e.getHours()%12?e.getHours()%12:12},i:function(e){return t.prototype.pad(e.getMinutes())},j:function(e){return e.getDate()},l:function(e){return this.l10n.weekdays.longhand[e.getDay()]},m:function(e){return t.prototype.pad(e.getMonth()+1)},n:function(e){return e.getMonth()+1},s:function(e){return e.getSeconds()},w:function(e){return e.getDay()},y:function(e){return String(e.getFullYear()).substring(2)}},formatDate:function(e,t){var n=this;return void 0!==this.config&amp;&amp;void 0!==this.config.formatDate?this.config.formatDate(e,t):t.split("").map(function(t,a,i){return n.formats[t]&amp;&amp;"\\"!==i[a-1]?n.formats[t](e):"\\"!==t?t:""}).join("")},revFormat:{D:function(){},F:function(e,t){e.setMonth(this.l10n.months.longhand.indexOf(t))},G:function(e,t){e.setHours(parseFloat(t))},H:function(e,t){e.setHours(parseFloat(t))},J:function(e,t){e.setDate(parseFloat(t))},K:function(e,t){var n=e.getHours();12!==n&amp;&amp;e.setHours(n%12+12*/pm/i.test(t))},M:function(e,t){e.setMonth(this.l10n.months.shorthand.indexOf(t))},S:function(e,t){e.setSeconds(t)},U:function(e,t){return new Date(1e3*parseFloat(t))},W:function(e,t){return t=parseInt(t),new Date(e.getFullYear(),0,2+7*(t-1),0,0,0,0,0)},Y:function(e,t){e.setFullYear(t)},Z:function(e,t){return new Date(t)},d:function(e,t){e.setDate(parseFloat(t))},h:function(e,t){e.setHours(parseFloat(t))},i:function(e,t){e.setMinutes(parseFloat(t))},j:function(e,t){e.setDate(parseFloat(t))},l:function(){},m:function(e,t){e.setMonth(parseFloat(t)-1)},n:function(e,t){e.setMonth(parseFloat(t)-1)},s:function(e,t){e.setSeconds(parseFloat(t))},w:function(){},y:function(e,t){e.setFullYear(2e3+parseFloat(t))}},tokenRegex:{D:"(\\w+)",F:"(\\w+)",G:"(\\d\\d|\\d)",H:"(\\d\\d|\\d)",J:"(\\d\\d|\\d)\\w+",K:"(am|AM|Am|aM|pm|PM|Pm|pM)",M:"(\\w+)",S:"(\\d\\d|\\d)",U:"(.+)",W:"(\\d\\d|\\d)",Y:"(\\d{4})",Z:"(.+)",d:"(\\d\\d|\\d)",h:"(\\d\\d|\\d)",i:"(\\d\\d|\\d)",j:"(\\d\\d|\\d)",l:"(\\w+)",m:"(\\d\\d|\\d)",n:"(\\d\\d|\\d)",s:"(\\d\\d|\\d)",w:"(\\d\\d|\\d)",y:"(\\d{2})"},pad:function(e){return("0"+e).slice(-2)},parseDate:function(e,t,n){if(0!==e&amp;&amp;!e)return null;var i=e;if(e instanceof Date)e=new Date(e.getTime());else if(void 0!==e.toFixed)e=new Date(e);else{var r=t||(this.config||a.defaultConfig).dateFormat;if("today"===(e=String(e).trim()))e=new Date,n=!0;else if(/Z$/.test(e)||/GMT$/.test(e))e=new Date(e);else if(this.config&amp;&amp;this.config.parseDate)e=this.config.parseDate(e,r);else{for(var o=this.config&amp;&amp;this.config.noCalendar?new Date((new Date).setHours(0,0,0,0)):new Date((new Date).getFullYear(),0,1,0,0,0,0),l=void 0,s=0,c=0,d="";s&lt;r.length;s++){var u=r[s],f="\\"===u,m="\\"===r[s-1]||f;if(this.tokenRegex[u]&amp;&amp;!m){d+=this.tokenRegex[u];var g=new RegExp(d).exec(e);g&amp;&amp;(l=!0)&amp;&amp;(o=this.revFormat[u](o,g[++c])||o)}else f||(d+=".")}e=l?o:null}}return e instanceof Date?(!0===n&amp;&amp;e.setHours(0,0,0,0),e):(console.warn("flatpickr: invalid date "+i),console.info(this.element),null)}},"undefined"!=typeof HTMLElement&amp;&amp;(HTMLCollection.prototype.flatpickr=NodeList.prototype.flatpickr=function(e){return n(this,e)},HTMLElement.prototype.flatpickr=function(e){return n([this],e)}),a.defaultConfig=t.defaultConfig={mode:"single",position:"auto",animate:-1===window.navigator.userAgent.indexOf("MSIE"),wrap:!1,weekNumbers:!1,allowInput:!1,clickOpens:!0,closeOnSelect:!0,time_24hr:!1,enableTime:!1,noCalendar:!1,dateFormat:"Y-m-d",ariaDateFormat:"F j, Y",altInput:!1,altInputClass:"form-control input",altFormat:"F j, Y",defaultDate:null,minDate:null,maxDate:null,parseDate:null,formatDate:null,getWeek:function(e){var t=new Date(e.getTime()),n=new Date(t.getFullYear(),0,1);return Math.ceil(((t-n)/864e5+n.getDay()+1)/7)},enable:[],disable:[],shorthandCurrentMonth:!1,inline:!1,static:!1,appendTo:null,prevArrow:"&lt;svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'&gt;&lt;g&gt;&lt;/g&gt;&lt;path d='M5.207 8.471l7.146 7.147-0.707 0.707-7.853-7.854 7.854-7.853 0.707 0.707-7.147 7.146z' /&gt;&lt;/svg&gt;",nextArrow:"&lt;svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'&gt;&lt;g&gt;&lt;/g&gt;&lt;path d='M13.207 8.472l-7.854 7.854-0.707-0.707 7.146-7.146-7.146-7.148 0.707-0.707 7.854 7.854z' /&gt;&lt;/svg&gt;",enableSeconds:!1,hourIncrement:1,minuteIncrement:5,defaultHour:12,defaultMinute:0,disableMobile:!1,locale:"default",plugins:[],ignoredFocusElements:[],onClose:void 0,onChange:void 0,onDayCreate:void 0,onMonthChange:void 0,onOpen:void 0,onParseConfig:void 0,onReady:void 0,onValueUpdate:void 0,onYearChange:void 0,onKeyDown:void 0,onDestroy:void 0},a.l10ns={en:{weekdays:{shorthand:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],longhand:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},months:{shorthand:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],longhand:["January","February","March","April","May","June","July","August","September","October","November","December"]},daysInMonth:[31,28,31,30,31,30,31,31,30,31,30,31],firstDayOfWeek:0,ordinal:function(e){var t=e%100;if(t&gt;3&amp;&amp;t&lt;21)return"th";switch(t%10){case 1:return"st";case 2:return"nd";case 3:return"rd";default:return"th"}},rangeSeparator:" to ",weekAbbreviation:"Wk",scrollTitle:"Scroll to increment",toggleTitle:"Click to toggle"},de:{weekdays:{shorthand:["So","Mo","Di","Mi","Do","Fr","Sa"],longhand:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"]},months:{shorthand:["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],longhand:["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"]},daysInMonth:[31,28,31,30,31,30,31,31,30,31,30,31],firstDayOfWeek:0,weekAbbreviation:"KW",rangeSeparator:" bis ",scrollTitle:"Zum Ändern scrollen",toggleTitle:"Zum Umschalten klicken"},es:{weekdays:{shorthand:["Dom","Lun","Mar","Mié","Jue","Vie","Sáb"],longhand:["Domingo","Lunes","Martes","Miércoles","Jueves","Viernes","Sábado"]},months:{shorthand:["Ene","Feb","Mar","Abr","May","Jun","Jul","Ago","Sep","Oct","Nov","Dic"],longhand:["Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"]},daysInMonth:[31,28,31,30,31,30,31,31,30,31,30,31],firstDayOfWeek:0,ordinal:function(e){return"º"}},fr:{weekdays:{shorthand:["Dim","Lun","Mar","Mer","Jeu","Ven","Sam"],longhand:["Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi"]},months:{shorthand:["Janv","Févr","Mars","Avr","Mai","Juin","Juil","Août","Sept","Oct","Nov","Déc"],longhand:["Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Août","Septembre","Octobre","Novembre","Décembre"]},daysInMonth:[31,28,31,30,31,30,31,31,30,31,30,31],firstDayOfWeek:0,ordinal:function(e){return e&gt;1?"ème":"er"},weekAbbreviation:"Sem",rangeSeparator:" au ",scrollTitle:"Défiler pour augmenter la valeur",toggleTitle:"Cliquer pour basculer"},it:{weekdays:{shorthand:["Dom","Lun","Mar","Mer","Gio","Ven","Sab"],longhand:["Domenica","Lunedì","Martedì","Mercoledì","Giovedì","Venerdì","Sabato"]},months:{shorthand:["Gen","Feb","Mar","Apr","Mag","Giu","Lug","Ago","Set","Ott","Nov","Dic"],longhand:["Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre"]},daysInMonth:[31,28,31,30,31,30,31,31,30,31,30,31],firstDayOfWeek:0,ordinal:function(e){return"°"},weekAbbreviation:"Se",scrollTitle:"Scrolla per aumentare",toggleTitle:"Clicca per cambiare"},zh_cn:{weekdays:{shorthand:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],longhand:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"]},months:{shorthand:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],longhand:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"]},daysInMonth:[31,28,31,30,31,30,31,31,30,31,30,31],firstDayOfWeek:0,rangeSeparator:" 至 "},zh_tw:{weekdays:{shorthand:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],longhand:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"]},months:{shorthand:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],longhand:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"]},daysInMonth:[31,28,31,30,31,30,31,31,30,31,30,31],firstDayOfWeek:0,rangeSeparator:" 至 "},ja:{weekdays:{shorthand:["日","月","火","水","木","金","土"],longhand:["日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"]},months:{shorthand:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],longhand:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"]},daysInMonth:[31,28,31,30,31,30,31,31,30,31,30,31],firstDayOfWeek:0},pt:{weekdays:{shorthand:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],longhand:["Domingo","Segunda-feira","Terça-feira","Quarta-feira","Quinta-feira","Sexta-feira","Sábado"]},months:{shorthand:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],longhand:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"]},daysInMonth:[31,28,31,30,31,30,31,31,30,31,30,31],firstDayOfWeek:0,rangeSeparator:" até "},tr:{weekdays:{longhand:["Pazar","Pazartesi","Salı","Çarşamba","Perşembe","Cuma","Cumartesi"],shorthand:["Paz","Pzt","Sal","Çar","Per","Cum","Cmt"]},months:{longhand:["Ocak","Şubat","Mart","Nisan","Mayıs","Haziran","Temmuz","Ağustos","Eylül","Ekim","Kasım","Aralık"],shorthand:["Oca","Şub","Mar","Nis","May","Haz","Tem","Ağu","Eyl","Eki","Kas","Ara"]},today:"Bugün",clear:"Temizle",daysInMonth:[31,28,31,30,31,30,31,31,30,31,30,31]},ro:{weekdays:{shorthand:["Dum","Lun","Mar","Mie","Joi","Vin","Sâm"],longhand:["Duminică","Luni","Marți","Miercuri","Joi","Vineri","Sâmbătă"]},months:{shorthand:["Ian","Feb","Mar","Apr","Mai","Iun","Iul","Aug","Sep","Oct","Noi","Dec"],longhand:["Ianuarie","Februarie","Martie","Aprilie","Mai","Iunie","Iulie","August","Septembrie","Octombrie","Noiembrie","Decembrie"]},daysInMonth:[31,28,31,30,31,30,31,31,30,31,30,31]},ar:{weekdays:{shorthand:["أحد","اثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"],longhand:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"]},months:{shorthand:["1","2","3","4","5","6","7","8","9","10","11","12"],longhand:["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"]},firstDayOfWeek:6,rangeSeparator:" إلى ",weekAbbreviation:"Wk",scrollTitle:"قم بالتمرير للزيادة",toggleTitle:"اضغط للتبديل",amPM:["ص","م"],yearAriaLabel:"سنة",monthAriaLabel:"شهر",hourAriaLabel:"ساعة",minuteAriaLabel:"دقيقة",time_24hr:!1,daysInMonth:[31,28,31,30,31,30,31,31,30,31,30,31]}},a.l10ns.default=Object.create(a.l10ns.en),a.localize=function(e){return i(a.l10ns.default,e||{})},a.setDefaults=function(e){return i(a.defaultConfig,e||{})},void 0!==e&amp;&amp;(e.fn.flatpickr=function(e){return n(this,e)}),Date.prototype.fp_incr=function(e){return new Date(this.getFullYear(),this.getMonth(),this.getDate()+parseInt(e,10))},"undefined"!=typeof module&amp;&amp;(module.exports=a)});
define ("local_intelliboard/tracking",["jquery"],function(a){return{trackActivityLabelClicks:function trackActivityLabelClicks(b){a(".intelliboardLabelTracking").on("submit",function(c){if(!a(this).data("allowsubmit")){c.preventDefault();var d=a(this).parents("li.activity").attr("id").replace("module-",""),e=a(this);if(d){a.ajax(b,{data:{page:"module",param:d,time:1},complete:function complete(){e.attr("data-allowsubmit",1);e.submit()}})}}})}}});
define("paygw_paypal/gateways_modal",["exports","./repository","core/templates","core/truncate","core/modal_factory","core/modal_events","core/str"],(function(_exports,Repository,_templates,_truncate,_modal_factory,_modal_events,_str){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.process=void 0,Repository=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}
/**
   * This module is responsible for PayPal content in the gateways modal.
   *
   * @module     paygw_paypal/gateway_modal
   * @copyright  2020 Shamim Rezaie &lt;shamim@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */(Repository),_templates=_interopRequireDefault(_templates),_truncate=_interopRequireDefault(_truncate),_modal_factory=_interopRequireDefault(_modal_factory),_modal_events=_interopRequireDefault(_modal_events);const showModalWithPlaceholder=async()=&gt;{const modal=await _modal_factory.default.create({body:await _templates.default.render("paygw_paypal/paypal_button_placeholder",{})});return modal.show(),modal};_exports.process=(component,paymentArea,itemId,description)=&gt;Promise.all([showModalWithPlaceholder(),Repository.getConfigForJs(component,paymentArea,itemId)]).then((_ref=&gt;{let[modal,paypalConfig]=_ref;return modal.getRoot().on(_modal_events.default.hidden,(()=&gt;{modal.destroy()})),Promise.all([modal,paypalConfig,switchSdk(paypalConfig.clientid,paypalConfig.currency)])})).then((_ref2=&gt;{let[modal,paypalConfig]=_ref2;return modal.setBody(""),new Promise((resolve=&gt;{window.paypal.Buttons({createOrder:function(data,actions){return actions.order.create({purchase_units:[{amount:{currency_code:paypalConfig.currency_code,value:paypalConfig.cost},description:_truncate.default.truncate(description,{length:127,stripTags:!0})}],application_context:{shipping_preference:"NO_SHIPPING",brand_name:_truncate.default.truncate(paypalConfig.brandname,{length:127,stripTags:!0})}})},onApprove:function(data){modal.getRoot().on(_modal_events.default.outsideClick,(e=&gt;{e.preventDefault()})),modal.setBody((0,_str.get_string)("authorising","paygw_paypal")),Repository.markTransactionComplete(component,paymentArea,itemId,data.orderID).then((res=&gt;(modal.hide(),res))).then(resolve)}}).render(modal.getBody()[0])}))})).then((res=&gt;res.success?Promise.resolve(res.message):Promise.reject(res.message)));const switchSdk=(clientId,currency)=&gt;{const sdkUrl="https://www.paypal.com/sdk/js?client-id=".concat(clientId,"&amp;currency=").concat(currency);if(switchSdk.currentlyloaded===sdkUrl)return Promise.resolve();if(switchSdk.currentlyloaded){const suspectedScript=document.querySelector('script[src="'.concat(switchSdk.currentlyloaded,'"]'));suspectedScript&amp;&amp;suspectedScript.parentNode.removeChild(suspectedScript)}const script=document.createElement("script");return new Promise((resolve=&gt;{script.readyState?script.onreadystatechange=function(){"complete"!=this.readyState&amp;&amp;"loaded"!=this.readyState||(this.onreadystatechange=null,resolve())}:script.onload=function(){resolve()},script.setAttribute("src",sdkUrl),document.head.appendChild(script),switchSdk.currentlyloaded=sdkUrl}))};switchSdk.currentlyloaded=""}));
define("paygw_paypal/repository",["exports","core/ajax"],(function(_exports,_ajax){var obj;
/**
   * PayPal repository module to encapsulate all of the AJAX requests that can be sent for PayPal.
   *
   * @module     paygw_paypal/repository
   * @copyright  2020 Shamim Rezaie &lt;shamim@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.markTransactionComplete=_exports.getConfigForJs=void 0,_ajax=(obj=_ajax)&amp;&amp;obj.__esModule?obj:{default:obj};_exports.getConfigForJs=(component,paymentArea,itemId)=&gt;{const request={methodname:"paygw_paypal_get_config_for_js",args:{component:component,paymentarea:paymentArea,itemid:itemId}};return _ajax.default.call([request])[0]};_exports.markTransactionComplete=(component,paymentArea,itemId,orderId)=&gt;{const request={methodname:"paygw_paypal_create_transaction_complete",args:{component:component,paymentarea:paymentArea,itemid:itemId,orderid:orderId}};return _ajax.default.call([request])[0]}}));
define("forumreport_summary/selectors",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0;return _exports.default={filters:{group:{checkbox:'[data-region="filter-groups"] input[type="checkbox"]',clear:'[data-region="filter-groups"] .filter-clear',popover:"#filter-groups-popover",save:'[data-region="filter-groups"] .filter-save',selectall:'[data-region="filter-groups"] .select-all',trigger:"#filter-groups-button"},date:{calendar:"#dateselector-calendar-panel",calendariconfrom:"#id_filterdatefrompopover_calendar",calendariconto:"#id_filterdatetopopover_calendar",popover:"#filter-dates-popover",save:'[data-region="filter-dates"] .filter-save',trigger:"#filter-dates-button"},exportlink:{link:"#summaryreport #forumreport_summary_table button.export-link"}}},_exports.default}));
define("forumreport_summary/filters",["exports","jquery","core/popper","core/custom_interaction_events","forumreport_summary/selectors","core/ajax","core/key_codes","core_form/changechecker"],(function(_exports,_jquery,_popper,_custom_interaction_events,_selectors,_ajax,_key_codes,FormChangeChecker){function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Module responsible for handling forum summary report filters.
   *
   * @module     forumreport_summary/filters
   * @copyright  2019 Michael Hawkins &lt;michaelh@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_jquery=_interopRequireDefault(_jquery),_popper=_interopRequireDefault(_popper),_custom_interaction_events=_interopRequireDefault(_custom_interaction_events),_selectors=_interopRequireDefault(_selectors),_ajax=_interopRequireDefault(_ajax),_key_codes=_interopRequireDefault(_key_codes),FormChangeChecker=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}(FormChangeChecker);_exports.init=root=&gt;{let jqRoot=(0,_jquery.default)(root);(0,_jquery.default)(document).ready((function(){(0,_jquery.default)(".loading-icon").hide(),(0,_jquery.default)("#summaryreport").removeClass("hidden")}));const generateWithFilters=(event,getparams)=&gt;{let newLink,currentLink=document.forms.filtersform.action;if(event){event.preventDefault();let currentSplit=currentLink.split("?"),currentstring=currentSplit[1],newparamsarray=getparams.split("&amp;"),paramsstring="",paramkeys=[],paramvalues=[];currentstring.split("&amp;").forEach((function(param){let splitparam=param.split("=");paramkeys.push(splitparam[0]),paramvalues.push(splitparam[1])})),newparamsarray.forEach((function(paramstring){let newparam=paramstring.split("="),existingkey=paramkeys.indexOf(newparam[0]);existingkey&gt;-1?paramvalues[existingkey]=newparam[1]:(paramkeys.push(newparam[0]),paramvalues.push(newparam[1]))})),paramkeys.forEach((function(name,key){paramsstring+="&amp;".concat(name,"=").concat(paramvalues[key])})),newLink=currentSplit[0]+"?"+paramsstring.substr(1)}else newLink=currentLink;document.forms.filtersform.action=newLink,document.forms.filtersform.submit()};(0,_jquery.default)(".resettable").on("click","a",(function(event){generateWithFilters(event,event.target.search.substr(1))})),(0,_jquery.default)("thead").on("click","a",(function(event){generateWithFilters(event,event.target.search.substr(1))})),(0,_jquery.default)(".pagination").on("click","a",(function(event){generateWithFilters(event,event.target.search.substr(1))})),document.forms.selectperpage&amp;&amp;(document.forms.selectperpage.onsubmit=event=&gt;{let getparam="perpage="+document.forms.selectperpage.elements.perpage.value;generateWithFilters(event,getparam)});const downloadForm=document.getElementById("summaryreport").querySelector("form.dataformatselector");downloadForm&amp;&amp;(downloadForm.onsubmit=event=&gt;{const downloadType=downloadForm.querySelector("#downloadtype_download").value,getParams="download=".concat(downloadType),prevAction=document.forms.filtersform.action;generateWithFilters(event,getParams),document.forms.filtersform.action=prevAction});const submitWithFilter=containerelement=&gt;{FormChangeChecker.unWatchForm(document.forms.filtersform),(0,_jquery.default)(containerelement).addClass("hidden"),generateWithFilters(!1)},updateCalendarPosition=referenceid=&gt;{let referenceElement=document.querySelector(referenceid),popperContent=document.querySelector(_selectors.default.filters.date.calendar);popperContent.style.removeProperty("z-index"),new _popper.default(referenceElement,popperContent,{placement:"bottom"})},closeOpenFilters=(openFilterButton,openFilter)=&gt;{openFilter.classList.add("hidden"),openFilter.setAttribute("data-openfilter","false"),openFilterButton.classList.add("btn-primary"),openFilterButton.classList.remove("btn-outline-primary"),openFilterButton.setAttribute("aria-expanded",!1)};jqRoot.on(_custom_interaction_events.default.events.activate,_selectors.default.filters.group.selectall,(function(){root.querySelectorAll(_selectors.default.filters.group.checkbox+":not(:checked)").forEach((function(checkbox){checkbox.checked=!0}))})),jqRoot.on(_custom_interaction_events.default.events.activate,_selectors.default.filters.group.clear,(function(){root.querySelectorAll(_selectors.default.filters.group.checkbox+":checked").forEach((function(checkbox){checkbox.checked=!1}))})),jqRoot.on(_custom_interaction_events.default.events.activate,_selectors.default.filters.group.trigger,(function(){let referenceElement=root.querySelector(_selectors.default.filters.group.trigger),popperContent=root.querySelector(_selectors.default.filters.group.popover);new _popper.default(referenceElement,popperContent,{placement:"bottom"}),popperContent.classList.remove("hidden"),popperContent.setAttribute("data-openfilter","true"),referenceElement.classList.add("btn-outline-primary"),referenceElement.classList.remove("btn-primary"),referenceElement.setAttribute("aria-expanded",!0);const closeListener=e=&gt;{e.target.id===referenceElement.id||popperContent===e.target.closest('[data-openfilter="true"]')||void 0!==e.keyCode&amp;&amp;e.keyCode!==_key_codes.default.enter&amp;&amp;e.keyCode!==_key_codes.default.space||(closeOpenFilters(referenceElement,popperContent),document.removeEventListener("click",closeListener),document.removeEventListener("keyup",closeListener),document.removeEventListener("keyup",escCloseListener))};document.addEventListener("click",closeListener),document.addEventListener("keyup",closeListener);const escCloseListener=e=&gt;{e.keyCode===_key_codes.default.escape&amp;&amp;(closeOpenFilters(referenceElement,popperContent),document.removeEventListener("keyup",escCloseListener),document.removeEventListener("click",closeListener))};document.addEventListener("keyup",escCloseListener)})),jqRoot.on(_custom_interaction_events.default.events.activate,_selectors.default.filters.group.save,(function(){root.querySelectorAll(_selectors.default.filters.group.checkbox).forEach((function(popcheckbox){let filtersform=document.forms.filtersform,saveid=popcheckbox.getAttribute("data-saveid");filtersform.querySelector("#".concat(saveid)).checked=popcheckbox.checked})),submitWithFilter("#filter-groups-popover")})),document.querySelectorAll(_selectors.default.filters.exportlink.link).forEach((function(exportbutton){exportbutton.addEventListener("click",(function(event){document.forms.exportlinkform.action=event.target.dataset.url,document.forms.exportlinkform.submit()}))})),jqRoot.on(_custom_interaction_events.default.events.activate,_selectors.default.filters.date.trigger,(function(){let referenceElement=root.querySelector(_selectors.default.filters.date.trigger),popperContent=root.querySelector(_selectors.default.filters.date.popover);new _popper.default(referenceElement,popperContent,{placement:"bottom"}),popperContent.classList.remove("hidden"),popperContent.setAttribute("data-openfilter","true"),popperContent.querySelector('[name="filterdatefrompopover[enabled]"]').focus(),referenceElement.classList.add("btn-outline-primary"),referenceElement.classList.remove("btn-primary"),referenceElement.setAttribute("aria-expanded",!0);const closeListener=e=&gt;{e.target.id===referenceElement.id||popperContent===e.target.closest('[data-openfilter="true"]')||void 0!==e.keyCode&amp;&amp;e.keyCode!==_key_codes.default.enter&amp;&amp;e.keyCode!==_key_codes.default.space||(closeOpenFilters(referenceElement,popperContent),document.removeEventListener("click",closeListener),document.removeEventListener("keyup",closeListener),document.removeEventListener("keyup",escCloseListener))};document.addEventListener("click",closeListener),document.addEventListener("keyup",closeListener);const escCloseListener=e=&gt;{e.keyCode===_key_codes.default.escape&amp;&amp;(closeOpenFilters(referenceElement,popperContent),document.removeEventListener("keyup",escCloseListener),document.removeEventListener("click",closeListener))};document.addEventListener("keyup",escCloseListener)})),jqRoot.on(_custom_interaction_events.default.events.activate,_selectors.default.filters.date.save,(function(){let filtersForm=document.forms.filtersform;const datesPopover=root.querySelector(_selectors.default.filters.date.popover),fromEnabled=datesPopover.querySelector('[name="filterdatefrompopover[enabled]"]').checked?1:0,toEnabled=datesPopover.querySelector('[name="filterdatetopopover[enabled]"]').checked?1:0;if(fromEnabled||toEnabled){let args={data:[]};fromEnabled&amp;&amp;args.data.push({key:"from",year:datesPopover.querySelector('[name="filterdatefrompopover[year]"]').value,month:datesPopover.querySelector('[name="filterdatefrompopover[month]"]').value,day:datesPopover.querySelector('[name="filterdatefrompopover[day]"]').value,hour:0,minute:0}),toEnabled&amp;&amp;args.data.push({key:"to",year:datesPopover.querySelector('[name="filterdatetopopover[year]"]').value,month:datesPopover.querySelector('[name="filterdatetopopover[month]"]').value,day:datesPopover.querySelector('[name="filterdatetopopover[day]"]').value,hour:23,minute:59});const request={methodname:"core_calendar_get_timestamps",args:args};_ajax.default.call([request])[0].done((function(result){let fromTimestamp=0,toTimestamp=0;if(result.timestamps.forEach((function(data){"from"===data.key?fromTimestamp=data.timestamp:"to"===data.key&amp;&amp;(toTimestamp=data.timestamp)})),toTimestamp&gt;0&amp;&amp;fromTimestamp&gt;toTimestamp){const warningdiv=document.getElementById("dates-filter-warning");warningdiv.classList.remove("hidden"),warningdiv.classList.add("d-block")}else filtersForm.elements["datefrom[timestamp]"].value=fromTimestamp,filtersForm.elements["datefrom[enabled]"].value=fromEnabled,filtersForm.elements["dateto[timestamp]"].value=toTimestamp,filtersForm.elements["dateto[enabled]"].value=toEnabled,submitWithFilter("#filter-dates-popover")}))}else filtersForm.elements["datefrom[timestamp]"].value=0,filtersForm.elements["datefrom[enabled]"].value=fromEnabled,filtersForm.elements["dateto[timestamp]"].value=0,filtersForm.elements["dateto[enabled]"].value=toEnabled,submitWithFilter("#filter-dates-popover")})),jqRoot.on(_custom_interaction_events.default.events.activate,_selectors.default.filters.date.calendariconfrom,(function(){updateCalendarPosition(_selectors.default.filters.date.calendariconfrom)})),jqRoot.on(_custom_interaction_events.default.events.activate,_selectors.default.filters.date.calendariconto,(function(){updateCalendarPosition(_selectors.default.filters.date.calendariconto)}))}}));
define("quizaccess_seb/validate_quiz_access",["exports","core/ajax","core/config","core/notification","quizaccess_seb/view"],(function(_exports,_ajax,_config,_notification,View){function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Validate Safe Exam Browser access keys.
   *
   * @module     quizaccess_seb/validate_quiz_access
   * @author     Andrew Madden &lt;andrewmadden@catalyst-au.net&gt;
   * @copyright  2021 Catalyst IT
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_ajax=_interopRequireDefault(_ajax),_config=_interopRequireDefault(_config),_notification=_interopRequireDefault(_notification),View=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}(View),window.SafeExamBrowser=window.SafeExamBrowser||null;const safeExamBrowserKeysUpdated=function(cmid){let autoreconfigure=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]&amp;&amp;arguments[1];isQuizAccessValid(cmid).then((response=&gt;(setTimeout(View.clearLoadingAlert,1e3),response.configkey&amp;&amp;response.browserexamkey?View.allowAccess():(!0===autoreconfigure&amp;&amp;!1===response.configkey&amp;&amp;reconfigureSafeExamBrowser(cmid),setTimeout(View.showValidationFailedModal,1e3)),response))).catch((err=&gt;{_notification.default.exception(err)}))},isQuizAccessValid=cmid=&gt;{const request={methodname:"quizaccess_seb_validate_quiz_keys",args:{cmid:cmid,url:window.location.href,configkey:window.SafeExamBrowser.security.configKey,browserexamkey:window.SafeExamBrowser.security.browserExamKey}};return _ajax.default.call([request])[0]},isKeyEmpty=key=&gt;":"===key,reconfigureSafeExamBrowser=cmid=&gt;{const redirecturl=_config.default.wwwroot.replace(/^http/i,"seb")+"/mod/quiz/accessrule/seb/config.php?cmid="+cmid;document.location.replace(redirecturl)};_exports.init=async function(cmid){let autoreconfigure=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]&amp;&amp;arguments[1];null!==window.SafeExamBrowser&amp;&amp;(await View.addLoadingAlert(),isKeyEmpty(window.SafeExamBrowser.security.configKey)&amp;&amp;isKeyEmpty(window.SafeExamBrowser.security.browserExamKey)?window.SafeExamBrowser.security.updateKeys(safeExamBrowserKeysUpdated):safeExamBrowserKeysUpdated(cmid,autoreconfigure))}}));
define("quizaccess_seb/managetemplates",["jquery","core/ajax","core/str","core/notification"],(function($,ajax,str,notification){var manager={removeTemplate:function(e){e.preventDefault();var targetUrl=$(e.currentTarget).attr("href");str.get_strings([{key:"confirmtemplateremovaltitle",component:"quizaccess_seb"},{key:"confirmtemplateremovalquestion",component:"quizaccess_seb"},{key:"yes",component:"moodle"},{key:"no",component:"moodle"}]).then((function(s){notification.confirm(s[0],s[1],s[2],s[3],(function(){window.location=targetUrl}))})).catch()},setup:function(){$("body").delegate('[data-action="delete"]',"click",manager.removeTemplate)}};return{setup:manager.setup}}));
define("quizaccess_seb/view",["exports","core/notification","core/templates","core/str","core/modal_factory"],(function(_exports,_notification,Templates,Str,ModalFactory){var obj;
/**
   * Manage the quiz views.
   *
   * @module     quizaccess_seb/view
   * @author     Andrew Madden &lt;andrewmadden@catalyst-au.net&gt;
   * @copyright  2021 Catalyst IT
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.showValidationFailedModal=_exports.clearLoadingAlert=_exports.allowAccess=_exports.addLoadingAlert=void 0,_notification=(obj=_notification)&amp;&amp;obj.__esModule?obj:{default:obj},Templates=_interopRequireWildcard(Templates),Str=_interopRequireWildcard(Str),ModalFactory=_interopRequireWildcard(ModalFactory);const SELECTOR_MAIN="#region-main",SELECTOR_LOADING=".seb-loading",TEMPLATE_LOADING="quizaccess_seb/loading";_exports.allowAccess=()=&gt;{window.location.reload()};_exports.addLoadingAlert=()=&gt;Templates.render(TEMPLATE_LOADING,{}).then(((html,js)=&gt;{const alertRegion=window.document.querySelector(SELECTOR_MAIN);return Templates.prependNodeContents(alertRegion,html,js)})).catch(_notification.default.exception);_exports.clearLoadingAlert=()=&gt;{const alert=window.document.querySelector(SELECTOR_LOADING);alert&amp;&amp;Templates.replaceNode(alert,"","")};_exports.showValidationFailedModal=()=&gt;{ModalFactory.create({type:ModalFactory.types.ALERT,title:Str.get_string("sebkeysvalidationfailed","quizaccess_seb"),body:Str.get_string("invalidkeys","quizaccess_seb"),large:!1}).then((modal=&gt;{modal.show()})).fail(_notification.default.exception)}}));
define("tiny_accessibilitychecker/checker",["exports","core/templates","core/str","./common","core/modal_factory","core/modal_events","./colorbase","editor_tiny/options"],(function(_exports,_templates,_str,_common,Modal,ModalEvents,_colorbase,_options){function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/*
   * @package    tiny_accessibilitychecker
   * @copyright  2022, Stevani Andolo  &lt;stevani@hotmail.com.au&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_templates=_interopRequireDefault(_templates),Modal=_interopRequireWildcard(Modal),ModalEvents=_interopRequireWildcard(ModalEvents),_colorbase=_interopRequireDefault(_colorbase);return _exports.default=class{constructor(editor){this.editor=editor,this.colorBase=new _colorbase.default,this.modal=null,this.placeholderSelectors=null;const placeholders=(0,_options.getPlaceholderSelectors)(this.editor);placeholders.length&amp;&amp;(this.placeholderSelectors=placeholders.join(", "))}destroy(){delete this.editor,delete this.colorBase,this.modal.destroy(),delete this.modal}async displayDialogue(){this.modal=await Modal.create({type:Modal.types.DEFAULT,large:!0,title:(0,_str.get_string)("pluginname",_common.component),body:this.getDialogueContent()}),this.modal.getRoot().on(ModalEvents.hidden,(()=&gt;this.destroy())),this.modal.getRoot()[0].addEventListener("click",(event=&gt;{const faultLink=event.target.closest('[data-action="highlightfault"]');if(!faultLink)return;event.preventDefault();const nodeName=faultLink.dataset.nodeName;let selectedNode=null;if(nodeName)if(nodeName.includes(",")||"body"===nodeName)selectedNode=this.editor.dom.select("body")[0];else{var _faultLink$dataset$no;const nodeIndex=null!==(_faultLink$dataset$no=faultLink.dataset.nodeIndex)&amp;&amp;void 0!==_faultLink$dataset$no?_faultLink$dataset$no:0;selectedNode=this.editor.dom.select(nodeName)[nodeIndex]}selectedNode&amp;&amp;"BODY"!==selectedNode.nodeName.toUpperCase()&amp;&amp;this.selectAndScroll(selectedNode),this.modal.hide()})),this.modal.show()}async getAllWarningStrings(){const keys=["emptytext","entiredocument","imagesmissingalt","needsmorecontrast","needsmoreheadings","tablesmissingcaption","tablesmissingheaders","tableswithmergedcells"],stringValues=await(0,_str.get_strings)(keys.map((key=&gt;({key:key,component:_common.component}))));return new Map(keys.map(((key,index)=&gt;[key,stringValues[index]])))}async getDialogueContent(){const langStrings=await this.getAllWarningStrings(),warnings=this.getWarnings().map((warning=&gt;(warning.description&amp;&amp;("langstring"===warning.description.type?warning.description=langStrings.get(warning.description.value):warning.description=warning.description.value),warning.nodeData=warning.nodeData.map((problemNode=&gt;(problemNode.text&amp;&amp;("langstring"===problemNode.text.type?problemNode.text=langStrings.get(problemNode.text.value):problemNode.text=problemNode.text.value),problemNode))),warning)));return _templates.default.render("tiny_accessibilitychecker/warning_content",{warnings:warnings})}selectAndScroll(node){this.editor.selection.select(node).scrollIntoView({behavior:"smooth",block:"nearest"})}getWarnings(){const warnings=[];return warnings.push(this.createWarnings("imagesmissingalt",this.checkImage(),!0)),warnings.push(this.createWarnings("needsmorecontrast",this.checkOtherElements(),!1)),this.editor.getContent({format:"text"}).length&gt;1e3&amp;&amp;this.editor.dom.select("h3,h4,h5").length&lt;1&amp;&amp;warnings.push(this.createWarnings("needsmoreheadings",[this.editor],!1)),warnings.push(this.createWarnings("tablesmissingcaption",this.checkTableCaption(),!1)),warnings.push(this.createWarnings("tableswithmergedcells",this.checkTableMergedCells(),!1)),warnings.push(this.createWarnings("tablesmissingheaders",this.checkTableHeaders(),!1)),warnings.filter((warning=&gt;warning.nodeData.length&gt;0))}createWarnings(description,nodes,isImageType){const getTextValue=node=&gt;{if(node===this.editor)return{type:"langstring",value:"entiredocument"};const emptyStringValue={type:"langstring",value:"emptytext"};if("innerText"in node){const value=node.innerText.trim();return value.length?{type:"raw",value:value}:emptyStringValue}if("textContent"in node){const value=node.textContent.trim();return value.length?{type:"raw",value:value}:emptyStringValue}return{type:"raw",value:node.nodeName}},getEventualNode=node=&gt;{if(node!==this.editor)return node;const childNodes=node.dom.select("body")[0].childNodes;return childNodes.length?document.body:childNodes},warning={description:{type:"langstring",value:description},nodeData:[]};return warning.nodeData=[...nodes].filter((node=&gt;node!==this.editor&amp;&amp;this.placeholderSelectors?!1===node.matches(this.placeholderSelectors):node)).map((node=&gt;{const describedNode=getEventualNode(node),nodeIndex=this.editor.dom.select(describedNode.nodeName).indexOf(describedNode),warning={src:null,text:null,nodeName:describedNode.nodeName,nodeIndex:nodeIndex};return isImageType?warning.src=node.getAttribute("src"):warning.text=getTextValue(node),warning})),warning}checkImage(){const problemNodes=[];return this.editor.dom.select("img").forEach((img=&gt;{img.getAttribute("alt")||"presentation"===img.getAttribute("role")||problemNodes.push(img)})),problemNodes}checkTableCaption(){const problemNodes=[];return this.editor.dom.select("table").forEach((table=&gt;{const caption=table.querySelector("caption");null!=caption&amp;&amp;caption.textContent.trim()||problemNodes.push(table)})),problemNodes}checkOtherElements(){const problemNodes=[];return this.editor.dom.select("body *").filter((node=&gt;node.hasChildNodes()&amp;&amp;null!==node.childNodes[0].nodeValue)).forEach((node=&gt;{const foreground=this.colorBase.fromArray(this.getComputedBackgroundColor(node,window.getComputedStyle(node,null).getPropertyValue("color")),this.colorBase.TYPES.RGBA),background=this.colorBase.fromArray(this.getComputedBackgroundColor(node),this.colorBase.TYPES.RGBA),lum1=this.getLuminanceFromCssColor(foreground),lum2=this.getLuminanceFromCssColor(background),ratio=((lum1,lum2)=&gt;lum1&gt;lum2?(lum1+.05)/(lum2+.05):(lum2+.05)/(lum1+.05))(lum1,lum2);ratio&lt;=4.5&amp;&amp;(window.console.log("\n                        Contrast ratio is too low: ".concat(ratio,"\n                        Colour 1: ").concat(foreground,"\n                        Colour 2: ").concat(background,"\n                        Luminance 1: ").concat(lum1,"\n                        Luminance 2: ").concat(lum2,"\n                    ")),problemNodes.find((existingProblemNode=&gt;existingProblemNode.contains(node)))||problemNodes.push(node))})),problemNodes}checkTableMergedCells(){const problemNodes=[];return this.editor.dom.select("table").forEach((table=&gt;{table.querySelectorAll("[colspan], [rowspan]").length&amp;&amp;problemNodes.push(table)})),problemNodes}checkTableHeaders(){const problemNodes=[];return this.editor.dom.select("table").forEach((table=&gt;{if(table.querySelector("tr").querySelector("td")){[...table.querySelectorAll("tr")].some((row=&gt;{const header=row.querySelector("th");return!header||!header.textContent.trim()}))&amp;&amp;problemNodes.push(table)}else[...table.querySelectorAll("tr th")].some((header=&gt;!header.textContent.trim()))&amp;&amp;problemNodes.push(table)})),problemNodes}getLuminanceFromCssColor(colortext){"transparent"===colortext&amp;&amp;(colortext="#ffffff");const color=this.colorBase.toArray(this.colorBase.toRGB(colortext)),part1=a=&gt;((a=parseInt(a,10)/255)&lt;=.03928?a/=12.92:a=Math.pow((a+.055)/1.055,2.4),a);return.2126*part1(color[0])+.7152*part1(color[1])+.0722*part1(color[2])}getComputedBackgroundColor(node,color){if(!node.parentNode)return this.colorBase.toArray("rgba(255, 255, 255, 1)");"rgba(0, 0, 0, 0)"!==(color=color||window.getComputedStyle(node,null).getPropertyValue("background-color")).toLowerCase()&amp;&amp;"transparent"!==color.toLowerCase()||(color="rgba(1, 1, 1, 0)");const colorParts=this.colorBase.toArray(color),alpha=colorParts[3];if(1===alpha)return colorParts;const parentColor=this.getComputedBackgroundColor(node.parentNode);return[(1-alpha)*parentColor[0]+alpha*colorParts[0],(1-alpha)*parentColor[1]+alpha*colorParts[1],(1-alpha)*parentColor[2]+alpha*colorParts[2],1]}},_exports.default}));
define("tiny_accessibilitychecker/configuration",["exports","./common","editor_tiny/utils"],(function(_exports,_common,_utils){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.configure=void 0;_exports.configure=instanceConfig=&gt;({menu:(0,_utils.addMenubarItem)(instanceConfig.menu,"tools",_common.accessbilityButtonName)})}));
define("tiny_accessibilitychecker/plugin",["exports","editor_tiny/loader","editor_tiny/utils","./common","./commands","./configuration"],(function(_exports,_loader,_utils,_common,Commands,Configuration){function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}
/**
   * Tiny Media Manager plugin for Moodle.
   *
   * @module      tiny_accessibilitychecker/plugin
   * @copyright   2022, Stevani Andolo &lt;stevani@hotmail.com.au&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,Commands=_interopRequireWildcard(Commands),Configuration=_interopRequireWildcard(Configuration);var _default=new Promise((async resolve=&gt;{const[tinyMCE,setupCommands,pluginMetadata]=await Promise.all([(0,_loader.getTinyMCE)(),Commands.getSetup(),(0,_utils.getPluginMetadata)(_common.component,_common.pluginName)]);tinyMCE.PluginManager.add("".concat(_common.component,"/plugin"),(editor=&gt;(setupCommands(editor),pluginMetadata))),resolve(["".concat(_common.component,"/plugin"),Configuration])}));return _exports.default=_default,_exports.default}));
define("tiny_accessibilitychecker/colorbase",["exports"],(function(_exports){function _defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}
/*
   * @package    tiny_accessibilitychecker
   * @copyright  2022, Stevani Andolo  &lt;stevani@hotmail.com.au&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0;return _exports.default=class{constructor(){_defineProperty(this,"REGEX_HEX",/^#?([\da-fA-F]{2})([\da-fA-F]{2})([\da-fA-F]{2})(\ufffe)?/),_defineProperty(this,"REGEX_HEX3",/^#?([\da-fA-F]{1})([\da-fA-F]{1})([\da-fA-F]{1})(\ufffe)?/),_defineProperty(this,"REGEX_RGB",/rgba?\(([\d]{1,3}), ?([\d]{1,3}), ?([\d]{1,3}),? ?([.\d]*)?\)/),_defineProperty(this,"TYPES",{HEX:"hex",RGB:"rgb",RGBA:"rgba"}),_defineProperty(this,"KEYWORDS",{black:"000",silver:"c0c0c0",gray:"808080",white:"fff",maroon:"800000",red:"f00",purple:"800080",fuchsia:"f0f",green:"008000",lime:"0f0",olive:"808000",yellow:"ff0",navy:"000080",blue:"00f",teal:"008080",aqua:"0ff"}),_defineProperty(this,"STR_HEX","#{*}{*}{*}"),_defineProperty(this,"STR_RGB","rgb({*}, {*}, {*})"),_defineProperty(this,"STR_RGBA","rgba({*}, {*}, {*}, {*})"),_defineProperty(this,"toHex",(str=&gt;{var clr=this._convertTo(str,"hex"),isTransparent="transparent"===clr.toLowerCase();return"#"===clr.charAt(0)||isTransparent||(clr="#"+clr),isTransparent?clr.toLowerCase():clr.toUpperCase()})),_defineProperty(this,"toRGB",(str=&gt;this._convertTo(str,"rgb").toLowerCase())),_defineProperty(this,"toRGBA",(str=&gt;this._convertTo(str,"rgba").toLowerCase())),_defineProperty(this,"toArray",(str=&gt;{var regex,arr,length,type=this.findType(str).toUpperCase();return"HEX"===type&amp;&amp;str.length&lt;5&amp;&amp;(type="HEX3"),"A"===type.charAt(type.length-1)&amp;&amp;(type=type.slice(0,-1)),(regex=this._getRightValue("REGEX_"+type))&amp;&amp;(length=(arr=regex.exec(str)||[]).length)&amp;&amp;(arr.shift(),length--,"HEX3"===type&amp;&amp;(arr[0]+=arr[0],arr[1]+=arr[1],arr[2]+=arr[2]),arr[length-1]||(arr[length-1]=1)),arr})),_defineProperty(this,"fromArray",((arr,template)=&gt;{if(arr=arr.concat(),void 0===template)return arr.join(", ");for(template=this._getRightValue("STR_"+template.toUpperCase()),3===arr.length&amp;&amp;4===template.match(/\{\*\}/g).length&amp;&amp;arr.push(1);template.indexOf("{*}")&gt;=0&amp;&amp;arr.length&gt;0;)template=template.replace("{*}",arr.shift());return template})),_defineProperty(this,"findType",(str=&gt;{if(this.KEYWORDS[str])return"keyword";var key,index=str.indexOf("(");return index&gt;0&amp;&amp;(key=str.substr(0,index)),key&amp;&amp;this.TYPES[key.toUpperCase()]?this.TYPES[key.toUpperCase()]:"hex"})),_defineProperty(this,"_getAlpha",(clr=&gt;{var alpha,arr=this.toArray(clr);return arr.length&gt;3&amp;&amp;(alpha=arr.pop()),+alpha||1})),_defineProperty(this,"_keywordToHex",(clr=&gt;{var keyword=this.KEYWORDS[clr];return keyword||keyword})),_defineProperty(this,"_convertTo",((clr,to)=&gt;{if("transparent"===clr)return clr;var needsAlpha,alpha,method,ucTo,from=this.findType(clr),originalTo=to;return"keyword"===from&amp;&amp;(clr=this._keywordToHex(clr),from="hex"),"hex"===from&amp;&amp;clr.length&lt;5&amp;&amp;("#"===clr.charAt(0)&amp;&amp;(clr=clr.substr(1)),clr="#"+clr.charAt(0)+clr.charAt(0)+clr.charAt(1)+clr.charAt(1)+clr.charAt(2)+clr.charAt(2)),from===to||("a"===from.charAt(from.length-1)&amp;&amp;(from=from.slice(0,-1)),(needsAlpha="a"===to.charAt(to.length-1))&amp;&amp;(to=to.slice(0,-1),alpha=this._getAlpha(clr)),ucTo=to.charAt(0).toUpperCase()+to.substr(1).toLowerCase(),(method=window["_"+from+"To"+ucTo])||"rgb"!==from&amp;&amp;"rgb"!==to&amp;&amp;(clr=window["_"+from+"ToRgb"](clr),from="rgb",method=window["_"+from+"To"+ucTo]),method&amp;&amp;(clr=method(clr,needsAlpha)),needsAlpha&amp;&amp;(Array.isArray(clr)||(clr=this.toArray(clr)),clr.push(alpha),clr=this.fromArray(clr,originalTo.toUpperCase()))),clr})),_defineProperty(this,"_hexToRgb",((str,array)=&gt;{var r,g,b;return"#"===str.charAt(0)&amp;&amp;(str=str.substr(1)),r=(str=parseInt(str,16))&gt;&gt;16,g=str&gt;&gt;8&amp;255,b=255&amp;str,array?[r,g,b]:"rgb("+r+", "+g+", "+b+")"})),_defineProperty(this,"_rgbToHex",(str=&gt;{var rgb=this.toArray(str),hex=rgb[2]|rgb[1]&lt;&lt;8|rgb[0]&lt;&lt;16;for(hex=(+hex).toString(16);hex.length&lt;6;)hex="0"+hex;return"#"+hex})),_defineProperty(this,"_getRightValue",(string=&gt;{let regex=null;return"REGEX_RGB"===string?regex=this.REGEX_RGB:"REGEX_HEX"===string?regex=this.REGEX_HEX:"REGEX_HEX3"===string?regex=this.REGEX_HEX3:"STR_HEX"===string?regex=this.STR_HEX:"STR_RGB"===string?regex=this.STR_RGB:"STR_RGBA"===string&amp;&amp;(regex=this.STR_RGBA),regex}))}},_exports.default}));
define("tiny_accessibilitychecker/common",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0;return _exports.default={pluginName:"tiny_accessibilitychecker/plugin",component:"tiny_accessibilitychecker",accessbilityButtonName:"tiny_accessibilitychecker",icon:"accessibility-check"},_exports.default}));
define("tiny_accessibilitychecker/commands",["exports","core/str","./common","./checker"],(function(_exports,_str,_common,_checker){var obj;
/**
   * Tiny Media Manager commands.
   *
   * @module      tiny_accessibilitychecker/commands
   * @copyright   2022, Stevani Andolo &lt;stevani@hotmail.com.au&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.getSetup=void 0,_checker=(obj=_checker)&amp;&amp;obj.__esModule?obj:{default:obj};_exports.getSetup=async()=&gt;{const[buttonTooltip]=await Promise.all([(0,_str.get_string)("pluginname",_common.component)]);return editor=&gt;{editor.ui.registry.addButton(_common.accessbilityButtonName,{icon:_common.icon,tooltip:buttonTooltip,onAction:()=&gt;{new _checker.default(editor).displayDialogue()}}),editor.ui.registry.addMenuItem(_common.accessbilityButtonName,{icon:_common.icon,text:buttonTooltip,onAction:()=&gt;{new _checker.default(editor).displayDialogue()}})}}}));
define("tiny_autosave/options",["exports","./common","editor_tiny/options","editor_tiny/utils"],(function(_exports,_common,_options,_utils){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.getBackoffTime=void 0,Object.defineProperty(_exports,"getContextId",{enumerable:!0,get:function(){return _options.getContextId}}),Object.defineProperty(_exports,"getDraftItemId",{enumerable:!0,get:function(){return _options.getDraftItemId}}),_exports.setAutosaveHasReset=_exports.register=_exports.markInitialised=_exports.isInitialised=_exports.hasAutosaveHasReset=_exports.getPageInstance=_exports.getPageHash=void 0;
/**
   * Options helper for the Moodle Tiny Autosave plugin.
   *
   * @module      tiny_autosave/plugin
   * @copyright   2022 Andrew Lyons &lt;andrew@nicols.co.uk&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */
const initialisedOptionName=(0,_options.getPluginOptionName)(_common.pluginName,"initialised"),pageHashName=(0,_options.getPluginOptionName)(_common.pluginName,"pagehash"),pageInstanceName=(0,_options.getPluginOptionName)(_common.pluginName,"pageinstance"),backoffTime=(0,_options.getPluginOptionName)(_common.pluginName,"backoffTime"),autosaveHasReset=(0,_options.getPluginOptionName)(_common.pluginName,"autosaveHasReset");_exports.register=editor=&gt;{const registerOption=editor.options.register;registerOption(initialisedOptionName,{processor:"boolean",default:!1}),registerOption(pageHashName,{processor:"string",default:""}),registerOption(pageInstanceName,{processor:"string",default:""}),registerOption(pageInstanceName,{processor:"string",default:""}),registerOption(backoffTime,{processor:"number",default:500}),registerOption(autosaveHasReset,{processor:"boolean",default:!1})};_exports.isInitialised=editor=&gt;!!(0,_utils.ensureEditorIsValid)(editor)&amp;&amp;editor.options.get(initialisedOptionName);_exports.markInitialised=editor=&gt;editor.options.set(initialisedOptionName,!0);_exports.getPageHash=editor=&gt;editor.options.get(pageHashName);_exports.getPageInstance=editor=&gt;editor.options.get(pageInstanceName);_exports.getBackoffTime=editor=&gt;editor.options.get(backoffTime);_exports.setAutosaveHasReset=editor=&gt;editor.options.set(autosaveHasReset,!0);_exports.hasAutosaveHasReset=editor=&gt;editor.options.get(autosaveHasReset)}));
define("tiny_autosave/plugin",["exports","editor_tiny/loader","editor_tiny/utils","./common","./options","./autosaver"],(function(_exports,_loader,_utils,_common,Options,Autosaver){function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}
/**
   * Tiny Autosave plugin for Moodle.
   *
   * @module      tiny_autosave/plugin
   * @copyright   2022 Andrew Lyons &lt;andrew@nicols.co.uk&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,Options=_interopRequireWildcard(Options),Autosaver=_interopRequireWildcard(Autosaver);var _default=new Promise((async resolve=&gt;{const[tinyMCE,pluginMetadata]=await Promise.all([(0,_loader.getTinyMCE)(),(0,_utils.getPluginMetadata)(_common.component,_common.pluginName)]);tinyMCE.PluginManager.add(_common.pluginName,(editor=&gt;(Options.register(editor),Autosaver.register(editor),pluginMetadata))),resolve(_common.pluginName)}));return _exports.default=_default,_exports.default}));
define("tiny_autosave/repository",["exports","core/ajax","core/config","./options","core/pending","editor_tiny/utils"],(function(_exports,_ajax,config,Options,_pending,_utils){var obj;function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}
/**
   * Repository helper for the Moodle Tiny Autosave plugin.
   *
   * @module      tiny_autosave/repository
   * @copyright   2022 Andrew Lyons &lt;andrew@nicols.co.uk&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.updateAutosaveSession=_exports.resumeAutosaveSession=_exports.removeAutosaveSession=void 0,config=_interopRequireWildcard(config),Options=_interopRequireWildcard(Options),_pending=(obj=_pending)&amp;&amp;obj.__esModule?obj:{default:obj};const fetchOne=(methodname,args)=&gt;(0,_ajax.call)([{methodname:methodname,args:args}])[0];_exports.resumeAutosaveSession=editor=&gt;{if(!(0,_utils.ensureEditorIsValid)(editor))return Promise.reject("Invalid editor");const pendingPromise=new _pending.default("tiny_autosave/repository:resumeAutosaveSession");return fetchOne("tiny_autosave_resume_session",{contextid:Options.getContextId(editor),pagehash:Options.getPageHash(editor),pageinstance:Options.getPageInstance(editor),elementid:editor.targetElm.id,draftid:Options.getDraftItemId(editor)}).then((result=&gt;(pendingPromise.resolve(),result)))};_exports.updateAutosaveSession=editor=&gt;{if(!(0,_utils.ensureEditorIsValid)(editor))return Promise.reject("Invalid editor");if(Options.hasAutosaveHasReset(editor))return Promise.reject("Skipping store of autosave content - content has been reset");const pendingPromise=new _pending.default("tiny_autosave/repository:updateAutosaveSession");return fetchOne("tiny_autosave_update_session",{contextid:Options.getContextId(editor),pagehash:Options.getPageHash(editor),pageinstance:Options.getPageInstance(editor),elementid:editor.targetElm.id,drafttext:editor.getContent()}).then((result=&gt;(pendingPromise.resolve(),result)))};_exports.removeAutosaveSession=editor=&gt;{if(!(0,_utils.ensureEditorIsValid)(editor))throw new Error("Invalid editor");Options.setAutosaveHasReset(editor);const requestUrl=new URL("".concat(config.wwwroot,"/lib/ajax/service.php"));requestUrl.searchParams.set("sesskey",config.sesskey);const args={contextid:Options.getContextId(editor),pagehash:Options.getPageHash(editor),pageinstance:Options.getPageInstance(editor),elementid:editor.targetElm.id};navigator.sendBeacon(requestUrl,JSON.stringify([{index:0,methodname:"tiny_autosave_reset_session",args:args}]))}}));
define("tiny_autosave/common",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0;return _exports.default={component:"tiny_autosave",pluginName:"tiny_autosave/plugin",getLogSource:editor=&gt;"tiny_autosave/".concat(editor.id)},_exports.default}));
define("tiny_autosave/storage",["exports","./repository","core/pending","./options","core/log","./common"],(function(_exports,Repository,_pending,_options,_log,_common){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.saveDraft=_exports.restoreDraft=_exports.removeAutosaveSession=void 0,Repository=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}
/**
   * Storage helper for the Moodle Tiny Autosave plugin.
   *
   * @module      tiny_autosave/plugin
   * @copyright   2022 Andrew Lyons &lt;andrew@nicols.co.uk&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */(Repository),_pending=_interopRequireDefault(_pending),_log=_interopRequireDefault(_log);const saveDebounceMap=new Map;_exports.restoreDraft=async editor=&gt;{const pendingPromise=new _pending.default("tiny_autosave/restoreDraft");try{const session=await Repository.resumeAutosaveSession(editor);session&amp;&amp;session.drafttext&amp;&amp;editor.undoManager.ignore((()=&gt;{editor.setContent(session.drafttext),editor.save()}))}catch(error){_log.default.warn("Failed to restore draft: ".concat(error),(0,_common.getLogSource)(editor))}(0,_options.markInitialised)(editor),pendingPromise.resolve()};_exports.saveDraft=editor=&gt;{const timerId=saveDebounceMap.get(editor);timerId&amp;&amp;clearTimeout(timerId),saveDebounceMap.set(editor,setTimeout((()=&gt;{_log.default.debug("Saving draft",(0,_common.getLogSource)(editor)),Repository.updateAutosaveSession(editor).catch((error=&gt;window.console.warn(error)))}),(0,_options.getBackoffTime)(editor)))};_exports.removeAutosaveSession=editor=&gt;{_log.default.debug("Removing Autosave session",(0,_common.getLogSource)(editor)),Repository.removeAutosaveSession(editor)}}));
define("tiny_autosave/autosaver",["exports","./options","./storage","core/log","core_form/events","./common"],(function(_exports,Options,Storage,_log,_events,_common){var obj;function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}
/**
   * Storage helper for the Moodle Tiny Autosave plugin.
   *
   * @module      tiny_autosave/plugin
   * @copyright   2022 Andrew Lyons &lt;andrew@nicols.co.uk&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.register=void 0,Options=_interopRequireWildcard(Options),Storage=_interopRequireWildcard(Storage),_log=(obj=_log)&amp;&amp;obj.__esModule?obj:{default:obj};_exports.register=editor=&gt;{const undoHandler=()=&gt;{editor.undoManager.hasUndo()?Storage.saveDraft(editor):_log.default.debug("Ignoring undo event as there is no undo history",(0,_common.getLogSource)(editor))},visibilityChangedHandler=()=&gt;{"hidden"===document.visibilityState&amp;&amp;Options.isInitialised(editor)&amp;&amp;Storage.saveDraft(editor)},handleFormSubmittedByJavascript=e=&gt;{Options.isInitialised(editor)&amp;&amp;e.target.contains(editor.getElement())&amp;&amp;removeAutoSaveSession()},removeAutoSaveSession=()=&gt;{document.removeEventListener("visibilitychange",visibilityChangedHandler),document.removeEventListener(_events.eventTypes.formSubmittedByJavascript,handleFormSubmittedByJavascript),Storage.removeAutosaveSession(editor)};document.addEventListener("visibilitychange",visibilityChangedHandler),editor.on("submit",removeAutoSaveSession),document.addEventListener(_events.eventTypes.formSubmittedByJavascript,handleFormSubmittedByJavascript),editor.on("init",(()=&gt;{editor.on("AddUndo",undoHandler),editor.dom.isEmpty(editor.getBody())?(_log.default.info("Attempting to restore draft",(0,_common.getLogSource)(editor)),Storage.restoreDraft(editor)):(_log.default.warn("Skipping draft restoration. The editor is not empty.",(0,_common.getLogSource)(editor)),Options.markInitialised(editor))}))}}));
define("tiny_equation/equation",["exports","tiny_equation/selectors"],(function(_exports,_selectors){var obj;
/**
   * Equation helper for Tiny Equation plugin.
   *
   * @module      tiny_equation/equation
   * @copyright   2022 Huong Nguyen &lt;huongnv13@gmail.com&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.setEquation=_exports.getSourceEquation=_exports.getSelectedEquation=_exports.getCurrentEquationData=void 0,_selectors=(obj=_selectors)&amp;&amp;obj.__esModule?obj:{default:obj};let sourceEquation=null;const getSourceEquation=()=&gt;sourceEquation;_exports.getSourceEquation=getSourceEquation;const getSelectedEquation=editor=&gt;{const currentSelection=editor.selection.getSel();if(!currentSelection)return!1;const textSelection=editor.selection.getNode().textContent,currentCaretPos=currentSelection.focusOffset;let returnValue=!1;return _selectors.default.equationPatterns.forEach((pattern=&gt;{const regexPattern=new RegExp(pattern.source,"g");[...textSelection.matchAll(regexPattern)].forEach((matches=&gt;{const match=matches[0];let startIndex=0;const startOuter=textSelection.indexOf(match,startIndex),endOuter=startOuter+match.length,innerMatch=match.match(pattern);if(innerMatch&amp;&amp;innerMatch.length){const startInner=textSelection.indexOf(innerMatch[1],startOuter),endInner=startInner+innerMatch[1].length;if(currentCaretPos&gt;=startOuter&amp;&amp;currentCaretPos&lt;=endOuter)return returnValue=innerMatch[1],void(sourceEquation={startInnerPosition:startInner,endInnerPosition:endInner,innerMatch:innerMatch})}startIndex=endOuter}))})),!1!==returnValue?returnValue=returnValue.trim():sourceEquation=null,returnValue};_exports.getSelectedEquation=getSelectedEquation;_exports.getCurrentEquationData=editor=&gt;{let properties={};const equation=getSelectedEquation(editor);return equation&amp;&amp;(properties.equation=equation),properties};_exports.setEquation=(currentForm,editor)=&gt;{const input=currentForm.querySelector(_selectors.default.elements.equationTextArea),sourceEquation=getSourceEquation();let value=input.value;if(""!==value)if(sourceEquation){const selectedNode=editor.selection.getNode(),text=selectedNode.textContent;value=" "+value+" ",selectedNode.textContent=text.slice(0,sourceEquation.startInnerPosition)+value+text.slice(sourceEquation.endInnerPosition)}else value=_selectors.default.delimiters.start+" "+value+" "+_selectors.default.delimiters.end,editor.insertContent(value)}}));
define("tiny_equation/options",["exports","editor_tiny/options","tiny_equation/common"],(function(_exports,_options,_common){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.register=_exports.isTexFilterActive=_exports.getTexDocsUrl=_exports.getLibraries=_exports.getContextId=void 0;
/**
   * Options helper for Tiny Equation plugin.
   *
   * @module      tiny_equation/options
   * @copyright   2022 Huong Nguyen &lt;huongnv13@gmail.com&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */
const librariesName=(0,_options.getPluginOptionName)(_common.pluginName,"libraries"),texFilterName=(0,_options.getPluginOptionName)(_common.pluginName,"texfilter"),contextIdName=(0,_options.getPluginOptionName)(_common.pluginName,"contextid"),texDocsUrlName=(0,_options.getPluginOptionName)(_common.pluginName,"texdocsurl");_exports.register=editor=&gt;{const registerOption=editor.options.register;registerOption(librariesName,{processor:"array",default:[]}),registerOption(texFilterName,{processor:"boolean",default:!1}),registerOption(contextIdName,{processor:"number",default:0}),registerOption(texDocsUrlName,{processor:"string",default:""})};_exports.getLibraries=editor=&gt;editor.options.get(librariesName);_exports.isTexFilterActive=editor=&gt;editor.options.get(texFilterName);_exports.getContextId=editor=&gt;editor.options.get(contextIdName);_exports.getTexDocsUrl=editor=&gt;editor.options.get(texDocsUrlName)}));
define("tiny_equation/configuration",["exports","tiny_equation/common","editor_tiny/utils"],(function(_exports,_common,_utils){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.configure=void 0;_exports.configure=instanceConfig=&gt;{return{menu:(0,_utils.addMenubarItem)(instanceConfig.menu,"insert",_common.component),toolbar:(toolbar=instanceConfig.toolbar,(0,_utils.addToolbarSection)(toolbar,"advanced","lists",!0),(0,_utils.addToolbarButton)(toolbar,"advanced",_common.component))};var toolbar}}));
define("tiny_equation/selectors",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0;return _exports.default={equationPatterns:[/\$\$([\S\s]+?)\$\$/,/\\\(([\S\s]+?)\\\)/,/\\\[([\S\s]+?)\\\]/,/\[tex\]([\S\s]+?)\[\/tex\]/],delimiters:{start:"\\(",end:"\\)"},cursorLatex:"\\Downarrow ",actions:{submit:'[data-action="save"]'},elements:{form:"form",library:".tiny_equation_library",libraryItem:".tiny_equation_library button",equationTextArea:".tiny_equation_equation",preview:".tiny_equation_preview"}},_exports.default}));
define("tiny_equation/plugin",["exports","editor_tiny/loader","editor_tiny/utils","tiny_equation/common","tiny_equation/commands","tiny_equation/configuration","tiny_equation/options"],(function(_exports,_loader,_utils,_common,Commands,Configuration,Options){function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}
/**
   * Tiny Equation plugin for Moodle.
   *
   * @module      tiny_equation/plugin
   * @copyright   2022 Huong Nguyen &lt;huongnv13@gmail.com&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,Commands=_interopRequireWildcard(Commands),Configuration=_interopRequireWildcard(Configuration),Options=_interopRequireWildcard(Options);var _default=new Promise((async resolve=&gt;{const[tinyMCE,setupCommands,pluginMetadata]=await Promise.all([(0,_loader.getTinyMCE)(),Commands.getSetup(),(0,_utils.getPluginMetadata)(_common.component,_common.pluginName)]);tinyMCE.PluginManager.add("".concat(_common.component,"/plugin"),(editor=&gt;(Options.register(editor),setupCommands(editor),pluginMetadata))),resolve(["".concat(_common.component,"/plugin"),Configuration])}));return _exports.default=_default,_exports.default}));
define("tiny_equation/modal",["exports","core/modal","core/modal_registry"],(function(_exports,_modal,_modal_registry){var _class;function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}function _defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_modal=_interopRequireDefault(_modal),_modal_registry=_interopRequireDefault(_modal_registry);const EquationModal=(_defineProperty(_class=class extends _modal.default{registerEventListeners(){super.registerEventListeners(),this.registerCloseOnSave(),this.registerCloseOnCancel()}},"TYPE","tiny_equation/modal"),_defineProperty(_class,"TEMPLATE","tiny_equation/modal"),_class);_modal_registry.default.register(EquationModal.TYPE,EquationModal,EquationModal.TEMPLATE);var _default=EquationModal;return _exports.default=_default,_exports.default}));
define("tiny_equation/repository",["exports","core/ajax"],(function(_exports,_ajax){var obj;
/**
   * A javascript module to handle TinyMCE Equation ajax actions.
   *
   * @module      tiny_equation/repository
   * @copyright   2022 Huong Nguyen &lt;huongnv13@gmail.com&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.filterEquation=void 0,_ajax=(obj=_ajax)&amp;&amp;obj.__esModule?obj:{default:obj};_exports.filterEquation=(contextId,content)=&gt;{const request={methodname:"tiny_equation_filter",args:{contextid:contextId,content:content}};return _ajax.default.call([request])[0]}}));
define("tiny_equation/common",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0;return _exports.default={pluginName:"tiny_equation/plugin",component:"tiny_equation",buttonName:"tiny_equation",icon:"tiny_equation"},_exports.default}));
define("tiny_equation/commands",["exports","editor_tiny/utils","core/str","tiny_equation/common","tiny_equation/ui","tiny_equation/equation","tiny_equation/options"],(function(_exports,_utils,_str,_common,_ui,_equation,_options){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.getSetup=void 0;_exports.getSetup=async()=&gt;{const[buttonText,buttonImage]=await Promise.all([(0,_str.get_string)("buttontitle",_common.component),(0,_utils.getButtonImage)("icon",_common.component)]);return editor=&gt;{(0,_options.isTexFilterActive)(editor)&amp;&amp;(editor.ui.registry.addIcon(_common.icon,buttonImage.html),editor.ui.registry.addToggleButton(_common.buttonName,{icon:_common.icon,tooltip:buttonText,onAction:()=&gt;{(0,_ui.handleAction)(editor)},onSetup:api=&gt;{editor.on("NodeChange",(()=&gt;{const result=(0,_equation.getSelectedEquation)(editor);api.setActive(result)}))}}),editor.ui.registry.addMenuItem(_common.buttonName,{icon:_common.icon,text:buttonText,onAction:()=&gt;(0,_ui.handleAction)(editor)}))}}}));
define("tiny_equation/ui",["exports","tiny_equation/modal","core/modal_factory","core/modal_events","tiny_equation/options","core/event","tiny_equation/repository","core/notification","core/utils","tiny_equation/selectors","tiny_equation/equation"],(function(_exports,_modal,_modal_factory,_modal_events,_options,_event,TinyEquationRepository,_notification,_utils,_selectors,_equation){function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Tiny Equation UI.
   *
   * @module      tiny_equation/ui
   * @copyright   2022 Huong Nguyen &lt;huongnv13@gmail.com&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */let currentForm;Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.handleAction=void 0,_modal=_interopRequireDefault(_modal),_modal_factory=_interopRequireDefault(_modal_factory),_modal_events=_interopRequireDefault(_modal_events),TinyEquationRepository=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}(TinyEquationRepository),_selectors=_interopRequireDefault(_selectors);let lastCursorPos=0;_exports.handleAction=editor=&gt;{displayDialogue(editor)};const displayDialogue=async editor=&gt;{let data={};const currentEquationData=(0,_equation.getCurrentEquationData)(editor);currentEquationData&amp;&amp;Object.assign(data,currentEquationData);const modalPromises=await _modal_factory.default.create({type:_modal.default.TYPE,templateContext:getTemplateContext(editor,data),large:!0});modalPromises.show();const $root=await modalPromises.getRoot(),root=$root[0];currentForm=root.querySelector(_selectors.default.elements.form);const contextId=(0,_options.getContextId)(editor),debouncedPreviewUpdater=(0,_utils.debounce)((()=&gt;updatePreview((0,_options.getContextId)(editor))),500);$root.on(_modal_events.default.hidden,(()=&gt;{modalPromises.destroy()})),$root.on(_modal_events.default.shown,(()=&gt;{const library=root.querySelector(_selectors.default.elements.library);TinyEquationRepository.filterEquation(contextId,library.innerHTML).then((async data=&gt;(library.innerHTML=data.content,updatePreview(contextId),notifyFilter(library),data))).catch(_notification.exception)})),root.addEventListener("click",(e=&gt;{const libraryItem=e.target.closest(_selectors.default.elements.libraryItem),submitAction=e.target.closest(_selectors.default.actions.submit),textArea=e.target.closest(".tiny_equation_equation");libraryItem&amp;&amp;(e.preventDefault(),selectLibraryItem(libraryItem,contextId)),submitAction&amp;&amp;(e.preventDefault(),(0,_equation.setEquation)(currentForm,editor),modalPromises.destroy()),textArea&amp;&amp;debouncedPreviewUpdater()})),root.addEventListener("keyup",(e=&gt;{e.target.closest(_selectors.default.elements.equationTextArea)&amp;&amp;debouncedPreviewUpdater()})),root.addEventListener("keydown",(e=&gt;{e.target.closest(_selectors.default.elements.libraryItem)&amp;&amp;(37!=e.keyCode&amp;&amp;39!=e.keyCode||groupNavigation(e))}))},getTemplateContext=(editor,data)=&gt;{const libraries=(0,_options.getLibraries)(editor),texDocsUrl=(0,_options.getTexDocsUrl)(editor);return Object.assign({},{elementid:editor.id,libraries:libraries,texdocsurl:texDocsUrl,delimiters:_selectors.default.delimiters},data)},selectLibraryItem=(libraryItem,contextId)=&gt;{const tex=libraryItem.getAttribute("data-tex"),input=currentForm.querySelector(_selectors.default.elements.equationTextArea);let oldValue,newValue,focusPoint=0;oldValue=input.value,newValue=oldValue.substring(0,lastCursorPos)," "!==newValue.charAt(newValue.length-1)&amp;&amp;(newValue+=" "),newValue+=tex,focusPoint=newValue.length," "!==oldValue.charAt(lastCursorPos)&amp;&amp;(newValue+=" "),newValue+=oldValue.substring(lastCursorPos,oldValue.length),input.value=newValue,input.focus(),input.selectionStart=input.selectionEnd=focusPoint,updatePreview(contextId)},updatePreview=contextId=&gt;{const textarea=currentForm.querySelector(_selectors.default.elements.equationTextArea),preview=currentForm.querySelector(_selectors.default.elements.preview),cursorLatex=_selectors.default.cursorLatex,isChar=/[a-zA-Z{]/;let currentPos=textarea.selectionStart,equation=textarea.value;for(currentPos||(currentPos=0),(0,_equation.getSourceEquation)()&amp;&amp;(currentPos=equation.length);"\\"===equation.charAt(currentPos)&amp;&amp;currentPos&gt;=0;)currentPos-=1;if(0!==currentPos&amp;&amp;"{"!=equation.charAt(currentPos-1))for(;isChar.test(equation.charAt(currentPos))&amp;&amp;currentPos&lt;equation.length&amp;&amp;isChar.test(equation.charAt(currentPos-1));)currentPos+=1;lastCursorPos=currentPos,equation=""+equation.substring(0,currentPos)+cursorLatex+equation.substring(currentPos),equation=_selectors.default.delimiters.start+" "+equation+" "+_selectors.default.delimiters.end,TinyEquationRepository.filterEquation(contextId,equation).then((data=&gt;(preview.innerHTML=data.content,notifyFilter(preview),data))).catch(_notification.exception)},notifyFilter=element=&gt;{(0,_event.notifyFilterContentUpdated)(element)},groupNavigation=e=&gt;{e.preventDefault();const current=e.target.closest(_selectors.default.elements.libraryItem),parent=current.parentNode,buttons=Array.prototype.slice.call(parent.querySelectorAll(_selectors.default.elements.libraryItem)),direction=37!==e.keyCode?1:-1;let nextButton,index=buttons.indexOf(current);index&lt;0&amp;&amp;(index=0),index+=direction,index&lt;0?index=buttons.length-1:index&gt;=buttons.length&amp;&amp;(index=0),nextButton=buttons[index],nextButton.focus()}}));
define("tiny_h5p/filtercontent",["exports","editor_tiny/options"],(function(_exports,_options){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.setup=void 0;_exports.setup=async editor=&gt;{const classSelector=".".concat("h5p-placeholder");(0,_options.registerPlaceholderSelectors)(editor,[classSelector]),editor.on("PreInit",(()=&gt;{editor.formatter.register("h5p",{inline:"div",classes:"h5p-placeholder"})})),editor.on("SetContent",(()=&gt;{editor.getBody().querySelectorAll("".concat(classSelector,":not([contenteditable])")).forEach((node=&gt;{node.contentEditable=!1}))}))}}));
define("tiny_h5p/options",["exports","editor_tiny/options","./common"],(function(_exports,_options,_common){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.register=_exports.hasAnyH5PPermission=_exports.getPermissions=void 0;
/**
   * Options helper for Tiny H5P plugin.
   *
   * @module      tiny_h5p/options
   * @copyright   2022 Andrew Lyons &lt;andrew@nicols.co.uk&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */
const permissionsName=(0,_options.getPluginOptionName)(_common.pluginName,"permissions");_exports.register=editor=&gt;{(0,editor.options.register)(permissionsName,{processor:"object",default:{upload:!1,embed:!1}})};const getPermissions=editor=&gt;editor.options.get(permissionsName);_exports.getPermissions=getPermissions;_exports.hasAnyH5PPermission=editor=&gt;{const permissions=getPermissions(editor);return permissions.upload||permissions.embed}}));
define("tiny_h5p/configuration",["exports","./common","editor_tiny/utils"],(function(_exports,_common,_utils){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.configure=void 0;_exports.configure=instanceConfig=&gt;({toolbar:(0,_utils.addToolbarButton)(instanceConfig.toolbar,"content",_common.component),menu:(0,_utils.addMenubarItem)(instanceConfig.menu,"insert",_common.component)})}));
define("tiny_h5p/plugin",["exports","editor_tiny/loader","editor_tiny/utils","./common","./filtercontent","./commands","./configuration","./options"],(function(_exports,_loader,_utils,_common,FilterContent,Commands,Configuration,Options){function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}
/**
   * Tiny H5P plugin for Moodle.
   *
   * @module      tiny_h5p/plugin
   * @copyright   2022 Andrew Lyons &lt;andrew@nicols.co.uk&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,FilterContent=_interopRequireWildcard(FilterContent),Commands=_interopRequireWildcard(Commands),Configuration=_interopRequireWildcard(Configuration),Options=_interopRequireWildcard(Options);var _default=new Promise((async resolve=&gt;{const[tinyMCE,setupCommands,pluginMetadata]=await Promise.all([(0,_loader.getTinyMCE)(),Commands.getSetup(),(0,_utils.getPluginMetadata)(_common.component,_common.pluginName)]);tinyMCE.PluginManager.add("".concat(_common.component,"/plugin"),(editor=&gt;(Options.register(editor),FilterContent.setup(editor),setupCommands(editor),pluginMetadata))),resolve(["".concat(_common.component,"/plugin"),Configuration])}));return _exports.default=_default,_exports.default}));
define("tiny_h5p/modal",["exports","core/modal","core/modal_registry"],(function(_exports,_modal,_modal_registry){var _class;function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}function _defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_modal=_interopRequireDefault(_modal),_modal_registry=_interopRequireDefault(_modal_registry);const H5PModal=(_defineProperty(_class=class extends _modal.default{registerEventListeners(){super.registerEventListeners(),this.registerCloseOnSave(),this.registerCloseOnCancel()}},"TYPE","tiny_h5p/modal"),_defineProperty(_class,"TEMPLATE","tiny_h5p/modal"),_class);_modal_registry.default.register(H5PModal.TYPE,H5PModal,H5PModal.TEMPLATE);var _default=H5PModal;return _exports.default=_default,_exports.default}));
define("tiny_h5p/common",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0;return _exports.default={pluginName:"tiny_h5p/plugin",component:"tiny_h5p",buttonName:"tiny_h5p",icon:"tiny_h5p"},_exports.default}));
define("tiny_h5p/commands",["exports","editor_tiny/utils","./ui","core/str","./common","./options"],(function(_exports,_utils,_ui,_str,_common,_options){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.getSetup=void 0;_exports.getSetup=async()=&gt;{const[buttonText,buttonImage]=await Promise.all([(0,_str.get_string)("buttontitle",_common.component),(0,_utils.getButtonImage)("icon",_common.component)]);return editor=&gt;{(0,_options.hasAnyH5PPermission)(editor)&amp;&amp;(editor.ui.registry.addIcon(_common.icon,buttonImage.html),editor.ui.registry.addToggleButton(_common.buttonName,{icon:_common.icon,tooltip:buttonText,onAction:()=&gt;(0,_ui.handleAction)(editor),onSetup:api=&gt;{api.setActive(editor.formatter.match("h5p"));const changed=editor.formatter.formatChanged("h5p",(state=&gt;api.setActive(state)));return()=&gt;changed.unbind()}}),editor.ui.registry.addMenuItem(_common.buttonName,{icon:_common.icon,text:buttonText,onAction:()=&gt;(0,_ui.handleAction)(editor)}))}}}));
define("tiny_h5p/ui",["exports","editor_tiny/utils","./common","./options","core/config","core/normalise","core/templates","tiny_h5p/modal","core/modal_events","core/modal_factory","core/pending","editor_tiny/options"],(function(_exports,_utils,_common,_options,_config,_normalise,_templates,_modal,_modal_events,_modal_factory,_pending,_options2){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Tiny H5P Content configuration.
   *
   * @module      tiny_h5p/commands
   * @copyright   2022 Andrew Lyons &lt;andrew@nicols.co.uk&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.handleAction=void 0,_config=_interopRequireDefault(_config),_modal=_interopRequireDefault(_modal),_modal_events=_interopRequireDefault(_modal_events),_modal_factory=_interopRequireDefault(_modal_factory),_pending=_interopRequireDefault(_pending);let openingSelection=null;_exports.handleAction=editor=&gt;{openingSelection=editor.selection.getBookmark(),displayDialogue(editor)};const getTemplateContext=(editor,data)=&gt;{var _ref,_permissions$embed,_data$url;const permissions=(0,_options.getPermissions)(editor),canShowFilePicker=void 0!==(0,_options2.getFilePicker)(editor,"h5p"),canUpload=null!==(_ref=permissions.upload&amp;&amp;canShowFilePicker)&amp;&amp;void 0!==_ref&amp;&amp;_ref,canEmbed=null!==(_permissions$embed=permissions.embed)&amp;&amp;void 0!==_permissions$embed&amp;&amp;_permissions$embed,canUploadAndEmbed=canUpload&amp;&amp;canEmbed;return Object.assign({},{elementid:editor.id,canUpload:canUpload,canEmbed:canEmbed,canUploadAndEmbed:canUploadAndEmbed,showOptions:!1,fileURL:null!==(_data$url=null==data?void 0:data.url)&amp;&amp;void 0!==_data$url?_data$url:""},data)},isValidUrl=url=&gt;!!new RegExp("^(https?:\\/\\/)?((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|((\\d{1,3}\\.){3}\\d{1,3}))(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*").test(url),handleDialogueSubmission=async(editor,modal,data)=&gt;{const pendingPromise=new _pending.default("tiny_h5p:handleDialogueSubmission"),form=(0,_normalise.getList)(modal.getRoot())[0].querySelector("form");if(!form)return modal.destroy(),displayDialogue(editor,Object.assign({},data)),void pendingPromise.resolve();const submittedUrl=form.querySelector('input[name="url"]').value,url=((form,submittedUrl)=&gt;{if(!submittedUrl||!submittedUrl.startsWith(_config.default.wwwroot)&amp;&amp;!isValidUrl(submittedUrl))return null;const url=new URL(submittedUrl),downloadElement=form.querySelector('[name="download"]');null!=downloadElement&amp;&amp;downloadElement.checked&amp;&amp;url.searchParams.append("export",1);const embedElement=form.querySelector('[name="embed"]');null!=embedElement&amp;&amp;embedElement.checked&amp;&amp;url.searchParams.append("embed",1);const copyrightElement=form.querySelector('[name="copyright"]');return null!=copyrightElement&amp;&amp;copyrightElement.checked&amp;&amp;url.searchParams.append("copyright",1),url})(form,submittedUrl);if(!url)return modal.destroy(),displayDialogue(editor,Object.assign({},data,{url:submittedUrl,invalidUrl:!0})),void pendingPromise.resolve();const content=await(0,_templates.renderForPromise)("".concat(_common.component,"/content"),{url:url.toString()});editor.selection.moveToBookmark(openingSelection),editor.execCommand("mceInsertContent",!1,content.html),editor.selection.moveToBookmark(openingSelection),pendingPromise.resolve()},getCurrentH5PData=currentH5P=&gt;{const data={};let url;try{url=new URL(currentH5P.textContent)}catch(error){return data}return url.searchParams.has("export")&amp;&amp;(data.download=!0,data.showOptions=!0,url.searchParams.delete("export")),url.searchParams.has("embed")&amp;&amp;(data.embed=!0,data.showOptions=!0,url.searchParams.delete("embed")),url.searchParams.has("copyright")&amp;&amp;(data.copyright=!0,data.showOptions=!0,url.searchParams.delete("copyright")),data.url=url.toString(),data},displayDialogue=async function(editor){let data=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]?arguments[1]:{};const selection=editor.selection.getNode(),currentH5P=selection.closest(".h5p-placeholder");currentH5P&amp;&amp;Object.assign(data,getCurrentH5PData(currentH5P));const modal=await _modal_factory.default.create({type:_modal.default.TYPE,templateContext:getTemplateContext(editor,data),large:!0});modal.show();const $root=modal.getRoot(),root=$root[0];$root.on(_modal_events.default.save,((event,modal)=&gt;{handleDialogueSubmission(editor,modal,data)})),root.addEventListener("click",(e=&gt;{e.target.closest('[data-target="filepicker"]')&amp;&amp;(0,_utils.displayFilepicker)(editor,"h5p").then((params=&gt;{if(""!==params.url){root.querySelector('form input[name="url"]').value=params.url}return params})).catch()}))}}));
define("tiny_link/options",["exports","editor_tiny/options","tiny_link/common"],(function(_exports,_options,_common){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.register=_exports.getPermissions=void 0;
/**
   * Options helper for Tiny Link plugin.
   *
   * @module      tiny_link/options
   * @copyright   2023 Huong Nguyen &lt;huongnv13@gmail.com&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */
const dataName=(0,_options.getPluginOptionName)(_common.pluginName,"data"),permissionsName=(0,_options.getPluginOptionName)(_common.pluginName,"permissions");_exports.register=editor=&gt;{const registerOption=editor.options.register;registerOption(permissionsName,{processor:"object",default:{filepicker:!1}}),registerOption(dataName,{processor:"object"})};_exports.getPermissions=editor=&gt;editor.options.get(permissionsName)}));
define("tiny_link/configuration",["exports","tiny_link/common","editor_tiny/utils"],(function(_exports,_common,_utils){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.configure=void 0;_exports.configure=instanceConfig=&gt;{return{menu:(menu=instanceConfig.menu,menu.insert.items.match(/\blink\b/)?menu.insert.items=menu.insert.items.replace(/\blink\b/,_common.linkButtonShortName):menu.insert.items="".concat(_common.linkButtonShortName," ").concat(menu.insert.items),menu),toolbar:(0,_utils.addToolbarButtons)(instanceConfig.toolbar,"content",[_common.linkButtonShortName,_common.unlinkButtonShortName])};var menu}}));
define("tiny_link/selectors",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0;return _exports.default={actions:{submit:'[data-action="save"]',linkBrowser:".openlinkbrowser"},elements:{urlEntry:".tiny_link_urlentry",urlText:".tiny_link_urltext",openInNewWindow:".tiny_link_newwindow"}},_exports.default}));
define("tiny_link/plugin",["exports","editor_tiny/loader","editor_tiny/utils","tiny_link/common","tiny_link/commands","tiny_link/configuration","tiny_link/options"],(function(_exports,_loader,_utils,_common,Commands,Configuration,Options){function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}
/**
   * Tiny Link plugin for Moodle.
   *
   * @module      tiny_link/plugin
   * @copyright   2023 Huong Nguyen &lt;huongnv13@gmail.com&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,Commands=_interopRequireWildcard(Commands),Configuration=_interopRequireWildcard(Configuration),Options=_interopRequireWildcard(Options);var _default=new Promise((async resolve=&gt;{const[tinyMCE,setupCommands,pluginMetadata]=await Promise.all([(0,_loader.getTinyMCE)(),Commands.getSetup(),(0,_utils.getPluginMetadata)(_common.component,_common.pluginName)]);tinyMCE.PluginManager.add("".concat(_common.component,"/plugin"),(editor=&gt;(Options.register(editor),setupCommands(editor),pluginMetadata))),resolve(["".concat(_common.component,"/plugin"),Configuration])}));return _exports.default=_default,_exports.default}));
define("tiny_link/modal",["exports","core/modal","core/modal_registry"],(function(_exports,_modal,_modal_registry){var _class;function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}function _defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_modal=_interopRequireDefault(_modal),_modal_registry=_interopRequireDefault(_modal_registry);const LinkModal=(_defineProperty(_class=class extends _modal.default{registerEventListeners(){super.registerEventListeners(),this.registerCloseOnSave(),this.registerCloseOnCancel()}},"TYPE","tiny_link/modal"),_defineProperty(_class,"TEMPLATE","tiny_link/modal"),_class);_modal_registry.default.register(LinkModal.TYPE,LinkModal,LinkModal.TEMPLATE);var _default=LinkModal;return _exports.default=_default,_exports.default}));
define("tiny_link/link",["exports","core/templates","core/pending","tiny_link/selectors"],(function(_exports,_templates,_pending,_selectors){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Link helper for Tiny Link plugin.
   *
   * @module      tiny_link/link
   * @copyright   2023 Huong Nguyen &lt;huongnv13@gmail.com&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.unSetLink=_exports.toggleActiveState=_exports.setLink=_exports.getCurrentLinkData=void 0,_templates=_interopRequireDefault(_templates),_pending=_interopRequireDefault(_pending),_selectors=_interopRequireDefault(_selectors);_exports.setLink=(currentForm,editor)=&gt;{let value=currentForm.querySelector(_selectors.default.elements.urlEntry).value;if(""!==value){const pendingPromise=new _pending.default("tiny_link/setLink");value=value.trim();new RegExp(/^[a-zA-Z]*\.*\/|^#|^[a-zA-Z]*:/).test(value)||(value="http://"+value),setLinkOnSelection(currentForm,editor,value).then(pendingPromise.resolve)}};_exports.unSetLink=editor=&gt;{if(editor.hasPlugin("rtc",!0))editor.execCommand("unlink");else{const dom=editor.dom,selection=editor.selection,bookmark=selection.getBookmark(),rng=selection.getRng().cloneRange(),startAnchorElm=dom.getParent(rng.startContainer,"a[href]",editor.getBody()),endAnchorElm=dom.getParent(rng.endContainer,"a[href]",editor.getBody());startAnchorElm&amp;&amp;rng.setStartBefore(startAnchorElm),endAnchorElm&amp;&amp;rng.setEndAfter(endAnchorElm),selection.setRng(rng),editor.execCommand("unlink"),selection.moveToBookmark(bookmark)}};const setLinkOnSelection=async(currentForm,editor,url)=&gt;{const urlText=currentForm.querySelector(_selectors.default.elements.urlText),target=currentForm.querySelector(_selectors.default.elements.openInNewWindow);let textToDisplay=urlText.value.replace(/(&lt;([^&gt;]+)&gt;)/gi,"").trim();""===textToDisplay&amp;&amp;(textToDisplay=url);const context={url:url,newwindow:target.checked};urlText.getAttribute("data-link-on-element")?(context.title=textToDisplay,context.name=editor.selection.getNode().outerHTML):context.name=textToDisplay;const{html:html}=await _templates.default.renderForPromise("tiny_link/embed_link",context),currentLink=getSelectedLink(editor);currentLink?currentLink.outerHTML=html:editor.insertContent(html)};_exports.getCurrentLinkData=editor=&gt;{let properties={};const link=getSelectedLink(editor);if(link){const url=link.getAttribute("href"),target=link.getAttribute("target"),textToDisplay=link.innerText,title=link.getAttribute("title");""!==url&amp;&amp;(properties.url=url),"_blank"===target&amp;&amp;(properties.newwindow=!0),title&amp;&amp;""!==title?properties.urltext=title.trim():""!==textToDisplay&amp;&amp;(properties.urltext=textToDisplay.trim())}else{const selectedNode=editor.selection.getNode();if(selectedNode){const textToDisplay=getTextSelection(editor);""!==textToDisplay?(properties.urltext=textToDisplay.trim(),properties.hasTextToDisplay=!0,properties.hasPlainTextSelected=!0):selectedNode.getAttribute("data-mce-selected")&amp;&amp;(properties.setLinkOnElement=!0)}}return properties};const getSelectedLink=editor=&gt;getAnchorElement(editor),getAnchorElement=(editor,selectedElm)=&gt;(selectedElm=selectedElm||editor.selection.getNode(),editor.dom.getParent(selectedElm,"a[href]")),getTextSelection=editor=&gt;{let selText="";const sel=editor.selection.getSel(),rangeCount=sel.rangeCount;if(rangeCount){let rangeTexts=[];for(let i=0;i&lt;rangeCount;++i)rangeTexts.push(""+sel.getRangeAt(i));selText=rangeTexts.join("")}return selText};_exports.toggleActiveState=editor=&gt;api=&gt;{const updateState=()=&gt;api.setActive(!editor.mode.isReadOnly()&amp;&amp;((editor,selectedElm)=&gt;null!==getAnchorElement(editor,selectedElm))(editor,editor.selection.getNode()));return updateState(),((editor,toggler)=&gt;(editor.on("NodeChange",toggler),()=&gt;editor.off("NodeChange",toggler)))(editor,updateState)}}));
define("tiny_link/common",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0;return _exports.default={pluginName:"tiny_link/plugin",component:"tiny_link",linkButtonName:"link",linkButtonShortName:"tiny_link_link",unlinkButtonName:"unlink",unlinkButtonShortName:"tiny_link_unlink"},_exports.default}));
define("tiny_link/commands",["exports","core/str","tiny_link/common","tiny_link/ui","tiny_link/link"],(function(_exports,_str,_common,_ui,_link){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.getSetup=void 0;_exports.getSetup=async()=&gt;{const[linkButtonText,unlinkButtonText]=await Promise.all([(0,_str.get_string)("link",_common.component),(0,_str.get_string)("unlink",_common.component)]);return editor=&gt;{editor.ui.registry.addToggleButton(_common.linkButtonShortName,{icon:"link",tooltip:linkButtonText,onAction:()=&gt;{(0,_ui.handleAction)(editor)},onSetup:(0,_link.toggleActiveState)(editor)}),editor.ui.registry.addMenuItem(_common.linkButtonShortName,{icon:"link",shortcut:"Meta+K",text:linkButtonText,onAction:()=&gt;{(0,_ui.handleAction)(editor)}}),editor.ui.registry.addToggleButton(_common.unlinkButtonShortName,{icon:"unlink",tooltip:unlinkButtonText,onAction:()=&gt;{(0,_ui.handleAction)(editor,!0)},onSetup:(0,_link.toggleActiveState)(editor)}),editor.shortcuts.add("Meta+K","Shortcut for create link",(()=&gt;{(0,_ui.handleAction)(editor)}))}}}));
define("tiny_link/ui",["exports","editor_tiny/options","core/modal_factory","core/modal_events","editor_tiny/utils","tiny_link/modal","tiny_link/options","tiny_link/link","tiny_link/selectors"],(function(_exports,_options,_modal_factory,_modal_events,_utils,_modal,_options2,_link,_selectors){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Tiny Link UI.
   *
   * @module      tiny_link/ui
   * @copyright   2023 Huong Nguyen &lt;huongnv13@gmail.com&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.handleAction=void 0,_modal_factory=_interopRequireDefault(_modal_factory),_modal_events=_interopRequireDefault(_modal_events),_modal=_interopRequireDefault(_modal),_selectors=_interopRequireDefault(_selectors);_exports.handleAction=function(editor){let unlink=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]&amp;&amp;arguments[1];unlink?(0,_link.unSetLink)(editor):displayDialogue(editor)};const displayDialogue=async editor=&gt;{const modalPromises=await _modal_factory.default.create({type:_modal.default.TYPE,templateContext:getTemplateContext(editor),large:!1});modalPromises.show();const $root=await modalPromises.getRoot(),root=$root[0],currentForm=root.querySelector("form");$root.on(_modal_events.default.hidden,(()=&gt;{modalPromises.destroy()})),root.addEventListener("click",(e=&gt;{const submitAction=e.target.closest(_selectors.default.actions.submit),linkBrowserAction=e.target.closest(_selectors.default.actions.linkBrowser);submitAction&amp;&amp;(e.preventDefault(),(0,_link.setLink)(currentForm,editor),modalPromises.destroy()),linkBrowserAction&amp;&amp;(e.preventDefault(),(0,_utils.displayFilepicker)(editor,"link").then((params=&gt;(filePickerCallback(params,currentForm,editor),modalPromises.destroy()))).catch())}));const linkTitle=root.querySelector(_selectors.default.elements.urlText),linkUrl=root.querySelector(_selectors.default.elements.urlEntry);linkTitle.addEventListener("change",(()=&gt;{linkTitle.value.length&gt;0?linkTitle.dataset.useLinkAsText="false":(linkTitle.dataset.useLinkAsText="true",linkTitle.value=linkUrl.value)})),linkUrl.addEventListener("keyup",(()=&gt;{updateTextToDisplay(currentForm)}))},getTemplateContext=editor=&gt;{const data=(0,_link.getCurrentLinkData)(editor);return Object.assign({},{elementid:editor.id,showfilepicker:(0,_options2.getPermissions)(editor).filepicker&amp;&amp;void 0!==(0,_options.getFilePicker)(editor,"link"),isupdating:Object.keys(data).length&gt;0},data)},filePickerCallback=(params,currentForm,editor)=&gt;{if(params.url){currentForm.querySelector(_selectors.default.elements.urlEntry).value=params.url,(0,_link.setLink)(currentForm,editor)}},updateTextToDisplay=currentForm=&gt;{const urlEntry=currentForm.querySelector(_selectors.default.elements.urlEntry),urlText=currentForm.querySelector(_selectors.default.elements.urlText);"true"===urlText.dataset.useLinkAsText&amp;&amp;(urlText.value=urlEntry.value)}}));
define("tiny_media/options",["exports","editor_tiny/options","./common"],(function(_exports,_options,_common){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.register=_exports.getPermissions=_exports.getImagePermissions=_exports.getEmbedPermissions=_exports.getData=void 0;
/**
   * Options helper for Tiny Media plugin.
   *
   * @module      tiny_media/options
   * @copyright   2022 Huong Nguyen &lt;huongnv13@gmail.com&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */
const dataName=(0,_options.getPluginOptionName)(_common.pluginName,"data"),permissionsName=(0,_options.getPluginOptionName)(_common.pluginName,"permissions");_exports.register=editor=&gt;{const registerOption=editor.options.register;registerOption(permissionsName,{processor:"object",default:{image:{filepicker:!1}}}),registerOption(dataName,{processor:"object"})};const getPermissions=editor=&gt;editor.options.get(permissionsName);_exports.getPermissions=getPermissions;_exports.getImagePermissions=editor=&gt;getPermissions(editor).image;_exports.getEmbedPermissions=editor=&gt;getPermissions(editor).embed;_exports.getData=editor=&gt;editor.options.get(dataName)}));
define("tiny_media/configuration",["exports","./common","editor_tiny/uploader","editor_tiny/utils"],(function(_exports,_common,_uploader,_utils){var obj;
/**
   * Tiny Media configuration.
   *
   * @module      tiny_media/configuration
   * @copyright   2022 Huong Nguyen &lt;huongnv13@gmail.com&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.configure=void 0,_uploader=(obj=_uploader)&amp;&amp;obj.__esModule?obj:{default:obj};_exports.configure=instanceConfig=&gt;{return{contextmenu:(0,_utils.addContextmenuItem)(instanceConfig.contextmenu,_common.imageButtonName,_common.videoButtonName),menu:(menu=instanceConfig.menu,menu.insert.items.match(/\bmedia\b/)?menu.insert.items=menu.insert.items.replace(/\bmedia\b/,_common.videoButtonName):menu.insert.items="".concat(_common.videoButtonName," ").concat(menu.insert.items),menu.insert.items.match(/\bimage\b/)?menu.insert.items=menu.insert.items.replace(/\bimage\b/,_common.imageButtonName):menu.insert.items="".concat(_common.imageButtonName," ").concat(menu.insert.items),menu.tools.items+=" ".concat(_common.mediaManagerButtonName),menu),toolbar:(toolbar=instanceConfig.toolbar,toolbar.map((section=&gt;("content"===section.name&amp;&amp;section.items.unshift(_common.imageButtonName,_common.videoButtonName),section)))),images_upload_handler:(blobInfo,progress)=&gt;(0,_uploader.default)(window.tinymce.activeEditor,"image",blobInfo.blob(),blobInfo.filename(),progress),images_reuse_filename:!0};var toolbar,menu}}));
define("tiny_media/selectors",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0;return _exports.default={IMAGE:{actions:{submit:".tiny_image_urlentrysubmit",imageBrowser:".openimagebrowser"},elements:{form:"form.tiny_image_form",alignment:".tiny_image_alignment",alignSettings:".tiny_image_button",alt:".tiny_image_altentry",altWarning:".tiny_image_altwarning",height:".tiny_image_heightentry",width:".tiny_image_widthentry",url:".tiny_image_urlentry",urlWarning:".tiny_image_urlwarning",size:".tiny_image_size",presentation:".tiny_image_presentation",constrain:".tiny_image_constrain",customStyle:".tiny_image_customstyle",preview:".tiny_image_preview",previewBox:".tiny_image_preview_box"},styles:{responsive:"img-fluid"},alignments:[{name:"verticalAlign",value:"align-top",margin:"0 0.5em",legacyValues:["atto_image_button_text-top"]},{name:"verticalAlign",value:"align-middle",margin:"0 0.5em",legacyValues:["atto_image_button_middle"]},{name:"verticalAlign",value:"align-bottom",margin:"0 0.5em",isDefault:!0,legacyValues:["atto_image_button_text-bottom"]}]},EMBED:{actions:{submit:".tiny_media_submit",mediaBrowser:".openmediabrowser"},elements:{form:"form.tiny_media_form",source:".tiny_media_source",track:".tiny_media_track",mediaSource:".tiny_media_media_source",linkSource:".tiny_media_link_source",linkSize:".tiny_media_link_size",posterSource:".tiny_media_poster_source",posterSize:".tiny_media_poster_size",displayOptions:".tiny_media_display_options",name:".tiny_media_name_entry",title:".tiny_media_title_entry",url:".tiny_media_url_entry",width:".tiny_media_width_entry",height:".tiny_media_height_entry",trackSource:".tiny_media_track_source",trackKind:".tiny_media_track_kind_entry",trackLabel:".tiny_media_track_label_entry",trackLang:".tiny_media_track_lang_entry",trackDefault:".tiny_media_track_default",mediaControl:".tiny_media_controls",mediaAutoplay:".tiny_media_autoplay",mediaMute:".tiny_media_mute",mediaLoop:".tiny_media_loop",advancedSettings:".tiny_media_advancedsettings",linkTab:'li[data-medium-type="link"]',videoTab:'li[data-medium-type="video"]',audioTab:'li[data-medium-type="audio"]',linkPane:'.tab-pane[data-medium-type="link"]',videoPane:'.tab-pane[data-medium-type="video"]',audioPane:'.tab-pane[data-medium-type="audio"]',trackSubtitlesTab:'li[data-track-kind="subtitles"]',trackCaptionsTab:'li[data-track-kind="captions"]',trackDescriptionsTab:'li[data-track-kind="descriptions"]',trackChaptersTab:'li[data-track-kind="chapters"]',trackMetadataTab:'li[data-track-kind="metadata"]',trackSubtitlesPane:'.tab-pane[data-track-kind="subtitles"]',trackCaptionsPane:'.tab-pane[data-track-kind="captions"]',trackDescriptionsPane:'.tab-pane[data-track-kind="descriptions"]',trackChaptersPane:'.tab-pane[data-track-kind="chapters"]',trackMetadataPane:'.tab-pane[data-track-kind="metadata"]'},mediaTypes:{link:"LINK",video:"VIDEO",audio:"AUDIO"},trackKinds:{subtitles:"SUBTITLES",captions:"CAPTIONS",descriptions:"DESCRIPTIONS",chapters:"CHAPTERS",metadata:"METADATA"}}},_exports.default}));
define("tiny_media/plugin",["exports","editor_tiny/loader","editor_tiny/utils","./common","./commands","./configuration","./options"],(function(_exports,_loader,_utils,_common,Commands,Configuration,Options){function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}
/**
   * Tiny Media plugin for Moodle.
   *
   * @module      tiny_media/plugin
   * @copyright   2022 Andrew Lyons &lt;andrew@nicols.co.uk&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,Commands=_interopRequireWildcard(Commands),Configuration=_interopRequireWildcard(Configuration),Options=_interopRequireWildcard(Options);var _default=new Promise((async resolve=&gt;{const[tinyMCE,setupCommands,pluginMetadata]=await Promise.all([(0,_loader.getTinyMCE)(),Commands.getSetup(),(0,_utils.getPluginMetadata)(_common.component,_common.pluginName)]);tinyMCE.PluginManager.add("".concat(_common.component,"/plugin"),(editor=&gt;(Options.register(editor),setupCommands(editor),pluginMetadata))),resolve(["".concat(_common.component,"/plugin"),Configuration])}));return _exports.default=_default,_exports.default}));
define("tiny_media/usedfiles",["exports","core/templates","core/config"],(function(_exports,Templates,_config){var obj;function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,Templates=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}
/**
   * Tiny Media Manager usedfiles.
   *
   * @module      tiny_media/usedfiles
   * @copyright   2022, Stevani Andolo &lt;stevani@hotmail.com.au&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */(Templates),_config=(obj=_config)&amp;&amp;obj.__esModule?obj:{default:obj};class UsedFileManager{constructor(files,userContext,itemId,elementId){this.files=files,this.userContext=userContext,this.itemId=itemId,this.elementId=elementId}getElementId(){return this.elementId}getUsedFiles(){const editor=window.parent.tinymce.EditorManager.get(this.getElementId());if(!editor)return window.console.error("Editor not found for ".concat(this.getElementId())),[];const content=editor.getContent(),baseUrl="".concat(_config.default.wwwroot,"/draftfile.php/").concat(this.userContext,"/user/draft/").concat(this.itemId,"/"),pattern=new RegExp("[\"']"+baseUrl.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&amp;")+"(?&lt;filename&gt;.+?)[\\?\"']","gm");return[...content.matchAll(pattern)].map((match=&gt;decodeURIComponent(match.groups.filename)))}findUnusedFiles(usedFiles){return Object.entries(this.files).filter((_ref=&gt;{let[filename]=_ref;return!usedFiles.includes(filename)})).map((_ref2=&gt;{let[filename]=_ref2;return filename}))}findMissingFiles(usedFiles){return usedFiles.filter((filename=&gt;!this.files.hasOwnProperty(filename)))}updateFiles(){const form=document.querySelector("form"),usedFiles=this.getUsedFiles(),unusedFiles=this.findUnusedFiles(usedFiles),missingFiles=this.findMissingFiles(usedFiles);return form.querySelectorAll('input[type=checkbox][name^="deletefile"]').forEach((checkbox=&gt;{unusedFiles.includes(checkbox.dataset.filename)||checkbox.closest(".fitem").remove()})),form.classList.toggle("has-missing-files",!!missingFiles.length),form.classList.toggle("has-unused-files",!!unusedFiles.length),Templates.renderForPromise("tiny_media/missingfiles",{missingFiles:missingFiles}).then((_ref3=&gt;{let{html:html,js:js}=_ref3;Templates.replaceNodeContents(form.querySelector(".missing-files"),html,js)}))}}_exports.init=(files,usercontext,itemid,elementid)=&gt;{const manager=new UsedFileManager(files,usercontext,itemid,elementid);return manager.updateFiles(),manager}}));
define("tiny_media/image",["exports","core/templates","core/str","core/modal_factory","core/pending","editor_tiny/utils","./selectors","./imagemodal","./options","./common","editor_tiny/options"],(function(_exports,_templates,_str,ModalFactory,_pending,_utils,_selectors,_imagemodal,_options,_common,_options2){function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}function _defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.MediaImage=void 0,_templates=_interopRequireDefault(_templates),ModalFactory=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}(ModalFactory),_pending=_interopRequireDefault(_pending),_selectors=_interopRequireDefault(_selectors),_imagemodal=_interopRequireDefault(_imagemodal);_exports.MediaImage=class{constructor(editor){_defineProperty(this,"DEFAULTS",{WIDTH:160,HEIGHT:160}),_defineProperty(this,"form",null),_defineProperty(this,"rawImageDimensions",null),_defineProperty(this,"canShowFilePicker",!1),_defineProperty(this,"editor",null),_defineProperty(this,"currentModal",null),_defineProperty(this,"selectedImage",null),_defineProperty(this,"imageAlignment",null);const permissions=(0,_options.getImagePermissions)(editor);this.canShowFilePicker=permissions.filepicker&amp;&amp;void 0!==(0,_options2.getFilePicker)(editor,"image"),this.editor=editor}async displayDialogue(){this.rawImageDimensions=null;const currentImageData=await this.getCurrentImageData(),modal=await ModalFactory.create({type:_imagemodal.default.TYPE,title:(0,_str.get_string)("imageproperties","tiny_media"),templateContext:await this.getTemplateContext(currentImageData),removeOnClose:!0,large:!0});this.currentModal=modal,currentImageData&amp;&amp;currentImageData.src&amp;&amp;this.loadPreviewImage(currentImageData.src),await this.registerEventListeners(modal),modal.show()}async getAlignmentTitles(){if(!this.alignmentTitles){const[top,middle,bottom]=await(0,_str.get_strings)(["alignment_top","alignment_middle","alignment_bottom"].map((key=&gt;({key:key,component:_common.component}))));this.alignmentTitles={top:top,middle:middle,bottom:bottom}}return this.alignmentTitles}async getImageAlignment(){let selected=arguments.length&gt;0&amp;&amp;void 0!==arguments[0]?arguments[0]:"";const titles=await this.getAlignmentTitles(),alignments=[{text:titles.top,value:"align-top"},{text:titles.middle,value:"align-middle"},{text:titles.bottom,value:"align-bottom"}];return selected&amp;&amp;alignments.forEach(((alignment,index,array)=&gt;{alignment.value===selected&amp;&amp;(array[index].selected=!0)})),alignments}async getTemplateContext(data){return{elementid:this.editor.id,showfilepicker:this.canShowFilePicker,alignoptions:await this.getImageAlignment(),...data}}async getCurrentImageData(){const selectedImageProperties=this.getSelectedImageProperties();if(!selectedImageProperties)return{};const properties={...selectedImageProperties};return properties.align&amp;&amp;(properties.alignoptions=await this.getImageAlignment(properties.align)),properties.src&amp;&amp;(properties.haspreview=!0),properties.alt||(properties.presentation=!0),properties}filePickerCallback(params,self){if(params.url){self.form.querySelector(_selectors.default.IMAGE.elements.url).value=params.url,self.form.querySelector(_selectors.default.IMAGE.elements.width).value="",self.form.querySelector(_selectors.default.IMAGE.elements.height).value="",self.loadPreviewImage(params.url)}}storeImageDimensions(image){this.rawImageDimensions={width:image.width||this.DEFAULTS.WIDTH,height:image.height||this.DEFAULTS.HEIGHT};const currentWidth=(element=&gt;(""===element.value&amp;&amp;(element.value=this.rawImageDimensions.width),element.value))(this.form.querySelector(_selectors.default.IMAGE.elements.width)),currentHeight=(element=&gt;(""===element.value&amp;&amp;(element.value=this.rawImageDimensions.height),element.value))(this.form.querySelector(_selectors.default.IMAGE.elements.height)),preview=this.form.querySelector(_selectors.default.IMAGE.elements.preview);preview.setAttribute("src",image.src),preview.style.display="inline";const constrain=this.form.querySelector(_selectors.default.IMAGE.elements.constrain);if(this.isPercentageValue(currentWidth)&amp;&amp;this.isPercentageValue(currentHeight))constrain.checked=currentWidth===currentHeight;else if(0===image.width||0===image.height)constrain.disabled="disabled";else{const widthRatio=Math.round(1e3*parseInt(currentWidth,10)/image.width),heightRatio=Math.round(1e3*parseInt(currentHeight,10)/image.height);constrain.checked=widthRatio===heightRatio}}loadPreviewImage(url){const image=new Image;image.addEventListener("error",(()=&gt;{this.form.querySelector(_selectors.default.IMAGE.elements.preview).style.display="none"})),image.addEventListener("load",(()=&gt;{this.storeImageDimensions(image),this.autoAdjustSize()})),image.src=url}urlChanged(){const input=this.form.querySelector(_selectors.default.IMAGE.elements.url);input.value&amp;&amp;this.loadPreviewImage(input.value)}hasErrorUrlField(){const urlError=""===this.form.querySelector(_selectors.default.IMAGE.elements.url).value;return this.toggleVisibility(_selectors.default.IMAGE.elements.urlWarning,urlError),this.toggleAriaInvalid([_selectors.default.IMAGE.elements.url],urlError),urlError}hasErrorAltField(){const alt=this.form.querySelector(_selectors.default.IMAGE.elements.alt).value,presentation=this.form.querySelector(_selectors.default.IMAGE.elements.presentation).checked,imageAltError=""===alt&amp;&amp;!presentation;return this.toggleVisibility(_selectors.default.IMAGE.elements.altWarning,imageAltError),this.toggleAriaInvalid([_selectors.default.IMAGE.elements.alt,_selectors.default.IMAGE.elements.presentation],imageAltError),imageAltError}toggleVisibility(selector,predicate){this.form.querySelectorAll(selector).forEach((element=&gt;{element.style.display=predicate?"block":"none"}))}toggleAriaInvalid(selectors,predicate){selectors.forEach((selector=&gt;{this.form.querySelectorAll(selector).forEach((element=&gt;element.setAttribute("aria-invalid",predicate)))}))}getAlignmentClass(alignment){return alignment}updateWarning(){const urlError=this.hasErrorUrlField(),imageAltError=this.hasErrorAltField();return urlError||imageAltError}getImageContext(){if(this.updateWarning())return null;const classList=[];this.form.querySelector(_selectors.default.IMAGE.elements.constrain).value&amp;&amp;classList.push(_selectors.default.IMAGE.styles.responsive);const alignment=this.getAlignmentClass(this.form.querySelector(_selectors.default.IMAGE.elements.alignment).value);return classList.push(alignment),{url:this.form.querySelector(_selectors.default.IMAGE.elements.url).value,alt:this.form.querySelector(_selectors.default.IMAGE.elements.alt).value,width:this.form.querySelector(_selectors.default.IMAGE.elements.width).value,height:this.form.querySelector(_selectors.default.IMAGE.elements.height).value,presentation:this.form.querySelector(_selectors.default.IMAGE.elements.presentation).checked,customStyle:this.form.querySelector(_selectors.default.IMAGE.elements.customStyle).value,classlist:classList.join(" ")}}setImage(){const pendingPromise=new _pending.default("tiny_media:setImage");if(""===this.form.querySelector(_selectors.default.IMAGE.elements.url).value)return;if(this.updateWarning())return void pendingPromise.resolve();const width=this.form.querySelector(_selectors.default.IMAGE.elements.width).value;if(!this.isPercentageValue(width)&amp;&amp;isNaN(parseInt(width,10)))return this.form.querySelector(_selectors.default.IMAGE.elements.width).focus(),void pendingPromise.resolve();const height=this.form.querySelector(_selectors.default.IMAGE.elements.height).value;if(!this.isPercentageValue(height)&amp;&amp;isNaN(parseInt(height,10)))return this.form.querySelector(_selectors.default.IMAGE.elements.height).focus(),void pendingPromise.resolve();_templates.default.render("tiny_media/image",this.getImageContext()).then((html=&gt;(this.editor.insertContent(html),this.currentModal.destroy(),pendingPromise.resolve(),html))).catch()}handleKeyupCharacterCount(){const alt=this.form.querySelector(_selectors.default.IMAGE.elements.alt).value;this.form.querySelector("#currentcount").innerHTML=alt.length}autoAdjustSize(){let forceHeight=arguments.length&gt;0&amp;&amp;void 0!==arguments[0]&amp;&amp;arguments[0];if(!this.rawImageDimensions)return;const widthField=this.form.querySelector(_selectors.default.IMAGE.elements.width),heightField=this.form.querySelector(_selectors.default.IMAGE.elements.height),normalizeFieldData=fieldData=&gt;(fieldData.isPercentageValue=!!this.isPercentageValue(fieldData.field.value),fieldData.isPercentageValue?(fieldData.percentValue=parseInt(fieldData.field.value,10),fieldData.pixelSize=this.rawImageDimensions[fieldData.type]/100*fieldData.percentValue):(fieldData.pixelSize=parseInt(fieldData.field.value,10),fieldData.percentValue=fieldData.pixelSize/this.rawImageDimensions[fieldData.type]*100),fieldData),imagePreview=this.form.querySelector(_selectors.default.IMAGE.elements.preview);imagePreview.style.width="",imagePreview.style.height="";const constrainField=this.form.querySelector(_selectors.default.IMAGE.elements.constrain),keyField=(()=&gt;{const currentValue=forceHeight?{field:heightField,type:"height"}:{field:widthField,type:"width"};return""===currentValue.field.value&amp;&amp;(currentValue.field.value=this.rawImageDimensions[currentValue.type]),normalizeFieldData(currentValue)})(),relativeField=normalizeFieldData(forceHeight?{field:widthField,type:"width"}:{field:heightField,type:"height"});constrainField.checked&amp;&amp;(keyField.isPercentageValue?(relativeField.field.value=keyField.field.value,relativeField.percentValue=keyField.percentValue):(relativeField.pixelSize=Math.round(keyField.pixelSize/this.rawImageDimensions[keyField.type]*this.rawImageDimensions[relativeField.type]),relativeField.field.value=relativeField.pixelSize)),function(image,keyField,relativeField){let forceHeight=arguments.length&gt;3&amp;&amp;void 0!==arguments[3]&amp;&amp;arguments[3];const getStyleValue=field=&gt;field.isPercentageValue?"".concat(field.percentValue,"%"):"".concat(field.pixelSize,"px");forceHeight?"width"===keyField.type?image.style.width=getStyleValue(keyField):image.style.width=getStyleValue(relativeField):(image.style[keyField.type]=getStyleValue(keyField),image.style[relativeField.type]=getStyleValue(relativeField))}(imagePreview,keyField,relativeField,!!constrainField.checked)}getSelectedImageProperties(){const image=this.getSelectedImage();if(!image)return this.selectedImage=null,null;const properties={src:null,alt:null,width:null,height:null,align:"",presentation:!1};this.removeLegacyAlignment(image),this.selectedImage=image,properties.customStyle=image.style.cssText;const width=(image=&gt;this.isPercentageValue(String(image.width))?image.width:parseInt(image.width,10))(image);0!==width&amp;&amp;(properties.width=width);const height=(image=&gt;this.isPercentageValue(String(image.height))?image.height:parseInt(image.height,10))(image);0!==height&amp;&amp;(properties.height=height);const alignment=this.getAlignmentProperties(image,properties);return alignment&amp;&amp;(properties.align=alignment.value),properties.src=image.getAttribute("src"),properties.alt=image.getAttribute("alt")||"",properties.presentation="presentation"===image.getAttribute("role"),properties}removeLegacyAlignment(imageNode){return imageNode.style.margin?(_selectors.default.IMAGE.alignments.some((alignment=&gt;{if(imageNode.style[alignment.name]!==alignment.value)return!1;const normalisedNode=document.createElement("div");return normalisedNode.style.margin=alignment.margin,imageNode.style.margin===normalisedNode.style.margin&amp;&amp;(imageNode.classList.add(this.getAlignmentClass(alignment.value)),imageNode.style[alignment.name]=null,imageNode.style.margin=null,!0)})),imageNode):imageNode}getAlignmentProperties(image){const currentAlignment=_selectors.default.IMAGE.alignments.find((alignment=&gt;!!image.classList.contains(this.getAlignmentClass(alignment.value))||!!alignment.legacyValues&amp;&amp;alignment.legacyValues.some((legacyValue=&gt;image.classList.contains(legacyValue)))));return currentAlignment||_selectors.default.IMAGE.alignments.find((alignment=&gt;alignment.isDefault))}getSelectedImage(){const imgElm=this.editor.selection.getNode(),figureElm=this.editor.dom.getParent(imgElm,"figure.image");return figureElm?this.editor.dom.select("img",figureElm)[0]:imgElm&amp;&amp;("IMG"!==imgElm.nodeName.toUpperCase()||this.isPlaceholderImage(imgElm))?null:imgElm}isPlaceholderImage(imgElm){return"IMG"===imgElm.nodeName.toUpperCase()&amp;&amp;(imgElm.hasAttribute("data-mce-object")||imgElm.hasAttribute("data-mce-placeholder"))}isPercentageValue(value){return value.match(/\d+%/)}async registerEventListeners(modal){await modal.getBody();const root=modal.getRoot()[0];this.form=root.querySelector(_selectors.default.IMAGE.elements.form),root.addEventListener("click",(e=&gt;{const submitAction=e.target.closest(_selectors.default.IMAGE.actions.submit),imageBrowserAction=e.target.closest(_selectors.default.IMAGE.actions.imageBrowser);submitAction&amp;&amp;(e.preventDefault(),this.setImage()),imageBrowserAction&amp;&amp;this.canShowFilePicker&amp;&amp;(e.preventDefault(),(0,_utils.displayFilepicker)(this.editor,"image").then((params=&gt;{this.filePickerCallback(params,this)})).catch())})),root.addEventListener("change",(e=&gt;{e.target.closest(_selectors.default.IMAGE.elements.url)&amp;&amp;this.hasErrorUrlField();e.target.closest(_selectors.default.IMAGE.elements.presentation)&amp;&amp;this.hasErrorAltField();e.target.closest(_selectors.default.IMAGE.elements.constrain)&amp;&amp;this.autoAdjustSize(!0)})),root.addEventListener("blur",(e=&gt;{if(e.target.nodeType===Node.ELEMENT_NODE){e.target.closest(_selectors.default.IMAGE.elements.url)&amp;&amp;this.urlChanged();e.target.closest(_selectors.default.IMAGE.elements.alt)&amp;&amp;this.hasErrorAltField();e.target.closest(_selectors.default.IMAGE.elements.width)&amp;&amp;this.autoAdjustSize();e.target.closest(_selectors.default.IMAGE.elements.height)&amp;&amp;this.autoAdjustSize(!0)}}),!0),root.addEventListener("keyup",(e=&gt;{e.target.closest(_selectors.default.IMAGE.elements.alt)&amp;&amp;this.handleKeyupCharacterCount()}))}}}));
define("tiny_media/embed",["exports","core/templates","core/str","core/modal_factory","core/modal_events","editor_tiny/utils","editor_tiny/options","./common","./embedmodal","./selectors","./options"],(function(_exports,_templates,_str,ModalFactory,ModalEvents,_utils,_options,_common,_embedmodal,_selectors,_options2){function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}function _defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.MediaEmbed=void 0,_templates=_interopRequireDefault(_templates),ModalFactory=_interopRequireWildcard(ModalFactory),ModalEvents=_interopRequireWildcard(ModalEvents),_embedmodal=_interopRequireDefault(_embedmodal),_selectors=_interopRequireDefault(_selectors);_exports.MediaEmbed=class{constructor(editor){_defineProperty(this,"editor",null),_defineProperty(this,"canShowFilePicker",!1),_defineProperty(this,"canShowFilePickerPoster",!1),_defineProperty(this,"canShowFilePickerTrack",!1),_defineProperty(this,"helpStrings",null),_defineProperty(this,"isUpdating",!1),_defineProperty(this,"selectedMedia",null);const permissions=(0,_options2.getEmbedPermissions)(editor);this.canShowFilePicker=permissions.filepicker&amp;&amp;void 0!==(0,_options.getFilePicker)(editor,"media"),this.canShowFilePickerPoster=permissions.filepicker&amp;&amp;void 0!==(0,_options.getFilePicker)(editor,"image"),this.canShowFilePickerTrack=permissions.filepicker&amp;&amp;void 0!==(0,_options.getFilePicker)(editor,"subtitle"),this.editor=editor}async getHelpStrings(){if(!this.helpStrings){const[addSource,tracks,subtitles,captions,descriptions,chapters,metadata]=await(0,_str.get_strings)(["addsource_help","tracks_help","subtitles_help","captions_help","descriptions_help","chapters_help","metadata_help"].map((key=&gt;({key:key,component:_common.component}))));this.helpStrings={addSource:addSource,tracks:tracks,subtitles:subtitles,captions:captions,descriptions:descriptions,chapters:chapters,metadata:metadata}}return this.helpStrings}async getTemplateContext(data){const languages=this.prepareMoodleLang(),helpIcons=Array.from(Object.entries(await this.getHelpStrings())).forEach((_ref=&gt;{let[key,text]=_ref;data["".concat(key.toLowerCase(),"helpicon")]={text:text}}));return Object.assign({},{elementid:this.editor.getElement().id,showfilepicker:this.canShowFilePicker,showfilepickerposter:this.canShowFilePickerPoster,showfilepickertrack:this.canShowFilePickerTrack,langsinstalled:languages.installed,langsavailable:languages.available,link:!0,video:!1,audio:!1,isupdating:this.isUpdating},data,helpIcons)}async displayDialogue(){this.selectedMedia=this.getSelectedMedia();const data=Object.assign({},this.getCurrentEmbedData());this.isUpdating=0!==Object.keys(data).length;const modal=await ModalFactory.create({type:_embedmodal.default.TYPE,title:(0,_str.get_string)("createmedia","tiny_media"),templateContext:await this.getTemplateContext(data),removeOnClose:!0,large:!0});this.currentModal=modal,await this.registerEventListeners(modal),modal.show()}getCurrentEmbedData(){const properties=this.getMediumProperties();if(!properties)return{};const processedProperties={};return processedProperties[properties.type.toLowerCase()]=properties,processedProperties.link=!1,processedProperties}getSelectedMedia(){const mediaElm=this.editor.selection.getNode();return mediaElm?"video"===mediaElm.nodeName.toLowerCase()||"audio"===mediaElm.nodeName.toLowerCase()?mediaElm:mediaElm.querySelector("video")?mediaElm.querySelector("video"):mediaElm.querySelector("audio")?mediaElm.querySelector("audio"):null:null}getMediumProperties(){const boolAttr=(elem,attr)=&gt;elem.hasAttribute(attr)&amp;&amp;(elem.getAttribute(attr)||""===elem.getAttribute(attr)),tracks={subtitles:[],captions:[],descriptions:[],chapters:[],metadata:[]},sources=[],medium=this.selectedMedia;return medium?(medium.querySelectorAll("track").forEach((track=&gt;{tracks[track.getAttribute("kind")].push({src:track.getAttribute("src"),srclang:track.getAttribute("srclang"),label:track.getAttribute("label"),defaultTrack:boolAttr(track,"default")})})),medium.querySelectorAll("source").forEach((source=&gt;{sources.push(source.src)})),{type:"video"===medium.nodeName.toLowerCase()?_selectors.default.EMBED.mediaTypes.video:_selectors.default.EMBED.mediaTypes.audio,sources:sources,poster:medium.getAttribute("poster"),title:medium.getAttribute("title"),width:medium.getAttribute("width"),height:medium.getAttribute("height"),autoplay:boolAttr(medium,"autoplay"),loop:boolAttr(medium,"loop"),muted:boolAttr(medium,"muted"),controls:boolAttr(medium,"controls"),tracks:tracks}):null}prepareMoodleLang(){const moodleLangs=(0,_options.getMoodleLang)(this.editor),currentLanguage=(0,_options.getCurrentLanguage)(this.editor);return{installed:Object.entries(moodleLangs.installed).map((_ref2=&gt;{let[lang,code]=_ref2;return{lang:lang,code:code,default:lang===currentLanguage}})),available:Object.entries(moodleLangs.available).map((_ref3=&gt;{let[lang,code]=_ref3;return{lang:lang,code:code,default:lang===currentLanguage}}))}}getMoodleLangObj(subtitleLang){const{available:available}=(0,_options.getMoodleLang)(this.editor);return available[subtitleLang]?{lang:subtitleLang,code:available[subtitleLang]}:null}filePickerCallback(params,element,fpType){if(""!==params.url){const tabPane=element.closest(".tab-pane");if(element.closest(_selectors.default.EMBED.elements.source).querySelector(_selectors.default.EMBED.elements.url).value=params.url,tabPane.id===this.editor.getElement().id+"_"+_selectors.default.EMBED.mediaTypes.link.toLowerCase()&amp;&amp;(tabPane.querySelector(_selectors.default.EMBED.elements.name).value=params.file),"subtitle"===fpType){const subtitleLang=params.file.split(".vtt")[0].split("-").slice(-1)[0],langObj=this.getMoodleLangObj(subtitleLang);if(langObj){const track=element.closest(_selectors.default.EMBED.elements.track);track.querySelector(_selectors.default.EMBED.elements.trackLabel).value=langObj.lang.trim(),track.querySelector(_selectors.default.EMBED.elements.trackLang).value=langObj.code}}}}addMediaSourceComponent(element,callback){const sourceElement=element.closest(_selectors.default.EMBED.elements.source+_selectors.default.EMBED.elements.mediaSource),clone=sourceElement.cloneNode(!0);sourceElement.querySelector(".removecomponent-wrapper").classList.remove("hidden"),sourceElement.querySelector(".addcomponent-wrapper").classList.add("hidden"),sourceElement.parentNode.insertBefore(clone,sourceElement.nextSibling),callback&amp;&amp;callback(clone)}removeMediaSourceComponent(element){element.closest(_selectors.default.EMBED.elements.source+_selectors.default.EMBED.elements.mediaSource).remove()}addTrackComponent(element,callback){const trackElement=element.closest(_selectors.default.EMBED.elements.track),clone=trackElement.cloneNode(!0);trackElement.querySelector(".removecomponent-wrapper").classList.remove("hidden"),trackElement.querySelector(".addcomponent-wrapper").classList.add("hidden"),trackElement.parentNode.insertBefore(clone,trackElement.nextSibling),callback&amp;&amp;callback(clone)}removeTrackComponent(element){element.closest(_selectors.default.EMBED.elements.track).remove()}getMediumTypeFromTabPane(tabPane){return tabPane.getAttribute("data-medium-type")}getTrackTypeFromTabPane(tabPane){return tabPane.getAttribute("data-track-kind")}getMediaHTML(form){const mediumType=this.getMediumTypeFromTabPane(form.querySelector(".root.tab-content &gt; .tab-pane.active")),tabContent=form.querySelector(_selectors.default.EMBED.elements[mediumType.toLowerCase()+"Pane"]);return this["getMediaHTML"+mediumType[0].toUpperCase()+mediumType.substr(1)](tabContent)}getMediaHTMLLink(tab){const context={url:tab.querySelector(_selectors.default.EMBED.elements.url).value,name:tab.querySelector(_selectors.default.EMBED.elements.name).value||!1};return context.url?_templates.default.renderForPromise("tiny_media/embed_media_link",context):""}getMediaHTMLVideo(tab){const context=this.getContextForMediaHTML(tab);return context.width=tab.querySelector(_selectors.default.EMBED.elements.width).value||!1,context.height=tab.querySelector(_selectors.default.EMBED.elements.height).value||!1,context.poster=tab.querySelector("".concat(_selectors.default.EMBED.elements.posterSource," ").concat(_selectors.default.EMBED.elements.url)).value||!1,context.sources.length?_templates.default.renderForPromise("tiny_media/embed_media_video",context):""}getMediaHTMLAudio(tab){const context=this.getContextForMediaHTML(tab);return context.sources.length?_templates.default.renderForPromise("tiny_media/embed_media_audio",context):""}getContextForMediaHTML(tab){const tracks=Array.from(tab.querySelectorAll(_selectors.default.EMBED.elements.track)).map((track=&gt;({track:track.querySelector(_selectors.default.EMBED.elements.trackSource+" "+_selectors.default.EMBED.elements.url).value,kind:this.getTrackTypeFromTabPane(track.closest(".tab-pane")),label:track.querySelector(_selectors.default.EMBED.elements.trackLabel).value||track.querySelector(_selectors.default.EMBED.elements.trackLang).value,srclang:track.querySelector(_selectors.default.EMBED.elements.trackLang).value,defaultTrack:track.querySelector(_selectors.default.EMBED.elements.trackDefault).checked?"true":null}))).filter((track=&gt;!!track.track));return{sources:Array.from(tab.querySelectorAll(_selectors.default.EMBED.elements.mediaSource+" "+_selectors.default.EMBED.elements.url)).filter((source=&gt;!!source.value)).map((source=&gt;source.value)),description:tab.querySelector(_selectors.default.EMBED.elements.mediaSource+" "+_selectors.default.EMBED.elements.url).value||!1,tracks:tracks,showControls:tab.querySelector(_selectors.default.EMBED.elements.mediaControl).checked,autoplay:tab.querySelector(_selectors.default.EMBED.elements.mediaAutoplay).checked,muted:tab.querySelector(_selectors.default.EMBED.elements.mediaMute).checked,loop:tab.querySelector(_selectors.default.EMBED.elements.mediaLoop).checked,title:tab.querySelector(_selectors.default.EMBED.elements.title).value||!1}}getFilepickerTypeFromElement(element){return element.closest(_selectors.default.EMBED.elements.posterSource)?"image":element.closest(_selectors.default.EMBED.elements.trackSource)?"subtitle":"media"}async clickHandler(e){const element=e.target;if(element.closest(_selectors.default.EMBED.actions.mediaBrowser)){e.preventDefault();const fpType=this.getFilepickerTypeFromElement(element),params=await(0,_utils.displayFilepicker)(this.editor,fpType);this.filePickerCallback(params,element,fpType)}element.closest(_selectors.default.EMBED.elements.mediaSource+" .addcomponent")&amp;&amp;(e.preventDefault(),this.addMediaSourceComponent(element));element.closest(_selectors.default.EMBED.elements.mediaSource+" .removecomponent")&amp;&amp;(e.preventDefault(),this.removeMediaSourceComponent(element));element.closest(_selectors.default.EMBED.elements.track+" .addcomponent")&amp;&amp;(e.preventDefault(),this.addTrackComponent(element));element.closest(_selectors.default.EMBED.elements.track+" .removecomponent")&amp;&amp;(e.preventDefault(),this.removeTrackComponent(element));const trackDefaultAction=element.closest(_selectors.default.EMBED.elements.trackDefault);if(trackDefaultAction&amp;&amp;trackDefaultAction.checked){const getKind=el=&gt;this.getTrackTypeFromTabPane(el.parentElement.closest(".tab-pane"));element.parentElement.closest(".root.tab-content").querySelectorAll(_selectors.default.EMBED.elements.trackDefault).forEach((select=&gt;{select!==element&amp;&amp;getKind(element)===getKind(select)&amp;&amp;(select.checked=!1)}))}}async handleDialogueSubmission(event,modal){const{html:html}=await this.getMediaHTML(modal.getRoot()[0]);html&amp;&amp;(this.isUpdating?(this.selectedMedia.outerHTML=html,this.isUpdating=!1):this.editor.insertContent(html))}async registerEventListeners(modal){await modal.getBody();const $root=modal.getRoot(),root=$root[0];(this.canShowFilePicker||this.canShowFilePickerPoster||this.canShowFilePickerTrack)&amp;&amp;root.addEventListener("click",this.clickHandler.bind(this)),$root.on(ModalEvents.save,this.handleDialogueSubmission.bind(this)),$root.on(ModalEvents.hidden,(()=&gt;{this.currentModal.destroy()})),$root.on(ModalEvents.shown,(()=&gt;{root.querySelectorAll(_selectors.default.EMBED.elements.trackLang).forEach((dropdown=&gt;{const defaultVal=dropdown.getAttribute("data-value");defaultVal&amp;&amp;(dropdown.value=defaultVal)}))}))}}}));
define("tiny_media/manager",["exports","core/templates","core/str","core/modal_factory","core/modal_events","./options","core/config"],(function(_exports,_templates,_str,Modal,ModalEvents,_options,_config){function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}function _defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.MediaManager=void 0,_templates=_interopRequireDefault(_templates),Modal=_interopRequireWildcard(Modal),ModalEvents=_interopRequireWildcard(ModalEvents),_config=_interopRequireDefault(_config);_exports.MediaManager=class{constructor(editor){_defineProperty(this,"editor",null),_defineProperty(this,"area",null),_defineProperty(this,"displayDialogue",(()=&gt;{Modal.create({type:Modal.types.DEFAULT,large:!0,title:(0,_str.get_string)("mediamanagerproperties","tiny_media"),body:_templates.default.render("tiny_media/mm_iframe",{src:this.getIframeURL()})}).then((modal=&gt;(modal.getRoot().on(ModalEvents.bodyRendered,(()=&gt;{this.selectFirstElement()})),modal.getRoot().on(ModalEvents.hidden,(()=&gt;{modal.destroy()})),modal.show(),document.querySelector(".modal-lg").style.cssText="max-width: 850px",modal))).catch()})),_defineProperty(this,"selectFirstElement",(()=&gt;{const iframe=document.getElementById("mm-iframe");iframe.addEventListener("load",(function(){let intervalId=setInterval((function(){const iDocument=iframe.contentWindow.document;if(iDocument.querySelector(".filemanager")){const firstFocusableElement=iDocument.querySelector(".fp-navbar a:not([disabled])");firstFocusableElement&amp;&amp;firstFocusableElement.focus(),clearInterval(intervalId)}}),200)}))})),_defineProperty(this,"getIframeURL",(()=&gt;{const url=new URL("".concat(_config.default.wwwroot,"/lib/editor/tiny/plugins/media/manage.php"));url.searchParams.append("elementid",this.editor.getElement().id);for(const key in this.area)url.searchParams.append(key,this.area[key]);return url.toString()})),this.editor=editor;const data=(0,_options.getData)(editor);this.area=data.params.area,this.area.itemid=data.fpoptions.image.itemid}}}));
define("tiny_media/common",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0;return _exports.default={pluginName:"tiny_media/plugin",component:"tiny_media",imageButtonName:"tiny_media_image",videoButtonName:"tiny_media_video",mediaManagerButtonName:"tiny_mediamanager"},_exports.default}));
define("tiny_media/embedmodal",["exports","core/modal","core/modal_registry","./common"],(function(_exports,_modal,_modal_registry,_common){var _class;function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}function _defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_modal=_interopRequireDefault(_modal),_modal_registry=_interopRequireDefault(_modal_registry);const EmbedModal=(_defineProperty(_class=class extends _modal.default{registerEventListeners(){super.registerEventListeners(),this.registerCloseOnSave(),this.registerCloseOnCancel()}},"TYPE","".concat(_common.component,"/modal")),_defineProperty(_class,"TEMPLATE","".concat(_common.component,"/embed_media_modal")),_class);_modal_registry.default.register(EmbedModal.TYPE,EmbedModal,EmbedModal.TEMPLATE);var _default=EmbedModal;return _exports.default=_default,_exports.default}));
define("tiny_media/imagemodal",["exports","core/modal","core/modal_registry","./common"],(function(_exports,_modal,_modal_registry,_common){var _class;function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}function _defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_modal=_interopRequireDefault(_modal),_modal_registry=_interopRequireDefault(_modal_registry);const ImageModal=(_defineProperty(_class=class extends _modal.default{registerEventListeners(){super.registerEventListeners(),this.registerCloseOnSave(),this.registerCloseOnCancel()}},"TYPE","".concat(_common.component,"/imagemodal")),_defineProperty(_class,"TEMPLATE","".concat(_common.component,"/insert_image_modal")),_class);_modal_registry.default.register(ImageModal.TYPE,ImageModal,ImageModal.TEMPLATE);var _default=ImageModal;return _exports.default=_default,_exports.default}));
define("tiny_media/commands",["exports","core/str","./common","./image","./embed","./manager","editor_tiny/utils"],(function(_exports,_str,_common,_image,_embed,_manager,_utils){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.getSetup=void 0;
/**
   * Tiny Media commands.
   *
   * @module      tiny_media/commands
   * @copyright   2022 Huong Nguyen &lt;huongnv13@gmail.com&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */
const isImage=node=&gt;"img"===node.nodeName.toLowerCase(),isVideo=node=&gt;"video"===node.nodeName.toLowerCase()||"audio"===node.nodeName.toLowerCase();_exports.getSetup=async()=&gt;{const[imageButtonText,mediaButtonText,mediaManagerButtonText]=await(0,_str.get_strings)(["imagebuttontitle","mediabuttontitle","mediamanagerbuttontitle"].map((key=&gt;({key:key,component:_common.component})))),[mediaManagerButtonImage]=await Promise.all([(0,_utils.getButtonImage)("filemanager",_common.component)]);return editor=&gt;{((editor,imageButtonText)=&gt;{const handleImageAction=()=&gt;{new _image.MediaImage(editor).displayDialogue()};editor.ui.registry.addToggleButton(_common.imageButtonName,{icon:"image",tooltip:imageButtonText,onAction:handleImageAction,onSetup:api=&gt;editor.selection.selectorChangedWithUnbind("img:not([data-mce-object]):not([data-mce-placeholder]),figure.image",api.setActive).unbind}),editor.ui.registry.addMenuItem(_common.imageButtonName,{icon:"image",text:imageButtonText,onAction:handleImageAction}),editor.ui.registry.addContextToolbar(_common.imageButtonName,{predicate:isImage,items:_common.imageButtonName,position:"node",scope:"node"}),editor.ui.registry.addContextMenu(_common.imageButtonName,{update:isImage})})(editor,imageButtonText),((editor,videoButtonText)=&gt;{const handleEmbedAction=()=&gt;{new _embed.MediaEmbed(editor).displayDialogue()};editor.ui.registry.addToggleButton(_common.videoButtonName,{icon:"embed",tooltip:videoButtonText,onAction:handleEmbedAction,onSetup:api=&gt;editor.selection.selectorChangedWithUnbind("video:not([data-mce-object]):not([data-mce-placeholder]),audio:not([data-mce-object]):not([data-mce-placeholder])",api.setActive).unbind}),editor.ui.registry.addMenuItem(_common.videoButtonName,{icon:"embed",text:videoButtonText,onAction:handleEmbedAction}),editor.ui.registry.addContextMenu(_common.videoButtonName,{update:isVideo}),editor.ui.registry.addContextToolbar(_common.videoButtonName,{predicate:isVideo,items:_common.videoButtonName,position:"node",scope:"node"})})(editor,mediaButtonText),((editor,mediaManagerButtonText,mediaManagerButtonImage)=&gt;{const handleMediaManager=()=&gt;{new _manager.MediaManager(editor).displayDialogue()};editor.ui.registry.addIcon("filemanager",mediaManagerButtonImage.html),editor.ui.registry.addButton(_common.mediaManagerButtonName,{icon:"filemanager",tooltip:mediaManagerButtonText,onAction:()=&gt;{handleMediaManager()}}),editor.ui.registry.addMenuItem(_common.mediaManagerButtonName,{icon:"filemanager",text:mediaManagerButtonText,onAction:()=&gt;{handleMediaManager()}})})(editor,mediaManagerButtonText,mediaManagerButtonImage)}}}));
define("tiny_recordrtc/base_recorder",["exports","core/str","./common","core/pending","./options","editor_tiny/uploader","core/toast","core/modal_events","core/modal_factory","core/templates","core/notification","core/prefetch"],(function(_exports,_str,_common,_pending,_options,_uploader,_toast,ModalEvents,ModalFactory,Templates,_notification,_prefetch){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_pending=_interopRequireDefault(_pending),_uploader=_interopRequireDefault(_uploader),ModalEvents=_interopRequireWildcard(ModalEvents),ModalFactory=_interopRequireWildcard(ModalFactory),Templates=_interopRequireWildcard(Templates);var _systemImportTransformerGlobalIdentifier="undefined"!=typeof window?window:"undefined"!=typeof self?self:"undefined"!=typeof global?global:{};function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}return _exports.default=class{constructor(editor,modal){var obj,key,value;value=!1,(key="stopRequested")in(obj=this)?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,this.ready=!1,this.checkAndWarnAboutBrowserCompatibility()&amp;&amp;(this.editor=editor,this.config=(0,_options.getData)(editor).params,this.modal=modal,this.modalRoot=modal.getRoot()[0],this.startStopButton=this.modalRoot.querySelector('button[data-action="startstop"]'),this.uploadButton=this.modalRoot.querySelector('button[data-action="upload"]'),this.setRecordButtonState(!1),this.player=this.configurePlayer(),this.registerEventListeners(),this.ready=!0,this.captureUserMedia(),this.prefetchContent())}isReady(){return this.ready}configurePlayer(){throw new Error("configurePlayer() must be implemented in ".concat(this.constructor.name))}getSupportedTypes(){throw new Error("getSupportedTypes() must be implemented in ".concat(this.constructor.name))}getRecordingOptions(){throw new Error("getRecordingOptions() must be implemented in ".concat(this.constructor.name))}getFileName(prefix){throw new Error("getFileName() must be implemented in ".concat(this.constructor.name))}getMediaConstraints(){throw new Error("getMediaConstraints() must be implemented in ".concat(this.constructor.name))}playOnCapture(){return!1}getTimeLimit(){throw new Error("getTimeLimit() must be implemented in ".concat(this.constructor.name))}getEmbedTemplateName(){throw new Error("getEmbedTemplateName() must be implemented in ".concat(this.constructor.name))}static getModalClass(){throw new Error("getModalClass() must be implemented in ".concat(this.constructor.name))}getParsedRecordingOptions(){const compatTypes=this.getSupportedTypes().reduce(((result,type)=&gt;(result.push(type),result.push(type.replace("=",":")),result)),[]).filter((type=&gt;window.MediaRecorder.isTypeSupported(type))),options=this.getRecordingOptions();return 0!==compatTypes.length&amp;&amp;(options.mimeType=compatTypes[0]),window.console.info("Selected codec ".concat(options.mimeType," from ").concat(compatTypes.length," options."),compatTypes),options}async captureUserMedia(){try{const stream=await navigator.mediaDevices.getUserMedia(this.getMediaConstraints());this.handleCaptureSuccess(stream)}catch(error){this.handleCaptureFailure(error)}}prefetchContent(){(0,_prefetch.prefetchStrings)(_common.component,["uploading","recordagain_title","recordagain_desc","discard_title","discard_desc","confirm_yes","recordinguploaded","maxfilesizehit","maxfilesizehit_title","uploadfailed"]),(0,_prefetch.prefetchTemplates)([this.getEmbedTemplateName(),"tiny_recordrtc/timeremaining"])}async displayAlert(title,content){const pendingPromise=new _pending.default("core/confirm:alert"),ModalFactory=await("function"==typeof _systemImportTransformerGlobalIdentifier.define&amp;&amp;_systemImportTransformerGlobalIdentifier.define.amd?new Promise((function(resolve,reject){_systemImportTransformerGlobalIdentifier.require(["core/modal_factory"],resolve,reject)})):"undefined"!=typeof module&amp;&amp;module.exports&amp;&amp;"undefined"!=typeof require||"undefined"!=typeof module&amp;&amp;module.component&amp;&amp;_systemImportTransformerGlobalIdentifier.require&amp;&amp;"component"===_systemImportTransformerGlobalIdentifier.require.loader?Promise.resolve(require("core/modal_factory")):Promise.resolve(_systemImportTransformerGlobalIdentifier["core/modal_factory"])),modal=await ModalFactory.create({type:ModalFactory.types.ALERT,title:title,body:content,removeOnClose:!0});return modal.show(),pendingPromise.resolve(),modal}handleCaptureSuccess(stream){this.player.srcObject=stream,this.playOnCapture()&amp;&amp;(this.player.muted=!0,this.player.play()),this.stream=stream,this.setupPlayerSource(),this.setRecordButtonState(!0)}setupPlayerSource(){this.player.srcObject||(this.player.srcObject=this.stream,this.player.muted=!0,this.player.play())}setRecordButtonState(enabled){this.startStopButton.disabled=!enabled}setRecordButtonVisibility(visible){this.getButtonContainer("start-stop").classList.toggle("hide",!visible)}setUploadButtonState(enabled){this.uploadButton.disabled=!enabled}setUploadButtonVisibility(visible){this.getButtonContainer("upload").classList.toggle("hide",!visible)}handleCaptureFailure(error){var subject="gum".concat(error.name.replace("Error","").toLowerCase());this.displayAlert((0,_str.get_string)("".concat(subject,"_title"),_common.component),(0,_str.get_string)(subject,_common.component))}close(){this.modal.hide()}registerEventListeners(){this.modalRoot.addEventListener("click",this.handleModalClick.bind(this)),this.modal.getRoot().on(ModalEvents.outsideClick,this.outsideClickHandler.bind(this)),this.modal.getRoot().on(ModalEvents.hidden,(()=&gt;{this.cleanupStream(),this.requestRecordingStop()}))}async outsideClickHandler(event){if(this.isRecording())event.preventDefault();else if(this.hasData()){event.preventDefault();try{await(0,_notification.saveCancelPromise)(await(0,_str.get_string)("discard_title",_common.component),await(0,_str.get_string)("discard_desc",_common.component),await(0,_str.get_string)("confirm_yes",_common.component)),this.modal.hide()}catch(error){}}}handleModalClick(event){const button=event.target.closest("button");if(button&amp;&amp;button.dataset.action){const action=button.dataset.action;"startstop"===action&amp;&amp;this.handleRecordingStartStopRequested(),"upload"===action&amp;&amp;this.uploadRecording()}}handleRecordingStartStopRequested(){var _this$mediaRecorder;"recording"===(null===(_this$mediaRecorder=this.mediaRecorder)||void 0===_this$mediaRecorder?void 0:_this$mediaRecorder.state)?this.requestRecordingStop():this.startRecording()}async onMediaStopped(){var _this$getButtonContai;this.blob=new Blob(this.data.chunks,{type:this.mediaRecorder.mimeType}),this.player.srcObject=null,this.player.src=URL.createObjectURL(this.blob),this.setRecordButtonTextFromString("recordagain"),this.player.muted=!1,this.player.controls=!0,null===(_this$getButtonContai=this.getButtonContainer("player"))||void 0===_this$getButtonContai||_this$getButtonContai.classList.toggle("hide",!1),this.setUploadButtonVisibility(!0),this.setUploadButtonState(!0)}async uploadRecording(){if(0===this.data.chunks.length)return void this.displayAlert("norecordingfound");const fileName=this.getFileName((1e3*Math.random()).toString().replace(".",""));try{this.setRecordButtonVisibility(!1),this.setUploadButtonState(!1);const fileURL=await(0,_uploader.default)(this.editor,"media",this.blob,fileName,(progress=&gt;{this.setUploadButtonTextProgress(progress)}));this.insertMedia(fileURL),this.close(),(0,_toast.add)(await(0,_str.get_string)("recordinguploaded",_common.component))}catch(error){this.setUploadButtonState(!0),(0,_toast.add)(await(0,_str.get_string)("uploadfailed",_common.component,{error:error}),{type:"error"})}}getButtonContainer(purpose){return this.modalRoot.querySelector('[data-purpose="'.concat(purpose,'-container"]'))}static isBrowserCompatible(){return this.checkSecure()&amp;&amp;this.hasUserMedia()}static async display(editor){const ModalClass=this.getModalClass(),modal=await ModalFactory.create({type:ModalClass.TYPE,templateContext:{},large:!0});return new this(editor,modal).isReady()&amp;&amp;modal.show(),modal}checkAndWarnAboutBrowserCompatibility(){return this.constructor.checkSecure()?!!this.constructor.hasUserMedia||((0,_str.get_strings)(["nowebrtc_title","nowebrtc"].map((key=&gt;({key:key,component:_common.component})))).then((_ref2=&gt;{let[title,message]=_ref2;return(0,_toast.add)(message,{title:title,type:"error"})})).catch(),!1):((0,_str.get_strings)(["insecurealert_title","insecurealert"].map((key=&gt;({key:key,component:_common.component})))).then((_ref=&gt;{let[title,message]=_ref;return(0,_toast.add)(message,{title:title,type:"error"})})).catch(),!1)}static hasUserMedia(){return navigator.mediaDevices&amp;&amp;window.MediaRecorder}static checkSecure(){return window.isSecureContext}async setStopRecordingButton(){const{html:html,js:js}=await Templates.renderForPromise("tiny_recordrtc/timeremaining",this.getTimeRemaining());Templates.replaceNodeContents(this.startStopButton,html,js),this.buttonTimer=setInterval(this.updateRecordButtonTime.bind(this),500)}updateRecordButtonTime(){const{remaining:remaining,minutes:minutes,seconds:seconds}=this.getTimeRemaining();remaining&lt;0?this.requestRecordingStop():(this.startStopButton.querySelector('[data-type="minutes"]').textContent=minutes,this.startStopButton.querySelector('[data-type="seconds"]').textContent=seconds)}async setRecordButtonTextFromString(string){this.startStopButton.textContent=await(0,_str.get_string)(string,_common.component)}async setUploadButtonTextProgress(progress){this.uploadButton.textContent=await(0,_str.get_string)("uploading",_common.component,{progress:Math.round(100*progress)/100})}async resetUploadButtonText(){this.uploadButton.textContent=await(0,_str.get_string)("upload",_common.component)}clearButtonTimer(){this.buttonTimer&amp;&amp;clearInterval(this.buttonTimer),this.buttonTimer=null}getTimeRemaining(){const now=(new Date).getTime(),remaining=Math.floor(this.getTimeLimit()-(now-this.startTime)/1e3),formatter=new Intl.NumberFormat(navigator.language,{minimumIntegerDigits:2}),seconds=formatter.format(remaining%60);return{remaining:remaining,minutes:formatter.format(Math.floor((remaining-seconds)/60)),seconds:seconds}}getMaxUploadSize(){return this.config.maxrecsize}requestRecordingStop(){this.mediaRecorder&amp;&amp;"inactive"!==this.mediaRecorder.state?this.stopRequested=!0:this.cleanupStream()}stopRecorder(){this.mediaRecorder.stop(),this.player.muted=!1}cleanupStream(){this.stream&amp;&amp;this.stream.getTracks().filter((track=&gt;"ended"!==track.readyState)).forEach((track=&gt;track.stop()))}handleStopped(){this.onMediaStopped(),this.clearButtonTimer()}handleStarted(){this.startTime=(new Date).getTime(),this.setStopRecordingButton()}handleDataAvailable(event){if(this.isRecording()){const newSize=this.data.blobSize+event.data.size;newSize&gt;=this.getMaxUploadSize()?(this.stopRecorder(),this.displayFileLimitHitMessage()):(this.data.chunks.push(event.data),this.data.blobSize=newSize,this.stopRequested&amp;&amp;this.stopRecorder())}}async displayFileLimitHitMessage(){(0,_toast.add)(await(0,_str.get_string)("maxfilesizehit",_common.component),{title:await(0,_str.get_string)("maxfilesizehit_title",_common.component),type:"error"})}isRecording(){var _this$mediaRecorder2;return"recording"===(null===(_this$mediaRecorder2=this.mediaRecorder)||void 0===_this$mediaRecorder2?void 0:_this$mediaRecorder2.state)}hasData(){var _this$data;return!(null===(_this$data=this.data)||void 0===_this$data||!_this$data.blobSize)}async startRecording(){if(this.mediaRecorder){if(this.isRecording()&amp;&amp;this.mediaRecorder.stop(),this.hasData()){if(!await this.recordAgainConfirmation())return;this.setUploadButtonVisibility(!1)}this.mediaRecorder=null}this.mediaRecorder=new MediaRecorder(this.stream,this.getParsedRecordingOptions()),this.mediaRecorder.addEventListener("dataavailable",this.handleDataAvailable.bind(this)),this.mediaRecorder.addEventListener("stop",this.handleStopped.bind(this)),this.mediaRecorder.addEventListener("start",this.handleStarted.bind(this)),this.data={chunks:[],blobSize:0},this.setupPlayerSource(),this.stopRequested=!1,this.mediaRecorder.start(50)}async recordAgainConfirmation(){try{return await(0,_notification.saveCancelPromise)(await(0,_str.get_string)("recordagain_title",_common.component),await(0,_str.get_string)("recordagain_desc",_common.component),await(0,_str.get_string)("confirm_yes",_common.component)),!0}catch{return!1}}async insertMedia(source){const{html:html}=await Templates.renderForPromise(this.getEmbedTemplateName(),this.getEmbedTemplateContext({source:source}));this.editor.insertContent(html)}getEmbedTemplateContext(templateContext){return templateContext}},_exports.default}));
define("tiny_recordrtc/options",["exports","./common","editor_tiny/options"],(function(_exports,_common,_options){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.register=_exports.isVideoAllowed=_exports.isAudioAllowed=_exports.getData=void 0;
/**
   * Options helper for Tiny Record RTC plugin.
   *
   * @module      tiny_recordrtc/options
   * @copyright   2022, Stevani Andolo &lt;stevani@hotmail.com.au&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */
const dataName=(0,_options.getPluginOptionName)(_common.pluginName,"data"),videoAllowedName=(0,_options.getPluginOptionName)(_common.pluginName,"videoAllowed"),audioAllowedName=(0,_options.getPluginOptionName)(_common.pluginName,"audioAllowed");_exports.register=editor=&gt;{const registerOption=editor.options.register;registerOption(dataName,{processor:"object"}),registerOption(videoAllowedName,{processor:"boolean",default:!1}),registerOption(audioAllowedName,{processor:"boolean",default:!1})};_exports.getData=editor=&gt;editor.options.get(dataName);_exports.isAudioAllowed=editor=&gt;editor.options.get(audioAllowedName);_exports.isVideoAllowed=editor=&gt;editor.options.get(videoAllowedName)}));
define("tiny_recordrtc/configuration",["exports","./common","editor_tiny/utils"],(function(_exports,_common,_utils){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.configure=void 0;
/**
   * Tiny Record RTC configuration.
   *
   * @module      tiny_recordrtc/configuration
   * @copyright   2022, Stevani Andolo &lt;stevani@hotmail.com.au&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */
const configureMenu=menu=&gt;{const items=menu.insert.items.split(" ");return items.some(((item,index)=&gt;!!item.match(/(media|video)\b/)&amp;&amp;(items.splice(index+1,0,_common.audioButtonName,_common.videoButtonName),!0)))?menu.insert.items=items.join(" "):(0,_utils.addMenubarItem)(menu,"insert","".concat(_common.audioButtonName," ").concat(_common.videoButtonName)),menu};_exports.configure=instanceConfig=&gt;{return{toolbar:(toolbar=instanceConfig.toolbar,toolbar.map((section=&gt;("content"===section.name&amp;&amp;(section.items.some(((item,index)=&gt;!!item.match(/(media|video)\b/)&amp;&amp;(section.items.splice(index+1,0,_common.audioButtonName,_common.videoButtonName),!0)))||section.items.unshift(_common.audioButtonName,_common.videoButtonName)),section)))),menu:configureMenu(instanceConfig.menu)};var toolbar}}));
define("tiny_recordrtc/plugin",["exports","editor_tiny/loader","editor_tiny/utils","./commands_audio","./commands_video","./configuration","./options","./common"],(function(_exports,_loader,_utils,_commands_audio,_commands_video,Configuration,Options,_common){function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&amp;&amp;"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Tiny Record RTC plugin for Moodle.
   *
   * @module      tiny_recordrtc/plugin
   * @copyright   2022, Stevani Andolo &lt;stevani@hotmail.com.au&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_commands_audio=_interopRequireDefault(_commands_audio),_commands_video=_interopRequireDefault(_commands_video),Configuration=_interopRequireWildcard(Configuration),Options=_interopRequireWildcard(Options);var _default=new Promise((async resolve=&gt;{const[tinyMCE,setupAudioCommands,setupVideoCommands,pluginMetadata]=await Promise.all([(0,_loader.getTinyMCE)(),(0,_commands_audio.default)(),(0,_commands_video.default)(),(0,_utils.getPluginMetadata)(_common.component,_common.pluginName)]);tinyMCE.PluginManager.add("".concat(_common.component,"/plugin"),(editor=&gt;(Options.register(editor),setupVideoCommands(editor),setupAudioCommands(editor),pluginMetadata))),resolve(["".concat(_common.component,"/plugin"),Configuration])}));return _exports.default=_default,_exports.default}));
define("tiny_recordrtc/modal",["exports","core/modal"],(function(_exports,_modal){var obj;
/**
   * Abstract Recording Modal for TinyMCE's RecordRTC plugin.
   *
   * @module      tiny_recordrtc/modal
   * @copyright   2022 Andrew Lyons &lt;andrew@nicols.co.uk&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_modal=(obj=_modal)&amp;&amp;obj.__esModule?obj:{default:obj};class _default extends _modal.default{registerEventListeners(){this.setRemoveOnClose(!0),super.registerEventListeners(),this.registerCloseOnSave(),this.registerCloseOnCancel()}}return _exports.default=_default,_exports.default}));
define("tiny_recordrtc/commands_video",["exports","core/str","editor_tiny/utils","./common","./options","./video_recorder"],(function(_exports,_str,_utils,_common,_options,_video_recorder){var obj;
/**
   * Tiny Record RTC - record video command.
   *
   * @module      tiny_recordrtc/recordVideoCommands
   * @copyright   2022, Stevani Andolo &lt;stevani@hotmail.com.au&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_video_recorder=(obj=_video_recorder)&amp;&amp;obj.__esModule?obj:{default:obj};return _exports.default=async()=&gt;{if(!_video_recorder.default.isBrowserCompatible())return()=&gt;!1;const[videoButtonTitle,buttonImage]=await Promise.all([(0,_str.get_string)("videobuttontitle",_common.component),(0,_utils.getButtonImage)("video",_common.component)]);return editor=&gt;{if(!(0,_options.isVideoAllowed)(editor))return;editor.ui.registry.addIcon("video",buttonImage.html),editor.ui.registry.addButton(_common.videoButtonName,{icon:"video",tooltip:videoButtonTitle,onAction:()=&gt;_video_recorder.default.display(editor)}),editor.ui.registry.addMenuItem(_common.videoButtonName,{icon:"video",text:videoButtonTitle,onAction:()=&gt;_video_recorder.default.display(editor)})}},_exports.default}));
define("tiny_recordrtc/audio_recorder",["exports","./base_recorder","./modal","core/modal_registry","tiny_recordrtc/common"],(function(_exports,_base_recorder,_modal,_modal_registry,_common){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}function _defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_base_recorder=_interopRequireDefault(_base_recorder),_modal=_interopRequireDefault(_modal),_modal_registry=_interopRequireDefault(_modal_registry);class Audio extends _base_recorder.default{configurePlayer(){return this.modalRoot.querySelector("audio")}getSupportedTypes(){return["audio/ogg;codecs=opus","audio/mp4;codecs=opus","audio/mp4;codecs=wav","audio/mp4;codecs=mp3"]}getRecordingOptions(){return{audioBitsPerSecond:parseInt(this.config.audiobitrate)}}getMediaConstraints(){return{audio:!0}}getRecordingType(){return"audio"}getTimeLimit(){return this.config.audiotimelimit}getEmbedTemplateName(){return"tiny_recordrtc/embed_audio"}getFileName(prefix){return"".concat(prefix,"-audio.").concat(this.getFileExtension())}getFileExtension(){return window.MediaRecorder.isTypeSupported("audio/ogg")?"ogg":window.MediaRecorder.isTypeSupported("audio/mp4")?"mp4":(window.console.warn("Unknown file type for MediaRecorder API"),"")}static getModalClass(){var _class;const modalType="".concat(_common.component,"/audio_recorder"),registration=_modal_registry.default.get(modalType);if(registration)return registration.module;const AudioModal=(_defineProperty(_class=class extends _modal.default{},"TYPE",modalType),_defineProperty(_class,"TEMPLATE","".concat(_common.component,"/audio_recorder")),_class);return _modal_registry.default.register(AudioModal.TYPE,AudioModal,AudioModal.TEMPLATE),AudioModal}}return _exports.default=Audio,_exports.default}));
define("tiny_recordrtc/video_recorder",["exports","./base_recorder","tiny_recordrtc/modal","core/modal_registry","tiny_recordrtc/common"],(function(_exports,_base_recorder,_modal,_modal_registry,_common){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}function _defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_base_recorder=_interopRequireDefault(_base_recorder),_modal=_interopRequireDefault(_modal),_modal_registry=_interopRequireDefault(_modal_registry);class Video extends _base_recorder.default{configurePlayer(){return this.modalRoot.querySelector("video")}getSupportedTypes(){return["video/webm;codecs=vp9,opus","video/webm;codecs=vp8,opus","video/mp4;codecs=h264,opus","video/mp4;codecs=h264,wav","video/mp4;codecs=v9,opus"]}getRecordingOptions(){return{audioBitsPerSecond:parseInt(this.config.audiobitrate),videoBitsPerSecond:parseInt(this.config.videobitrate)}}getMediaConstraints(){return{audio:!0,video:{width:{ideal:640},height:{ideal:480}}}}playOnCapture(){return!0}getRecordingType(){return"video"}getTimeLimit(){return this.config.videotimelimit}getEmbedTemplateName(){return"tiny_recordrtc/embed_video"}getFileName(prefix){return"".concat(prefix,"-video.").concat(this.getFileExtension())}getFileExtension(){return window.MediaRecorder.isTypeSupported("audio/webm")?"webm":window.MediaRecorder.isTypeSupported("audio/mp4")?"mp4":(window.console.warn("Unknown file type for MediaRecorder API"),"")}static getModalClass(){var _class;const modalType="".concat(_common.component,"/video_recorder"),registration=_modal_registry.default.get(modalType);if(registration)return registration.module;const VideoModal=(_defineProperty(_class=class extends _modal.default{},"TYPE",modalType),_defineProperty(_class,"TEMPLATE","".concat(_common.component,"/video_recorder")),_class);return _modal_registry.default.register(VideoModal.TYPE,VideoModal,VideoModal.TEMPLATE),VideoModal}}return _exports.default=Video,_exports.default}));
define("tiny_recordrtc/common",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0;return _exports.default={pluginName:"tiny_recordrtc/plugin",component:"tiny_recordrtc",audioButtonName:"tiny_recordrtc_audio",videoButtonName:"tiny_recordrtc_video"},_exports.default}));
define("tiny_recordrtc/commands_audio",["exports","core/str","editor_tiny/utils","./common","./audio_recorder","./options"],(function(_exports,_str,_utils,_common,_audio_recorder,_options){var obj;
/**
   * Tiny Record RTC - record audio command.
   *
   * @module      tiny_recordrtc/recordAudioCommands
   * @copyright   2022, Stevani Andolo &lt;stevani@hotmail.com.au&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_audio_recorder=(obj=_audio_recorder)&amp;&amp;obj.__esModule?obj:{default:obj};return _exports.default=async()=&gt;{if(!_audio_recorder.default.isBrowserCompatible())return()=&gt;!1;const[audioButtonTitle,audio]=await Promise.all([(0,_str.get_string)("audiobuttontitle",_common.component),(0,_utils.getButtonImage)("audio",_common.component)]);return editor=&gt;{if(!(0,_options.isAudioAllowed)(editor))return;editor.ui.registry.addIcon("audio",audio.html),editor.ui.registry.addButton(_common.audioButtonName,{icon:"audio",tooltip:audioButtonTitle,onAction:()=&gt;_audio_recorder.default.display(editor)}),editor.ui.registry.addMenuItem(_common.audioButtonName,{icon:"audio",text:audioButtonTitle,onAction:()=&gt;_audio_recorder.default.display(editor)})}},_exports.default}));
</pre></body></html>