mirror of
https://github.com/bia-technologies/os-confluence.git
synced 2026-06-18 20:02:33 +02:00
#ONECICD-211
Ошибка сравнения содержимого в формате Markdown
This commit is contained in:
+71
-22
@@ -10,6 +10,8 @@
|
||||
|
||||
///////////////////////////////////////////////////////////////////
|
||||
|
||||
Перем ФорматыСодержимого Экспорт;
|
||||
|
||||
// ОписаниеПодключения
|
||||
// Создает структуру с набором параметров подключения.
|
||||
// Созданная структура в дальнейшем используется для всех операций
|
||||
@@ -505,7 +507,8 @@
|
||||
|
||||
HTTPМетод = "POST";
|
||||
|
||||
ПараметрыКоманды = ПараметрыСозданияОбновления(ПараметрыПодключения, АдресСтраницы, Содержимое);
|
||||
ОписаниеСодержимого = ПодготовитьСодержимое(ПараметрыПодключения, Содержимое);
|
||||
ПараметрыКоманды = ПараметрыСозданияОбновления(АдресСтраницы, ОписаниеСодержимого);
|
||||
|
||||
URL = ПолучитьURLОперации();
|
||||
|
||||
@@ -550,13 +553,26 @@
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
ОписаниеСодержимого = ПодготовитьСодержимое(ПараметрыПодключения, Содержимое);
|
||||
|
||||
Если ОбновитьПриИзмененииСодержимого Тогда
|
||||
|
||||
СодержимоеConfluence = СодержимоеСтраницыПоИдентификатору(ПараметрыПодключения, АдресСтраницы.Идентификатор);
|
||||
Регексп = Новый РегулярноеВыражение("ac\:macro-id=""[a-z0-9-]{36}"""); // идентификаторы плагинов меняются
|
||||
Регексп.Многострочный = Истина;
|
||||
СодержимоеConfluence = Регексп.Заменить(СодержимоеConfluence, "NONE");
|
||||
ВрСодержимое = Регексп.Заменить(Содержимое, "NONE");
|
||||
ВрСодержимое = Регексп.Заменить(ОписаниеСодержимого.Значение, "NONE");
|
||||
|
||||
Если ОписаниеСодержимого.Формат = ФорматыСодержимого.MarkDown Тогда
|
||||
|
||||
// TODO: Известные проблемы при сравнении MarkDown
|
||||
// 1. Если в исходном файле есть "/", то для публикации его необходимо экранировать
|
||||
// но до сравнения, тк от confluence он приходит в норм виде
|
||||
// 2. Картинки (img) при конвертации тэк не закрытый, в confluence - закрытый
|
||||
СодержимоеConfluence = СтрЗаменить(СодержимоеConfluence, "</li>", ""); // Особенность конвертера Markdown → Confluence
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
|
||||
Если СтрСравнить(СокрЛП(СодержимоеConfluence), СокрЛП(ВрСодержимое)) = 0 Тогда
|
||||
|
||||
@@ -572,7 +588,7 @@
|
||||
|
||||
HTTPМетод = "PUT";
|
||||
|
||||
ПараметрыКоманды = ПараметрыСозданияОбновления(ПараметрыПодключения, АдресСтраницы, Содержимое, Версия);
|
||||
ПараметрыКоманды = ПараметрыСозданияОбновления(АдресСтраницы, ОписаниеСодержимого, Версия);
|
||||
|
||||
ТелоЗапроса = СтрокаJSON(ПараметрыКоманды);
|
||||
|
||||
@@ -588,7 +604,7 @@
|
||||
|
||||
КонецФункции // ОбновитьСтраницу()
|
||||
|
||||
Функция ПараметрыСозданияОбновления(ПараметрыПодключения, Адрес, Содержимое, Версия = Неопределено)
|
||||
Функция ПараметрыСозданияОбновления(Адрес, ОписаниеСодержимого, Версия = Неопределено)
|
||||
|
||||
ПараметрыКоманды = Новый Структура();
|
||||
ПараметрыКоманды.Вставить("type", "page");
|
||||
@@ -607,6 +623,46 @@
|
||||
ПараметрыКоманды.Вставить("ancestors", Родители);
|
||||
КонецЕсли;
|
||||
|
||||
ФорматПоУмолчанию = confluence.ФорматыСодержимого.Confluence;
|
||||
Значение = "";
|
||||
Формат = ФорматПоУмолчанию;
|
||||
|
||||
Если ТипЗнч(ОписаниеСодержимого) <> Тип("Структура")
|
||||
ИЛИ НЕ ОписаниеСодержимого.Свойство("Формат")
|
||||
ИЛИ НЕ ОписаниеСодержимого.Свойство("Значение") Тогда
|
||||
|
||||
ВызватьИсключение "Передано не корректное описание содержимого";
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Если ЗначениеЗаполнено(ОписаниеСодержимого.Значение) Тогда
|
||||
|
||||
Если ОписаниеСодержимого.Формат = ФорматыСодержимого.MarkDown Тогда
|
||||
|
||||
Значение = СтрЗаменить(ОписаниеСодержимого.Значение, "\", "\\");
|
||||
|
||||
Хранение = Новый Структура("value, representation", Значение, "editor");
|
||||
ТелоСтраницы = Новый Структура("editor", Хранение);
|
||||
|
||||
Иначе
|
||||
|
||||
Хранение = Новый Структура("value, representation", ОписаниеСодержимого.Значение, "storage");
|
||||
ТелоСтраницы = Новый Структура("storage", Хранение);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
ПараметрыКоманды.Вставить("body", ТелоСтраницы);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Возврат ПараметрыКоманды;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПодготовитьСодержимое(ПараметрыПодключения, Содержимое)
|
||||
|
||||
ОписаниеСодержимого = Новый Структура("Значение, Формат");
|
||||
|
||||
ФорматПоУмолчанию = "confluence";
|
||||
Значение = "";
|
||||
Формат = ФорматПоУмолчанию;
|
||||
@@ -636,33 +692,21 @@
|
||||
КонецЕсли;
|
||||
|
||||
Если ПустаяСтрока(Формат) Тогда
|
||||
|
||||
Формат = ФорматПоУмолчанию;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
|
||||
Если ЗначениеЗаполнено(Значение) Тогда
|
||||
|
||||
Если Формат = "markdown" Тогда
|
||||
|
||||
Значение = СтрЗаменить(Значение, "\", "\\");
|
||||
Если ЗначениеЗаполнено(Значение) И Формат = ФорматыСодержимого.MarkDown Тогда
|
||||
|
||||
Значение = ПреобразоватьMarkdownToConfluence(ПараметрыПодключения, Значение);
|
||||
|
||||
Хранение = Новый Структура("value, representation", Значение, "editor");
|
||||
ТелоСтраницы = Новый Структура("editor", Хранение);
|
||||
|
||||
Иначе
|
||||
|
||||
Хранение = Новый Структура("value, representation", Значение, "storage");
|
||||
ТелоСтраницы = Новый Структура("storage", Хранение);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
ПараметрыКоманды.Вставить("body", ТелоСтраницы);
|
||||
ОписаниеСодержимого.Формат = Формат;
|
||||
ОписаниеСодержимого.Значение = Значение;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Возврат ПараметрыКоманды;
|
||||
Возврат ОписаниеСодержимого;
|
||||
|
||||
КонецФункции
|
||||
|
||||
@@ -825,3 +869,8 @@
|
||||
Возврат Содержимое;
|
||||
|
||||
КонецФункции
|
||||
|
||||
ФорматыСодержимого = Новый Структура();
|
||||
ФорматыСодержимого.Вставить("Markdown", "markdown");
|
||||
ФорматыСодержимого.Вставить("Confluence", "confluence");
|
||||
ФорматыСодержимого.Вставить("HTML", "html");
|
||||
Reference in New Issue
Block a user