#ONECICD-211

Ошибка сравнения содержимого в формате Markdown
This commit is contained in:
aleksey.koryakin
2019-11-14 14:26:34 +03:00
parent 4b24c141a8
commit 153e09eba4
+71 -22
View File
@@ -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");