OScript.Web.Front 0.0.0.1

первый подход

принципы - никакого JS,HTML,etc на фронте. Только компиляция в режиме dev/prod

Перем ВебПриложение;

Функция ФункцияПересчетаИндексаВеса()

	ФормулаИндексаВеса = Формулы.Умножить("ИндексРоста","ИндексРоста").Разделить("ЗначениеВес");
	ФормулаРоста = Формулы.Умножить("ИндексРоста","ИндексРоста").Умножить("ЗначениеИндексаВеса");

	ФункцияПересчета = ОпределительПоведения.ДляДанных("ЗначениеРост, ЗначениеВес, ЗначениеИндексаВеса")
		.ПрименитьФормулу("ЗначениеРост", Формулы.Разделить("ЗначениеРост",100))
		.СохранитьРезультат("ИндексРоста")
		.ЕслиСуществует("ЗначениеИндексаВеса")
		.ПрименитьФормулу("ЗначениеИндексаВеса", ФормулаИндексаВеса)
		.ПрименитьФормулу("ЗначениеВес", ФормулаРоста);

	ПоведениеФормы =  ОпределительПоведения.Пусть()
		.ПриИзмененииДанных("ЗначениеРост, ЗначениеВес, ЗначениеИндексаВеса")
		.ВызываетсяФункция(ФункцияПересчета);

	Возврат ПоведениеФормы;
КонецФункции

ВебПриложение = Новый ВебПриложение();
ВебПриложение.ДанныеПриложения.ДобавитьНаКлиенте(
	Новый Структура("ЗначениеРост, ЗначениеВес",180,80)
);

ПанельЭлементов = ЭлементыФорм.ЭлементПанель();

ДинамическийЗаголовок = ЭлементыФорм.ЭлементДекорация();
ИзменениеЦветаИТекста = ОпределительПоведения.ДляДанных("ЗначениеИндексаВеса").Условие()
	.ЕслиМеньше(18.5).ТогдаВернуть(Цвета.Оранжевый, "Недостаточный")
	.ЕслиМеньше(25).ТогдаВернуть(Цвета.Основной,"Нормальный")
	.ЕслиМеньше(30).ТогдаВернуть(Цвета.Оранжевый,"Избыточный")
	.ПоУмолчанию(Цвета.Красный,"Беда случилась - иди к доктору");

ДинамическийЗаголовок.Изменять("Цвет,Текст", ИзменениеЦветаИТекста);

ПанельЭлементов
	.ДобавитьДочерний(ЭлементыФорм.ЭлементЗаголовок("Калькулятор индекса веса"))
	.ДобавитьДочерний(ЭлементыФорм.ЭлементРегулятор("Рост: %i см", "ЗначениеРост",100,200))
	.ДобавитьДочерний(ЭлементыФорм.ЭлементРегулятор("Вес: %i кг", "ЗначениеВес",30,150))
	.ДобавитьДочерний(ДинамическийЗаголовок)
	.ДобавитьДочерний(ЭлементыФорм.ЭлементРегулятор("Индекс веса тела: %i", "ЗначениеИндексаВеса",10,50));

ПанельЭлементов.ДобавитьПоведение("ПересчётИндексаВеса", ФункцияПересчетаИндексаВеса());

ВебПриложение.ОбщиеКомпоненты.ДобавитьКомпонент(ПанельЭлементов);

НастройкиВебПроекта.Идентификатор = "bmi-calc";

КомпилированноеПриложение = ВебПриложение.СкомпилироватьСНастройками("build/bmi-calc", НастройкиВебПроекта);

@EvilBeaver нужно понять читаемость такого кода - обрати внимание: функции поведения приходится писать прям с нуля в виде текучих утверждений/условий. Насколько это правильно…

Сюда же

1 Симпатия

Етить… Космос, ваще…

Так, по существу: Читабельность не бог весть какая, но, допускаю, что обусловлено нижележащими технологиями и именно такая реализация была проще.

Из того, что кажется не поедет - формулы в виде “текучек” - Умножить,Разделить и прочее. Заменять естественные операторы языка методами - это утомительно и писать, и читать. Опять же, допускаю, что иначе не выходит. Но мы же про читабельность сейчас, а не про реализацию.

НО сама идея супер. Осталось только очеловечить. Ведь если Лисп перевести на русский - он не перестанет быть Лиспом, верно?

вот это ты прав - lisp он блин ваще нечеловечный. пока пилю по мере сил. Скоро нужен будет коллективный разум.

думаете тема заглохла ? А вот фигушки

Под linux я пока не научился делать качественные гифки, но скоро научусь ;-). Ох уж это X сервер

Идея огонь!)