diff --git a/README.MD b/README.MD
index ddde5e9..64e5110 100644
--- a/README.MD
+++ b/README.MD
@@ -689,6 +689,46 @@ app/view/view1.html
![hw11](docs/hw11.png)
+## Обработчики шаблонов.
+
+Может быть так, что до или после рендера модели в шаблоне, нужно выполнить некие манипуляции с текстом шаблона. Для выполнения этой операции нужно зарегистрировать обработчики событий до рендера и после. Например:
+
+```html
+
+@ТекстЗаменыДоРендера@
+{{Модель}}
+@ТекстЗаменыПослеРендера@
+
+```
+
+В этом шаблоне, мы хотим заменить вставки, неким текстом. Для этого добавим поделку два желудя.
+
+```bsl
+&Желудь
+&Прозвище("ПередОбработкойОтображения")
+Процедура ПриСозданииОбъекта()
+
+КонецПроцедуры
+
+Процедура Преобразовать(ТекстШаблона) Экспорт
+ ТекстШаблона = СтрЗаменить(ТекстШаблона, "@ТекстЗаменыДоРендера@", "Шапка");
+КонецПроцедуры
+```
+
+```bsl
+&Желудь
+&Прозвище("ПослеОбработкиОтображения")
+Процедура ПриСозданииОбъекта()
+
+КонецПроцедуры
+
+Процедура Преобразовать(ТекстШаблона) Экспорт
+ ТекстШаблона = СтрЗаменить(ТекстШаблона, "@ТекстЗаменыПослеРендера@", "Подвал");
+КонецПроцедуры
+```
+
+Тут мы добавили желуди с ```Прозвище``` "ПередОбработкойОтображения" и "ПослеОбработкиОтображения". Таких желудей может быть несколько. Но у каждого такого желудя должна быть процедура с именем ``Преобразовать```, в которую будет передан текст шаблона.
+
## Компоненты.
Писать шаблоны круто, но что может быть еще круче? Писать меньше шаблонов, и переиспользовать уже имеющиеся. Представим, что вам в разных местах нужно отображать одну и туже информацию, (таблицы, элементы меню, и т.д.). для решения этой задачи, шаблон имеет секретную функцию ```{{ ВывестиПоШаблону(<Путь до шаблона>, <Модель для шаблона>) }}```
diff --git a/autumn-properties.json b/autumn-properties.json
index a2db443..c73dcb3 100644
--- a/autumn-properties.json
+++ b/autumn-properties.json
@@ -1,7 +1,6 @@
{ "winow":
{
"КаталогСПриложениями": "./tests/app",
- "АвтоСтарт": true,
"ЗадержкаПередЧтениемСокета": 65,
"КаталогиСФайлами": {
"/tests": "./tests/app/files"
diff --git a/packagedef b/packagedef
index a427f0f..fc74493 100644
--- a/packagedef
+++ b/packagedef
@@ -72,7 +72,7 @@
Описание.Имя("winow")
- .Версия("0.5.1")
+ .Версия("0.5.2")
.Автор("Никита Иванченко")
.АдресАвтора("https://github.com/Nivanchenko")
.Описание("Минималистичный веб-сервер на нативном OneScript")
@@ -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")
diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/cli_\320\236\320\277\320\270\321\201\320\260\320\275\320\270\320\265\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217\320\222\320\265\320\261\320\241\320\265\321\200\320\262\320\265\321\200\320\260.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/cli_\320\236\320\277\320\270\321\201\320\260\320\275\320\270\320\265\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217\320\222\320\265\320\261\320\241\320\265\321\200\320\262\320\265\321\200\320\260.os"
index 3a897f6..03ce50e 100644
--- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/cli_\320\236\320\277\320\270\321\201\320\260\320\275\320\270\320\265\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217\320\222\320\265\320\261\320\241\320\265\321\200\320\262\320\265\321\200\320\260.os"
+++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/cli_\320\236\320\277\320\270\321\201\320\260\320\275\320\270\320\265\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217\320\222\320\265\320\261\320\241\320\265\321\200\320\262\320\265\321\200\320\260.os"
@@ -13,5 +13,5 @@
КонецФункции
Функция ВерсияПриложения() Экспорт
- Возврат "0.5.0";
+ Возврат "0.5.2";
КонецФункции
\ No newline at end of file
diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\250\320\260\320\261\320\273\320\276\320\275.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\250\320\260\320\261\320\273\320\276\320\275.os"
index 91e19d1..7cede4b 100644
--- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\250\320\260\320\261\320\273\320\276\320\275.os"
+++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\250\320\260\320\261\320\273\320\276\320\275.os"
@@ -9,6 +9,9 @@
&Пластилин Перем МенеджерОтображений;
&Пластилин Перем Поделка;
+&Пластилин(Значение = "ПередОбработкойОтображения", Тип = "Массив") Перем ОбработчикиПеред;
+&Пластилин(Значение = "ПослеОбработкиОтображения", Тип = "Массив") Перем ОбработчикиПосле;
+
&Желудь
&Характер("Компанейский")
Процедура ПриСозданииОбъекта(
@@ -39,6 +42,8 @@
Функция СформироватьТекст(Модель) Экспорт
+ ВыполнитьОбработчикиПеред();
+
ИнициализацияПеременных();
БлокПоиска = Новый Массив(2);
@@ -80,10 +85,26 @@
ЗаполнитьМассивКодом(Результат, Модель);
- Возврат СтрСоединить(Результат, "");
+ ТекстОтображения = СтрСоединить(Результат, "");
+
+ ВыполнитьОбработчикиПосле(ТекстОтображения);
+
+ Возврат ТекстОтображения;
КонецФункции
+Процедура ВыполнитьОбработчикиПеред()
+ Для Каждого Обработчик Из ОбработчикиПеред Цикл
+ Обработчик.Преобразовать(ТекстШаблона);
+ КонецЦикла;
+КонецПроцедуры
+
+Процедура ВыполнитьОбработчикиПосле(ТекстРезультата)
+ Для Каждого Обработчик Из ОбработчикиПосле Цикл
+ Обработчик.Преобразовать(ТекстРезультата);
+ КонецЦикла;
+КонецПроцедуры
+
Процедура ЗаполнитьМассивКодом(Результат, Модель)
ВесьКод = СтрСоединить(КодВыполнения);
diff --git a/tests/alltest.os b/tests/alltest.os
index 9f106ce..68acf1e 100644
--- a/tests/alltest.os
+++ b/tests/alltest.os
@@ -2,7 +2,7 @@
#Использовать ".."
#Использовать asserts
-Перем Сервер;
+Перем Поделка;
Процедура ПередЗапускомТеста() Экспорт
ВключитьСервер();
@@ -13,12 +13,14 @@
Процедура ВключитьСервер()
- Если Сервер = Неопределено Тогда
- Сервер = Новый Поделка();
- ФоновыеЗадания.Выполнить(Сервер, "ЗапуститьПриложение");
+ Если Поделка = Неопределено Тогда
+ Поделка = Новый Поделка();
+ Поделка.ЗапуститьПриложение();
+ ВебСервер = Поделка.НайтиЖелудь("ВебСервер");
+ ФоновыеЗадания.Выполнить(ВебСервер, "Старт");
// Подождем что бы сервер успел запустится и проинициализироваться.
Приостановить(1000);
- Настройки = Сервер.НайтиЖелудь("Настройки");
+ Настройки = Поделка.НайтиЖелудь("Настройки");
Настройки.ЗадержкаПередЗакрытиемСокета = 300;
КонецЕсли;
diff --git "a/tests/mock/\320\274\320\276\320\272\320\237\320\265\321\200\320\265\320\264\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\276\320\271\320\236\321\202\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\321\217.os" "b/tests/mock/\320\274\320\276\320\272\320\237\320\265\321\200\320\265\320\264\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\276\320\271\320\236\321\202\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\321\217.os"
new file mode 100644
index 0000000..12e52b9
--- /dev/null
+++ "b/tests/mock/\320\274\320\276\320\272\320\237\320\265\321\200\320\265\320\264\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\276\320\271\320\236\321\202\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\321\217.os"
@@ -0,0 +1,10 @@
+
+&Желудь
+&Прозвище("ПередОбработкойОтображения")
+Процедура ПриСозданииОбъекта()
+
+КонецПроцедуры
+
+Процедура Преобразовать(ТекстШаблона) Экспорт
+ ТекстШаблона = СтрЗаменить(ТекстШаблона, "@до", "1");
+КонецПроцедуры
\ No newline at end of file
diff --git "a/tests/mock/\320\274\320\276\320\272\320\237\320\276\321\201\320\273\320\265\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\270\320\236\321\202\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\321\217.os" "b/tests/mock/\320\274\320\276\320\272\320\237\320\276\321\201\320\273\320\265\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\270\320\236\321\202\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\321\217.os"
new file mode 100644
index 0000000..e2c1c4b
--- /dev/null
+++ "b/tests/mock/\320\274\320\276\320\272\320\237\320\276\321\201\320\273\320\265\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\270\320\236\321\202\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\321\217.os"
@@ -0,0 +1,10 @@
+
+&Желудь
+&Прозвище("ПослеОбработкиОтображения")
+Процедура ПриСозданииОбъекта()
+
+КонецПроцедуры
+
+Процедура Преобразовать(ТекстШаблона) Экспорт
+ ТекстШаблона = СтрЗаменить(ТекстШаблона, "@после", "3");
+КонецПроцедуры
\ No newline at end of file
diff --git "a/tests/mock/\320\274\320\276\320\272\320\237\320\276\321\201\320\273\320\265\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\270\320\236\321\202\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\321\2172.os" "b/tests/mock/\320\274\320\276\320\272\320\237\320\276\321\201\320\273\320\265\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\270\320\236\321\202\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\321\2172.os"
new file mode 100644
index 0000000..12f202e
--- /dev/null
+++ "b/tests/mock/\320\274\320\276\320\272\320\237\320\276\321\201\320\273\320\265\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\270\320\236\321\202\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\321\2172.os"
@@ -0,0 +1,10 @@
+
+&Желудь
+&Прозвище("ПослеОбработкиОтображения")
+Процедура ПриСозданииОбъекта()
+
+КонецПроцедуры
+
+Процедура Преобразовать(ТекстШаблона) Экспорт
+ ТекстШаблона = СтрЗаменить(ТекстШаблона, "@конец", "!");
+КонецПроцедуры
\ No newline at end of file
diff --git a/tests/templateProcessor.os b/tests/templateProcessor.os
new file mode 100644
index 0000000..a235596
--- /dev/null
+++ b/tests/templateProcessor.os
@@ -0,0 +1,26 @@
+#Использовать autumn
+#Использовать ".."
+#Использовать asserts
+
+&Тест
+Процедура ПроверкаОбработчиковШаблона() Экспорт
+
+ // Дано
+ ПодключитьСценарий("tests/mock/мокПередОбработкойОтображения.os", "мокПередОбработкойОтображения");
+ ПодключитьСценарий("tests/mock/мокПослеОбработкиОтображения.os", "мокПослеОбработкиОтображения");
+ ПодключитьСценарий("tests/mock/мокПослеОбработкиОтображения2.os", "мокПослеОбработкиОтображения2");
+ Поделка = Новый Поделка();
+ Поделка.ПросканироватьКаталог("tests/mock/");
+ Поделка.ЗапуститьПриложение();
+ ТекстШаблона = "@до{{Модель}}@после@конец";
+ Параметры = Новый Массив();
+ Параметры.Добавить(ТекстШаблона);
+ Шаблон = Поделка.НайтиЖелудь("Шаблон", Параметры);
+
+ // Когда
+ Результат = Шаблон.СформироватьТекст("2");
+
+ //Тогда
+ Ожидаем.Что(Результат).Равно("123!");
+
+КонецПроцедуры