Упорядоченные списки с ненумерованными маркерами

Запрос: Добавить атрибут “type” для <ol> в белый список. Предлагаю сделать то же самое с атрибутом “reversed” для <ol> и атрибутом “value” для <li> по схожим, хотя и менее распространённым, причинам.

Цель: Эти атрибуты предназначены для случаев, когда маркер элементов нумерованного списка сам по себе несёт смысловую нагрузку для содержимого списка. Обычно это происходит, когда элементы списка предполагается ссылаться именно через этот маркер. Это отличается от CSS list-style-type, который используется, когда выбор маркера не имеет существенного значения. (Хотя я видел рекомендацию использовать его для локализации всего форума, что очень здорово!)

Контекст: При попытке процитировать официальный справочный документ я обнаружил очевидное ограничение в форматировании списков, которое мешает сделать это точно. Часто маркеры списков имеют чисто стилистический характер. Однако иногда они используются для облегчения ссылок в документах, насыщенных списками. Например, в официальных и юридических документах элемент списка (или подпункт) может упоминаться по маркеру: «Статья I официального документа, раздел 1(a)(i)».

Для Markdown в спецификации CommonMark ничего не говорится об этом, и в ней указаны только цифры от 0 до 9. Но хотя большинство интерпретаторов не допускают использование букв в списках (включая markdown-it), некоторые всё же поддерживают это:

Я не уверен, существует ли стандартный метод для BBCode, насколько вообще в BBCode что-либо является стандартом. Мне не удалось найти ничего более продвинутого, чем начало с произвольной цифры. Тег списков BBCode, в любом случае, не используется в Discourse.

Ни HTML, ни HTML со стилями не дают правильного результата:

3 лайка

Судя по GitHub, реализация этого, скорее всего, сводится к добавлению их в этот список:
https://github.com/discourse/discourse/blob/master/app/assets/javascripts/pretty-text/white-lister.js#L181-L183

Хотя я заметил, что их добавление оставит конвертер HTML в Markdown неосведомленным об этих атрибутах. Но, как показано выше, markdown-it в любом случае пока не может обрабатывать синтаксис Markdown, представляющий эти атрибуты. Для этого, возможно, стоит пойти дальше и реализовать типы списков в CommonMark…

2 лайка

Планов на это нет.

Отсутствие этого значительно затрудняет цитирование официальных документов, юридических документов, лицензий на программное обеспечение или любых других материалов, в которых для ссылок на документы используются маркеры, не являющиеся цифрами.

1 лайк

Добавьте обертку к этим спискам и немного CSS

В постах используйте:

[wrap="letterlist"]
1. это первое
2. это второе.
3. это третье
[/wrap]

В вашей теме добавьте:

.cooked div[data-wrap="letterlist"] {
  list-style: upper-alpha;
}
1 лайк

Это хорошее решение, если цель — произвольное оформление списков, но атрибут type в HTML предназначен именно для семантически значимых ситуаций, где различия между маркерами списков выходят за рамки декоративных. Из <ol> HTML ordered list element - HTML | MDN

Если тип нумерации в списке не имеет значения (как, например, в юридических или технических документах, где элементы ссылаются по их номеру или букве), используйте вместо этого свойство CSS list-style-type .

Это достаточно распространённая потребность: хотя атрибут HTML был устаревшим в HTML 4.01 (с обоснованием, что он является чисто стилистическим), он был впоследствии возвращён в HTML5 с конкретной целью — кодировать списки ссылок, как описано в MDN.

1 лайк

Я попробовал использовать это решение, и оно работает, исправив CSS следующим образом (в первой строке отсутствовало ol {):

.cooked div[data-wrap="letterlist"] ol {
  list-style: upper-alpha;
}

Однако мне не удаётся отобразить это в окне предпросмотра редактора, что станет проблемой для большинства моих пользователей. Я пробовал использовать инструменты разработчика в браузере, и кажется, что пользовательские стили не загружаются или не применяются в предпросмотре (возможно, я ошибаюсь, так как не являюсь профессионалом в этой области).

Есть ли у вас какие-либо идеи, как решить эту проблему, @Falco?

1 лайк

Я считаю, что HTML теперь поддерживается:

  1. Эта вещь
  2. Другая вещь
  3. Что-то ещё
<ol type="A">
<li> Эта вещь
<li> Другая вещь
<li> Что-то ещё
</ol>

И типы A, a, I и i.

Также <ol reversed> и <ol start=>:

  1. Хлеб
  2. Чипсы
  3. Арбуз
<ol reversed start=36>
<li> Хлеб
<li> Чипсы
<li> Арбуз
</ol>

Похоже, что использование HTML таким образом отключает обработку Markdown внутри тега <li>, поэтому я не могу предложить это пользователям.

1 лайк

Чтобы использовать дополнительное форматирование внутри них, я думаю, вам тоже придется использовать HTML-версию, так как система не любит смешивать:

  1. Хлеб
  2. Чипсы
  3. Арбуз
<ol reversed start=36>
<li> <b>Хлеб</b>
<li> <i>Чипсы</i>
<li> <s>Арбуз</s>
</ol>

Я понимаю. Как я уже говорил, я не считаю приемлемым предлагать такое моим пользователям — это полностью меняет разметку только потому, что вы хотите немного другой список.

Ах, жаль, что этот вариант вам не подходит.

Возможно, если вы создадите тему в Development с просьбой о помощи в доработке вашего текущего решения, кто-то сможет вам помочь. :+1:

1 лайк