Make CssAbsoluteFilter not touch quotes
This commit is contained in:
@@ -6,7 +6,8 @@ from compressor.cache import get_hashed_mtime, get_hashed_content
|
||||
from compressor.conf import settings
|
||||
from compressor.filters import FilterBase, FilterError
|
||||
|
||||
URL_PATTERN = re.compile(r'url\( *(([\'"]?).+?\2) *\)')
|
||||
URL_PATTERN = re.compile(r'url\( *([\'"]?)(.+?)\1 *\)')
|
||||
# URL_PATTERN = re.compile(r'url\(([^\)]+)\)')
|
||||
SRC_PATTERN = re.compile(r'src=([\'"])(.+?)\1')
|
||||
SCHEMES = ('http://', 'https://', '/')
|
||||
|
||||
@@ -86,7 +87,7 @@ class CssAbsoluteFilter(FilterBase):
|
||||
url = matchobj.group(group)
|
||||
|
||||
url = url.strip()
|
||||
wrap = '"' if url[0] == '"' else "'"
|
||||
wrap = matchobj.group(1)
|
||||
url = url.strip('\'"')
|
||||
|
||||
if url.startswith(('#', 'data:')):
|
||||
@@ -100,7 +101,7 @@ class CssAbsoluteFilter(FilterBase):
|
||||
return template % (wrap, self.add_suffix(full_url), wrap)
|
||||
|
||||
def url_converter(self, matchobj):
|
||||
return self._converter(matchobj, 1, "url(%s%s%s)")
|
||||
return self._converter(matchobj, 2, "url(%s%s%s)")
|
||||
|
||||
def src_converter(self, matchobj):
|
||||
return self._converter(matchobj, 2, "src=%s%s%s")
|
||||
|
||||
@@ -310,16 +310,16 @@ class CssAbsolutizingTestCase(TestCase):
|
||||
|
||||
css1 = """\
|
||||
p { background: url('%(compress_url)simg/python.png?%(hash)s'); }
|
||||
p { background: url('%(compress_url)simg/python.png?%(hash)s'); }
|
||||
p { background: url('%(compress_url)simg/python.png?%(hash)s'); }
|
||||
p { background: url(%(compress_url)simg/python.png?%(hash)s); }
|
||||
p { background: url(%(compress_url)simg/python.png?%(hash)s); }
|
||||
p { background: url('%(compress_url)simg/python.png?%(hash)s'); }
|
||||
p { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='%(compress_url)simg/python.png?%(hash)s'); }
|
||||
""" % dict(compress_url=settings.COMPRESS_URL, hash=hash_python_png)
|
||||
|
||||
css2 = """\
|
||||
p { background: url('%(compress_url)simg/add.png?%(hash)s'); }
|
||||
p { background: url('%(compress_url)simg/add.png?%(hash)s'); }
|
||||
p { background: url('%(compress_url)simg/add.png?%(hash)s'); }
|
||||
p { background: url(%(compress_url)simg/add.png?%(hash)s); }
|
||||
p { background: url(%(compress_url)simg/add.png?%(hash)s); }
|
||||
p { background: url('%(compress_url)simg/add.png?%(hash)s'); }
|
||||
p { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='%(compress_url)simg/add.png?%(hash)s'); }
|
||||
""" % dict(compress_url=settings.COMPRESS_URL, hash=hash_add_png)
|
||||
@@ -359,6 +359,14 @@ p { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='%(compress_u
|
||||
filter = CssAbsoluteFilter(css, filename="doesntmatter")
|
||||
self.assertEqual(css, filter.input(filename="doesntmatter", basename="doesntmatter"))
|
||||
|
||||
def test_does_not_change_quotes_in_src(self):
|
||||
filename = os.path.join(settings.COMPRESS_ROOT, 'css/url/test.css')
|
||||
hash_add_png = self.hashing_func(os.path.join(settings.COMPRESS_ROOT, 'img/add.png'))
|
||||
css = """p { filter: Alpha(src="/img/add.png%(hash)s") }"""
|
||||
filter = CssAbsoluteFilter(css % dict(hash=""))
|
||||
expected = css % dict(hash='?' + hash_add_png)
|
||||
self.assertEqual(expected, filter.input(filename=filename, basename='css/url/test.css'))
|
||||
|
||||
|
||||
@override_settings(COMPRESS_URL='http://static.example.com/')
|
||||
class CssAbsolutizingTestCaseWithDifferentURL(CssAbsolutizingTestCase):
|
||||
|
||||
Reference in New Issue
Block a user