aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWojciech Polak <polak@gnu.org>2015-03-14 12:56:59 +0100
committerWojciech Polak <polak@gnu.org>2015-03-14 12:56:59 +0100
commit60a3baddd747dbbadd0b7d2c38c4cd6b54a1fbf9 (patch)
tree8a4b751cd3d69cde3d2b47ec0a89cfab9ada050d
parenta405da9d2ecfda4103f684e4b76442283ef7f9e1 (diff)
downloadglifestream-60a3baddd747dbbadd0b7d2c38c4cd6b54a1fbf9.tar.gz
glifestream-60a3baddd747dbbadd0b7d2c38c4cd6b54a1fbf9.tar.bz2
Add fix_ampersands.
-rw-r--r--glifestream/stream/templatetags/gls_filters.py17
-rw-r--r--glifestream/stream/views.py5
-rw-r--r--glifestream/templates/stream-pure.html6
-rw-r--r--glifestream/templates/stream.atom8
-rw-r--r--glifestream/templates/stream.html2
-rw-r--r--glifestream/templates/stream.json2
-rw-r--r--glifestream/usettings/templates/oauth.html2
-rw-r--r--glifestream/utils/html.py4
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('&amp;', force_text(value))
+
+
+@register.filter('gls_fix_ampersands', is_safe=True)
+@stringfilter
+def fix_ampersands_filter(value):
+ """Replaces ampersands with ``&amp;`` 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

Return to:

Send suggestions and report system problems to the System administrator.