mirror of
https://github.com/alei1180/curlone.git
synced 2025-11-27 23:18:23 +02:00
Merge pull request #66 from Stivo182/feature/65-display-error-web
Вывод ошибок конвертации
This commit is contained in:
@@ -44,7 +44,7 @@
|
|||||||
РезультатПопыткиПоискаВЦикле = ПопыткаПоиска(АргументыДляЦикла, КонтекстПоиска);
|
РезультатПопыткиПоискаВЦикле = ПопыткаПоиска(АргументыДляЦикла, КонтекстПоиска);
|
||||||
|
|
||||||
Если НЕ РезультатПопыткиПоискаВЦикле.Найден Тогда
|
Если НЕ РезультатПопыткиПоискаВЦикле.Найден Тогда
|
||||||
Возврат Новый РезультатПоискаПараметра(РезультатПопыткиПоискаВЦикле.Аргументы, Истина);
|
Возврат Новый РезультатПоискаПараметра(РезультатПопыткиПоискаВЦикле.Аргументы, Истина, РезультатПопыткиПоискаВЦикле.Ошибка);
|
||||||
КонецЕсли;
|
КонецЕсли;
|
||||||
|
|
||||||
АргументыДляЦикла = РезультатПопыткиПоискаВЦикле.Аргументы;
|
АргументыДляЦикла = РезультатПопыткиПоискаВЦикле.Аргументы;
|
||||||
@@ -62,6 +62,8 @@
|
|||||||
Возврат Новый РезультатПоискаПараметра(АргументыОбрабатываемые, Ложь);
|
Возврат Новый РезультатПоискаПараметра(АргументыОбрабатываемые, Ложь);
|
||||||
КонецЕсли;
|
КонецЕсли;
|
||||||
|
|
||||||
|
РезультатПоиска = Новый РезультатПоискаПараметра(АргументыОбрабатываемые, Ложь);
|
||||||
|
|
||||||
Для каждого ОпцияПоиска Из Опции Цикл
|
Для каждого ОпцияПоиска Из Опции Цикл
|
||||||
|
|
||||||
Если Не КонтекстПоиска.НеВключенныеОпции[ОпцияПоиска.Значение] = Неопределено Тогда
|
Если Не КонтекстПоиска.НеВключенныеОпции[ОпцияПоиска.Значение] = Неопределено Тогда
|
||||||
@@ -98,6 +100,7 @@
|
|||||||
|
|
||||||
КонецЦикла;
|
КонецЦикла;
|
||||||
|
|
||||||
|
Если Не РезультатПоиска.Найден Тогда
|
||||||
Для каждого АргументПоиска Из Аргументы Цикл
|
Для каждого АргументПоиска Из Аргументы Цикл
|
||||||
|
|
||||||
Лог.Отладка("Ищу аргумент %1", АргументПоиска.Ключ.Имя);
|
Лог.Отладка("Ищу аргумент %1", АргументПоиска.Ключ.Имя);
|
||||||
@@ -120,8 +123,9 @@
|
|||||||
КонецЕсли;
|
КонецЕсли;
|
||||||
|
|
||||||
КонецЦикла;
|
КонецЦикла;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
Возврат Новый РезультатПоискаПараметра(АргументыОбрабатываемые, Ложь);
|
Возврат РезультатПоиска;
|
||||||
|
|
||||||
КонецФункции
|
КонецФункции
|
||||||
|
|
||||||
|
|||||||
@@ -144,9 +144,14 @@
|
|||||||
МассивСовпадений.Добавить(НовоеСовпадение(Соединение, РезультатПоиска.Аргументы, ЧистыйКонтекст));
|
МассивСовпадений.Добавить(НовоеСовпадение(Соединение, РезультатПоиска.Аргументы, ЧистыйКонтекст));
|
||||||
КонецЕсли;
|
КонецЕсли;
|
||||||
|
|
||||||
Если ЗначениеЗаполнено(РезультатПоиска.Ошибка)
|
Если ЗначениеЗаполнено(РезультатПоиска.Ошибка) Тогда
|
||||||
И (Соединение.Обязательное ИЛИ ОшибкиПарсера.ОшибкаТребуетВнимания(РезультатПоиска.Ошибка)) Тогда
|
Если ОшибкиПарсера.ОшибкаТребуетВнимания(РезультатПоиска.Ошибка) Тогда
|
||||||
Результат.Ошибки.Добавить(РезультатПоиска.Ошибка);
|
Результат.Ошибки.Добавить(РезультатПоиска.Ошибка);
|
||||||
|
Возврат Результат;
|
||||||
|
КонецЕсли;
|
||||||
|
Если Соединение.Обязательное И Не РезультатПоиска.Найден Тогда
|
||||||
|
Результат.Ошибки.Добавить(РезультатПоиска.Ошибка);
|
||||||
|
КонецЕсли;
|
||||||
КонецЕсли;
|
КонецЕсли;
|
||||||
|
|
||||||
Номер = Номер + 1;
|
Номер = Номер + 1;
|
||||||
|
|||||||
@@ -519,6 +519,8 @@
|
|||||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("-f val", "-f ARG", ОшибкиПарсера.ОшибкаОжидаетсяАргумент("ARG")));
|
ТестовыеСлучаи.Добавить(ТестовыйСлучай("-f val", "-f ARG", ОшибкиПарсера.ОшибкаОжидаетсяАргумент("ARG")));
|
||||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("", "[-f] ARG", ОшибкиПарсера.ОшибкаОжидаетсяАргумент("ARG")));
|
ТестовыеСлучаи.Добавить(ТестовыйСлучай("", "[-f] ARG", ОшибкиПарсера.ОшибкаОжидаетсяАргумент("ARG")));
|
||||||
|
|
||||||
|
ТестовыеСлучаи.Добавить(ТестовыйСлучай("ARG -f", "[ANY]", ОшибкиПарсера.ОшибкаТребуетсяЗначениеДляОпции("f")));
|
||||||
|
|
||||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("", "(-f | -b) -s",
|
ТестовыеСлучаи.Добавить(ТестовыйСлучай("", "(-f | -b) -s",
|
||||||
ОшибкиПарсера.ОшибкаОжидаетсяОпция("f").Текст
|
ОшибкиПарсера.ОшибкаОжидаетсяОпция("f").Текст
|
||||||
+ РазделительОшибок
|
+ РазделительОшибок
|
||||||
|
|||||||
@@ -52,6 +52,7 @@
|
|||||||
overflow-y: scroll;
|
overflow-y: scroll;
|
||||||
overflow-x: scroll;
|
overflow-x: scroll;
|
||||||
margin-bottom: 5px;
|
margin-bottom: 5px;
|
||||||
|
box-sizing: border-box;
|
||||||
}
|
}
|
||||||
|
|
||||||
textarea::placeholder {
|
textarea::placeholder {
|
||||||
@@ -84,6 +85,7 @@
|
|||||||
resize: vertical;
|
resize: vertical;
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
margin-bottom: 5px;
|
margin-bottom: 5px;
|
||||||
|
box-sizing: border-box;
|
||||||
}
|
}
|
||||||
|
|
||||||
pre.shiki {
|
pre.shiki {
|
||||||
@@ -98,6 +100,29 @@
|
|||||||
-ms-user-select: all; /* Internet Explorer/Edge */
|
-ms-user-select: all; /* Internet Explorer/Edge */
|
||||||
user-select: all; /* Chrome and Opera */
|
user-select: all; /* Chrome and Opera */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#warnings, #errors {
|
||||||
|
font-size: 12px;
|
||||||
|
padding: 8px 12px;
|
||||||
|
margin: 10px 0px;
|
||||||
|
border-radius: 3px;
|
||||||
|
border: 1px solid;
|
||||||
|
line-height: 1.5;
|
||||||
|
width: 100%;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
#warnings {
|
||||||
|
color: #1f2328 !important;
|
||||||
|
border-color: #fff8c5;
|
||||||
|
background-color: #fff8c5;
|
||||||
|
}
|
||||||
|
|
||||||
|
#errors {
|
||||||
|
color: #1f2328 !important;
|
||||||
|
border-color: #ffebe9;
|
||||||
|
background-color: #ffebe9;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
<script type="module">
|
<script type="module">
|
||||||
import { createHighlighter } from 'https://esm.sh/shiki@1.24.4';
|
import { createHighlighter } from 'https://esm.sh/shiki@1.24.4';
|
||||||
@@ -118,14 +143,21 @@
|
|||||||
|
|
||||||
function convertOnload() {
|
function convertOnload() {
|
||||||
let output = document.getElementById("output");
|
let output = document.getElementById("output");
|
||||||
|
let errors = [];
|
||||||
|
outputText = "";
|
||||||
|
|
||||||
if(this.status === 200){
|
if(this.status === 200){
|
||||||
outputText = this.response.result;
|
outputText = this.response.result;
|
||||||
|
errors = this.response.errors;
|
||||||
} else {
|
} else {
|
||||||
outputText = "";
|
errors.push({
|
||||||
|
text: 'Неудалось выполнить запрос',
|
||||||
|
critical: true
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
setOutput(outputText);
|
setOutput(outputText);
|
||||||
|
displayErros(errors);
|
||||||
}
|
}
|
||||||
|
|
||||||
function setOutput(code){
|
function setOutput(code){
|
||||||
@@ -139,6 +171,28 @@
|
|||||||
navigator.clipboard.writeText(text);
|
navigator.clipboard.writeText(text);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function displayErros(errors) {
|
||||||
|
let elementWarnings = document.getElementById("warnings");
|
||||||
|
let elementErrors = document.getElementById("errors");
|
||||||
|
|
||||||
|
let textWarnings = "";
|
||||||
|
let textErrors = "";
|
||||||
|
|
||||||
|
errors.forEach((record) => {
|
||||||
|
if(record.critical){
|
||||||
|
textErrors += record.text + '<br/>';
|
||||||
|
} else {
|
||||||
|
textWarnings += record.text + '<br/>';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
elementWarnings.innerHTML = textWarnings;
|
||||||
|
elementWarnings.style.display = textWarnings.length > 0 ? 'block' : 'none';
|
||||||
|
|
||||||
|
elementErrors.innerHTML = textErrors;
|
||||||
|
elementErrors.style.display = textErrors.length > 0 ? 'block' : 'none';
|
||||||
|
}
|
||||||
|
|
||||||
document.getElementById("convert").addEventListener("click", function (e) {
|
document.getElementById("convert").addEventListener("click", function (e) {
|
||||||
let formData = new FormData(document.forms.curl);
|
let formData = new FormData(document.forms.curl);
|
||||||
let command = formData.get("command");
|
let command = formData.get("command");
|
||||||
@@ -173,6 +227,7 @@
|
|||||||
<textarea name="command" id="command" cols="120" rows="9" spellcheck="false" placeholder="curl example.com" required autofocus></textarea>
|
<textarea name="command" id="command" cols="120" rows="9" spellcheck="false" placeholder="curl example.com" required autofocus></textarea>
|
||||||
<input type="button" id="convert" value="Конвертировать">
|
<input type="button" id="convert" value="Конвертировать">
|
||||||
</form>
|
</form>
|
||||||
|
<div id="errors" style="display: none;"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="container">
|
<div class="container">
|
||||||
@@ -180,6 +235,7 @@
|
|||||||
<div>Код 1C</div>
|
<div>Код 1C</div>
|
||||||
<div id="output" class="output selectable"></div>
|
<div id="output" class="output selectable"></div>
|
||||||
<input type="button" id="copy" value="Скопировать">
|
<input type="button" id="copy" value="Скопировать">
|
||||||
|
<div id="warnings" style="display: none;"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="container">
|
<div class="container">
|
||||||
|
|||||||
@@ -72,7 +72,14 @@
|
|||||||
// Получает поддерживаемые опции
|
// Получает поддерживаемые опции
|
||||||
//
|
//
|
||||||
// Возвращаемое значение:
|
// Возвращаемое значение:
|
||||||
// Массив из Строка
|
// ТаблицаЗначений - таблица с колонками:
|
||||||
|
// * Наименование - Строка - наименование
|
||||||
|
// * НаименованияПараметров - Массив - массив строк, с полными наименованиями опции (например, [-f, --force])
|
||||||
|
// * Описание - Строка - краткое описание
|
||||||
|
// * ПодробноеОписание - Строка - подробное описание
|
||||||
|
// * ПеременнаяОкружения - Строка - переменная окружения, возможно несколько через пробел
|
||||||
|
// * СкрытьЗначение - Булево - признак скрытия значения по умолчанию
|
||||||
|
// * Значение - Произвольный - строковое представление значения по умолчанию
|
||||||
Функция ПоддерживаемыеОпции() Экспорт
|
Функция ПоддерживаемыеОпции() Экспорт
|
||||||
Возврат ОпцииКоманды(Истина, Ложь);
|
Возврат ОпцииКоманды(Истина, Ложь);
|
||||||
КонецФункции
|
КонецФункции
|
||||||
@@ -80,7 +87,14 @@
|
|||||||
// Получает неподдерживаемые опции
|
// Получает неподдерживаемые опции
|
||||||
//
|
//
|
||||||
// Возвращаемое значение:
|
// Возвращаемое значение:
|
||||||
// Массив из Строка
|
// ТаблицаЗначений - таблица с колонками:
|
||||||
|
// * Наименование - Строка - наименование
|
||||||
|
// * НаименованияПараметров - Массив - массив строк, с полными наименованиями опции (например, [-f, --force])
|
||||||
|
// * Описание - Строка - краткое описание
|
||||||
|
// * ПодробноеОписание - Строка - подробное описание
|
||||||
|
// * ПеременнаяОкружения - Строка - переменная окружения, возможно несколько через пробел
|
||||||
|
// * СкрытьЗначение - Булево - признак скрытия значения по умолчанию
|
||||||
|
// * Значение - Произвольный - строковое представление значения по умолчанию
|
||||||
Функция НеподдерживаемыеОпции() Экспорт
|
Функция НеподдерживаемыеОпции() Экспорт
|
||||||
Возврат ОпцииКоманды(Ложь, Истина);
|
Возврат ОпцииКоманды(Ложь, Истина);
|
||||||
КонецФункции
|
КонецФункции
|
||||||
@@ -920,40 +934,47 @@
|
|||||||
Функция ОпцииКоманды(ВключатьПоддерживаемые = Истина, ВключатьНеподдерживаемые = Истина) Экспорт
|
Функция ОпцииКоманды(ВключатьПоддерживаемые = Истина, ВключатьНеподдерживаемые = Истина) Экспорт
|
||||||
|
|
||||||
Приложение = СоздатьКонсольноеПриложение(ВключатьПоддерживаемые, ВключатьНеподдерживаемые);
|
Приложение = СоздатьКонсольноеПриложение(ВключатьПоддерживаемые, ВключатьНеподдерживаемые);
|
||||||
|
|
||||||
МассивОпций = Новый Массив();
|
|
||||||
ТаблицаОпций = Приложение.ПолучитьКоманду().ПолучитьТаблицуОпций();
|
ТаблицаОпций = Приложение.ПолучитьКоманду().ПолучитьТаблицуОпций();
|
||||||
|
|
||||||
Для Каждого СтрокаТаблицы Из ТаблицаОпций Цикл
|
Возврат ТаблицаОпций;
|
||||||
Для Каждого Опция Из СтрокаТаблицы.НаименованияПараметров Цикл
|
|
||||||
МассивОпций.Добавить(Опция);
|
|
||||||
КонецЦикла;
|
|
||||||
КонецЦикла;
|
|
||||||
|
|
||||||
Возврат МассивОпций;
|
|
||||||
|
|
||||||
КонецФункции
|
КонецФункции
|
||||||
|
|
||||||
Процедура ОбработатьИсключениеОбработкиКоманды(ИнформацияОбОшибке)
|
Процедура ОбработатьИсключениеОбработкиКоманды(ИнформацияОбОшибке)
|
||||||
|
|
||||||
Текст = КраткоеПредставлениеОшибки(ИнформацияОбОшибке);
|
Текст = КраткоеПредставлениеОшибки(ИнформацияОбОшибке);
|
||||||
ПодстрокаПоиска = "Ошибка чтения параметров команды: Неожидаемая опция";
|
|
||||||
Если СтрНачинаетсяС(Текст, ПодстрокаПоиска) Тогда
|
// Неожидаемая опция
|
||||||
Опция = СокрЛП(СтрЗаменить(Текст, ПодстрокаПоиска, ""));
|
ПодстрокаПоиска = "Неожидаемая опция";
|
||||||
|
Инд = СтрНайти(Текст, ПодстрокаПоиска);
|
||||||
|
Если Инд Тогда
|
||||||
|
Опция = СокрЛП(Сред(Текст, Инд + СтрДлина(ПодстрокаПоиска)));
|
||||||
ТекстОшибки = СтрШаблон("Опция %1 неизвестна", Опция);
|
ТекстОшибки = СтрШаблон("Опция %1 неизвестна", Опция);
|
||||||
ИсходящиеОшибки.Добавить(НоваяОшибка(ТекстОшибки, Истина));
|
ИсходящиеОшибки.Добавить(НоваяОшибка(ТекстОшибки, Истина));
|
||||||
Иначе
|
Возврат;
|
||||||
ВызватьИсключение Текст;
|
|
||||||
КонецЕсли;
|
КонецЕсли;
|
||||||
|
|
||||||
|
// Опция должна содержать значение
|
||||||
|
ПодстрокаПоиска = "должна содержать значение";
|
||||||
|
Инд = СтрНайти(Текст, ":");
|
||||||
|
Если СтрНайти(Текст, ПодстрокаПоиска) И Инд Тогда
|
||||||
|
ТекстОшибки = СокрЛП(Сред(Текст, Инд + 1));
|
||||||
|
ИсходящиеОшибки.Добавить(НоваяОшибка(ТекстОшибки, Истина));
|
||||||
|
Возврат;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
ВызватьИсключение Текст;
|
||||||
|
|
||||||
КонецПроцедуры
|
КонецПроцедуры
|
||||||
|
|
||||||
Процедура ДополнитьОшибкиНеподдерживаемыеОпции(Команда)
|
Процедура ДополнитьОшибкиНеподдерживаемыеОпции(Команда)
|
||||||
|
|
||||||
НеподдерживаемыеОпции = НеподдерживаемыеОпции();
|
НеподдерживаемыеОпции = НеподдерживаемыеОпции();
|
||||||
|
|
||||||
Для Каждого Опция Из НеподдерживаемыеОпции Цикл
|
Для Каждого Строка Из НеподдерживаемыеОпции Цикл
|
||||||
Значение = Команда.ЗначениеОпции(Опция);
|
Значение = Команда.ЗначениеОпции(Строка.Наименование);
|
||||||
Если ЗначениеЗаполнено(Значение) Тогда
|
Если ЗначениеЗаполнено(Значение) Тогда
|
||||||
ТекстОшибки = СтрШаблон("Опция %1 не поддерживается", Опция);
|
ТекстОшибки = СтрШаблон("Опция %1 не поддерживается", СтрСоединить(Строка.НаименованияПараметров, ", "));
|
||||||
ИсходящиеОшибки.Добавить(НоваяОшибка(ТекстОшибки));
|
ИсходящиеОшибки.Добавить(НоваяОшибка(ТекстОшибки));
|
||||||
КонецЕсли;
|
КонецЕсли;
|
||||||
КонецЦикла;
|
КонецЦикла;
|
||||||
|
|||||||
@@ -32,11 +32,10 @@
|
|||||||
Результат = Новый ТекстовыйДокумент();
|
Результат = Новый ТекстовыйДокумент();
|
||||||
|
|
||||||
КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
|
КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
|
||||||
ПоддерживаемыеОпции = КонвертерКомандыCURL.ПоддерживаемыеОпции();
|
|
||||||
ПоддерживаемыеОпцииСоответствие = Новый Соответствие();
|
ПоддерживаемыеОпцииСоответствие = Новый Соответствие();
|
||||||
|
|
||||||
Для Каждого Опция Из ПоддерживаемыеОпции Цикл
|
Для Каждого Строка Из КонвертерКомандыCURL.ПоддерживаемыеОпции() Цикл
|
||||||
ПоддерживаемыеОпцииСоответствие.Вставить(Опция, Истина);
|
ПоддерживаемыеОпцииСоответствие.Вставить(Строка.Наименование, Истина);
|
||||||
КонецЦикла;
|
КонецЦикла;
|
||||||
|
|
||||||
Для Каждого Строка Из Опции Цикл
|
Для Каждого Строка Из Опции Цикл
|
||||||
|
|||||||
Reference in New Issue
Block a user