Emmet: Можно ли контролировать последовательность атрибутов при развороте в HTML?

Created on 3 Nov 2015  ·  18Comments  ·  Source: emmetio/emmet

Очень хочется иметь атрибут class всегда самым первым аьрибутом.

Want to back this issue? Post a bounty on it! We accept bounties via Bountysource.

Enhancement

Most helpful comment

Вопрос актуален по сию пору.
@sergeche каковы шансы этой задачи попасть в TODO-лист?

All 18 comments

Обычно все атрибуты выводятся в порядке их указания в аббревиатуре, за исключением случаев, если для аббревиатуры задан сниппет с другими атрибутами. Тут только менять сами сниппеты и добавлять им пустой атрибут 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 уже не может быть лучше, а тут такое грядет!!))

  1. Заходим в пользовательские настройки Emmet:
    Preferences -> Package Settings -> Emmet -> Settings User
  2. Вставляем следующий снипет:
{
  "snippets": {
    "html": {
      "abbreviations": {
        "a": "<a class='' href=''>"
        }
      }
    }
}

Ну и получаем все ссылки всегда с классами :)

Сделал начальную реализацию объединения атрибутов в обратном порядке при резолвинге сниппетов: сначала те, что написали в аббревиатуре, потом те, что объявлены в сниппете (см. ссылку на коммит выше). Это похоже на ожидаемое поведение?

Другой вариант: объявлять в сниппете неявные атрибуты (с восклицательным знаком в начале): "foo": "my-tag[title !class]" Суть неявных атрибутов в том, чтобы они выводились только в том случае, если у них есть значение. То есть по сути с помощью неявных атрибутов можно указать порядок, в котором должны выводится атрибуты, независимо от того, в каком порядке они были объявлены в аббревиатуре

Was this page helpful?
0 / 5 - 0 ratings

Related issues

fversepuy picture fversepuy  ·  5Comments

HeikoMamerow picture HeikoMamerow  ·  16Comments

corysimmons picture corysimmons  ·  5Comments

deathmood picture deathmood  ·  15Comments

renatorib picture renatorib  ·  26Comments