From 9853729199aedf9b682e3222cfd6015449da59ce Mon Sep 17 00:00:00 2001 From: Stevani Andolo Date: Thu, 1 Aug 2024 05:32:42 +0800 Subject: [PATCH] MDL-78428 tiny_media: Implemented a delete embed preview --- .../media/amd/build/embed/embedpreview.min.js | 2 +- .../amd/build/embed/embedpreview.min.js.map | 2 +- .../plugins/media/amd/build/selectors.min.js | 2 +- .../media/amd/build/selectors.min.js.map | 2 +- .../media/amd/src/embed/embedpreview.js | 29 +++++++++++++++++++ .../tiny/plugins/media/amd/src/selectors.js | 1 + .../tiny/plugins/media/lang/en/tiny_media.php | 2 ++ lib/editor/tiny/plugins/media/styles.css | 6 ++-- 8 files changed, 40 insertions(+), 6 deletions(-) diff --git a/lib/editor/tiny/plugins/media/amd/build/embed/embedpreview.min.js b/lib/editor/tiny/plugins/media/amd/build/embed/embedpreview.min.js index 24dbaf3bd42..72f458473e0 100644 --- a/lib/editor/tiny/plugins/media/amd/build/embed/embedpreview.min.js +++ b/lib/editor/tiny/plugins/media/amd/build/embed/embedpreview.min.js @@ -1,3 +1,3 @@ -define("tiny_media/embed/embedpreview",["exports","core/notification","../selectors","../common","core/str","../helpers","./embedhandler","../mediabase"],(function(_exports,_notification,_selectors,_common,_str,_helpers,_embedhandler,_mediabase){var obj;function _defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.EmbedPreview=void 0,_selectors=(obj=_selectors)&&obj.__esModule?obj:{default:obj};class EmbedPreview extends _mediabase.MediaBase{constructor(data){super(),_defineProperty(this,"selectorType","EMBED"),_defineProperty(this,"isEmbedPreviewDeleted",!1),_defineProperty(this,"init",(async()=>{this.currentModal.setTitle((0,_str.getString)("mediadetails",_common.component)),(0,_helpers.sourceTypeChecked)({source:this.mediaSource,root:this.root,urlSelector:_selectors.default.EMBED.elements.fromUrl,fileNameSelector:_selectors.default.EMBED.elements.fileNameLabel}),this.setMediaSourceAndPoster(),this.registerMediaDetailsEventListeners(this.currentModal)})),_defineProperty(this,"setMediaSourceAndPoster",(()=>{const box=this.root.querySelector(_selectors.default.EMBED.elements.previewBox),preview=this.root.querySelector(_selectors.default.EMBED.elements.preview);if(preview.src=this.mediaSource,preview.innerHTML=this.mediaSource,["video","audio"].includes(this.mediaType)){let fileName=(0,_helpers.getFileName)(this.root);this.isUpdating&&(this.isEmbedPreviewDeleted||(fileName=this.mediaTitle)),this.root.querySelector(_selectors.default.EMBED.elements.title).value=fileName}if(preview.addEventListener("error",(async()=>{(0,_notification.alert)(await(0,_str.getString)("medianotavailable",_common.component),await(0,_str.getString)("medianotavailabledesc",_common.component,this.mediaSource)),this.showBodyTemplate(),new _embedhandler.EmbedHandler(this).resetUploadForm()})),"video"===this.mediaType){let videoHeight=null,videoWidth=null;const videoTag=document.querySelector(_selectors.default.EMBED.elements.videoTag);this.thumbnail&&(videoTag.poster=this.thumbnail),videoTag.load(),videoTag.addEventListener("loadedmetadata",(()=>{this.showBodyTemplate(),videoHeight=videoTag.videoHeight,videoWidth=videoTag.videoWidth;const isLandscape=videoWidth-videoHeight>0;this.mediaDimensions={width:videoWidth,height:videoHeight},isLandscape?videoTag.width=box.offsetWidth:videoTag.height=box.offsetHeight})),videoTag.addEventListener("canplay",(()=>{const height=this.root.querySelector(_selectors.default.EMBED.elements.height),width=this.root.querySelector(_selectors.default.EMBED.elements.width);""===height.value&&""===width.value&&(height.value=videoHeight,width.value=videoWidth),videoHeight===parseInt(height.value)&&videoWidth===parseInt(width.value)?(this.currentWidth=this.mediaDimensions.width,this.currentHeight=this.mediaDimensions.height,this.sizeChecked("original")):(this.currentWidth=parseInt(width.value),this.currentHeight=parseInt(height.value),this.sizeChecked("custom"))}))}else if("audio"===this.mediaType){const audioTag=this.root.querySelector(_selectors.default.EMBED.elements.audioTag);audioTag.load(),audioTag.addEventListener("loadedmetadata",(()=>{this.showBodyTemplate()}))}else this.showBodyTemplate(),preview.width=box.offsetWidth,preview.height=box.offsetHeight})),_defineProperty(this,"showBodyTemplate",(()=>{(0,_helpers.stopMediaLoading)(this.root,"EMBED"),(0,_helpers.showElements)(_selectors.default.EMBED.elements.bodyTemplate,this.root)})),_defineProperty(this,"registerMediaDetailsEventListeners",(async()=>{const autoPlay=this.root.querySelector(_selectors.default.EMBED.elements.mediaAutoplay),mute=this.root.querySelector(_selectors.default.EMBED.elements.mediaMute);autoPlay&&mute&&"link"===this.mediaType&&(autoPlay.addEventListener("change",(()=>{autoPlay.checked&&(mute.checked=!0)})),mute.addEventListener("change",(()=>{autoPlay.checked&&!mute.checked&&(autoPlay.checked=!1)})));const sizeOriginalEle=this.root.querySelector(_selectors.default.EMBED.elements.sizeOriginal);sizeOriginalEle&&sizeOriginalEle.addEventListener("change",(()=>{this.sizeChecked("original")}));const sizeCustomEle=this.root.querySelector(_selectors.default.EMBED.elements.sizeCustom);sizeCustomEle&&sizeCustomEle.addEventListener("change",(()=>{this.sizeChecked("custom")}));const widthEle=this.root.querySelector(_selectors.default.EMBED.elements.width);widthEle&&widthEle.addEventListener("input",(()=>{widthEle.value=""===widthEle.value?0:Number(widthEle.value),this.autoAdjustSize()}));const heightEle=this.root.querySelector(_selectors.default.EMBED.elements.height);heightEle&&heightEle.addEventListener("input",(()=>{heightEle.value=""===heightEle.value?0:Number(heightEle.value),this.autoAdjustSize(!0)}))})),(0,_helpers.setPropertiesFromData)(this,data)}}_exports.EmbedPreview=EmbedPreview})); +define("tiny_media/embed/embedpreview",["exports","core/notification","../selectors","../common","core/str","../helpers","./embedhandler","../mediabase"],(function(_exports,_notification,_selectors,_common,_str,_helpers,_embedhandler,_mediabase){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.EmbedPreview=void 0,_notification=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}(_notification),_selectors=(obj=_selectors)&&obj.__esModule?obj:{default:obj};class EmbedPreview extends _mediabase.MediaBase{constructor(data){super(),_defineProperty(this,"selectorType","EMBED"),_defineProperty(this,"isEmbedPreviewDeleted",!1),_defineProperty(this,"init",(async()=>{this.currentModal.setTitle((0,_str.getString)("mediadetails",_common.component)),(0,_helpers.sourceTypeChecked)({source:this.mediaSource,root:this.root,urlSelector:_selectors.default.EMBED.elements.fromUrl,fileNameSelector:_selectors.default.EMBED.elements.fileNameLabel}),this.setMediaSourceAndPoster(),this.registerMediaDetailsEventListeners(this.currentModal)})),_defineProperty(this,"setMediaSourceAndPoster",(()=>{const box=this.root.querySelector(_selectors.default.EMBED.elements.previewBox),preview=this.root.querySelector(_selectors.default.EMBED.elements.preview);if(preview.src=this.mediaSource,preview.innerHTML=this.mediaSource,["video","audio"].includes(this.mediaType)){let fileName=(0,_helpers.getFileName)(this.root);this.isUpdating&&(this.isEmbedPreviewDeleted||(fileName=this.mediaTitle)),this.root.querySelector(_selectors.default.EMBED.elements.title).value=fileName}if(preview.addEventListener("error",(async()=>{(0,_notification.alert)(await(0,_str.getString)("medianotavailable",_common.component),await(0,_str.getString)("medianotavailabledesc",_common.component,this.mediaSource)),this.showBodyTemplate(),new _embedhandler.EmbedHandler(this).resetUploadForm()})),"video"===this.mediaType){let videoHeight=null,videoWidth=null;const videoTag=document.querySelector(_selectors.default.EMBED.elements.videoTag);this.thumbnail&&(videoTag.poster=this.thumbnail),videoTag.load(),videoTag.addEventListener("loadedmetadata",(()=>{this.showBodyTemplate(),videoHeight=videoTag.videoHeight,videoWidth=videoTag.videoWidth;const isLandscape=videoWidth-videoHeight>0;this.mediaDimensions={width:videoWidth,height:videoHeight},isLandscape?videoTag.width=box.offsetWidth:videoTag.height=box.offsetHeight})),videoTag.addEventListener("canplay",(()=>{const height=this.root.querySelector(_selectors.default.EMBED.elements.height),width=this.root.querySelector(_selectors.default.EMBED.elements.width);""===height.value&&""===width.value&&(height.value=videoHeight,width.value=videoWidth),videoHeight===parseInt(height.value)&&videoWidth===parseInt(width.value)?(this.currentWidth=this.mediaDimensions.width,this.currentHeight=this.mediaDimensions.height,this.sizeChecked("original")):(this.currentWidth=parseInt(width.value),this.currentHeight=parseInt(height.value),this.sizeChecked("custom"))}))}else if("audio"===this.mediaType){const audioTag=this.root.querySelector(_selectors.default.EMBED.elements.audioTag);audioTag.load(),audioTag.addEventListener("loadedmetadata",(()=>{this.showBodyTemplate()}))}else this.showBodyTemplate(),preview.width=box.offsetWidth,preview.height=box.offsetHeight})),_defineProperty(this,"showBodyTemplate",(()=>{(0,_helpers.stopMediaLoading)(this.root,"EMBED"),(0,_helpers.showElements)(_selectors.default.EMBED.elements.bodyTemplate,this.root)})),_defineProperty(this,"deleteMedia",(()=>{_notification.default.deleteCancelPromise((0,_str.getString)("deletemedia","tiny_media"),(0,_str.getString)("deletemediawarning","tiny_media")).then((()=>{this.isEmbedPreviewDeleted=!0,new _embedhandler.EmbedHandler(this).resetUploadForm(),delete this.mediaData})).catch((error=>{window.console.log(error)}))})),_defineProperty(this,"registerMediaDetailsEventListeners",(async()=>{const autoPlay=this.root.querySelector(_selectors.default.EMBED.elements.mediaAutoplay),mute=this.root.querySelector(_selectors.default.EMBED.elements.mediaMute);autoPlay&&mute&&"link"===this.mediaType&&(autoPlay.addEventListener("change",(()=>{autoPlay.checked&&(mute.checked=!0)})),mute.addEventListener("change",(()=>{autoPlay.checked&&!mute.checked&&(autoPlay.checked=!1)})));const sizeOriginalEle=this.root.querySelector(_selectors.default.EMBED.elements.sizeOriginal);sizeOriginalEle&&sizeOriginalEle.addEventListener("change",(()=>{this.sizeChecked("original")}));const sizeCustomEle=this.root.querySelector(_selectors.default.EMBED.elements.sizeCustom);sizeCustomEle&&sizeCustomEle.addEventListener("change",(()=>{this.sizeChecked("custom")}));const widthEle=this.root.querySelector(_selectors.default.EMBED.elements.width);widthEle&&widthEle.addEventListener("input",(()=>{widthEle.value=""===widthEle.value?0:Number(widthEle.value),this.autoAdjustSize()}));const heightEle=this.root.querySelector(_selectors.default.EMBED.elements.height);heightEle&&heightEle.addEventListener("input",(()=>{heightEle.value=""===heightEle.value?0:Number(heightEle.value),this.autoAdjustSize(!0)}));const deleteMedia=this.root.querySelector(_selectors.default.EMBED.actions.deleteMedia);deleteMedia&&deleteMedia.addEventListener("click",(()=>{this.deleteMedia()}))})),(0,_helpers.setPropertiesFromData)(this,data)}}_exports.EmbedPreview=EmbedPreview})); //# sourceMappingURL=embedpreview.min.js.map \ No newline at end of file diff --git a/lib/editor/tiny/plugins/media/amd/build/embed/embedpreview.min.js.map b/lib/editor/tiny/plugins/media/amd/build/embed/embedpreview.min.js.map index ba9a94d3bf7..25f335d33c2 100644 --- a/lib/editor/tiny/plugins/media/amd/build/embed/embedpreview.min.js.map +++ b/lib/editor/tiny/plugins/media/amd/build/embed/embedpreview.min.js.map @@ -1 +1 @@ -{"version":3,"file":"embedpreview.min.js","sources":["../../src/embed/embedpreview.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 preview and details class.\n *\n * This handles the embed file/url preview before embedding them into tiny editor.\n *\n * @module tiny_media/embed/embedpreview\n * @copyright 2024 Stevani Andolo \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport {alert} from 'core/notification';\nimport Selectors from '../selectors';\nimport {component} from '../common';\nimport {getString} from 'core/str';\nimport {\n sourceTypeChecked,\n getFileName,\n setPropertiesFromData,\n showElements,\n stopMediaLoading,\n} from '../helpers';\nimport {EmbedHandler} from './embedhandler';\nimport {MediaBase} from '../mediabase';\n\nexport class EmbedPreview extends MediaBase {\n\n selectorType = 'EMBED';\n\n isEmbedPreviewDeleted = false;\n\n constructor(data) {\n super();\n setPropertiesFromData(this, data); // Creates dynamic properties based on \"data\" param.\n }\n\n /**\n * Init the media details preview.\n */\n init = async() => {\n this.currentModal.setTitle(getString('mediadetails', component));\n sourceTypeChecked({\n source: this.mediaSource,\n root: this.root,\n urlSelector: Selectors.EMBED.elements.fromUrl,\n fileNameSelector: Selectors.EMBED.elements.fileNameLabel,\n });\n this.setMediaSourceAndPoster();\n this.registerMediaDetailsEventListeners(this.currentModal);\n };\n\n /**\n * Sets media source and thumbnail for the video.\n */\n setMediaSourceAndPoster = () => {\n const box = this.root.querySelector(Selectors.EMBED.elements.previewBox);\n const preview = this.root.querySelector(Selectors.EMBED.elements.preview);\n preview.src = this.mediaSource;\n preview.innerHTML = this.mediaSource;\n\n // Getting and setting up media title/name.\n if (['video', 'audio'].includes(this.mediaType)) {\n let fileName = getFileName(this.root); // Get original filename.\n if (this.isUpdating) {\n if (!this.isEmbedPreviewDeleted) {\n fileName = this.mediaTitle; // Title from the selected media.\n }\n }\n\n // Set the media name/title.\n this.root.querySelector(Selectors.EMBED.elements.title).value = fileName;\n }\n\n // Handle error when loading the media.\n preview.addEventListener('error', async() => {\n alert(\n await getString('medianotavailable', component),\n await getString('medianotavailabledesc', component, this.mediaSource)\n );\n\n // Stop the loader and display back the body template when failed to load the media.\n this.showBodyTemplate();\n\n (new EmbedHandler(this)).resetUploadForm();\n return;\n });\n\n if (this.mediaType === 'video') {\n let videoHeight = null;\n let videoWidth = null;\n const videoTag = document.querySelector(Selectors.EMBED.elements.videoTag);\n\n if (this.thumbnail) {\n videoTag.poster = this.thumbnail;\n }\n\n // Load the video html tag to load the media.\n videoTag.load();\n\n // Handle media metadata loading event.\n videoTag.addEventListener('loadedmetadata', () => {\n // Stop the loader and display back the body template when the media is loaded.\n this.showBodyTemplate();\n\n videoHeight = videoTag.videoHeight;\n videoWidth = videoTag.videoWidth;\n const widthProportion = (videoWidth - videoHeight);\n const isLandscape = widthProportion > 0;\n\n // Store dimensions of the raw video.\n this.mediaDimensions = {\n width: videoWidth,\n height: videoHeight,\n };\n\n // Set the media preview based on the media dimensions.\n if (isLandscape) {\n videoTag.width = box.offsetWidth;\n } else {\n videoTag.height = box.offsetHeight;\n }\n });\n\n // Handle media canplay event.\n videoTag.addEventListener('canplay', () => {\n const height = this.root.querySelector(Selectors.EMBED.elements.height);\n const width = this.root.querySelector(Selectors.EMBED.elements.width);\n\n if (height.value === '' && width.value === '') {\n height.value = videoHeight;\n width.value = videoWidth;\n }\n\n // Size checking and adjustment.\n if (videoHeight === parseInt(height.value) && videoWidth === parseInt(width.value)) {\n this.currentWidth = this.mediaDimensions.width;\n this.currentHeight = this.mediaDimensions.height;\n this.sizeChecked('original');\n } else {\n this.currentWidth = parseInt(width.value);\n this.currentHeight = parseInt(height.value);\n this.sizeChecked('custom');\n }\n });\n } else if (this.mediaType === 'audio') {\n const audioTag = this.root.querySelector(Selectors.EMBED.elements.audioTag);\n audioTag.load();\n\n // Handle media metadata loading event.\n audioTag.addEventListener('loadedmetadata', () => {\n // Stop the loader and display back the body template when the media is loaded.\n this.showBodyTemplate();\n });\n } else {\n // Stop the loader and display back the body template when the media is loaded.\n this.showBodyTemplate();\n\n // Set iframe width/height = box width/height.\n preview.width = box.offsetWidth;\n preview.height = box.offsetHeight;\n }\n };\n\n /**\n * Stop the loader and display back the body template.\n */\n showBodyTemplate = () => {\n stopMediaLoading(this.root, 'EMBED');\n showElements(Selectors.EMBED.elements.bodyTemplate, this.root);\n };\n\n /**\n * Only registers event listeners for new loaded elements in embed preview modal.\n */\n registerMediaDetailsEventListeners = async() => {\n // Handle media autoplay and mute.\n const autoPlay = this.root.querySelector(Selectors.EMBED.elements.mediaAutoplay);\n const mute = this.root.querySelector(Selectors.EMBED.elements.mediaMute);\n if (autoPlay && mute && this.mediaType === 'link') {\n autoPlay.addEventListener('change', () => {\n if (autoPlay.checked) {\n mute.checked = true;\n }\n });\n\n mute.addEventListener('change', () => {\n if (autoPlay.checked && !mute.checked) {\n autoPlay.checked = false;\n }\n });\n }\n\n // Handle the original size when selected.\n const sizeOriginalEle = this.root.querySelector(Selectors.EMBED.elements.sizeOriginal);\n if (sizeOriginalEle) {\n sizeOriginalEle.addEventListener('change', () => {\n this.sizeChecked('original');\n });\n }\n\n // Handle the custom size when selected.\n const sizeCustomEle = this.root.querySelector(Selectors.EMBED.elements.sizeCustom);\n if (sizeCustomEle) {\n sizeCustomEle.addEventListener('change', () => {\n this.sizeChecked('custom');\n });\n }\n\n // Handle the custom with size when inputted.\n const widthEle = this.root.querySelector(Selectors.EMBED.elements.width);\n if (widthEle) {\n widthEle.addEventListener('input', () => {\n // Avoid empty value.\n widthEle.value = widthEle.value === \"\" ? 0 : Number(widthEle.value);\n this.autoAdjustSize();\n });\n }\n\n // Handle the custom height size when inputted.\n const heightEle = this.root.querySelector(Selectors.EMBED.elements.height);\n if (heightEle) {\n heightEle.addEventListener('input', () => {\n // Avoid empty value.\n heightEle.value = heightEle.value === \"\" ? 0 : Number(heightEle.value);\n this.autoAdjustSize(true);\n });\n }\n };\n}\n"],"names":["EmbedPreview","MediaBase","constructor","data","async","currentModal","setTitle","component","source","this","mediaSource","root","urlSelector","Selectors","EMBED","elements","fromUrl","fileNameSelector","fileNameLabel","setMediaSourceAndPoster","registerMediaDetailsEventListeners","box","querySelector","previewBox","preview","src","innerHTML","includes","mediaType","fileName","isUpdating","isEmbedPreviewDeleted","mediaTitle","title","value","addEventListener","showBodyTemplate","EmbedHandler","resetUploadForm","videoHeight","videoWidth","videoTag","document","thumbnail","poster","load","isLandscape","mediaDimensions","width","height","offsetWidth","offsetHeight","parseInt","currentWidth","currentHeight","sizeChecked","audioTag","bodyTemplate","autoPlay","mediaAutoplay","mute","mediaMute","checked","sizeOriginalEle","sizeOriginal","sizeCustomEle","sizeCustom","widthEle","Number","autoAdjustSize","heightEle"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"embedpreview.min.js","sources":["../../src/embed/embedpreview.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 preview and details class.\n *\n * This handles the embed file/url preview before embedding them into tiny editor.\n *\n * @module tiny_media/embed/embedpreview\n * @copyright 2024 Stevani Andolo \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport {alert} from 'core/notification';\nimport Selectors from '../selectors';\nimport {component} from '../common';\nimport {getString} from 'core/str';\nimport {\n sourceTypeChecked,\n getFileName,\n setPropertiesFromData,\n showElements,\n stopMediaLoading,\n} from '../helpers';\nimport {EmbedHandler} from './embedhandler';\nimport {MediaBase} from '../mediabase';\nimport Notification from 'core/notification';\n\nexport class EmbedPreview extends MediaBase {\n\n selectorType = 'EMBED';\n\n isEmbedPreviewDeleted = false;\n\n constructor(data) {\n super();\n setPropertiesFromData(this, data); // Creates dynamic properties based on \"data\" param.\n }\n\n /**\n * Init the media details preview.\n */\n init = async() => {\n this.currentModal.setTitle(getString('mediadetails', component));\n sourceTypeChecked({\n source: this.mediaSource,\n root: this.root,\n urlSelector: Selectors.EMBED.elements.fromUrl,\n fileNameSelector: Selectors.EMBED.elements.fileNameLabel,\n });\n this.setMediaSourceAndPoster();\n this.registerMediaDetailsEventListeners(this.currentModal);\n };\n\n /**\n * Sets media source and thumbnail for the video.\n */\n setMediaSourceAndPoster = () => {\n const box = this.root.querySelector(Selectors.EMBED.elements.previewBox);\n const preview = this.root.querySelector(Selectors.EMBED.elements.preview);\n preview.src = this.mediaSource;\n preview.innerHTML = this.mediaSource;\n\n // Getting and setting up media title/name.\n if (['video', 'audio'].includes(this.mediaType)) {\n let fileName = getFileName(this.root); // Get original filename.\n if (this.isUpdating) {\n if (!this.isEmbedPreviewDeleted) {\n fileName = this.mediaTitle; // Title from the selected media.\n }\n }\n\n // Set the media name/title.\n this.root.querySelector(Selectors.EMBED.elements.title).value = fileName;\n }\n\n // Handle error when loading the media.\n preview.addEventListener('error', async() => {\n alert(\n await getString('medianotavailable', component),\n await getString('medianotavailabledesc', component, this.mediaSource)\n );\n\n // Stop the loader and display back the body template when failed to load the media.\n this.showBodyTemplate();\n\n (new EmbedHandler(this)).resetUploadForm();\n return;\n });\n\n if (this.mediaType === 'video') {\n let videoHeight = null;\n let videoWidth = null;\n const videoTag = document.querySelector(Selectors.EMBED.elements.videoTag);\n\n if (this.thumbnail) {\n videoTag.poster = this.thumbnail;\n }\n\n // Load the video html tag to load the media.\n videoTag.load();\n\n // Handle media metadata loading event.\n videoTag.addEventListener('loadedmetadata', () => {\n // Stop the loader and display back the body template when the media is loaded.\n this.showBodyTemplate();\n\n videoHeight = videoTag.videoHeight;\n videoWidth = videoTag.videoWidth;\n const widthProportion = (videoWidth - videoHeight);\n const isLandscape = widthProportion > 0;\n\n // Store dimensions of the raw video.\n this.mediaDimensions = {\n width: videoWidth,\n height: videoHeight,\n };\n\n // Set the media preview based on the media dimensions.\n if (isLandscape) {\n videoTag.width = box.offsetWidth;\n } else {\n videoTag.height = box.offsetHeight;\n }\n });\n\n // Handle media canplay event.\n videoTag.addEventListener('canplay', () => {\n const height = this.root.querySelector(Selectors.EMBED.elements.height);\n const width = this.root.querySelector(Selectors.EMBED.elements.width);\n\n if (height.value === '' && width.value === '') {\n height.value = videoHeight;\n width.value = videoWidth;\n }\n\n // Size checking and adjustment.\n if (videoHeight === parseInt(height.value) && videoWidth === parseInt(width.value)) {\n this.currentWidth = this.mediaDimensions.width;\n this.currentHeight = this.mediaDimensions.height;\n this.sizeChecked('original');\n } else {\n this.currentWidth = parseInt(width.value);\n this.currentHeight = parseInt(height.value);\n this.sizeChecked('custom');\n }\n });\n } else if (this.mediaType === 'audio') {\n const audioTag = this.root.querySelector(Selectors.EMBED.elements.audioTag);\n audioTag.load();\n\n // Handle media metadata loading event.\n audioTag.addEventListener('loadedmetadata', () => {\n // Stop the loader and display back the body template when the media is loaded.\n this.showBodyTemplate();\n });\n } else {\n // Stop the loader and display back the body template when the media is loaded.\n this.showBodyTemplate();\n\n // Set iframe width/height = box width/height.\n preview.width = box.offsetWidth;\n preview.height = box.offsetHeight;\n }\n };\n\n /**\n * Stop the loader and display back the body template.\n */\n showBodyTemplate = () => {\n stopMediaLoading(this.root, 'EMBED');\n showElements(Selectors.EMBED.elements.bodyTemplate, this.root);\n };\n\n /**\n * Deletes the media after confirming with the user and loads the insert media page.\n */\n deleteMedia = () => {\n Notification.deleteCancelPromise(\n getString('deletemedia', 'tiny_media'),\n getString('deletemediawarning', 'tiny_media'),\n ).then(() => {\n // Marked the preview was deleted.\n this.isEmbedPreviewDeleted = true;\n\n // Reset media upload form.\n (new EmbedHandler(this)).resetUploadForm();\n delete this.mediaData;\n return;\n }).catch(error => {\n window.console.log(error);\n });\n };\n\n /**\n * Only registers event listeners for new loaded elements in embed preview modal.\n */\n registerMediaDetailsEventListeners = async() => {\n // Handle media autoplay and mute.\n const autoPlay = this.root.querySelector(Selectors.EMBED.elements.mediaAutoplay);\n const mute = this.root.querySelector(Selectors.EMBED.elements.mediaMute);\n if (autoPlay && mute && this.mediaType === 'link') {\n autoPlay.addEventListener('change', () => {\n if (autoPlay.checked) {\n mute.checked = true;\n }\n });\n\n mute.addEventListener('change', () => {\n if (autoPlay.checked && !mute.checked) {\n autoPlay.checked = false;\n }\n });\n }\n\n // Handle the original size when selected.\n const sizeOriginalEle = this.root.querySelector(Selectors.EMBED.elements.sizeOriginal);\n if (sizeOriginalEle) {\n sizeOriginalEle.addEventListener('change', () => {\n this.sizeChecked('original');\n });\n }\n\n // Handle the custom size when selected.\n const sizeCustomEle = this.root.querySelector(Selectors.EMBED.elements.sizeCustom);\n if (sizeCustomEle) {\n sizeCustomEle.addEventListener('change', () => {\n this.sizeChecked('custom');\n });\n }\n\n // Handle the custom with size when inputted.\n const widthEle = this.root.querySelector(Selectors.EMBED.elements.width);\n if (widthEle) {\n widthEle.addEventListener('input', () => {\n // Avoid empty value.\n widthEle.value = widthEle.value === \"\" ? 0 : Number(widthEle.value);\n this.autoAdjustSize();\n });\n }\n\n // Handle the custom height size when inputted.\n const heightEle = this.root.querySelector(Selectors.EMBED.elements.height);\n if (heightEle) {\n heightEle.addEventListener('input', () => {\n // Avoid empty value.\n heightEle.value = heightEle.value === \"\" ? 0 : Number(heightEle.value);\n this.autoAdjustSize(true);\n });\n }\n\n // Handle media preview delete.\n const deleteMedia = this.root.querySelector(Selectors.EMBED.actions.deleteMedia);\n if (deleteMedia) {\n deleteMedia.addEventListener('click', () => {\n this.deleteMedia();\n });\n }\n };\n}\n"],"names":["EmbedPreview","MediaBase","constructor","data","async","currentModal","setTitle","component","source","this","mediaSource","root","urlSelector","Selectors","EMBED","elements","fromUrl","fileNameSelector","fileNameLabel","setMediaSourceAndPoster","registerMediaDetailsEventListeners","box","querySelector","previewBox","preview","src","innerHTML","includes","mediaType","fileName","isUpdating","isEmbedPreviewDeleted","mediaTitle","title","value","addEventListener","showBodyTemplate","EmbedHandler","resetUploadForm","videoHeight","videoWidth","videoTag","document","thumbnail","poster","load","isLandscape","mediaDimensions","width","height","offsetWidth","offsetHeight","parseInt","currentWidth","currentHeight","sizeChecked","audioTag","bodyTemplate","deleteCancelPromise","then","mediaData","catch","error","window","console","log","autoPlay","mediaAutoplay","mute","mediaMute","checked","sizeOriginalEle","sizeOriginal","sizeCustomEle","sizeCustom","widthEle","Number","autoAdjustSize","heightEle","deleteMedia","actions"],"mappings":"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"} \ No newline at end of file diff --git a/lib/editor/tiny/plugins/media/amd/build/selectors.min.js b/lib/editor/tiny/plugins/media/amd/build/selectors.min.js index 4f86319b07c..e1e9f1c3d7f 100644 --- a/lib/editor/tiny/plugins/media/amd/build/selectors.min.js +++ b/lib/editor/tiny/plugins/media/amd/build/selectors.min.js @@ -1,3 +1,3 @@ -define("tiny_media/selectors",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0;return _exports.default={IMAGE:{actions:{submit:".tiny_image_urlentrysubmit",imageBrowser:".openimagebrowser",addUrl:".tiny_image_addurl",deleteImage:".tiny_image_deleteicon"},elements:{form:"form.tiny_image_form",alignSettings:".tiny_image_button",alt:".tiny_image_altentry",altWarning:".tiny_image_altwarning",height:".tiny_image_heightentry",width:".tiny_image_widthentry",url:".tiny_image_urlentry",urlWarning:".tiny_image_urlwarning",size:".tiny_image_size",presentation:".tiny_image_presentation",constrain:".tiny_image_constrain",customStyle:".tiny_image_customstyle",preview:".tiny_image_preview",previewBox:".tiny_image_preview_box",loaderIcon:".tiny_image_loader",loaderIconContainer:".tiny_image_loader_container",insertImage:".tiny_image_insert_image",modalFooter:".modal-footer",dropzoneContainer:".tiny_image_dropzone_container",fileInput:"#tiny_image_fileinput",fileNameLabel:".tiny_image_filename",sizeOriginal:".tiny_image_sizeoriginal",sizeCustom:".tiny_image_sizecustom",properties:".tiny_image_properties"},styles:{responsive:"img-fluid"}},EMBED:{actions:{mediaBrowser:".openmediabrowser",addUrl:".tiny_media_add_url"},elements:{source:".tiny_media_source",track:".tiny_media_track",posterSource:".tiny_media_poster_source",title:".tiny_media_title_entry",url:".tiny_media_url_entry",width:".tiny_media_width_entry",height:".tiny_media_height_entry",trackSource:".tiny_media_track_source",trackLabel:".tiny_media_track_label_entry",trackLang:".tiny_media_track_lang_entry",trackDefault:".tiny_media_track_default",mediaControl:".tiny_media_controls",mediaAutoplay:".tiny_media_autoplay",mediaMute:".tiny_media_mute",mediaLoop:".tiny_media_loop",bodyTemplate:".tiny_media_body_template",footerTemplate:".tiny_media_footer_template",dropzoneContainer:".tiny_media_dropzone_container",fromUrl:".tiny_media_from_url_entry",urlWarning:".tiny_media_url_warning",loaderIcon:".tiny_media_loader",loaderIconContainer:".tiny_media_loader_container",insertMedia:".tiny_media_insert_media",modalFooter:".modal-footer",fileNameLabel:".tiny_media_filename",preview:".tiny_media_preview",previewBox:".tiny_media_preview_box",previewClass:".tiny_media_preview_tag",videoTag:"#video-tag",audioTag:"#audio-tag",sizeOriginal:".tiny_media_sizeoriginal",sizeCustom:".tiny_media_sizecustom",properties:".tiny_media_properties"},template:{body:{insertMediaBody:"tiny_media/embed/body/insert_media_body",mediaDetailsBody:"tiny_media/embed/body/media_details_body"},footer:{insertMediaFooter:"tiny_media/embed/footer/insert_media_footer",mediaDetailsFooter:"tiny_media/embed/footer/media_details_footer"}},mediaSites:{youtube:"www.youtube.com"},mediaTypes:["audio","video","link"]},MEDIA_MIME_TYPES:{aac:"audio",avi:"video",midi:"audio",mid:"audio",mp3:"audio",mp4:"video",xmpeg3:"audio",mpeg3:"audio",xmpeg:"video",mpeg:"video",oga:"audio",ogg:"audio",ogv:"video",opus:"audio",ts:"video",wav:"audio",weba:"audio",webm:"video","3gp":"video","3g2":"video"}},_exports.default})); +define("tiny_media/selectors",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0;return _exports.default={IMAGE:{actions:{submit:".tiny_image_urlentrysubmit",imageBrowser:".openimagebrowser",addUrl:".tiny_image_addurl",deleteImage:".tiny_image_deleteicon"},elements:{form:"form.tiny_image_form",alignSettings:".tiny_image_button",alt:".tiny_image_altentry",altWarning:".tiny_image_altwarning",height:".tiny_image_heightentry",width:".tiny_image_widthentry",url:".tiny_image_urlentry",urlWarning:".tiny_image_urlwarning",size:".tiny_image_size",presentation:".tiny_image_presentation",constrain:".tiny_image_constrain",customStyle:".tiny_image_customstyle",preview:".tiny_image_preview",previewBox:".tiny_image_preview_box",loaderIcon:".tiny_image_loader",loaderIconContainer:".tiny_image_loader_container",insertImage:".tiny_image_insert_image",modalFooter:".modal-footer",dropzoneContainer:".tiny_image_dropzone_container",fileInput:"#tiny_image_fileinput",fileNameLabel:".tiny_image_filename",sizeOriginal:".tiny_image_sizeoriginal",sizeCustom:".tiny_image_sizecustom",properties:".tiny_image_properties"},styles:{responsive:"img-fluid"}},EMBED:{actions:{mediaBrowser:".openmediabrowser",addUrl:".tiny_media_add_url",deleteMedia:".tiny_media_delete_icon"},elements:{source:".tiny_media_source",track:".tiny_media_track",posterSource:".tiny_media_poster_source",title:".tiny_media_title_entry",url:".tiny_media_url_entry",width:".tiny_media_width_entry",height:".tiny_media_height_entry",trackSource:".tiny_media_track_source",trackLabel:".tiny_media_track_label_entry",trackLang:".tiny_media_track_lang_entry",trackDefault:".tiny_media_track_default",mediaControl:".tiny_media_controls",mediaAutoplay:".tiny_media_autoplay",mediaMute:".tiny_media_mute",mediaLoop:".tiny_media_loop",bodyTemplate:".tiny_media_body_template",footerTemplate:".tiny_media_footer_template",dropzoneContainer:".tiny_media_dropzone_container",fromUrl:".tiny_media_from_url_entry",urlWarning:".tiny_media_url_warning",loaderIcon:".tiny_media_loader",loaderIconContainer:".tiny_media_loader_container",insertMedia:".tiny_media_insert_media",modalFooter:".modal-footer",fileNameLabel:".tiny_media_filename",preview:".tiny_media_preview",previewBox:".tiny_media_preview_box",previewClass:".tiny_media_preview_tag",videoTag:"#video-tag",audioTag:"#audio-tag",sizeOriginal:".tiny_media_sizeoriginal",sizeCustom:".tiny_media_sizecustom",properties:".tiny_media_properties"},template:{body:{insertMediaBody:"tiny_media/embed/body/insert_media_body",mediaDetailsBody:"tiny_media/embed/body/media_details_body"},footer:{insertMediaFooter:"tiny_media/embed/footer/insert_media_footer",mediaDetailsFooter:"tiny_media/embed/footer/media_details_footer"}},mediaSites:{youtube:"www.youtube.com"},mediaTypes:["audio","video","link"]},MEDIA_MIME_TYPES:{aac:"audio",avi:"video",midi:"audio",mid:"audio",mp3:"audio",mp4:"video",xmpeg3:"audio",mpeg3:"audio",xmpeg:"video",mpeg:"video",oga:"audio",ogg:"audio",ogv:"video",opus:"audio",ts:"video",wav:"audio",weba:"audio",webm:"video","3gp":"video","3g2":"video"}},_exports.default})); //# sourceMappingURL=selectors.min.js.map \ No newline at end of file diff --git a/lib/editor/tiny/plugins/media/amd/build/selectors.min.js.map b/lib/editor/tiny/plugins/media/amd/build/selectors.min.js.map index d9f63cacaae..3f193ddb0fa 100644 --- a/lib/editor/tiny/plugins/media/amd/build/selectors.min.js.map +++ b/lib/editor/tiny/plugins/media/amd/build/selectors.min.js.map @@ -1 +1 @@ -{"version":3,"file":"selectors.min.js","sources":["../src/selectors.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 helper function to build queryable data selectors.\n *\n * @module tiny_media/selectors\n * @copyright 2022 Huong Nguyen \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nexport default {\n IMAGE: {\n actions: {\n submit: '.tiny_image_urlentrysubmit',\n imageBrowser: '.openimagebrowser',\n addUrl: '.tiny_image_addurl',\n deleteImage: '.tiny_image_deleteicon',\n },\n elements: {\n form: 'form.tiny_image_form',\n alignSettings: '.tiny_image_button',\n alt: '.tiny_image_altentry',\n altWarning: '.tiny_image_altwarning',\n height: '.tiny_image_heightentry',\n width: '.tiny_image_widthentry',\n url: '.tiny_image_urlentry',\n urlWarning: '.tiny_image_urlwarning',\n size: '.tiny_image_size',\n presentation: '.tiny_image_presentation',\n constrain: '.tiny_image_constrain',\n customStyle: '.tiny_image_customstyle',\n preview: '.tiny_image_preview',\n previewBox: '.tiny_image_preview_box',\n loaderIcon: '.tiny_image_loader',\n loaderIconContainer: '.tiny_image_loader_container',\n insertImage: '.tiny_image_insert_image',\n modalFooter: '.modal-footer',\n dropzoneContainer: '.tiny_image_dropzone_container',\n fileInput: '#tiny_image_fileinput',\n fileNameLabel: '.tiny_image_filename',\n sizeOriginal: '.tiny_image_sizeoriginal',\n sizeCustom: '.tiny_image_sizecustom',\n properties: '.tiny_image_properties',\n },\n styles: {\n responsive: 'img-fluid',\n },\n },\n EMBED: {\n actions: {\n mediaBrowser: '.openmediabrowser',\n addUrl: '.tiny_media_add_url',\n },\n elements: {\n source: '.tiny_media_source',\n track: '.tiny_media_track',\n posterSource: '.tiny_media_poster_source',\n title: '.tiny_media_title_entry',\n url: '.tiny_media_url_entry',\n width: '.tiny_media_width_entry',\n height: '.tiny_media_height_entry',\n trackSource: '.tiny_media_track_source',\n trackLabel: '.tiny_media_track_label_entry',\n trackLang: '.tiny_media_track_lang_entry',\n trackDefault: '.tiny_media_track_default',\n mediaControl: '.tiny_media_controls',\n mediaAutoplay: '.tiny_media_autoplay',\n mediaMute: '.tiny_media_mute',\n mediaLoop: '.tiny_media_loop',\n bodyTemplate: '.tiny_media_body_template',\n footerTemplate: '.tiny_media_footer_template',\n dropzoneContainer: '.tiny_media_dropzone_container',\n fromUrl: '.tiny_media_from_url_entry',\n urlWarning: '.tiny_media_url_warning',\n loaderIcon: '.tiny_media_loader',\n loaderIconContainer: '.tiny_media_loader_container',\n insertMedia: '.tiny_media_insert_media',\n modalFooter: '.modal-footer',\n fileNameLabel: '.tiny_media_filename',\n preview: '.tiny_media_preview',\n previewBox: '.tiny_media_preview_box',\n previewClass: '.tiny_media_preview_tag',\n videoTag: '#video-tag',\n audioTag: '#audio-tag',\n sizeOriginal: '.tiny_media_sizeoriginal',\n sizeCustom: '.tiny_media_sizecustom',\n properties: '.tiny_media_properties',\n },\n template: {\n body: {\n insertMediaBody: 'tiny_media/embed/body/insert_media_body',\n mediaDetailsBody: 'tiny_media/embed/body/media_details_body',\n },\n footer: {\n insertMediaFooter: 'tiny_media/embed/footer/insert_media_footer',\n mediaDetailsFooter: 'tiny_media/embed/footer/media_details_footer',\n },\n },\n mediaSites: {\n youtube: 'www.youtube.com',\n },\n mediaTypes: ['audio', 'video', 'link'],\n },\n MEDIA_MIME_TYPES: {\n \"aac\": \"audio\", // Mime subtype = /aac.\n \"avi\": \"video\", // Mime subtype = /x-msvideo.\n \"midi\": \"audio\", // Mime subtype = /midi|x-midi.\n \"mid\": \"audio\", // Mime subtype = /midi|x-midi.\n \"mp3\": \"audio\", // Mime subtype = /mpeg.\n \"mp4\": \"video\", // Mime subtype = /mp4.\n \"xmpeg3\": \"audio\", // Mime subtype = /x-mpeg-3.\n \"mpeg3\": \"audio\", // Mime subtype = /mpeg3.\n \"xmpeg\": \"video\", // Mime subtype = /x-mpeg.\n \"mpeg\": \"video\", // Mime subtype = /mpeg.\n \"oga\": \"audio\", // Mime subtype = /ogg.\n \"ogg\": \"audio\", // Mime subtype = /ogg.\n \"ogv\": \"video\", // Mime subtype = /ogg.\n \"opus\": \"audio\", // Mime subtype = /opus.\n \"ts\": \"video\", // Mime subtype = /mp2t.\n \"wav\": \"audio\", // Mime subtype = /wav.\n \"weba\": \"audio\", // Mime subtype = /webm.\n \"webm\": \"video\", // Mime subtype = /webm.\n \"3gp\": \"video\", // Mime subtype = /3gpp.\n \"3g2\": \"video\", // Mime subtype = /3gpp2.\n },\n};\n"],"names":["IMAGE","actions","submit","imageBrowser","addUrl","deleteImage","elements","form","alignSettings","alt","altWarning","height","width","url","urlWarning","size","presentation","constrain","customStyle","preview","previewBox","loaderIcon","loaderIconContainer","insertImage","modalFooter","dropzoneContainer","fileInput","fileNameLabel","sizeOriginal","sizeCustom","properties","styles","responsive","EMBED","mediaBrowser","source","track","posterSource","title","trackSource","trackLabel","trackLang","trackDefault","mediaControl","mediaAutoplay","mediaMute","mediaLoop","bodyTemplate","footerTemplate","fromUrl","insertMedia","previewClass","videoTag","audioTag","template","body","insertMediaBody","mediaDetailsBody","footer","insertMediaFooter","mediaDetailsFooter","mediaSites","youtube","mediaTypes","MEDIA_MIME_TYPES"],"mappings":"sKAuBe,CACXA,MAAO,CACHC,QAAS,CACLC,OAAQ,6BACRC,aAAc,oBACdC,OAAQ,qBACRC,YAAa,0BAEjBC,SAAU,CACNC,KAAM,uBACNC,cAAe,qBACfC,IAAK,uBACLC,WAAY,yBACZC,OAAQ,0BACRC,MAAO,yBACPC,IAAK,uBACLC,WAAY,yBACZC,KAAM,mBACNC,aAAc,2BACdC,UAAW,wBACXC,YAAa,0BACbC,QAAS,sBACTC,WAAY,0BACZC,WAAY,qBACZC,oBAAqB,+BACrBC,YAAa,2BACbC,YAAa,gBACbC,kBAAmB,iCACnBC,UAAW,wBACXC,cAAe,uBACfC,aAAc,2BACdC,WAAY,yBACZC,WAAY,0BAEhBC,OAAQ,CACJC,WAAY,cAGpBC,MAAO,CACHhC,QAAS,CACLiC,aAAc,oBACd9B,OAAQ,uBAEZE,SAAU,CACN6B,OAAQ,qBACRC,MAAO,oBACPC,aAAc,4BACdC,MAAO,0BACPzB,IAAK,wBACLD,MAAO,0BACPD,OAAQ,2BACR4B,YAAa,2BACbC,WAAY,gCACZC,UAAW,+BACXC,aAAc,4BACdC,aAAc,uBACdC,cAAe,uBACfC,UAAW,mBACXC,UAAW,mBACXC,aAAc,4BACdC,eAAgB,8BAChBvB,kBAAmB,iCACnBwB,QAAS,6BACTnC,WAAY,0BACZO,WAAY,qBACZC,oBAAqB,+BACrB4B,YAAa,2BACb1B,YAAa,gBACbG,cAAe,uBACfR,QAAS,sBACTC,WAAY,0BACZ+B,aAAc,0BACdC,SAAU,aACVC,SAAU,aACVzB,aAAc,2BACdC,WAAY,yBACZC,WAAY,0BAEhBwB,SAAU,CACNC,KAAM,CACFC,gBAAiB,0CACjBC,iBAAkB,4CAEtBC,OAAQ,CACJC,kBAAmB,8CACnBC,mBAAoB,iDAG5BC,WAAY,CACRC,QAAS,mBAEbC,WAAY,CAAC,QAAS,QAAS,SAEnCC,iBAAkB,KACP,YACA,aACC,YACD,YACA,YACA,eACG,cACD,cACA,aACD,YACD,YACA,YACA,aACC,WACF,YACC,aACC,aACA,cACD,cACA"} \ No newline at end of file +{"version":3,"file":"selectors.min.js","sources":["../src/selectors.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 helper function to build queryable data selectors.\n *\n * @module tiny_media/selectors\n * @copyright 2022 Huong Nguyen \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nexport default {\n IMAGE: {\n actions: {\n submit: '.tiny_image_urlentrysubmit',\n imageBrowser: '.openimagebrowser',\n addUrl: '.tiny_image_addurl',\n deleteImage: '.tiny_image_deleteicon',\n },\n elements: {\n form: 'form.tiny_image_form',\n alignSettings: '.tiny_image_button',\n alt: '.tiny_image_altentry',\n altWarning: '.tiny_image_altwarning',\n height: '.tiny_image_heightentry',\n width: '.tiny_image_widthentry',\n url: '.tiny_image_urlentry',\n urlWarning: '.tiny_image_urlwarning',\n size: '.tiny_image_size',\n presentation: '.tiny_image_presentation',\n constrain: '.tiny_image_constrain',\n customStyle: '.tiny_image_customstyle',\n preview: '.tiny_image_preview',\n previewBox: '.tiny_image_preview_box',\n loaderIcon: '.tiny_image_loader',\n loaderIconContainer: '.tiny_image_loader_container',\n insertImage: '.tiny_image_insert_image',\n modalFooter: '.modal-footer',\n dropzoneContainer: '.tiny_image_dropzone_container',\n fileInput: '#tiny_image_fileinput',\n fileNameLabel: '.tiny_image_filename',\n sizeOriginal: '.tiny_image_sizeoriginal',\n sizeCustom: '.tiny_image_sizecustom',\n properties: '.tiny_image_properties',\n },\n styles: {\n responsive: 'img-fluid',\n },\n },\n EMBED: {\n actions: {\n mediaBrowser: '.openmediabrowser',\n addUrl: '.tiny_media_add_url',\n deleteMedia: '.tiny_media_delete_icon',\n },\n elements: {\n source: '.tiny_media_source',\n track: '.tiny_media_track',\n posterSource: '.tiny_media_poster_source',\n title: '.tiny_media_title_entry',\n url: '.tiny_media_url_entry',\n width: '.tiny_media_width_entry',\n height: '.tiny_media_height_entry',\n trackSource: '.tiny_media_track_source',\n trackLabel: '.tiny_media_track_label_entry',\n trackLang: '.tiny_media_track_lang_entry',\n trackDefault: '.tiny_media_track_default',\n mediaControl: '.tiny_media_controls',\n mediaAutoplay: '.tiny_media_autoplay',\n mediaMute: '.tiny_media_mute',\n mediaLoop: '.tiny_media_loop',\n bodyTemplate: '.tiny_media_body_template',\n footerTemplate: '.tiny_media_footer_template',\n dropzoneContainer: '.tiny_media_dropzone_container',\n fromUrl: '.tiny_media_from_url_entry',\n urlWarning: '.tiny_media_url_warning',\n loaderIcon: '.tiny_media_loader',\n loaderIconContainer: '.tiny_media_loader_container',\n insertMedia: '.tiny_media_insert_media',\n modalFooter: '.modal-footer',\n fileNameLabel: '.tiny_media_filename',\n preview: '.tiny_media_preview',\n previewBox: '.tiny_media_preview_box',\n previewClass: '.tiny_media_preview_tag',\n videoTag: '#video-tag',\n audioTag: '#audio-tag',\n sizeOriginal: '.tiny_media_sizeoriginal',\n sizeCustom: '.tiny_media_sizecustom',\n properties: '.tiny_media_properties',\n },\n template: {\n body: {\n insertMediaBody: 'tiny_media/embed/body/insert_media_body',\n mediaDetailsBody: 'tiny_media/embed/body/media_details_body',\n },\n footer: {\n insertMediaFooter: 'tiny_media/embed/footer/insert_media_footer',\n mediaDetailsFooter: 'tiny_media/embed/footer/media_details_footer',\n },\n },\n mediaSites: {\n youtube: 'www.youtube.com',\n },\n mediaTypes: ['audio', 'video', 'link'],\n },\n MEDIA_MIME_TYPES: {\n \"aac\": \"audio\", // Mime subtype = /aac.\n \"avi\": \"video\", // Mime subtype = /x-msvideo.\n \"midi\": \"audio\", // Mime subtype = /midi|x-midi.\n \"mid\": \"audio\", // Mime subtype = /midi|x-midi.\n \"mp3\": \"audio\", // Mime subtype = /mpeg.\n \"mp4\": \"video\", // Mime subtype = /mp4.\n \"xmpeg3\": \"audio\", // Mime subtype = /x-mpeg-3.\n \"mpeg3\": \"audio\", // Mime subtype = /mpeg3.\n \"xmpeg\": \"video\", // Mime subtype = /x-mpeg.\n \"mpeg\": \"video\", // Mime subtype = /mpeg.\n \"oga\": \"audio\", // Mime subtype = /ogg.\n \"ogg\": \"audio\", // Mime subtype = /ogg.\n \"ogv\": \"video\", // Mime subtype = /ogg.\n \"opus\": \"audio\", // Mime subtype = /opus.\n \"ts\": \"video\", // Mime subtype = /mp2t.\n \"wav\": \"audio\", // Mime subtype = /wav.\n \"weba\": \"audio\", // Mime subtype = /webm.\n \"webm\": \"video\", // Mime subtype = /webm.\n \"3gp\": \"video\", // Mime subtype = /3gpp.\n \"3g2\": \"video\", // Mime subtype = /3gpp2.\n },\n};\n"],"names":["IMAGE","actions","submit","imageBrowser","addUrl","deleteImage","elements","form","alignSettings","alt","altWarning","height","width","url","urlWarning","size","presentation","constrain","customStyle","preview","previewBox","loaderIcon","loaderIconContainer","insertImage","modalFooter","dropzoneContainer","fileInput","fileNameLabel","sizeOriginal","sizeCustom","properties","styles","responsive","EMBED","mediaBrowser","deleteMedia","source","track","posterSource","title","trackSource","trackLabel","trackLang","trackDefault","mediaControl","mediaAutoplay","mediaMute","mediaLoop","bodyTemplate","footerTemplate","fromUrl","insertMedia","previewClass","videoTag","audioTag","template","body","insertMediaBody","mediaDetailsBody","footer","insertMediaFooter","mediaDetailsFooter","mediaSites","youtube","mediaTypes","MEDIA_MIME_TYPES"],"mappings":"sKAuBe,CACXA,MAAO,CACHC,QAAS,CACLC,OAAQ,6BACRC,aAAc,oBACdC,OAAQ,qBACRC,YAAa,0BAEjBC,SAAU,CACNC,KAAM,uBACNC,cAAe,qBACfC,IAAK,uBACLC,WAAY,yBACZC,OAAQ,0BACRC,MAAO,yBACPC,IAAK,uBACLC,WAAY,yBACZC,KAAM,mBACNC,aAAc,2BACdC,UAAW,wBACXC,YAAa,0BACbC,QAAS,sBACTC,WAAY,0BACZC,WAAY,qBACZC,oBAAqB,+BACrBC,YAAa,2BACbC,YAAa,gBACbC,kBAAmB,iCACnBC,UAAW,wBACXC,cAAe,uBACfC,aAAc,2BACdC,WAAY,yBACZC,WAAY,0BAEhBC,OAAQ,CACJC,WAAY,cAGpBC,MAAO,CACHhC,QAAS,CACLiC,aAAc,oBACd9B,OAAQ,sBACR+B,YAAa,2BAEjB7B,SAAU,CACN8B,OAAQ,qBACRC,MAAO,oBACPC,aAAc,4BACdC,MAAO,0BACP1B,IAAK,wBACLD,MAAO,0BACPD,OAAQ,2BACR6B,YAAa,2BACbC,WAAY,gCACZC,UAAW,+BACXC,aAAc,4BACdC,aAAc,uBACdC,cAAe,uBACfC,UAAW,mBACXC,UAAW,mBACXC,aAAc,4BACdC,eAAgB,8BAChBxB,kBAAmB,iCACnByB,QAAS,6BACTpC,WAAY,0BACZO,WAAY,qBACZC,oBAAqB,+BACrB6B,YAAa,2BACb3B,YAAa,gBACbG,cAAe,uBACfR,QAAS,sBACTC,WAAY,0BACZgC,aAAc,0BACdC,SAAU,aACVC,SAAU,aACV1B,aAAc,2BACdC,WAAY,yBACZC,WAAY,0BAEhByB,SAAU,CACNC,KAAM,CACFC,gBAAiB,0CACjBC,iBAAkB,4CAEtBC,OAAQ,CACJC,kBAAmB,8CACnBC,mBAAoB,iDAG5BC,WAAY,CACRC,QAAS,mBAEbC,WAAY,CAAC,QAAS,QAAS,SAEnCC,iBAAkB,KACP,YACA,aACC,YACD,YACA,YACA,eACG,cACD,cACA,aACD,YACD,YACA,YACA,aACC,WACF,YACC,aACC,aACA,cACD,cACA"} \ No newline at end of file diff --git a/lib/editor/tiny/plugins/media/amd/src/embed/embedpreview.js b/lib/editor/tiny/plugins/media/amd/src/embed/embedpreview.js index 80629e9c289..173cc946b74 100644 --- a/lib/editor/tiny/plugins/media/amd/src/embed/embedpreview.js +++ b/lib/editor/tiny/plugins/media/amd/src/embed/embedpreview.js @@ -36,6 +36,7 @@ import { } from '../helpers'; import {EmbedHandler} from './embedhandler'; import {MediaBase} from '../mediabase'; +import Notification from 'core/notification'; export class EmbedPreview extends MediaBase { @@ -183,6 +184,26 @@ export class EmbedPreview extends MediaBase { showElements(Selectors.EMBED.elements.bodyTemplate, this.root); }; + /** + * Deletes the media after confirming with the user and loads the insert media page. + */ + deleteMedia = () => { + Notification.deleteCancelPromise( + getString('deletemedia', 'tiny_media'), + getString('deletemediawarning', 'tiny_media'), + ).then(() => { + // Marked the preview was deleted. + this.isEmbedPreviewDeleted = true; + + // Reset media upload form. + (new EmbedHandler(this)).resetUploadForm(); + delete this.mediaData; + return; + }).catch(error => { + window.console.log(error); + }); + }; + /** * Only registers event listeners for new loaded elements in embed preview modal. */ @@ -239,5 +260,13 @@ export class EmbedPreview extends MediaBase { this.autoAdjustSize(true); }); } + + // Handle media preview delete. + const deleteMedia = this.root.querySelector(Selectors.EMBED.actions.deleteMedia); + if (deleteMedia) { + deleteMedia.addEventListener('click', () => { + this.deleteMedia(); + }); + } }; } diff --git a/lib/editor/tiny/plugins/media/amd/src/selectors.js b/lib/editor/tiny/plugins/media/amd/src/selectors.js index 604a09eb19a..cff8239180a 100644 --- a/lib/editor/tiny/plugins/media/amd/src/selectors.js +++ b/lib/editor/tiny/plugins/media/amd/src/selectors.js @@ -63,6 +63,7 @@ export default { actions: { mediaBrowser: '.openmediabrowser', addUrl: '.tiny_media_add_url', + deleteMedia: '.tiny_media_delete_icon', }, elements: { source: '.tiny_media_source', diff --git a/lib/editor/tiny/plugins/media/lang/en/tiny_media.php b/lib/editor/tiny/plugins/media/lang/en/tiny_media.php index 5ccdaa0b78e..e2f3f72f516 100644 --- a/lib/editor/tiny/plugins/media/lang/en/tiny_media.php +++ b/lib/editor/tiny/plugins/media/lang/en/tiny_media.php @@ -46,6 +46,8 @@ $string['customsize_help'] = 'For best viewing experience, the video\'s width an $string['default'] = 'Default'; $string['deleteimage'] = 'Delete image'; $string['deleteimagewarning'] = 'Are you sure you want to remove the image?'; +$string['deletemedia'] = 'Delete media'; +$string['deletemediawarning'] = 'Are you sure you want to remove the media?'; $string['deleteselected'] = 'Delete selected files'; $string['descriptions_help'] = 'Audio descriptions may be used to provide a narration which explains visual details not apparent from the audio alone.'; $string['descriptions'] = 'Descriptions'; diff --git a/lib/editor/tiny/plugins/media/styles.css b/lib/editor/tiny/plugins/media/styles.css index 21ca51cdf65..a0d4f295915 100644 --- a/lib/editor/tiny/plugins/media/styles.css +++ b/lib/editor/tiny/plugins/media/styles.css @@ -61,7 +61,8 @@ iframe.mm_iframe { position: relative; } -.tiny_image_form .tiny_image_deleteicon { +.tiny_image_form .tiny_image_deleteicon, +.tiny_media_form .tiny_media_delete_icon { position: absolute; top: 5px; right: 5px; @@ -74,7 +75,8 @@ iframe.mm_iframe { padding: 4px 5px 5px 9px; } -.tiny_image_form .tiny_image_deleteicon .fa-trash { +.tiny_image_form .tiny_image_deleteicon .fa-trash, +.tiny_media_form .tiny_media_delete_icon .fa-trash { color: #1d2125; }