<?xml version="1.0" encoding="UTF-8"?>

<!-- 日記見出しリスト作成（ジャンル別） -->

<xsl:stylesheet version="1.0" 
	xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
	xmlns="http://www.w3.org/1999/xhtml"
	xmlns:h="http://www.w3.org/1999/xhtml"
	xmlns:s="http://www.remus.dti.ne.jp/~a-satomi/"
	xmlns:js="http://www.remus.dti.ne.jp/~a-satomi/jsfunc"
	xmlns:fl="http://www.remus.dti.ne.jp/~a-satomi/filelist"
	xmlns:ng="http://www.remus.dti.ne.jp/~a-satomi/nikki-genres"
	xmlns:xalan="http://xml.apache.org/xalan"
	xmlns:redirect="http://xml.apache.org/xalan/redirect"
	extension-element-prefixes="redirect"
	exclude-result-prefixes="h s js fl ng xalan">

<xsl:import href="common.xsl"/>

<!-- ================ 出力設定 ================  -->

<xsl:output method="xml"
	encoding="Shift_JIS"
	omit-xml-declaration="no"
	doctype-public="-//W3C//DTD XHTML 1.1//EN"
	doctype-system="http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"
	indent="yes"
	xalan:indent-amount="2"
	media-type="application/xhtml+xml"/>

<!-- ================ 各種設定 ================  -->

<xsl:param name="curFilePath">/nikki/genres/genres</xsl:param>
<xsl:param name="genreDirFPath" select="concat($baseDir, '/', $curDirName, '/', $genreDirName, '/')"/>
<xsl:param name="cssFile">nikki.css</xsl:param>

<!-- 各リストページのタイトル（接頭辞） -->
<xsl:param name="pageTitle">ねこめしにっき見出し一覧</xsl:param>

<!-- 処理をスタートするファイル (= 最新のにっきページ) のパス -->
<xsl:param name="newestPagePath">
	<xsl:for-each select="document($fileList)/fl:dir/fl:dir[@name = $curDirName]/fl:dir[last()]/fl:file[last()]">
		<xsl:call-template name="getData">
			<xsl:with-param name="data">path</xsl:with-param>
		</xsl:call-template>
	</xsl:for-each>
</xsl:param>

<!-- ================ メインテンプレ ================  -->

<xsl:template match="/">
	<xsl:for-each select="document($genreList)/descendant::ng:genre">

		<redirect:write select="concat($genreDirFPath, @name, '.html')">
			<xsl:variable name="pageTitleEach" select="concat($pageTitle, ' (', node(), ')')"/>

			<html xml:lang="ja">
				<xsl:call-template name="head">
					<xsl:with-param name="curFileTitle" select="$pageTitleEach"/>
					<xsl:with-param name="genre" select="@name"/>
				</xsl:call-template>

				<body class="indexPage genreIndex">
					<xsl:call-template name="navi">
						<xsl:with-param name="genre" select="@name"/>
					</xsl:call-template>

					<div class="section">
						<h1><xsl:value-of select="$pageTitleEach"/></h1>
	
						<xsl:call-template name="preface">
							<xsl:with-param name="genre" select="@name"/>
						</xsl:call-template>
	
						<div class="section">
							<h2>「<xsl:value-of select="."/>」一覧</h2>
							<ul>
								<xsl:call-template name="items">
									<xsl:with-param name="filePath" select="$newestPagePath"/>
									<xsl:with-param name="genre" select="@name"/>
								</xsl:call-template>
							</ul>
						</div>
					</div>

					<xsl:call-template name="navi">
						<xsl:with-param name="genre" select="@name"/>
					</xsl:call-template>

					<xsl:call-template name="footer"/>
				</body>
			</html>
		</redirect:write>
	</xsl:for-each>
</xsl:template>

<!-- ================ 各項目 ================  -->

