Compactei bootstrap.min.js usando django_compressor
o ícone de recolhimento da barra de navegação não é renderizado devido a um erro de análise de XML.
Estou usando o bootstrap4, não tive esse problema com o bootstrap3
eu vi a diferença usando o elemento inspecionar no firefox
Sem erro (sem compressão)
.navbar-dark .navbar-toggler-icon {
background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")
}
isso dá erro de XML (após compressão)
.navbar-dark .navbar-toggler-icon {
background-image: url("data:image/svg+xml;charset=utf8,%3CsvgviewBox='003030'xmlns='http://www.w3.org/2000/svg'%3E%3Cpathstroke='rgba(255,255,255,0.5)'stroke-width='2'stroke-linecap='round'stroke-miterlimit='10'd='M47h22M415h22M423h22'/%3E%3C/svg%3E")
}
Posso confirmar que isso ainda está acontecendo, apesar das alterações em # 828
Estou usando Django 2.0, Python 3.6, django-compressor 2.2, Bootstrap 4.1.1
O problema é causado por CSSMinFilter
Pegando emprestado de uma solução alternativa para callback
). Isso substituirá os espaços nas URLs de dados por "% 20" antes de passar para o rcssmin, o que evita que o rcssmin destrua as URLs.
def compress(css, **kwargs):
capture_svg = re.compile(r'url\("(data:image/svg.*?svg%3[Ee])\"\)')
data_urls = re.findall(capture_svg, css)
for data_url in data_urls:
css = css.replace(data_url, data_url.replace(' ', '%20'))
css = cssmin(css, **kwargs)
return css
class CSSMinFilter(CallbackOutputFilter):
callback = 'myapp.core.utils.compress'
Esse problema também foi relatado ao rcssmin .
Para sua informação, este problema parece ser uma duplicata de # 878.
Comentários muito úteis
Posso confirmar que isso ainda está acontecendo, apesar das alterações em # 828
Estou usando Django 2.0, Python 3.6, django-compressor 2.2, Bootstrap 4.1.1
O problema é causado por
CSSMinFilter