diff --git a/example.html b/example.html index b8dd39b2..c02bd669 100644 --- a/example.html +++ b/example.html @@ -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 diff --git a/plugins/paste/patterns.js b/plugins/paste/patterns.js index b78a7748..8b32017a 100644 --- a/plugins/paste/patterns.js +++ b/plugins/paste/patterns.js @@ -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 } ]; \ No newline at end of file diff --git a/plugins/video/video.js b/plugins/video/video.js index 29fe60c3..e2f34a87 100644 --- a/plugins/video/video.js +++ b/plugins/video/video.js @@ -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: "" @@ -113,11 +59,56 @@ videoTool.content = { regex: /https?:\/\/gfycat\.com(?:\/detail)?\/([a-zA-Z]+)/, html: "", } - } -}; + }; -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); - } -}; \ No newline at end of file + video.make(data, true); + }; + + return video; + +}({}); \ No newline at end of file