From 81189f4e1d53994e26b97aed78fe3f834535e4e6 Mon Sep 17 00:00:00 2001 From: David Lynch Date: Sat, 22 Mar 2025 00:16:11 -0500 Subject: [PATCH] xenforo: minor fixes around images in spoilers --- sites/xenforo.py | 47 +++++++++++++++++++---------------------------- 1 file changed, 19 insertions(+), 28 deletions(-) diff --git a/sites/xenforo.py b/sites/xenforo.py index 73c6479..c572bca 100644 --- a/sites/xenforo.py +++ b/sites/xenforo.py @@ -296,6 +296,14 @@ class XenForo(Site): del tag['style'] for tag in post.select('.quoteExpand, .bbCodeBlock-expandLink, .bbCodeBlock-shrinkLink'): tag.decompose() + for tag in post.find_all('noscript'): + # TODO: strip the noscript from these? + # mostly this will be the lazyload images + tag.decompose() + for tag in post.select('img.lazyload[data-src]'): + tag['src'] = tag['data-url'] + if tag['src'].startswith('proxy.php'): + tag['src'] = f"{self.domain}/{tag['src']}" self._clean(post, base) self._clean_spoilers(post, chapterid) return post.prettify() @@ -303,36 +311,19 @@ class XenForo(Site): def _clean_spoilers(self, post, chapterid): # spoilers don't work well, so turn them into epub footnotes for spoiler in post.find_all(class_='ToggleTriggerAnchor'): - spoilerTarget = spoiler.find(class_='SpoilerTarget') - - # This is a bit of a hack, but it works - # This downloads the spoiler image - img_exist = list(spoilerTarget.find_all('img')) - if len(img_exist) > 0: - for i in img_exist: - # For some weird reason, the images are duplicated, so this should skip some - if img_exist.index(i) % 2 == 0: - i.decompose() - else: - if not i.has_attr('src'): - i['src'] = i['data-url'] - if i['src'].startswith('proxy.php'): - i['src'] = f"{self.domain}/{i['src']}" - spoiler.replace_with(spoiler.find(class_='SpoilerTarget')) + spoiler_title = spoiler.find(class_='SpoilerTitle') + if self.options['skip_spoilers']: + link = self._footnote(spoiler.find(class_='SpoilerTarget').extract(), chapterid) + if spoiler_title: + link.string = spoiler_title.get_text() else: - spoiler_title = spoiler.find(class_='SpoilerTitle') - if self.options['skip_spoilers']: - link = self._footnote(spoiler.find(class_='SpoilerTarget').extract(), chapterid) - if spoiler_title: - link.string = spoiler_title.get_text() + if spoiler_title: + link = f'[SPOILER: {spoiler_title.get_text()}]' else: - if spoiler_title: - link = f'[SPOILER: {spoiler_title.get_text()}]' - else: - link = '[SPOILER]' - new_spoiler = self._new_tag('div', class_="leech-spoiler") - new_spoiler.append(link) - spoiler.replace_with(new_spoiler) + link = '[SPOILER]' + new_spoiler = self._new_tag('div', class_="leech-spoiler") + new_spoiler.append(link) + spoiler.replace_with(new_spoiler) def _post_date(self, post): maybe_date = post.find(class_='DateTime')