Files
2023-01-11 10:21:44 +09:00

200 lines
5.9 KiB
JavaScript

// ================================================================
// Movie
// ================================================================
var button = [
{ alt : '', img : 'play.gif', cmd : doPlay },
{ alt : '', img : 'submit.gif', cmd : doSubmit },
{ alt : '', img : 'cancel.gif', cmd : popupClose }
],
oEditor = null,
iframeSource = null,
showMovie = false,
defaultMovieWidth = 640,
defaultMovieHeight = 360;
function init(dialog) {
var dlg = new Dialog(this);
oEditor = this;
oEditor.dialog = dialog;
dlg.showButton(button);
dlg.setDialogHeight();
}
function getSource() {
return oEditor.trimSpace(document.getElementById("fm_source").value);
}
function doPlay() {
var embed = null,
div = document.createElement('div'),
pos, str, object, child, movieHeight, movieWidth, params = [], showWrapper,
source = getSource(), iframe;
showMovie = true;
if (source === '') {
return;
}
showWrapper = document.getElementById('fm_player');
if (source.toLowerCase().indexOf("iframe") !== -1) {
showWrapper.innerHTML = source;
iframeSource = source;
return;
}
if (/https?:\/\//.test(source)) {
iframe = createIframeElement(defaultMovieWidth, defaultMovieHeight, source);
if (iframe) {
showWrapper.innerHTML = '';
showWrapper.appendChild(iframe);
iframeSource = iframe;
}
return;
}
pos = source.toLowerCase().indexOf("embed");
if (pos !== -1) {
str = source.substr(pos);
pos = str.indexOf(">");
div.innerHTML = "<" + str.substr(0, pos) + ">";
embed = div.firstChild;
} else {
div.innerHTML = source;
object = div.getElementsByTagName('OBJECT')[0];
if (object && object.hasChildNodes()) {
child = object.firstChild;
movieWidth = (isNaN(object.width) !== true) ? object.width : defaultMovieWidth;
movieHeight = (isNaN(object.height) !== true) ? object.height : defaultMovieHeight;
do {
if (child.nodeName === 'PARAM' && typeof child.name !== 'undefined' && typeof child.value !== 'undefined')
{
params.push({
key: child.name === 'movie' ? 'src' : child.name,
val: child.value
});
}
child = child.nextSibling;
} while (child);
if (params.length > 0) {
embed = createEmbedElement(movieWidth, movieHeight, params, null);
}
}
}
if (embed !== null) {
document.getElementById('fm_player').appendChild(embed);
}
}
function createIframeElement(width, height, src) {
var iframe = document.createElement('iframe'), uri, query, id, movie = null;
uri = new oEditor.URI(src);
if (uri.path && uri.path.charAt(0) !== '/') {
uri.path = '/' + uri.path;
}
switch (uri.authority) {
case 'youtu.be' :
case 'youtube.com':
case 'www.youtube.com':
if (uri.path === '/watch' && uri.query) {
query = uri.query.split('=');
if (query[0] === 'v') {
movie = '/' + query[1];
}
}
if (!movie && uri.path) {
movie = uri.path;
if (uri.query) {
movie += '?' + uri.query;
}
}
if (movie) {
movie = 'https://www.youtube.com/embed' + movie;
}
break;
case 'vimeo.com' :
if (uri.path) {
movie = 'https://player.vimeo.com/video' + uri.path;
}
break;
case 'afree.ca' :
if (uri.path) {
movie = 'http://play.afreecatv.com' + uri.path + '/embed';
}
break;
case 'tv.naver.com' :
if (uri.path) {
id = uri.path.substring(uri.path.lastIndexOf('/'));
movie = 'https://tv.naver.com/embed' + id + '?autoPlay=true';
}
break;
case 'tv.kakao.com' :
if (uri.path) {
id = uri.path.substring(uri.path.lastIndexOf('/'));
movie = 'https://tv.kakao.com/embed/player/cliplink' + id;
}
break;
default :
movie = null;
}
if (!movie) {
return null;
}
iframe.setAttribute('width', width);
iframe.setAttribute('height', height);
iframe.setAttribute('frameborder', "0");
iframe.setAttribute('allowfullscreen', "true");
iframe.setAttribute('src', movie);
return iframe;
}
function createEmbedElement(width, height, params, src) {
var embed = document.createElement('embed'), i;
embed.setAttribute("type", "application/x-shockwave-flash");
embed.setAttribute('width', width);
embed.setAttribute('height', height);
if (src) {
embed.setAttribute('src', src);
}
for (i = 0; i < params.length; i++) {
embed.setAttribute(params[i].key, params[i].val);
}
return embed;
}
function popupClose() {
document.getElementById('fm_player').innerHTML = '';
oEditor.popupWinCancel();
}
function doSubmit()
{
var source = getSource();
if (source === '') {
popupClose();
}
if (!showMovie) {
document.getElementById('fm_player').style.visibility = 'hidden';
doPlay();
}
if (iframeSource) {
oEditor.insertHtmlPopup(iframeSource);
} else {
oEditor.insertFlash(source);
}
document.getElementById('fm_player').innerHTML = '';
oEditor.popupWinClose();
}