Make sure the CssAbsoluteFilter works for relative paths.
This commit is contained in:
@@ -7,9 +7,12 @@ from compressor.conf import settings
|
|||||||
|
|
||||||
class CssAbsoluteFilter(FilterBase):
|
class CssAbsoluteFilter(FilterBase):
|
||||||
def input(self, filename=None, **kwargs):
|
def input(self, filename=None, **kwargs):
|
||||||
if not filename or not filename.startswith(settings.MEDIA_ROOT):
|
media_root = os.path.abspath(settings.MEDIA_ROOT)
|
||||||
|
if filename is not None:
|
||||||
|
filename = os.path.abspath(filename)
|
||||||
|
if not filename or not filename.startswith(media_root):
|
||||||
return self.content
|
return self.content
|
||||||
self.media_path = filename[len(settings.MEDIA_ROOT):]
|
self.media_path = filename[len(media_root):]
|
||||||
self.media_path = self.media_path.lstrip('/')
|
self.media_path = self.media_path.lstrip('/')
|
||||||
self.media_url = settings.MEDIA_URL.rstrip('/')
|
self.media_url = settings.MEDIA_URL.rstrip('/')
|
||||||
self.has_http = False
|
self.has_http = False
|
||||||
|
|||||||
@@ -130,6 +130,18 @@ class CssAbsolutizingTestCase(TestCase):
|
|||||||
output = "p { background: url('%simages/image.gif') }" % settings.MEDIA_URL
|
output = "p { background: url('%simages/image.gif') }" % settings.MEDIA_URL
|
||||||
self.assertEqual(output, filter.input(filename=filename))
|
self.assertEqual(output, filter.input(filename=filename))
|
||||||
|
|
||||||
|
def test_css_absolute_filter_relative_path(self):
|
||||||
|
from compressor.filters.css_default import CssAbsoluteFilter
|
||||||
|
filename = os.path.join(django_settings.TEST_DIR, 'whatever', '..', 'media', 'whatever/../css/url/test.css')
|
||||||
|
content = "p { background: url('../../images/image.gif') }"
|
||||||
|
output = "p { background: url('%simages/image.gif') }" % settings.MEDIA_URL
|
||||||
|
filter = CssAbsoluteFilter(content)
|
||||||
|
self.assertEqual(output, filter.input(filename=filename))
|
||||||
|
settings.MEDIA_URL = 'https://media.example.com/'
|
||||||
|
output = "p { background: url('%simages/image.gif') }" % settings.MEDIA_URL
|
||||||
|
self.assertEqual(output, filter.input(filename=filename))
|
||||||
|
|
||||||
|
|
||||||
def test_css_hunks(self):
|
def test_css_hunks(self):
|
||||||
out = [u"p { background: url('/media/images/test.png'); }\np { background: url('/media/images/test.png'); }\np { background: url('/media/images/test.png'); }\np { background: url('/media/images/test.png'); }\n",
|
out = [u"p { background: url('/media/images/test.png'); }\np { background: url('/media/images/test.png'); }\np { background: url('/media/images/test.png'); }\np { background: url('/media/images/test.png'); }\n",
|
||||||
u"p { background: url('/media/images/test.png'); }\np { background: url('/media/images/test.png'); }\np { background: url('/media/images/test.png'); }\np { background: url('/media/images/test.png'); }\n",
|
u"p { background: url('/media/images/test.png'); }\np { background: url('/media/images/test.png'); }\np { background: url('/media/images/test.png'); }\np { background: url('/media/images/test.png'); }\n",
|
||||||
|
|||||||
Reference in New Issue
Block a user