Мне довелось достаточно много работать на таких системах, как redmine, gitlab и github. И когда встала задача перехода на учет задач в 1С, альтернатив markdown в удобстве использования и легкости перехода обнаружено не было.
В этих системах этот язык разметки текста используется везде - задачи, вики, новости, описания проектов и т.д.
Нужно было сделать модуль, на основании которого можно было построить подобную функциональность.
На ваш суд представляется подсистема, которая позволяет легко встроить поддержку markdown практически в любую конфигурацию, которая использует современную платформу.
Что умеет
- Быстрое размещение на форме всех необходимых элементов для редактирования и предпросмотра результата в поле HTML. Примеры приведены ниже по тексту
- Автопривязка к существующему реквизиту формы или объекта
- Полноценный редактор с быстрыми кнопками, облегчающий форматирование
- Присоединение файлов
- Вставка картинки из буфера обмена. Подвязано по умолчанию на клавиши (ctrl+shift+z), а также на кнопку
- Быстрая вставка присоединенной ранее картинки
- Быстрый просмотр результата
- Возможность на одну форму вставлять несколько редакторов, привязанных к разным реквизитам
- Быстрый доступ к ранее присоединенным файлам
- Подсветка синтаксиса всех основный языков. Полный список можно тут посмотреть https://highlightjs.org/static/demo/
- Разные стили подсветки синтаксиса. Список вариантов взят отсюда
- Возможность налету изменять вариант подсветки синтаксиса для каждого редактора, размещенного в системе
- Краткая справка по всем основным командам markdown с примерами
- Возможность размещать на форме не весь редактор, а только часть для просмотра.
Размещение редактора на форме
1. В процедуру ПриСозданииНаСервере нужно вставить код.
РМ_MarkdownСервер.ВставитьПолеРедактированияТекстаНаФорму(ЭтаФорма, ГруппаКудаНужноВставитьРедактор,
ПутьКДанным, ВариантПодсветкиСинтаксиса);
С вариантом подсветки синтаксиса по умолчанию (VS)
Реквизит формы
РМ_MarkdownСервер.ВставитьПолеРедактированияТекстаНаФорму(ЭтаФорма, Элементы.ГруппаТекстРедактирования,
"ТекстРедактирования");
Реквизит объекта
РМ_MarkdownСервер.ВставитьПолеРедактированияТекстаНаФорму(ЭтаФорма, Элементы.ГруппаВторойРедакторНаФорме,
"Объект.ТекстМД");
С нужным вариантом подсветки синтаксиса
РМ_MarkdownСервер.ВставитьПолеРедактированияТекстаНаФорму(ЭтаФорма, Элементы.ГруппаТекстРедактирования,
"ТекстРедактирования","googlecode");
РМ_MarkdownСервер.ВставитьПолеРедактированияТекстаНаФорму(ЭтаФорма, Элементы.ГруппаТекстРедактирования,
"Объект.ТекстМД","github");
2. В модуль формы вставить блок процедур для отлова событий добавляемых элементов формы.
#Область ПодключаемыеКоманды
#Область Редактирование
//@skip-warning
&НаКлиенте
Процедура РМ_Подключаемый_ПриСменеСтраницыПоляКомментария(Элемент, ТекущаяСтраница)
РМ_MarkdownКлиент.ПриСменеСтраницыПоляКомментария(ЭтаФорма, Элемент, ТекущаяСтраница);
КонецПроцедуры
//@skip-warning
&НаКлиенте
Процедура РМ_Подключаемый_ОбработкаКомандыПоляКомментария(Команда)
РМ_MarkdownКлиент.ОбработкаКомандыПоляКомментария(ЭтаФорма, Команда);
КонецПроцедуры
//@skip-warning
&НаКлиенте
Процедура РМ_Подключаемый_ОткрытьПрисоединенныйФайл(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
// РМ_MarkdownКлиент.ОткрытьПрисоединенныйФайл(ЭтаФорма,Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура РМ_Подключаемый_ПриДобавленииПрисоединенногоФайла(ИмяФайла, ИдентификаторФайла, ПутьКДаннымБезЛишнего) Экспорт
РМ_Подключаемый_ПриДобавленииПрисоединенногоФайлаНаСервере(ИмяФайла, ИдентификаторФайла, ПутьКДаннымБезЛишнего);
КонецПроцедуры
&НаСервере
Процедура РМ_Подключаемый_ПриДобавленииПрисоединенногоФайлаНаСервере(ИмяФайла, ИдентификаторФайла,
ПутьКДаннымБезЛишнего) Экспорт
РМ_MarkdownСервер.ВывестиЭлементыПрисоединенногоФайлаНаФорму(ЭтотОбъект, ИмяФайла, ИдентификаторФайла,
ПутьКДаннымБезЛишнего);
КонецПроцедуры
//@skip-warning
&НаКлиенте
Процедура РМ_Подключаемый_УдалитьНовыйПрисоединенныйФайл(Команда)
РМ_MarkdownКлиент.УдалитьНовыйПрисоединенныйФайл(ЭтаФорма, Команда);
КонецПроцедуры
//@skip-warning
&НаКлиенте
Процедура РМ_Подключаемый_ОткрытьНовыйПрисоединенныйФайл(Команда)
РМ_MarkdownКлиент.ОткрытьПрисоединенныйФайл(ЭтаФорма, Команда);
КонецПроцедуры
#КонецОбласти
#Область Просмотр
//@skip-warning
&НаКлиенте
Процедура РМ_Подключаемый_ПриНажатииПоляПросмотраКомментария(Элемент, ДанныеСобытия, СтандартнаяОбработка)
РМ_MarkdownКлиент.ПриНажатииПоляПросмотраКомментария(ЭтаФорма, Элемент, ДанныеСобытия, СтандартнаяОбработка);
КонецПроцедуры
//@skip-warning
&НаКлиенте
Процедура РМ_Подключаемый_ДокументСформированПоляПросмотраКомментария(Элемент)
РМ_MarkdownКлиент.ДокументСформированПоляПросмотраКомментария(ЭтаФорма, Элемент);
КонецПроцедуры
#КонецОбласти
#КонецОбласти
Как разместить только элементы просмотра на вашей форме
1. В процедуре вставки редактора нужно указать параметр ТолькоПросмотр в значение Истина.
РМ_MarkdownСервер.ВставитьПолеРедактированияТекстаНаФорму(ЭтаФорма, Элементы.ГруппаТолькоПросмотр,
"ТекстТолькоПросмотр", ВариантПодсветкиСинтаксиса, Истина);
2. В модуль формы нужно вставить только процедуры из области Просмотр
Блок процедур для вставки только поля просмотра
#Область ПодключаемыеКоманды
#Область Просмотр
//@skip-warning
&НаКлиенте
Процедура РМ_Подключаемый_ПриНажатииПоляПросмотраКомментария(Элемент, ДанныеСобытия, СтандартнаяОбработка)
РМ_MarkdownКлиент.ПриНажатииПоляПросмотраКомментария(ЭтаФорма, Элемент, ДанныеСобытия, СтандартнаяОбработка);
КонецПроцедуры
//@skip-warning
&НаКлиенте
Процедура РМ_Подключаемый_ДокументСформированПоляПросмотраКомментария(Элемент)
РМ_MarkdownКлиент.ДокументСформированПоляПросмотраКомментария(ЭтаФорма, Элемент);
КонецПроцедуры
#КонецОбласти
#КонецОбласти
Ниже приведен код формы для описания синтаксиса markdown и ее представление
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ТекстСинтаксиса=
"# Краткий синтаксис markdown
|
|## Шрифты
|| Синтаксис | Результат |
|| ------ | ------ |
|| `**Жирный**` | **Жирный** |
|| `*Курсив*` | *Курсив* |
|| `***Жирный курсив***` | ***Жирный урсив*** |
|
|## Списки
|### Нумерованный список
|```
|1. Раз
|1. Два
|1. Три
|```
|1. Раз
|1. Два
|1. Три
|
|### Ненумерованный список
|```
|* Раз
|* Два
|* Три
|```
|* Раз
|* Два
|* Три
|
|## Списки задач
|
|```
|- [x] выполненная задача
|- [ ] невыполнено
|
|```
|- [x] выполненная задача
|- [ ] невыполнено
|
|
|## Заголовки
|
|`# Заголовок 1`
|# Заголовок 1
|
|`## Заголовок 2`
|## Заголовок 2
|
|`### Заголовок 3`
|### Заголовок 3
|
|## Ссылки
|| Синтаксис | Результат |
|| ------ | ------ |
|| `http://foo.bar` | http://foo.bar |
|| `[Foo](http://foo.bar)` | [Foo](http://foo.bar) |
|| `example@example.com` | example@example.com |
|
|## Встроенные картинки
|`![](urlКртинки)`
|`![](ИмяПрисоединенногоФайла)`
|
|## Цитаты(вложенные блоки)
|
|```
|> Цитата 1 го уровная
|> > Цитата 2-го уровня
|> > > Цитата 3-го уровня
|```
|> Цитата 1 го уровная
|> > Цитата 2-го уровня
|> > > Цитата 3-го уровня
|
|
|## Таблица
|```
|| А | Б | В |
|| ------ | ------ | ------ |
|| А | Б | В |
|| А | Б | В |
|| А | Б | В |
|
|```
|| А | Б | В |
|| ------ | ------ | ------ |
|| А | Б | В |
|| А | Б | В |
|| А | Б | В |
|
|## Блоки кода
|
|Пример
|
| ```
| //@skip-warning
| &НаКлиенте
| Процедура РМ_Подключаемый_ПриНажатииПоляПросмотраКомментария(Элемент, ДанныеСобытия, СтандартнаяОбработка)
| РМ_MarkdownКлиент.ПриНажатииПоляПросмотраКомментария(ЭтаФорма, Элемент, ДанныеСобытия, СтандартнаяОбработка);
| КонецПроцедуры
|
| ```
|
|Результат
|```
|//@skip-warning
|&НаКлиенте
|Процедура РМ_Подключаемый_ПриНажатииПоляПросмотраКомментария(Элемент, ДанныеСобытия, СтандартнаяОбработка)
| РМ_MarkdownКлиент.ПриНажатииПоляПросмотраКомментария(ЭтаФорма, Элемент, ДанныеСобытия, СтандартнаяОбработка);
|КонецПроцедуры
|
|```
|
|[Полный синтаксис редактора](https://github.com/showdownjs/showdown/wiki/Showdown's-Markdown-syntax)
|[Markdown синтаксис на русском](https://github.com/LevkinSergey/markdown-doc)
|";
РМ_MarkdownСервер.ВставитьПолеРедактированияТекстаНаФорму(ЭтаФорма, Элементы.ГруппаКраткийСинтаксис,
"ТекстСинтаксиса",,Истина);
КонецПроцедуры
#Область Просмотр
//@skip-warning
&НаКлиенте
Процедура РМ_Подключаемый_ПриНажатииПоляПросмотраКомментария(Элемент, ДанныеСобытия, СтандартнаяОбработка)
РМ_MarkdownКлиент.ПриНажатииПоляПросмотраКомментария(ЭтаФорма, Элемент, ДанныеСобытия, СтандартнаяОбработка);
КонецПроцедуры
//@skip-warning
&НаКлиенте
Процедура РМ_Подключаемый_ДокументСформированПоляПросмотраКомментария(Элемент)
РМ_MarkdownКлиент.ДокументСформированПоляПросмотраКомментария(ЭтаФорма, Элемент);
КонецПроцедуры
#КонецОбласти
То как выглядит в предприятии
Режим просмотра удобен для вывода информации, на форматирование которой не тратится много времени
Использованные библиотеки
Где работает
Windows
Linux,
ВебКлиент
Проверялось на платформе 8.3.15.1700 в Windows и linux.
На обычных формах не проверялось, но по идее должно работать.
Новое в версии
1.0.0.2
- Добавлен вариант подсветки синтаксиса ones, сделанный на основании цветов конфигуратора.
- Вариант подсветки синтаксиса ones сделал используемым по-умолчанию