/**
* 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;
}({});