var plugins = angular.module('plugins', []); plugins.factory('pluginManager', ['youtubePlugin', 'urlPlugin', 'imagePlugin', function(youtubePlugin, urlPlugin, imagePlugin) { var plugins = [youtubePlugin, urlPlugin, imagePlugin] var hookPlugin = function(plugin) { plugins.push(plugin); } var contentForMessage = function(message) { var content = []; for (var i = 0; i < plugins.length; i++) { var pluginContent = plugins[i].contentForMessage(message); if (pluginContent) { var pluginContent = {'visible': false, 'content': pluginContent } content.push(pluginContent); if (plugins[i].exclusive) { break; } } } return content; } return { hookPlugin: hookPlugin, contentForMessage: contentForMessage } }]); plugins.factory('youtubePlugin', [function() { var contentForMessage = function(message) { if (message.indexOf('youtube.com') != -1) { var index = message.indexOf("?v="); var token = message.substr(index+3); return '' } return null; } return { contentForMessage: contentForMessage, exclusive: true } }]); plugins.factory('urlPlugin', [function() { var contentForMessage = function(message) { var urlPattern = /(http|ftp|https):\/\/[\w-]+(\.[\w-]+)+([\w.,@?^=%&:\/~+#-]*[\w@?^=%&\/~+#-])?/; var url = message.match(urlPattern); if (url) { return '' + message + ''; } return null; } return { contentForMessage: contentForMessage, exclusive: false } }]); plugins.factory('imagePlugin', [function() { var contentForMessage = function(message) { var urls = message.match(/https?:\/\/[^\s]*\.(jpg|png|gif)\b/) if (urls != null) { var url = urls[0]; /* Actually parse one url per message */ return ''; } return null; } return { contentForMessage: contentForMessage } }]);