Revert "Revert "remove links that can't produce a thumb""
This reverts commit 4895ded8b5.
This commit is contained in:
@@ -426,34 +426,10 @@ describe('parseEmbedPlayerFromUrl', () => {
|
|||||||
'https://giphy.com/gif/some-random-gif-name-gifId',
|
'https://giphy.com/gif/some-random-gif-name-gifId',
|
||||||
'https://giphy.com/gifs/',
|
'https://giphy.com/gifs/',
|
||||||
|
|
||||||
'https://media.giphy.com/media/gifId/giphy.gif',
|
|
||||||
'https://media0.giphy.com/media/gifId/giphy.gif',
|
|
||||||
'https://media1.giphy.com/media/gifId/giphy.gif',
|
|
||||||
'https://media2.giphy.com/media/gifId/giphy.gif',
|
|
||||||
'https://media3.giphy.com/media/gifId/giphy.gif',
|
|
||||||
'https://media4.giphy.com/media/gifId/giphy.gif',
|
|
||||||
'https://media5.giphy.com/media/gifId/giphy.gif',
|
|
||||||
'https://media1.google.com/media/gifId/giphy.gif',
|
|
||||||
|
|
||||||
'https://media.giphy.com/media/trackingId/gifId/giphy.gif',
|
|
||||||
|
|
||||||
'https://i.giphy.com/media/gifId/giphy.gif',
|
|
||||||
'https://i.giphy.com/media/gifId/giphy.gif',
|
|
||||||
'https://i.giphy.com/gifId.gif',
|
|
||||||
'https://i.giphy.com/gifId.gif',
|
|
||||||
|
|
||||||
'https://media1.tenor.com/m/gifId/someName.gif',
|
|
||||||
'https://media.tenor.com/m/gifId/someName.mp4',
|
|
||||||
'https://media1.tenor.com/m/gifId',
|
|
||||||
|
|
||||||
'https://tenor.com/view/gifId',
|
'https://tenor.com/view/gifId',
|
||||||
'https://tenor.com/notView/gifId',
|
'https://tenor.com/notView/gifId',
|
||||||
'https://tenor.com/view',
|
'https://tenor.com/view',
|
||||||
'https://tenor.com/view/gifId.gif',
|
'https://tenor.com/view/gifId.gif',
|
||||||
|
|
||||||
'https://c.tenor.com/gifId/tenor.gif',
|
|
||||||
'https://c.tenor.com/gifId/tenor.webp',
|
|
||||||
'https://c.tenor.com/gifId/tenor.mp4',
|
|
||||||
]
|
]
|
||||||
|
|
||||||
const outputs = [
|
const outputs = [
|
||||||
@@ -580,63 +556,7 @@ describe('parseEmbedPlayerFromUrl', () => {
|
|||||||
|
|
||||||
{
|
{
|
||||||
type: 'gif',
|
type: 'gif',
|
||||||
playerUri: 'https://i.giphy.com/media/gifId/giphy.gif',
|
playerUri: 'https://i.giphy.com/media/gifId/giphy.webp',
|
||||||
},
|
|
||||||
undefined,
|
|
||||||
undefined,
|
|
||||||
|
|
||||||
{
|
|
||||||
type: 'gif',
|
|
||||||
playerUri: 'https://i.giphy.com/media/gifId/giphy.gif',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'gif',
|
|
||||||
playerUri: 'https://i.giphy.com/media/gifId/giphy.gif',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'gif',
|
|
||||||
playerUri: 'https://i.giphy.com/media/gifId/giphy.gif',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'gif',
|
|
||||||
playerUri: 'https://i.giphy.com/media/gifId/giphy.gif',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'gif',
|
|
||||||
playerUri: 'https://i.giphy.com/media/gifId/giphy.gif',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'gif',
|
|
||||||
playerUri: 'https://i.giphy.com/media/gifId/giphy.gif',
|
|
||||||
},
|
|
||||||
undefined,
|
|
||||||
undefined,
|
|
||||||
|
|
||||||
{
|
|
||||||
type: 'gif',
|
|
||||||
playerUri: 'https://i.giphy.com/media/gifId/giphy.gif',
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
|
||||||
type: 'gif',
|
|
||||||
playerUri: 'https://i.giphy.com/media/gifId/giphy.gif',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'gif',
|
|
||||||
playerUri: 'https://i.giphy.com/media/gifId/giphy.gif',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'gif',
|
|
||||||
playerUri: 'https://i.giphy.com/media/gifId/giphy.gif',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'gif',
|
|
||||||
playerUri: 'https://i.giphy.com/media/gifId/giphy.gif',
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
|
||||||
type: 'gif',
|
|
||||||
playerUri: 'https://media1.tenor.com/m/gifId/someName.gif',
|
|
||||||
},
|
},
|
||||||
undefined,
|
undefined,
|
||||||
undefined,
|
undefined,
|
||||||
@@ -651,16 +571,6 @@ describe('parseEmbedPlayerFromUrl', () => {
|
|||||||
type: 'gif',
|
type: 'gif',
|
||||||
playerUri: 'https://tenor.com/view/gifId.gif',
|
playerUri: 'https://tenor.com/view/gifId.gif',
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
|
||||||
type: 'gif',
|
|
||||||
playerUri: 'https://c.tenor.com/gifId/tenor.gif',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'gif',
|
|
||||||
playerUri: 'https://c.tenor.com/gifId/tenor.webp',
|
|
||||||
},
|
|
||||||
undefined,
|
|
||||||
]
|
]
|
||||||
|
|
||||||
it('correctly grabs the correct id from uri', () => {
|
it('correctly grabs the correct id from uri', () => {
|
||||||
|
|||||||
@@ -174,81 +174,23 @@ export function parseEmbedPlayerFromUrl(
|
|||||||
|
|
||||||
if (urlp.hostname === 'giphy.com' || urlp.hostname === 'www.giphy.com') {
|
if (urlp.hostname === 'giphy.com' || urlp.hostname === 'www.giphy.com') {
|
||||||
const [_, gifs, nameAndId] = urlp.pathname.split('/')
|
const [_, gifs, nameAndId] = urlp.pathname.split('/')
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* nameAndId is a string that consists of the name (dash separated) and the id of the gif (the last part of the name)
|
* nameAndId is a string that consists of the name (dash separated) and the id of the gif (the last part of the name)
|
||||||
* We want to get the id of the gif, then direct to media.giphy.com/media/{id}/giphy.gif so we can
|
* We want to get the id of the gif, then direct to media.giphy.com/media/{id}/giphy.gif so we can
|
||||||
* use it in an <Image> component
|
* use it in an <Image> component
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (gifs === 'gifs' && nameAndId) {
|
if (gifs === 'gifs' && nameAndId) {
|
||||||
const id = nameAndId.split('-').pop()
|
const id = nameAndId.split('-').pop()
|
||||||
|
|
||||||
if (id) {
|
if (id) {
|
||||||
return {
|
return {
|
||||||
type: 'gif',
|
type: 'gif',
|
||||||
playerUri: `https://i.giphy.com/media/${id}/giphy.gif`,
|
playerUri: `https://i.giphy.com/media/${id}/giphy.webp`,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// There are five possible hostnames that also can be giphy urls: media.giphy.com and media0-4.giphy.com
|
|
||||||
// These can include (presumably) a tracking id in the path name, so we have to check for that as well
|
|
||||||
if (/media(?:[0-4]\.giphy\.com|\.giphy\.com)/gm.test(urlp.hostname)) {
|
|
||||||
// We can link directly to the gif, if its a proper link
|
|
||||||
const [_, media, trackingOrId, idOrFilename, filename] =
|
|
||||||
urlp.pathname.split('/')
|
|
||||||
|
|
||||||
if (media === 'media') {
|
|
||||||
if (idOrFilename === 'giphy.gif' || idOrFilename === 'giphy.gif') {
|
|
||||||
return {
|
|
||||||
type: 'gif',
|
|
||||||
playerUri: `https://i.giphy.com/media/${trackingOrId}/giphy.gif`,
|
|
||||||
}
|
|
||||||
} else if (filename === 'giphy.gif' || filename === 'giphy.gif') {
|
|
||||||
return {
|
|
||||||
type: 'gif',
|
|
||||||
playerUri: `https://i.giphy.com/media/${idOrFilename}/giphy.gif`,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Finally, we should see if it is a link to i.giphy.com. These links don't necessarily end in .gif but can also
|
|
||||||
// be .webp
|
|
||||||
if (urlp.hostname === 'i.giphy.com' || urlp.hostname === 'www.i.giphy.com') {
|
|
||||||
const [_, mediaOrFilename, filename] = urlp.pathname.split('/')
|
|
||||||
|
|
||||||
if (mediaOrFilename === 'media' && filename) {
|
|
||||||
return {
|
|
||||||
type: 'gif',
|
|
||||||
playerUri: `https://i.giphy.com/media/${
|
|
||||||
filename.split('.')[0]
|
|
||||||
}/giphy.gif`,
|
|
||||||
}
|
|
||||||
} else if (mediaOrFilename) {
|
|
||||||
return {
|
|
||||||
type: 'gif',
|
|
||||||
playerUri: `https://i.giphy.com/media/${
|
|
||||||
mediaOrFilename.split('.')[0]
|
|
||||||
}/giphy.gif`,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (urlp.hostname === 'media1.tenor.com') {
|
|
||||||
const parts = urlp.pathname.split('/')
|
|
||||||
const filename = parts[3]
|
|
||||||
|
|
||||||
if (parts.length === 4 && filename?.split('.').pop() === 'gif') {
|
|
||||||
return {
|
|
||||||
type: 'gif',
|
|
||||||
playerUri: url,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (urlp.hostname === 'tenor.com' || urlp.hostname === 'www.tenor.com') {
|
if (urlp.hostname === 'tenor.com' || urlp.hostname === 'www.tenor.com') {
|
||||||
const [_, path, filename] = urlp.pathname.split('/')
|
const [_, path, filename] = urlp.pathname.split('/')
|
||||||
|
|
||||||
@@ -261,21 +203,6 @@ export function parseEmbedPlayerFromUrl(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (urlp.host === 'c.tenor.com') {
|
|
||||||
const [_, id, filename] = urlp.pathname.split('/')
|
|
||||||
|
|
||||||
if (id && filename) {
|
|
||||||
const ext = filename.split('.').pop()
|
|
||||||
|
|
||||||
if (ext === 'gif' || ext === 'webp') {
|
|
||||||
return {
|
|
||||||
type: 'gif',
|
|
||||||
playerUri: url,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getPlayerHeight({
|
export function getPlayerHeight({
|
||||||
|
|||||||
Reference in New Issue
Block a user