mirror of
https://github.com/mediacms-io/mediacms.git
synced 2026-04-23 15:58:08 -04:00
a
This commit is contained in:
Binary file not shown.
@@ -31,7 +31,8 @@ $show_media_page = optional_param('show_media_page', '', PARAM_TEXT);
|
||||
// Get configuration
|
||||
$mediacmsurl = get_config('filter_mediacms', 'mediacmsurl');
|
||||
$ltitoolid = get_config('filter_mediacms', 'ltitoolid');
|
||||
$share_embedded_media = (int)(bool)get_config('filter_mediacms', 'share_embedded_media');
|
||||
$share_raw = get_config('filter_mediacms', 'share_embedded_media');
|
||||
$share_embedded_media = ($share_raw === false) ? 1 : (int)(bool)$share_raw;
|
||||
|
||||
if (empty($mediacmsurl)) {
|
||||
die('MediaCMS URL not configured');
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -5,6 +5,6 @@ define("tiny_mediacms/plugin",["exports","editor_tiny/loader","editor_tiny/utils
|
||||
* @module tiny_mediacms/plugin
|
||||
* @copyright 2022 Andrew Lyons <andrew@nicols.co.uk>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,Commands=_interopRequireWildcard(Commands),Configuration=_interopRequireWildcard(Configuration),Options=_interopRequireWildcard(Options);const isMediaCMSUrl=url=>{if(!url)return!1;try{const urlObj=new URL(url);return("/embed"===urlObj.pathname||"/view"===urlObj.pathname)&&urlObj.searchParams.has("m")}catch(e){return!1}},convertUrlsToIframes=html=>{const tempDiv=document.createElement("div");tempDiv.innerHTML=html;const nodesToReplace=[],walk=el=>{for(const child of Array.from(el.childNodes))if(child.nodeType===Node.TEXT_NODE){const url=child.textContent.trim();isMediaCMSUrl(url)&&nodesToReplace.push({node:child,url:url})}else child.nodeType===Node.ELEMENT_NODE&&"a"!==child.tagName.toLowerCase()&&walk(child)};return walk(tempDiv),nodesToReplace.forEach((_ref=>{let{node:node,url:url}=_ref;const wrapper=document.createElement("div");wrapper.innerHTML=(url=>{let embedUrl=url;try{const urlObj=new URL(url);"/view"===urlObj.pathname&&(urlObj.pathname="/embed",embedUrl=urlObj.toString())}catch(e){}return'<iframe src="'.concat(embedUrl,'" width="560" height="315" ')+'style="width:100%;max-width:560px;aspect-ratio:560 / 315;display:block;margin:0 auto;border:0;" frameborder="0" allowfullscreen></iframe>'})(url);const iframe=wrapper.firstChild;iframe&&node.parentNode.replaceChild(iframe,node)})),tempDiv.innerHTML};var _default=new Promise((async resolve=>{const[tinyMCE,setupCommands,pluginMetadata]=await Promise.all([(0,_loader.getTinyMCE)(),Commands.getSetup(),(0,_utils.getPluginMetadata)(_common.component,_common.pluginName)]);tinyMCE.PluginManager.add("".concat(_common.component,"/plugin"),(editor=>(Options.register(editor),setupCommands(editor),(0,_autoconvert.setupAutoConvert)(editor),editor.on("BeforeSetContent",(e=>{e.content&&"string"==typeof e.content&&(e.content=convertUrlsToIframes(e.content))})),editor.on("GetContent",(e=>{if("html"===e.format){const tempDiv=document.createElement("div");tempDiv.innerHTML=e.content,tempDiv.querySelectorAll(".tiny-mediacms-edit-btn").forEach((btn=>btn.remove())),tempDiv.querySelectorAll(".tiny-mediacms-iframe-wrapper, .tiny-iframe-responsive").forEach((wrapper=>{const iframe=wrapper.querySelector("iframe");iframe&&wrapper.parentNode.insertBefore(iframe,wrapper),wrapper.remove()})),e.content=tempDiv.innerHTML}})),pluginMetadata))),resolve(["".concat(_common.component,"/plugin"),Configuration])}));return _exports.default=_default,_exports.default}));
|
||||
*/Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,Commands=_interopRequireWildcard(Commands),Configuration=_interopRequireWildcard(Configuration),Options=_interopRequireWildcard(Options);const isMediaCMSUrl=url=>{if(!url)return!1;try{const urlObj=new URL(url);return("/embed"===urlObj.pathname||"/view"===urlObj.pathname)&&urlObj.searchParams.has("m")}catch(e){return!1}},convertUrlsToIframes=html=>{const tempDiv=document.createElement("div");tempDiv.innerHTML=html;const nodesToReplace=[],walk=el=>{for(const child of Array.from(el.childNodes))if(child.nodeType===Node.TEXT_NODE){const url=child.textContent.trim();isMediaCMSUrl(url)&&nodesToReplace.push({node:child,url:url})}else child.nodeType===Node.ELEMENT_NODE&&"a"!==child.tagName.toLowerCase()&&walk(child)};return walk(tempDiv),nodesToReplace.forEach((_ref=>{let{node:node,url:url}=_ref;const wrapper=document.createElement("div");wrapper.innerHTML=(url=>{let embedUrl=url,width=560,height=315;try{const urlObj=new URL(url);"/view"===urlObj.pathname&&(urlObj.pathname="/embed");const w=parseInt(urlObj.searchParams.get("width")),h=parseInt(urlObj.searchParams.get("height"));w>0&&(width=w),h>0&&(height=h),embedUrl=urlObj.toString()}catch(e){}const style="width:100%;max-width:".concat(width,"px;height:auto;")+"aspect-ratio:".concat(width," / ").concat(height,";display:block;margin:0 auto;border:0;");return'<iframe src="'.concat(embedUrl,'" width="').concat(width,'" height="').concat(height,'" ')+'style="'.concat(style,'" frameborder="0" allowfullscreen></iframe>')})(url);const iframe=wrapper.firstChild;iframe&&node.parentNode.replaceChild(iframe,node)})),tempDiv.innerHTML};var _default=new Promise((async resolve=>{const[tinyMCE,setupCommands,pluginMetadata]=await Promise.all([(0,_loader.getTinyMCE)(),Commands.getSetup(),(0,_utils.getPluginMetadata)(_common.component,_common.pluginName)]);tinyMCE.PluginManager.add("".concat(_common.component,"/plugin"),(editor=>(Options.register(editor),setupCommands(editor),(0,_autoconvert.setupAutoConvert)(editor),editor.on("BeforeSetContent",(e=>{e.content&&"string"==typeof e.content&&(e.content=convertUrlsToIframes(e.content))})),editor.on("GetContent",(e=>{if("html"===e.format){const tempDiv=document.createElement("div");tempDiv.innerHTML=e.content,tempDiv.querySelectorAll(".tiny-mediacms-edit-btn").forEach((btn=>btn.remove())),tempDiv.querySelectorAll("iframe").forEach((iframe=>{const src=iframe.getAttribute("src");if(isMediaCMSUrl(src)){const wrapper=iframe.closest(".tiny-mediacms-iframe-wrapper")||iframe.closest(".tiny-iframe-responsive"),p=document.createElement("p");p.appendChild(document.createTextNode(src)),wrapper?(wrapper.parentNode.insertBefore(p,wrapper),wrapper.remove()):(iframe.parentNode.insertBefore(p,iframe),iframe.remove())}})),tempDiv.querySelectorAll(".tiny-mediacms-iframe-wrapper, .tiny-iframe-responsive").forEach((wrapper=>{const iframe=wrapper.querySelector("iframe");iframe&&wrapper.parentNode.insertBefore(iframe,wrapper),wrapper.remove()})),e.content=tempDiv.innerHTML}})),pluginMetadata))),resolve(["".concat(_common.component,"/plugin"),Configuration])}));return _exports.default=_default,_exports.default}));
|
||||
|
||||
//# sourceMappingURL=plugin.min.js.map
|
||||
File diff suppressed because one or more lines are too long
@@ -180,6 +180,13 @@ export default class IframeEmbed {
|
||||
}
|
||||
}
|
||||
|
||||
if (options.width) {
|
||||
url.searchParams.set('width', options.width);
|
||||
}
|
||||
if (options.height) {
|
||||
url.searchParams.set('height', options.height);
|
||||
}
|
||||
|
||||
return url.toString();
|
||||
}
|
||||
|
||||
|
||||
@@ -56,21 +56,31 @@ const isMediaCMSUrl = (url) => {
|
||||
* @returns {string} The iframe HTML
|
||||
*/
|
||||
const mediaCMSUrlToIframe = (url) => {
|
||||
// Convert view URL to embed URL if needed
|
||||
let embedUrl = url;
|
||||
let width = 560;
|
||||
let height = 315;
|
||||
try {
|
||||
const urlObj = new URL(url);
|
||||
if (urlObj.pathname === '/view') {
|
||||
urlObj.pathname = '/embed';
|
||||
embedUrl = urlObj.toString();
|
||||
}
|
||||
const w = parseInt(urlObj.searchParams.get('width'));
|
||||
const h = parseInt(urlObj.searchParams.get('height'));
|
||||
if (w > 0) {
|
||||
width = w;
|
||||
}
|
||||
if (h > 0) {
|
||||
height = h;
|
||||
}
|
||||
embedUrl = urlObj.toString();
|
||||
} catch (e) {
|
||||
// Keep original URL if parsing fails
|
||||
// Keep defaults if parsing fails
|
||||
}
|
||||
|
||||
return `<iframe src="${embedUrl}" width="560" height="315" ` +
|
||||
`style="width:100%;max-width:560px;aspect-ratio:560 / 315;display:block;margin:0 auto;border:0;" ` +
|
||||
`frameborder="0" allowfullscreen></iframe>`;
|
||||
const style = `width:100%;max-width:${width}px;height:auto;` +
|
||||
`aspect-ratio:${width} / ${height};display:block;margin:0 auto;border:0;`;
|
||||
return `<iframe src="${embedUrl}" width="${width}" height="${height}" ` +
|
||||
`style="${style}" frameborder="0" allowfullscreen></iframe>`;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -142,17 +152,33 @@ export default new Promise(async(resolve) => {
|
||||
}
|
||||
});
|
||||
|
||||
// Clean up editor-only overlay elements when saving, preserving iframe HTML with its
|
||||
// responsive styles (max-width, aspect-ratio) so dimensions survive the round-trip.
|
||||
// Convert MediaCMS iframes back to plain embed URLs when saving.
|
||||
// Width/height are encoded in the URL params so the filter and BeforeSetContent
|
||||
// can reconstruct the correct responsive iframe on next load.
|
||||
editor.on('GetContent', (e) => {
|
||||
if (e.format === 'html') {
|
||||
const tempDiv = document.createElement('div');
|
||||
tempDiv.innerHTML = e.content;
|
||||
|
||||
// Remove edit buttons added by the overlay system (editor-only UI)
|
||||
tempDiv.querySelectorAll('.tiny-mediacms-edit-btn').forEach(btn => btn.remove());
|
||||
|
||||
// Unwrap overlay divs, keeping the iframe HTML intact with its responsive styles
|
||||
tempDiv.querySelectorAll('iframe').forEach(iframe => {
|
||||
const src = iframe.getAttribute('src');
|
||||
if (isMediaCMSUrl(src)) {
|
||||
const wrapper = iframe.closest('.tiny-mediacms-iframe-wrapper') ||
|
||||
iframe.closest('.tiny-iframe-responsive');
|
||||
const p = document.createElement('p');
|
||||
p.appendChild(document.createTextNode(src));
|
||||
if (wrapper) {
|
||||
wrapper.parentNode.insertBefore(p, wrapper);
|
||||
wrapper.remove();
|
||||
} else {
|
||||
iframe.parentNode.insertBefore(p, iframe);
|
||||
iframe.remove();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
tempDiv.querySelectorAll('.tiny-mediacms-iframe-wrapper, .tiny-iframe-responsive').forEach(wrapper => {
|
||||
const iframe = wrapper.querySelector('iframe');
|
||||
if (iframe) {
|
||||
|
||||
Reference in New Issue
Block a user