Skip to content

Commit

Permalink
Обработчики шаблонов
Browse files Browse the repository at this point in the history
  • Loading branch information
Nivanchenko committed Sep 1, 2023
1 parent 4fc42bd commit ed2715c
Show file tree
Hide file tree
Showing 10 changed files with 130 additions and 12 deletions.
40 changes: 40 additions & 0 deletions README.MD
Original file line number Diff line number Diff line change
Expand Up @@ -689,6 +689,46 @@ app/view/view1.html

![hw11](docs/hw11.png)

## Обработчики шаблонов.

Может быть так, что до или после рендера модели в шаблоне, нужно выполнить некие манипуляции с текстом шаблона. Для выполнения этой операции нужно зарегистрировать обработчики событий до рендера и после. Например:

```html
<div>
@ТекстЗаменыДоРендера@
{{Модель}}
@ТекстЗаменыПослеРендера@
</div>
```

В этом шаблоне, мы хотим заменить вставки, неким текстом. Для этого добавим поделку два желудя.

```bsl
&Желудь
&Прозвище("ПередОбработкойОтображения")
Процедура ПриСозданииОбъекта()
КонецПроцедуры
Процедура Преобразовать(ТекстШаблона) Экспорт
ТекстШаблона = СтрЗаменить(ТекстШаблона, "@ТекстЗаменыДоРендера@", "Шапка");
КонецПроцедуры
```

```bsl
&Желудь
&Прозвище("ПослеОбработкиОтображения")
Процедура ПриСозданииОбъекта()
КонецПроцедуры
Процедура Преобразовать(ТекстШаблона) Экспорт
ТекстШаблона = СтрЗаменить(ТекстШаблона, "@ТекстЗаменыПослеРендера@", "Подвал");
КонецПроцедуры
```

