diff --git a/vue/src/composables/useFeeds.js b/vue/src/composables/useFeeds.js index 7339260..ea5d876 100644 --- a/vue/src/composables/useFeeds.js +++ b/vue/src/composables/useFeeds.js @@ -120,7 +120,31 @@ async function getReadable(feed, index) { el.remove() } }) + // Alpine.js widget overlays: x-cloak marks elements that should be hidden + // until Alpine.js initialises (prevents FOUC). These are always widget + // containers (e.g. taz's "taz schneller googeln" promo), never article + // content, so they're safe to remove unconditionally. + doc.querySelectorAll('[x-cloak]').forEach(el => el.remove()) + // taz subscription promo blocks: a standalone
whose link(s) point + // to an /abo/ subscription page. Only climb to
, not
, + // to avoid accidentally removing the main article body. + doc.querySelectorAll('a[href*="/abo/"]').forEach(el => { + const container = el.closest('section') + if (container) container.remove() + }) + // taz "Mehr zum Thema" related-articles teaser section. + doc.querySelectorAll('#articleTeaser').forEach(el => el.remove()) + // taz subsidiary magazine promo blocks (e.g. taz FUTURZWEI): the promo + //
carries an aria-label containing "Abo". + doc.querySelectorAll('article[aria-label*="Abo"]').forEach(el => { + const container = el.closest('section') ?? el + container.remove() + }) const article = new Readability(doc).parse(); + if (!article) { + showMessageForXSeconds('Could not extract readable content.', 5) + return + } feeds.value[index].content = article.content; feeds.value[index].readable = true; } catch (error) {