From 204aceb45932b323a981e55b16e2532d2863197e Mon Sep 17 00:00:00 2001 From: Markos Gogoulos Date: Mon, 27 Apr 2026 12:52:05 +0300 Subject: [PATCH] all --- .../dist/mediacms-moodle-v1.0.0.zip | Bin 175416 -> 176078 bytes .../tiny/mediacms/amd/build/commands.min.js | 2 +- .../mediacms/amd/build/commands.min.js.map | 2 +- .../tiny/mediacms/amd/src/commands.js | 30 +++++++++++++++--- 4 files changed, 28 insertions(+), 6 deletions(-) diff --git a/lms-plugins/mediacms-moodle/dist/mediacms-moodle-v1.0.0.zip b/lms-plugins/mediacms-moodle/dist/mediacms-moodle-v1.0.0.zip index c3a7b3872fd866c36444f849eb0718b1fa37c175..62a32b78b0002f52f36b61ed1f7e9168c3242762 100644 GIT binary patch delta 31566 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

G4 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.getSetup=void 0,_iframeembed=(obj=_iframeembed)&&obj.__esModule?obj:{default:obj};const isIframe=node=>"iframe"===node.nodeName.toLowerCase()||node.classList&&node.classList.contains("tiny-iframe-responsive")||node.classList&&node.classList.contains("tiny-mediacms-iframe-wrapper")||"a"===node.nodeName.toLowerCase()&&"true"===node.getAttribute("data-mediacms-textlink"),setupIframeOverlays=(editor,handleIframeAction)=>{const processIframes=()=>{const editorBody=editor.getBody();if(!editorBody)return;editorBody.querySelectorAll("iframe").forEach((iframe=>{var _iframe$parentElement;if(null!==(_iframe$parentElement=iframe.parentElement)&&void 0!==_iframe$parentElement&&_iframe$parentElement.classList.contains("tiny-mediacms-iframe-wrapper"))return;if(iframe.hasAttribute("data-mce-object")||iframe.hasAttribute("data-mce-placeholder"))return;const wrapper=editor.getDoc().createElement("div");wrapper.className="tiny-mediacms-iframe-wrapper",wrapper.setAttribute("contenteditable","false");const editBtn=editor.getDoc().createElement("button");editBtn.className="tiny-mediacms-edit-btn",editBtn.setAttribute("type","button"),editBtn.setAttribute("title","Edit media embed options"),editBtn.textContent="EDIT",iframe.parentNode.insertBefore(wrapper,iframe),wrapper.appendChild(iframe),wrapper.appendChild(editBtn)}))},handleOverlayClick=e=>{const editBtn=e.target.closest(".tiny-mediacms-edit-btn");if(!editBtn)return;e.preventDefault(),e.stopPropagation();const wrapper=editBtn.closest(".tiny-mediacms-iframe-wrapper");if(!wrapper)return;wrapper.querySelector("iframe")&&(editor.selection.select(wrapper),handleIframeAction())};editor.on("init",(()=>{(()=>{const editorDoc=editor.getDoc();if(!editorDoc)return;if(editorDoc.getElementById("tiny-mediacms-overlay-styles"))return;const style=editorDoc.createElement("style");style.id="tiny-mediacms-overlay-styles",style.textContent="\n .tiny-mediacms-iframe-wrapper {\n display: inline-block;\n position: relative;\n line-height: 0;\n vertical-align: top;\n margin-top: 40px;\n }\n .tiny-mediacms-iframe-wrapper iframe {\n display: block;\n }\n .tiny-mediacms-edit-btn {\n position: absolute;\n top: -30px;\n left: 50%;\n transform: translateX(-50%);\n background: rgba(0, 0, 0, 0.7);\n color: #ffffff;\n border: none;\n border-radius: 3px;\n cursor: pointer;\n z-index: 10;\n padding: 4px 12px;\n margin: 0;\n font-size: 12px;\n font-weight: bold;\n text-decoration: none;\n box-shadow: 0 2px 4px rgba(0,0,0,0.3);\n transition: background 0.15s, box-shadow 0.15s;\n display: inline-block;\n box-sizing: border-box;\n }\n .tiny-mediacms-edit-btn:hover {\n background: rgba(0, 0, 0, 0.85);\n box-shadow: 0 3px 6px rgba(0,0,0,0.4);\n }\n ",editorDoc.head.appendChild(style)})(),processIframes(),editor.getBody().addEventListener("click",handleOverlayClick)})),editor.on("SetContent",(()=>{processIframes()})),editor.on("PastePostProcess",(()=>{setTimeout(processIframes,100)})),editor.on("Undo Redo",(()=>{processIframes()})),editor.on("Change",(()=>{setTimeout(processIframes,50)})),editor.on("NodeChange",(()=>{processIframes()}))};_exports.getSetup=async()=>{const[iframeButtonText]=await(0,_str.getStrings)(["iframebuttontitle"].map((key=>({key:key,component:_common.component})))),[iframeButtonImage]=await Promise.all([(0,_utils.getButtonImage)("icon",_common.component)]);return editor=>{((editor,iframeButtonText,iframeButtonImage)=>{const handleIframeAction=()=>{new _iframeembed.default(editor).displayDialogue()};editor.ui.registry.addIcon(_common.iframeIcon,iframeButtonImage.html),editor.ui.registry.addToggleButton(_common.iframeButtonName,{icon:_common.iframeIcon,tooltip:iframeButtonText,onAction:handleIframeAction,onSetup:api=>{const selector=["iframe:not([data-mce-object]):not([data-mce-placeholder])",".tiny-iframe-responsive",".tiny-mediacms-iframe-wrapper",'a[data-mediacms-textlink="true"]'].join(",");return editor.selection.selectorChangedWithUnbind(selector,api.setActive).unbind}}),editor.ui.registry.addMenuItem(_common.iframeMenuItemName,{icon:_common.iframeIcon,text:iframeButtonText,onAction:handleIframeAction}),editor.ui.registry.addContextToolbar(_common.iframeButtonName,{predicate:isIframe,items:_common.iframeButtonName,position:"node",scope:"node"}),editor.ui.registry.addContextMenu(_common.iframeButtonName,{update:isIframe}),setupIframeOverlays(editor,handleIframeAction)})(editor,iframeButtonText,iframeButtonImage)}}})); + */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.getSetup=void 0,_iframeembed=(obj=_iframeembed)&&obj.__esModule?obj:{default:obj};const isIframe=node=>"iframe"===node.nodeName.toLowerCase()||node.classList&&node.classList.contains("tiny-iframe-responsive")||node.classList&&node.classList.contains("tiny-mediacms-iframe-wrapper")||"a"===node.nodeName.toLowerCase()&&"true"===node.getAttribute("data-mediacms-textlink"),setupIframeOverlays=(editor,handleIframeAction)=>{const processIframes=()=>{const editorBody=editor.getBody();if(!editorBody)return;editorBody.querySelectorAll("iframe").forEach((iframe=>{var _iframe$parentElement;if(null!==(_iframe$parentElement=iframe.parentElement)&&void 0!==_iframe$parentElement&&_iframe$parentElement.classList.contains("tiny-mediacms-iframe-wrapper"))return;if(iframe.hasAttribute("data-mce-object")||iframe.hasAttribute("data-mce-placeholder"))return;const wrapper=editor.getDoc().createElement("div");wrapper.className="tiny-mediacms-iframe-wrapper",wrapper.setAttribute("contenteditable","false");const editBtn=editor.getDoc().createElement("button");editBtn.className="tiny-mediacms-edit-btn",editBtn.setAttribute("type","button"),editBtn.setAttribute("title","Edit media embed options"),editBtn.textContent="EDIT",iframe.parentNode.insertBefore(wrapper,iframe),wrapper.appendChild(iframe),wrapper.appendChild(editBtn)})),(()=>{const editorBody=editor.getBody();editorBody&&editorBody.querySelectorAll(".tiny-mediacms-iframe-wrapper").forEach((wrapper=>{const iframe=wrapper.querySelector("iframe");if(!iframe)return;const match=(iframe.getAttribute("style")||"").match(/max-width:\s*(\d+(?:\.\d+)?)px/);match&&(wrapper.style.maxWidth=match[1]+"px",wrapper.style.width="100%",wrapper.style.margin="0 auto")}))})()},handleOverlayClick=e=>{const editBtn=e.target.closest(".tiny-mediacms-edit-btn");if(!editBtn)return;e.preventDefault(),e.stopPropagation();const wrapper=editBtn.closest(".tiny-mediacms-iframe-wrapper");if(!wrapper)return;wrapper.querySelector("iframe")&&(editor.selection.select(wrapper),handleIframeAction())};editor.on("init",(()=>{(()=>{const editorDoc=editor.getDoc();if(!editorDoc)return;if(editorDoc.getElementById("tiny-mediacms-overlay-styles"))return;const style=editorDoc.createElement("style");style.id="tiny-mediacms-overlay-styles",style.textContent="\n .tiny-mediacms-iframe-wrapper {\n display: inline-block;\n position: relative;\n line-height: 0;\n vertical-align: top;\n margin-top: 50px;\n }\n .tiny-mediacms-iframe-wrapper iframe {\n display: block;\n }\n .tiny-mediacms-edit-btn {\n position: absolute;\n top: -44px;\n left: 50%;\n transform: translateX(-50%);\n background: rgba(0, 0, 0, 0.7);\n color: #ffffff;\n border: none;\n border-radius: 3px;\n cursor: pointer;\n z-index: 10;\n padding: 8px 20px;\n margin: 0;\n font-size: 14px;\n font-weight: bold;\n text-decoration: none;\n box-shadow: 0 2px 4px rgba(0,0,0,0.3);\n transition: background 0.15s, box-shadow 0.15s;\n display: inline-block;\n box-sizing: border-box;\n }\n .tiny-mediacms-edit-btn:hover {\n background: rgba(0, 0, 0, 0.85);\n box-shadow: 0 3px 6px rgba(0,0,0,0.4);\n }\n ",editorDoc.head.appendChild(style)})(),processIframes(),editor.getBody().addEventListener("click",handleOverlayClick)})),editor.on("SetContent",(()=>{processIframes()})),editor.on("PastePostProcess",(()=>{setTimeout(processIframes,100)})),editor.on("Undo Redo",(()=>{processIframes()})),editor.on("Change",(()=>{setTimeout(processIframes,50)})),editor.on("NodeChange",(()=>{processIframes()}))};_exports.getSetup=async()=>{const[iframeButtonText]=await(0,_str.getStrings)(["iframebuttontitle"].map((key=>({key:key,component:_common.component})))),[iframeButtonImage]=await Promise.all([(0,_utils.getButtonImage)("icon",_common.component)]);return editor=>{((editor,iframeButtonText,iframeButtonImage)=>{const handleIframeAction=()=>{new _iframeembed.default(editor).displayDialogue()};editor.ui.registry.addIcon(_common.iframeIcon,iframeButtonImage.html),editor.ui.registry.addToggleButton(_common.iframeButtonName,{icon:_common.iframeIcon,tooltip:iframeButtonText,onAction:handleIframeAction,onSetup:api=>{const selector=["iframe:not([data-mce-object]):not([data-mce-placeholder])",".tiny-iframe-responsive",".tiny-mediacms-iframe-wrapper",'a[data-mediacms-textlink="true"]'].join(",");return editor.selection.selectorChangedWithUnbind(selector,api.setActive).unbind}}),editor.ui.registry.addMenuItem(_common.iframeMenuItemName,{icon:_common.iframeIcon,text:iframeButtonText,onAction:handleIframeAction}),editor.ui.registry.addContextToolbar(_common.iframeButtonName,{predicate:isIframe,items:_common.iframeButtonName,position:"node",scope:"node"}),editor.ui.registry.addContextMenu(_common.iframeButtonName,{update:isIframe}),setupIframeOverlays(editor,handleIframeAction)})(editor,iframeButtonText,iframeButtonImage)}}})); //# sourceMappingURL=commands.min.js.map \ No newline at end of file diff --git a/lms-plugins/mediacms-moodle/tiny/mediacms/amd/build/commands.min.js.map b/lms-plugins/mediacms-moodle/tiny/mediacms/amd/build/commands.min.js.map index af306533..6145352c 100755 --- a/lms-plugins/mediacms-moodle/tiny/mediacms/amd/build/commands.min.js.map +++ b/lms-plugins/mediacms-moodle/tiny/mediacms/amd/build/commands.min.js.map @@ -1 +1 @@ -{"version":3,"file":"commands.min.js","sources":["../src/commands.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 commands.\n *\n * @module tiny_mediacms/commands\n * @copyright 2022 Huong Nguyen \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport {getStrings} from 'core/str';\nimport {\n component,\n iframeButtonName,\n iframeMenuItemName,\n iframeIcon,\n} from './common';\nimport IframeEmbed from './iframeembed';\nimport {getButtonImage} from 'editor_tiny/utils';\n\nconst isIframe = (node) => node.nodeName.toLowerCase() === 'iframe' ||\n (node.classList && node.classList.contains('tiny-iframe-responsive')) ||\n (node.classList && node.classList.contains('tiny-mediacms-iframe-wrapper')) ||\n (node.nodeName.toLowerCase() === 'a' && node.getAttribute('data-mediacms-textlink') === 'true');\n\n/**\n * Wrap iframes with overlay containers that allow hover detection.\n * Since iframes capture mouse events, we add an invisible overlay on top\n * that shows the edit button on hover.\n *\n * @param {TinyMCE} editor - The editor instance\n * @param {Function} handleIframeAction - The action to perform when clicking the button\n */\nconst setupIframeOverlays = (editor, handleIframeAction) => {\n /**\n * Process all iframes in the editor and add overlay wrappers.\n */\n const processIframes = () => {\n const editorBody = editor.getBody();\n if (!editorBody) {\n return;\n }\n\n const iframes = editorBody.querySelectorAll('iframe');\n iframes.forEach((iframe) => {\n // Skip if already wrapped\n if (iframe.parentElement?.classList.contains('tiny-mediacms-iframe-wrapper')) {\n return;\n }\n\n // Skip TinyMCE internal iframes\n if (iframe.hasAttribute('data-mce-object') || iframe.hasAttribute('data-mce-placeholder')) {\n return;\n }\n\n // Create wrapper div\n const wrapper = editor.getDoc().createElement('div');\n wrapper.className = 'tiny-mediacms-iframe-wrapper';\n wrapper.setAttribute('contenteditable', 'false');\n\n // Create edit button (positioned inside wrapper, over the iframe)\n const editBtn = editor.getDoc().createElement('button');\n editBtn.className = 'tiny-mediacms-edit-btn';\n editBtn.setAttribute('type', 'button');\n editBtn.setAttribute('title', 'Edit media embed options');\n // Use text \"EDIT\" instead of icon\n editBtn.textContent = 'EDIT';\n\n // Wrap the iframe: insert wrapper, move iframe into it, add button\n iframe.parentNode.insertBefore(wrapper, iframe);\n wrapper.appendChild(iframe);\n wrapper.appendChild(editBtn);\n });\n };\n\n /**\n * Add CSS styles for hover effects to the editor's document.\n */\n const addStyles = () => {\n const editorDoc = editor.getDoc();\n if (!editorDoc) {\n return;\n }\n\n // Check if styles already added\n if (editorDoc.getElementById('tiny-mediacms-overlay-styles')) {\n return;\n }\n\n const style = editorDoc.createElement('style');\n style.id = 'tiny-mediacms-overlay-styles';\n style.textContent = `\n .tiny-mediacms-iframe-wrapper {\n display: inline-block;\n position: relative;\n line-height: 0;\n vertical-align: top;\n margin-top: 40px;\n }\n .tiny-mediacms-iframe-wrapper iframe {\n display: block;\n }\n .tiny-mediacms-edit-btn {\n position: absolute;\n top: -30px;\n left: 50%;\n transform: translateX(-50%);\n background: rgba(0, 0, 0, 0.7);\n color: #ffffff;\n border: none;\n border-radius: 3px;\n cursor: pointer;\n z-index: 10;\n padding: 4px 12px;\n margin: 0;\n font-size: 12px;\n font-weight: bold;\n text-decoration: none;\n box-shadow: 0 2px 4px rgba(0,0,0,0.3);\n transition: background 0.15s, box-shadow 0.15s;\n display: inline-block;\n box-sizing: border-box;\n }\n .tiny-mediacms-edit-btn:hover {\n background: rgba(0, 0, 0, 0.85);\n box-shadow: 0 3px 6px rgba(0,0,0,0.4);\n }\n `;\n editorDoc.head.appendChild(style);\n };\n\n /**\n * Handle click on the edit button.\n *\n * @param {Event} e - The click event\n */\n const handleOverlayClick = (e) => {\n const target = e.target;\n\n // Check if clicked on edit button or its child (svg/path)\n const editBtn = target.closest('.tiny-mediacms-edit-btn');\n if (!editBtn) {\n return;\n }\n\n e.preventDefault();\n e.stopPropagation();\n\n // Find the associated wrapper and iframe\n const wrapper = editBtn.closest('.tiny-mediacms-iframe-wrapper');\n if (!wrapper) {\n return;\n }\n\n const iframe = wrapper.querySelector('iframe');\n if (!iframe) {\n return;\n }\n\n // Select the wrapper so TinyMCE knows which element is selected\n editor.selection.select(wrapper);\n\n // Open the edit dialog\n handleIframeAction();\n };\n\n // Setup on editor init\n editor.on('init', () => {\n addStyles();\n processIframes();\n\n // Handle clicks on the overlay\n editor.getBody().addEventListener('click', handleOverlayClick);\n });\n\n // Re-process when content changes\n editor.on('SetContent', () => {\n processIframes();\n });\n\n // Re-process when content is pasted\n editor.on('PastePostProcess', () => {\n setTimeout(processIframes, 100);\n });\n\n // Re-process after undo/redo\n editor.on('Undo Redo', () => {\n processIframes();\n });\n\n // Re-process on any content change (covers modal updates)\n editor.on('Change', () => {\n setTimeout(processIframes, 50);\n });\n\n // Re-process when node changes (selection changes)\n editor.on('NodeChange', () => {\n processIframes();\n });\n};\n\nconst registerIframeCommand = (editor, iframeButtonText, iframeButtonImage) => {\n const handleIframeAction = () => {\n const iframeEmbed = new IframeEmbed(editor);\n iframeEmbed.displayDialogue();\n };\n\n // Register the iframe icon\n editor.ui.registry.addIcon(iframeIcon, iframeButtonImage.html);\n\n // Register the Menu Button as a toggle.\n // This means that when highlighted over an existing iframe element it will show as toggled on.\n editor.ui.registry.addToggleButton(iframeButtonName, {\n icon: iframeIcon,\n tooltip: iframeButtonText,\n onAction: handleIframeAction,\n onSetup: api => {\n const selector = [\n 'iframe:not([data-mce-object]):not([data-mce-placeholder])',\n '.tiny-iframe-responsive',\n '.tiny-mediacms-iframe-wrapper',\n 'a[data-mediacms-textlink=\"true\"]'\n ].join(',');\n return editor.selection.selectorChangedWithUnbind(\n selector,\n api.setActive\n ).unbind;\n }\n });\n\n editor.ui.registry.addMenuItem(iframeMenuItemName, {\n icon: iframeIcon,\n text: iframeButtonText,\n onAction: handleIframeAction,\n });\n\n editor.ui.registry.addContextToolbar(iframeButtonName, {\n predicate: isIframe,\n items: iframeButtonName,\n position: 'node',\n scope: 'node'\n });\n\n editor.ui.registry.addContextMenu(iframeButtonName, {\n update: isIframe,\n });\n\n // Setup iframe overlays with edit button on hover\n setupIframeOverlays(editor, handleIframeAction);\n};\n\nexport const getSetup = async() => {\n const [\n iframeButtonText,\n ] = await getStrings([\n 'iframebuttontitle',\n ].map((key) => ({key, component})));\n\n const [\n iframeButtonImage,\n ] = await Promise.all([\n getButtonImage('icon', component),\n ]);\n\n // Note: The function returned here must be synchronous and cannot use promises.\n // All promises must be resolved prior to returning the function.\n return (editor) => {\n registerIframeCommand(editor, iframeButtonText, iframeButtonImage);\n };\n};\n"],"names":["isIframe","node","nodeName","toLowerCase","classList","contains","getAttribute","setupIframeOverlays","editor","handleIframeAction","processIframes","editorBody","getBody","querySelectorAll","forEach","iframe","parentElement","_iframe$parentElement","hasAttribute","wrapper","getDoc","createElement","className","setAttribute","editBtn","textContent","parentNode","insertBefore","appendChild","handleOverlayClick","e","target","closest","preventDefault","stopPropagation","querySelector","selection","select","on","editorDoc","getElementById","style","id","head","addStyles","addEventListener","setTimeout","async","iframeButtonText","map","key","component","iframeButtonImage","Promise","all","IframeEmbed","displayDialogue","ui","registry","addIcon","iframeIcon","html","addToggleButton","iframeButtonName","icon","tooltip","onAction","onSetup","api","selector","join","selectorChangedWithUnbind","setActive","unbind","addMenuItem","iframeMenuItemName","text","addContextToolbar","predicate","items","position","scope","addContextMenu","update","registerIframeCommand"],"mappings":";;;;;;;8JAiCMA,SAAYC,MAAyC,WAAhCA,KAAKC,SAASC,eACpCF,KAAKG,WAAaH,KAAKG,UAAUC,SAAS,2BAC1CJ,KAAKG,WAAaH,KAAKG,UAAUC,SAAS,iCACV,MAAhCJ,KAAKC,SAASC,eAAyE,SAAhDF,KAAKK,aAAa,0BAUxDC,oBAAsB,CAACC,OAAQC,4BAI3BC,eAAiB,WACbC,WAAaH,OAAOI,cACrBD,kBAIWA,WAAWE,iBAAiB,UACpCC,SAASC,oEAETA,OAAOC,gDAAPC,sBAAsBb,UAAUC,SAAS,0CAKzCU,OAAOG,aAAa,oBAAsBH,OAAOG,aAAa,qCAK5DC,QAAUX,OAAOY,SAASC,cAAc,OAC9CF,QAAQG,UAAY,+BACpBH,QAAQI,aAAa,kBAAmB,eAGlCC,QAAUhB,OAAOY,SAASC,cAAc,UAC9CG,QAAQF,UAAY,yBACpBE,QAAQD,aAAa,OAAQ,UAC7BC,QAAQD,aAAa,QAAS,4BAE9BC,QAAQC,YAAc,OAGtBV,OAAOW,WAAWC,aAAaR,QAASJ,QACxCI,QAAQS,YAAYb,QACpBI,QAAQS,YAAYJ,aAiEtBK,mBAAsBC,UAIlBN,QAHSM,EAAEC,OAGMC,QAAQ,+BAC1BR,eAILM,EAAEG,iBACFH,EAAEI,wBAGIf,QAAUK,QAAQQ,QAAQ,qCAC3Bb,eAIUA,QAAQgB,cAAc,YAMrC3B,OAAO4B,UAAUC,OAAOlB,SAGxBV,uBAIJD,OAAO8B,GAAG,QAAQ,KAzFA,YACRC,UAAY/B,OAAOY,aACpBmB,oBAKDA,UAAUC,eAAe,6CAIvBC,MAAQF,UAAUlB,cAAc,SACtCoB,MAAMC,GAAK,+BACXD,MAAMhB,syCAqCNc,UAAUI,KAAKf,YAAYa,QAwC3BG,GACAlC,iBAGAF,OAAOI,UAAUiC,iBAAiB,QAAShB,uBAI/CrB,OAAO8B,GAAG,cAAc,KACpB5B,oBAIJF,OAAO8B,GAAG,oBAAoB,KAC1BQ,WAAWpC,eAAgB,QAI/BF,OAAO8B,GAAG,aAAa,KACnB5B,oBAIJF,OAAO8B,GAAG,UAAU,KAChBQ,WAAWpC,eAAgB,OAI/BF,OAAO8B,GAAG,cAAc,KACpB5B,uCAsDgBqC,gBAEhBC,wBACM,mBAAW,CACjB,qBACFC,KAAKC,OAAUA,IAAAA,IAAKC,UAAAA,wBAGlBC,yBACMC,QAAQC,IAAI,EAClB,yBAAe,OAAQH,4BAKnB3C,SAjEkB,EAACA,OAAQwC,iBAAkBI,2BAC/C3C,mBAAqB,KACH,IAAI8C,qBAAY/C,QACxBgD,mBAIhBhD,OAAOiD,GAAGC,SAASC,QAAQC,mBAAYR,kBAAkBS,MAIzDrD,OAAOiD,GAAGC,SAASI,gBAAgBC,yBAAkB,CACjDC,KAAMJ,mBACNK,QAASjB,iBACTkB,SAAUzD,mBACV0D,QAASC,YACCC,SAAW,CACb,4DACA,0BACA,gCACA,oCACFC,KAAK,YACA9D,OAAO4B,UAAUmC,0BACpBF,SACAD,IAAII,WACNC,UAIVjE,OAAOiD,GAAGC,SAASgB,YAAYC,2BAAoB,CAC/CX,KAAMJ,mBACNgB,KAAM5B,iBACNkB,SAAUzD,qBAGdD,OAAOiD,GAAGC,SAASmB,kBAAkBd,yBAAkB,CACnDe,UAAW9E,SACX+E,MAAOhB,yBACPiB,SAAU,OACVC,MAAO,SAGXzE,OAAOiD,GAAGC,SAASwB,eAAenB,yBAAkB,CAChDoB,OAAQnF,WAIZO,oBAAoBC,OAAQC,qBAmBxB2E,CAAsB5E,OAAQwC,iBAAkBI"} \ No newline at end of file +{"version":3,"file":"commands.min.js","sources":["../src/commands.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 commands.\n *\n * @module tiny_mediacms/commands\n * @copyright 2022 Huong Nguyen \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport {getStrings} from 'core/str';\nimport {\n component,\n iframeButtonName,\n iframeMenuItemName,\n iframeIcon,\n} from './common';\nimport IframeEmbed from './iframeembed';\nimport {getButtonImage} from 'editor_tiny/utils';\n\nconst isIframe = (node) => node.nodeName.toLowerCase() === 'iframe' ||\n (node.classList && node.classList.contains('tiny-iframe-responsive')) ||\n (node.classList && node.classList.contains('tiny-mediacms-iframe-wrapper')) ||\n (node.nodeName.toLowerCase() === 'a' && node.getAttribute('data-mediacms-textlink') === 'true');\n\n/**\n * Wrap iframes with overlay containers that allow hover detection.\n * Since iframes capture mouse events, we add an invisible overlay on top\n * that shows the edit button on hover.\n *\n * @param {TinyMCE} editor - The editor instance\n * @param {Function} handleIframeAction - The action to perform when clicking the button\n */\nconst setupIframeOverlays = (editor, handleIframeAction) => {\n /**\n * Process all iframes in the editor and add overlay wrappers.\n */\n const fixWrapperWidths = () => {\n const editorBody = editor.getBody();\n if (!editorBody) {\n return;\n }\n editorBody.querySelectorAll('.tiny-mediacms-iframe-wrapper').forEach((wrapper) => {\n const iframe = wrapper.querySelector('iframe');\n if (!iframe) {\n return;\n }\n const iframeStyle = iframe.getAttribute('style') || '';\n const match = iframeStyle.match(/max-width:\\s*(\\d+(?:\\.\\d+)?)px/);\n if (match) {\n wrapper.style.maxWidth = match[1] + 'px';\n wrapper.style.width = '100%';\n wrapper.style.margin = '0 auto';\n }\n });\n };\n\n const processIframes = () => {\n const editorBody = editor.getBody();\n if (!editorBody) {\n return;\n }\n\n const iframes = editorBody.querySelectorAll('iframe');\n iframes.forEach((iframe) => {\n // Skip if already wrapped\n if (iframe.parentElement?.classList.contains('tiny-mediacms-iframe-wrapper')) {\n return;\n }\n\n // Skip TinyMCE internal iframes\n if (iframe.hasAttribute('data-mce-object') || iframe.hasAttribute('data-mce-placeholder')) {\n return;\n }\n\n // Create wrapper div\n const wrapper = editor.getDoc().createElement('div');\n wrapper.className = 'tiny-mediacms-iframe-wrapper';\n wrapper.setAttribute('contenteditable', 'false');\n\n // Create edit button (positioned inside wrapper, over the iframe)\n const editBtn = editor.getDoc().createElement('button');\n editBtn.className = 'tiny-mediacms-edit-btn';\n editBtn.setAttribute('type', 'button');\n editBtn.setAttribute('title', 'Edit media embed options');\n // Use text \"EDIT\" instead of icon\n editBtn.textContent = 'EDIT';\n\n // Wrap the iframe: insert wrapper, move iframe into it, add button\n iframe.parentNode.insertBefore(wrapper, iframe);\n wrapper.appendChild(iframe);\n wrapper.appendChild(editBtn);\n });\n\n fixWrapperWidths();\n };\n\n /**\n * Add CSS styles for hover effects to the editor's document.\n */\n const addStyles = () => {\n const editorDoc = editor.getDoc();\n if (!editorDoc) {\n return;\n }\n\n // Check if styles already added\n if (editorDoc.getElementById('tiny-mediacms-overlay-styles')) {\n return;\n }\n\n const style = editorDoc.createElement('style');\n style.id = 'tiny-mediacms-overlay-styles';\n style.textContent = `\n .tiny-mediacms-iframe-wrapper {\n display: inline-block;\n position: relative;\n line-height: 0;\n vertical-align: top;\n margin-top: 50px;\n }\n .tiny-mediacms-iframe-wrapper iframe {\n display: block;\n }\n .tiny-mediacms-edit-btn {\n position: absolute;\n top: -44px;\n left: 50%;\n transform: translateX(-50%);\n background: rgba(0, 0, 0, 0.7);\n color: #ffffff;\n border: none;\n border-radius: 3px;\n cursor: pointer;\n z-index: 10;\n padding: 8px 20px;\n margin: 0;\n font-size: 14px;\n font-weight: bold;\n text-decoration: none;\n box-shadow: 0 2px 4px rgba(0,0,0,0.3);\n transition: background 0.15s, box-shadow 0.15s;\n display: inline-block;\n box-sizing: border-box;\n }\n .tiny-mediacms-edit-btn:hover {\n background: rgba(0, 0, 0, 0.85);\n box-shadow: 0 3px 6px rgba(0,0,0,0.4);\n }\n `;\n editorDoc.head.appendChild(style);\n };\n\n /**\n * Handle click on the edit button.\n *\n * @param {Event} e - The click event\n */\n const handleOverlayClick = (e) => {\n const target = e.target;\n\n // Check if clicked on edit button or its child (svg/path)\n const editBtn = target.closest('.tiny-mediacms-edit-btn');\n if (!editBtn) {\n return;\n }\n\n e.preventDefault();\n e.stopPropagation();\n\n // Find the associated wrapper and iframe\n const wrapper = editBtn.closest('.tiny-mediacms-iframe-wrapper');\n if (!wrapper) {\n return;\n }\n\n const iframe = wrapper.querySelector('iframe');\n if (!iframe) {\n return;\n }\n\n // Select the wrapper so TinyMCE knows which element is selected\n editor.selection.select(wrapper);\n\n // Open the edit dialog\n handleIframeAction();\n };\n\n // Setup on editor init\n editor.on('init', () => {\n addStyles();\n processIframes();\n\n // Handle clicks on the overlay\n editor.getBody().addEventListener('click', handleOverlayClick);\n });\n\n // Re-process when content changes\n editor.on('SetContent', () => {\n processIframes();\n });\n\n // Re-process when content is pasted\n editor.on('PastePostProcess', () => {\n setTimeout(processIframes, 100);\n });\n\n // Re-process after undo/redo\n editor.on('Undo Redo', () => {\n processIframes();\n });\n\n // Re-process on any content change (covers modal updates)\n editor.on('Change', () => {\n setTimeout(processIframes, 50);\n });\n\n // Re-process when node changes (selection changes)\n editor.on('NodeChange', () => {\n processIframes();\n });\n};\n\nconst registerIframeCommand = (editor, iframeButtonText, iframeButtonImage) => {\n const handleIframeAction = () => {\n const iframeEmbed = new IframeEmbed(editor);\n iframeEmbed.displayDialogue();\n };\n\n // Register the iframe icon\n editor.ui.registry.addIcon(iframeIcon, iframeButtonImage.html);\n\n // Register the Menu Button as a toggle.\n // This means that when highlighted over an existing iframe element it will show as toggled on.\n editor.ui.registry.addToggleButton(iframeButtonName, {\n icon: iframeIcon,\n tooltip: iframeButtonText,\n onAction: handleIframeAction,\n onSetup: api => {\n const selector = [\n 'iframe:not([data-mce-object]):not([data-mce-placeholder])',\n '.tiny-iframe-responsive',\n '.tiny-mediacms-iframe-wrapper',\n 'a[data-mediacms-textlink=\"true\"]'\n ].join(',');\n return editor.selection.selectorChangedWithUnbind(\n selector,\n api.setActive\n ).unbind;\n }\n });\n\n editor.ui.registry.addMenuItem(iframeMenuItemName, {\n icon: iframeIcon,\n text: iframeButtonText,\n onAction: handleIframeAction,\n });\n\n editor.ui.registry.addContextToolbar(iframeButtonName, {\n predicate: isIframe,\n items: iframeButtonName,\n position: 'node',\n scope: 'node'\n });\n\n editor.ui.registry.addContextMenu(iframeButtonName, {\n update: isIframe,\n });\n\n // Setup iframe overlays with edit button on hover\n setupIframeOverlays(editor, handleIframeAction);\n};\n\nexport const getSetup = async() => {\n const [\n iframeButtonText,\n ] = await getStrings([\n 'iframebuttontitle',\n ].map((key) => ({key, component})));\n\n const [\n iframeButtonImage,\n ] = await Promise.all([\n getButtonImage('icon', component),\n ]);\n\n // Note: The function returned here must be synchronous and cannot use promises.\n // All promises must be resolved prior to returning the function.\n return (editor) => {\n registerIframeCommand(editor, iframeButtonText, iframeButtonImage);\n };\n};\n"],"names":["isIframe","node","nodeName","toLowerCase","classList","contains","getAttribute","setupIframeOverlays","editor","handleIframeAction","processIframes","editorBody","getBody","querySelectorAll","forEach","iframe","parentElement","_iframe$parentElement","hasAttribute","wrapper","getDoc","createElement","className","setAttribute","editBtn","textContent","parentNode","insertBefore","appendChild","querySelector","match","style","maxWidth","width","margin","fixWrapperWidths","handleOverlayClick","e","target","closest","preventDefault","stopPropagation","selection","select","on","editorDoc","getElementById","id","head","addStyles","addEventListener","setTimeout","async","iframeButtonText","map","key","component","iframeButtonImage","Promise","all","IframeEmbed","displayDialogue","ui","registry","addIcon","iframeIcon","html","addToggleButton","iframeButtonName","icon","tooltip","onAction","onSetup","api","selector","join","selectorChangedWithUnbind","setActive","unbind","addMenuItem","iframeMenuItemName","text","addContextToolbar","predicate","items","position","scope","addContextMenu","update","registerIframeCommand"],"mappings":";;;;;;;8JAiCMA,SAAYC,MAAyC,WAAhCA,KAAKC,SAASC,eACpCF,KAAKG,WAAaH,KAAKG,UAAUC,SAAS,2BAC1CJ,KAAKG,WAAaH,KAAKG,UAAUC,SAAS,iCACV,MAAhCJ,KAAKC,SAASC,eAAyE,SAAhDF,KAAKK,aAAa,0BAUxDC,oBAAsB,CAACC,OAAQC,4BAwB3BC,eAAiB,WACbC,WAAaH,OAAOI,cACrBD,kBAIWA,WAAWE,iBAAiB,UACpCC,SAASC,oEAETA,OAAOC,gDAAPC,sBAAsBb,UAAUC,SAAS,0CAKzCU,OAAOG,aAAa,oBAAsBH,OAAOG,aAAa,qCAK5DC,QAAUX,OAAOY,SAASC,cAAc,OAC9CF,QAAQG,UAAY,+BACpBH,QAAQI,aAAa,kBAAmB,eAGlCC,QAAUhB,OAAOY,SAASC,cAAc,UAC9CG,QAAQF,UAAY,yBACpBE,QAAQD,aAAa,OAAQ,UAC7BC,QAAQD,aAAa,QAAS,4BAE9BC,QAAQC,YAAc,OAGtBV,OAAOW,WAAWC,aAAaR,QAASJ,QACxCI,QAAQS,YAAYb,QACpBI,QAAQS,YAAYJ,YAtDH,YACfb,WAAaH,OAAOI,UACrBD,YAGLA,WAAWE,iBAAiB,iCAAiCC,SAASK,gBAC5DJ,OAASI,QAAQU,cAAc,cAChCd,oBAICe,OADcf,OAAOT,aAAa,UAAY,IAC1BwB,MAAM,kCAC5BA,QACAX,QAAQY,MAAMC,SAAWF,MAAM,GAAK,KACpCX,QAAQY,MAAME,MAAQ,OACtBd,QAAQY,MAAMG,OAAS,cA0C/BC,IAgEEC,mBAAsBC,UAIlBb,QAHSa,EAAEC,OAGMC,QAAQ,+BAC1Bf,eAILa,EAAEG,iBACFH,EAAEI,wBAGItB,QAAUK,QAAQe,QAAQ,qCAC3BpB,eAIUA,QAAQU,cAAc,YAMrCrB,OAAOkC,UAAUC,OAAOxB,SAGxBV,uBAIJD,OAAOoC,GAAG,QAAQ,KAzFA,YACRC,UAAYrC,OAAOY,aACpByB,oBAKDA,UAAUC,eAAe,6CAIvBf,MAAQc,UAAUxB,cAAc,SACtCU,MAAMgB,GAAK,+BACXhB,MAAMN,syCAqCNoB,UAAUG,KAAKpB,YAAYG,QAwC3BkB,GACAvC,iBAGAF,OAAOI,UAAUsC,iBAAiB,QAASd,uBAI/C5B,OAAOoC,GAAG,cAAc,KACpBlC,oBAIJF,OAAOoC,GAAG,oBAAoB,KAC1BO,WAAWzC,eAAgB,QAI/BF,OAAOoC,GAAG,aAAa,KACnBlC,oBAIJF,OAAOoC,GAAG,UAAU,KAChBO,WAAWzC,eAAgB,OAI/BF,OAAOoC,GAAG,cAAc,KACpBlC,uCAsDgB0C,gBAEhBC,wBACM,mBAAW,CACjB,qBACFC,KAAKC,OAAUA,IAAAA,IAAKC,UAAAA,wBAGlBC,yBACMC,QAAQC,IAAI,EAClB,yBAAe,OAAQH,4BAKnBhD,SAjEkB,EAACA,OAAQ6C,iBAAkBI,2BAC/ChD,mBAAqB,KACH,IAAImD,qBAAYpD,QACxBqD,mBAIhBrD,OAAOsD,GAAGC,SAASC,QAAQC,mBAAYR,kBAAkBS,MAIzD1D,OAAOsD,GAAGC,SAASI,gBAAgBC,yBAAkB,CACjDC,KAAMJ,mBACNK,QAASjB,iBACTkB,SAAU9D,mBACV+D,QAASC,YACCC,SAAW,CACb,4DACA,0BACA,gCACA,oCACFC,KAAK,YACAnE,OAAOkC,UAAUkC,0BACpBF,SACAD,IAAII,WACNC,UAIVtE,OAAOsD,GAAGC,SAASgB,YAAYC,2BAAoB,CAC/CX,KAAMJ,mBACNgB,KAAM5B,iBACNkB,SAAU9D,qBAGdD,OAAOsD,GAAGC,SAASmB,kBAAkBd,yBAAkB,CACnDe,UAAWnF,SACXoF,MAAOhB,yBACPiB,SAAU,OACVC,MAAO,SAGX9E,OAAOsD,GAAGC,SAASwB,eAAenB,yBAAkB,CAChDoB,OAAQxF,WAIZO,oBAAoBC,OAAQC,qBAmBxBgF,CAAsBjF,OAAQ6C,iBAAkBI"} \ No newline at end of file diff --git a/lms-plugins/mediacms-moodle/tiny/mediacms/amd/src/commands.js b/lms-plugins/mediacms-moodle/tiny/mediacms/amd/src/commands.js index 0c3435cc..4e4c08e7 100755 --- a/lms-plugins/mediacms-moodle/tiny/mediacms/amd/src/commands.js +++ b/lms-plugins/mediacms-moodle/tiny/mediacms/amd/src/commands.js @@ -48,6 +48,26 @@ const setupIframeOverlays = (editor, handleIframeAction) => { /** * Process all iframes in the editor and add overlay wrappers. */ + const fixWrapperWidths = () => { + const editorBody = editor.getBody(); + if (!editorBody) { + return; + } + editorBody.querySelectorAll('.tiny-mediacms-iframe-wrapper').forEach((wrapper) => { + const iframe = wrapper.querySelector('iframe'); + if (!iframe) { + return; + } + const iframeStyle = iframe.getAttribute('style') || ''; + const match = iframeStyle.match(/max-width:\s*(\d+(?:\.\d+)?)px/); + if (match) { + wrapper.style.maxWidth = match[1] + 'px'; + wrapper.style.width = '100%'; + wrapper.style.margin = '0 auto'; + } + }); + }; + const processIframes = () => { const editorBody = editor.getBody(); if (!editorBody) { @@ -84,6 +104,8 @@ const setupIframeOverlays = (editor, handleIframeAction) => { wrapper.appendChild(iframe); wrapper.appendChild(editBtn); }); + + fixWrapperWidths(); }; /** @@ -108,14 +130,14 @@ const setupIframeOverlays = (editor, handleIframeAction) => { position: relative; line-height: 0; vertical-align: top; - margin-top: 40px; + margin-top: 50px; } .tiny-mediacms-iframe-wrapper iframe { display: block; } .tiny-mediacms-edit-btn { position: absolute; - top: -30px; + top: -44px; left: 50%; transform: translateX(-50%); background: rgba(0, 0, 0, 0.7); @@ -124,9 +146,9 @@ const setupIframeOverlays = (editor, handleIframeAction) => { border-radius: 3px; cursor: pointer; z-index: 10; - padding: 4px 12px; + padding: 8px 20px; margin: 0; - font-size: 12px; + font-size: 14px; font-weight: bold; text-decoration: none; box-shadow: 0 2px 4px rgba(0,0,0,0.3);