Merge pull request #137 from alistairmagee/clean_summary
Add "Clean Summary" plugin
This commit is contained in:
34
clean_summary/README.md
Normal file
34
clean_summary/README.md
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
#Clean Summary Plugin#
|
||||||
|
|
||||||
|
Plugin to clean your summary of excess images. Images can take up much more
|
||||||
|
space than text and lead to summaries being different sizes on archive and
|
||||||
|
index pages. With this plugin you can specify a maximum number of images that
|
||||||
|
will appear in your summaries.
|
||||||
|
|
||||||
|
There is also an option to include a minimum of one image.
|
||||||
|
|
||||||
|
##Settings##
|
||||||
|
|
||||||
|
This plugin has two settings. `CLEAN_SUMMARY_MAXIMUM` which takes an int, and
|
||||||
|
`CLEAN_SUMMARY_MINIMUM_ONE` which takes a boolean. They default to 0 and False.
|
||||||
|
|
||||||
|
`CLEAN_SUMMARY_MAXIMUM` sets the maximum number of images that will appear in
|
||||||
|
your summary.
|
||||||
|
|
||||||
|
if `CLEAN_SUMMARY_MINIMUM_ONE` is set to `True` and your summary doesn't already
|
||||||
|
contain an image, the plugin will add the first image in your article (if one
|
||||||
|
exists) to the beginning of the summary.
|
||||||
|
|
||||||
|
##Requirements##
|
||||||
|
|
||||||
|
Requires Beautiful Soup:
|
||||||
|
|
||||||
|
pip install BeautifulSoup4
|
||||||
|
|
||||||
|
|
||||||
|
##Usage with Summary Plugin##
|
||||||
|
|
||||||
|
If using the summary plugin, make sure summary appears in your plugins before
|
||||||
|
clean summary. Eg.
|
||||||
|
|
||||||
|
PLUGINS = ['summary', 'clean_summary', ... ]
|
||||||
1
clean_summary/__init__.py
Normal file
1
clean_summary/__init__.py
Normal file
@@ -0,0 +1 @@
|
|||||||
|
from .clean_summary import *
|
||||||
38
clean_summary/clean_summary.py
Normal file
38
clean_summary/clean_summary.py
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
"""
|
||||||
|
Clean Summary
|
||||||
|
-------------
|
||||||
|
|
||||||
|
adds option to specify maximum number of images to appear in article summary
|
||||||
|
also adds option to include an image by default if one exists in your article
|
||||||
|
"""
|
||||||
|
|
||||||
|
from pelican import signals
|
||||||
|
from pelican.contents import Content, Article
|
||||||
|
from bs4 import BeautifulSoup
|
||||||
|
from six import text_type
|
||||||
|
|
||||||
|
def clean_summary(instance):
|
||||||
|
if "CLEAN_SUMMARY_MAXIMUM" in instance.settings:
|
||||||
|
maximum_images = instance.settings["CLEAN_SUMMARY_MAXIMUM"]
|
||||||
|
else:
|
||||||
|
maximum_images = 0
|
||||||
|
if "CLEAN_SUMMARY_MINIMUM_ONE" in instance.settings:
|
||||||
|
minimum_one = instance.settings['CLEAN_SUMMARY_MINIMUM_ONE']
|
||||||
|
else:
|
||||||
|
minimum_one = False
|
||||||
|
if type(instance) == Article:
|
||||||
|
summary = instance.summary
|
||||||
|
summary = BeautifulSoup(instance.summary, 'html.parser')
|
||||||
|
images = summary.findAll('img')
|
||||||
|
if (len(images) > maximum_images):
|
||||||
|
for image in images[maximum_images:]:
|
||||||
|
image.extract()
|
||||||
|
if len(images) < 1 and minimum_one: #try to find one
|
||||||
|
content = BeautifulSoup(instance.content, 'html.parser')
|
||||||
|
first_image = content.find('img')
|
||||||
|
if first_image:
|
||||||
|
summary.insert(0, first_image)
|
||||||
|
instance._summary = text_type(summary)
|
||||||
|
|
||||||
|
def register():
|
||||||
|
signals.content_object_init.connect(clean_summary)
|
||||||
Reference in New Issue
Block a user