<xsl:template name="items">
	<xsl:param name="filePath"/><!-- 現在処理中のファイルのパス -->
	<xsl:param name="genre"/><!-- 現在の抽出対象ジャンル名 -->

	<!-- 処理対処ファイルがファイルリストに登録されてるか判別 -->
	<xsl:if test="string($filePath)">

		<!-- とりあえず「@s:genre 属性値に $genre を含む」という大ざっぱな条件でループ -->
		<xsl:for-each select="document(concat($baseDir, $filePath))/h:html/h:h3[contains(@s:genre, $genre)]">

			<!-- 抽出対象ジャンル名が単語レベルで一致してるか判別 ("Misc" を処理中に "MiscUA" や "MacMisc" がマッチしてはいけない) -->
			<xsl:if test="not(
					normalize-space(substring(substring-before(@s:genre, $genre), string-length(substring-before(@s:genre, $genre)), 1)) or
					normalize-space(substring(substring-after(@s:genre, $genre), 1, 1)))">
				<li class="{@s:genre}">
					<span class="datetime">
						<xsl:value-of select="concat('(', js:n2DTF(substring-before(@s:datetime, 'T')), ')')"/>
					</span>
					<a href="{js:chsuffix(concat(js:a2r($curFilePath, string($filePath)), '#', @id), 'html')}">
						<xsl:apply-templates/>
					</a>
				</li>
			</xsl:if>
		</xsl:for-each>

		<!-- 次の処理対象ファイルを探して再帰 -->
		<xsl:call-template name="items">
			<xsl:with-param name="filePath">
				<xsl:call-template name="searchFile">
					<xsl:with-param name="path" select="$filePath"/>
					<xsl:with-param name="rel">prev</xsl:with-param>
					<xsl:with-param name="data">path</xsl:with-param>
					<!-- xsl:with-param name="excludeIndex" select="false()"/ -->
				</xsl:call-template>
			</xsl:with-param>
			<xsl:with-param name="genre" select="$genre"/>
		</xsl:call-template>
	</xsl:if>
</xsl:template>

<!-- ================ head 要素テンプレ ================  -->

<xsl:template name="head">
	<xsl:param name="curFileTitle"/>
	<xsl:param name="genre"/>

	<head>
		<xsl:call-template name="head-meta"/>
		<meta content="NOINDEX" name="ROBOTS"/>

		<!-- ページタイトル処理変更 -->
		<title><xsl:value-of select="$curFileTitle"/></title>

		<!-- ナビリンク処理変更 -->
		<link rel="home" title="{$rootTitle}" href="{$rootURI}" />
		<xsl:if test="string($contentsPath)"><link rel="contents" title="{$contentsLabel}" href="{$contentsURI}" /></xsl:if>
		<xsl:if test="string($indexPath)"><link rel="index" title="{$indexLabel}" href="{$indexURI}" /></xsl:if>
		<xsl:for-each select="document($genreList)/descendant::ng:genre">
			<xsl:if test="@name = $genre">
				<xsl:variable name="pos" select="position()"/>
				<xsl:variable name="prevGenreName" select="document($genreList)/descendant::ng:genre[$pos - 1]/@name"/>
				<xsl:variable name="prevGenreLabel" select="document($genreList)/descendant::ng:genre[$pos - 1]"/>
				<xsl:variable name="nextGenreName" select="document($genreList)/descendant::ng:genre[$pos + 1]/@name"/>
				<xsl:variable name="nextGenreLabel" select="document($genreList)/descendant::ng:genre[$pos + 1]"/>
				<xsl:if test="$prevGenreName">
					<link rel="prev" title="{$prevGenreLabel}" href="{$prevGenreName}.html" />
				</xsl:if>
				<xsl:if test="$nextGenreName">
					<link rel="next" title="{$nextGenreLabel}" href="{$nextGenreName}.html" />
				</xsl:if>
			</xsl:if>
		</xsl:for-each>

		<xsl:call-template name="head-metaLink"/>
		<xsl:call-template name="head-miscLink"/>
		<xsl:call-template name="head-css"/>
		<xsl:call-template name="head-script">
			<!-- <xsl:with-param name="add-script">narrowDownGenres.js</xsl:with-param> -->
		</xsl:call-template>
	</head>
</xsl:template>

