Rewrite plugin with function closure

This commit is contained in:
George Berezhnoy 2017-01-13 00:16:17 +03:00
parent d3e9b57324
commit 7439c5aa38
3 changed files with 84 additions and 90 deletions

View file

@ -177,11 +177,11 @@
},
video: {
type: 'video',
make: videoTool.make,
make: video.make,
appendCallback: null,
settings: null,
render: videoTool.render,
save: videoTool.save,
render: video.render,
save: video.save,
displayInToolbox: false,
enableLineBreaks: false,
allowedToPaste: false

View file

@ -39,37 +39,37 @@ pasteTool.patterns = [
{
type: 'youtube',
regex: /^.*(?:(?:youtu\.be\/)|(?:youtube\.com)\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*)(?:[\?\&]t\=(\d*)|)/,
callback: videoTool.urlPastedCallbacks.generalCallback
callback: video.urlPastedCallback
},
{
type: 'vimeo',
regex: /(?:http[s]?:\/\/)?(?:www.)?vimeo\.co(?:.+\/([^\/]\d+)(?:#t=[\d]+)?s?$)/,
callback: videoTool.urlPastedCallbacks.generalCallback
callback: video.urlPastedCallback
},
{
type: 'coub',
regex: /https?:\/\/coub\.com\/view\/([^\/\?\&]+)/,
callback: videoTool.urlPastedCallbacks.generalCallback
callback: video.urlPastedCallback
},
{
type: 'vine',
regex: /https?:\/\/vine\.co\/v\/([^\/\?\&]+)/,
callback: videoTool.urlPastedCallbacks.generalCallback
callback: video.urlPastedCallback
},
{
type: 'vk',
regex: /https?:\/\/vk\.com\/.*(?:video)[-0-9]+_([0-9]+)/,
callback: videoTool.urlPastedCallbacks.generalCallback
callback: video.urlPastedCallback
},
{
type: 'imgur',
regex: /https?:\/\/(?:i\.)?imgur\.com.*\/([a-zA-Z0-9]+)(?:\.gifv)?/,
callback: videoTool.urlPastedCallbacks.generalCallback
callback: video.urlPastedCallback
},
{
type: 'gfycat',
regex: /https?:\/\/gfycat\.com(?:\/detail)?\/([a-zA-Z]+)/,
callback: videoTool.urlPastedCallbacks.generalCallback
callback: video.urlPastedCallback
}
];

View file

@ -2,88 +2,34 @@
* Video plugin by gohabereg
* @version 1.0.0
*/
var videoTool = {
var video = function(video){
make : function(data, isInternal) {
var methods = {
if (!data.video_id)
return;
addInternal: function (content) {
codex.content.switchBlock(codex.content.currentNode, content, 'video');
var html = videoTool.content.getHtmlWithVideoId(data.service, data.video_id),
block = videoTool.content.makeElementFromHtml(html);
var blockContent = codex.content.currentNode.childNodes[0];
blockContent.classList.add('video__loader');
block.dataset.id = data.video_id;
block.dataset.videoSeirvice = data.service;
setTimeout(function(){
blockContent.classList.remove('video__loader');
}, 1000);
if (isInternal) {
},
setTimeout(function() {
getHtmlWithVideoId: function (type, id) {
return services[type].html.replace(/<\%\= remote\_id \%\>/g, id);
},
/** Render block */
videoTool.content.render(block);
}, 200);
makeElementFromHtml: function(html) {
var wrapper = document.createElement('DIV');
wrapper.innerHTML = html;
return wrapper.firstElementChild;
}
};
return block;
},
/**
* Saving JSON output.
* Upload data via ajax
*/
save : function(blockContent) {
var data;
if (!blockContent)
return;
data = {
video_id: blockContent.dataset.id,
service: blockContent.dataset.videoService
};
return data;
},
/**
* Render data
*/
render : function(data) {
return videoTool.make(data);
},
};
videoTool.content = {
render: 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 videoTool.content.services[type].html.replace(/<\%\= remote\_id \%\>/g, id);
},
makeElementFromHtml: function(html) {
var wrapper = document.createElement('DIV');
wrapper.innerHTML = html;
return wrapper.firstElementChild;
},
services: {
var services = {
vimeo: {
regex: /(?:http[s]?:\/\/)?(?:www.)?vimeo\.co(?:.+\/([^\/]\d+)(?:#t=[\d]+)?s?$)/,
html: "<iframe src=\"https://player.vimeo.com/video/<%= remote_id %>?title=0&byline=0\" width=\"580\" height=\"320\" frameborder=\"0\"></iframe>"
@ -113,11 +59,56 @@ videoTool.content = {
regex: /https?:\/\/gfycat\.com(?:\/detail)?\/([a-zA-Z]+)/,
html: "<iframe src='https://gfycat.com/ifr/<%= remote_id %>' frameborder='0' scrolling='no' width='580' height='436' allowfullscreen ></iframe>",
}
}
};
};
videoTool.urlPastedCallbacks = {
generalCallback: function(url, pattern) {
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];
@ -126,6 +117,9 @@ videoTool.urlPastedCallbacks = {
service: pattern.type
};
videoTool.make(data, true);
}
};
video.make(data, true);
};
return video;
}({});