2020-06-16 03:20:10 +02:00
|
|
|
'use strict';
|
2019-06-08 17:20:51 +02:00
|
|
|
|
|
|
|
import $ from 'jquery';
|
|
|
|
|
2020-06-16 03:20:10 +02:00
|
|
|
import MainUI from '../_main';
|
2019-06-08 17:20:51 +02:00
|
|
|
import Events from '../_events';
|
|
|
|
import SpinnerUI from './_ui.spinner';
|
|
|
|
|
|
|
|
const VideoPreviewUI = (($) => {
|
|
|
|
const NAME = 'jsVideoPreviewUI';
|
|
|
|
const DATA_KEY = NAME;
|
|
|
|
|
|
|
|
const G = window;
|
|
|
|
const D = document;
|
|
|
|
|
|
|
|
class VideoPreviewUI {
|
|
|
|
constructor(el) {
|
|
|
|
const ui = this;
|
|
|
|
ui.$_el = $(el);
|
|
|
|
ui.innerHTML = ui.$_el[0].innerHTML;
|
|
|
|
|
|
|
|
ui.$_el.data(DATA_KEY, this);
|
|
|
|
const href = ui.$_el.attr('href') || ui.$_el.data('href');
|
2019-07-10 20:59:57 +02:00
|
|
|
const YouTubeGetID = (url) => {
|
2020-07-30 20:06:57 +02:00
|
|
|
const parsedURL = url.split(
|
|
|
|
/(vi\/|v%3D|v=|\/v\/|youtu\.be\/|\/embed\/)/,
|
|
|
|
);
|
|
|
|
console.log(parsedURL);
|
2020-06-16 03:20:10 +02:00
|
|
|
return undefined !== parsedURL[2]
|
|
|
|
? parsedURL[2].split(/[^0-9a-z_-]/i)[0]
|
|
|
|
: parsedURL[0];
|
2019-07-10 20:59:57 +02:00
|
|
|
};
|
|
|
|
|
2019-06-08 17:20:51 +02:00
|
|
|
let video;
|
|
|
|
|
2020-06-16 03:20:10 +02:00
|
|
|
if (
|
|
|
|
(video = href.match(
|
|
|
|
/(youtube|youtube-nocookie|youtu|vimeo)\.(com|be)\/(watch\?v=([\w-]+)|([\w-]+))/,
|
|
|
|
))
|
|
|
|
) {
|
2019-06-08 17:20:51 +02:00
|
|
|
let video_id;
|
|
|
|
|
2020-06-16 03:20:10 +02:00
|
|
|
if (
|
|
|
|
video[1] === 'youtube' ||
|
|
|
|
video[1] === 'youtube-nocookie' ||
|
|
|
|
video[1] === 'youtu'
|
|
|
|
) {
|
2019-07-10 20:59:57 +02:00
|
|
|
video_id = YouTubeGetID(href);
|
2019-06-08 17:20:51 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
if (video[1] == 'vimeo') {
|
|
|
|
video_id = video[3];
|
|
|
|
ui.$_el.addClass('loading');
|
|
|
|
$.ajax({
|
|
|
|
type: 'GET',
|
2020-06-16 03:20:10 +02:00
|
|
|
url: `https://vimeo.com/api/v2/video/${video_id}.json`,
|
2019-06-08 17:20:51 +02:00
|
|
|
jsonp: 'callback',
|
|
|
|
dataType: 'jsonp',
|
2020-06-16 03:20:10 +02:00
|
|
|
success: function (data) {
|
2019-06-08 17:20:51 +02:00
|
|
|
const thumbnail_src = data[0].thumbnail_large;
|
|
|
|
ui.show(thumbnail_src);
|
|
|
|
ui.$_el.removeClass('loading');
|
|
|
|
},
|
|
|
|
});
|
|
|
|
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (video_id) {
|
|
|
|
ui.show(`//i3.ytimg.com/vi/${video_id}/0.jpg`);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
show(src) {
|
|
|
|
const ui = this;
|
|
|
|
ui.$_el[0].innerHTML = '';
|
|
|
|
ui.$_el.append(`<img src="${src}" alt="Video" />`);
|
|
|
|
}
|
|
|
|
|
|
|
|
static dispose() {
|
|
|
|
console.log(`Destroying: ${NAME}`);
|
|
|
|
ui.$_el[0].innerHTML = ui.innerHTML;
|
|
|
|
}
|
|
|
|
|
|
|
|
static _jQueryInterface() {
|
|
|
|
return this.each((i, el) => {
|
|
|
|
// attach functionality to element
|
|
|
|
const $el = $(el);
|
|
|
|
let data = $el.data(DATA_KEY);
|
|
|
|
|
|
|
|
if (!data) {
|
|
|
|
data = new VideoPreviewUI(el);
|
|
|
|
$el.data(DATA_KEY, data);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// jQuery interface
|
|
|
|
$.fn[NAME] = VideoPreviewUI._jQueryInterface;
|
|
|
|
$.fn[NAME].Constructor = VideoPreviewUI;
|
|
|
|
$.fn[NAME].noConflict = () => {
|
|
|
|
$.fn[NAME] = JQUERY_NO_CONFLICT;
|
|
|
|
return VideoPreviewUI._jQueryInterface;
|
|
|
|
};
|
|
|
|
|
|
|
|
// auto-apply
|
2020-06-16 03:20:10 +02:00
|
|
|
$(window).on(`${Events.LODEDANDREADY}`, () => {
|
|
|
|
console.log(`Initializing: ${NAME}`);
|
|
|
|
|
|
|
|
$('[data-video-preview="true"]').each((i, el) => {
|
|
|
|
$(el).jsVideoPreviewUI();
|
|
|
|
});
|
2019-06-08 17:20:51 +02:00
|
|
|
});
|
|
|
|
|
|
|
|
return VideoPreviewUI;
|
|
|
|
})($);
|
|
|
|
|
|
|
|
export default VideoPreviewUI;
|