<!-- ================ ナビリンクテンプレ変更 ================  -->

<xsl:template name="navi">
	<xsl:param name="genre"/>
	<ul class="navigation">
		<li class="home">
			<a rel="home" accesskey="T" title="{$rootTitle} [T]" href="{$rootURI}">
				<img alt="←" height="15" width="15" src="{$commonDir}/img/icon/LeftArrow.png" />
				<xsl:value-of select="$rootLabel"/>
			</a>
		</li>
		<li class="contents">
			<a rel="contents" accesskey="I" title="{$contentsTitle} [I]" href="{$contentsURI}">
				<img alt="←" height="15" width="15" src="{$commonDir}/img/icon/LeftArrow.png" />
				<xsl:value-of select="$contentsLabel"/>
			</a>
		</li>
		<xsl:for-each select="document($genreList)/descendant::ng:genre">
			<xsl:if test="@name = $genre">
				<xsl:variable name="pos" select="position()"/>
				<xsl:variable name="prevGenreName" select="document($genreList)/descendant::ng:genre[$pos - 1]/@name"/>
				<xsl:variable name="prevGenreLabel" select="document($genreList)/descendant::ng:genre[$pos - 1]"/>
				<xsl:variable name="nextGenreName" select="document($genreList)/descendant::ng:genre[$pos + 1]/@name"/>
				<xsl:variable name="nextGenreLabel" select="document($genreList)/descendant::ng:genre[$pos + 1]"/>
				<xsl:if test="$prevGenreName">
					<li class="prev">
						<a rel="prev" accesskey="P" title="{$prevGenreLabel} [P]" href="{$prevGenreName}.html">
							<img alt="←" height="15" width="15" src="{$commonDir}/img/icon/LeftArrow.png" />
							<xsl:value-of select="js:ct(string($prevGenreLabel), 12)"/>
						</a>
					</li>
				</xsl:if>
				<xsl:if test="$nextGenreName">
					<li class="next">
						<a rel="next" accesskey="N" title="{$nextGenreLabel} [N]" href="{$nextGenreName}.html">
							<img alt="→" height="15" width="15" src="{$commonDir}/img/icon/RightArrow.png" />
							<xsl:value-of select="js:ct(string($nextGenreLabel), 12)"/>
						</a>
					</li>
				</xsl:if>
			</xsl:if>
		</xsl:for-each>
	</ul>
</xsl:template>

<!-- ================ 前記部分 ================  -->

<xsl:template name="preface">
	<xsl:param name="genre"/>
	<ul class="preface refLink">
		<xsl:choose>
			<xsl:when test="$genre = 'HTML'">
				<li>
					<a title="Index of /~a-satomi/common/xml" href="{$commonDir}/xml/">
						<xsl:text>このサイトで汎用的に使用している XML (の一部)</xsl:text>
					</a>
				</li>
			</xsl:when>
			<xsl:when test="$genre = 'CSS'">
				<li>
					<a title="Index of /~a-satomi/common/css" href="{$cssDir}/">
						<xsl:text>このサイトで使用されている CSS ファイル群</xsl:text>
					</a>
				</li>
			</xsl:when>
			<xsl:when test="$genre = 'XSLT'">
				<li>
					<a title="Index of /~a-satomi/common/xsl" href="{$commonDir}/xsl/">
						<xsl:text>このサイトの作成時に（主にローカルで）使用している XSL 群</xsl:text>
					</a>
				</li>
			</xsl:when>
			<xsl:when test="$genre = 'JSDOM'">
				<li>
					<a title="Index of /~a-satomi/common/js" href="{$scriptDir}/">
						<xsl:text>このサイトで使用されている JavaScript ファイル群</xsl:text>
					</a>
				</li>
			</xsl:when>
			<xsl:otherwise/>
		</xsl:choose>
		<li>
			<a title="しるきぃうぇぶ検索ましーん" href="{$siteSearch}">
				<xsl:text>しるきぃうぇぶ検索ましーん</xsl:text>
			</a>
		</li>
	</ul>
</xsl:template>

</xsl:stylesheet>
