# -*- coding: utf-8 -*- from pelican import signals, contents from pelican.utils import truncate_html_words from pelican.generators import ArticlesGenerator def insert_read_more_link(instance): if type(instance) != contents.Article: return if not instance._content: instance.has_summary = False return ANOTHER_READ_MORE_LINK = instance.settings.get('ANOTHER_READ_MORE_LINK', 'Continue ->') READ_MORE_ID = instance.settings.get('READ_MORE_ID', 'read_more_link') ANOTHER_READ_MORE_LINK_FORMAT = instance.settings.get('ANOTHER_READ_MORE_LINK_FORMAT', '{text}') content = instance._update_content(instance._content, instance.settings.get('SITEURL')) marker_location = content.find("") if marker_location == -1: if hasattr(instance, '_summary') or 'summary' in instance.metadata: summary = instance._summary else: instance._summary = instance._content instance.has_summary = True return else: summary = content[0:marker_location] if ANOTHER_READ_MORE_LINK: read_more_text = ANOTHER_READ_MORE_LINK.replace('{title}', instance.title) if instance.settings.get('RELATIVE_URLS'): read_more_link = ANOTHER_READ_MORE_LINK_FORMAT.format(url=instance.url, text=read_more_text) else: absolute_url = '{}/{}'.format(instance.settings.get('SITEURL'), instance.url) read_more_link = ANOTHER_READ_MORE_LINK_FORMAT.format(url=absolute_url, text=read_more_text) # with id to link to the text just after the "read more" link instance._content = '{}{}'.format(summary, READ_MORE_ID, content[marker_location:]) summary += read_more_link # default_status was added to Pelican Content objects after 3.7.1. # Its use here is strictly to decide on how to set the summary. # There's probably a better way to do this but I couldn't find it. if hasattr(instance, 'default_status'): instance.metadata['summary'] = summary else: instance._summary = summary instance.has_summary = True def run_plugin(generators): for generator in generators: if isinstance(generator, ArticlesGenerator): for article in generator.articles: insert_read_more_link(article) def register(): try: signals.all_generators_finalized.connect(run_plugin) except AttributeError: # NOTE: This may result in #314 so shouldn't really be relied on # https://github.com/getpelican/pelican-plugins/issues/314 signals.content_object_init.connect(insert_read_more_link)