Здравствуйте, у меня возникла проблема при использовании Bootstrap 4 alpha 6. Обнаружено, что все CSS после включения BS4 игнорируются браузером. Покопался глубже и обнаружил ошибку парсинга сгенерированного css.
Я использую Django 1.8.17, Compressor 2.1.1, Sass 3.4.22
Я задокументирую здесь первую обнаруженную мной ошибку синтаксического анализа.
Ошибка - это двойная кавычка "
в stroke='rgba(0, 0, 0, 0.5")',
тогда как она должна быть stroke='rgba(0, 0, 0, 0.5)'
. Это вызывает ошибки синтаксического анализа в документе.
.navbar-light .navbar-toggler-icon {
background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5")' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 8h24M4 16h24M4 24h24'/%3E%3C/svg%3E"); }
.navbar-light .navbar-toggler-icon {
background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 8h24M4 16h24M4 24h24'/%3E%3C/svg%3E"); }
Соответствует предварительно скомпилированной версии.
$navbar-light-toggler-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='#{$navbar-light-color}' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 8h24M4 16h24M4 24h24'/%3E%3C/svg%3E"), "#", "%23") !default;
$navbar-light-color: rgba($black,.5) !default;
$black: #000 !default;
{% compress css %}
<link rel="stylesheet" type="text/x-scss" media="screen" charset="utf-8"
href="/static/bootstrap/scss/bootstrap.scss" />
{% endcompress %}
COMPRESS_PRECOMPILERS = (
('text/coffeescript', 'coffee --compile --stdio'),
('text/x-sass', 'sass {{infile}} {{outfile}} --load-path {}'.format(LIB_PATH)),
('text/x-scss', 'sass --scss {{infile}} {{outfile}} --load-path {}'.format(LIB_PATH)),
)
выглядит довольно плохо. любая помощь по исправлению этого будет оценена, у меня, вероятно, не будет времени в ближайшие недели.
Я пойду. Я не знаком с вашей кодовой базой, поэтому любые указания о том, с чего начать / любые догадки, были бы очень ценными.
Пару мыслей:
COMPRESS_ENABLED = False
?@carltongibson :
COMPRESS_ENABLED = False
, тот же результат наблюдается при установке True
.$ sass -v
Sass 3.4.22 (Selective Steve)
Я попытался включить либо версию sass, либо предварительно созданный файл bootstrap.css в блок компрессора, за которым следует файл, содержащий только тело b ackground: green в качестве контрольной лампы для действительного / анализируемого CSS. Я получаю «зеленый» для предварительно созданной версии .css, но не для .sass, где компрессор создает бутстрап.
@wjdp ОК Спасибо. Хм.
В таком случае могу я предложить поставить точку останова в Compressor.precompile
? Во-первых, правильно ли передан content
?
Тогда в hunks()
верна ли value
возвращенная прекомпилятором?
я изучаю это прямо сейчас. проблема такая же, как # 764. CssAbsoluteFilter использует r'url\(([^\)]+)\)'
для сопоставления URL-адресов и поэтому останавливается на первой закрывающей скобке. поскольку регулярное выражение не может обрабатывать произвольное количество вложенных скобок, я вижу три варианта:
Я не хочу тратить на это много времени и изучаю вариант 1. Если кто-то хочет создать более надежное решение, я буду рад его просмотреть.
предложенное исправление в №828. на самом деле он вообще не обрабатывает вложенные круглые скобки, он просто ожидает закрывающих кавычек, если есть открывающие (поэтому url("data:...stroke='rgba(0, 0, 0, 0.5)
совпадают) и, чтобы быть в безопасности, uris данных вообще игнорируются.
@wjdp не могли бы вы попробовать # 828? Он должен делать то, что вам нужно, но ваш тестовый запуск будет хорошим подтверждением.
Сделаю
@carltongibson Могу подтвердить, что PR @karyon за очень быструю работу! :улыбка:
Отлично 👏🏽 спасибо за продолжение.