<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Каскадика &#187; XSLT</title>
	<atom:link href="http://cascadi.ca/category/xslt/feed/" rel="self" type="application/rss+xml" />
	<link>http://cascadi.ca</link>
	<description>Парад тегов</description>
	<lastBuildDate>Mon, 06 Sep 2010 20:34:54 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0-alpha</generator>
		<item>
		<title>Годы летят&#8230; в XSLT</title>
		<link>http://cascadi.ca/xslt/loop-template/</link>
		<comments>http://cascadi.ca/xslt/loop-template/#comments</comments>
		<pubDate>Sat, 08 Mar 2008 22:18:46 +0000</pubDate>
		<dc:creator>Curly Brace</dc:creator>
				<category><![CDATA[XSLT]]></category>

		<guid isPermaLink="false">http://www.webmakerslounge.com/xslt/loop-template/</guid>
		<description><![CDATA[На днях столкнулся с задачей вывода списка годов между 1900 и 2008 в теге select. Дело было при создании формы регистрации, а заказчик почему-то не хотел использовать Date Picker.

Так как сайт разрабатывается с помощью XML/XSL и без БД, то и&#160;&#8230; <a href="http://cascadi.ca/xslt/loop-template/">Читать&#160;дальше&#160;<span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>На днях столкнулся с задачей вывода списка годов между 1900 и 2008 в теге <strong>select</strong>. Дело было при создании формы регистрации, а заказчик почему-то не хотел использовать <a class="out" href="http://kelvinluck.com/assets/jquery/datePicker/v2/demo/">Date Picker</a>.</p>
<div style="text-align: center"><img title="select xslt" alt="select xslt" src="/images/posts/select.gif" /></div>
<p>Так как сайт разрабатывается с помощью XML/XSL и без БД, то и решение должно быть на XSL. Если с месяцами все понятно и их в любом случае надо тянуть из XML, то дни и года надо выписать через темплейт. <span id="more-119"></span><br />
После продолжительных поисков я нашел оптимальное для себя решение. Вот как это выглядит:</p>
<pre><code>&lt;xsl:template name="loop"&gt;
&lt;xsl:param name="i"/&gt;
&lt;xsl:param name="count"/&gt;
&lt;xsl:if test="$count &gt;= $i"&gt;
&lt;option&gt;
&lt;xsl:value-of select="$i"/&gt;
&lt;/option&gt;
&lt;xsl:call-template name="loop"&gt;
&lt;xsl:with-param name="i" select="$i + 1"/&gt;
&lt;xsl:with-param name="count" select="$count"/&gt;
&lt;/xsl:call-template&gt;
&lt;/xsl:if&gt;
&lt;/xsl:template&gt;
</code></pre>
<p>Простой цикл. Задаются параметры начала и конца, и производится вывод чего захотите. В моем случае это элементы <strong>option</strong>, с таким же успехом это могут быть строки в таблице, элементы списка и тд. Этот темплейт сохраняется в файле темплейтов, а сам вызов &#8211; на конкретной странице, что дает большую гибкость и избавляет от описывания того же самого в каждом конкретном случае. Вот так выглядит вызов темплейта:</p>
<pre><code>&lt;select tabindex="10" id="year" name="year"&gt;
&lt;xsl:call-template name="loop"&gt;
&lt;xsl:with-param name="i"&gt;1900&lt;/xsl:with-param&gt;
&lt;xsl:with-param name="count"&gt;2008&lt;/xsl:with-param&gt;
&lt;/xsl:call-template&gt;
&lt;/select&gt;</code></pre>
<p>Параметры задаются в зависимости от надобности. В данном случае это года.</p>
<p>Буду рад альтернативным решениям.</p>
]]></content:encoded>
			<wfw:commentRss>http://cascadi.ca/xslt/loop-template/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Верстаем HTML/CSS календарь</title>
		<link>http://cascadi.ca/css/dl-calendar/</link>
		<comments>http://cascadi.ca/css/dl-calendar/#comments</comments>
		<pubDate>Wed, 16 May 2007 06:37:23 +0000</pubDate>
		<dc:creator>Curly Brace</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[XSLT]]></category>

		<guid isPermaLink="false">http://www.webmakerslounge.com/news/dl-calendar/</guid>
		<description><![CDATA[Понадобилось мне вчера сделать календарь, чтобы при наведении мышки на любое число появлялась подсказка в специальном окошке и чтобы само число было ссылкой на произвольную страницу.
Готовых скриптов в Сети много, разной степени навороченности и крутизны, но мне нужно было что-то&#160;&#8230; <a href="http://cascadi.ca/css/dl-calendar/">Читать&#160;дальше&#160;<span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Понадобилось мне вчера сделать календарь, чтобы при наведении мышки на любое число появлялась подсказка в специальном окошке и чтобы само число было ссылкой на произвольную страницу.</p>
<p>Готовых скриптов в Сети много, разной степени навороченности и крутизны, но мне нужно было что-то простое и я не хотел использовать javascript, поэтому решил сделать сам. И вот что у меня получилось:</p>
<div style="text-align: center"><img alt="HTML/CSS календарь" title="HTML/CSS календарь" src="/images/posts/calendar_dl.gif" /></div>
<p>Давайте посмотрим как делается симпатичный календарь с помощью HTML/CSS. <span id="more-95"></span><br />
Как видно из скриншота, было довольно много ограничений, в основном по размерам. Фактически пришлось втиснуть весь месяц в кубик размерами 200х150 пикселей. Так как календарь верстался для уже готового сайта, то простора для творчества было совсем мало.</p>
<p>Начнем с кода. Мне показалось логичным сделать календарную структуру с помощью <strong>definition list</strong>.</p>
<p><strong>Definition term</strong> я оставил пустым, так как заголовок был задан в бэкграунде. Месяц, названия дней недели и числа я описал списками, вложеными в <strong>definition description</strong>.</p>
<p>Собственно весь HTML:</p>
<pre><code>&lt;dl&gt;
&lt;dt&gt; &lt;/dt&gt;
&lt;dd&gt;
&lt;p class="month"&gt;May 07&lt;/p&gt;
&lt;/dd&gt;
&lt;dd&gt;
&lt;ul class="week"&gt;
&lt;li&gt;S&lt;/li&gt;
&lt;li&gt;M&lt;/li&gt;
&lt;li&gt;T&lt;/li&gt;
&lt;li&gt;W&lt;/li&gt;
&lt;li&gt;T&lt;/li&gt;
&lt;li&gt;F&lt;/li&gt;
&lt;li&gt;S&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;dd&gt;
&lt;ul class="days"&gt;
&lt;li&gt;&lt;а hrеf="#"&gt; &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;а hrеf="#"&gt; &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;а hrеf="#"&gt;1&lt;span&gt;Content 1&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;а hrеf="#"&gt;2&lt;span&gt;Content 2&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;а hrеf="#"&gt;3&lt;span&gt;Content 3&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;а hrеf="#"&gt;4&lt;span&gt;Content 4&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;а hrеf="#"&gt;5&lt;span&gt;Content 5&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;а hrеf="#"&gt;6&lt;span&gt;Content 6&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;а hrеf="#"&gt;7&lt;span&gt;Content 7&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;а hrеf="#"&gt;8&lt;span&gt;Content 8&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;а hrеf="#"&gt;9&lt;span&gt;Content 9&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;а hrеf="#"&gt;10&lt;span&gt;Content 10&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;а hrеf="#"&gt;11&lt;span&gt;Content 11&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;а hrеf="#"&gt;12&lt;span&gt;Content 12&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;а hrеf="#"&gt;13&lt;span&gt;Content 13&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;а hrеf="#"&gt;14&lt;span&gt;Content 14&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;а hrеf="#"&gt;15&lt;span&gt;Content 15&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;а hrеf="#"&gt;16&lt;span&gt;Content 16&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;а hrеf="#"&gt;17&lt;span&gt;Content 17&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;а hrеf="#"&gt;18&lt;span&gt;Content 18&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;а hrеf="#"&gt;19&lt;span&gt;Content 19&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;а hrеf="#"&gt;20&lt;span&gt;Content 20&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;а hrеf="#"&gt;21&lt;span&gt;Content 21&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;а hrеf="#"&gt;22&lt;span&gt;Content 22 Blah blah many content much more content&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;23&lt;/li&gt;
&lt;li&gt;24&lt;/li&gt;
&lt;li&gt;25&lt;/li&gt;
&lt;li&gt;26&lt;/li&gt;
&lt;li&gt;27&lt;/li&gt;
&lt;li&gt;28&lt;/li&gt;
&lt;li&gt;29&lt;/li&gt;
&lt;li&gt;30&lt;/li&gt;
&lt;li&gt;31&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;dd id="descr"&gt;Point cursor to some date&lt;/dd&gt;
&lt;/dl&gt;</code></pre>
<p>Здесь я думаю стоти прояснить один момент. Внутри каждого элемента списка есть ссылка, текстом которой является само число и там же находится <em>span</em>, внутри которого находится текст подсказки, которая нужна нам при наведении мышки. У <em>span</em>&#8216;а изначально прописано свойство <strong>display:none</strong>, чтобы его не было видно.</p>
<p>Так как <em>span</em> находится  в ссылке (как Ленин в свое время :) ), то мы можем поменять ему свойства на событии <strong>hover</strong>. Все что нам нужно это поменять свойство <strong>display</strong> на <strong>block</strong>. Ну почти все. Этот способ называется <a class="out" href="http://meyerweb.com/eric/css/edge/popups/demo.html">Pure CSS Popups</a>, который описал небезызвестный <a class="out" href="http://meyerweb.com/">Eric Meyer</a>.</p>
<p>Но рыжий Эрик схитрил(?) и не описал у себя баг, из-за которого способ не работает в IE6&#8230; Но Гугль как всегда рулит и я нашел <a class="out" href="http://www.tanfa.co.uk/css/articles/pure-css-popups-bug.asp">решение</a> этой проблемы.  Суть его сводится к тому, что в a:hover ОБЯЗАТЕЛЬНО нужно указать какое-либо свойство, которое не присутствует в <strong>a:link</strong>, <strong>a:visited</strong> и <strong>a:active</strong>. Любое кроме <em>color</em>. Я выбрал <strong>text-indent: 0</strong>. Ура, заработало!<br />
Есть еще один момент. Так как мне нужно было абсолютно позиционировать текст подсказки внутри блока, то для <em>definition list</em> я задал <strong>position:relative</strong>, не указывая явно <em>top</em> и <em>left</em>,  а для <em>span</em> с подсказкой <strong>position:absolute</strong> и координаты.</p>
<p>Всем элементам списка я задал фиксированую ширину и высоту и <strong>float:left</strong>. С размерами подогнал так, чтобы в одну строку влезали только 7 чисел.</p>
<p>Смотрим на стили:</p>
<pre><code>dl{
width: 214px;
height: 182px;
background: url("schedule-bg.gif") left top no-repeat;
margin: 0 auto;
position:relative;
}
dt{
height: 34px;
}

dd ul{
margin: 0;
}

dd ul li{
list-style: none;
margin: 3px 1px 1px 1px;
width: 26px;
height: 12px;
line-height: 12px;
float: left;
text-align: right;
cursor: pointer;
font-size: 12px;
}
dd ul li a{
display:block;
width: 26px;
height: 12px;
text-decoration: none;
color: #0000FF;
}

dd ul li a span{
display:none;
}

ul.days li a:hover{
color: #FBC500;
text-indent: 0; /*DO NOT REMOVE THIS OTHERWISE HOVER WILL NOT WORK IN IE6!*/
}

ul.days li a:hover span{
display: block;
position: absolute;
left: 5px;
top: 150px;
width: 200px;
height: 23px;
overflow: hidden;
text-align: center;
background: #5c68ba;
color: #FFFFFF;
text-decoration: none!important;
}
.month{
font-size: 12px;
font-weight: bold;
text-align: center;
}

.week li{
border: none;
font-weight: bold;
margin-left: 1px;
margin-right: 2px;
}

.days{
margin-left: 5px;
height: 98px;
*height: 85px;
width: 205px;
}

#descr{
clear: both;
color: #FFFFFF;
font-size: 12px;
text-align: center;
padding-top: 3px;
height: 23px;
}</code></pre>
<p>Остался только один нерешенный момент. Приходится в ручную передвигать первое число месяца между днями недели, добавляя пустые элементы списка. Не придумал нормального решения.</p>
<p>Все, вроде бы ничего не упустил. Рабочий пример можно <a href="http://www.webmakerslounge.com/files/calendar.html">посмотреть</a> и <a href="/files/calendar.zip">забрать</a>.</p>
<p>Верстал я все это дело в XML/XSL, вот так выглядит тэмплэйт:</p>
<pre><code>&lt;dl&gt;
&lt;dt&gt; &lt;/dt&gt;
&lt;dd&gt;
&lt;p class="month"&gt;
&lt;xsl:value-of select="$SHARED/MONTHS/LIST[@ID= $month]/@NAME"/&gt;
&lt;/p&gt;
&lt;/dd&gt;
&lt;dd&gt;
&lt;ol class="week"&gt;
&lt;xsl:for-each select="$SHARED/WEEK/ITEM"&gt;
&lt;li&gt;&lt;xsl:value-of select="text()"/&gt;&lt;/li&gt;
&lt;/xsl:for-each&gt;
&lt;/ol&gt;
&lt;/dd&gt;
&lt;dd&gt;
&lt;ol class="days"&gt;
&lt;xsl:for-each select="$SHARED/MONTHS/LIST[@ID= $month]/ITEM"&gt;
&lt;li&gt;
&lt;a&gt;
&lt;xsl:if test="@NUM = $date"&gt;
&lt;xsl:attribute name="class"&gt;currentday&lt;/xsl:attribute&gt;
&lt;/xsl:if&gt;
&lt;xsl:attribute name="hrеf"&gt;&lt;xsl:value-of select="@HREF"/&gt;&lt;/xsl:attribute&gt;
&lt;xsl:value-of select="@NUM"/&gt;
&lt;span&gt;&lt;xsl:value-of select="text()"/&gt;&lt;/span&gt;
&lt;/a&gt;
&lt;/li&gt;
&lt;/xsl:for-each&gt;
&lt;/ol&gt;
&lt;/dd&gt;
&lt;dd id="descr"&gt;&lt;xsl:value-of select="$SHARED/MONTHS/DESCR"/&gt;&lt;/dd&gt;
&lt;/dl&gt;</code></pre>
<p>На пути к XML нодам не обращайте внимания, особенности платформы.</p>
]]></content:encoded>
			<wfw:commentRss>http://cascadi.ca/css/dl-calendar/feed/</wfw:commentRss>
		<slash:comments>27</slash:comments>
		</item>
		<item>
		<title>Полосатые таблицы</title>
		<link>http://cascadi.ca/css/striped-tables/</link>
		<comments>http://cascadi.ca/css/striped-tables/#comments</comments>
		<pubDate>Tue, 09 Jan 2007 16:15:22 +0000</pubDate>
		<dc:creator>Curly Brace</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Scripting]]></category>
		<category><![CDATA[XSLT]]></category>

		<guid isPermaLink="false">http://www.webmakerslounge.com/news/striped-tables/</guid>
		<description><![CDATA[С приходом семантической верстки, CSS и блоки все больше и больше теснят таблицы, как элемент верстки и таблицы на конец начали выполнять свою основную роль &#8211; отображение информации, сохраненной в рядах и колонках.
Таблица обычно несет в себе довольно много информации,&#160;&#8230; <a href="http://cascadi.ca/css/striped-tables/">Читать&#160;дальше&#160;<span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>С приходом семантической верстки, CSS и блоки все больше и больше теснят таблицы, как элемент верстки и таблицы на конец начали выполнять свою основную роль &#8211; отображение информации, сохраненной в рядах и колонках.</p>
<p>Таблица обычно несет в себе довольно много информации, расположенной и отсортированой на довольно маленькой площади. Так почему бы не сделать чтение этой информации более приятным и легким?</p>
<p><img style="float: left; margin: 0 10px 10px 0" title="iTunes таблица" alt="iTunes таблица" src="/images/posts/itunes.png" />Попытаемся немного освежить вывод информации в таблицах. Ниже приведены три способа, позволяющие быстро создать полосатые таблицы за счет четных и нечетных рядов в таблице. Выбор за вами.</p>
<p><span id="more-46"></span></p>
<h3>Способ первый. Самый явный.</h3>
<p>Так как вариантов рядов у нас всего два, то указывать отдельно каждый не имеет смысла. Мы укажем только нечетные ряды. Соответственно все остальные будут четными ;)</p>
<p>Смотрим простой пример <a title="Пример кода"  href="/files/odd_example.html">здесь</a>.</p>
<blockquote><p>Основной недостаток в том, что нам надо явно прописывать в коде класс для рядов.</p>
</blockquote>
<h3>Способ второй. Динамический. </h3>
<p>В отличии от первого способа, который основан только на CSS, здесь применяется Javacript, который пробегает по всем рядам и ячейкам в указанной таблице и применяет к ним стили.</p>
<p>Пример смотрим <a title="Полосатые таблицы" href="/files/stripes.html">здесь</a>, в комментариях в коде присутствуют описания.</p>
<p>Чем хорош этот способ?</p>
<ul>
<li> Классы теперь можно использовать для каких-либо более конкретных задач, на пример выделение выбранного ряда.</li>
<li>&#8220;Заполосатить&#8221; теперь можно любую таблицу на любой странице где присутствует вызов функции.</li>
</ul>
<p>Знаете способ лучше? Пишите в комментариях.</p>
<h3>Способ третий. XSLT. </h3>
<p>В XSLT все на много проще. Нужно вписать в темплэйт условие, которое будет проверять tr на четность-нечетность и в зависимости от ваших нужд будет либо присваивать атрибут class или же будет выписывать стиль. На пример:</p>
<pre><code class="xml">&lt;tr&gt;
&lt;xsl:if test="(position() mod 2 = 1)"&gt;
&lt;xsl:attribute name = "style"&gt;background:#f4f4f4;&lt;/xsl:attribute&gt;
&lt;/xsl:if&gt;
&lt;td colspan="5"&gt;&lt;strong&gt;Заметки:&lt;/strong&gt;&lt;xsl:value-of select="text()"/&gt;&lt;/td&gt;
&lt;/tr&gt;</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://cascadi.ca/css/striped-tables/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>XSL для начинающих в примерах</title>
		<link>http://cascadi.ca/xslt/xsl-dlya-nachinayuschih-v-primerah/</link>
		<comments>http://cascadi.ca/xslt/xsl-dlya-nachinayuschih-v-primerah/#comments</comments>
		<pubDate>Sun, 26 Nov 2006 07:11:24 +0000</pubDate>
		<dc:creator>Curly Brace</dc:creator>
				<category><![CDATA[XSLT]]></category>

		<guid isPermaLink="false">http://www.webmakerslounge.com/xslt/10.html</guid>
		<description><![CDATA[Неплохой ресурс, с простой и удобной навигацией, обучающий основам логической верстки XSL в примерах
Идем учиться
]]></description>
			<content:encoded><![CDATA[<p>Неплохой ресурс, с простой и удобной навигацией, обучающий основам логической верстки XSL в примерах</p>
<p align="center"><a target="_blank" href="http://raleigh.ru/XML/XSLTutorial/">Идем учиться</a></p>
]]></content:encoded>
			<wfw:commentRss>http://cascadi.ca/xslt/xsl-dlya-nachinayuschih-v-primerah/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
