export default (elm) => { if (!elm || (elm.tagName && elm.tagName.toLowerCase() === 'article')) { return null; } const content = elm.textContent || ''; if (!content.match(/^https?:\/\//) || !isUrl(content)) { return null; } if (isImage(content)) { return { type: 'embed', embedType: 'image', src: content }; } const parsed = parseEmbeds(content); if (!parsed || !isValidEmbedType(parsed)) { return null; } return objectAssign({}, parsed, { embedType: parsed.type, type: 'embed' }); };
test('parseUrl', t => { t.equals(parseUrl(), null); t.equals(parseUrl({}), null); t.equals(parseUrl({ textContent: 'not a url' }), null); const fbUrl = 'https://www.facebook.com/zuck/posts/10102593740125791'; const actualFb = parseUrl({ textContent: fbUrl }); const expectedFb = objectAssign(parseEmbeds(fbUrl), { type: 'embed', embedType: 'facebook' }); t.deepEqual(actualFb, expectedFb); const imageUrl = 'http://avatarbox.net/avatars/img32/test_card_avatar_picture_88303.jpg'; const actualImage = parseUrl({ textContent: imageUrl }); const expectedImage = { type: 'embed', embedType: 'image', src: imageUrl }; t.deepEqual(actualImage, expectedImage); t.end(); });