Очень хочется иметь атрибут class
всегда самым первым аьрибутом.
Want to back this issue? Post a bounty on it! We accept bounties via Bountysource.
Обычно все атрибуты выводятся в порядке их указания в аббревиатуре, за исключением случаев, если для аббревиатуры задан сниппет с другими атрибутами. Тут только менять сами сниппеты и добавлять им пустой атрибут class
в нужное место.
@sergeche
label.clasname
→ <label for="" class="clasname"></label>
a.classname
→ <a href="" class="classname"></a>
a[class=classname href="goo"]
→ <a href="goo" class="classname"></a>
Обычно все атрибуты выводятся в порядке их указания в аббревиатуре,
нет )
а как создать такой сниппет, который сделает, к примеру: a.classname
→ <a class="classname" href=""></a>
?
Потому что для a
сниппет: https://github.com/emmetio/emmet/blob/master/lib/snippets.json#L691
Решение: либо удалить этот сниппет (переопределить у себя пустым занчением: "a": null
), либо модифицировать его: "a": "<a class=\"\" href=\"\">
, но тогда атрибут class
будет всегда выводиться. Либо сделать новый сниппет, который не будет содержать никаких атрибутов в элементе <a>
.
Хм...
написал "a": null,
— http://take.ms/BHuO6
ничего не изменилось: a.classname
→ <a href="|" class="classname"></a>
написал "a": "<a class=\"\" href=\"\">"
— http://take.ms/98CIZ
неюзабельно: a.classname
→ <a class="" href="">|
написал "a": "<a>",
не-не-не-не, Дэвид Блейн, НЕТ: a.classname
→ <a>
Правильно ли я понимаю, что ответ на мой вопрос — «никак»? Или я что-то делаю не так? )
Сделать удобно — никак, нужно менять ядро, чтобы можно было задавать приоритеты сортировки у атрибутов
В каком файле копать-то? :)
Как вариант: https://github.com/emmetio/emmet/blob/master/lib/filter/html.js#L21
В принципе, можно и свой фильтр написать, который сгенерирует правильный вывод, и подключить его как расширение, чтобы не трогать ядро.
Вариант с фильтром — вариант гораздо лучше (терпеть не могу лезть в ядро приложения). Где почитать про API? Или какие-то примеры, может?
Вопрос актуален по сию пору.
@sergeche каковы шансы этой задачи попасть в TODO-лист?
Вы можете написать свой фильтр и сделать Pull Request. Документации по фильтрам нет, но это обычная функция, которая на вход принимает распарсенную аббревиатуру в виде дерева и может его изменить, например, поменять атрибуты местами
Переопределил сниппет для a
(http://s020.radikal.ru/i717/1703/c0/8127577c2b25.png), без фильтров работает, как надо: a.xxx
--> <a class="xxx" href=""></a>
Но при использовании фильтра bem результат получается некорректным, имя класса дублируется:
a.xxx|bem
--> <a class="xxx xxx" href=""></a>
div.yyy>a.-xxx|bem
--> <a class="yyy__xxx -xxx" href=""></a>
Возможно ли как-то этого избежать? @sergeche
@DDyst эта возможность есть в новой версии ядра, которая пока есть в альфа-версии для Atom
А как ее посмотреть/опробовать? )
Сергей, намекните хоть в каком файле искать эту самую возможность - я смотрю структура файлов изрядно изменилась О_о... Кастомизировать пока можно напрямую в ядре только правильно?
Да, и |bem - теперь как?
Зы.. А я думал, что emmet уже не может быть лучше, а тут такое грядет!!))
{
"snippets": {
"html": {
"abbreviations": {
"a": "<a class='' href=''>"
}
}
}
}
Ну и получаем все ссылки всегда с классами :)
Сделал начальную реализацию объединения атрибутов в обратном порядке при резолвинге сниппетов: сначала те, что написали в аббревиатуре, потом те, что объявлены в сниппете (см. ссылку на коммит выше). Это похоже на ожидаемое поведение?
Другой вариант: объявлять в сниппете неявные атрибуты (с восклицательным знаком в начале): "foo": "my-tag[title !class]"
Суть неявных атрибутов в том, чтобы они выводились только в том случае, если у них есть значение. То есть по сути с помощью неявных атрибутов можно указать порядок, в котором должны выводится атрибуты, независимо от того, в каком порядке они были объявлены в аббревиатуре
Most helpful comment
Вопрос актуален по сию пору.
@sergeche каковы шансы этой задачи попасть в TODO-лист?