import Editor from 'tinymce/core/api/Editor';
import Tools from 'tinymce/core/api/util/Tools';
import * as Options from '../api/Options';
import * as HtmlToData from './HtmlToData';
import * as Mime from './Mime';
import { MediaData } from './Types';
import * as UpdateHtml from './UpdateHtml';
import * as UrlPatterns from './UrlPatterns';
export type DataToHtmlCallback = (data: MediaData) => string;
const getIframeHtml = (data: MediaData, iframeTemplateCallback: DataToHtmlCallback | undefined): string => {
if (iframeTemplateCallback) {
return iframeTemplateCallback(data);
} else {
const allowFullscreen = data.allowfullscreen ? ' allowFullscreen="1"' : '';
return '';
}
};
const getFlashHtml = (data: MediaData): string => {
let html = '';
return html;
};
const getAudioHtml = (data: MediaData, audioTemplateCallback: DataToHtmlCallback | undefined): string => {
if (audioTemplateCallback) {
return audioTemplateCallback(data);
} else {
return (
''
);
}
};
const getVideoHtml = (data: MediaData, videoTemplateCallback: DataToHtmlCallback | undefined): string => {
if (videoTemplateCallback) {
return videoTemplateCallback(data);
} else {
return (
''
);
}
};
const getScriptHtml = (data: MediaData): string => {
return '';
};
const dataToHtml = (editor: Editor, dataIn: MediaData): string => {
const data: MediaData = Tools.extend({}, dataIn);
if (!data.source) {
Tools.extend(data, HtmlToData.htmlToData(data.embed ?? '', editor.schema));
if (!data.source) {
return '';
}
}
if (!data.altsource) {
data.altsource = '';
}
if (!data.poster) {
data.poster = '';
}
data.source = editor.convertURL(data.source, 'source');
data.altsource = editor.convertURL(data.altsource, 'source');
data.sourcemime = Mime.guess(data.source);
data.altsourcemime = Mime.guess(data.altsource);
data.poster = editor.convertURL(data.poster, 'poster');
const pattern = UrlPatterns.matchPattern(data.source);
if (pattern) {
data.source = pattern.url;
data.type = pattern.type;
data.allowfullscreen = pattern.allowFullscreen;
data.width = data.width || String(pattern.w);
data.height = data.height || String(pattern.h);
}
if (data.embed) {
return UpdateHtml.updateHtml(data.embed, data, true, editor.schema);
} else {
const audioTemplateCallback = Options.getAudioTemplateCallback(editor);
const videoTemplateCallback = Options.getVideoTemplateCallback(editor);
const iframeTemplateCallback = Options.getIframeTemplateCallback(editor);
data.width = data.width || '300';
data.height = data.height || '150';
Tools.each(data, (value, key) => {
(data as Record)[key] = editor.dom.encode('' + value);
});
if (data.type === 'iframe') {
return getIframeHtml(data, iframeTemplateCallback);
} else if (data.sourcemime === 'application/x-shockwave-flash') {
return getFlashHtml(data);
} else if (data.sourcemime.indexOf('audio') !== -1) {
return getAudioHtml(data, audioTemplateCallback);
} else if (data.type === 'script') {
return getScriptHtml(data);
} else {
return getVideoHtml(data, videoTemplateCallback);
}
}
};
export {
dataToHtml
};