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!"); + +КонецПроцедуры