/* * Media analyzers ported from the old arkham:comments-ui package * (lib/services/media-analyzers). Given a comment's text, detect an embeddable * image or YouTube URL and return { type, content }. First match wins. */ const imageAnalyzer = { name: 'image', getMediaFromContent(content) { if (content) { const urls = content.match(/(\S+\.[^/\s]+(\/\S+|\/|))(.jpg|.png|.gif)/g); if (urls && urls[0]) return urls[0]; } return ''; } }; const youtubeAnalyzer = { name: 'youtube', getMediaFromContent(content) { const parts = (content || '').match(/(?:https?:\/\/)?(?:www\.youtube\.com|youtu\.?be)\/([\w=?]+)/); let mediaContent = ''; if (parts && parts[1]) { let id = parts[1]; if (id.indexOf('v=') > -1) { const subParts = id.match(/v=([\w]+)/); if (subParts && subParts[1]) id = subParts[1]; } mediaContent = `https://www.youtube.com/embed/${id}`; } return mediaContent; } }; const analyzers = [imageAnalyzer, youtubeAnalyzer]; // Returns { type, content } or {}. export default function getMediaFromContent(content) { for (let i = 0; i < analyzers.length; i += 1) { const mediaContent = analyzers[i].getMediaFromContent(content); if (mediaContent) return { type: analyzers[i].name, content: mediaContent }; } return {}; }