Fixing CssAbsoluteFilter changes double quotes to single quotes which causes svg to fail

Fix for issue #738

adding test to check css url wrapped with double quotes

removing maxDiff which was added just for testing

If url not wrapped with quotes let it be

reverting last change and improving code
This commit is contained in:
Aamir Adnan
2016-04-28 04:45:23 +05:00
committed by intellisense
parent f5c1469c8e
commit 2e4ea7bfa9
2 changed files with 20 additions and 6 deletions

View File

@@ -84,19 +84,23 @@ class CssAbsoluteFilter(FilterBase):
def _converter(self, matchobj, group, template):
url = matchobj.group(group)
url = url.strip(' \'"')
url = url.strip()
wrap = '"' if url[0] == '"' else "'"
url = url.strip('\'"')
if url.startswith('#'):
return "url('%s')" % url
return template % (wrap, url, wrap)
elif url.startswith(SCHEMES):
return "url('%s')" % self.add_suffix(url)
return template % (wrap, self.add_suffix(url), wrap)
full_url = posixpath.normpath('/'.join([str(self.directory_name),
url]))
if self.has_scheme:
full_url = "%s%s" % (self.protocol, full_url)
return template % self.add_suffix(full_url)
return template % (wrap, self.add_suffix(full_url), wrap)
def url_converter(self, matchobj):
return self._converter(matchobj, 1, "url('%s')")
return self._converter(matchobj, 1, "url(%s%s%s)")
def src_converter(self, matchobj):
return self._converter(matchobj, 2, "src='%s'")
return self._converter(matchobj, 2, "src=%s%s%s")

View File

@@ -287,6 +287,16 @@ class CssAbsolutizingTestCase(TestCase):
filter = CssAbsoluteFilter(content)
self.assertEqual(content, filter.input(filename=filename, basename='css/url/test.css'))
def test_css_absolute_filter_only_url_fragment_wrap_double_quotes(self):
filename = os.path.join(settings.COMPRESS_ROOT, 'css/url/test.css')
content = 'p { background: url("#foo") }'
filter = CssAbsoluteFilter(content)
self.assertEqual(content, filter.input(filename=filename, basename='css/url/test.css'))
with self.settings(COMPRESS_URL='http://media.example.com/'):
filter = CssAbsoluteFilter(content)
self.assertEqual(content, filter.input(filename=filename, basename='css/url/test.css'))
def test_css_absolute_filter_querystring(self):
filename = os.path.join(settings.COMPRESS_ROOT, 'css/url/test.css')
imagefilename = os.path.join(settings.COMPRESS_ROOT, 'img/python.png')