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.conf import settings
|
||||||
from compressor.filters import FilterBase, FilterError
|
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')
|
SRC_PATTERN = re.compile(r'src=([\'"])(.+?)\1')
|
||||||
SCHEMES = ('http://', 'https://', '/')
|
SCHEMES = ('http://', 'https://', '/')
|
||||||
|
|
||||||
@@ -86,7 +87,7 @@ class CssAbsoluteFilter(FilterBase):
|
|||||||
url = matchobj.group(group)
|
url = matchobj.group(group)
|
||||||
|
|
||||||
url = url.strip()
|
url = url.strip()
|
||||||
wrap = '"' if url[0] == '"' else "'"
|
wrap = matchobj.group(1)
|
||||||
url = url.strip('\'"')
|
url = url.strip('\'"')
|
||||||
|
|
||||||
if url.startswith(('#', 'data:')):
|
if url.startswith(('#', 'data:')):
|
||||||
@@ -100,7 +101,7 @@ class CssAbsoluteFilter(FilterBase):
|
|||||||
return template % (wrap, self.add_suffix(full_url), wrap)
|
return template % (wrap, self.add_suffix(full_url), wrap)
|
||||||
|
|
||||||
def url_converter(self, matchobj):
|
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):
|
def src_converter(self, matchobj):
|
||||||
return self._converter(matchobj, 2, "src=%s%s%s")
|
return self._converter(matchobj, 2, "src=%s%s%s")
|
||||||
|
|||||||
@@ -310,16 +310,16 @@ class CssAbsolutizingTestCase(TestCase):
|
|||||||
|
|
||||||
css1 = """\
|
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 { 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'); }
|
p { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='%(compress_url)simg/python.png?%(hash)s'); }
|
||||||
""" % dict(compress_url=settings.COMPRESS_URL, hash=hash_python_png)
|
""" % dict(compress_url=settings.COMPRESS_URL, hash=hash_python_png)
|
||||||
|
|
||||||
css2 = """\
|
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 { 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'); }
|
p { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='%(compress_url)simg/add.png?%(hash)s'); }
|
||||||
""" % dict(compress_url=settings.COMPRESS_URL, hash=hash_add_png)
|
""" % 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")
|
filter = CssAbsoluteFilter(css, filename="doesntmatter")
|
||||||
self.assertEqual(css, filter.input(filename="doesntmatter", basename="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/')
|
@override_settings(COMPRESS_URL='http://static.example.com/')
|
||||||
class CssAbsolutizingTestCaseWithDifferentURL(CssAbsolutizingTestCase):
|
class CssAbsolutizingTestCaseWithDifferentURL(CssAbsolutizingTestCase):
|
||||||
|
|||||||
Reference in New Issue
Block a user