Closed qfox closed 9 years ago
/cc @denchistyakov @sameoldmadness
Пробежался по ссылкам, так и не увидел, какую проблему решает этот коммит.
@sameoldmadness В результирующем коде получается меньше буковок. Вместо:
data-bem="{"a":{},"b":{}}"
Получаем:
data-bem='{"a":{},"b":{}}'
+. Проще читать параметры в исходниках.
+. Это синхронизация с https://github.com/bem/bem-core/pull/742#issuecomment-72166752 — иначе тесты будут падать.
В любом случае, надо дождаться влития 742 из бем-кор, иначе опять «тесты будут падать», назвать вменяемо (может в attrEscape унести: типа attrEscape(jsAttr, true)
), и еще можно сделать это настраиваемо через setOptions (тогда можно не дожидаться 742).
меньше буковок
Рискну предположить, что на пожатых gzip'ом документах разница будет незаметна. Как минимум, стоит замерить.
Проще читать параметры в исходниках.
Chrome Dev Tools решают эту задачу. Или исходники смотрят как-то иначе?
Это синхронизация с bem/bem-core
Можно поднять вопрос, нужно ли это в bem-core.
Я почему пристаю: на мой взгляд, нужна очень веская причина, чтобы начать обрамлять значение атрибута одинарными кавычками.
И для того, чтобы заменить функцию экранирования, кстати, тоже.
Рискну предположить, что на пожатых gzip'ом документах разница будет незаметна. Как минимум, стоит замерить.
Никто не спорит ;-) разница — пара байт в реальных условиях даже с большими кусками.
Chrome Dev Tools решают эту задачу. Или исходники смотрят как-то иначе?
Ща научу: curl -v http://ya.ru/
Можно поднять вопрос, нужно ли это в bem-core.
https://github.com/bem/bem-core/issues/250 — это вам к туда ;-)
Я почему пристаю: на мой взгляд, нужна очень веская причина, чтобы начать обрамлять значение атрибута одинарными кавычками.
Вегед — достаточно веская причина? ;-) Наверное, это что-то может сломать, если ты так этого боишься. Хотелось бы узнать, конечно.
И для того, чтобы заменить функцию экранирования, кстати, тоже.
Ну как, это же только для jsAttr, не вижу, что это может сломать. Данные внутри — это json, либо return + json.
Единственное, что это может сломать — какие-то внешние сервисы, которые парсят html нестандартно, и завязаны на эти кавычки и " и на data-bem/onclick атрибут. Это обратная ситуация к «смотреть исходники» и для страждущих — можно сделать это опционально, выставляя обратное экранирование через setOptions.
@sameoldmadness Вообще, я согласен, что менять поведение по умолчанию — идея плохая.
Я предлагаю
Это ничего не сломает, не потребует мажорного апдейта версии, и не потребует дальнейшей поддержки.
Ща научу: curl -v http://ya.ru/
Ну и много ты там насмотришь, в минифицированном-то коде без подсветки? : )
Вегед — достаточно веская причина?
Конечно, нет. Но у него наверняка есть веская причина. Задал вопрос.
Наверное, это что-то может сломать, если ты так этого боишься. Хотелось бы узнать, конечно.
Страшно боюсь всего, что может что-то сломать, и не добавляет при этом ценности.
Добавить булевую опцию
Лучше, чем менять поведение по умолчанию, но:
В общем, если вводить — то вводить опцией, имхо. На самом факте ввода я не настаиваю, но было бы полезно.
Лучше, чем менять поведение по умолчанию, но:
Да там не много кода и 1 тест. И в будущем с этим проблем не будет — оно локальное, тестировать не надо. Тесты можно продолжать писать со старым поведением.
@sameoldmadness идея действительно в том, чтобы сгенерированный код стал чище. В плане количества байтиков это действительно не даст ощутимого профита, но читать исходники и писать тесты станет сильно удобнее.
В dev tools совсем недавно появилась фича автоматического де-эскейпинга, раньше показывалось как есть: data-bem="{"ololo":{}}"
А исходники действительно иногда приходится читать, чтобы исключить влияние JS и браузера. Обычно, конечно, исходники читают прямо в браузере, чтобы была подсветка, но изредка приходится и в консоли смотреть. Хотя и там можно открыть html в vim с подсветкой.
Что касается "поведения по умолчанию", то это не совсем корректный аргумент, т.к. эскейпинг и формат выходных данных инкапсулирован и никак не регламентируется. Требование одно: он должен корректно работать во всех браузерах. Эти изменения повлияют только на юнит-тесты на шаблоны, но не затронут работу самих шаблонов и клиентских скриптов.
@zxqfox Кстати, я бы лучше добавил отдельную функцию типа jsAttrEscape для её последующего использования при генерации кастомных data-атрибутов. Это позволит не трогать существующее API.
@mishanga Нууу...
Что касается "поведения по умолчанию", то это не совсем корректный аргумент, т.к. эскейпинг и формат выходных данных инкапсулирован и никак не регламентируется.
Если меняется поведение — это тянет на мажорный релиз. Имхо, нет проблем поменять поведение по умолчанию на «более чистое» вместе с какими-то другими крупными необратимыми изменениями, а людям жить проще.
Эти изменения повлияют только на юнит-тесты на шаблоны
И если у меня их 150 и я не умею sed s/"/'"'/ -i
, то у меня будет боль. ;-(
Кстати, я бы лучше добавил отдельную функцию типа jsAttrEscape для её последующего использования при генерации кастомных data-атрибутов.
Да не вопрос, я не трогал PR, потому что не понятно что будет в bem-core, и если и тут и там будет jsAttrEscape — будет вдвойне ок.
@zxqfox сделай rebase от https://github.com/bem/bh/compare/singlequot
@mishanga done.
@sameoldmadness @denchistyakov @dfilatov коллеги, всех устраивает такое решение?
@mishanga Лучше за опцию.
@mishanga В отсутствие варианта "ничего не менять" — устраивает.
@zxqfox еще забыли добавить тесты на jsAttrEscape в test.escape.js.
@mishanga Добавил тест и поправил \\\'
@mishanga @zxqfox Так это будет патч версия?
@YetiOr Я не в восторге, но я не мейнтейнер ;)
@YetiOr @zxqfox не-не, минимум минорная версия.
@zxqfox :tada:
:balloon:
Fixes #114 Closes gh-115