"use strict"; import $ from "jquery"; import MainUI from "../_main"; 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"); const YouTubeGetID = (url) => { const parsedURL = url.split( /(vi\/|v%3D|v=|\/v\/|youtu\.be\/|\/embed\/)/ ); console.log(`${NAME}: ${parsedURL}`); return undefined !== parsedURL[2] ? parsedURL[2].split(/[^0-9a-z_-]/i)[0] : parsedURL[0]; }; let video; if ( (video = href.match( /(youtube|youtube-nocookie|youtu|vimeo)\.(com|be)\/(watch\?v=([\w-]+)|([\w-]+))/ )) ) { let video_id; if ( video[1] === "youtube" || video[1] === "youtube-nocookie" || video[1] === "youtu" ) { video_id = YouTubeGetID(href); } if (video[1] == "vimeo") { video_id = video[3]; ui.$_el.addClass("loading"); $.ajax({ type: "GET", url: `https://vimeo.com/api/v2/video/${video_id}.json`, jsonp: "callback", dataType: "jsonp", success: function (data) { 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(`Video`); } static dispose() { console.log(`${NAME}: dispose`); 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 $(window).on(`${Events.LODEDANDREADY}`, () => { console.log(`${NAME}: init`); $('[data-video-preview="true"]').each((i, el) => { $(el).jsVideoPreviewUI(); }); }); return VideoPreviewUI; })($); export default VideoPreviewUI;