From a507a9e68ac09593e3e7328efa723287fcf94215 Mon Sep 17 00:00:00 2001 From: Marina Glancy Date: Fri, 10 Mar 2023 14:16:57 +0000 Subject: [PATCH] MDL-74465 blocks: changes for backward-compatibility --- blocks/amd/build/add_modal.min.js | 10 ++ blocks/amd/build/add_modal.min.js.map | 1 + blocks/amd/build/edit.min.js.map | 2 +- blocks/amd/src/add_modal.js | 163 ++++++++++++++++++++++++ blocks/upgrade.txt | 6 +- lib/amd/build/addblockmodal.min.js | 5 +- lib/amd/build/addblockmodal.min.js.map | 2 +- lib/amd/src/addblockmodal.js | 77 ++++------- lib/navigationlib.php | 2 +- lib/outputrenderers.php | 5 + lib/templates/add_block_button.mustache | 2 +- 11 files changed, 218 insertions(+), 57 deletions(-) create mode 100644 blocks/amd/build/add_modal.min.js create mode 100644 blocks/amd/build/add_modal.min.js.map create mode 100644 blocks/amd/src/add_modal.js diff --git a/blocks/amd/build/add_modal.min.js b/blocks/amd/build/add_modal.min.js new file mode 100644 index 00000000000..3f2d8e54cf2 --- /dev/null +++ b/blocks/amd/build/add_modal.min.js @@ -0,0 +1,10 @@ +define("core_block/add_modal",["exports","core/modal_factory","core/templates","core/str","core/ajax","core_form/modalform"],(function(_exports,_modal_factory,_templates,_str,_ajax,_modalform){function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}} +/** + * Show an add block modal instead of doing it on a separate page. + * + * @module core_block/add_modal + * @copyright 2016 Damyon Wiese + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_modal_factory=_interopRequireDefault(_modal_factory),_templates=_interopRequireDefault(_templates),_ajax=_interopRequireDefault(_ajax),_modalform=_interopRequireDefault(_modalform);const SELECTORS_ADD_BLOCK='[data-key="addblock"]',SELECTORS_SHOW_BLOCK_FORM='[data-action="showaddblockform"][data-blockname][data-blockform]';let listenerEventsRegistered=!1;const registerListenerEvents=(addBlockUrl,pagehash)=>{let addBlockModal=null;document.addEventListener("click",(e=>{const showAddBlockForm=e.target.closest(SELECTORS_SHOW_BLOCK_FORM);if(showAddBlockForm){e.preventDefault();const modalForm=new _modalform.default({modalConfig:{title:(0,_str.get_string)("addblock","core_block",showAddBlockForm.getAttribute("data-blocktitle"))},args:{blockname:showAddBlockForm.getAttribute("data-blockname"),pagehash:pagehash,blockregion:showAddBlockForm.getAttribute("data-blockregion")},formClass:showAddBlockForm.getAttribute("data-blockform"),returnFocus:showAddBlockForm});modalForm.addEventListener(modalForm.events.FORM_SUBMITTED,(()=>{addBlockModal.destroy(),window.location.reload()})),modalForm.show()}const addBlock=e.target.closest(SELECTORS_ADD_BLOCK);if(addBlock){e.preventDefault();let addBlockModalUrl=null!=addBlockUrl?addBlockUrl:addBlock.dataset.url;buildAddBlockModal().then((modal=>{addBlockModal=modal;const modalBody=renderBlocks(addBlockModalUrl,pagehash,addBlock.getAttribute("data-blockregion"));return modal.setBody(modalBody),modal.show(),modalBody})).catch((()=>{addBlockModal.destroy()}))}}))},buildAddBlockModal=()=>_modal_factory.default.create({type:_modal_factory.default.types.CANCEL,title:(0,_str.get_string)("addblock")}),renderBlocks=async(addBlockUrl,pagehash,region)=>{const blocks=await getAddableBlocks(pagehash);return _templates.default.render("core/add_block_body",{blocks:blocks,url:addBlockUrl,blockregion:region,pagehash:pagehash})},getAddableBlocks=async pagehash=>{const request={methodname:"core_block_fetch_addable_blocks",args:{pagecontextid:0,pagetype:"",pagelayout:"",subpage:"",pagehash:pagehash}};return _ajax.default.call([request])[0]};_exports.init=function(){let addBlockUrl=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,pagehash=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";listenerEventsRegistered||(registerListenerEvents(addBlockUrl,pagehash),listenerEventsRegistered=!0)}})); + +//# sourceMappingURL=add_modal.min.js.map \ No newline at end of file diff --git a/blocks/amd/build/add_modal.min.js.map b/blocks/amd/build/add_modal.min.js.map new file mode 100644 index 00000000000..32e068ba07a --- /dev/null +++ b/blocks/amd/build/add_modal.min.js.map @@ -0,0 +1 @@ +{"version":3,"file":"add_modal.min.js","sources":["../src/add_modal.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 * Show an add block modal instead of doing it on a separate page.\n *\n * @module core_block/add_modal\n * @copyright 2016 Damyon Wiese \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport ModalFactory from 'core/modal_factory';\nimport Templates from 'core/templates';\nimport {get_string as getString} from 'core/str';\nimport Ajax from 'core/ajax';\nimport ModalForm from \"core_form/modalform\";\n\nconst SELECTORS = {\n ADD_BLOCK: '[data-key=\"addblock\"]',\n SHOW_BLOCK_FORM: '[data-action=\"showaddblockform\"][data-blockname][data-blockform]'\n};\n\n// Ensure we only add our listeners once.\nlet listenerEventsRegistered = false;\n\n/**\n * Register related event listeners.\n *\n * @method registerListenerEvents\n * @param {String|null} addBlockUrl The add block URL\n * @param {String} pagehash\n */\nconst registerListenerEvents = (addBlockUrl, pagehash) => {\n let addBlockModal = null;\n document.addEventListener('click', e => {\n\n const showAddBlockForm = e.target.closest(SELECTORS.SHOW_BLOCK_FORM);\n if (showAddBlockForm) {\n e.preventDefault();\n\n const modalForm = new ModalForm({\n modalConfig: {\n title: getString('addblock', 'core_block',\n showAddBlockForm.getAttribute('data-blocktitle')),\n },\n args: {blockname: showAddBlockForm.getAttribute('data-blockname'), pagehash,\n blockregion: showAddBlockForm.getAttribute('data-blockregion')},\n formClass: showAddBlockForm.getAttribute('data-blockform'),\n returnFocus: showAddBlockForm,\n });\n\n modalForm.addEventListener(modalForm.events.FORM_SUBMITTED, () => {\n addBlockModal.destroy();\n window.location.reload();\n });\n\n modalForm.show();\n }\n\n const addBlock = e.target.closest(SELECTORS.ADD_BLOCK);\n if (addBlock) {\n e.preventDefault();\n\n let addBlockModalUrl = addBlockUrl ?? addBlock.dataset.url;\n\n buildAddBlockModal()\n .then(modal => {\n addBlockModal = modal;\n const modalBody = renderBlocks(addBlockModalUrl, pagehash,\n addBlock.getAttribute('data-blockregion'));\n modal.setBody(modalBody);\n modal.show();\n\n return modalBody;\n })\n .catch(() => {\n addBlockModal.destroy();\n });\n }\n });\n};\n\n/**\n * Method that creates the 'add block' modal.\n *\n * @method buildAddBlockModal\n * @returns {Promise} The modal promise (modal's body will be rendered later).\n */\nconst buildAddBlockModal = () => {\n return ModalFactory.create({\n type: ModalFactory.types.CANCEL,\n title: getString('addblock')\n });\n};\n\n/**\n * Method that renders the list of available blocks.\n *\n * @method renderBlocks\n * @param {String} addBlockUrl The add block URL\n * @param {String} pagehash\n * @param {String} region\n * @return {Promise}\n */\nconst renderBlocks = async(addBlockUrl, pagehash, region) => {\n // Fetch all addable blocks in the given page.\n const blocks = await getAddableBlocks(pagehash);\n\n return Templates.render('core/add_block_body', {\n blocks: blocks,\n url: addBlockUrl,\n blockregion: region,\n pagehash\n });\n};\n\n/**\n * Method that fetches all addable blocks in a given page.\n *\n * @method getAddableBlocks\n * @param {String} pagehash\n * @return {Promise}\n */\nconst getAddableBlocks = async(pagehash) => {\n const request = {\n methodname: 'core_block_fetch_addable_blocks',\n args: {\n pagecontextid: 0,\n pagetype: '',\n pagelayout: '',\n subpage: '',\n pagehash: pagehash,\n },\n };\n\n return Ajax.call([request])[0];\n};\n\n/**\n * Set up the actions.\n *\n * @method init\n * @param {String} addBlockUrl The add block URL\n * @param {String} pagehash\n */\nexport const init = (addBlockUrl = null, pagehash = '') => {\n if (!listenerEventsRegistered) {\n registerListenerEvents(addBlockUrl, pagehash);\n listenerEventsRegistered = true;\n }\n};\n"],"names":["SELECTORS","listenerEventsRegistered","registerListenerEvents","addBlockUrl","pagehash","addBlockModal","document","addEventListener","e","showAddBlockForm","target","closest","preventDefault","modalForm","ModalForm","modalConfig","title","getAttribute","args","blockname","blockregion","formClass","returnFocus","events","FORM_SUBMITTED","destroy","window","location","reload","show","addBlock","addBlockModalUrl","dataset","url","buildAddBlockModal","then","modal","modalBody","renderBlocks","setBody","catch","ModalFactory","create","type","types","CANCEL","async","region","blocks","getAddableBlocks","Templates","render","request","methodname","pagecontextid","pagetype","pagelayout","subpage","Ajax","call"],"mappings":";;;;;;;8QA6BMA,oBACS,wBADTA,0BAEe,uEAIjBC,0BAA2B,QASzBC,uBAAyB,CAACC,YAAaC,gBACrCC,cAAgB,KACpBC,SAASC,iBAAiB,SAASC,UAEzBC,iBAAmBD,EAAEE,OAAOC,QAAQX,8BACtCS,iBAAkB,CAClBD,EAAEI,uBAEIC,UAAY,IAAIC,mBAAU,CAC5BC,YAAa,CACTC,OAAO,mBAAU,WAAY,aACzBP,iBAAiBQ,aAAa,qBAEtCC,KAAM,CAACC,UAAWV,iBAAiBQ,aAAa,kBAAmBb,SAAAA,SAC/DgB,YAAaX,iBAAiBQ,aAAa,qBAC/CI,UAAWZ,iBAAiBQ,aAAa,kBACzCK,YAAab,mBAGjBI,UAAUN,iBAAiBM,UAAUU,OAAOC,gBAAgB,KACxDnB,cAAcoB,UACdC,OAAOC,SAASC,YAGpBf,UAAUgB,aAGRC,SAAWtB,EAAEE,OAAOC,QAAQX,wBAC9B8B,SAAU,CACVtB,EAAEI,qBAEEmB,iBAAmB5B,MAAAA,YAAAA,YAAe2B,SAASE,QAAQC,IAEvDC,qBACKC,MAAKC,QACF/B,cAAgB+B,YACVC,UAAYC,aAAaP,iBAAkB3B,SAC7C0B,SAASb,aAAa,4BAC1BmB,MAAMG,QAAQF,WACdD,MAAMP,OAECQ,aAEVG,OAAM,KACHnC,cAAcoB,kBAY5BS,mBAAqB,IAChBO,uBAAaC,OAAO,CACvBC,KAAMF,uBAAaG,MAAMC,OACzB7B,OAAO,mBAAU,cAanBsB,aAAeQ,MAAM3C,YAAaC,SAAU2C,gBAExCC,aAAeC,iBAAiB7C,iBAE/B8C,mBAAUC,OAAO,sBAAuB,CAC3CH,OAAQA,OACRf,IAAK9B,YACLiB,YAAa2B,OACb3C,SAAAA,YAWF6C,iBAAmBH,MAAAA,iBACfM,QAAU,CACZC,WAAY,kCACZnC,KAAM,CACFoC,cAAe,EACfC,SAAU,GACVC,WAAY,GACZC,QAAS,GACTrD,SAAUA,kBAIXsD,cAAKC,KAAK,CAACP,UAAU,kBAUZ,eAACjD,mEAAc,KAAMC,gEAAW,GAC3CH,2BACDC,uBAAuBC,YAAaC,UACpCH,0BAA2B"} \ No newline at end of file diff --git a/blocks/amd/build/edit.min.js.map b/blocks/amd/build/edit.min.js.map index 85b9a78cf49..611791ff7c0 100644 --- a/blocks/amd/build/edit.min.js.map +++ b/blocks/amd/build/edit.min.js.map @@ -1 +1 @@ -{"version":3,"file":"edit.min.js","sources":["../src/edit.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 * Javascript module for editing blocks\n *\n * @module core_block/edit\n * @copyright 2022 Marina Glancy\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport ModalForm from 'core_form/modalform';\n\nconst SELECTORS = {\n EDITBLOCK: '[data-action=\"editblock\"][data-blockid][data-blockform]',\n};\n\n/**\n * Initialize module\n * @param {String} pagehash\n */\nexport const init = (pagehash) => {\n document.addEventListener('click', e => {\n const target = e.target.closest(SELECTORS.EDITBLOCK);\n if (!target || !target.getAttribute('data-blockform')) {\n return;\n }\n e.preventDefault();\n\n const modalForm = new ModalForm({\n modalConfig: {\n title: target.getAttribute('data-header'),\n },\n args: {blockid: target.getAttribute('data-blockid'), pagehash},\n formClass: target.getAttribute('data-blockform'),\n returnFocus: target,\n });\n\n // Reload the page when the form is submitted, there is no possibility\n // currently to request contents update of just one block on the page.\n modalForm.addEventListener(modalForm.events.FORM_SUBMITTED, () => {\n location.reload();\n });\n\n modalForm.show();\n });\n};\n"],"names":["obj","_modalform","__esModule","default","SELECTORS","_exports","init","pagehash","document","addEventListener","e","target","closest","getAttribute","preventDefault","modalForm","ModalForm","modalConfig","title","args","blockid","formClass","returnFocus","events","FORM_SUBMITTED","location","reload","show"],"mappings":"0FAuB4C,IAAAA;;;;;;;kFAA5CC,YAA4CD,IAA5CC,aAA4CD,IAAAE,WAAAF,IAAAG,CAAAA,QAAAH,KAE5C,MAAMI,oBACS,0DAgCbC,SAAAC,KAzBmBC,WACjBC,SAASC,iBAAiB,SAASC,IAC/B,MAAMC,OAASD,EAAEC,OAAOC,QAAQR,qBAChC,IAAKO,SAAWA,OAAOE,aAAa,kBAChC,OAEJH,EAAEI,iBAEF,MAAMC,UAAY,IAAIC,WAAAA,QAAU,CAC5BC,YAAa,CACTC,MAAOP,OAAOE,aAAa,gBAE/BM,KAAM,CAACC,QAAST,OAAOE,aAAa,gBAAiBN,mBACrDc,UAAWV,OAAOE,aAAa,kBAC/BS,YAAaX,SAKjBI,UAAUN,iBAAiBM,UAAUQ,OAAOC,gBAAgB,KACxDC,SAASC,QAAQ,IAGrBX,UAAUY,MAAM,GAClB,CACJ"} \ No newline at end of file +{"version":3,"file":"edit.min.js","sources":["../src/edit.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 * Javascript module for editing blocks\n *\n * @module core_block/edit\n * @copyright 2022 Marina Glancy\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport ModalForm from 'core_form/modalform';\n\nconst SELECTORS = {\n EDITBLOCK: '[data-action=\"editblock\"][data-blockid][data-blockform]',\n};\n\n/**\n * Initialize module\n * @param {String} pagehash\n */\nexport const init = (pagehash) => {\n document.addEventListener('click', e => {\n const target = e.target.closest(SELECTORS.EDITBLOCK);\n if (!target || !target.getAttribute('data-blockform')) {\n return;\n }\n e.preventDefault();\n\n const modalForm = new ModalForm({\n modalConfig: {\n title: target.getAttribute('data-header'),\n },\n args: {blockid: target.getAttribute('data-blockid'), pagehash},\n formClass: target.getAttribute('data-blockform'),\n returnFocus: target,\n });\n\n // Reload the page when the form is submitted, there is no possibility\n // currently to request contents update of just one block on the page.\n modalForm.addEventListener(modalForm.events.FORM_SUBMITTED, () => {\n location.reload();\n });\n\n modalForm.show();\n });\n};\n"],"names":["SELECTORS","pagehash","document","addEventListener","e","target","closest","getAttribute","preventDefault","modalForm","ModalForm","modalConfig","title","args","blockid","formClass","returnFocus","events","FORM_SUBMITTED","location","reload","show"],"mappings":";;;;;;;sJAyBMA,oBACS,wEAOMC,WACjBC,SAASC,iBAAiB,SAASC,UACzBC,OAASD,EAAEC,OAAOC,QAAQN,yBAC3BK,SAAWA,OAAOE,aAAa,yBAGpCH,EAAEI,uBAEIC,UAAY,IAAIC,mBAAU,CAC5BC,YAAa,CACTC,MAAOP,OAAOE,aAAa,gBAE/BM,KAAM,CAACC,QAAST,OAAOE,aAAa,gBAAiBN,SAAAA,UACrDc,UAAWV,OAAOE,aAAa,kBAC/BS,YAAaX,SAKjBI,UAAUN,iBAAiBM,UAAUQ,OAAOC,gBAAgB,KACxDC,SAASC,YAGbX,UAAUY"} \ No newline at end of file diff --git a/blocks/amd/src/add_modal.js b/blocks/amd/src/add_modal.js new file mode 100644 index 00000000000..a1d0f573ec8 --- /dev/null +++ b/blocks/amd/src/add_modal.js @@ -0,0 +1,163 @@ +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see . + +/** + * Show an add block modal instead of doing it on a separate page. + * + * @module core_block/add_modal + * @copyright 2016 Damyon Wiese + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +import ModalFactory from 'core/modal_factory'; +import Templates from 'core/templates'; +import {get_string as getString} from 'core/str'; +import Ajax from 'core/ajax'; +import ModalForm from "core_form/modalform"; + +const SELECTORS = { + ADD_BLOCK: '[data-key="addblock"]', + SHOW_BLOCK_FORM: '[data-action="showaddblockform"][data-blockname][data-blockform]' +}; + +// Ensure we only add our listeners once. +let listenerEventsRegistered = false; + +/** + * Register related event listeners. + * + * @method registerListenerEvents + * @param {String|null} addBlockUrl The add block URL + * @param {String} pagehash + */ +const registerListenerEvents = (addBlockUrl, pagehash) => { + let addBlockModal = null; + document.addEventListener('click', e => { + + const showAddBlockForm = e.target.closest(SELECTORS.SHOW_BLOCK_FORM); + if (showAddBlockForm) { + e.preventDefault(); + + const modalForm = new ModalForm({ + modalConfig: { + title: getString('addblock', 'core_block', + showAddBlockForm.getAttribute('data-blocktitle')), + }, + args: {blockname: showAddBlockForm.getAttribute('data-blockname'), pagehash, + blockregion: showAddBlockForm.getAttribute('data-blockregion')}, + formClass: showAddBlockForm.getAttribute('data-blockform'), + returnFocus: showAddBlockForm, + }); + + modalForm.addEventListener(modalForm.events.FORM_SUBMITTED, () => { + addBlockModal.destroy(); + window.location.reload(); + }); + + modalForm.show(); + } + + const addBlock = e.target.closest(SELECTORS.ADD_BLOCK); + if (addBlock) { + e.preventDefault(); + + let addBlockModalUrl = addBlockUrl ?? addBlock.dataset.url; + + buildAddBlockModal() + .then(modal => { + addBlockModal = modal; + const modalBody = renderBlocks(addBlockModalUrl, pagehash, + addBlock.getAttribute('data-blockregion')); + modal.setBody(modalBody); + modal.show(); + + return modalBody; + }) + .catch(() => { + addBlockModal.destroy(); + }); + } + }); +}; + +/** + * Method that creates the 'add block' modal. + * + * @method buildAddBlockModal + * @returns {Promise} The modal promise (modal's body will be rendered later). + */ +const buildAddBlockModal = () => { + return ModalFactory.create({ + type: ModalFactory.types.CANCEL, + title: getString('addblock') + }); +}; + +/** + * Method that renders the list of available blocks. + * + * @method renderBlocks + * @param {String} addBlockUrl The add block URL + * @param {String} pagehash + * @param {String} region + * @return {Promise} + */ +const renderBlocks = async(addBlockUrl, pagehash, region) => { + // Fetch all addable blocks in the given page. + const blocks = await getAddableBlocks(pagehash); + + return Templates.render('core/add_block_body', { + blocks: blocks, + url: addBlockUrl, + blockregion: region, + pagehash + }); +}; + +/** + * Method that fetches all addable blocks in a given page. + * + * @method getAddableBlocks + * @param {String} pagehash + * @return {Promise} + */ +const getAddableBlocks = async(pagehash) => { + const request = { + methodname: 'core_block_fetch_addable_blocks', + args: { + pagecontextid: 0, + pagetype: '', + pagelayout: '', + subpage: '', + pagehash: pagehash, + }, + }; + + return Ajax.call([request])[0]; +}; + +/** + * Set up the actions. + * + * @method init + * @param {String} addBlockUrl The add block URL + * @param {String} pagehash + */ +export const init = (addBlockUrl = null, pagehash = '') => { + if (!listenerEventsRegistered) { + registerListenerEvents(addBlockUrl, pagehash); + listenerEventsRegistered = true; + } +}; diff --git a/blocks/upgrade.txt b/blocks/upgrade.txt index ca3e91a6001..63ca60645f2 100644 --- a/blocks/upgrade.txt +++ b/blocks/upgrade.txt @@ -8,8 +8,10 @@ information provided here is intended especially for developers. * Block plugins can specify that they want to display configuration form when block is added to the page by overriding static method block_edit_form::display_form_when_adding(). * Web service 'core_block_fetch_addable_blocks' accepts new parameter 'pagehash' -* Functions in the JS modules 'core/addblockmodal' and 'moodle-core-blockdraganddrop' - have changed their parameters. File lib/ajax/blocks.php takes different arguments. +* JS module 'core/addblockmodal' is deprecated, instead there is new module + 'core_block/add_modal' with similar functionality but different arguments. +* Functions in the JS modules 'moodle-core-blockdraganddrop' have changed their parameters. + File lib/ajax/blocks.php takes different arguments. No backward-compatibility is provided since these files are not part of the blocks API and not intended to be used by plugins. diff --git a/lib/amd/build/addblockmodal.min.js b/lib/amd/build/addblockmodal.min.js index ca8ed1b72d0..af43594d223 100644 --- a/lib/amd/build/addblockmodal.min.js +++ b/lib/amd/build/addblockmodal.min.js @@ -1,10 +1,11 @@ -define("core/addblockmodal",["exports","core/modal_factory","core/templates","core/str","core/ajax","core_form/modalform"],(function(_exports,_modal_factory,_templates,_str,_ajax,_modalform){function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}} +define("core/addblockmodal",["exports","core/modal_factory","core/templates","core/str","core/ajax"],(function(_exports,_modal_factory,_templates,_str,_ajax){function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}} /** * Show an add block modal instead of doing it on a separate page. * * @module core/addblockmodal + * @deprecated since Moodle 4.2 - please use core_block/add_modal instead. * @copyright 2016 Damyon Wiese * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_modal_factory=_interopRequireDefault(_modal_factory),_templates=_interopRequireDefault(_templates),_ajax=_interopRequireDefault(_ajax),_modalform=_interopRequireDefault(_modalform);const SELECTORS_ADD_BLOCK='[data-key="addblock"]',SELECTORS_SHOW_BLOCK_FORM='[data-action="showaddblockform"][data-blockname][data-blockform]';let listenerEventsRegistered=!1;const registerListenerEvents=(addBlockUrl,pagehash)=>{let addBlockModal=null;document.addEventListener("click",(e=>{const showAddBlockForm=e.target.closest(SELECTORS_SHOW_BLOCK_FORM);if(showAddBlockForm){e.preventDefault();const modalForm=new _modalform.default({modalConfig:{title:(0,_str.get_string)("addblock","core_block",showAddBlockForm.getAttribute("data-blocktitle"))},args:{blockname:showAddBlockForm.getAttribute("data-blockname"),pagehash:pagehash,blockregion:showAddBlockForm.getAttribute("data-blockregion")},formClass:showAddBlockForm.getAttribute("data-blockform"),returnFocus:showAddBlockForm});modalForm.addEventListener(modalForm.events.FORM_SUBMITTED,(()=>{addBlockModal.destroy(),window.location.reload()})),modalForm.show()}const addBlock=e.target.closest(SELECTORS_ADD_BLOCK);if(addBlock){e.preventDefault();let addBlockModalUrl=null!=addBlockUrl?addBlockUrl:addBlock.dataset.url;buildAddBlockModal().then((modal=>{addBlockModal=modal;const modalBody=renderBlocks(addBlockModalUrl,pagehash,addBlock.getAttribute("data-blockregion"));return modal.setBody(modalBody),modal.show(),modalBody})).catch((()=>{addBlockModal.destroy()}))}}))},buildAddBlockModal=()=>_modal_factory.default.create({type:_modal_factory.default.types.CANCEL,title:(0,_str.get_string)("addblock")}),renderBlocks=async(addBlockUrl,pagehash,region)=>{const blocks=await getAddableBlocks(pagehash);return _templates.default.render("core/add_block_body",{blocks:blocks,url:addBlockUrl,blockregion:region,pagehash:pagehash})},getAddableBlocks=async pagehash=>{const request={methodname:"core_block_fetch_addable_blocks",args:{pagecontextid:0,pagetype:"",pagelayout:"",subpage:"",pagehash:pagehash}};return _ajax.default.call([request])[0]};_exports.init=function(){let addBlockUrl=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,pagehash=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";listenerEventsRegistered||(registerListenerEvents(addBlockUrl,pagehash),listenerEventsRegistered=!0)}})); + */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_modal_factory=_interopRequireDefault(_modal_factory),_templates=_interopRequireDefault(_templates),_ajax=_interopRequireDefault(_ajax);const SELECTORS_ADD_BLOCK='[data-key="addblock"]';let listenerEventsRegistered=!1;const registerListenerEvents=(pageType,pageLayout,addBlockUrl,subPage)=>{document.addEventListener("click",(e=>{const addBlock=e.target.closest(SELECTORS_ADD_BLOCK);if(addBlock){e.preventDefault();let addBlockModal=null,addBlockModalUrl=null!=addBlockUrl?addBlockUrl:addBlock.dataset.url;buildAddBlockModal().then((modal=>{addBlockModal=modal;const modalBody=renderBlocks(addBlockModalUrl,pageType,pageLayout,subPage);return modal.setBody(modalBody),modal.show(),modalBody})).catch((()=>{addBlockModal.destroy()}))}}))},buildAddBlockModal=()=>_modal_factory.default.create({type:_modal_factory.default.types.CANCEL,title:(0,_str.get_string)("addblock")}),renderBlocks=async(addBlockUrl,pageType,pageLayout,subPage)=>{const blocks=await getAddableBlocks(pageType,pageLayout,subPage);return _templates.default.render("core/add_block_body",{blocks:blocks,url:addBlockUrl})},getAddableBlocks=async(pageType,pageLayout,subPage)=>{const request={methodname:"core_block_fetch_addable_blocks",args:{pagecontextid:M.cfg.contextid,pagetype:pageType,pagelayout:pageLayout,subpage:subPage}};return _ajax.default.call([request])[0]};_exports.init=function(pageType,pageLayout){let addBlockUrl=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,subPage=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"";listenerEventsRegistered||(registerListenerEvents(pageType,pageLayout,addBlockUrl,subPage),listenerEventsRegistered=!0)}})); //# sourceMappingURL=addblockmodal.min.js.map \ No newline at end of file diff --git a/lib/amd/build/addblockmodal.min.js.map b/lib/amd/build/addblockmodal.min.js.map index 4f1a961fd83..b3316c79e77 100644 --- a/lib/amd/build/addblockmodal.min.js.map +++ b/lib/amd/build/addblockmodal.min.js.map @@ -1 +1 @@ -{"version":3,"file":"addblockmodal.min.js","sources":["../src/addblockmodal.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 * Show an add block modal instead of doing it on a separate page.\n *\n * @module core/addblockmodal\n * @copyright 2016 Damyon Wiese \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport ModalFactory from 'core/modal_factory';\nimport Templates from 'core/templates';\nimport {get_string as getString} from 'core/str';\nimport Ajax from 'core/ajax';\nimport ModalForm from \"core_form/modalform\";\n\nconst SELECTORS = {\n ADD_BLOCK: '[data-key=\"addblock\"]',\n SHOW_BLOCK_FORM: '[data-action=\"showaddblockform\"][data-blockname][data-blockform]'\n};\n\n// Ensure we only add our listeners once.\nlet listenerEventsRegistered = false;\n\n/**\n * Register related event listeners.\n *\n * @method registerListenerEvents\n * @param {String|null} addBlockUrl The add block URL\n * @param {String} pagehash\n */\nconst registerListenerEvents = (addBlockUrl, pagehash) => {\n let addBlockModal = null;\n document.addEventListener('click', e => {\n\n const showAddBlockForm = e.target.closest(SELECTORS.SHOW_BLOCK_FORM);\n if (showAddBlockForm) {\n e.preventDefault();\n\n const modalForm = new ModalForm({\n modalConfig: {\n title: getString('addblock', 'core_block',\n showAddBlockForm.getAttribute('data-blocktitle')),\n },\n args: {blockname: showAddBlockForm.getAttribute('data-blockname'), pagehash,\n blockregion: showAddBlockForm.getAttribute('data-blockregion')},\n formClass: showAddBlockForm.getAttribute('data-blockform'),\n returnFocus: showAddBlockForm,\n });\n\n modalForm.addEventListener(modalForm.events.FORM_SUBMITTED, () => {\n addBlockModal.destroy();\n window.location.reload();\n });\n\n modalForm.show();\n }\n\n const addBlock = e.target.closest(SELECTORS.ADD_BLOCK);\n if (addBlock) {\n e.preventDefault();\n\n let addBlockModalUrl = addBlockUrl ?? addBlock.dataset.url;\n\n buildAddBlockModal()\n .then(modal => {\n addBlockModal = modal;\n const modalBody = renderBlocks(addBlockModalUrl, pagehash,\n addBlock.getAttribute('data-blockregion'));\n modal.setBody(modalBody);\n modal.show();\n\n return modalBody;\n })\n .catch(() => {\n addBlockModal.destroy();\n });\n }\n });\n};\n\n/**\n * Method that creates the 'add block' modal.\n *\n * @method buildAddBlockModal\n * @returns {Promise} The modal promise (modal's body will be rendered later).\n */\nconst buildAddBlockModal = () => {\n return ModalFactory.create({\n type: ModalFactory.types.CANCEL,\n title: getString('addblock')\n });\n};\n\n/**\n * Method that renders the list of available blocks.\n *\n * @method renderBlocks\n * @param {String} addBlockUrl The add block URL\n * @param {String} pagehash\n * @param {String} region\n * @return {Promise}\n */\nconst renderBlocks = async(addBlockUrl, pagehash, region) => {\n // Fetch all addable blocks in the given page.\n const blocks = await getAddableBlocks(pagehash);\n\n return Templates.render('core/add_block_body', {\n blocks: blocks,\n url: addBlockUrl,\n blockregion: region,\n pagehash\n });\n};\n\n/**\n * Method that fetches all addable blocks in a given page.\n *\n * @method getAddableBlocks\n * @param {String} pagehash\n * @return {Promise}\n */\nconst getAddableBlocks = async(pagehash) => {\n const request = {\n methodname: 'core_block_fetch_addable_blocks',\n args: {\n pagecontextid: 0,\n pagetype: '',\n pagelayout: '',\n subpage: '',\n pagehash: pagehash,\n },\n };\n\n return Ajax.call([request])[0];\n};\n\n/**\n * Set up the actions.\n *\n * @method init\n * @param {String} addBlockUrl The add block URL\n * @param {String} pagehash\n */\nexport const init = (addBlockUrl = null, pagehash = '') => {\n if (!listenerEventsRegistered) {\n registerListenerEvents(addBlockUrl, pagehash);\n listenerEventsRegistered = true;\n }\n};\n"],"names":["SELECTORS","listenerEventsRegistered","registerListenerEvents","addBlockUrl","pagehash","addBlockModal","document","addEventListener","e","showAddBlockForm","target","closest","preventDefault","modalForm","ModalForm","modalConfig","title","getAttribute","args","blockname","blockregion","formClass","returnFocus","events","FORM_SUBMITTED","destroy","window","location","reload","show","addBlock","addBlockModalUrl","dataset","url","buildAddBlockModal","then","modal","modalBody","renderBlocks","setBody","catch","ModalFactory","create","type","types","CANCEL","async","region","blocks","getAddableBlocks","Templates","render","request","methodname","pagecontextid","pagetype","pagelayout","subpage","Ajax","call"],"mappings":";;;;;;;8QA6BMA,oBACS,wBADTA,0BAEe,uEAIjBC,0BAA2B,QASzBC,uBAAyB,CAACC,YAAaC,gBACrCC,cAAgB,KACpBC,SAASC,iBAAiB,SAASC,UAEzBC,iBAAmBD,EAAEE,OAAOC,QAAQX,8BACtCS,iBAAkB,CAClBD,EAAEI,uBAEIC,UAAY,IAAIC,mBAAU,CAC5BC,YAAa,CACTC,OAAO,mBAAU,WAAY,aACzBP,iBAAiBQ,aAAa,qBAEtCC,KAAM,CAACC,UAAWV,iBAAiBQ,aAAa,kBAAmBb,SAAAA,SAC/DgB,YAAaX,iBAAiBQ,aAAa,qBAC/CI,UAAWZ,iBAAiBQ,aAAa,kBACzCK,YAAab,mBAGjBI,UAAUN,iBAAiBM,UAAUU,OAAOC,gBAAgB,KACxDnB,cAAcoB,UACdC,OAAOC,SAASC,YAGpBf,UAAUgB,aAGRC,SAAWtB,EAAEE,OAAOC,QAAQX,wBAC9B8B,SAAU,CACVtB,EAAEI,qBAEEmB,iBAAmB5B,MAAAA,YAAAA,YAAe2B,SAASE,QAAQC,IAEvDC,qBACKC,MAAKC,QACF/B,cAAgB+B,YACVC,UAAYC,aAAaP,iBAAkB3B,SAC7C0B,SAASb,aAAa,4BAC1BmB,MAAMG,QAAQF,WACdD,MAAMP,OAECQ,aAEVG,OAAM,KACHnC,cAAcoB,kBAY5BS,mBAAqB,IAChBO,uBAAaC,OAAO,CACvBC,KAAMF,uBAAaG,MAAMC,OACzB7B,OAAO,mBAAU,cAanBsB,aAAeQ,MAAM3C,YAAaC,SAAU2C,gBAExCC,aAAeC,iBAAiB7C,iBAE/B8C,mBAAUC,OAAO,sBAAuB,CAC3CH,OAAQA,OACRf,IAAK9B,YACLiB,YAAa2B,OACb3C,SAAAA,YAWF6C,iBAAmBH,MAAAA,iBACfM,QAAU,CACZC,WAAY,kCACZnC,KAAM,CACFoC,cAAe,EACfC,SAAU,GACVC,WAAY,GACZC,QAAS,GACTrD,SAAUA,kBAIXsD,cAAKC,KAAK,CAACP,UAAU,kBAUZ,eAACjD,mEAAc,KAAMC,gEAAW,GAC3CH,2BACDC,uBAAuBC,YAAaC,UACpCH,0BAA2B"} \ No newline at end of file +{"version":3,"file":"addblockmodal.min.js","sources":["../src/addblockmodal.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 * Show an add block modal instead of doing it on a separate page.\n *\n * @module core/addblockmodal\n * @deprecated since Moodle 4.2 - please use core_block/add_modal instead.\n * @copyright 2016 Damyon Wiese \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport ModalFactory from 'core/modal_factory';\nimport Templates from 'core/templates';\nimport {get_string as getString} from 'core/str';\nimport Ajax from 'core/ajax';\n\nconst SELECTORS = {\n ADD_BLOCK: '[data-key=\"addblock\"]'\n};\n\n// Ensure we only add our listeners once.\nlet listenerEventsRegistered = false;\n\n/**\n * Register related event listeners.\n *\n * @method registerListenerEvents\n * @param {String} pageType The type of the page\n * @param {String} pageLayout The layout of the page\n * @param {String|null} addBlockUrl The add block URL\n * @param {String} subPage The subpage identifier\n */\nconst registerListenerEvents = (pageType, pageLayout, addBlockUrl, subPage) => {\n document.addEventListener('click', e => {\n\n const addBlock = e.target.closest(SELECTORS.ADD_BLOCK);\n if (addBlock) {\n e.preventDefault();\n\n let addBlockModal = null;\n let addBlockModalUrl = addBlockUrl ?? addBlock.dataset.url;\n\n buildAddBlockModal()\n .then(modal => {\n addBlockModal = modal;\n const modalBody = renderBlocks(addBlockModalUrl, pageType, pageLayout, subPage);\n modal.setBody(modalBody);\n modal.show();\n\n return modalBody;\n })\n .catch(() => {\n addBlockModal.destroy();\n });\n }\n });\n};\n\n/**\n * Method that creates the 'add block' modal.\n *\n * @method buildAddBlockModal\n * @returns {Promise} The modal promise (modal's body will be rendered later).\n */\nconst buildAddBlockModal = () => {\n return ModalFactory.create({\n type: ModalFactory.types.CANCEL,\n title: getString('addblock')\n });\n};\n\n/**\n * Method that renders the list of available blocks.\n *\n * @method renderBlocks\n * @param {String} addBlockUrl The add block URL\n * @param {String} pageType The type of the page\n * @param {String} pageLayout The layout of the page\n * @param {String} subPage The subpage identifier\n * @return {Promise}\n */\nconst renderBlocks = async(addBlockUrl, pageType, pageLayout, subPage) => {\n // Fetch all addable blocks in the given page.\n const blocks = await getAddableBlocks(pageType, pageLayout, subPage);\n\n return Templates.render('core/add_block_body', {\n blocks: blocks,\n url: addBlockUrl\n });\n};\n\n/**\n * Method that fetches all addable blocks in a given page.\n *\n * @method getAddableBlocks\n * @param {String} pageType The type of the page\n * @param {String} pageLayout The layout of the page\n * @param {String} subPage The subpage identifier\n * @return {Promise}\n */\nconst getAddableBlocks = async(pageType, pageLayout, subPage) => {\n const request = {\n methodname: 'core_block_fetch_addable_blocks',\n args: {\n pagecontextid: M.cfg.contextid,\n pagetype: pageType,\n pagelayout: pageLayout,\n subpage: subPage,\n },\n };\n\n return Ajax.call([request])[0];\n};\n\n/**\n * Set up the actions.\n *\n * @method init\n * @param {String} pageType The type of the page\n * @param {String} pageLayout The layout of the page\n * @param {String|null} addBlockUrl The add block URL\n * @param {String} subPage The subpage identifier\n */\nexport const init = (pageType, pageLayout, addBlockUrl = null, subPage = '') => {\n if (!listenerEventsRegistered) {\n registerListenerEvents(pageType, pageLayout, addBlockUrl, subPage);\n listenerEventsRegistered = true;\n }\n};\n"],"names":["SELECTORS","listenerEventsRegistered","registerListenerEvents","pageType","pageLayout","addBlockUrl","subPage","document","addEventListener","e","addBlock","target","closest","preventDefault","addBlockModal","addBlockModalUrl","dataset","url","buildAddBlockModal","then","modal","modalBody","renderBlocks","setBody","show","catch","destroy","ModalFactory","create","type","types","CANCEL","title","async","blocks","getAddableBlocks","Templates","render","request","methodname","args","pagecontextid","M","cfg","contextid","pagetype","pagelayout","subpage","Ajax","call"],"mappings":";;;;;;;;gOA6BMA,oBACS,4BAIXC,0BAA2B,QAWzBC,uBAAyB,CAACC,SAAUC,WAAYC,YAAaC,WAC/DC,SAASC,iBAAiB,SAASC,UAEzBC,SAAWD,EAAEE,OAAOC,QAAQZ,wBAC9BU,SAAU,CACVD,EAAEI,qBAEEC,cAAgB,KAChBC,iBAAmBV,MAAAA,YAAAA,YAAeK,SAASM,QAAQC,IAEvDC,qBACKC,MAAKC,QACFN,cAAgBM,YACVC,UAAYC,aAAaP,iBAAkBZ,SAAUC,WAAYE,gBACvEc,MAAMG,QAAQF,WACdD,MAAMI,OAECH,aAEVI,OAAM,KACHX,cAAcY,kBAY5BR,mBAAqB,IAChBS,uBAAaC,OAAO,CACvBC,KAAMF,uBAAaG,MAAMC,OACzBC,OAAO,mBAAU,cAcnBV,aAAeW,MAAM5B,YAAaF,SAAUC,WAAYE,iBAEpD4B,aAAeC,iBAAiBhC,SAAUC,WAAYE,gBAErD8B,mBAAUC,OAAO,sBAAuB,CAC3CH,OAAQA,OACRjB,IAAKZ,eAaP8B,iBAAmBF,MAAM9B,SAAUC,WAAYE,iBAC3CgC,QAAU,CACZC,WAAY,kCACZC,KAAM,CACFC,cAAeC,EAAEC,IAAIC,UACrBC,SAAU1C,SACV2C,WAAY1C,WACZ2C,QAASzC,iBAIV0C,cAAKC,KAAK,CAACX,UAAU,kBAYZ,SAACnC,SAAUC,gBAAYC,mEAAc,KAAMC,+DAAU,GAChEL,2BACDC,uBAAuBC,SAAUC,WAAYC,YAAaC,SAC1DL,0BAA2B"} \ No newline at end of file diff --git a/lib/amd/src/addblockmodal.js b/lib/amd/src/addblockmodal.js index 04124abfae3..829c7c39d33 100644 --- a/lib/amd/src/addblockmodal.js +++ b/lib/amd/src/addblockmodal.js @@ -17,6 +17,7 @@ * Show an add block modal instead of doing it on a separate page. * * @module core/addblockmodal + * @deprecated since Moodle 4.2 - please use core_block/add_modal instead. * @copyright 2016 Damyon Wiese * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ @@ -25,11 +26,9 @@ import ModalFactory from 'core/modal_factory'; import Templates from 'core/templates'; import {get_string as getString} from 'core/str'; import Ajax from 'core/ajax'; -import ModalForm from "core_form/modalform"; const SELECTORS = { - ADD_BLOCK: '[data-key="addblock"]', - SHOW_BLOCK_FORM: '[data-action="showaddblockform"][data-blockname][data-blockform]' + ADD_BLOCK: '[data-key="addblock"]' }; // Ensure we only add our listeners once. @@ -39,47 +38,25 @@ let listenerEventsRegistered = false; * Register related event listeners. * * @method registerListenerEvents + * @param {String} pageType The type of the page + * @param {String} pageLayout The layout of the page * @param {String|null} addBlockUrl The add block URL - * @param {String} pagehash + * @param {String} subPage The subpage identifier */ -const registerListenerEvents = (addBlockUrl, pagehash) => { - let addBlockModal = null; +const registerListenerEvents = (pageType, pageLayout, addBlockUrl, subPage) => { document.addEventListener('click', e => { - const showAddBlockForm = e.target.closest(SELECTORS.SHOW_BLOCK_FORM); - if (showAddBlockForm) { - e.preventDefault(); - - const modalForm = new ModalForm({ - modalConfig: { - title: getString('addblock', 'core_block', - showAddBlockForm.getAttribute('data-blocktitle')), - }, - args: {blockname: showAddBlockForm.getAttribute('data-blockname'), pagehash, - blockregion: showAddBlockForm.getAttribute('data-blockregion')}, - formClass: showAddBlockForm.getAttribute('data-blockform'), - returnFocus: showAddBlockForm, - }); - - modalForm.addEventListener(modalForm.events.FORM_SUBMITTED, () => { - addBlockModal.destroy(); - window.location.reload(); - }); - - modalForm.show(); - } - const addBlock = e.target.closest(SELECTORS.ADD_BLOCK); if (addBlock) { e.preventDefault(); + let addBlockModal = null; let addBlockModalUrl = addBlockUrl ?? addBlock.dataset.url; buildAddBlockModal() .then(modal => { addBlockModal = modal; - const modalBody = renderBlocks(addBlockModalUrl, pagehash, - addBlock.getAttribute('data-blockregion')); + const modalBody = renderBlocks(addBlockModalUrl, pageType, pageLayout, subPage); modal.setBody(modalBody); modal.show(); @@ -110,19 +87,18 @@ const buildAddBlockModal = () => { * * @method renderBlocks * @param {String} addBlockUrl The add block URL - * @param {String} pagehash - * @param {String} region + * @param {String} pageType The type of the page + * @param {String} pageLayout The layout of the page + * @param {String} subPage The subpage identifier * @return {Promise} */ -const renderBlocks = async(addBlockUrl, pagehash, region) => { +const renderBlocks = async(addBlockUrl, pageType, pageLayout, subPage) => { // Fetch all addable blocks in the given page. - const blocks = await getAddableBlocks(pagehash); + const blocks = await getAddableBlocks(pageType, pageLayout, subPage); return Templates.render('core/add_block_body', { blocks: blocks, - url: addBlockUrl, - blockregion: region, - pagehash + url: addBlockUrl }); }; @@ -130,18 +106,19 @@ const renderBlocks = async(addBlockUrl, pagehash, region) => { * Method that fetches all addable blocks in a given page. * * @method getAddableBlocks - * @param {String} pagehash + * @param {String} pageType The type of the page + * @param {String} pageLayout The layout of the page + * @param {String} subPage The subpage identifier * @return {Promise} */ -const getAddableBlocks = async(pagehash) => { +const getAddableBlocks = async(pageType, pageLayout, subPage) => { const request = { methodname: 'core_block_fetch_addable_blocks', args: { - pagecontextid: 0, - pagetype: '', - pagelayout: '', - subpage: '', - pagehash: pagehash, + pagecontextid: M.cfg.contextid, + pagetype: pageType, + pagelayout: pageLayout, + subpage: subPage, }, }; @@ -152,12 +129,14 @@ const getAddableBlocks = async(pagehash) => { * Set up the actions. * * @method init - * @param {String} addBlockUrl The add block URL - * @param {String} pagehash + * @param {String} pageType The type of the page + * @param {String} pageLayout The layout of the page + * @param {String|null} addBlockUrl The add block URL + * @param {String} subPage The subpage identifier */ -export const init = (addBlockUrl = null, pagehash = '') => { +export const init = (pageType, pageLayout, addBlockUrl = null, subPage = '') => { if (!listenerEventsRegistered) { - registerListenerEvents(addBlockUrl, pagehash); + registerListenerEvents(pageType, pageLayout, addBlockUrl, subPage); listenerEventsRegistered = true; } }; diff --git a/lib/navigationlib.php b/lib/navigationlib.php index f6e19f662ab..f3547a6b940 100644 --- a/lib/navigationlib.php +++ b/lib/navigationlib.php @@ -4229,7 +4229,7 @@ class flat_navigation extends navigation_node_collection { $addblockurl = "?{$url->get_query_string(false)}"; - $PAGE->requires->js_call_amd('core/addblockmodal', 'init', + $PAGE->requires->js_call_amd('core_block/add_modal', 'init', [$addblockurl, $this->page->get_edited_page_hash()]); } } diff --git a/lib/outputrenderers.php b/lib/outputrenderers.php index 84f9024a2c8..77a83e3c26c 100644 --- a/lib/outputrenderers.php +++ b/lib/outputrenderers.php @@ -5090,6 +5090,11 @@ EOD; 'escapedlink' => "?{$url->get_query_string(false)}", 'pagehash' => $this->page->get_edited_page_hash(), 'blockregion' => $region, + // The following parameters are not used since Moodle 4.2 but are + // still passed for backward-compatibility. + 'pageType' => $this->page->pagetype, + 'pageLayout' => $this->page->pagelayout, + 'subPage' => $this->page->subpage, ] ); } diff --git a/lib/templates/add_block_button.mustache b/lib/templates/add_block_button.mustache index 361eacf3372..13c93cf6692 100644 --- a/lib/templates/add_block_button.mustache +++ b/lib/templates/add_block_button.mustache @@ -37,7 +37,7 @@ {{#js}} // Initialise the JS for the modal window which displays the blocks available to add. - require(['core/addblockmodal'], function(addBlockModal) { + require(['core_block/add_modal'], function(addBlockModal) { addBlockModal.init(null, '{{pagehash}}'); }); {{/js}}