/**
* DataToHtml.js
*
* Released under LGPL License.
* Copyright (c) 1999-2017 Ephox Corp. All rights reserved
*
* License: http://www.tinymce.com/license
* Contributing: http://www.tinymce.com/contributing
*/
define(
'tinymce.plugins.media.core.DataToHtml',
[
'tinymce.core.util.Tools',
'tinymce.plugins.media.api.Settings',
'tinymce.plugins.media.core.HtmlToData',
'tinymce.plugins.media.core.Mime',
'tinymce.plugins.media.core.UpdateHtml',
'tinymce.plugins.media.core.UrlPatterns',
'tinymce.plugins.media.core.VideoScript'
],
function (Tools, Settings, HtmlToData, Mime, UpdateHtml, UrlPatterns, VideoScript) {
var getIframeHtml = function (data) {
var allowFullscreen = data.allowFullscreen ? ' allowFullscreen="1"' : '';
return '<iframe src="' + data.source1 + '" width="' + data.width + '" height="' + data.height + '"' + allowFullscreen + '></iframe>';
};
var getFlashHtml = function (data) {
var html = '<object data="' + data.source1 + '" width="' + data.width + '" height="' + data.height + '" type="application/x-shockwave-flash">';
if (data.poster) {
html += '<img src="' + data.poster + '" width="' + data.width + '" height="' + data.height + '" />';
}
html += '</object>';
return html;
};
var getAudioHtml = function (data, audioTemplateCallback) {
if (audioTemplateCallback) {
return audioTemplateCallback(data);
} else {
return (
'<audio controls="controls" src="' + data.source1 + '">' +
(
data.source2 ?
'\n<source src="' + data.source2 + '"' +
(data.source2mime ? ' type="' + data.source2mime + '"' : '') +
' />\n' : '') +
'</audio>'
);
}
};
var getVideoHtml = function (data, videoTemplateCallback) {
if (videoTemplateCallback) {
return videoTemplateCallback(data);
} else {
return (
'<video width="' + data.width +
'" height="' + data.height + '"' +
(data.poster ? ' poster="' + data.poster + '"' : '') + ' controls="controls">\n' +
'<source src="' + data.source1 + '"' +
(data.source1mime ? ' type="' + data.source1mime + '"' : '') + ' />\n' +
(data.source2 ? '<source src="' + data.source2 + '"' +
(data.source2mime ? ' type="' + data.source2mime + '"' : '') + ' />\n' : '') +
'</video>'
);
}
};
var getScriptHtml = function (data) {
return '<script src="' + data.source1 + '"></script>';
};
var dataToHtml = function (editor, dataIn) {
var data = Tools.extend({}, dataIn);
if (!data.source1) {
Tools.extend(data, HtmlToData.htmlToData(Settings.getScripts(editor), data.embed));
if (!data.source1) {
return '';
}
}
if (!data.source2) {
data.source2 = '';
}
if (!data.poster) {
data.poster = '';
}
data.source1 = editor.convertURL(data.source1, "source");
data.source2 = editor.convertURL(data.source2, "source");
data.source1mime = Mime.guess(data.source1);
data.source2mime = Mime.guess(data.source2);
data.poster = editor.convertURL(data.poster, "poster");
Tools.each(UrlPatterns.urlPatterns, function (pattern) {
var i;
var url;
var match = pattern.regex.exec(data.source1);
if (match) {
url = pattern.url;
for (i = 0; match[i]; i++) {
/*jshint loopfunc:true*/
/*eslint no-loop-func:0 */
url = url.replace('$' + i, function () {
return match[i];
});
}
data.source1 = url;
data.type = pattern.type;
data.allowFullscreen = pattern.allowFullscreen;
data.width = data.width || pattern.w;
data.height = data.height || pattern.h;
}
});
if (data.embed) {
return UpdateHtml.updateHtml(data.embed, data, true);
} else {
var videoScript = VideoScript.getVideoScriptMatch(Settings.getScripts(editor), data.source1);
if (videoScript) {
data.type = 'script';
data.width = videoScript.width;
data.height = videoScript.height;
}
var audioTemplateCallback = Settings.getAudioTemplateCallback(editor);
var videoTemplateCallback = Settings.getVideoTemplateCallback(editor);
data.width = data.width || 300;
data.height = data.height || 150;
Tools.each(data, function (value, key) {
data[key] = editor.dom.encode(value);
});
if (data.type === "iframe") {
return getIframeHtml(data);
} else if (data.source1mime === "application/x-shockwave-flash") {
return getFlashHtml(data);
} else if (data.source1mime.indexOf('audio') !== -1) {
return getAudioHtml(data, audioTemplateCallback);
} else if (data.type === "script") {
return getScriptHtml(data);
} else {
return getVideoHtml(data, videoTemplateCallback);
}
}
};
return {
dataToHtml: dataToHtml
};
}
);
|