From 4ebfd5e671db2a5b9f826dff775295ec622be573 Mon Sep 17 00:00:00 2001 From: Stevani Andolo Date: Wed, 31 Jul 2024 11:47:51 +0800 Subject: [PATCH] MDL-78428 tiny_media: Handled repository upload --- .../media/amd/build/embed/embedhandler.min.js | 2 +- .../amd/build/embed/embedhandler.min.js.map | 2 +- .../media/amd/src/embed/embedhandler.js | 21 +++++++++++++++++++ 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/lib/editor/tiny/plugins/media/amd/build/embed/embedhandler.min.js b/lib/editor/tiny/plugins/media/amd/build/embed/embedhandler.min.js index 5a5c0d32d3e..4e7f46aa66f 100644 --- a/lib/editor/tiny/plugins/media/amd/build/embed/embedhandler.min.js +++ b/lib/editor/tiny/plugins/media/amd/build/embed/embedhandler.min.js @@ -1,3 +1,3 @@ -define("tiny_media/embed/embedhandler",["exports","../selectors","./embedinsert","../helpers","core/modal_events"],(function(_exports,_selectors,_embedinsert,_helpers,ModalEvents){var obj;function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.EmbedHandler=void 0,_selectors=(obj=_selectors)&&obj.__esModule?obj:{default:obj},ModalEvents=function(obj,nodeInterop){if(!nodeInterop&&obj&&obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&&"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&&cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&&Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&&(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&&cache.set(obj,newObj);return newObj}(ModalEvents);_exports.EmbedHandler=class{constructor(data){_defineProperty(this,"loadTemplatePromise",(templateContext=>{templateContext.elementid=this.editor.id,templateContext.bodyTemplate=_selectors.default.EMBED.template.body.insertMediaBody,templateContext.footerTemplate=_selectors.default.EMBED.template.footer.insertMediaFooter,templateContext.selector="EMBED",Promise.all([(0,_helpers.body)(templateContext,this.root),(0,_helpers.footer)(templateContext,this.root)]).then((()=>{new _embedinsert.EmbedInsert(this).init()})).catch((error=>{window.console.log(error)}))})),_defineProperty(this,"clickHandler",(async e=>{e.target.closest(_selectors.default.EMBED.actions.addUrl)&&this.urlChanged()})),_defineProperty(this,"registerEventListeners",(async modal=>{await modal.getBody();const $root=modal.getRoot(),root=$root[0];this.canShowFilePickerTrack&&root.addEventListener("click",this.clickHandler.bind(this)),root.addEventListener("input",(e=>{const urlEle=e.target.closest(_selectors.default.EMBED.elements.fromUrl);urlEle&&this.toggleUrlButton(urlEle)})),$root.on(ModalEvents.hidden,(()=>{this.currentModal.destroy()}))})),(0,_helpers.setPropertiesFromData)(this,data)}urlChanged(){(0,_helpers.hideElements)(_selectors.default.EMBED.elements.urlWarning,this.root);const url=this.root.querySelector(_selectors.default.EMBED.elements.fromUrl).value;url&&url!==this.currentUrl&&window.console.log(url)}toggleUrlButton(input){const url=input.value;this.root.querySelector(_selectors.default.EMBED.actions.addUrl).disabled=!(""!==url&&(0,_helpers.isValidUrl)(url))}}})); +define("tiny_media/embed/embedhandler",["exports","../selectors","./embedinsert","../helpers","core/modal_events","editor_tiny/utils"],(function(_exports,_selectors,_embedinsert,_helpers,ModalEvents,_utils){var obj;function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.EmbedHandler=void 0,_selectors=(obj=_selectors)&&obj.__esModule?obj:{default:obj},ModalEvents=function(obj,nodeInterop){if(!nodeInterop&&obj&&obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&&"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&&cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&&Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&&(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&&cache.set(obj,newObj);return newObj}(ModalEvents);_exports.EmbedHandler=class{constructor(data){_defineProperty(this,"loadTemplatePromise",(templateContext=>{templateContext.elementid=this.editor.id,templateContext.bodyTemplate=_selectors.default.EMBED.template.body.insertMediaBody,templateContext.footerTemplate=_selectors.default.EMBED.template.footer.insertMediaFooter,templateContext.selector="EMBED",Promise.all([(0,_helpers.body)(templateContext,this.root),(0,_helpers.footer)(templateContext,this.root)]).then((()=>{new _embedinsert.EmbedInsert(this).init()})).catch((error=>{window.console.log(error)}))})),_defineProperty(this,"clickHandler",(async e=>{if(e.target.closest(_selectors.default.EMBED.actions.mediaBrowser)){e.preventDefault();const params=await(0,_utils.displayFilepicker)(this.editor,"media");this.trackFilePickerCallback(params)}e.target.closest(_selectors.default.EMBED.actions.addUrl)&&this.urlChanged()})),_defineProperty(this,"registerEventListeners",(async modal=>{await modal.getBody();const $root=modal.getRoot(),root=$root[0];this.canShowFilePickerTrack&&root.addEventListener("click",this.clickHandler.bind(this)),root.addEventListener("input",(e=>{const urlEle=e.target.closest(_selectors.default.EMBED.elements.fromUrl);urlEle&&this.toggleUrlButton(urlEle)})),$root.on(ModalEvents.hidden,(()=>{this.currentModal.destroy()}))})),(0,_helpers.setPropertiesFromData)(this,data)}urlChanged(){(0,_helpers.hideElements)(_selectors.default.EMBED.elements.urlWarning,this.root);const url=this.root.querySelector(_selectors.default.EMBED.elements.fromUrl).value;url&&url!==this.currentUrl&&window.console.log(url)}trackFilePickerCallback(params){""!==params.url&&window.console.log(params.url)}toggleUrlButton(input){const url=input.value;this.root.querySelector(_selectors.default.EMBED.actions.addUrl).disabled=!(""!==url&&(0,_helpers.isValidUrl)(url))}}})); //# sourceMappingURL=embedhandler.min.js.map \ No newline at end of file diff --git a/lib/editor/tiny/plugins/media/amd/build/embed/embedhandler.min.js.map b/lib/editor/tiny/plugins/media/amd/build/embed/embedhandler.min.js.map index 1ccfa84febb..0792c442ce5 100644 --- a/lib/editor/tiny/plugins/media/amd/build/embed/embedhandler.min.js.map +++ b/lib/editor/tiny/plugins/media/amd/build/embed/embedhandler.min.js.map @@ -1 +1 @@ -{"version":3,"file":"embedhandler.min.js","sources":["../../src/embed/embedhandler.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 * Tiny media plugin embed handler class.\n *\n * This handles anything that embed requires like:\n * - Calling the media preview in embedPreview.\n * - Loading the embed insert.\n * - Getting selected media data.\n * - Handles url and repository uploads.\n * - Reset embed insert when embed preview is deleted.\n * - Handles media embedding into tiny and etc.\n *\n * @module tiny_media/embed/embedhandler\n * @copyright 2024 Stevani Andolo \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport Selectors from \"../selectors\";\nimport {EmbedInsert} from './embedinsert';\nimport {\n body,\n footer,\n setPropertiesFromData,\n hideElements,\n isValidUrl,\n} from '../helpers';\nimport * as ModalEvents from 'core/modal_events';\n\nexport class EmbedHandler {\n\n constructor(data) {\n setPropertiesFromData(this, data); // Creates dynamic properties based on \"data\" param.\n }\n\n /**\n * Load the media insert dialogue.\n *\n * @param {object} templateContext Object template context\n */\n loadTemplatePromise = (templateContext) => {\n templateContext.elementid = this.editor.id;\n templateContext.bodyTemplate = Selectors.EMBED.template.body.insertMediaBody;\n templateContext.footerTemplate = Selectors.EMBED.template.footer.insertMediaFooter;\n templateContext.selector = 'EMBED';\n\n Promise.all([body(templateContext, this.root), footer(templateContext, this.root)])\n .then(() => {\n (new EmbedInsert(this)).init();\n return;\n })\n .catch(error => {\n window.console.log(error);\n });\n };\n\n /**\n * Handles changes in the media URL input field and loads a preview of the media if the URL has changed.\n */\n urlChanged() {\n hideElements(Selectors.EMBED.elements.urlWarning, this.root);\n const url = this.root.querySelector(Selectors.EMBED.elements.fromUrl).value;\n if (url && url !== this.currentUrl) {\n window.console.log(url);\n }\n }\n\n /**\n * Handle click events.\n *\n * @param {html} e Selected element\n */\n clickHandler = async(e) => {\n const addUrlEle = e.target.closest(Selectors.EMBED.actions.addUrl);\n if (addUrlEle) {\n this.urlChanged();\n }\n };\n\n /**\n * Enables or disables the URL-related buttons in the footer based on the current URL and input value.\n *\n * @param {html} input Url input field\n */\n toggleUrlButton(input) {\n const url = input.value;\n const addUrl = this.root.querySelector(Selectors.EMBED.actions.addUrl);\n addUrl.disabled = !(url !== \"\" && isValidUrl(url));\n }\n\n registerEventListeners = async(modal) => {\n await modal.getBody();\n const $root = modal.getRoot();\n const root = $root[0];\n if (this.canShowFilePickerTrack) {\n root.addEventListener('click', this.clickHandler.bind(this));\n }\n\n root.addEventListener('input', (e) => {\n const urlEle = e.target.closest(Selectors.EMBED.elements.fromUrl);\n if (urlEle) {\n this.toggleUrlButton(urlEle);\n }\n });\n\n $root.on(ModalEvents.hidden, () => {\n this.currentModal.destroy();\n });\n };\n}\n"],"names":["constructor","data","templateContext","elementid","this","editor","id","bodyTemplate","Selectors","EMBED","template","body","insertMediaBody","footerTemplate","footer","insertMediaFooter","selector","Promise","all","root","then","EmbedInsert","init","catch","error","window","console","log","async","e","target","closest","actions","addUrl","urlChanged","modal","getBody","$root","getRoot","canShowFilePickerTrack","addEventListener","clickHandler","bind","urlEle","elements","fromUrl","toggleUrlButton","on","ModalEvents","hidden","currentModal","destroy","urlWarning","url","querySelector","value","currentUrl","input","disabled"],"mappings":"w8CA4CIA,YAAYC,kDASWC,kBACnBA,gBAAgBC,UAAYC,KAAKC,OAAOC,GACxCJ,gBAAgBK,aAAeC,mBAAUC,MAAMC,SAASC,KAAKC,gBAC7DV,gBAAgBW,eAAiBL,mBAAUC,MAAMC,SAASI,OAAOC,kBACjEb,gBAAgBc,SAAW,QAE3BC,QAAQC,IAAI,EAAC,iBAAKhB,gBAAiBE,KAAKe,OAAO,mBAAOjB,gBAAiBE,KAAKe,QACvEC,MAAK,SACGC,yBAAYjB,MAAOkB,UAG3BC,OAAMC,QACHC,OAAOC,QAAQC,IAAIH,kDAoBhBI,MAAAA,IACOC,EAAEC,OAAOC,QAAQvB,mBAAUC,MAAMuB,QAAQC,cAElDC,+DAeYN,MAAAA,cACfO,MAAMC,gBACNC,MAAQF,MAAMG,UACdnB,KAAOkB,MAAM,GACfjC,KAAKmC,wBACLpB,KAAKqB,iBAAiB,QAASpC,KAAKqC,aAAaC,KAAKtC,OAG1De,KAAKqB,iBAAiB,SAAUX,UACtBc,OAASd,EAAEC,OAAOC,QAAQvB,mBAAUC,MAAMmC,SAASC,SACrDF,aACKG,gBAAgBH,WAI7BN,MAAMU,GAAGC,YAAYC,QAAQ,UACpBC,aAAaC,mDA1EA/C,KAAMH,MA2BhCiC,uCACiB1B,mBAAUC,MAAMmC,SAASQ,WAAYhD,KAAKe,YACjDkC,IAAMjD,KAAKe,KAAKmC,cAAc9C,mBAAUC,MAAMmC,SAASC,SAASU,MAClEF,KAAOA,MAAQjD,KAAKoD,YACpB/B,OAAOC,QAAQC,IAAI0B,KAqB3BP,gBAAgBW,aACNJ,IAAMI,MAAMF,MACHnD,KAAKe,KAAKmC,cAAc9C,mBAAUC,MAAMuB,QAAQC,QACxDyB,WAAqB,KAARL,MAAc,uBAAWA"} \ No newline at end of file +{"version":3,"file":"embedhandler.min.js","sources":["../../src/embed/embedhandler.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 * Tiny media plugin embed handler class.\n *\n * This handles anything that embed requires like:\n * - Calling the media preview in embedPreview.\n * - Loading the embed insert.\n * - Getting selected media data.\n * - Handles url and repository uploads.\n * - Reset embed insert when embed preview is deleted.\n * - Handles media embedding into tiny and etc.\n *\n * @module tiny_media/embed/embedhandler\n * @copyright 2024 Stevani Andolo \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport Selectors from \"../selectors\";\nimport {EmbedInsert} from './embedinsert';\nimport {\n body,\n footer,\n setPropertiesFromData,\n hideElements,\n isValidUrl,\n} from '../helpers';\nimport * as ModalEvents from 'core/modal_events';\nimport {displayFilepicker} from 'editor_tiny/utils';\n\nexport class EmbedHandler {\n\n constructor(data) {\n setPropertiesFromData(this, data); // Creates dynamic properties based on \"data\" param.\n }\n\n /**\n * Load the media insert dialogue.\n *\n * @param {object} templateContext Object template context\n */\n loadTemplatePromise = (templateContext) => {\n templateContext.elementid = this.editor.id;\n templateContext.bodyTemplate = Selectors.EMBED.template.body.insertMediaBody;\n templateContext.footerTemplate = Selectors.EMBED.template.footer.insertMediaFooter;\n templateContext.selector = 'EMBED';\n\n Promise.all([body(templateContext, this.root), footer(templateContext, this.root)])\n .then(() => {\n (new EmbedInsert(this)).init();\n return;\n })\n .catch(error => {\n window.console.log(error);\n });\n };\n\n /**\n * Handles changes in the media URL input field and loads a preview of the media if the URL has changed.\n */\n urlChanged() {\n hideElements(Selectors.EMBED.elements.urlWarning, this.root);\n const url = this.root.querySelector(Selectors.EMBED.elements.fromUrl).value;\n if (url && url !== this.currentUrl) {\n window.console.log(url);\n }\n }\n\n /**\n * Callback for file picker that previews the media or add the captions and subtitles.\n *\n * @param {object} params Object of media url and etc\n */\n trackFilePickerCallback(params) {\n if (params.url !== '') {\n window.console.log(params.url);\n }\n }\n\n /**\n * Handle click events.\n *\n * @param {html} e Selected element\n */\n clickHandler = async(e) => {\n const element = e.target;\n\n const mediaBrowser = element.closest(Selectors.EMBED.actions.mediaBrowser);\n if (mediaBrowser) {\n e.preventDefault();\n const params = await displayFilepicker(this.editor, 'media');\n this.trackFilePickerCallback(params);\n }\n\n const addUrlEle = e.target.closest(Selectors.EMBED.actions.addUrl);\n if (addUrlEle) {\n this.urlChanged();\n }\n };\n\n /**\n * Enables or disables the URL-related buttons in the footer based on the current URL and input value.\n *\n * @param {html} input Url input field\n */\n toggleUrlButton(input) {\n const url = input.value;\n const addUrl = this.root.querySelector(Selectors.EMBED.actions.addUrl);\n addUrl.disabled = !(url !== \"\" && isValidUrl(url));\n }\n\n registerEventListeners = async(modal) => {\n await modal.getBody();\n const $root = modal.getRoot();\n const root = $root[0];\n if (this.canShowFilePickerTrack) {\n root.addEventListener('click', this.clickHandler.bind(this));\n }\n\n root.addEventListener('input', (e) => {\n const urlEle = e.target.closest(Selectors.EMBED.elements.fromUrl);\n if (urlEle) {\n this.toggleUrlButton(urlEle);\n }\n });\n\n $root.on(ModalEvents.hidden, () => {\n this.currentModal.destroy();\n });\n };\n}\n"],"names":["constructor","data","templateContext","elementid","this","editor","id","bodyTemplate","Selectors","EMBED","template","body","insertMediaBody","footerTemplate","footer","insertMediaFooter","selector","Promise","all","root","then","EmbedInsert","init","catch","error","window","console","log","async","e","target","closest","actions","mediaBrowser","preventDefault","params","trackFilePickerCallback","addUrl","urlChanged","modal","getBody","$root","getRoot","canShowFilePickerTrack","addEventListener","clickHandler","bind","urlEle","elements","fromUrl","toggleUrlButton","on","ModalEvents","hidden","currentModal","destroy","urlWarning","url","querySelector","value","currentUrl","input","disabled"],"mappings":"m+CA6CIA,YAAYC,kDASWC,kBACnBA,gBAAgBC,UAAYC,KAAKC,OAAOC,GACxCJ,gBAAgBK,aAAeC,mBAAUC,MAAMC,SAASC,KAAKC,gBAC7DV,gBAAgBW,eAAiBL,mBAAUC,MAAMC,SAASI,OAAOC,kBACjEb,gBAAgBc,SAAW,QAE3BC,QAAQC,IAAI,EAAC,iBAAKhB,gBAAiBE,KAAKe,OAAO,mBAAOjB,gBAAiBE,KAAKe,QACvEC,MAAK,SACGC,yBAAYjB,MAAOkB,UAG3BC,OAAMC,QACHC,OAAOC,QAAQC,IAAIH,kDA+BhBI,MAAAA,OACKC,EAAEC,OAEWC,QAAQvB,mBAAUC,MAAMuB,QAAQC,cAC3C,CACdJ,EAAEK,uBACIC,aAAe,4BAAkB/B,KAAKC,OAAQ,cAC/C+B,wBAAwBD,QAGfN,EAAEC,OAAOC,QAAQvB,mBAAUC,MAAMuB,QAAQK,cAElDC,+DAeYV,MAAAA,cACfW,MAAMC,gBACNC,MAAQF,MAAMG,UACdvB,KAAOsB,MAAM,GACfrC,KAAKuC,wBACLxB,KAAKyB,iBAAiB,QAASxC,KAAKyC,aAAaC,KAAK1C,OAG1De,KAAKyB,iBAAiB,SAAUf,UACtBkB,OAASlB,EAAEC,OAAOC,QAAQvB,mBAAUC,MAAMuC,SAASC,SACrDF,aACKG,gBAAgBH,WAI7BN,MAAMU,GAAGC,YAAYC,QAAQ,UACpBC,aAAaC,mDA9FAnD,KAAMH,MA2BhCqC,uCACiB9B,mBAAUC,MAAMuC,SAASQ,WAAYpD,KAAKe,YACjDsC,IAAMrD,KAAKe,KAAKuC,cAAclD,mBAAUC,MAAMuC,SAASC,SAASU,MAClEF,KAAOA,MAAQrD,KAAKwD,YACpBnC,OAAOC,QAAQC,IAAI8B,KAS3BrB,wBAAwBD,QACD,KAAfA,OAAOsB,KACPhC,OAAOC,QAAQC,IAAIQ,OAAOsB,KA8BlCP,gBAAgBW,aACNJ,IAAMI,MAAMF,MACHvD,KAAKe,KAAKuC,cAAclD,mBAAUC,MAAMuB,QAAQK,QACxDyB,WAAqB,KAARL,MAAc,uBAAWA"} \ No newline at end of file diff --git a/lib/editor/tiny/plugins/media/amd/src/embed/embedhandler.js b/lib/editor/tiny/plugins/media/amd/src/embed/embedhandler.js index 2e1637df8c8..61d566bb938 100644 --- a/lib/editor/tiny/plugins/media/amd/src/embed/embedhandler.js +++ b/lib/editor/tiny/plugins/media/amd/src/embed/embedhandler.js @@ -39,6 +39,7 @@ import { isValidUrl, } from '../helpers'; import * as ModalEvents from 'core/modal_events'; +import {displayFilepicker} from 'editor_tiny/utils'; export class EmbedHandler { @@ -78,12 +79,32 @@ export class EmbedHandler { } } + /** + * Callback for file picker that previews the media or add the captions and subtitles. + * + * @param {object} params Object of media url and etc + */ + trackFilePickerCallback(params) { + if (params.url !== '') { + window.console.log(params.url); + } + } + /** * Handle click events. * * @param {html} e Selected element */ clickHandler = async(e) => { + const element = e.target; + + const mediaBrowser = element.closest(Selectors.EMBED.actions.mediaBrowser); + if (mediaBrowser) { + e.preventDefault(); + const params = await displayFilepicker(this.editor, 'media'); + this.trackFilePickerCallback(params); + } + const addUrlEle = e.target.closest(Selectors.EMBED.actions.addUrl); if (addUrlEle) { this.urlChanged();