Тут мы добавили желуди с ```Прозвище``` "ПередОбработкойОтображения" и "ПослеОбработкиОтображения". Таких желудей может быть несколько. Но у каждого такого желудя должна быть процедура с именем ``Преобразовать```, в которую будет передан текст шаблона.

## Компоненты.

Писать шаблоны круто, но что может быть еще круче? Писать меньше шаблонов, и переиспользовать уже имеющиеся. Представим, что вам в разных местах нужно отображать одну и туже информацию, (таблицы, элементы меню, и т.д.). для решения этой задачи, шаблон имеет секретную функцию ```{{ ВывестиПоШаблону(<Путь до шаблона>, <Модель для шаблона>) }}```
Expand Down
1 change: 0 additions & 1 deletion autumn-properties.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
{ "winow":
{
"КаталогСПриложениями": "./tests/app",
"АвтоСтарт": true,
"ЗадержкаПередЧтениемСокета": 65,
"КаталогиСФайлами": {
"/tests": "./tests/app/files"
Expand Down
8 changes: 4 additions & 4 deletions packagedef
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@


Описание.Имя("winow")
.Версия("0.5.1")
.Версия("0.5.2")
.Автор("Никита Иванченко")
.АдресАвтора("https://github.com/Nivanchenko")
.Описание("Минималистичный веб-сервер на нативном OneScript")
Expand All @@ -83,10 +83,10 @@
.ВключитьФайл("README.md")
.ВключитьФайл("package-loader.os")
.ЗависитОт("asserts", "1.4.0")
.ЗависитОт("autumn", "3.1.3")
.ЗависитОт("autumn-cli", "1.0.2")
.ЗависитОт("autumn", "3.1.4")
.ЗависитОт("autumn-cli", "1.0.4")
.ЗависитОт("json")
.ЗависитОт("autumn-logos", "1.1.0")
.ЗависитОт("autumn-logos", "1.1.1")
.ЗависитОт("fs")
.РазработкаЗависитОт("1commands")
.РазработкаЗависитОт("1testrunner")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,5 +13,5 @@
КонецФункции

Функция ВерсияПриложения() Экспорт
Возврат "0.5.0";
Возврат "0.5.2";
КонецФункции
23 changes: 22 additions & 1 deletion src/Классы/Шаблон.os
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@
&Пластилин Перем МенеджерОтображений;
&Пластилин Перем Поделка;

&Пластилин(Значение = "ПередОбработкойОтображения", Тип = "Массив") Перем ОбработчикиПеред;
&Пластилин(Значение = "ПослеОбработкиОтображения", Тип = "Массив") Перем ОбработчикиПосле;

&Желудь
&Характер("Компанейский")
Процедура ПриСозданииОбъекта(
Expand Down Expand Up @@ -39,6 +42,8 @@

Функция СформироватьТекст(Модель) Экспорт

ВыполнитьОбработчикиПеред();

ИнициализацияПеременных();

БлокПоиска = Новый Массив(2);
Expand Down Expand Up @@ -80,10 +85,26 @@

ЗаполнитьМассивКодом(Результат, Модель);

Возврат СтрСоединить(Результат, "");
ТекстОтображения = СтрСоединить(Результат, "");

ВыполнитьОбработчикиПосле(ТекстОтображения);

Возврат ТекстОтображения;

КонецФункции

Процедура ВыполнитьОбработчикиПеред()
Для Каждого Обработчик Из ОбработчикиПеред Цикл
Обработчик.Преобразовать(ТекстШаблона);
КонецЦикла;
КонецПроцедуры

Процедура ВыполнитьОбработчикиПосле(ТекстРезультата)
Для Каждого Обработчик Из ОбработчикиПосле Цикл
Обработчик.Преобразовать(ТекстРезультата);
КонецЦикла;
КонецПроцедуры

Процедура ЗаполнитьМассивКодом(Результат, Модель)

ВесьКод = СтрСоединить(КодВыполнения);
Expand Down
12 changes: 7 additions & 5 deletions tests/alltest.os
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
#Использовать ".."
#Использовать asserts

Перем Сервер;
Перем Поделка;

Процедура ПередЗапускомТеста() Экспорт
ВключитьСервер();
Expand All @@ -13,12 +13,14 @@

Процедура ВключитьСервер()

Если Сервер = Неопределено Тогда
Сервер = Новый Поделка();
ФоновыеЗадания.Выполнить(Сервер, "ЗапуститьПриложение");
Если Поделка = Неопределено Тогда
Поделка = Новый Поделка();
Поделка.ЗапуститьПриложение();
ВебСервер = Поделка.НайтиЖелудь("ВебСервер");
ФоновыеЗадания.Выполнить(ВебСервер, "Старт");
// Подождем что бы сервер успел запустится и проинициализироваться.
Приостановить(1000);
Настройки = Сервер.НайтиЖелудь("Настройки");
Настройки = Поделка.НайтиЖелудь("Настройки");
Настройки.ЗадержкаПередЗакрытиемСокета = 300;
КонецЕсли;

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@

&Желудь
&Прозвище("ПередОбработкойОтображения")
Процедура ПриСозданииОбъекта()

КонецПроцедуры

Процедура Преобразовать(ТекстШаблона) Экспорт
ТекстШаблона = СтрЗаменить(ТекстШаблона, "@до", "1");
КонецПроцедуры
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@

&Желудь
&Прозвище("ПослеОбработкиОтображения")
Процедура ПриСозданииОбъекта()

КонецПроцедуры

Процедура Преобразовать(ТекстШаблона) Экспорт
ТекстШаблона = СтрЗаменить(ТекстШаблона, "@после", "3");
КонецПроцедуры
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@

&Желудь
&Прозвище("ПослеОбработкиОтображения")
Процедура ПриСозданииОбъекта()

КонецПроцедуры

Процедура Преобразовать(ТекстШаблона) Экспорт
ТекстШаблона = СтрЗаменить(ТекстШаблона, "@конец", "!");
КонецПроцедуры
26 changes: 26 additions & 0 deletions tests/templateProcessor.os
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
#Использовать autumn
#Использовать ".."
#Использовать asserts

&Тест
Процедура ПроверкаОбработчиковШаблона() Экспорт

// Дано
ПодключитьСценарий("tests/mock/мокПередОбработкойОтображения.os", "мокПередОбработкойОтображения");
ПодключитьСценарий("tests/mock/мокПослеОбработкиОтображения.os", "мокПослеОбработкиОтображения");
ПодключитьСценарий("tests/mock/мокПослеОбработкиОтображения2.os", "мокПослеОбработкиОтображения2");
Поделка = Новый Поделка();
Поделка.ПросканироватьКаталог("tests/mock/");
Поделка.ЗапуститьПриложение();
ТекстШаблона = "@до{{Модель}}@после@конец";
Параметры = Новый Массив();
Параметры.Добавить(ТекстШаблона);
Шаблон = Поделка.НайтиЖелудь("Шаблон", Параметры);

// Когда
Результат = Шаблон.СформироватьТекст("2");

//Тогда
Ожидаем.Что(Результат).Равно("123!");

КонецПроцедуры

0 comments on commit ed2715c

Please sign in to comment.