summaryrefslogtreecommitdiff
path: root/app/lib
diff options
context:
space:
mode:
authorluxagraf <sng@luxagraf.net>2016-02-18 09:35:45 -0500
committerluxagraf <sng@luxagraf.net>2016-02-18 09:35:45 -0500
commitf520b80d69a9c51478a26f7c7e98a860e4e64c3d (patch)
treea30d4da7224e6b1b1b1ea2bc2ce21e5d8c3396f7 /app/lib
parent3b6588ec9bdcc9a2a0099b5568923485079a4dec (diff)
added AMP template filter to replace img tags and strip out the
disallowed HTML. Because somewhere to someone it makes sense to speed up pages by requiring javascript.
Diffstat (limited to 'app/lib')
-rw-r--r--app/lib/templatetags/templatetags/amp.py39
1 files changed, 39 insertions, 0 deletions
diff --git a/app/lib/templatetags/templatetags/amp.py b/app/lib/templatetags/templatetags/amp.py
new file mode 100644
index 0000000..9c6f118
--- /dev/null
+++ b/app/lib/templatetags/templatetags/amp.py
@@ -0,0 +1,39 @@
+from django import template
+from PIL import Image
+from io import BytesIO
+try:
+ import Image
+ import ImageFile
+except ImportError:
+ try:
+ from PIL import Image
+ from PIL import ImageFile
+ except ImportError:
+ raise ImportError("Could not import the Python Imaging Library.")
+
+import requests
+from bs4 import BeautifulSoup
+from builder.sanitizer import Sanitizer
+
+register = template.Library()
+
+
+def remove_img_tags(text):
+ soup = BeautifulSoup(text, 'xml')
+ for img in soup.find_all('img'):
+ r = requests.get(img['src'])
+ i = Image.open(BytesIO(r.content))
+ width, height = i.size
+ try:
+ new_tag = soup.new_tag("amp-img", alt=img["alt"], width=width, height=height, src=img['src'], srcset=img['srcset'])
+ except:
+ new_tag = soup.new_tag("amp-img", alt=img["alt"], width=width, height=height, src=img['src'])
+ img.replace_with(new_tag)
+ return soup.prettify()
+
+
+def do_amp(text):
+ bs = remove_img_tags(text)
+ return Sanitizer().strip(bs)
+
+register.filter('amp', do_amp)