Как расширить Parsedown, чтобы добавить класс к табличным тегам
Я хочу написать расширение для Parsedown, чтобы я мог добавить класс по умолчанию для каждого из тегов таблицы. Я обнаружил, что могу успешно взломать исходный код, добавив строки для назначения атрибутов в blockTable
функция (около строки 870):
$Block = array(
'alignments' => $alignments,
'identified' => true,
'element' => array(
'name' => 'table',
'handler' => 'elements',
'attributes' => array(
'class' => 'table',
),
),
);
Однако, если я попытаюсь свободно следовать учебному пособию по изменению разметки элемента, у меня ничего не получится (возможно, потому, что синтаксический анализ таблицы может быть итеративным процессом, а пример в учебнике - простая замена строки).
Я пробовал:
class Extension extends Parsedown
{
protected function blockTable($Line, array $Block = null)
{
$Block = parent::blockTable($Line, array $Block = null);
$Block['table']['attributes']['class'] = 'table';
return $Block;
}
}
но это не работает
3 ответа
Я не слишком уверен, что не так с вашим кодом, так как ваш код соответствует моему. Я просто добавил
'attributes' => array(
'class' => 'table table-responsive'
),
для идентификации таблицы, в строке 850, чтобы она стала
$Block = array(
'alignments' => $alignments,
'identified' => true,
'element' => array(
'name' => 'table',
'handler' => 'elements',
'attributes' => array(
'class' => 'table table-responsive',
),
),
);
который прекрасно работает для меня. Но это похоже на то же самое для вас, без учета таблицы.
Какую версию ты используешь?
Я знаю, что это очень старый вопрос, заданный 5 лет, 3 месяца назад, но я наткнулся на этот ответ в поиске Google, поэтому подумал, что стоит ответить кодом, который выводит класс таблицы.
class Extension extends Parsedown {
protected function blockTable($Line, ?array $Block = null)
{
$Block = parent::blockTable($Line, $Block);
if(is_null($Block)){ return; }
$Block['element']['attributes']['class'] = 'table table-responsive';
return $Block;
}
Я столкнулся с точно такой же проблемой с демонстрационным приложением Symfony. Наконец оказалось, что это не было разбором, потому что вывод был очищен html-sanitizer. Разрешение атрибута класса для таблиц решило проблему.
Для Symfony 4 демо-приложение добавить в config/packages/html_sanitizer.yaml
:
html_sanitizer:
#[...]
sanitizers:
default:
# [...]
tags:
table:
allowed_attributes:
- "class"