Отображение изменений кода и комментариев

Вопрос в том, существует ли такая функция (возможно, в виде плагина), или это запрос на добавление новой функции в случае её отсутствия…

Мне нужна возможность отображать в обсуждениях форума Discourse что-то вроде этого:

Речь не просто о показе фрагмента кода с подсветкой синтаксиса для конкретного языка (это у нас уже есть: например, открываем тегом php</kbd> и закрываем тегом <kbd>).

Мне нужно, чтобы можно было подсвечивать отдельные строки, возможно, добавлять к ним комментарии и показывать правки в строке. Такие возможности обычно полезны на любых форумах, где обсуждаются технические вопросы, когда вы советуете внести изменения или указываете на проблемные места.

Хотя мы и используем GitHub для нашего проекта, я спрашиваю не о том, как отображать изменения, происходящие в GitHub, а о чём-то, что можно вводить независимо внутри Discourse. Приведённое выше изображение служит лишь примером того, как это могло бы выглядеть.

Вы можете отображать различия следующим образом:

Обычная строка
- удалённая строка
+ добавленная строка

```diff
Обычная строка
- удалённая строка
+ добавленная строка
```
6 лайков

Хм… выглядит :cool:

А можно ли совместить это с подсветкой синтаксиса для конкретного языка?

Без неё код выглядит так скучно, а с ней — просто отлично.

К сожалению, нет — хотя я согласен, это было бы неплохо. Мы используем highlight.js для подсветки синтаксиса. Похоже, что на их GitHub-репозитории уже обсуждался похожий вопрос (highlight as diff and language · Issue #480 · highlightjs/highlight.js · GitHub), но было решено, что это выходит за рамки проекта.

3 лайка

Хм :thinking:

Так, у них есть этот фрагмент в Gist, и они предлагают реализовать это вне подсветчика синтаксиса (в данном случае это marked.js, полагаю, то же самое можно сделать и с highlight.js).

Как вы думаете, Discourse мог бы это сделать? Или, прежде чем спрашивать об этом, имеет ли это вообще архитектурный смысл?

По-видимому, общая идея заключается просто в поиске и замене: убрать метки diff, отправить код в подсветчик синтаксиса, а затем снова применить поиск и замену. Звучит довольно неуклюже, но на самом деле фрагмент не так уж и сложен.

1 лайк

Это, безусловно, возможно, но я не думаю, что это будет легко. Всё подсветка синтаксиса происходит в JavaScript, поэтому её можно манипулировать с помощью компонента темы.

1 лайк

Как вы сделали их цветными?

Type out the code block like this:

```diff
A normal line
- removed line
+ added line
```

Specifying diff as the syntax means that you can use + and - at the beginning of lines to highlight them green and red.

3 лайка
Обычная строка
- удалённая строка
+ добавленная строка

Я сделал это! Спасибо @david

2 лайка

С этого момента я буду использовать конструкцию diff — она полезна.

Я не вижу, чтобы Discourse реализовывал другое предложение из Gist. Чем больше я об этом думаю, тем больше убеждаюсь, что это должно быть встроено внутрь подсветки синтаксиса, а не находиться снаружи.

В сущности, с течением времени имеет смысл добавлять некоторые функции в подсветку синтаксиса, и основная задача показать код в удобочитаемом виде естественным образом расширяется до отображения некоторых динамических аспектов кода.

Что изменилось, где, кем; на что я указываю; какой полезный комментарий объясняет связь кода с местом, где он публикуется, и так далее.

Спасибо всем за участие в этом обсуждении.

1 лайк

Может быть, альтернатива?

<del>del</del>
<ins>ins</ins>

del
ins

4 лайка