Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   Templating System for Node.JS. (https://javascript.ru/forum/project/27690-templating-system-node-js.html)

B~Vladi 04.05.2012 15:03

Обновилась версия - 2.3.0
Основное изменение - добавлен тег else с атрибутом if ;)

B~Vladi 11.05.2012 18:23

Добавил модуль в npm и в список модулей.

B~Vladi 13.06.2012 20:35

Перед выходом новой версии хочу провести небольшой эксперимент и попросить вашего участия в нем :)
Если вы потратите немного своего времени, я буду вам очень признателен :)

Есть некие файлы шаблонов:

page.xml:
<?xml version="1.0" encoding="UTF-8"?>
<tsn:root xmlns:tsn="TSN" xmlns="http://www.w3.org/1999/xhtml">

	<tsn:data key="JSBlock">
		<script type="text/javascript">
			//<![CDATA[
			alert('Page.');
			//]]>
		</script>
	</tsn:data>

	<tsn:render file="service.xml" />
</tsn:root>


service.xml:
<?xml version="1.0" encoding="UTF-8"?>
<tsn:root xmlns:tsn="TSN" xmlns="http://www.w3.org/1999/xhtml">
		<tsn:data key="JSBlock" action="prepend">
			<script type="text/javascript" src="&TSN.this.serviceName;.js"> </script>
		</tsn:data>

		<tsn:block name="JS" type="global">
			<tsn:echo data="_data.JSBlock" />
		</tsn:block>

		<tsn:block name="CSS" type="global">
			<link rel="stylesheet" type="text/css" href="service.css" />

			<tsn:if expr="_data.CSSBlock">
				<tsn:echo data="_data.CSSBlock" />
			</tsn:if>
		</tsn:block>

		<tsn:block name="content" type="default">
			Page not found
		</tsn:block>

		<tsn:render file="base.xml" />
</tsn:root>


base.xml:
<?xml version="1.0" encoding="UTF-8"?>
<tsn:root xmlns:tsn="TSN" xmlns="http://www.w3.org/1999/xhtml">
		<tsn:render file="common.xml" />

		<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
		<html>
			<head>
				<tsn:render block="CSS" />
			</head>
			<body>
				<tsn:render block="content" />

				<tsn:render block="JS" />
			</body>
		</html>
</tsn:root>


common.xml:
<?xml version="1.0" encoding="UTF-8"?>
<tsn:root xmlns:tsn="TSN" xmlns="http://www.w3.org/1999/xhtml">
		<tsn:data key="JSBlock" action="prepend">
			<script type="text/javascript" src="common.js" />
		</tsn:data>

		<tsn:block name="content" type="default">
			<tsn:render file="/404.xml" config="({
														cache: false
													})" />
		</tsn:block>
</tsn:root>


Вопрос: глядя на код шаблонов, можно ли, потратив несколько минут, вникнуть в суть происходящего. Прикинуть, что будет на выходе. Без документации.
Дополнительный вопрос: какие моменты показались вам нелогичными/непонятными.

melky 13.06.2012 22:02

Я понял более-менее, но не понял, зачем нужен элемент data, почему у него такое же значение атрибута key, как и name и элемента-блока, и что означает у него значение атрибута action - prepend.

B~Vladi 13.06.2012 22:55

Цитата:

Сообщение от melky
зачем нужен элемент data

Сохраняет данные в хранилище с ключом key. Тут дока по старой версии.

Цитата:

Сообщение от melky
почему у него такое же значение атрибута key, как и name и элемента-блока

Это просто случайность, блоки и данные не связаны.

Цитата:

Сообщение от melky
что означает у него значение атрибута action - prepend.

Действие, которое нужно сделать с новыми данными, если по такому ключу уже есть какое-то значение в хранилище (доступно как __data в JS-выражениях). Варианты: append, prepend, replace (по-умолчанию). Так понятно?

B~Vladi 14.06.2012 13:31

Немного подправил пример, что бы не возникало лишних недопониманий.

B~Vladi 17.06.2012 14:27

Вот более полный пример: https://github.com/B-Vladi/TSN/tree/2.4.0/example

B~Vladi 21.06.2012 11:28

Для тех, кому интересно, предлагаю обсудить API.

Обновленный JSDoc в репозитории: https://github.com/B-Vladi/TSN/tree/2.4.0/jsdoc
Для удобства выложил сюда: http://tsn.amxhost.ru

B~Vladi 21.06.2012 12:55

UPD: небольшой upgrade.

B~Vladi 22.06.2012 00:50

Мне тут подкинули идею и я реализовал теги header и status. Хотя раньше это можно было сделать и в JS-выражениях.

Как пиздато самим с собой разговаривать


Часовой пояс GMT +3, время: 15:46.