diff options
author | Wojciech Polak <polak@gnu.org> | 2015-03-14 12:56:59 +0100 |
---|---|---|
committer | Wojciech Polak <polak@gnu.org> | 2015-03-14 12:56:59 +0100 |
commit | 60a3baddd747dbbadd0b7d2c38c4cd6b54a1fbf9 (patch) | |
tree | 8a4b751cd3d69cde3d2b47ec0a89cfab9ada050d | |
parent | a405da9d2ecfda4103f684e4b76442283ef7f9e1 (diff) | |
download | glifestream-60a3baddd747dbbadd0b7d2c38c4cd6b54a1fbf9.tar.gz glifestream-60a3baddd747dbbadd0b7d2c38c4cd6b54a1fbf9.tar.bz2 |
Add fix_ampersands.
-rw-r--r-- | glifestream/stream/templatetags/gls_filters.py | 17 | ||||
-rw-r--r-- | glifestream/stream/views.py | 5 | ||||
-rw-r--r-- | glifestream/templates/stream-pure.html | 6 | ||||
-rw-r--r-- | glifestream/templates/stream.atom | 8 | ||||
-rw-r--r-- | glifestream/templates/stream.html | 2 | ||||
-rw-r--r-- | glifestream/templates/stream.json | 2 | ||||
-rw-r--r-- | glifestream/usettings/templates/oauth.html | 2 | ||||
-rw-r--r-- | glifestream/utils/html.py | 4 |
8 files changed, 30 insertions, 16 deletions
diff --git a/glifestream/stream/templatetags/gls_filters.py b/glifestream/stream/templatetags/gls_filters.py index 01b6db0..f5b4ddc 100644 --- a/glifestream/stream/templatetags/gls_filters.py +++ b/glifestream/stream/templatetags/gls_filters.py @@ -16,16 +16,18 @@ from django import template register = template.Library() +import re import math import time import datetime import calendar from django.conf import settings +from django.utils.encoding import force_text from django.utils.safestring import mark_safe from django.utils.translation import ugettext as _ from django.utils.translation import ungettext from django.template.defaultfilters import date as ddate -from django.template.defaultfilters import urlencode +from django.template.defaultfilters import urlencode, stringfilter from glifestream.utils.slugify import slugify from glifestream.stream import media from glifestream.apis import * @@ -162,3 +164,16 @@ def get_relative_time(t): def encode_json(content): enc = json.JSONEncoder() return mark_safe(enc.encode(content)) + + +unencoded_ampersands_re = re.compile(r'&(?!(\w+|#\d+);)') + +def fix_ampersands(value): + return unencoded_ampersands_re.sub('&', force_text(value)) + + +@register.filter('gls_fix_ampersands', is_safe=True) +@stringfilter +def fix_ampersands_filter(value): + """Replaces ampersands with ``&`` entities.""" + return fix_ampersands(value) diff --git a/glifestream/stream/views.py b/glifestream/stream/views.py index b766888..0016e29 100644 --- a/glifestream/stream/views.py +++ b/glifestream/stream/views.py @@ -27,13 +27,12 @@ from django.http import HttpResponsePermanentRedirect from django.http import Http404 from django.shortcuts import render_to_response from django.template.loader import render_to_string -from django.template.defaultfilters import fix_ampersands from django.template.defaultfilters import truncatewords from django.utils.translation import ugettext as _ from django.utils.html import escape, strip_spaces_between_tags from django.views.decorators.cache import never_cache -from glifestream.stream.templatetags.gls_filters import gls_content -from glifestream.stream.templatetags.gls_filters import gls_slugify +from glifestream.stream.templatetags.gls_filters import \ + (gls_content, gls_slugify, fix_ampersands) from glifestream.stream.models import Service, Entry, Favorite, List from glifestream.stream import media, pshb from glifestream.utils import common diff --git a/glifestream/templates/stream-pure.html b/glifestream/templates/stream-pure.html index 493d254..81c5de4 100644 --- a/glifestream/templates/stream-pure.html +++ b/glifestream/templates/stream-pure.html @@ -1,5 +1,5 @@ {% load i18n media gls_filters %} -{% load url from future %} +{% load url from future %}{% load firstof from future %} {% for entry in entries %} <article id="entry-{{ entry.id }}" class="hentry e-{% firstof entry.service.cls entry.service.api %}{% if not entry.service.public %} private{% endif %}"> {% spaceless %} @@ -17,13 +17,13 @@ {% endspaceless %} {% ifequal entry.service.display "both" %} <header class="entry-title">{{ ""|gls_title:entry }}</header> - <div class="entry-content">{{ ""|gls_content:entry|fix_ampersands }}</div> + <div class="entry-content">{{ ""|gls_content:entry|gls_fix_ampersands }}</div> {% else %} {% ifequal entry.service.display "title" %} <header class="entry-title">{{ ""|gls_title:entry }} <a href="#" class="expand-content" title="{% trans "Expand content" %}"></a></header> <div class="entry-content" style="display:none"></div> {% else %} - <div class="entry-content">{{ ""|gls_content:entry|fix_ampersands }}</div> + <div class="entry-content">{{ ""|gls_content:entry|gls_fix_ampersands }}</div> {% endifequal %} {% endifequal %} <footer class="entry-info"> diff --git a/glifestream/templates/stream.atom b/glifestream/templates/stream.atom index bfc0b8b..a9907fe 100644 --- a/glifestream/templates/stream.atom +++ b/glifestream/templates/stream.atom @@ -1,4 +1,4 @@ -{% load gls_filters %}<?xml version="1.0" encoding="UTF-8"?> +{% load firstof from future %}{% load gls_filters %}<?xml version="1.0" encoding="UTF-8"?> <feed xmlns="http://www.w3.org/2005/Atom" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:georss="http://www.georss.org/georss" @@ -30,13 +30,13 @@ <category term="{{ entry.service.cls }}"/> <link rel="alternate" type="text/html" href="{{ entry.gls_absolute_link }}"/> {% if entry.link_image %}<link rel="image" href="{{ entry.link_image|gls_media }}"/>{% endif %} - <title>{{ entry|gls_title:entry|striptags|fix_ampersands }}</title>{% ifnotequal entry.service.display "title" %} + <title>{{ entry|gls_title:entry|striptags|gls_fix_ampersands }}</title>{% ifnotequal entry.service.display "title" %} <content type="xhtml" xml:space="preserve"> <div xmlns="http://www.w3.org/1999/xhtml"> - {{ entry|gls_content:entry|fix_ampersands|safe }} + {{ entry|gls_content:entry|gls_fix_ampersands|safe }} </div> </content> -{% endifnotequal %}{{ entry|gls_mediarss:entry|fix_ampersands }}{% if entry.geolat and entry.geolng %} +{% endifnotequal %}{{ entry|gls_mediarss:entry|gls_fix_ampersands }}{% if entry.geolat and entry.geolng %} <georss:point>{{ entry.geolat }} {{ entry.geolng }}</georss:point> <geo:lat>{{ entry.geolat }}</geo:lat> <geo:long>{{ entry.geolng }}</geo:long>{% endif %} diff --git a/glifestream/templates/stream.html b/glifestream/templates/stream.html index 7b4573b..140390f 100644 --- a/glifestream/templates/stream.html +++ b/glifestream/templates/stream.html @@ -1,5 +1,5 @@ {% extends "base.html" %} -{% load i18n %}{% load url from future %} +{% load i18n %}{% load url from future %}{% load firstof from future %} {% block sidebar %} <aside id="sidebar"> diff --git a/glifestream/templates/stream.json b/glifestream/templates/stream.json index 90227da..2f03365 100644 --- a/glifestream/templates/stream.json +++ b/glifestream/templates/stream.json @@ -1,4 +1,4 @@ -{% load gls_filters %}{% if callback %}{{ callback }}({% endif %}{ +{% load firstof from future %}{% load gls_filters %}{% if callback %}{{ callback }}({% endif %}{ "title": "{% firstof page.title "Lifestream" %}", "updated": "{{ page.updated|gls_hdate }}", "generator": "gLifestream", diff --git a/glifestream/usettings/templates/oauth.html b/glifestream/usettings/templates/oauth.html index 2b9f095..5aac634 100644 --- a/glifestream/usettings/templates/oauth.html +++ b/glifestream/usettings/templates/oauth.html @@ -1,4 +1,4 @@ -{% load i18n media %}<!DOCTYPE html> +{% load i18n media %}{% load firstof from future %}<!DOCTYPE html> <html> <head> diff --git a/glifestream/utils/html.py b/glifestream/utils/html.py index 9442337..9fe6b99 100644 --- a/glifestream/utils/html.py +++ b/glifestream/utils/html.py @@ -1,4 +1,4 @@ -# gLifestream Copyright (C) 2009, 2010 Wojciech Polak +# gLifestream Copyright (C) 2009, 2010, 2015 Wojciech Polak # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the @@ -14,7 +14,7 @@ # with this program. If not, see <http://www.gnu.org/licenses/>. try: - from BeautifulSoup import BeautifulSoup + from bs4 import BeautifulSoup except ImportError: BeautifulSoup = None |