1
0
mirror of https://github.com/alei1180/curlone.git synced 2025-11-24 22:53:34 +02:00

refactor(web): Отправка запроса через JS XHR объект

This commit is contained in:
Dmitry Ivanov
2024-12-26 22:04:56 +03:00
parent 71ca90fc03
commit 5236ff67db
2 changed files with 50 additions and 58 deletions

View File

@@ -57,7 +57,7 @@
color: #777;
}
input[type=submit] {
input[type=button] {
background-color: black;
color: white;
padding: 10px 10px;
@@ -75,6 +75,27 @@
align-items: center;
}
</style>
<script>
function convert(){
let formData = new FormData(document.forms.curl);
let command = formData.get("command")
let req = new XMLHttpRequest();
req.onload = convertOnload;
req.responseType = "json";
req.open("GET", "/convert?cmd=" + encodeURIComponent(command));
req.send();
}
function convertOnload() {
let output = document.getElementById("output");
if(xmlhttp.status === 200){
output.value = this.response.result;
} else {
output.value = "";
}
}
</script>
</head>
<body>
<div class="container">
@@ -84,10 +105,10 @@
</div>
<div class="container">
<div>
<form method="post" action="/">
<label for="inputcurl">Команда curl</label>
<textarea name="inputcurl" id="inputcurl" cols="120" rows="9" spellcheck="false" placeholder="curl example.com" required autofocus>{{ Модель.Команда }}</textarea>
<input type="submit" value="Конвертировать">
<form name="curl">
<label for="command">Команда curl</label>
<textarea name="command" id="command" cols="120" rows="9" spellcheck="false" placeholder="curl example.com" required autofocus></textarea>
<input type="button" onclick="convert()" value="Конвертировать">
</form>
</div>
</div>
@@ -96,8 +117,8 @@
<label for="output">Код 1C</label>
<textarea name="output" id="output" cols="120" rows="9" wrap="off" spellcheck="false" placeholder='Соединение = Новый HTTPСоединение("example.com", 80);
HTTPЗапрос = Новый HTTPЗапрос("/");
HTTPОтвет = Соединение.ВызватьHTTPМетод("GET", HTTPЗапрос);'>{{ Модель.ПрограммныйКод }}</textarea>
<input type="submit" value="Скопировать">
HTTPОтвет = Соединение.ВызватьHTTPМетод("GET", HTTPЗапрос);'></textarea>
<input type="button" value="Скопировать">
</div>
</div>
<div class="container">

View File

@@ -5,67 +5,38 @@
&ТочкаМаршрута("")
&Отображение("./Классы/interface/view/index.html")
Процедура Главная(Запрос, Ответ) Экспорт
Перем Ошибки;
ПараметрыЗапроса = ПараметрыИзТекста(Запрос.Тело);
Ответ.Модель = Модель();
Команда = ПараметрыЗапроса.Получить("inputcurl");
Если Команда <> Неопределено Тогда
Ответ.Модель.Команда = Команда;
КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
Попытка
Результат = КонвертерКомандыCURL.Конвертировать(Команда, Новый ГенераторПрограммногоКода1С(), Ошибки);
Исключение
Ответ.Модель.ТекстОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
КонецПопытки;
Ответ.Модель.ПрограммныйКод = Результат;
КонецЕсли;
Процедура Главная(Ответ) Экспорт
КонецПроцедуры
Функция Модель()
Модель = Новый Структура();
Модель.Вставить("Команда", "");
Модель.Вставить("ПрограммныйКод", "");
Модель.Вставить("ТекстОшибки", "");
Возврат Модель;
КонецФункции
&ТочкаМаршрута("/convert")
Процедура Конвертировать(ПараметрыЗапросаИменные, Ответ) Экспорт
Перем Ошибки;
Функция ПараметрыИзТекста(ПараметрыТекстом, РазделительПараметров = "&") Экспорт
Результат = Новый Соответствие();
Данные = Новый Структура("result, errors", "", Новый Массив());
Если ЗначениеЗаполнено(ПараметрыТекстом) Тогда
ПараметрыТекстом = СтрЗаменить(ПараметрыТекстом, "+", " ");
ТекстКоманды = ПараметрыЗапросаИменные.Получить("cmd");
Если ТекстКоманды <> Неопределено Тогда
КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
МассивПараметров = СтрРазделить(РаскодироватьСтроку(ПараметрыТекстом, СпособКодированияСтроки.КодировкаURL), РазделительПараметров, Ложь);
Для Каждого ТекПараметрСтрокой из МассивПараметров Цикл
ТекПараметр = РазделитьСтроку(ТекПараметрСтрокой, "=");
Результат.Вставить(ТекПараметр.Лево, ТекПараметр.Право);
КонецЦикла;
Попытка
Данные.result = КонвертерКомандыCURL.Конвертировать(ТекстКоманды, Новый ГенераторПрограммногоКода1С(), Ошибки);
Для Каждого Ошибка Из Ошибки Цикл
Данные.errors.Добавить(НоваяОшибка(Ошибка.Текст, Ошибка.Критичная));
КонецЦикла;
Исключение
Данные.errors.Добавить(НоваяОшибка(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), Истина));
КонецПопытки;
КонецЕсли;
Возврат Результат;
КонецФункции
Парсер = Новый ПарсерJSON();
Функция РазделитьСтроку(Строка, Разделитель) Экспорт
Результат = Новый Структура("Лево, Право","","");
ПозицияРазделителя = СтрНайти(Строка, Разделитель);
Ответ.УстановитьТипКонтента("json");
Ответ.ТелоТекст = Парсер.ЗаписатьJSON(Данные);
Если ПозицияРазделителя = 0 Тогда
Результат.Лево = Строка;
Иначе
Результат.Лево = Лев(Строка, ПозицияРазделителя - 1);
Результат.Право = Сред(Строка, ПозицияРазделителя + СтрДлина(Разделитель));
КонецЕсли;
КонецПроцедуры
Возврат Результат;
Функция НоваяОшибка(Текст, Критичная = Ложь)
Возврат Новый Структура("text, critical", Текст, Критичная);
КонецФункции