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("");
+ return "";
}
- }
- return content;
- });
+ })
+ );
yrPlugin.name = "meteogram";
return {