summaryrefslogtreecommitdiff
path: root/django
diff options
context:
space:
mode:
authorRamiro Morales <cramm0@gmail.com>2011-01-02 17:34:52 +0000
committerRamiro Morales <cramm0@gmail.com>2011-01-02 17:34:52 +0000
commit0f783b7f4eac037e22875eeeb6dc85c26b2a65f4 (patch)
tree7600364217fb5f354bfa1283a98e9562cbfbec6a /django
parent544ab30ed71e0d78c4c061008758de29ff79e8f7 (diff)
Fixed #2986 -- Made the JavaScript code that drives related model instance addition in a popup window handle a model representation containing new lines. Also, moved the escapejs functionality yoo django.utils.html so it can be used from Python code. Thanks andrewwatts for the patch.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@15131 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'django')
-rw-r--r--django/contrib/admin/options.py4
-rw-r--r--django/template/defaultfilters.py24
-rw-r--r--django/utils/html.py25
3 files changed, 29 insertions, 24 deletions
diff --git a/django/contrib/admin/options.py b/django/contrib/admin/options.py
index d1f02be843..be4c6f8e7f 100644
--- a/django/contrib/admin/options.py
+++ b/django/contrib/admin/options.py
@@ -19,7 +19,7 @@ from django.shortcuts import get_object_or_404, render_to_response
from django.utils.decorators import method_decorator
from django.utils.datastructures import SortedDict
from django.utils.functional import update_wrapper
-from django.utils.html import escape
+from django.utils.html import escape, escapejs
from django.utils.safestring import mark_safe
from django.utils.functional import curry
from django.utils.text import capfirst, get_text_list
@@ -717,7 +717,7 @@ class ModelAdmin(BaseModelAdmin):
if "_popup" in request.POST:
return HttpResponse('<script type="text/javascript">opener.dismissAddAnotherPopup(window, "%s", "%s");</script>' % \
# escape() calls force_unicode.
- (escape(pk_value), escape(obj)))
+ (escape(pk_value), escapejs(obj)))
elif "_addanother" in request.POST:
self.message_user(request, msg + ' ' + (_("You may add another %s below.") % force_unicode(opts.verbose_name)))
return HttpResponseRedirect(request.path)
diff --git a/django/template/defaultfilters.py b/django/template/defaultfilters.py
index d59ad2d461..1e00effea0 100644
--- a/django/template/defaultfilters.py
+++ b/django/template/defaultfilters.py
@@ -64,29 +64,10 @@ def capfirst(value):
capfirst.is_safe=True
capfirst = stringfilter(capfirst)
-_base_js_escapes = (
- ('\\', r'\u005C'),
- ('\'', r'\u0027'),
- ('"', r'\u0022'),
- ('>', r'\u003E'),
- ('<', r'\u003C'),
- ('&', r'\u0026'),
- ('=', r'\u003D'),
- ('-', r'\u002D'),
- (';', r'\u003B'),
- (u'\u2028', r'\u2028'),
- (u'\u2029', r'\u2029')
-)
-
-# Escape every ASCII character with a value less than 32.
-_js_escapes = (_base_js_escapes +
- tuple([('%c' % z, '\\u%04X' % z) for z in range(32)]))
-
def escapejs(value):
"""Hex encodes characters for use in JavaScript strings."""
- for bad, good in _js_escapes:
- value = value.replace(bad, good)
- return value
+ from django.utils.html import escapejs
+ return escapejs(value)
escapejs = stringfilter(escapejs)
def fix_ampersands(value):
@@ -745,7 +726,6 @@ timesince.is_safe = False
def timeuntil(value, arg=None):
"""Formats a date as the time until that date (i.e. "4 days, 6 hours")."""
from django.utils.timesince import timeuntil
- from datetime import datetime
if not value:
return u''
try:
diff --git a/django/utils/html.py b/django/utils/html.py
index 951b3f2a59..094bc6660d 100644
--- a/django/utils/html.py
+++ b/django/utils/html.py
@@ -34,6 +34,31 @@ def escape(html):
return mark_safe(force_unicode(html).replace('&', '&amp;').replace('<', '&lt;').replace('>', '&gt;').replace('"', '&quot;').replace("'", '&#39;'))
escape = allow_lazy(escape, unicode)
+_base_js_escapes = (
+ ('\\', r'\u005C'),
+ ('\'', r'\u0027'),
+ ('"', r'\u0022'),
+ ('>', r'\u003E'),
+ ('<', r'\u003C'),
+ ('&', r'\u0026'),
+ ('=', r'\u003D'),
+ ('-', r'\u002D'),
+ (';', r'\u003B'),
+ (u'\u2028', r'\u2028'),
+ (u'\u2029', r'\u2029')
+)
+
+# Escape every ASCII character with a value less than 32.
+_js_escapes = (_base_js_escapes +
+ tuple([('%c' % z, '\\u%04X' % z) for z in range(32)]))
+
+def escapejs(value):
+ """Hex encodes characters for use in JavaScript strings."""
+ for bad, good in _js_escapes:
+ value = mark_safe(force_unicode(value).replace(bad, good))
+ return value
+escapejs = allow_lazy(escapejs, unicode)
+
def conditional_escape(html):
"""
Similar to escape(), except that it doesn't operate on pre-escaped strings.