/** * Video plugin by gohabereg * @version 1.0.0 */ var video = function(video){ var methods = { addInternal: function (content) { codex.content.switchBlock(codex.content.currentNode, content, 'video'); var blockContent = codex.content.currentNode.childNodes[0]; blockContent.classList.add('video__loader'); setTimeout(function(){ blockContent.classList.remove('video__loader'); }, 1000); }, getHtmlWithVideoId: function (type, id) { return services[type].html.replace(/<\%\= remote\_id \%\>/g, id); }, makeElementFromHtml: function(html) { var wrapper = document.createElement('DIV'); wrapper.innerHTML = html; return wrapper.firstElementChild; } }; var services = { vimeo: { regex: /(?:http[s]?:\/\/)?(?:www.)?vimeo\.co(?:.+\/([^\/]\d+)(?:#t=[\d]+)?s?$)/, html: "" }, youtube: { regex: /^.*(?:(?:youtu\.be\/)|(?:youtube\.com)\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*)(?:[\?\&]t\=(\d*)|)/, html: "", timestamp: '?t=' }, coub: { regex: /https?:\/\/coub\.com\/view\/([^\/\?\&]+)/, html: "" }, vine: { regex: /https?:\/\/vine\.co\/v\/([^\/\?\&]+)/, html: "" }, vk: { regex: /https?:\/\/vk\.com\/.*(?:video)([-_0-9]+)/, html: "" }, imgur: { regex: /https?:\/\/(?:i\.)?imgur\.com.*\/([a-zA-Z0-9]+)(?:\.gifv)?/, html: "" }, gfycat: { regex: /https?:\/\/gfycat\.com(?:\/detail)?\/([a-zA-Z]+)/, html: "", } }; video.make = function(data, isInternal) { if (!data.video_id) return; var html = methods.getHtmlWithVideoId(data.service, data.video_id), block = methods.makeElementFromHtml(html); block.dataset.id = data.video_id; block.dataset.videoSeirvice = data.service; if (isInternal) { methods.addInternal(block); } return block; }; /** * Saving JSON output. * Upload data via ajax */ video.save = function(blockContent) { var data; if (!blockContent) return; data = { video_id: blockContent.dataset.id, service: blockContent.dataset.videoService }; return data; }; /** * Render data */ video.render = function(data) { return video.make(data); }; video.urlPastedCallback = function(url, pattern) { var id = pattern.regex.exec(url)[1]; var data = { video_id: id, service: pattern.type }; video.make(data, true); }; return video; }({});