From 919cf480406deeb3acea96f707978f1ebec2edc8 Mon Sep 17 00:00:00 2001
From: RayCoSector <135825482+RayCoSector@users.noreply.github.com>
Date: Tue, 9 Jul 2024 13:14:08 +0100
Subject: [PATCH] Fixed for Moodle 4.4
Fix for area to place content in course page within Moodle 4.4
---
amd/build/script.min.js | 2 +-
amd/build/script.min.js.map | 2 +-
amd/src/script.js | 39 +++++++++----------------------------
3 files changed, 11 insertions(+), 32 deletions(-)
diff --git a/amd/build/script.min.js b/amd/build/script.min.js
index 02b72d2..359e7de 100644
--- a/amd/build/script.min.js
+++ b/amd/build/script.min.js
@@ -5,6 +5,6 @@ define("block_sharing_cart/script",["exports","jquery","core/modal_factory","cor
* @package block_sharing_cart
* @copyright 2017 (C) VERSION2, INC.
* @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),_modal_factory=_interopRequireDefault(_modal_factory),_modal_events=_interopRequireDefault(_modal_events);_exports.init=function(addMethod){(0,_jquery.default)(document).ready((function(){let isDragging=!1;function str(identifier){return M.str.block_sharing_cart[identifier]||M.str.moodle[identifier]}function get_action_url(name,args){let url=M.cfg.wwwroot+"/blocks/sharing_cart/"+name+".php";if(args){const q=[];for(let k in args)q.push(k+"="+encodeURIComponent(args[k]));url+="?"+q.join("&")}return url}function remove_basket(){if("drag_and_drop"===addMethod&&!isDragging){const footerIconContainer=document.getElementById("page-footer").querySelector('div[data-region="footer-container-popover"]'),sharingCartBasket=document.querySelector("button.sharing_cart_basket");sharingCartBasket&&(null==footerIconContainer||footerIconContainer.removeChild(sharingCartBasket),sharingCartBasket.classList.remove("shake_basket"))}}function confirm_modal(obj){obj.checkbox&&(obj.body+='
"),_modal_factory.default.create({type:_modal_factory.default.types.SAVE_CANCEL,title:obj.title,body:obj.body}).done((function(modal){let is_submitted=!1;modal.setSaveButtonText(obj.save_button);const userdata_checkbox=(0,_jquery.default)(modal.getRoot()).find("#modal-userdata-checkbox"),anonymize_checkbox=(0,_jquery.default)(modal.getRoot()).find("#modal-anonymize-checkbox");userdata_checkbox.on("change",(e=>{e.currentTarget.checked?anonymize_checkbox.attr("disabled",null):anonymize_checkbox.prop("checked",!1).attr("disabled",!0)})),modal.getRoot().on(_modal_events.default.save,(function(e){const response={userdata:userdata_checkbox.is(":checked"),anonymize:anonymize_checkbox.is(":checked")};obj.next(response),is_submitted=!0})),modal.getRoot().on(_modal_events.default.cancel,(function(){remove_basket()})),modal.getRoot().on(_modal_events.default.hidden,(function(){(0,_jquery.default)("body").removeClass("modal-open"),is_submitted||remove_basket()})),modal.show()}))}function in_place_edit_section_name($section){let sectionName="";const $inPlaceEditable=$section.find("h3.sectionname .inplaceeditable");return $inPlaceEditable.length&&(sectionName=$inPlaceEditable.data("value")),sectionName}function on_backup_modal(post_data,title_str,body_str,isSection){_jquery.default.post(get_action_url("rest"),post_data,(function(response){!function(response){let checkbox=!1;"1"===response&&(checkbox=!0),confirm_modal({title:title_str,body:body_str,save_button:str("modal_confirm_backup"),checkbox:checkbox,next:function(data){!0===isSection?function(sectionId,sectionNumber,courseId,userdata,anonymize){const $commands=(0,_jquery.default)("span.inplaceeditable[data-itemtype=sectionname][data-itemid="+sectionId+"]"),$section=$commands.closest("li.section.main");let sectionName=$section.attr("aria-label")||$section.find(".sectionname").text().trim();null===sectionName&&(sectionName=String((0,_jquery.default)("#region-main .section_action_menu[data-sectionid='"+sectionId+"']").parent().parent().find("h3.sectionname").text()));const inPlaceEditSectionName=in_place_edit_section_name($section);sectionName=""!==inPlaceEditSectionName?inPlaceEditSectionName:sectionName;const $spinner=add_spinner(),$node_spinner=add_node_spinner($commands);_jquery.default.post(get_action_url("rest"),{action:"backup_section",sectionid:sectionId,sectionnumber:sectionNumber,courseid:courseId,sectionname:sectionName,userdata:userdata,anonymize:anonymize,sesskey:M.cfg.sesskey},(function(){reload_tree()})).fail((function(response){show_error(response)})).always((function(){$spinner.hide(),$node_spinner.hide(),remove_basket()}))}(post_data.sectionid,post_data.sectionnumber,post_data.courseid,data.userdata,data.anonymize):function(cmid,userdata,anonymize){let $commands=(0,_jquery.default)("#module-"+cmid+" .actions");$commands.length||($commands=(0,_jquery.default)('[data-owner="#module-'+cmid+'"]'));const $spinner=add_spinner(),$node_spinner=add_node_spinner($commands);_jquery.default.post(get_action_url("rest"),{action:"backup",cmid:cmid,userdata:userdata,anonymize:anonymize,sesskey:M.cfg.sesskey,courseid:course.id},(function(){reload_tree()})).fail((function(response){show_error(response)})).always((function(){$node_spinner.hide(),$spinner.hide(),remove_basket()}))}(post_data.cmid,data.userdata,data.anonymize),function(){if("drag_and_drop"===addMethod){const sharingCartBasket=document.querySelector("button.sharing_cart_basket");null==sharingCartBasket||sharingCartBasket.classList.add("shake_basket")}}()}})}(response)}),"text").fail((function(response){show_error(response)}))}const icon={backup:{css:"editing_backup",iconClass:"fa fa-frown-o"},movedir:{css:"editing_right",iconClass:"fa fa-arrow-right"},move:{css:"editing_move_",iconClass:"fa fa-arrows-v"},edit:{css:"editing_update",iconClass:"fa fa-pencil"},cancel:{css:"editing_cancel",iconClass:"fa fa-ban"},delete:{css:"editing_update",iconClass:"fa fa-trash"},restore:{css:"editing_restore",iconClass:"fa fa-clone"},"dir-open":{iconClass:"fa fa-folder-open-o"},"dir-closed":{iconClass:"fa fa-folder-o"}},$block=(0,_jquery.default)(".block_sharing_cart"),course=new function(){const body=(0,_jquery.default)("body");this.id=body.attr("class").match(/course-(\d+)/)[1],this.is_frontpage=body.hasClass("pagelayout-frontpage")};function show_error(response){try{const ex=JSON.parse(response.responseText);new M.core.exception({name:str("pluginname")+" - "+str("error"),message:ex.message})}catch(e){new M.core.exception({name:str("pluginname")+" - "+str("error"),message:response.responseText})}}function create_command(name){const iconElement=(0,_jquery.default)(" ").attr("alt",str(name)).attr("class",icon[name].iconClass);return(0,_jquery.default)(' ').addClass(icon[name].css).attr("title",str(name)).append(iconElement)}function add_spinner(){const $spinner=(0,_jquery.default)('
');return(0,_jquery.default)("section.block_sharing_cart").append($spinner),$spinner}function add_node_spinner($node){const $node_spinner=(0,_jquery.default)(' ');return $node.append($node_spinner),$node_spinner}function reload_tree(){_jquery.default.post(get_action_url("rest"),{action:"render_tree",courseid:course.id},(function(response){$block.find(".tree").replaceWith((0,_jquery.default)(response)),_jquery.default.init_item_tree()}),"html").fail((function(response){show_error(response)}))}(0,_jquery.default)(document).on("click","a.restore",(function(){add_spinner()}));const directories=new function(){const KEY="block_sharing_cart-dirs";let opens=function(param){const readCookie=document.cookie.match("(^|;)\\s*"+param+"\\s*=\\s*([^;]+)");return readCookie?readCookie.pop():""}(KEY).split(",").map((function(v){return parseInt(v)}));function save(){const expires=new Date;expires.setDate(expires.getDate()+30),function(name,value,expireTimeInMillisecond){const d=new Date;d.setTime(d.getTime()+expireTimeInMillisecond);const expires="expires="+d.toUTCString();document.cookie=name+"="+value+";"+expires}(KEY,opens.join(","),expires)}function open($dir,visible){const iconElement=icon[visible?"dir-open":"dir-closed"].iconClass;$dir.find("> div i.icon").attr("class","icon "+iconElement),$dir.find("> ul.list")[visible?"show":"hide"]()}this.init=function(){let i=0;$block.find("li.directory").each((function(index,dir){const $dir=(0,_jquery.default)(dir);$dir.attr("id","block_sharing_cart-dir-"+i),i>=opens.length?opens.push(0):opens[i]&&open($dir,!0),$dir.find("> div div.toggle-wrapper").css("cursor","pointer").on("click",(function(e){!function(e){const $dir=(0,_jquery.default)(e.target).closest("li.directory"),i=$dir.attr("id").match(/(\d+)$/)[1],v="none"===$dir.find("> ul.list").css("display");open($dir,v),opens[i]=v?1:0,save()}(e)})),i++}))},this.reset=function(){opens=[],this.init(),save()}},move_targets=new function(){let $cancel=null,targets=[];this.hide=function(){if(null!==$cancel){const $commands=$cancel.closest(".commands");$cancel.remove(),$cancel=null,$commands.closest("li.activity").css("opacity",1),$commands.find("a").each((function(){(0,_jquery.default)(this).show()})),_jquery.default.each(targets,(function(index,$target){$target.remove()})),targets=[]}},this.show=function(item_id){this.hide();const $current=$block.find("#block_sharing_cart-item-"+item_id),$next=$current.next(),$list=$current.closest("ul");let next_id=0;function create_target(item_id,area_to){const $anchor=(0,_jquery.default)(' ').addClass("move-"+item_id+"-to-"+area_to).attr("title",str("movehere")).append((0,_jquery.default)(""+str("clicktomove")+"
").attr("alt",str("movehere"))),$target=(0,_jquery.default)(' ').append($anchor);return $anchor.on("click",(function(e){!function(e){const m=(0,_jquery.default)(e.target).closest("a").attr("class").match(/move-(\d+)-to-(\d+)/),item_id=m[1],area_to=m[2],$spinner=add_spinner();_jquery.default.post(get_action_url("rest"),{action:"move",item_id:item_id,area_to:area_to,sesskey:M.cfg.sesskey},(function(){reload_tree()})).fail((function(response){show_error(response)})).always((function(){$spinner.hide()}))}(e)})),$target}if($next.length&&(next_id=$next.attr("id").match(/item-(\d+)$/)[1]),$list.find("> li.activity").each((function(index,item){const $item=(0,_jquery.default)(item),to=$item.attr("id").match(/item-(\d+)$/)[1];if(to===item_id){$cancel=create_command("cancel"),$cancel.on("click",(function(){move_targets.hide()}));const $commands=$item.find(".commands");$commands.find("a").each((function(){(0,_jquery.default)(this).hide()})),$commands.append($cancel),$item.css("opacity",.5)}else if(to!==next_id){const $target=create_target(item_id,to);$item.before($target),targets.push($target)}}),this),$next){var $target=create_target(item_id,0);$list.append($target),targets.push($target)}}},restore_targets=new function(){this.is_directory=null;let $clipboard=null,targets=[];function create_target(id,section){const href=get_action_url("restore",{directory:!0===restore_targets.is_directory,target:id,course:course.id,section:section,in_section:(0,_jquery.default)("#copy-section-form").data("in-section"),sesskey:M.cfg.sesskey,returnurl:document.URL});let $target=(0,_jquery.default)(" ").attr("href",href).attr("title",str("copyhere")).append((0,_jquery.default)(' ').attr("alt",str("copyhere")).attr("src",M.util.image_url("dropzone_arrow","block_sharing_cart")));return targets.push($target),$target}this.hide=function(){null!==$clipboard&&($clipboard.remove(),$clipboard=null,_jquery.default.each(targets,(function(index,$target){$target.remove()})),targets=[])},this.show=function(id){this.hide();let $view=(0,_jquery.default)(" ");if(this.is_directory)$view.html(id).css("display","inline"),$view.prepend((0,_jquery.default)(" ").addClass("icon").attr("alt",id));else{const $item=$block.find("#block_sharing_cart-item-"+id);$view=(0,_jquery.default)($item.find("div")[0].cloneNode(!0)).css("display","inline"),$view.attr("class",$view.attr("class").replace(/mod-indent-\d+/,"")),$view.find(".commands").remove()}const $cancel=create_command("cancel");if($cancel.on("click",this.hide),$clipboard=(0,_jquery.default)('
'),$clipboard.append(str("clipboard")+": ").append($view).append($cancel),course.is_frontpage){const $sitetopic=(0,_jquery.default)(".sitetopic"),$mainmenu=(0,_jquery.default)(".block_site_main_menu");$sitetopic?$sitetopic.find("*").before($clipboard):$mainmenu&&$mainmenu.find(".content").before($clipboard),$mainmenu&&$mainmenu.find(".footer").before(create_target(id,0)),$sitetopic&&$sitetopic.find("ul.section").append(create_target(id,1))}else{const $container=(0,_jquery.default)(".course-content");$container.prepend($clipboard),$container.find(M.course.format.get_section_wrapper(null)).each((function(index,sectionDOM){const $section=(0,_jquery.default)(sectionDOM),section=$section.attr("id").match(/(\d+)$/)[1];$section.find("ul.section").first().append(create_target(id,section))}),this)}}};function init_footer_basket(){let currentDragging;const activities=document.querySelectorAll(".activity.activity-wrapper"),sections=document.querySelectorAll(".course-section-header"),sharingCartBlock=document.querySelector('section[data-block="sharing_cart"]');!function(){var _document$getElements;const courseSectionHeader=null!==(_document$getElements=document.getElementsByClassName("course-section-header")[0])&&void 0!==_document$getElements?_document$getElements:null;courseSectionHeader instanceof HTMLElement&&(courseSectionHeader.classList.add("draggable"),courseSectionHeader.setAttribute("draggable",!0))}();const footerIconContainer=document.getElementById("page-footer").querySelector('div[data-region="footer-container-popover"]'),basket=document.createElement("i");basket.setAttribute("class","fa fa-shopping-basket");const basketButton=document.createElement("button");basketButton.setAttribute("class","btn btn-icon bg-secondary icon-no-margin btn-footer-popover sharing_cart_basket"),basketButton.setAttribute("style","z-index: 1001;"),basketButton.append(basket);const dropAreaText=document.createElement("p");dropAreaText.setAttribute("class","font-weight-bold text-white"),dropAreaText.innerText=str("drop_here");const dropArea=document.createElement("div");function drag_event_listeners(draggable){draggable.addEventListener("dragstart",(e=>{basketButton.classList.remove("shake_basket"),null==footerIconContainer||footerIconContainer.prepend(basketButton),sharingCartBlock.children[0].classList.add("dragging_item"),sharingCartBlock.append(dropArea),currentDragging=e.target,isDragging=!0})),draggable.addEventListener("dragend",(()=>{currentDragging instanceof HTMLElement&&(null==footerIconContainer||footerIconContainer.removeChild(basketButton)),sharingCartBlock.children[0].classList.remove("dragging_item"),sharingCartBlock.removeChild(dropArea),isDragging=!1}))}dropArea.setAttribute("class","h-100 w-100 position-absolute d-flex justify-content-center align-items-center"),dropArea.append(dropAreaText),sections.forEach((section=>{drag_event_listeners(section)})),activities.forEach((activity=>{drag_event_listeners(activity)})),[basketButton,sharingCartBlock].forEach((dropzone=>{dropzone.addEventListener("dragover",(e=>{e.preventDefault(),dropzone.classList.add("drag_over")})),dropzone.addEventListener("dragenter",(e=>{e.preventDefault(),dropzone.classList.add("drag_over")})),dropzone.addEventListener("dragleave",(()=>{dropzone.classList.remove("drag_over")})),dropzone.addEventListener("drop",(()=>{currentDragging instanceof HTMLElement&¤tDragging.querySelector(".add-to-sharing-cart").click(),dropzone.classList.remove("drag_over"),currentDragging=void 0,isDragging=!1}))}))}_jquery.default.get_plugin_name=function(){let $blockheader=$block.find("h2");return $blockheader.length?$blockheader.html():($blockheader=$block.find("h3"),$blockheader.length?$blockheader.html():"")},_jquery.default.on_backup=function(e,activityName){let cmId=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;0===cmId&&(cmId=function($backup){const $activity=$backup.closest("li.activity");if($activity.length)return $activity.attr("id").match(/(\d+)$/)[1];const $commands=$backup.closest(".commands"),dataowner=$commands.attr("data-owner");return dataowner.length?dataowner.match(/(\d+)$/)[1]:$commands.find("a.editing_delete").attr("href").match(/delete=(\d+)/)[1]}((0,_jquery.default)(e.target)));const data={action:"is_userdata_copyable",cmid:cmId};on_backup_modal(data,activityName,str("confirm_backup"),!1)},_jquery.default.on_movedir=function(e){const $commands=(0,_jquery.default)(e.target).closest(".commands"),$current_dir=$commands.closest("li.directory"),current_path=$current_dir.length?$current_dir.attr("directory-path"):"/",item_id=(0,_jquery.default)(e.target).closest("li.activity").attr("id").match(/(\d+)$/)[1],dirs=[];$block.find("li.directory").each((function(){dirs.push((0,_jquery.default)(this).attr("directory-path"))}));const $form=(0,_jquery.default)("");function submit(){const folder_to=$form.find('[name="to"]').val(),$spinner=add_spinner();_jquery.default.post(get_action_url("rest"),{action:"movedir",item_id:item_id,folder_to:folder_to,sesskey:M.cfg.sesskey},(function(){reload_tree(),directories.reset()})).fail((function(response){show_error(response)})).always((function(){$spinner.hide()}))}if($form.attr("action","javascript:void(0)"),$form.submit(submit),0===dirs.length){var $input=(0,_jquery.default)(' ').val(current_path);setTimeout((function(){$input.focus()}),1),$form.append($input)}else{dirs.unshift("/");const $select=(0,_jquery.default)(' ');for(let i=0;i ").val(dirs[i]).append(dirs[i]));$select.val(current_path),$select.change(submit),$form.append($select);const $edit=create_command("edit");$edit.on("click",(function(){const $input=(0,_jquery.default)(' ').val(current_path);$select.remove(),$edit.replaceWith($input),$input.focus()})),$form.append($edit)}const $cancel=create_command("cancel");$cancel.on("click",(function(){$form.remove(),$commands.find("a").show()})),$form.append($cancel),$commands.find("a").each((function(){(0,_jquery.default)(this).hide()})),$commands.append($form)},_jquery.default.on_move=function(e){const id=(0,_jquery.default)(e.target).closest("li.activity").attr("id").match(/(\d+)$/)[1];move_targets.show(id)},_jquery.default.on_delete=function(e){const $item=(0,_jquery.default)(e.target).closest("li"),liText=$item[0].innerText;let modalBody,item,isDirectory=!1,description_text="";$item.hasClass("directory")?(isDirectory=!0,item=str("folder_string"),description_text=str("delete_folder")):item=str("activity_string"),modalBody=''+item+" "+liText+description_text+"
",confirm_modal({title:str("confirm_delete"),body:modalBody,save_button:str("modal_confirm_delete"),checkbox:!1,next:function(){let data={};!0===isDirectory?data={action:"delete_directory",path:$item.attr("directory-path"),sesskey:M.cfg.sesskey}:$item.hasClass("activity")&&(data={action:"delete",id:$item.attr("id").match(/(\d+)$/)[1],sesskey:M.cfg.sesskey});const $spinner=add_spinner();_jquery.default.post(get_action_url("rest"),data,(function(){reload_tree()})).fail((function(response){show_error(response)})).always((function(){$spinner.hide()})),e.stopPropagation()}})},_jquery.default.on_restore=function(e){const $item=(0,_jquery.default)(e.target).closest("li");let id=null;$item.hasClass("directory")?(id=$item.attr("directory-path"),restore_targets.is_directory=!0):$item.hasClass("activity")&&(id=$item.attr("id").match(/(\d+)$/)[1],restore_targets.is_directory=!1),restore_targets.show(id)},_jquery.default.on_section_backup=function(sectionId,sectionNumber,courseId,sectionName){on_backup_modal({action:"is_userdata_copyable_section",sectionid:sectionId,sectionnumber:sectionNumber,courseid:courseId},sectionName,''+str("backup_heavy_load_warning_message")+"
"+str("confirm_backup_section"),!0)},_jquery.default.init_bulk_delete=function(isspeciallayout){const bulkdelete=$block.find(".editing_bulkdelete");bulkdelete.length&&(isspeciallayout?(bulkdelete.attr("role","menuitem").addClass("dropdown-item menu-action"),bulkdelete.append((0,_jquery.default)("").append(bulkdelete.attr("title"))),$block.find(".menubar .dropdown .dropdown-menu").append(bulkdelete)):$block.find(".header .commands").append(bulkdelete))},_jquery.default.init_help_icon=function(isspeciallayout){const helpicon=$block.find(".header-commands > .help-icon");isspeciallayout?$block.find(".header-commands").parent().css("display","block"):$block.find(".header .commands").append(helpicon)},_jquery.default.init_block_header=function(){const isspeciallayout=$block.find(".menubar .dropdown .dropdown-menu").length;_jquery.default.init_bulk_delete(isspeciallayout),_jquery.default.init_help_icon(isspeciallayout)},_jquery.default.init_item_tree=function(){function add_actions(item,actions){const $item=(0,_jquery.default)(item),isCopying="1"===$item.attr("data-is-copying"),$commands=$item.find(".commands").first();_jquery.default.each(actions,(function(index,action){if("restore"===action&&isCopying)return;const $command=create_command(action);$command.on("click",(function(e){_jquery.default["on_"+action](e)})),$commands.append($command)}),this)}const activity_actions=["movedir","move","delete"];course&&activity_actions.push("restore");const directory_actions=["delete","restore"];$block.find("li.activity").each((function(index,item){1!=(0,_jquery.default)(item).attr("data-disable-copy")?add_actions(item,activity_actions):add_actions(item,["movedir","move","delete"])})),$block.find("li.directory").each((function(index,item){add_actions(item,directory_actions)})),directories.init()},_jquery.default.init_activity_commands=function(){function create_backup_icon(){const $backupIcon=(0,_jquery.default)(' ').append((0,_jquery.default)(' ')).attr("title",str("backup"));return"click_to_add"!==addMethod&&$backupIcon.addClass("d-none"),$backupIcon}function add_activity_backup_control($activity){const activityClass=$activity[0].className,modtype=activityClass.substr(activityClass.indexOf("modtype_")+8);let activityName=str("activity_string");"label"!==modtype&&(activityName=(0,_jquery.default)(".activity#"+$activity[0].id).find(".mod-indent-outer .activityinstance span.instancename").html());const $backupIcon=create_backup_icon();$backupIcon.on("click",(function(e){_jquery.default.on_backup(e,activityName)}));const $actionMenuItem=$activity.find(".action-menu.section-cm-edit-actions").parent(".actions");$actionMenuItem.find(".add-to-sharing-cart").length||$actionMenuItem.append($backupIcon)}(0,_jquery.default)(document).ajaxComplete((function(event,xhr,settings){const url=settings.url,lastslashindex=url.lastIndexOf("="),result=url.substring(lastslashindex+1);if("core_course_edit_module"===result||"core_course_get_module"===result){const data=JSON.parse(settings.data),action=data[0].args.action;if("delete"===action)return;setTimeout((function(){const activity_id=data[0].args.id,activity=(0,_jquery.default)("#module-"+activity_id);if(add_activity_backup_control(activity),"duplicate"===action){add_activity_backup_control(activity.next())}}),1)}})),(0,_jquery.default)("body.editing .course-content li.section").each((function(){!function($section){let sectionId=$section.find(".section_action_menu").data("sectionid");const sectionNumber=parseInt(String($section.attr("id")).match(/\d+/)[0]);let sectionName=$section.attr("aria-label")||$section.find(".sectionname").text().trim();const isFlexibleCourseFormat=(0,_jquery.default)("body[id$=flexsections]").length;isFlexibleCourseFormat&&null==sectionId&&(sectionId=$section.data("section-id"));const courseId=parseInt(String((0,_jquery.default)("body").attr("class")).match(/course-([0-9]*)( |$)/)[1]),$backupIcon=create_backup_icon();$backupIcon.on("click",(function(){const inPlaceEditSectionName=in_place_edit_section_name($section);sectionName=""!==inPlaceEditSectionName?inPlaceEditSectionName:sectionName,_jquery.default.on_section_backup(sectionId,sectionNumber,courseId,sectionName)}));let $sectionTitle=$section.find("h3.sectionname").first().find("a").last();const $inPlaceEditable=$section.find("h3.sectionname .inplaceeditable").first();$inPlaceEditable.length&&($sectionTitle=$inPlaceEditable),isFlexibleCourseFormat&&0===sectionNumber?($sectionTitle=$section.find("> .controls"),$sectionTitle.prepend($backupIcon)):$backupIcon.insertAfter($sectionTitle);const $activities=$section.find("li.activity");(0,_jquery.default)($activities).each((function(){add_activity_backup_control((0,_jquery.default)(this))}))}((0,_jquery.default)(this))}))},_jquery.default.init=function(){M.str.block_sharing_cart.pluginname=this.get_plugin_name(),_jquery.default.init_block_header(),_jquery.default.init_item_tree(),_jquery.default.init_activity_commands(),"drag_and_drop"===addMethod&&init_footer_basket()};var $spinner=(0,_jquery.default)(" ").addClass("spinner fa fa-3x fa-circle-o-notch fa-spin");(0,_jquery.default)("div#sharing-cart-spinner-modal div.spinner-container").prepend($spinner),_jquery.default.init()})),(0,_jquery.default)(".copy_section").on("click",(function(){const $section_selected=(0,_jquery.default)(".section-dropdown option:selected"),sectionId=$section_selected.data("section-id"),sectionNumber=$section_selected.data("section-number"),courseId=$section_selected.data("course-id"),sectionName=$section_selected.data("section-name");_jquery.default.on_section_backup(sectionId,sectionNumber,courseId,sectionName)})),(0,_jquery.default)(".copy_activity").on("click",(function(e){const activitySelected=(0,_jquery.default)(".activity-dropdown option:selected"),activityId=activitySelected.data("activity-id"),activityName=activitySelected.data("activity-name");_jquery.default.on_backup(e,activityName,activityId)}))}}));
+ */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_jquery=_interopRequireDefault(_jquery),_modal_factory=_interopRequireDefault(_modal_factory),_modal_events=_interopRequireDefault(_modal_events);_exports.init=function(addMethod){(0,_jquery.default)(document).ready((function(){let isDragging=!1;function str(identifier){return M.str.block_sharing_cart[identifier]||M.str.moodle[identifier]}function get_action_url(name,args){let url=M.cfg.wwwroot+"/blocks/sharing_cart/"+name+".php";if(args){const q=[];for(let k in args)q.push(k+"="+encodeURIComponent(args[k]));url+="?"+q.join("&")}return url}function remove_basket(){if("drag_and_drop"===addMethod&&!isDragging){const footerIconContainer=document.getElementById("page-footer").querySelector('div[data-region="footer-container-popover"]'),sharingCartBasket=document.querySelector("button.sharing_cart_basket");sharingCartBasket&&(null==footerIconContainer||footerIconContainer.removeChild(sharingCartBasket),sharingCartBasket.classList.remove("shake_basket"))}}function confirm_modal(obj){obj.checkbox&&(obj.body+=''+str("modal_checkbox")+"
"),_modal_factory.default.create({type:_modal_factory.default.types.SAVE_CANCEL,title:obj.title,body:obj.body}).done((function(modal){let is_submitted=!1;modal.setSaveButtonText(obj.save_button),modal.getRoot().on(_modal_events.default.save,(function(e){const response={checkbox:(0,_jquery.default)(e.target).find(".modal-checkbox").is(":checked")};obj.next(response),is_submitted=!0})),modal.getRoot().on(_modal_events.default.cancel,(function(){remove_basket()})),modal.getRoot().on(_modal_events.default.hidden,(function(){(0,_jquery.default)("body").removeClass("modal-open"),is_submitted||remove_basket()})),modal.show()}))}function in_place_edit_section_name($section){let sectionName="";const $inPlaceEditable=$section.find("h3.sectionname .inplaceeditable");return $inPlaceEditable.length&&(sectionName=$inPlaceEditable.data("value")),sectionName}function on_backup_modal(post_data,title_str,body_str,isSection){_jquery.default.post(get_action_url("rest"),post_data,(function(response){!function(response){let checkbox=!1;"1"===response&&(checkbox=!0),confirm_modal({title:title_str,body:body_str,save_button:str("modal_confirm_backup"),checkbox:checkbox,next:function(data){!0===isSection?function(sectionId,sectionNumber,courseId,userdata){const $commands=(0,_jquery.default)("span.inplaceeditable[data-itemtype=sectionname][data-itemid="+sectionId+"]"),$section=$commands.closest("li.section.main");let sectionName=$section.attr("aria-label")||$section.find(".sectionname").text().trim();null===sectionName&&(sectionName=String((0,_jquery.default)("#region-main .section_action_menu[data-sectionid='"+sectionId+"']").parent().parent().find("h3.sectionname").text()));const inPlaceEditSectionName=in_place_edit_section_name($section);sectionName=""!==inPlaceEditSectionName?inPlaceEditSectionName:sectionName;const $spinner=add_spinner(),$node_spinner=add_node_spinner($commands);_jquery.default.post(get_action_url("rest"),{action:"backup_section",sectionid:sectionId,sectionnumber:sectionNumber,courseid:courseId,sectionname:sectionName,userdata:userdata,sesskey:M.cfg.sesskey},(function(){reload_tree()})).fail((function(response){show_error(response)})).always((function(){$spinner.hide(),$node_spinner.hide(),remove_basket()}))}(post_data.sectionid,post_data.sectionnumber,post_data.courseid,data.checkbox):function(cmid,userdata){let $commands=(0,_jquery.default)("#module-"+cmid+" .actions");$commands.length||($commands=(0,_jquery.default)('[data-owner="#module-'+cmid+'"]'));const $spinner=add_spinner(),$node_spinner=add_node_spinner($commands);_jquery.default.post(get_action_url("rest"),{action:"backup",cmid:cmid,userdata:userdata,sesskey:M.cfg.sesskey,courseid:course.id},(function(){reload_tree()})).fail((function(response){show_error(response)})).always((function(){$node_spinner.hide(),$spinner.hide(),remove_basket()}))}(post_data.cmid,data.checkbox),function(){if("drag_and_drop"===addMethod){const sharingCartBasket=document.querySelector("button.sharing_cart_basket");null==sharingCartBasket||sharingCartBasket.classList.add("shake_basket")}}()}})}(response)}),"text").fail((function(response){show_error(response)}))}const icon={backup:{css:"editing_backup",iconClass:"fa fa-frown-o"},movedir:{css:"editing_right",iconClass:"fa fa-arrow-right"},move:{css:"editing_move_",iconClass:"fa fa-arrows-v"},edit:{css:"editing_update",iconClass:"fa fa-pencil"},cancel:{css:"editing_cancel",iconClass:"fa fa-ban"},delete:{css:"editing_update",iconClass:"fa fa-trash"},restore:{css:"editing_restore",iconClass:"fa fa-clone"},"dir-open":{iconClass:"fa fa-folder-open-o"},"dir-closed":{iconClass:"fa fa-folder-o"}},$block=(0,_jquery.default)(".block_sharing_cart"),course=new function(){const body=(0,_jquery.default)("body");this.id=body.attr("class").match(/course-(\d+)/)[1],this.is_frontpage=body.hasClass("pagelayout-frontpage")};function show_error(response){try{const ex=JSON.parse(response.responseText);new M.core.exception({name:str("pluginname")+" - "+str("error"),message:ex.message})}catch(e){new M.core.exception({name:str("pluginname")+" - "+str("error"),message:response.responseText})}}function create_command(name){const iconElement=(0,_jquery.default)(" ").attr("alt",str(name)).attr("class",icon[name].iconClass);return(0,_jquery.default)(' ').addClass(icon[name].css).attr("title",str(name)).append(iconElement)}function add_spinner(){const $spinner=(0,_jquery.default)('
');return(0,_jquery.default)("section.block_sharing_cart").append($spinner),$spinner}function add_node_spinner($node){const $node_spinner=(0,_jquery.default)(' ');return $node.append($node_spinner),$node_spinner}function reload_tree(){_jquery.default.post(get_action_url("rest"),{action:"render_tree",courseid:course.id},(function(response){$block.find(".tree").replaceWith((0,_jquery.default)(response)),_jquery.default.init_item_tree()}),"html").fail((function(response){show_error(response)}))}(0,_jquery.default)(document).on("click","a.restore",(function(){add_spinner()}));const directories=new function(){const KEY="block_sharing_cart-dirs";let opens=function(param){const readCookie=document.cookie.match("(^|;)\\s*"+param+"\\s*=\\s*([^;]+)");return readCookie?readCookie.pop():""}(KEY).split(",").map((function(v){return parseInt(v)}));function save(){const expires=new Date;expires.setDate(expires.getDate()+30),function(name,value,expireTimeInMillisecond){const d=new Date;d.setTime(d.getTime()+expireTimeInMillisecond);const expires="expires="+d.toUTCString();document.cookie=name+"="+value+";"+expires}(KEY,opens.join(","),expires)}function open($dir,visible){const iconElement=icon[visible?"dir-open":"dir-closed"].iconClass;$dir.find("> div i.icon").attr("class","icon "+iconElement),$dir.find("> ul.list")[visible?"show":"hide"]()}this.init=function(){let i=0;$block.find("li.directory").each((function(index,dir){const $dir=(0,_jquery.default)(dir);$dir.attr("id","block_sharing_cart-dir-"+i),i>=opens.length?opens.push(0):opens[i]&&open($dir,!0),$dir.find("> div div.toggle-wrapper").css("cursor","pointer").on("click",(function(e){!function(e){const $dir=(0,_jquery.default)(e.target).closest("li.directory"),i=$dir.attr("id").match(/(\d+)$/)[1],v="none"===$dir.find("> ul.list").css("display");open($dir,v),opens[i]=v?1:0,save()}(e)})),i++}))},this.reset=function(){opens=[],this.init(),save()}},move_targets=new function(){let $cancel=null,targets=[];this.hide=function(){if(null!==$cancel){const $commands=$cancel.closest(".commands");$cancel.remove(),$cancel=null,$commands.closest("li.activity").css("opacity",1),$commands.find("a").each((function(){(0,_jquery.default)(this).show()})),_jquery.default.each(targets,(function(index,$target){$target.remove()})),targets=[]}},this.show=function(item_id){this.hide();const $current=$block.find("#block_sharing_cart-item-"+item_id),$next=$current.next(),$list=$current.closest("ul");let next_id=0;function create_target(item_id,area_to){const $anchor=(0,_jquery.default)(' ').addClass("move-"+item_id+"-to-"+area_to).attr("title",str("movehere")).append((0,_jquery.default)(""+str("clicktomove")+"
").attr("alt",str("movehere"))),$target=(0,_jquery.default)(' ').append($anchor);return $anchor.on("click",(function(e){!function(e){const m=(0,_jquery.default)(e.target).closest("a").attr("class").match(/move-(\d+)-to-(\d+)/),item_id=m[1],area_to=m[2],$spinner=add_spinner();_jquery.default.post(get_action_url("rest"),{action:"move",item_id:item_id,area_to:area_to,sesskey:M.cfg.sesskey},(function(){reload_tree()})).fail((function(response){show_error(response)})).always((function(){$spinner.hide()}))}(e)})),$target}if($next.length&&(next_id=$next.attr("id").match(/item-(\d+)$/)[1]),$list.find("> li.activity").each((function(index,item){const $item=(0,_jquery.default)(item),to=$item.attr("id").match(/item-(\d+)$/)[1];if(to===item_id){$cancel=create_command("cancel"),$cancel.on("click",(function(){move_targets.hide()}));const $commands=$item.find(".commands");$commands.find("a").each((function(){(0,_jquery.default)(this).hide()})),$commands.append($cancel),$item.css("opacity",.5)}else if(to!==next_id){const $target=create_target(item_id,to);$item.before($target),targets.push($target)}}),this),$next){var $target=create_target(item_id,0);$list.append($target),targets.push($target)}}},restore_targets=new function(){this.is_directory=null;let $clipboard=null,targets=[];function create_target(id,section){const href=get_action_url("restore",{directory:!0===restore_targets.is_directory,target:id,course:course.id,section:section,in_section:(0,_jquery.default)("#copy-section-form").data("in-section"),sesskey:M.cfg.sesskey,returnurl:document.URL});let $target=(0,_jquery.default)(" ").attr("href",href).attr("title",str("copyhere")).append((0,_jquery.default)(' ').attr("alt",str("copyhere")).attr("src",M.util.image_url("dropzone_arrow","block_sharing_cart")));return targets.push($target),$target}this.hide=function(){null!==$clipboard&&($clipboard.remove(),$clipboard=null,_jquery.default.each(targets,(function(index,$target){$target.remove()})),targets=[])},this.show=function(id){this.hide();let $view=(0,_jquery.default)(" ");if(this.is_directory)$view.html(id).css("display","inline"),$view.prepend((0,_jquery.default)(" ").addClass("icon").attr("alt",id));else{const $item=$block.find("#block_sharing_cart-item-"+id);$view=(0,_jquery.default)($item.find("div")[0].cloneNode(!0)).css("display","inline"),$view.attr("class",$view.attr("class").replace(/mod-indent-\d+/,"")),$view.find(".commands").remove()}const $cancel=create_command("cancel");if($cancel.on("click",this.hide),$clipboard=(0,_jquery.default)('
'),$clipboard.append(str("clipboard")+": ").append($view).append($cancel),course.is_frontpage){const $sitetopic=(0,_jquery.default)(".sitetopic"),$mainmenu=(0,_jquery.default)(".block_site_main_menu");$sitetopic?$sitetopic.find("*").before($clipboard):$mainmenu&&$mainmenu.find(".content").before($clipboard),$mainmenu&&$mainmenu.find(".footer").before(create_target(id,0)),$sitetopic&&$sitetopic.find("ul.section").append(create_target(id,1))}else{const $container=(0,_jquery.default)(".course-content");$container.prepend($clipboard),$container.find("li.section").each((function(index,sectionDOM){const $section=(0,_jquery.default)(sectionDOM),section=$section.attr("id").match(/(\d+)$/)[1];$section.find("ul.section").first().append(create_target(id,section))}),this)}}};function init_footer_basket(){let currentDragging;const activities=document.querySelectorAll(".activity.activity-wrapper"),sections=document.querySelectorAll(".course-section-header"),sharingCartBlock=document.querySelector('section[data-block="sharing_cart"]');!function(){var _document$getElements;const courseSectionHeader=null!==(_document$getElements=document.getElementsByClassName("course-section-header")[0])&&void 0!==_document$getElements?_document$getElements:null;courseSectionHeader instanceof HTMLElement&&(courseSectionHeader.classList.add("draggable"),courseSectionHeader.setAttribute("draggable",!0))}();const footerIconContainer=document.getElementById("page-footer").querySelector('div[data-region="footer-container-popover"]'),basket=document.createElement("i");basket.setAttribute("class","fa fa-shopping-basket");const basketButton=document.createElement("button");basketButton.setAttribute("class","btn btn-icon bg-secondary icon-no-margin btn-footer-popover sharing_cart_basket"),basketButton.setAttribute("style","z-index: 1001;"),basketButton.append(basket);const dropAreaText=document.createElement("p");dropAreaText.setAttribute("class","font-weight-bold text-white"),dropAreaText.innerText=str("drop_here");const dropArea=document.createElement("div");function drag_event_listeners(draggable){draggable.addEventListener("dragstart",(e=>{basketButton.classList.remove("shake_basket"),null==footerIconContainer||footerIconContainer.prepend(basketButton),sharingCartBlock.children[0].classList.add("dragging_item"),sharingCartBlock.append(dropArea),currentDragging=e.target,isDragging=!0})),draggable.addEventListener("dragend",(()=>{currentDragging instanceof HTMLElement&&(null==footerIconContainer||footerIconContainer.removeChild(basketButton)),sharingCartBlock.children[0].classList.remove("dragging_item"),sharingCartBlock.removeChild(dropArea),isDragging=!1}))}dropArea.setAttribute("class","h-100 w-100 position-absolute d-flex justify-content-center align-items-center"),dropArea.append(dropAreaText),sections.forEach((section=>{drag_event_listeners(section)})),activities.forEach((activity=>{drag_event_listeners(activity)})),[basketButton,sharingCartBlock].forEach((dropzone=>{dropzone.addEventListener("dragover",(e=>{e.preventDefault(),dropzone.classList.add("drag_over")})),dropzone.addEventListener("dragenter",(e=>{e.preventDefault(),dropzone.classList.add("drag_over")})),dropzone.addEventListener("dragleave",(()=>{dropzone.classList.remove("drag_over")})),dropzone.addEventListener("drop",(()=>{currentDragging instanceof HTMLElement&¤tDragging.querySelector(".add-to-sharing-cart").click(),dropzone.classList.remove("drag_over"),currentDragging=void 0,isDragging=!1}))}))}_jquery.default.get_plugin_name=function(){let $blockheader=$block.find("h2");return $blockheader.length?$blockheader.html():($blockheader=$block.find("h3"),$blockheader.length?$blockheader.html():"")},_jquery.default.on_backup=function(e,activityName){let cmId=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;0===cmId&&(cmId=function($backup){const $activity=$backup.closest("li.activity");if($activity.length)return $activity.attr("id").match(/(\d+)$/)[1];const $commands=$backup.closest(".commands"),dataowner=$commands.attr("data-owner");return dataowner.length?dataowner.match(/(\d+)$/)[1]:$commands.find("a.editing_delete").attr("href").match(/delete=(\d+)/)[1]}((0,_jquery.default)(e.target)));const data={action:"is_userdata_copyable",cmid:cmId};on_backup_modal(data,activityName,str("confirm_backup"),!1)},_jquery.default.on_movedir=function(e){const $commands=(0,_jquery.default)(e.target).closest(".commands"),$current_dir=$commands.closest("li.directory"),current_path=$current_dir.length?$current_dir.attr("directory-path"):"/",item_id=(0,_jquery.default)(e.target).closest("li.activity").attr("id").match(/(\d+)$/)[1],dirs=[];$block.find("li.directory").each((function(){dirs.push((0,_jquery.default)(this).attr("directory-path"))}));const $form=(0,_jquery.default)("");function submit(){const folder_to=$form.find('[name="to"]').val(),$spinner=add_spinner();_jquery.default.post(get_action_url("rest"),{action:"movedir",item_id:item_id,folder_to:folder_to,sesskey:M.cfg.sesskey},(function(){reload_tree(),directories.reset()})).fail((function(response){show_error(response)})).always((function(){$spinner.hide()}))}if($form.attr("action","javascript:void(0)"),$form.submit(submit),0===dirs.length){var $input=(0,_jquery.default)(' ').val(current_path);setTimeout((function(){$input.focus()}),1),$form.append($input)}else{dirs.unshift("/");const $select=(0,_jquery.default)(' ');for(let i=0;i ").val(dirs[i]).append(dirs[i]));$select.val(current_path),$select.change(submit),$form.append($select);const $edit=create_command("edit");$edit.on("click",(function(){const $input=(0,_jquery.default)(' ').val(current_path);$select.remove(),$edit.replaceWith($input),$input.focus()})),$form.append($edit)}const $cancel=create_command("cancel");$cancel.on("click",(function(){$form.remove(),$commands.find("a").show()})),$form.append($cancel),$commands.find("a").each((function(){(0,_jquery.default)(this).hide()})),$commands.append($form)},_jquery.default.on_move=function(e){const id=(0,_jquery.default)(e.target).closest("li.activity").attr("id").match(/(\d+)$/)[1];move_targets.show(id)},_jquery.default.on_delete=function(e){const $item=(0,_jquery.default)(e.target).closest("li"),liText=$item[0].innerText;let modalBody,item,isDirectory=!1,description_text="";$item.hasClass("directory")?(isDirectory=!0,item=str("folder_string"),description_text=str("delete_folder")):item=str("activity_string"),modalBody=''+item+" "+liText+description_text+"
",confirm_modal({title:str("confirm_delete"),body:modalBody,save_button:str("modal_confirm_delete"),checkbox:!1,next:function(){let data={};!0===isDirectory?data={action:"delete_directory",path:$item.attr("directory-path"),sesskey:M.cfg.sesskey}:$item.hasClass("activity")&&(data={action:"delete",id:$item.attr("id").match(/(\d+)$/)[1],sesskey:M.cfg.sesskey});const $spinner=add_spinner();_jquery.default.post(get_action_url("rest"),data,(function(){reload_tree()})).fail((function(response){show_error(response)})).always((function(){$spinner.hide()})),e.stopPropagation()}})},_jquery.default.on_restore=function(e){const $item=(0,_jquery.default)(e.target).closest("li");let id=null;$item.hasClass("directory")?(id=$item.attr("directory-path"),restore_targets.is_directory=!0):$item.hasClass("activity")&&(id=$item.attr("id").match(/(\d+)$/)[1],restore_targets.is_directory=!1),restore_targets.show(id)},_jquery.default.on_section_backup=function(sectionId,sectionNumber,courseId,sectionName){on_backup_modal({action:"is_userdata_copyable_section",sectionid:sectionId,sectionnumber:sectionNumber,courseid:courseId},sectionName,''+str("backup_heavy_load_warning_message")+"
"+str("confirm_backup_section"),!0)},_jquery.default.init_bulk_delete=function(isspeciallayout){const bulkdelete=$block.find(".editing_bulkdelete");bulkdelete.length&&(isspeciallayout?(bulkdelete.attr("role","menuitem").addClass("dropdown-item menu-action"),bulkdelete.append((0,_jquery.default)("").append(bulkdelete.attr("title"))),$block.find(".menubar .dropdown .dropdown-menu").append(bulkdelete)):$block.find(".header .commands").append(bulkdelete))},_jquery.default.init_help_icon=function(isspeciallayout){const helpicon=$block.find(".header-commands > .help-icon");isspeciallayout?$block.find(".header-commands").parent().css("display","block"):$block.find(".header .commands").append(helpicon)},_jquery.default.init_block_header=function(){const isspeciallayout=$block.find(".menubar .dropdown .dropdown-menu").length;_jquery.default.init_bulk_delete(isspeciallayout),_jquery.default.init_help_icon(isspeciallayout)},_jquery.default.init_item_tree=function(){function add_actions(item,actions){const $item=(0,_jquery.default)(item),isCopying="1"===$item.attr("data-is-copying"),$commands=$item.find(".commands").first();_jquery.default.each(actions,(function(index,action){if("restore"===action&&isCopying)return;const $command=create_command(action);$command.on("click",(function(e){_jquery.default["on_"+action](e)})),$commands.append($command)}),this)}const activity_actions=["movedir","move","delete"];course&&activity_actions.push("restore");const directory_actions=["delete","restore"];$block.find("li.activity").each((function(index,item){1!=(0,_jquery.default)(item).attr("data-disable-copy")?add_actions(item,activity_actions):add_actions(item,["movedir","move","delete"])})),$block.find("li.directory").each((function(index,item){add_actions(item,directory_actions)})),directories.init()},_jquery.default.init_activity_commands=function(){function create_backup_icon(){const $backupIcon=(0,_jquery.default)(' ').append((0,_jquery.default)(' ')).attr("title",str("backup"));return"click_to_add"!==addMethod&&$backupIcon.addClass("d-none"),$backupIcon}function add_activity_backup_control($activity){const activityClass=$activity[0].className,modtype=activityClass.substr(activityClass.indexOf("modtype_")+8);let activityName=str("activity_string");"label"!==modtype&&(activityName=(0,_jquery.default)(".activity#"+$activity[0].id).find(".mod-indent-outer .activityinstance span.instancename").html());const $backupIcon=create_backup_icon();$backupIcon.on("click",(function(e){_jquery.default.on_backup(e,activityName)}));const $actionMenuItem=$activity.find(".action-menu.section-cm-edit-actions").parent(".actions");$actionMenuItem.find(".add-to-sharing-cart").length||$actionMenuItem.append($backupIcon)}(0,_jquery.default)(document).ajaxComplete((function(event,xhr,settings){const url=settings.url,lastslashindex=url.lastIndexOf("="),result=url.substring(lastslashindex+1);if("core_course_edit_module"===result||"core_course_get_module"===result){const data=JSON.parse(settings.data),action=data[0].args.action;if("delete"===action)return;setTimeout((function(){const activity_id=data[0].args.id,activity=(0,_jquery.default)("#module-"+activity_id);if(add_activity_backup_control(activity),"duplicate"===action){add_activity_backup_control(activity.next())}}),1)}})),(0,_jquery.default)("body.editing .course-content li.section").each((function(){!function($section){let sectionId=$section.find(".section_action_menu").data("sectionid");const sectionNumber=parseInt(String($section.attr("id")).match(/\d+/)[0]);let sectionName=$section.attr("aria-label")||$section.find(".sectionname").text().trim();const isFlexibleCourseFormat=(0,_jquery.default)("body[id$=flexsections]").length;isFlexibleCourseFormat&&null==sectionId&&(sectionId=$section.data("section-id"));const courseId=parseInt(String((0,_jquery.default)("body").attr("class")).match(/course-([0-9]*)( |$)/)[1]),$backupIcon=create_backup_icon();$backupIcon.on("click",(function(){const inPlaceEditSectionName=in_place_edit_section_name($section);sectionName=""!==inPlaceEditSectionName?inPlaceEditSectionName:sectionName,_jquery.default.on_section_backup(sectionId,sectionNumber,courseId,sectionName)}));let $sectionTitle=$section.find("h3.sectionname").first().find("a").last();const $inPlaceEditable=$section.find("h3.sectionname .inplaceeditable").first();$inPlaceEditable.length&&($sectionTitle=$inPlaceEditable),isFlexibleCourseFormat&&0===sectionNumber?($sectionTitle=$section.find("> .controls"),$sectionTitle.prepend($backupIcon)):$backupIcon.insertAfter($sectionTitle);const $activities=$section.find("li.activity");(0,_jquery.default)($activities).each((function(){add_activity_backup_control((0,_jquery.default)(this))}))}((0,_jquery.default)(this))}))},_jquery.default.init=function(){M.str.block_sharing_cart.pluginname=this.get_plugin_name(),_jquery.default.init_block_header(),_jquery.default.init_item_tree(),_jquery.default.init_activity_commands(),"drag_and_drop"===addMethod&&init_footer_basket()};var $spinner=(0,_jquery.default)(" ").addClass("spinner fa fa-3x fa-circle-o-notch fa-spin");(0,_jquery.default)("div#sharing-cart-spinner-modal div.spinner-container").prepend($spinner),_jquery.default.init()})),(0,_jquery.default)(".copy_section").on("click",(function(){const $section_selected=(0,_jquery.default)(".section-dropdown option:selected"),sectionId=$section_selected.data("section-id"),sectionNumber=$section_selected.data("section-number"),courseId=$section_selected.data("course-id"),sectionName=$section_selected.data("section-name");_jquery.default.on_section_backup(sectionId,sectionNumber,courseId,sectionName)})),(0,_jquery.default)(".copy_activity").on("click",(function(e){const activitySelected=(0,_jquery.default)(".activity-dropdown option:selected"),activityId=activitySelected.data("activity-id"),activityName=activitySelected.data("activity-name");_jquery.default.on_backup(e,activityName,activityId)}))}}));
//# sourceMappingURL=script.min.js.map
\ No newline at end of file
diff --git a/amd/build/script.min.js.map b/amd/build/script.min.js.map
index f1010f0..9eb5e23 100644
--- a/amd/build/script.min.js.map
+++ b/amd/build/script.min.js.map
@@ -1 +1 @@
-{"version":3,"file":"script.min.js","sources":["../src/script.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see .\n\n/**\n * Sharing Cart\n *\n * @package block_sharing_cart\n * @copyright 2017 (C) VERSION2, INC.\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport $ from 'jquery';\nimport ModalFactory from 'core/modal_factory';\nimport ModalEvents from 'core/modal_events';\n\n/**\n * @param {string} addMethod\n */\nexport const init = function(addMethod) {\n $(document).ready(function() {\n let isDragging = false;\n\n /**\n * Returns a localized string\n *\n * @param {String} identifier\n * @return {String}\n */\n function str(identifier) {\n return M.str.block_sharing_cart[identifier] || M.str.moodle[identifier];\n }\n\n /**\n * Get an action URL\n *\n * @param {String} name The action name\n * @param {Object} [args] The action parameters\n * @return {String}\n */\n function get_action_url(name, args) {\n let url = M.cfg.wwwroot + '/blocks/sharing_cart/' + name + '.php';\n if (args) {\n const q = [];\n for (let k in args) {\n q.push(k + '=' + encodeURIComponent(args[k]));\n }\n url += '?' + q.join('&');\n }\n return url;\n }\n\n /**\n * Shake the basket to indicate cancel/submit\n */\n function shake_basket() {\n if (addMethod === 'drag_and_drop') {\n const sharingCartBasket = document.querySelector('button.sharing_cart_basket');\n sharingCartBasket?.classList.add('shake_basket');\n }\n }\n\n /**\n * Remove the shake effect and basket icon\n */\n function remove_basket() {\n if (addMethod === 'drag_and_drop' && !isDragging) {\n const footer = document.getElementById('page-footer');\n const footerIconContainer = footer.querySelector('div[data-region=\"footer-container-popover\"]');\n const sharingCartBasket = document.querySelector('button.sharing_cart_basket');\n\n if (sharingCartBasket) {\n footerIconContainer?.removeChild(sharingCartBasket);\n sharingCartBasket.classList.remove('shake_basket');\n }\n }\n }\n\n /**\n * Modal called when confirming an action.\n *\n * @param obj\n */\n function confirm_modal(obj) {\n\n // Checkbox for copying userdata confirmation.\n if (obj.checkbox) {\n obj.body +=\n '';\n }\n\n\n ModalFactory.create({\n type: ModalFactory.types.SAVE_CANCEL,\n title: obj.title,\n body: obj.body,\n }).done(function(modal) {\n let is_submitted = false;\n modal.setSaveButtonText(obj.save_button);\n\n const userdata_checkbox = $(modal.getRoot()).find('#modal-userdata-checkbox');\n const anonymize_checkbox = $(modal.getRoot()).find('#modal-anonymize-checkbox');\n\n userdata_checkbox.on('change', (e) => {\n if (e.currentTarget.checked) {\n anonymize_checkbox.attr('disabled', null);\n } else {\n anonymize_checkbox.prop('checked', false).attr('disabled', true);\n }\n });\n\n // On save save check - if checkbox is checked.\n modal.getRoot().on(ModalEvents.save, function(e) {\n const response = {\n 'userdata': userdata_checkbox.is(':checked'),\n 'anonymize': anonymize_checkbox.is(':checked'),\n };\n\n obj.next(response);\n is_submitted = true;\n });\n\n modal.getRoot().on(ModalEvents.cancel, function() {\n remove_basket();\n });\n\n // Remove modal from html.\n modal.getRoot().on(ModalEvents.hidden, function() {\n $('body').removeClass('modal-open');\n\n if (!is_submitted) {\n remove_basket();\n }\n });\n\n modal.show();\n });\n }\n\n /**\n * Get the section name from the section when\n * it's changed with the in place editor\n *\n * @param $section\n * @returns {*}\n */\n function in_place_edit_section_name($section) {\n let sectionName = '';\n const $inPlaceEditable = $section.find('h3.sectionname .inplaceeditable');\n if ($inPlaceEditable.length) {\n sectionName = $inPlaceEditable.data('value');\n }\n return sectionName;\n }\n\n /**\n * @param post_data\n * @param title_str\n * @param body_str\n * @param isSection\n */\n function on_backup_modal(post_data, title_str, body_str, isSection) {\n (function(on_success) {\n $.post(get_action_url('rest'), post_data,\n function(response) {\n on_success(response);\n }, \"text\")\n .fail(function(response) {\n show_error(response);\n });\n })(function(response) {\n const copyable = response === '1';\n let checkbox = false;\n\n if (copyable) {\n checkbox = true;\n }\n\n confirm_modal({\n 'title': title_str,\n 'body': body_str,\n 'save_button': str('modal_confirm_backup'),\n 'checkbox': checkbox,\n 'next': function(data) {\n if (isSection === true) {\n backup_section(post_data.sectionid, post_data.sectionnumber, post_data.courseid, data.userdata, data.anonymize);\n } else {\n backup(post_data.cmid, data.userdata, data.anonymize);\n }\n\n shake_basket();\n }\n });\n });\n }\n\n /** @var {Object} The icon configurations */\n const icon = {\n // Actions\n 'backup': {\n css: 'editing_backup',\n iconClass: 'fa fa-frown-o',\n },\n 'movedir': {\n css: 'editing_right',\n iconClass: 'fa fa-arrow-right',\n },\n 'move': {\n css: 'editing_move_',\n iconClass: 'fa fa-arrows-v',\n },\n 'edit': {\n css: 'editing_update',\n iconClass: 'fa fa-pencil',\n },\n 'cancel': {\n css: 'editing_cancel',\n iconClass: 'fa fa-ban',\n },\n 'delete': {\n css: 'editing_update',\n iconClass: 'fa fa-trash',\n },\n 'restore': {\n css: 'editing_restore',\n iconClass: 'fa fa-clone',\n },\n // Directories\n 'dir-open': {\n iconClass: 'fa fa-folder-open-o'\n },\n 'dir-closed': {\n iconClass: 'fa fa-folder-o'\n },\n };\n\n /** @var {Node} The Sharing Cart block container node */\n const $block = $('.block_sharing_cart');\n\n /** @var {Object} The current course */\n const course = new function () {\n const body = $('body');\n this.id = body.attr('class').match(/course-(\\d+)/)[1];\n this.is_frontpage = body.hasClass('pagelayout-frontpage');\n }();\n\n /**\n * Shows an error message with given Ajax error\n *\n * @param {Object} response The Ajax response\n */\n function show_error(response) {\n try {\n const ex = JSON.parse(response.responseText);\n new M.core.exception({\n name: str('pluginname') + ' - ' + str('error'),\n message: ex.message\n });\n } catch (e) {\n new M.core.exception({\n name: str('pluginname') + ' - ' + str('error'),\n message: response.responseText\n });\n }\n }\n\n /**\n * Check special layout (theme boost)\n *\n * @return {Boolean}\n */\n function verify_layout() {\n const menuelement = $block.find('.menubar .dropdown .dropdown-menu');\n return (menuelement.length);\n }\n\n /**\n * Set Cookie\n * @param name\n * @param value\n * @param expireTimeInMillisecond\n */\n function setCookie(name, value, expireTimeInMillisecond) {\n const d = new Date();\n d.setTime(d.getTime() + expireTimeInMillisecond);\n const expires = 'expires=' + d.toUTCString();\n document.cookie = name + '=' + value + ';' + expires + '';\n }\n\n /**\n * Get Cookie Value\n * @param param\n * @returns {*}\n */\n function getCookieValue(param) {\n const readCookie = document.cookie.match('(^|;)\\\\s*' + param + '\\\\s*=\\\\s*([^;]+)');\n return readCookie ? readCookie.pop() : '';\n }\n\n /**\n * Create a command icon\n *\n * @param {String} name The command name, predefined in icon\n * @param {String} [pix] The icon pix name to override\n */\n function create_command(name) {\n const iconElement = $(' ')\n .attr('alt', str(name))\n .attr('class', icon[name].iconClass);\n // If (verify_layout()) {\n // iconElement.addClass('iconcustom');\n // }\n\n return $('')\n .addClass(icon[name].css)\n .attr('title', str(name))\n .append(iconElement);\n }\n\n /**\n * Create a spinner\n * @param $node\n * @returns {*|jQuery}\n */\n function add_spinner() {\n const $spinner = ($('
'));\n $('section.block_sharing_cart').append($spinner);\n return $spinner;\n }\n\n /**\n *\n * @param $node\n * @returns {jQuery.fn.init}\n */\n function add_node_spinner($node) {\n const $node_spinner = $(' ');\n $node.append($node_spinner);\n return $node_spinner;\n }\n\n $(document).on('click', 'a.restore', function() {\n add_spinner();\n });\n\n /**\n *\n * Reload the Sharing Cart item tree\n */\n function reload_tree() {\n $.post(get_action_url(\"rest\"),\n {\n \"action\": \"render_tree\",\n \"courseid\": course.id\n },\n function(response) {\n $block.find(\".tree\").replaceWith($(response));\n $.init_item_tree();\n }, \"html\")\n .fail(function(response) {\n show_error(response);\n });\n }\n\n /**\n * Backup an activity\n *\n * @param {int} cmid\n * @param {Boolean} userdata\n * @param {Boolean} anonymize\n */\n function backup(cmid, userdata, anonymize) {\n let $commands = $('#module-' + cmid + ' .actions');\n if (!$commands.length) {\n $commands = $('[data-owner=\"#module-' + cmid + '\"]');\n }\n\n const $spinner = add_spinner();\n const $node_spinner = add_node_spinner($commands);\n\n $.post(get_action_url(\"rest\"),\n {\n \"action\": \"backup\",\n \"cmid\": cmid,\n \"userdata\": userdata,\n \"anonymize\": anonymize,\n \"sesskey\": M.cfg.sesskey,\n \"courseid\": course.id\n },\n function() {\n reload_tree();\n })\n .fail(function(response) {\n show_error(response);\n })\n .always(function() {\n $node_spinner.hide();\n $spinner.hide();\n remove_basket();\n });\n }\n\n /**\n * Backup an activities in a section\n *\n * @param {int} sectionId\n * @param {int} sectionNumber\n * @param {int} courseId\n * @param {Boolean} userdata\n * @param {Boolean} anonymize\n */\n function backup_section(sectionId, sectionNumber, courseId, userdata, anonymize) {\n const $commands = $('span.inplaceeditable[data-itemtype=sectionname][data-itemid=' + sectionId + ']');\n const $section = $commands.closest(\"li.section.main\");\n let sectionName = $section.attr('aria-label') || $section.find('.sectionname').text().trim();\n\n if (sectionName === null) {\n sectionName = String($('#region-main .section_action_menu[data-sectionid=\\'' + sectionId + '\\']')\n .parent().parent().find('h3.sectionname').text());\n }\n\n const inPlaceEditSectionName = in_place_edit_section_name($section);\n sectionName = (inPlaceEditSectionName !== '') ? inPlaceEditSectionName : sectionName;\n\n const $spinner = add_spinner();\n const $node_spinner = add_node_spinner($commands);\n\n $.post(get_action_url(\"rest\"),\n {\n \"action\": \"backup_section\",\n \"sectionid\": sectionId,\n \"sectionnumber\": sectionNumber,\n \"courseid\": courseId,\n \"sectionname\": sectionName,\n \"userdata\": userdata,\n \"anonymize\": anonymize,\n \"sesskey\": M.cfg.sesskey\n },\n function() {\n reload_tree();\n })\n .fail(function(response) {\n show_error(response);\n })\n .always(function() {\n $spinner.hide();\n $node_spinner.hide();\n remove_basket();\n });\n }\n\n\n // /////// CLASSES /////////\n\n /**\n * @class Directory states manager\n */\n const directories = new function () {\n const KEY = 'block_sharing_cart-dirs';\n\n let opens = getCookieValue(KEY).split(',').map(function (v) {\n return parseInt(v);\n });\n\n function save() {\n const expires = new Date();\n expires.setDate(expires.getDate() + 30);\n setCookie(KEY, opens.join(','), expires);\n }\n\n function open($dir, visible) {\n const iconIndex = visible ? 'dir-open' : 'dir-closed';\n const iconElement = icon[iconIndex].iconClass;\n $dir.find('> div i.icon').attr('class', 'icon ' + iconElement);\n $dir.find('> ul.list')[visible ? 'show' : 'hide']();\n }\n\n function toggle(e) {\n const $dir = $(e.target).closest('li.directory');\n const i = $dir.attr('id').match(/(\\d+)$/)[1];\n const v = $dir.find('> ul.list').css('display') === 'none';\n\n open($dir, v);\n opens[i] = v ? 1 : 0;\n save();\n }\n\n /**\n * Initialize directory states\n */\n this.init = function () {\n let i = 0;\n $block.find('li.directory').each(function (index, dir) {\n const $dir = $(dir);\n $dir.attr('id', 'block_sharing_cart-dir-' + i);\n if (i >= opens.length) {\n opens.push(0);\n } else if (opens[i]) {\n open($dir, true);\n }\n $dir.find('> div div.toggle-wrapper').css('cursor', 'pointer').on('click', function (e) {\n toggle(e);\n });\n i++;\n });\n };\n\n /**\n * Reset directory states\n */\n this.reset = function () {\n opens = [];\n this.init();\n save();\n };\n }();\n\n /**\n * @class Targets for moving an item directory\n */\n const move_targets = new function () {\n let $cancel = null,\n targets = [];\n\n /**\n * Hide move targets\n */\n this.hide = function () {\n if ($cancel !== null) {\n const $commands = $cancel.closest('.commands');\n $cancel.remove();\n $cancel = null;\n $commands.closest('li.activity').css('opacity', 1.0);\n $commands.find('a').each(function () {\n $(this).show();\n });\n $.each(targets, function (index, $target) {\n $target.remove();\n });\n targets = [];\n }\n };\n\n /**\n * Show move targets for a given item\n *\n * @param {int} id The item ID\n */\n this.show = function (item_id) {\n this.hide();\n\n function move(e) {\n\n const m = $(e.target).closest('a').attr('class').match(/move-(\\d+)-to-(\\d+)/);\n const item_id = m[1],\n area_to = m[2];\n\n const $spinner = add_spinner();\n $.post(get_action_url(\"rest\"),\n {\n \"action\": \"move\",\n \"item_id\": item_id,\n \"area_to\": area_to,\n \"sesskey\": M.cfg.sesskey\n },\n function () {\n reload_tree();\n })\n .fail(function (response) {\n show_error(response);\n })\n .always(function () {\n $spinner.hide();\n });\n }\n\n const $current = $block.find('#block_sharing_cart-item-' + item_id);\n const $next = $current.next();\n const $list = $current.closest('ul');\n\n let next_id = 0;\n if ($next.length) {\n next_id = $next.attr('id').match(/item-(\\d+)$/)[1];\n }\n\n /**\n *\n * @param item_id\n * @param area_to\n * @returns {jQuery}\n */\n function create_target(item_id, area_to) {\n const $anchor = $(' ')\n .addClass('move-' + item_id + '-to-' + area_to)\n .attr('title', str('movehere'))\n .append(\n $('' + str('clicktomove') + '
')\n .attr('alt', str('movehere'))\n );\n\n const $target = $(' ')\n .append($anchor);\n $anchor.on('click', function (e) {\n move(e);\n });\n\n return $target;\n }\n\n $list.find('> li.activity').each(function (index, item) {\n const $item = $(item);\n const to = $item.attr('id').match(/item-(\\d+)$/)[1];\n if (to === item_id) {\n $cancel = create_command('cancel', 't/left');\n $cancel.on('click', function () {\n move_targets.hide();\n });\n const $commands = $item.find('.commands');\n $commands.find('a').each(function () {\n $(this).hide();\n });\n $commands.append($cancel);\n $item.css('opacity', 0.5);\n } else if (to !== next_id) {\n const $target = create_target(item_id, to);\n $item.before($target);\n targets.push($target);\n }\n }, this);\n\n if ($next) {\n var $target = create_target(item_id, 0);\n $list.append($target);\n targets.push($target);\n }\n };\n }();\n\n /**\n * @class Targets for restoring an item\n */\n const restore_targets = new function () {\n this.is_directory = null;\n let $clipboard = null,\n targets = [];\n\n /**\n *\n * @param id\n * @param section\n * @returns {jQuery}\n */\n\n function create_target(id, section) {\n const href = get_action_url('restore', {\n 'directory': (restore_targets.is_directory === true),\n 'target': id,\n 'course': course.id,\n 'section': section,\n 'in_section': $('#copy-section-form').data('in-section'),\n 'sesskey': M.cfg.sesskey,\n 'returnurl': document.URL,\n });\n\n let $target = $(' ').attr('href', href).attr('title', str('copyhere')).append(\n $(' ').attr('alt', str('copyhere')).attr('src', M.util.image_url('dropzone_arrow', 'block_sharing_cart'))\n );\n\n targets.push($target);\n\n return $target;\n }\n\n /**\n * Hide restore targets\n */\n this.hide = function () {\n if ($clipboard !== null) {\n $clipboard.remove();\n $clipboard = null;\n $.each(targets, function (index, $target) {\n $target.remove();\n });\n targets = [];\n }\n };\n\n /**\n *\n *\n * @param {int} id The item ID\n */\n this.show = function (id) {\n this.hide();\n\n let $view = $(\" \");\n\n if (this.is_directory) {\n $view.html(id).css('display', 'inline');\n $view.prepend(\n $(\" \").addClass(\"icon\")\n .attr(\"alt\", id)\n // .attr(\"src\", M.util.image_url(icon['dir-closed'].pix, null))\n );\n } else {\n const $item = $block.find('#block_sharing_cart-item-' + id);\n $view = $($item.find('div')[0].cloneNode(true)).css('display', 'inline');\n $view.attr('class', $view.attr('class').replace(/mod-indent-\\d+/, ''));\n $view.find('.commands').remove();\n }\n\n const $cancel = create_command('cancel');\n\n $cancel.on('click', this.hide);\n\n $clipboard = $('');\n $clipboard.append(str('clipboard') + \": \").append($view).append($cancel);\n\n if (course.is_frontpage) {\n const $sitetopic = $('.sitetopic');\n const $mainmenu = $('.block_site_main_menu');\n if ($sitetopic) {\n $sitetopic.find('*').before($clipboard);\n } else if ($mainmenu) {\n $mainmenu.find('.content').before($clipboard);\n }\n\n // Mainmenu = section #0, sitetopic = section #1\n if ($mainmenu) {\n $mainmenu.find('.footer').before(create_target(id, 0));\n }\n if ($sitetopic) {\n $sitetopic.find('ul.section').append(create_target(id, 1));\n }\n } else {\n const $container = $('.course-content');\n $container.prepend($clipboard);\n $container.find(M.course.format.get_section_wrapper(null)).each(function (index, sectionDOM) {\n const $section = $(sectionDOM);\n const section = $section.attr('id').match(/(\\d+)$/)[1];\n $section.find('ul.section').first().append(create_target(id, section));\n }, this);\n }\n };\n }();\n\n // /////// INITIALIZATION /////////\n\n /**\n *\n * @returns {string|*}\n */\n $.get_plugin_name = function() {\n let $blockheader = $block.find(\"h2\");\n\n if (!$blockheader.length) {\n $blockheader = $block.find(\"h3\");\n\n if ($blockheader.length) {\n return $blockheader.html();\n }\n } else {\n return $blockheader.html();\n }\n\n return \"\";\n };\n\n /**\n *\n * @param e\n * @param activityName\n * @param {int} cmId\n */\n $.on_backup = function(e, activityName, cmId = 0) {\n if (cmId === 0) {\n cmId = (function ($backup) {\n const $activity = $backup.closest('li.activity');\n if ($activity.length) {\n return $activity.attr('id').match(/(\\d+)$/)[1];\n }\n const $commands = $backup.closest('.commands');\n const dataowner = $commands.attr('data-owner');\n if (dataowner.length) {\n return dataowner.match(/(\\d+)$/)[1];\n }\n return $commands.find('a.editing_delete').attr('href').match(/delete=(\\d+)/)[1];\n })($(e.target));\n }\n\n const data =\n {\n \"action\": \"is_userdata_copyable\",\n \"cmid\": cmId\n };\n\n on_backup_modal(data, activityName, str('confirm_backup'), false);\n };\n\n /**\n * On movedir command clicked\n *\n * @param {DOMEventFacade} e\n */\n $.on_movedir = function(e) {\n const $commands = $(e.target).closest('.commands');\n\n const $current_dir = $commands.closest('li.directory');\n const current_path = $current_dir.length ? $current_dir.attr('directory-path') : '/';\n\n const item_id = $(e.target).closest('li.activity').attr('id').match(/(\\d+)$/)[1];\n\n const dirs = [];\n $block.find('li.directory').each(function() {\n dirs.push($(this).attr('directory-path'));\n });\n\n const $form = $('
');\n // eslint-disable-next-line no-script-url\n $form.attr('action', 'javascript:void(0)');\n\n function submit() {\n const folder_to = $form.find('[name=\"to\"]').val();\n const $spinner = add_spinner();\n $.post(get_action_url('rest'),\n {\n \"action\": \"movedir\",\n \"item_id\": item_id,\n \"folder_to\": folder_to,\n \"sesskey\": M.cfg.sesskey\n },\n function() {\n reload_tree();\n directories.reset();\n })\n .fail(function(response) {\n show_error(response);\n })\n .always(function() {\n $spinner.hide();\n });\n }\n\n $form.submit(submit);\n\n if (dirs.length === 0) {\n var $input = $('
').val(current_path);\n setTimeout(function() {\n $input.focus();\n }, 1);\n $form.append($input);\n } else {\n dirs.unshift('/');\n\n const $select = $('
');\n for (let i = 0; i < dirs.length; i++) {\n $select.append($(' ').val(dirs[i]).append(dirs[i]));\n }\n $select.val(current_path);\n $select.change(submit);\n $form.append($select);\n\n const $edit = create_command('edit');\n\n $edit.on('click', function() {\n const $input = $(' ').val(current_path);\n $select.remove();\n $edit.replaceWith($input);\n $input.focus();\n });\n\n $form.append($edit);\n }\n\n const $cancel = create_command('cancel');\n $cancel.on('click', function() {\n $form.remove();\n $commands.find('a').show();\n });\n $form.append($cancel);\n\n $commands.find('a').each(function() {\n $(this).hide();\n });\n $commands.append($form);\n };\n\n /**\n * On move command clicked\n *\n * @param {DOMEventFacade} e\n */\n $.on_move = function(e) {\n const $item = $(e.target).closest('li.activity');\n const id = $item.attr('id').match(/(\\d+)$/)[1];\n\n move_targets.show(id);\n };\n\n /**\n * On delete command clicked\n *\n * @param {DOMEventFacade} e\n */\n $.on_delete = function(e) {\n const $item = $(e.target).closest('li');\n const liText = $item[0].innerText;\n\n let isDirectory = false;\n let modalBody;\n let item;\n let description_text = '';\n\n if ($item.hasClass(\"directory\")) {\n isDirectory = true;\n item = str('folder_string');\n description_text = str('delete_folder');\n } else {\n item = str('activity_string');\n }\n\n modalBody = '' + item + ' ' + liText + description_text + '
';\n\n confirm_modal({\n 'title': str('confirm_delete'),\n 'body': modalBody,\n 'save_button': str('modal_confirm_delete'),\n 'checkbox': false,\n 'next': function() {\n\n let data = {};\n\n if (isDirectory === true) {\n data = {\n \"action\": \"delete_directory\",\n \"path\": $item.attr(\"directory-path\"),\n \"sesskey\": M.cfg.sesskey\n };\n } else if ($item.hasClass(\"activity\")) {\n data = {\n \"action\": \"delete\",\n \"id\": $item.attr('id').match(/(\\d+)$/)[1],\n \"sesskey\": M.cfg.sesskey\n };\n }\n\n const $spinner = add_spinner();\n\n $.post(get_action_url(\"rest\"), data,\n function() {\n reload_tree();\n })\n .fail(function(response) {\n show_error(response);\n })\n .always(function() {\n $spinner.hide();\n });\n\n e.stopPropagation();\n }\n });\n };\n\n /**\n * On restore command clicked\n *\n * @param {DOMEventFacade} e\n */\n $.on_restore = function(e) {\n const $item = $(e.target).closest('li');\n let id = null;\n\n if ($item.hasClass(\"directory\")) {\n id = $item.attr(\"directory-path\");\n restore_targets.is_directory = true;\n } else if ($item.hasClass(\"activity\")) {\n id = $item.attr('id').match(/(\\d+)$/)[1];\n restore_targets.is_directory = false;\n }\n\n restore_targets.show(id);\n };\n\n /**\n * On backup the whole section as a folder\n *\n * @param {int} sectionId\n * @param {int} sectionNumber\n * @param {int} courseId\n * @param {string} sectionName\n */\n $.on_section_backup = function(sectionId, sectionNumber, courseId, sectionName) {\n const data =\n {\n \"action\": \"is_userdata_copyable_section\",\n \"sectionid\": sectionId,\n \"sectionnumber\": sectionNumber,\n \"courseid\": courseId,\n };\n\n const body_html = '' + str('backup_heavy_load_warning_message') +\n '
' + str('confirm_backup_section');\n\n on_backup_modal(data, sectionName, body_html, true);\n };\n\n /**\n * Initialize the delete bulk\n */\n $.init_bulk_delete = function(isspeciallayout) {\n const bulkdelete = $block.find('.editing_bulkdelete');\n if (bulkdelete.length) {\n if (isspeciallayout) {\n bulkdelete.attr('role', 'menuitem').addClass('dropdown-item menu-action');\n bulkdelete.append($(\"\").append(bulkdelete.attr('title')));\n\n $block.find('.menubar .dropdown .dropdown-menu').append(bulkdelete);\n } else {\n $block.find('.header .commands').append(bulkdelete);\n }\n }\n };\n\n /**\n * Initialize the help icon\n */\n $.init_help_icon = function(isspeciallayout) {\n const helpicon = $block.find('.header-commands > .help-icon');\n\n if (isspeciallayout) {\n $block.find('.header-commands').parent().css('display', 'block');\n } else {\n $block.find('.header .commands').append(helpicon);\n }\n };\n\n /**\n * Initialize the Sharing Cart block header\n */\n $.init_block_header = function() {\n const isspeciallayout = verify_layout();\n $.init_bulk_delete(isspeciallayout);\n $.init_help_icon(isspeciallayout);\n };\n\n /**\n * Initialize the Sharing Cart item tree\n */\n $.init_item_tree = function() {\n function add_actions(item, actions) {\n const $item = $(item);\n const isCopying = $item.attr('data-is-copying') === '1';\n const $commands = $item.find('.commands').first();\n\n $.each(actions, function(index, action) {\n if (action === 'restore' && isCopying) {\n return;\n }\n const $command = create_command(action);\n $command.on('click', function(e) {\n $['on_' + action](e);\n });\n $commands.append($command);\n }, this);\n }\n\n const activity_actions = ['movedir', 'move', 'delete'];\n if (course) {\n activity_actions.push('restore');\n }\n\n const directory_actions = ['delete', 'restore'];\n\n // Initialize items\n $block.find('li.activity').each(function(index, item) {\n if($(item).attr('data-disable-copy') == 1) {\n add_actions(item, ['movedir', 'move', 'delete']);\n return;\n }\n add_actions(item, activity_actions);\n });\n\n // Initialize directory items\n $block.find('li.directory').each(function(index, item) {\n add_actions(item, directory_actions);\n });\n\n // Initialize directories\n directories.init();\n };\n\n /**\n * Extract html object from area where moodle ajax was called.\n *\n * Call add_activity_backup_control to re append sharing cart icon.\n */\n $.init_activity_commands = function() {\n $(document).ajaxComplete(function(event, xhr, settings) {\n\n const url = settings.url;\n const lastslashindex = url.lastIndexOf('=');\n const result = url.substring(lastslashindex + 1);\n\n if (result === 'core_course_edit_module' || result === 'core_course_get_module') {\n\n const data = JSON.parse(settings.data);\n const action = data[0].args.action;\n\n // Don't try to add icon if activity has been deleted.\n if (action === 'delete') {\n return;\n }\n\n setTimeout(function() {\n const activity_id = data[0].args.id;\n const activity = $('#module-' + activity_id);\n add_activity_backup_control(activity);\n\n if (action === 'duplicate') {\n const duplicated = activity.next();\n add_activity_backup_control(duplicated);\n }\n }, 1);\n }\n });\n\n /**\n * Create the backup icon\n *\n * @returns $backupIcon\n */\n function create_backup_icon() {\n\n const $backupIcon = $(' ')\n .append($(' '))\n .attr('title', str('backup'));\n\n if (addMethod !== 'click_to_add') {\n $backupIcon.addClass('d-none');\n }\n\n return $backupIcon;\n }\n\n /**\n * Add backup control with a click event to an activity\n * Added fix for copying an activity without backup routine\n *\n * @param $activity\n */\n function add_activity_backup_control($activity) {\n\n const activityClass = $activity[0].className;\n\n // Selecting modtype without prefix.\n const modtype = activityClass.substr(activityClass.indexOf('modtype_') + 8);\n\n // Default activity name.\n let activityName = str('activity_string');\n\n // Label is using a different html / css layout, so it's needed to get the name by using another $find.\n if (modtype !== 'label') {\n activityName = $('.activity#' + $activity[0].id)\n .find('.mod-indent-outer .activityinstance span.instancename')\n .html();\n }\n\n const $backupIcon = create_backup_icon();\n\n $backupIcon.on('click', function(e) {\n $.on_backup(e, activityName);\n });\n\n const $actionMenuItem = $activity.find('.action-menu.section-cm-edit-actions').parent('.actions');\n\n if (!$actionMenuItem.find('.add-to-sharing-cart').length) {\n $actionMenuItem.append($backupIcon);\n }\n }\n\n /**\n * Add backup control with a click event to a section\n *\n * @param $section\n */\n function add_section_backup_control($section) {\n\n let sectionId = $section.find('.section_action_menu').data('sectionid');\n const sectionNumber = parseInt(String($section.attr('id')).match(/\\d+/)[0]);\n let sectionName = $section.attr('aria-label') || $section.find('.sectionname').text().trim();\n\n const isFlexibleCourseFormat = $('body[id$=flexsections]').length;\n\n // Extract the section ID from the section if this is a Flexible\n // course format (since this format doesn't have an action menu)\n if (isFlexibleCourseFormat && (typeof sectionId === 'undefined' || sectionId === null)) {\n sectionId = $section.data('section-id');\n }\n\n // A bit unsafe to extract the course ID from the body but it's the best option we got at the moment\n const courseId = parseInt(String($('body').attr('class')).match(/course-([0-9]*)( |$)/)[1]);\n\n const $backupIcon = create_backup_icon();\n\n $backupIcon.on('click', function() {\n const inPlaceEditSectionName = in_place_edit_section_name($section);\n sectionName = (inPlaceEditSectionName !== '') ? inPlaceEditSectionName : sectionName;\n $.on_section_backup(sectionId, sectionNumber, courseId, sectionName);\n });\n\n let $sectionTitle = $section.find('h3.sectionname').first().find('a').last();\n\n const $inPlaceEditable = $section.find('h3.sectionname .inplaceeditable').first();\n if ($inPlaceEditable.length) {\n $sectionTitle = $inPlaceEditable;\n }\n\n // Add the backup icon after the cog wheel if this is a Flexible course format\n if (isFlexibleCourseFormat && sectionNumber === 0) {\n $sectionTitle = $section.find('> .controls');\n $sectionTitle.prepend($backupIcon);\n } else {\n $backupIcon.insertAfter($sectionTitle);\n }\n\n const activitySelector = 'li.activity';\n\n const $activities = $section.find(activitySelector);\n\n $($activities).each(function() {\n add_activity_backup_control($(this));\n });\n }\n\n $(\"body.editing .course-content li.section\").each(function() {\n add_section_backup_control($(this));\n });\n };\n\n /**\n * Initialize the Sharing Cart footer basket for 4.0+.\n */\n function init_footer_basket() {\n let currentDragging;\n const activities = document.querySelectorAll(\".activity.activity-wrapper\");\n const sections = document.querySelectorAll(\".course-section-header\");\n const sharingCartBlock = document.querySelector('section[data-block=\"sharing_cart\"]');\n\n add_draggable_to_first_section();\n\n const footer = document.getElementById('page-footer');\n const footerIconContainer = footer.querySelector('div[data-region=\"footer-container-popover\"]');\n\n const basket = document.createElement('i');\n basket.setAttribute('class', 'fa fa-shopping-basket');\n\n const basketButton = document.createElement('button');\n basketButton.setAttribute('class', 'btn btn-icon bg-secondary icon-no-margin btn-footer-popover sharing_cart_basket');\n basketButton.setAttribute('style', 'z-index: 1001;');\n basketButton.append(basket);\n\n const dropAreaText = document.createElement('p');\n dropAreaText.setAttribute('class', 'font-weight-bold text-white');\n dropAreaText.innerText = str('drop_here');\n\n const dropArea = document.createElement('div');\n dropArea.setAttribute('class',\n 'h-100 w-100 position-absolute d-flex justify-content-center align-items-center');\n dropArea.append(dropAreaText);\n\n sections.forEach(section => {\n drag_event_listeners(section);\n });\n\n activities.forEach(activity => {\n drag_event_listeners(activity);\n });\n\n /**\n * Initialize events for dragging\n * @param {object} draggable\n */\n function drag_event_listeners(draggable) {\n draggable.addEventListener('dragstart', (e) => {\n basketButton.classList.remove('shake_basket');\n\n footerIconContainer?.prepend(basketButton);\n sharingCartBlock.children[0].classList.add('dragging_item');\n sharingCartBlock.append(dropArea);\n currentDragging = e.target;\n isDragging = true;\n });\n\n draggable.addEventListener('dragend', () => {\n if (currentDragging instanceof HTMLElement) {\n footerIconContainer?.removeChild(basketButton);\n }\n\n sharingCartBlock.children[0].classList.remove('dragging_item');\n sharingCartBlock.removeChild(dropArea);\n isDragging = false;\n });\n }\n\n [basketButton, sharingCartBlock].forEach((dropzone) => {\n dropzone.addEventListener(\"dragover\", (e) => {\n e.preventDefault();\n dropzone.classList.add('drag_over');\n });\n\n dropzone.addEventListener(\"dragenter\", (e) => {\n e.preventDefault();\n dropzone.classList.add('drag_over');\n });\n\n dropzone.addEventListener(\"dragleave\", () => {\n dropzone.classList.remove('drag_over');\n });\n\n dropzone.addEventListener(\"drop\", () => {\n if (currentDragging instanceof HTMLElement) {\n currentDragging.querySelector('.add-to-sharing-cart').click();\n }\n\n dropzone.classList.remove('drag_over');\n currentDragging = undefined;\n isDragging = false;\n });\n });\n }\n\n /**\n * Make the first section (General) draggable\n */\n function add_draggable_to_first_section() {\n const courseSectionHeader = document.getElementsByClassName(\"course-section-header\")[0] ?? null;\n\n if (courseSectionHeader instanceof HTMLElement) {\n courseSectionHeader.classList.add('draggable');\n courseSectionHeader.setAttribute('draggable', true);\n }\n }\n\n /**\n * Initialize the Sharing Cart block\n */\n $.init = function() {\n M.str.block_sharing_cart.pluginname = this.get_plugin_name();\n\n // Arrange header icons (bulkdelete, help)\n $.init_block_header();\n $.init_item_tree();\n $.init_activity_commands();\n\n if (addMethod === 'drag_and_drop') {\n init_footer_basket();\n }\n };\n var $spinner = $(' ').addClass('spinner fa fa-3x fa-circle-o-notch fa-spin');\n $('div#sharing-cart-spinner-modal div.spinner-container').prepend($spinner);\n\n $.init();\n });\n\n $('.copy_section').on('click', function() {\n\n const $section_selected = ($('.section-dropdown option:selected'));\n const sectionId = $section_selected.data('section-id');\n const sectionNumber = $section_selected.data('section-number');\n const courseId = $section_selected.data('course-id');\n const sectionName = $section_selected.data('section-name');\n\n $.on_section_backup(sectionId, sectionNumber, courseId, sectionName);\n });\n\n $('.copy_activity').on('click', function(e) {\n const activitySelected = ($('.activity-dropdown option:selected'));\n const activityId = activitySelected.data('activity-id');\n const activityName = activitySelected.data('activity-name');\n\n $.on_backup(e, activityName, activityId);\n });\n};\n"],"names":["addMethod","document","ready","isDragging","str","identifier","M","block_sharing_cart","moodle","get_action_url","name","args","url","cfg","wwwroot","q","k","push","encodeURIComponent","join","remove_basket","footerIconContainer","getElementById","querySelector","sharingCartBasket","removeChild","classList","remove","confirm_modal","obj","checkbox","body","create","type","ModalFactory","types","SAVE_CANCEL","title","done","modal","is_submitted","setSaveButtonText","save_button","userdata_checkbox","getRoot","find","anonymize_checkbox","on","e","currentTarget","checked","attr","prop","ModalEvents","save","response","is","next","cancel","hidden","removeClass","show","in_place_edit_section_name","$section","sectionName","$inPlaceEditable","length","data","on_backup_modal","post_data","title_str","body_str","isSection","post","sectionId","sectionNumber","courseId","userdata","anonymize","$commands","closest","text","trim","String","parent","inPlaceEditSectionName","$spinner","add_spinner","$node_spinner","add_node_spinner","sesskey","reload_tree","fail","show_error","always","hide","backup_section","sectionid","sectionnumber","courseid","cmid","course","id","backup","add","shake_basket","on_success","icon","css","iconClass","$block","match","is_frontpage","hasClass","ex","JSON","parse","responseText","core","exception","message","create_command","iconElement","addClass","append","$node","replaceWith","init_item_tree","directories","KEY","opens","param","readCookie","cookie","pop","getCookieValue","split","map","v","parseInt","expires","Date","setDate","getDate","value","expireTimeInMillisecond","d","setTime","getTime","toUTCString","setCookie","open","$dir","visible","init","i","each","index","dir","target","toggle","reset","move_targets","$cancel","targets","this","$target","item_id","$current","$next","$list","next_id","create_target","area_to","$anchor","m","move","item","$item","to","before","restore_targets","is_directory","$clipboard","section","href","URL","util","image_url","$view","html","prepend","cloneNode","replace","$sitetopic","$mainmenu","$container","format","get_section_wrapper","sectionDOM","first","init_footer_basket","currentDragging","activities","querySelectorAll","sections","sharingCartBlock","courseSectionHeader","getElementsByClassName","HTMLElement","setAttribute","add_draggable_to_first_section","basket","createElement","basketButton","dropAreaText","innerText","dropArea","drag_event_listeners","draggable","addEventListener","children","forEach","activity","dropzone","preventDefault","click","undefined","get_plugin_name","$blockheader","on_backup","activityName","cmId","$backup","$activity","dataowner","on_movedir","$current_dir","current_path","dirs","$form","submit","folder_to","val","$input","setTimeout","focus","unshift","$select","change","$edit","on_move","on_delete","liText","modalBody","isDirectory","description_text","stopPropagation","on_restore","on_section_backup","init_bulk_delete","isspeciallayout","bulkdelete","init_help_icon","helpicon","init_block_header","add_actions","actions","isCopying","action","$command","activity_actions","directory_actions","init_activity_commands","create_backup_icon","$backupIcon","add_activity_backup_control","activityClass","className","modtype","substr","indexOf","$actionMenuItem","ajaxComplete","event","xhr","settings","lastslashindex","lastIndexOf","result","substring","activity_id","isFlexibleCourseFormat","$sectionTitle","last","insertAfter","$activities","add_section_backup_control","pluginname","$section_selected","activitySelected","activityId"],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"script.min.js","sources":["../src/script.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see .\n\n/**\n * Sharing Cart\n *\n * @package block_sharing_cart\n * @copyright 2017 (C) VERSION2, INC.\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport $ from 'jquery';\nimport ModalFactory from 'core/modal_factory';\nimport ModalEvents from 'core/modal_events';\n\n/**\n * @param {string} addMethod\n */\nexport const init = function(addMethod) {\n $(document).ready(function() {\n let isDragging = false;\n\n /**\n * Returns a localized string\n *\n * @param {String} identifier\n * @return {String}\n */\n function str(identifier) {\n return M.str.block_sharing_cart[identifier] || M.str.moodle[identifier];\n }\n\n /**\n * Get an action URL\n *\n * @param {String} name The action name\n * @param {Object} [args] The action parameters\n * @return {String}\n */\n function get_action_url(name, args) {\n let url = M.cfg.wwwroot + '/blocks/sharing_cart/' + name + '.php';\n if (args) {\n const q = [];\n for (let k in args) {\n q.push(k + '=' + encodeURIComponent(args[k]));\n }\n url += '?' + q.join('&');\n }\n return url;\n }\n\n /**\n * Shake the basket to indicate cancel/submit\n */\n function shake_basket() {\n if (addMethod === 'drag_and_drop') {\n const sharingCartBasket = document.querySelector('button.sharing_cart_basket');\n sharingCartBasket?.classList.add('shake_basket');\n }\n }\n\n /**\n * Remove the shake effect and basket icon\n */\n function remove_basket() {\n if (addMethod === 'drag_and_drop' && !isDragging) {\n const footer = document.getElementById('page-footer');\n const footerIconContainer = footer.querySelector('div[data-region=\"footer-container-popover\"]');\n const sharingCartBasket = document.querySelector('button.sharing_cart_basket');\n\n if (sharingCartBasket) {\n footerIconContainer?.removeChild(sharingCartBasket);\n sharingCartBasket.classList.remove('shake_basket');\n }\n }\n }\n\n /**\n * Modal called when confirming an action.\n *\n * @param obj\n */\n function confirm_modal(obj) {\n\n // Checkbox for copying userdata confirmation.\n if (obj.checkbox) {\n obj.body +=\n '' +\n ' ' +\n '' + str('modal_checkbox') + ' ' +\n '
';\n }\n\n\n ModalFactory.create({\n type: ModalFactory.types.SAVE_CANCEL,\n title: obj.title,\n body: obj.body,\n }).done(function(modal) {\n let is_submitted = false;\n modal.setSaveButtonText(obj.save_button);\n\n // On save save check - if checkbox is checked.\n modal.getRoot().on(ModalEvents.save, function(e) {\n\n const response = {\n 'checkbox': $(e.target).find('.modal-checkbox').is(':checked'),\n };\n\n obj.next(response);\n is_submitted = true;\n });\n\n modal.getRoot().on(ModalEvents.cancel, function() {\n remove_basket();\n });\n\n // Remove modal from html.\n modal.getRoot().on(ModalEvents.hidden, function() {\n $('body').removeClass('modal-open');\n\n if (!is_submitted) {\n remove_basket();\n }\n });\n\n modal.show();\n });\n }\n\n /**\n * Get the section name from the section when\n * it's changed with the in place editor\n *\n * @param $section\n * @returns {*}\n */\n function in_place_edit_section_name($section) {\n let sectionName = '';\n const $inPlaceEditable = $section.find('h3.sectionname .inplaceeditable');\n if ($inPlaceEditable.length) {\n sectionName = $inPlaceEditable.data('value');\n }\n return sectionName;\n }\n\n /**\n * @param post_data\n * @param title_str\n * @param body_str\n * @param isSection\n */\n function on_backup_modal(post_data, title_str, body_str, isSection) {\n (function(on_success) {\n $.post(get_action_url('rest'), post_data,\n function(response) {\n on_success(response);\n }, \"text\")\n .fail(function(response) {\n show_error(response);\n });\n })(function(response) {\n const copyable = response === '1';\n let checkbox = false;\n\n if (copyable) {\n checkbox = true;\n }\n\n confirm_modal({\n 'title': title_str,\n 'body': body_str,\n 'save_button': str('modal_confirm_backup'),\n 'checkbox': checkbox,\n 'next': function(data) {\n if (isSection === true) {\n backup_section(post_data.sectionid, post_data.sectionnumber, post_data.courseid, data.checkbox);\n } else {\n backup(post_data.cmid, data.checkbox);\n }\n\n shake_basket();\n }\n });\n });\n }\n\n /** @var {Object} The icon configurations */\n const icon = {\n // Actions\n 'backup': {\n css: 'editing_backup',\n iconClass: 'fa fa-frown-o',\n },\n 'movedir': {\n css: 'editing_right',\n iconClass: 'fa fa-arrow-right',\n },\n 'move': {\n css: 'editing_move_',\n iconClass: 'fa fa-arrows-v',\n },\n 'edit': {\n css: 'editing_update',\n iconClass: 'fa fa-pencil',\n },\n 'cancel': {\n css: 'editing_cancel',\n iconClass: 'fa fa-ban',\n },\n 'delete': {\n css: 'editing_update',\n iconClass: 'fa fa-trash',\n },\n 'restore': {\n css: 'editing_restore',\n iconClass: 'fa fa-clone',\n },\n // Directories\n 'dir-open': {\n iconClass: 'fa fa-folder-open-o'\n },\n 'dir-closed': {\n iconClass: 'fa fa-folder-o'\n },\n };\n\n /** @var {Node} The Sharing Cart block container node */\n const $block = $('.block_sharing_cart');\n\n /** @var {Object} The current course */\n const course = new function () {\n const body = $('body');\n this.id = body.attr('class').match(/course-(\\d+)/)[1];\n this.is_frontpage = body.hasClass('pagelayout-frontpage');\n }();\n\n /**\n * Shows an error message with given Ajax error\n *\n * @param {Object} response The Ajax response\n */\n function show_error(response) {\n try {\n const ex = JSON.parse(response.responseText);\n new M.core.exception({\n name: str('pluginname') + ' - ' + str('error'),\n message: ex.message\n });\n } catch (e) {\n new M.core.exception({\n name: str('pluginname') + ' - ' + str('error'),\n message: response.responseText\n });\n }\n }\n\n /**\n * Check special layout (theme boost)\n *\n * @return {Boolean}\n */\n function verify_layout() {\n const menuelement = $block.find('.menubar .dropdown .dropdown-menu');\n return (menuelement.length);\n }\n\n /**\n * Set Cookie\n * @param name\n * @param value\n * @param expireTimeInMillisecond\n */\n function setCookie(name, value, expireTimeInMillisecond) {\n const d = new Date();\n d.setTime(d.getTime() + expireTimeInMillisecond);\n const expires = 'expires=' + d.toUTCString();\n document.cookie = name + '=' + value + ';' + expires + '';\n }\n\n /**\n * Get Cookie Value\n * @param param\n * @returns {*}\n */\n function getCookieValue(param) {\n const readCookie = document.cookie.match('(^|;)\\\\s*' + param + '\\\\s*=\\\\s*([^;]+)');\n return readCookie ? readCookie.pop() : '';\n }\n\n /**\n * Create a command icon\n *\n * @param {String} name The command name, predefined in icon\n * @param {String} [pix] The icon pix name to override\n */\n function create_command(name) {\n const iconElement = $(' ')\n .attr('alt', str(name))\n .attr('class', icon[name].iconClass);\n // If (verify_layout()) {\n // iconElement.addClass('iconcustom');\n // }\n\n return $('')\n .addClass(icon[name].css)\n .attr('title', str(name))\n .append(iconElement);\n }\n\n /**\n * Create a spinner\n * @param $node\n * @returns {*|jQuery}\n */\n function add_spinner() {\n const $spinner = ($('
'));\n $('section.block_sharing_cart').append($spinner);\n return $spinner;\n }\n\n /**\n *\n * @param $node\n * @returns {jQuery.fn.init}\n */\n function add_node_spinner($node) {\n const $node_spinner = $(' ');\n $node.append($node_spinner);\n return $node_spinner;\n }\n\n $(document).on('click', 'a.restore', function() {\n add_spinner();\n });\n\n /**\n *\n * Reload the Sharing Cart item tree\n */\n function reload_tree() {\n $.post(get_action_url(\"rest\"),\n {\n \"action\": \"render_tree\",\n \"courseid\": course.id\n },\n function(response) {\n $block.find(\".tree\").replaceWith($(response));\n $.init_item_tree();\n }, \"html\")\n .fail(function(response) {\n show_error(response);\n });\n }\n\n /**\n * Backup an activity\n *\n * @param {int} cmid\n * @param {Boolean} userdata\n */\n function backup(cmid, userdata) {\n let $commands = $('#module-' + cmid + ' .actions');\n if (!$commands.length) {\n $commands = $('[data-owner=\"#module-' + cmid + '\"]');\n }\n\n const $spinner = add_spinner();\n const $node_spinner = add_node_spinner($commands);\n\n $.post(get_action_url(\"rest\"),\n {\n \"action\": \"backup\",\n \"cmid\": cmid,\n \"userdata\": userdata,\n \"sesskey\": M.cfg.sesskey,\n \"courseid\": course.id\n },\n function() {\n reload_tree();\n })\n .fail(function(response) {\n show_error(response);\n })\n .always(function() {\n $node_spinner.hide();\n $spinner.hide();\n remove_basket();\n });\n }\n\n /**\n * Backup an activities in a section\n *\n * @param {int} sectionId\n * @param {int} sectionNumber\n * @param {int} courseId\n * @param {Boolean} userdata\n */\n function backup_section(sectionId, sectionNumber, courseId, userdata) {\n const $commands = $('span.inplaceeditable[data-itemtype=sectionname][data-itemid=' + sectionId + ']');\n const $section = $commands.closest(\"li.section.main\");\n let sectionName = $section.attr('aria-label') || $section.find('.sectionname').text().trim();\n\n if (sectionName === null) {\n sectionName = String($('#region-main .section_action_menu[data-sectionid=\\'' + sectionId + '\\']')\n .parent().parent().find('h3.sectionname').text());\n }\n\n const inPlaceEditSectionName = in_place_edit_section_name($section);\n sectionName = (inPlaceEditSectionName !== '') ? inPlaceEditSectionName : sectionName;\n\n const $spinner = add_spinner();\n const $node_spinner = add_node_spinner($commands);\n\n $.post(get_action_url(\"rest\"),\n {\n \"action\": \"backup_section\",\n \"sectionid\": sectionId,\n \"sectionnumber\": sectionNumber,\n \"courseid\": courseId,\n \"sectionname\": sectionName,\n \"userdata\": userdata,\n \"sesskey\": M.cfg.sesskey\n },\n function() {\n reload_tree();\n })\n .fail(function(response) {\n show_error(response);\n })\n .always(function() {\n $spinner.hide();\n $node_spinner.hide();\n remove_basket();\n });\n }\n\n\n // /////// CLASSES /////////\n\n /**\n * @class Directory states manager\n */\n const directories = new function () {\n const KEY = 'block_sharing_cart-dirs';\n\n let opens = getCookieValue(KEY).split(',').map(function (v) {\n return parseInt(v);\n });\n\n function save() {\n const expires = new Date();\n expires.setDate(expires.getDate() + 30);\n setCookie(KEY, opens.join(','), expires);\n }\n\n function open($dir, visible) {\n const iconIndex = visible ? 'dir-open' : 'dir-closed';\n const iconElement = icon[iconIndex].iconClass;\n $dir.find('> div i.icon').attr('class', 'icon ' + iconElement);\n $dir.find('> ul.list')[visible ? 'show' : 'hide']();\n }\n\n function toggle(e) {\n const $dir = $(e.target).closest('li.directory');\n const i = $dir.attr('id').match(/(\\d+)$/)[1];\n const v = $dir.find('> ul.list').css('display') === 'none';\n\n open($dir, v);\n opens[i] = v ? 1 : 0;\n save();\n }\n\n /**\n * Initialize directory states\n */\n this.init = function () {\n let i = 0;\n $block.find('li.directory').each(function (index, dir) {\n const $dir = $(dir);\n $dir.attr('id', 'block_sharing_cart-dir-' + i);\n if (i >= opens.length) {\n opens.push(0);\n } else if (opens[i]) {\n open($dir, true);\n }\n $dir.find('> div div.toggle-wrapper').css('cursor', 'pointer').on('click', function (e) {\n toggle(e);\n });\n i++;\n });\n };\n\n /**\n * Reset directory states\n */\n this.reset = function () {\n opens = [];\n this.init();\n save();\n };\n }();\n\n /**\n * @class Targets for moving an item directory\n */\n const move_targets = new function () {\n let $cancel = null,\n targets = [];\n\n /**\n * Hide move targets\n */\n this.hide = function () {\n if ($cancel !== null) {\n const $commands = $cancel.closest('.commands');\n $cancel.remove();\n $cancel = null;\n $commands.closest('li.activity').css('opacity', 1.0);\n $commands.find('a').each(function () {\n $(this).show();\n });\n $.each(targets, function (index, $target) {\n $target.remove();\n });\n targets = [];\n }\n };\n\n /**\n * Show move targets for a given item\n *\n * @param {int} id The item ID\n */\n this.show = function (item_id) {\n this.hide();\n\n function move(e) {\n\n const m = $(e.target).closest('a').attr('class').match(/move-(\\d+)-to-(\\d+)/);\n const item_id = m[1],\n area_to = m[2];\n\n const $spinner = add_spinner();\n $.post(get_action_url(\"rest\"),\n {\n \"action\": \"move\",\n \"item_id\": item_id,\n \"area_to\": area_to,\n \"sesskey\": M.cfg.sesskey\n },\n function () {\n reload_tree();\n })\n .fail(function (response) {\n show_error(response);\n })\n .always(function () {\n $spinner.hide();\n });\n }\n\n const $current = $block.find('#block_sharing_cart-item-' + item_id);\n const $next = $current.next();\n const $list = $current.closest('ul');\n\n let next_id = 0;\n if ($next.length) {\n next_id = $next.attr('id').match(/item-(\\d+)$/)[1];\n }\n\n /**\n *\n * @param item_id\n * @param area_to\n * @returns {jQuery}\n */\n function create_target(item_id, area_to) {\n const $anchor = $(' ')\n .addClass('move-' + item_id + '-to-' + area_to)\n .attr('title', str('movehere'))\n .append(\n $('' + str('clicktomove') + '
')\n .attr('alt', str('movehere'))\n );\n\n const $target = $(' ')\n .append($anchor);\n $anchor.on('click', function (e) {\n move(e);\n });\n\n return $target;\n }\n\n $list.find('> li.activity').each(function (index, item) {\n const $item = $(item);\n const to = $item.attr('id').match(/item-(\\d+)$/)[1];\n if (to === item_id) {\n $cancel = create_command('cancel', 't/left');\n $cancel.on('click', function () {\n move_targets.hide();\n });\n const $commands = $item.find('.commands');\n $commands.find('a').each(function () {\n $(this).hide();\n });\n $commands.append($cancel);\n $item.css('opacity', 0.5);\n } else if (to !== next_id) {\n const $target = create_target(item_id, to);\n $item.before($target);\n targets.push($target);\n }\n }, this);\n\n if ($next) {\n var $target = create_target(item_id, 0);\n $list.append($target);\n targets.push($target);\n }\n };\n }();\n\n /**\n * @class Targets for restoring an item\n */\n const restore_targets = new function () {\n this.is_directory = null;\n let $clipboard = null,\n targets = [];\n\n /**\n *\n * @param id\n * @param section\n * @returns {jQuery}\n */\n\n function create_target(id, section) {\n const href = get_action_url('restore', {\n 'directory': (restore_targets.is_directory === true),\n 'target': id,\n 'course': course.id,\n 'section': section,\n 'in_section': $('#copy-section-form').data('in-section'),\n 'sesskey': M.cfg.sesskey,\n 'returnurl': document.URL,\n });\n\n let $target = $(' ').attr('href', href).attr('title', str('copyhere')).append(\n $(' ').attr('alt', str('copyhere')).attr('src', M.util.image_url('dropzone_arrow', 'block_sharing_cart'))\n );\n\n targets.push($target);\n\n return $target;\n }\n\n /**\n * Hide restore targets\n */\n this.hide = function () {\n if ($clipboard !== null) {\n $clipboard.remove();\n $clipboard = null;\n $.each(targets, function (index, $target) {\n $target.remove();\n });\n targets = [];\n }\n };\n\n /**\n *\n *\n * @param {int} id The item ID\n */\n this.show = function (id) {\n this.hide();\n\n let $view = $(\" \");\n\n if (this.is_directory) {\n $view.html(id).css('display', 'inline');\n $view.prepend(\n $(\" \").addClass(\"icon\")\n .attr(\"alt\", id)\n // .attr(\"src\", M.util.image_url(icon['dir-closed'].pix, null))\n );\n } else {\n const $item = $block.find('#block_sharing_cart-item-' + id);\n $view = $($item.find('div')[0].cloneNode(true)).css('display', 'inline');\n $view.attr('class', $view.attr('class').replace(/mod-indent-\\d+/, ''));\n $view.find('.commands').remove();\n }\n\n const $cancel = create_command('cancel');\n\n $cancel.on('click', this.hide);\n\n $clipboard = $('');\n $clipboard.append(str('clipboard') + \": \").append($view).append($cancel);\n\n if (course.is_frontpage) {\n const $sitetopic = $('.sitetopic');\n const $mainmenu = $('.block_site_main_menu');\n if ($sitetopic) {\n $sitetopic.find('*').before($clipboard);\n } else if ($mainmenu) {\n $mainmenu.find('.content').before($clipboard);\n }\n\n // Mainmenu = section #0, sitetopic = section #1\n if ($mainmenu) {\n $mainmenu.find('.footer').before(create_target(id, 0));\n }\n if ($sitetopic) {\n $sitetopic.find('ul.section').append(create_target(id, 1));\n }\n } else {\n const $container = $('.course-content');\n $container.prepend($clipboard);\n $container.find('li.section').each(function (index, sectionDOM) {\n const $section = $(sectionDOM);\n const section = $section.attr('id').match(/(\\d+)$/)[1];\n $section.find('ul.section').first().append(create_target(id, section));\n }, this);\n }\n };\n }();\n\n // /////// INITIALIZATION /////////\n\n /**\n *\n * @returns {string|*}\n */\n $.get_plugin_name = function() {\n let $blockheader = $block.find(\"h2\");\n\n if (!$blockheader.length) {\n $blockheader = $block.find(\"h3\");\n\n if ($blockheader.length) {\n return $blockheader.html();\n }\n } else {\n return $blockheader.html();\n }\n\n return \"\";\n };\n\n /**\n *\n * @param e\n * @param activityName\n * @param {int} cmId\n */\n $.on_backup = function(e, activityName, cmId = 0) {\n if (cmId === 0) {\n cmId = (function ($backup) {\n const $activity = $backup.closest('li.activity');\n if ($activity.length) {\n return $activity.attr('id').match(/(\\d+)$/)[1];\n }\n const $commands = $backup.closest('.commands');\n const dataowner = $commands.attr('data-owner');\n if (dataowner.length) {\n return dataowner.match(/(\\d+)$/)[1];\n }\n return $commands.find('a.editing_delete').attr('href').match(/delete=(\\d+)/)[1];\n })($(e.target));\n }\n\n const data =\n {\n \"action\": \"is_userdata_copyable\",\n \"cmid\": cmId\n };\n\n on_backup_modal(data, activityName, str('confirm_backup'), false);\n };\n\n /**\n * On movedir command clicked\n *\n * @param {DOMEventFacade} e\n */\n $.on_movedir = function(e) {\n const $commands = $(e.target).closest('.commands');\n\n const $current_dir = $commands.closest('li.directory');\n const current_path = $current_dir.length ? $current_dir.attr('directory-path') : '/';\n\n const item_id = $(e.target).closest('li.activity').attr('id').match(/(\\d+)$/)[1];\n\n const dirs = [];\n $block.find('li.directory').each(function() {\n dirs.push($(this).attr('directory-path'));\n });\n\n const $form = $('
');\n // eslint-disable-next-line no-script-url\n $form.attr('action', 'javascript:void(0)');\n\n function submit() {\n const folder_to = $form.find('[name=\"to\"]').val();\n const $spinner = add_spinner();\n $.post(get_action_url('rest'),\n {\n \"action\": \"movedir\",\n \"item_id\": item_id,\n \"folder_to\": folder_to,\n \"sesskey\": M.cfg.sesskey\n },\n function() {\n reload_tree();\n directories.reset();\n })\n .fail(function(response) {\n show_error(response);\n })\n .always(function() {\n $spinner.hide();\n });\n }\n\n $form.submit(submit);\n\n if (dirs.length === 0) {\n var $input = $('
').val(current_path);\n setTimeout(function() {\n $input.focus();\n }, 1);\n $form.append($input);\n } else {\n dirs.unshift('/');\n\n const $select = $('
');\n for (let i = 0; i < dirs.length; i++) {\n $select.append($(' ').val(dirs[i]).append(dirs[i]));\n }\n $select.val(current_path);\n $select.change(submit);\n $form.append($select);\n\n const $edit = create_command('edit');\n\n $edit.on('click', function() {\n const $input = $(' ').val(current_path);\n $select.remove();\n $edit.replaceWith($input);\n $input.focus();\n });\n\n $form.append($edit);\n }\n\n const $cancel = create_command('cancel');\n $cancel.on('click', function() {\n $form.remove();\n $commands.find('a').show();\n });\n $form.append($cancel);\n\n $commands.find('a').each(function() {\n $(this).hide();\n });\n $commands.append($form);\n };\n\n /**\n * On move command clicked\n *\n * @param {DOMEventFacade} e\n */\n $.on_move = function(e) {\n const $item = $(e.target).closest('li.activity');\n const id = $item.attr('id').match(/(\\d+)$/)[1];\n\n move_targets.show(id);\n };\n\n /**\n * On delete command clicked\n *\n * @param {DOMEventFacade} e\n */\n $.on_delete = function(e) {\n const $item = $(e.target).closest('li');\n const liText = $item[0].innerText;\n\n let isDirectory = false;\n let modalBody;\n let item;\n let description_text = '';\n\n if ($item.hasClass(\"directory\")) {\n isDirectory = true;\n item = str('folder_string');\n description_text = str('delete_folder');\n } else {\n item = str('activity_string');\n }\n\n modalBody = '' + item + ' ' + liText + description_text + '
';\n\n confirm_modal({\n 'title': str('confirm_delete'),\n 'body': modalBody,\n 'save_button': str('modal_confirm_delete'),\n 'checkbox': false,\n 'next': function() {\n\n let data = {};\n\n if (isDirectory === true) {\n data = {\n \"action\": \"delete_directory\",\n \"path\": $item.attr(\"directory-path\"),\n \"sesskey\": M.cfg.sesskey\n };\n } else if ($item.hasClass(\"activity\")) {\n data = {\n \"action\": \"delete\",\n \"id\": $item.attr('id').match(/(\\d+)$/)[1],\n \"sesskey\": M.cfg.sesskey\n };\n }\n\n const $spinner = add_spinner();\n\n $.post(get_action_url(\"rest\"), data,\n function() {\n reload_tree();\n })\n .fail(function(response) {\n show_error(response);\n })\n .always(function() {\n $spinner.hide();\n });\n\n e.stopPropagation();\n }\n });\n };\n\n /**\n * On restore command clicked\n *\n * @param {DOMEventFacade} e\n */\n $.on_restore = function(e) {\n const $item = $(e.target).closest('li');\n let id = null;\n\n if ($item.hasClass(\"directory\")) {\n id = $item.attr(\"directory-path\");\n restore_targets.is_directory = true;\n } else if ($item.hasClass(\"activity\")) {\n id = $item.attr('id').match(/(\\d+)$/)[1];\n restore_targets.is_directory = false;\n }\n\n restore_targets.show(id);\n };\n\n /**\n * On backup the whole section as a folder\n *\n * @param {int} sectionId\n * @param {int} sectionNumber\n * @param {int} courseId\n * @param {string} sectionName\n */\n $.on_section_backup = function(sectionId, sectionNumber, courseId, sectionName) {\n const data =\n {\n \"action\": \"is_userdata_copyable_section\",\n \"sectionid\": sectionId,\n \"sectionnumber\": sectionNumber,\n \"courseid\": courseId,\n };\n\n const body_html = '' + str('backup_heavy_load_warning_message') +\n '
' + str('confirm_backup_section');\n\n on_backup_modal(data, sectionName, body_html, true);\n };\n\n /**\n * Initialize the delete bulk\n */\n $.init_bulk_delete = function(isspeciallayout) {\n const bulkdelete = $block.find('.editing_bulkdelete');\n if (bulkdelete.length) {\n if (isspeciallayout) {\n bulkdelete.attr('role', 'menuitem').addClass('dropdown-item menu-action');\n bulkdelete.append($(\"\").append(bulkdelete.attr('title')));\n\n $block.find('.menubar .dropdown .dropdown-menu').append(bulkdelete);\n } else {\n $block.find('.header .commands').append(bulkdelete);\n }\n }\n };\n\n /**\n * Initialize the help icon\n */\n $.init_help_icon = function(isspeciallayout) {\n const helpicon = $block.find('.header-commands > .help-icon');\n\n if (isspeciallayout) {\n $block.find('.header-commands').parent().css('display', 'block');\n } else {\n $block.find('.header .commands').append(helpicon);\n }\n };\n\n /**\n * Initialize the Sharing Cart block header\n */\n $.init_block_header = function() {\n const isspeciallayout = verify_layout();\n $.init_bulk_delete(isspeciallayout);\n $.init_help_icon(isspeciallayout);\n };\n\n /**\n * Initialize the Sharing Cart item tree\n */\n $.init_item_tree = function() {\n function add_actions(item, actions) {\n const $item = $(item);\n const isCopying = $item.attr('data-is-copying') === '1';\n const $commands = $item.find('.commands').first();\n\n $.each(actions, function(index, action) {\n if (action === 'restore' && isCopying) {\n return;\n }\n const $command = create_command(action);\n $command.on('click', function(e) {\n $['on_' + action](e);\n });\n $commands.append($command);\n }, this);\n }\n\n const activity_actions = ['movedir', 'move', 'delete'];\n if (course) {\n activity_actions.push('restore');\n }\n\n const directory_actions = ['delete', 'restore'];\n\n // Initialize items\n $block.find('li.activity').each(function(index, item) {\n if($(item).attr('data-disable-copy') == 1) {\n add_actions(item, ['movedir', 'move', 'delete']);\n return;\n }\n add_actions(item, activity_actions);\n });\n\n // Initialize directory items\n $block.find('li.directory').each(function(index, item) {\n add_actions(item, directory_actions);\n });\n\n // Initialize directories\n directories.init();\n };\n\n /**\n * Extract html object from area where moodle ajax was called.\n *\n * Call add_activity_backup_control to re append sharing cart icon.\n */\n $.init_activity_commands = function() {\n $(document).ajaxComplete(function(event, xhr, settings) {\n\n const url = settings.url;\n const lastslashindex = url.lastIndexOf('=');\n const result = url.substring(lastslashindex + 1);\n\n if (result === 'core_course_edit_module' || result === 'core_course_get_module') {\n\n const data = JSON.parse(settings.data);\n const action = data[0].args.action;\n\n // Don't try to add icon if activity has been deleted.\n if (action === 'delete') {\n return;\n }\n\n setTimeout(function() {\n const activity_id = data[0].args.id;\n const activity = $('#module-' + activity_id);\n add_activity_backup_control(activity);\n\n if (action === 'duplicate') {\n const duplicated = activity.next();\n add_activity_backup_control(duplicated);\n }\n }, 1);\n }\n });\n\n /**\n * Create the backup icon\n *\n * @returns $backupIcon\n */\n function create_backup_icon() {\n\n const $backupIcon = $(' ')\n .append($(' '))\n .attr('title', str('backup'));\n\n if (addMethod !== 'click_to_add') {\n $backupIcon.addClass('d-none');\n }\n\n return $backupIcon;\n }\n\n /**\n * Add backup control with a click event to an activity\n * Added fix for copying an activity without backup routine\n *\n * @param $activity\n */\n function add_activity_backup_control($activity) {\n\n const activityClass = $activity[0].className;\n\n // Selecting modtype without prefix.\n const modtype = activityClass.substr(activityClass.indexOf('modtype_') + 8);\n\n // Default activity name.\n let activityName = str('activity_string');\n\n // Label is using a different html / css layout, so it's needed to get the name by using another $find.\n if (modtype !== 'label') {\n activityName = $('.activity#' + $activity[0].id)\n .find('.mod-indent-outer .activityinstance span.instancename')\n .html();\n }\n\n const $backupIcon = create_backup_icon();\n\n $backupIcon.on('click', function(e) {\n $.on_backup(e, activityName);\n });\n\n const $actionMenuItem = $activity.find('.action-menu.section-cm-edit-actions').parent('.actions');\n\n if (!$actionMenuItem.find('.add-to-sharing-cart').length) {\n $actionMenuItem.append($backupIcon);\n }\n }\n\n /**\n * Add backup control with a click event to a section\n *\n * @param $section\n */\n function add_section_backup_control($section) {\n\n let sectionId = $section.find('.section_action_menu').data('sectionid');\n const sectionNumber = parseInt(String($section.attr('id')).match(/\\d+/)[0]);\n let sectionName = $section.attr('aria-label') || $section.find('.sectionname').text().trim();\n\n const isFlexibleCourseFormat = $('body[id$=flexsections]').length;\n\n // Extract the section ID from the section if this is a Flexible\n // course format (since this format doesn't have an action menu)\n if (isFlexibleCourseFormat && (typeof sectionId === 'undefined' || sectionId === null)) {\n sectionId = $section.data('section-id');\n }\n\n // A bit unsafe to extract the course ID from the body but it's the best option we got at the moment\n const courseId = parseInt(String($('body').attr('class')).match(/course-([0-9]*)( |$)/)[1]);\n\n const $backupIcon = create_backup_icon();\n\n $backupIcon.on('click', function() {\n const inPlaceEditSectionName = in_place_edit_section_name($section);\n sectionName = (inPlaceEditSectionName !== '') ? inPlaceEditSectionName : sectionName;\n $.on_section_backup(sectionId, sectionNumber, courseId, sectionName);\n });\n\n let $sectionTitle = $section.find('h3.sectionname').first().find('a').last();\n\n const $inPlaceEditable = $section.find('h3.sectionname .inplaceeditable').first();\n if ($inPlaceEditable.length) {\n $sectionTitle = $inPlaceEditable;\n }\n\n // Add the backup icon after the cog wheel if this is a Flexible course format\n if (isFlexibleCourseFormat && sectionNumber === 0) {\n $sectionTitle = $section.find('> .controls');\n $sectionTitle.prepend($backupIcon);\n } else {\n $backupIcon.insertAfter($sectionTitle);\n }\n\n const activitySelector = 'li.activity';\n\n const $activities = $section.find(activitySelector);\n\n $($activities).each(function() {\n add_activity_backup_control($(this));\n });\n }\n\n $(\"body.editing .course-content li.section\").each(function() {\n add_section_backup_control($(this));\n });\n };\n\n /**\n * Initialize the Sharing Cart footer basket for 4.0+.\n */\n function init_footer_basket() {\n let currentDragging;\n const activities = document.querySelectorAll(\".activity.activity-wrapper\");\n const sections = document.querySelectorAll(\".course-section-header\");\n const sharingCartBlock = document.querySelector('section[data-block=\"sharing_cart\"]');\n\n add_draggable_to_first_section();\n\n const footer = document.getElementById('page-footer');\n const footerIconContainer = footer.querySelector('div[data-region=\"footer-container-popover\"]');\n\n const basket = document.createElement('i');\n basket.setAttribute('class', 'fa fa-shopping-basket');\n\n const basketButton = document.createElement('button');\n basketButton.setAttribute('class', 'btn btn-icon bg-secondary icon-no-margin btn-footer-popover sharing_cart_basket');\n basketButton.setAttribute('style', 'z-index: 1001;');\n basketButton.append(basket);\n\n const dropAreaText = document.createElement('p');\n dropAreaText.setAttribute('class', 'font-weight-bold text-white');\n dropAreaText.innerText = str('drop_here');\n\n const dropArea = document.createElement('div');\n dropArea.setAttribute('class',\n 'h-100 w-100 position-absolute d-flex justify-content-center align-items-center');\n dropArea.append(dropAreaText);\n\n sections.forEach(section => {\n drag_event_listeners(section);\n });\n\n activities.forEach(activity => {\n drag_event_listeners(activity);\n });\n\n /**\n * Initialize events for dragging\n * @param {object} draggable\n */\n function drag_event_listeners(draggable) {\n draggable.addEventListener('dragstart', (e) => {\n basketButton.classList.remove('shake_basket');\n\n footerIconContainer?.prepend(basketButton);\n sharingCartBlock.children[0].classList.add('dragging_item');\n sharingCartBlock.append(dropArea);\n currentDragging = e.target;\n isDragging = true;\n });\n\n draggable.addEventListener('dragend', () => {\n if (currentDragging instanceof HTMLElement) {\n footerIconContainer?.removeChild(basketButton);\n }\n\n sharingCartBlock.children[0].classList.remove('dragging_item');\n sharingCartBlock.removeChild(dropArea);\n isDragging = false;\n });\n }\n\n [basketButton, sharingCartBlock].forEach((dropzone) => {\n dropzone.addEventListener(\"dragover\", (e) => {\n e.preventDefault();\n dropzone.classList.add('drag_over');\n });\n\n dropzone.addEventListener(\"dragenter\", (e) => {\n e.preventDefault();\n dropzone.classList.add('drag_over');\n });\n\n dropzone.addEventListener(\"dragleave\", () => {\n dropzone.classList.remove('drag_over');\n });\n\n dropzone.addEventListener(\"drop\", () => {\n if (currentDragging instanceof HTMLElement) {\n currentDragging.querySelector('.add-to-sharing-cart').click();\n }\n\n dropzone.classList.remove('drag_over');\n currentDragging = undefined;\n isDragging = false;\n });\n });\n }\n\n /**\n * Make the first section (General) draggable\n */\n function add_draggable_to_first_section() {\n const courseSectionHeader = document.getElementsByClassName(\"course-section-header\")[0] ?? null;\n\n if (courseSectionHeader instanceof HTMLElement) {\n courseSectionHeader.classList.add('draggable');\n courseSectionHeader.setAttribute('draggable', true);\n }\n }\n\n /**\n * Initialize the Sharing Cart block\n */\n $.init = function() {\n M.str.block_sharing_cart.pluginname = this.get_plugin_name();\n\n // Arrange header icons (bulkdelete, help)\n $.init_block_header();\n $.init_item_tree();\n $.init_activity_commands();\n\n if (addMethod === 'drag_and_drop') {\n init_footer_basket();\n }\n };\n var $spinner = $(' ').addClass('spinner fa fa-3x fa-circle-o-notch fa-spin');\n $('div#sharing-cart-spinner-modal div.spinner-container').prepend($spinner);\n\n $.init();\n });\n\n $('.copy_section').on('click', function() {\n\n const $section_selected = ($('.section-dropdown option:selected'));\n const sectionId = $section_selected.data('section-id');\n const sectionNumber = $section_selected.data('section-number');\n const courseId = $section_selected.data('course-id');\n const sectionName = $section_selected.data('section-name');\n\n $.on_section_backup(sectionId, sectionNumber, courseId, sectionName);\n });\n\n $('.copy_activity').on('click', function(e) {\n const activitySelected = ($('.activity-dropdown option:selected'));\n const activityId = activitySelected.data('activity-id');\n const activityName = activitySelected.data('activity-name');\n\n $.on_backup(e, activityName, activityId);\n });\n};\n"],"names":["addMethod","document","ready","isDragging","str","identifier","M","block_sharing_cart","moodle","get_action_url","name","args","url","cfg","wwwroot","q","k","push","encodeURIComponent","join","remove_basket","footerIconContainer","getElementById","querySelector","sharingCartBasket","removeChild","classList","remove","confirm_modal","obj","checkbox","body","create","type","ModalFactory","types","SAVE_CANCEL","title","done","modal","is_submitted","setSaveButtonText","save_button","getRoot","on","ModalEvents","save","e","response","target","find","is","next","cancel","hidden","removeClass","show","in_place_edit_section_name","$section","sectionName","$inPlaceEditable","length","data","on_backup_modal","post_data","title_str","body_str","isSection","post","sectionId","sectionNumber","courseId","userdata","$commands","closest","attr","text","trim","String","parent","inPlaceEditSectionName","$spinner","add_spinner","$node_spinner","add_node_spinner","sesskey","reload_tree","fail","show_error","always","hide","backup_section","sectionid","sectionnumber","courseid","cmid","course","id","backup","add","shake_basket","on_success","icon","css","iconClass","$block","match","is_frontpage","hasClass","ex","JSON","parse","responseText","core","exception","message","create_command","iconElement","addClass","append","$node","replaceWith","init_item_tree","directories","KEY","opens","param","readCookie","cookie","pop","getCookieValue","split","map","v","parseInt","expires","Date","setDate","getDate","value","expireTimeInMillisecond","d","setTime","getTime","toUTCString","setCookie","open","$dir","visible","init","i","each","index","dir","toggle","reset","move_targets","$cancel","targets","this","$target","item_id","$current","$next","$list","next_id","create_target","area_to","$anchor","m","move","item","$item","to","before","restore_targets","is_directory","$clipboard","section","href","URL","util","image_url","$view","html","prepend","cloneNode","replace","$sitetopic","$mainmenu","$container","sectionDOM","first","init_footer_basket","currentDragging","activities","querySelectorAll","sections","sharingCartBlock","courseSectionHeader","getElementsByClassName","HTMLElement","setAttribute","add_draggable_to_first_section","basket","createElement","basketButton","dropAreaText","innerText","dropArea","drag_event_listeners","draggable","addEventListener","children","forEach","activity","dropzone","preventDefault","click","undefined","get_plugin_name","$blockheader","on_backup","activityName","cmId","$backup","$activity","dataowner","on_movedir","$current_dir","current_path","dirs","$form","submit","folder_to","val","$input","setTimeout","focus","unshift","$select","change","$edit","on_move","on_delete","liText","modalBody","isDirectory","description_text","stopPropagation","on_restore","on_section_backup","init_bulk_delete","isspeciallayout","bulkdelete","init_help_icon","helpicon","init_block_header","add_actions","actions","isCopying","action","$command","activity_actions","directory_actions","init_activity_commands","create_backup_icon","$backupIcon","add_activity_backup_control","activityClass","className","modtype","substr","indexOf","$actionMenuItem","ajaxComplete","event","xhr","settings","lastslashindex","lastIndexOf","result","substring","activity_id","isFlexibleCourseFormat","$sectionTitle","last","insertAfter","$activities","add_section_backup_control","pluginname","$section_selected","activitySelected","activityId"],"mappings":"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"}
\ No newline at end of file
diff --git a/amd/src/script.js b/amd/src/script.js
index b882b91..def7df9 100644
--- a/amd/src/script.js
+++ b/amd/src/script.js
@@ -98,14 +98,8 @@ export const init = function(addMethod) {
if (obj.checkbox) {
obj.body +=
'';
}
@@ -118,22 +112,11 @@ export const init = function(addMethod) {
let is_submitted = false;
modal.setSaveButtonText(obj.save_button);
- const userdata_checkbox = $(modal.getRoot()).find('#modal-userdata-checkbox');
- const anonymize_checkbox = $(modal.getRoot()).find('#modal-anonymize-checkbox');
-
- userdata_checkbox.on('change', (e) => {
- if (e.currentTarget.checked) {
- anonymize_checkbox.attr('disabled', null);
- } else {
- anonymize_checkbox.prop('checked', false).attr('disabled', true);
- }
- });
-
// On save save check - if checkbox is checked.
modal.getRoot().on(ModalEvents.save, function(e) {
+
const response = {
- 'userdata': userdata_checkbox.is(':checked'),
- 'anonymize': anonymize_checkbox.is(':checked'),
+ 'checkbox': $(e.target).find('.modal-checkbox').is(':checked'),
};
obj.next(response);
@@ -203,9 +186,9 @@ export const init = function(addMethod) {
'checkbox': checkbox,
'next': function(data) {
if (isSection === true) {
- backup_section(post_data.sectionid, post_data.sectionnumber, post_data.courseid, data.userdata, data.anonymize);
+ backup_section(post_data.sectionid, post_data.sectionnumber, post_data.courseid, data.checkbox);
} else {
- backup(post_data.cmid, data.userdata, data.anonymize);
+ backup(post_data.cmid, data.checkbox);
}
shake_basket();
@@ -387,9 +370,8 @@ export const init = function(addMethod) {
*
* @param {int} cmid
* @param {Boolean} userdata
- * @param {Boolean} anonymize
*/
- function backup(cmid, userdata, anonymize) {
+ function backup(cmid, userdata) {
let $commands = $('#module-' + cmid + ' .actions');
if (!$commands.length) {
$commands = $('[data-owner="#module-' + cmid + '"]');
@@ -403,7 +385,6 @@ export const init = function(addMethod) {
"action": "backup",
"cmid": cmid,
"userdata": userdata,
- "anonymize": anonymize,
"sesskey": M.cfg.sesskey,
"courseid": course.id
},
@@ -427,9 +408,8 @@ export const init = function(addMethod) {
* @param {int} sectionNumber
* @param {int} courseId
* @param {Boolean} userdata
- * @param {Boolean} anonymize
*/
- function backup_section(sectionId, sectionNumber, courseId, userdata, anonymize) {
+ function backup_section(sectionId, sectionNumber, courseId, userdata) {
const $commands = $('span.inplaceeditable[data-itemtype=sectionname][data-itemid=' + sectionId + ']');
const $section = $commands.closest("li.section.main");
let sectionName = $section.attr('aria-label') || $section.find('.sectionname').text().trim();
@@ -453,7 +433,6 @@ export const init = function(addMethod) {
"courseid": courseId,
"sectionname": sectionName,
"userdata": userdata,
- "anonymize": anonymize,
"sesskey": M.cfg.sesskey
},
function() {
@@ -755,7 +734,7 @@ export const init = function(addMethod) {
} else {
const $container = $('.course-content');
$container.prepend($clipboard);
- $container.find(M.course.format.get_section_wrapper(null)).each(function (index, sectionDOM) {
+ $container.find('li.section').each(function (index, sectionDOM) {
const $section = $(sectionDOM);
const section = $section.attr('id').match(/(\d+)$/)[1];
$section.find('ul.section').first().append(create_target(id, section));