From 3d719f3671503e4e6b594e9e68b7ee0e1fc2bdb1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lorenz=20H=C3=BCbschle-Schneider?= Date: Fri, 8 Aug 2014 15:59:35 +0100 Subject: [PATCH] Simplify plugins that detect URLs by eliminating redundancy --- js/plugins.js | 85 ++++++++++++++++++++++----------------------------- 1 file changed, 36 insertions(+), 49 deletions(-) diff --git a/js/plugins.js b/js/plugins.js index 16a4545..d795dbe 100644 --- a/js/plugins.js +++ b/js/plugins.js @@ -132,6 +132,21 @@ plugins.factory('userPlugins', function() { var urlRegexp = RegExp(/(?:ftp|https?):\/\/\S*[^\s.;,(){}<>]/g); + var urlPlugin = function(callback) { + return function(message) { + var urls = message.match(urlRegexp); + var content = []; + + for (var i = 0; urls && i < urls.length; i++) { + var result = callback(urls[i]); + if (result) { + content.push(result); + } + } + return content; + }; + }; + /* * Spotify Embedded Player * @@ -221,13 +236,8 @@ plugins.factory('userPlugins', function() { /* * Image Preview */ - var imagePlugin = new Plugin(function(message) { - - var urls = message.match(urlRegexp); - var content = []; - - for (var i = 0; urls && i < urls.length; i++) { - var url = urls[i]; + var imagePlugin = new Plugin( + urlPlugin(function(url) { if (url.match(/\.(png|gif|jpg|jpeg)$/i)) { /* A fukung.net URL may end by an image extension but is not a direct link. */ @@ -238,58 +248,40 @@ plugins.factory('userPlugins', function() { url = url.replace(/http:/, ""); } - content.push(''); + return ''; } - } - - return content; - }); + }) + ); imagePlugin.name = 'image'; /* * Cloud Music Embedded Players */ - var cloudmusicPlugin = new Plugin(function(message) { - - var urls = message.match(urlRegexp); - var content = []; - - for (var i = 0; urls && i < urls.length; i++) { - var url = urls[i]; - + var cloudmusicPlugin = new Plugin( + urlPlugin(function(url) { /* SoundCloud http://help.soundcloud.com/customer/portal/articles/247785-what-widgets-can-i-use-from-soundcloud- */ if (url.match(/^https?:\/\/soundcloud.com\//)) { - content.push(''); + return ''; } /* MixCloud */ if (url.match(/^https?:\/\/([a-z]+\.)?mixcloud.com\//)) { - content.push(''); + return ''; } - } - - return content; - }); + }) + ); cloudmusicPlugin.name = 'cloud music'; /* * Google Maps */ - var googlemapPlugin = new Plugin(function(message) { - - var urls = message.match(urlRegexp); - var content = []; - - for (var i = 0; urls && i < urls.length; i++) { - var url = urls[i]; - + var googlemapPlugin = new Plugin( + urlPlugin(function(url) { if (url.match(/^https?:\/\/maps\.google\./i) || url.match(/^https?:\/\/(?:[\w]+\.)?google\.[\w]+\/maps/i)) { - content.push(''); + return ''; } - } - - return content; - }); + }) + ); googlemapPlugin.name = 'Google Map'; /* @@ -306,12 +298,8 @@ plugins.factory('userPlugins', function() { }); asciinemaPlugin.name = "ascii cast"; - var yrPlugin = new Plugin(function(message) { - var urls = message.match(urlRegexp); - var content = []; - - for (var i = 0; urls && i < urls.length; i++) { - var url = urls[i]; + var yrPlugin = new Plugin( + urlPlugin(function(url) { var regexp = /^https?:\/\/(?:www\.)?yr\.no\/(place|stad|sted|sadji|paikka)\/(([^\s.;,(){}<>\/]+\/){3,})/; var match = url.match(regexp); if (match) { @@ -319,11 +307,10 @@ plugins.factory('userPlugins', function() { var location = match[2]; var city = match[match.length - 1].slice(0, -1); url = "http://www.yr.no/" + language + "/" + location + "avansert_meteogram.png"; - content.push("Meteogram for " + city + ""); + return "Meteogram for " + city + ""; } - } - return content; - }); + }) + ); yrPlugin.name = "meteogram"; return {