diff --git a/index.js b/index.js index 22e48dd..c69279d 100644 --- a/index.js +++ b/index.js @@ -132,7 +132,12 @@ export default async function now() { const imageId = `${item.id}-image` const videoId = `${item.id}-video` if (latest.image) { - // html image replacement + // html image replacement - match by data-service attribute to allow repeated updates + newNow = newNow.replace( + new RegExp(`(]*data-service=["']${item.id}["'][^>]*\\bsrc=["'])[^"']*?(["'][^>]*>)`, 'gi'), + `$1${latest.image}$2`, + ) + // also handle initial placeholder case newNow = newNow.replace( new RegExp(`(]+src=["'])${imageId}(["'][^>]*>)`, 'gi'), `$1${latest.image}$2`, @@ -143,7 +148,12 @@ export default async function now() { `$1${latest.image}$2`, ) } else { - // remove img tags if no image available (handle multi-line tags and any attribute order) + // remove img tags if no image available - match by data-service attribute + newNow = newNow.replace( + new RegExp(`\\s*]*\\bdata-service=["']${item.id}["'][^>]*>\\s*`, 'gis'), + '', + ) + // also remove by placeholder src newNow = newNow.replace( new RegExp(`\\s*]*\\bsrc=["']${imageId}["'][^>]*>\\s*`, 'gis'), '', @@ -156,13 +166,23 @@ export default async function now() { } if (latest.video) { - // html video replacement + // html video replacement - match by data-service attribute to allow repeated updates + newNow = newNow.replace( + new RegExp(`(]*data-service=["']${item.id}["'][^>]*\\bsrc=["'])[^"']*?(["'][^>]*>)`, 'gi'), + `$1${latest.video}$2`, + ) + // also handle initial placeholder case newNow = newNow.replace( new RegExp(`(]+src=["'])${videoId}(["'][^>]*>)`, 'gi'), `$1${latest.video}$2`, ) } else { - // remove video tags if no video available + // remove video tags if no video available - match by data-service attribute + newNow = newNow.replace( + new RegExp(`\\s*]*\\bdata-service=["']${item.id}["'][^>]*>[\\s\\S]*?\\s*`, 'gis'), + '', + ) + // also remove by placeholder src newNow = newNow.replace( new RegExp(`\\s*]*\\bsrc=["']${videoId}["'][^>]*>[\\s\\S]*?\\s*`, 'gis'), '',