1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
| <!-- Définition du nom du template -->
<xsl:template name="boucle">
<!-- Les paramètres -->
<xsl:param name="pageToShow"/><!-- Page à afficher -->
<xsl:param name="currentPage"/><!-- Page en cours -->
<xsl:param name="max"/><!-- Nombre total de pages -->
<xsl:param name="windowSize"/><!-- Nombre de pages à afficher avant / après -->
<xsl:param name="displayLeftDots"/><!-- Est-ce que les '...' ont déjà été affichés à gauche ou pas -->
<xsl:param name="displayRightDots"/><!-- Est-ce que les '...' ont déjà été affichés à droite ou pas -->
<!-- On test si on dois afficher le numéro de la page ou pas -->
<!-- Et on stock le résultat (true / false) dans notre variable -->
<xsl:variable name="displayCondition">
<xsl:value-of select="$pageToShow < $windowSize or $pageToShow > $currentPage - $windowSize and $pageToShow < $currentPage+$windowSize or $pageToShow > $max - ($windowSize - 1)"/>
</xsl:variable>
<!-- Si on doit afficher le numéro de la page -->
<xsl:if test="$displayCondition='true'">
<xsl:choose>
<!-- Si la page à afficher est la page en cours, on peux lui mettre un style different .. -->
<xsl:when test="$pageToShow = $currentPage">
<a href="javascript:void(0)" onclick="moveTo({$pageToShow});return false;" class="selected">
<span><xsl:value-of select="$pageToShow"/></span>
</a>
</xsl:when>
<!-- Sinon on l'affiche simplement -->
<xsl:otherwise>
<a href="javascript:void(0)" onclick="moveTo({$pageToShow});return false;">
<span><xsl:value-of select="$pageToShow"/></span>
</a>
</xsl:otherwise>
</xsl:choose>
</xsl:if>
<!-- On créé une variable qui va nous dire si il faut afficher les points à gauche ou pas -->
<xsl:variable name="leftDotsOn">
<!-- Si nous n'avons pas affiché le numéro de la page -->
<xsl:if test="$displayCondition='false'">
<!-- Si la page à afficher est avant la page en cours, alors on dit d'afficher les points à gauche -->
<xsl:if test="$pageToShow < $currentPage">
<xsl:value-of select="not($displayLeftDots='false')"/>
</xsl:if>
<!-- Si la page à afficher n'est pas avant la page en cours, on dit de ne pas afficher les points à gauche -->
<xsl:if test="not($pageToShow < $currentPage)">false</xsl:if>
</xsl:if>
<!-- Si on a affiché le numéro de la page, on n'affiche pas les points à gauche -->
<xsl:if test="$displayCondition='true'">false</xsl:if>
</xsl:variable>
<!-- On créé une variable qui va nous dire si il faut afficher les points à droite ou pas -->
<xsl:variable name="rightDotsOn">
<!-- Si nous n'avons pas affiché le numéro de la page -->
<xsl:if test="$displayCondition='false'">
<!-- Si la page à afficher est après la page en cours, alors on dit d'afficher les points à droite -->
<xsl:if test="$pageToShow > $currentPage">
<xsl:value-of select="not($displayRightDots='false')"/>
</xsl:if>
<!-- Si la page à afficher n'est pas après la page en cours, on dit de ne pas afficher les points à droite -->
<xsl:if test="not($pageToShow > $currentPage)">false</xsl:if>
</xsl:if>
<!-- Si on a affiché le numéro de la page, on n'affiche pas les points à droite -->
<xsl:if test="$displayCondition='true'">false</xsl:if>
</xsl:variable>
<!-- Si on doit afficher les points, à gauche ou à droite -->
<xsl:if test="$leftDotsOn='true' or $rightDotsOn='true'">
<a href="javascript:void(0)"><span>...</span></a>
</xsl:if>
<!-- Si la page à afficher est plus petite que le nombre total de pages -->
<xsl:if test="number($pageToShow) < number($max)">
<!-- On appel à nouveau le template, en incrémentant la valeur de $pageToShow -->
<!-- Pour afficher la page suivante -->
<xsl:call-template name="boucle">
<xsl:with-param name="pageToShow" select="$pageToShow + 1"/>
<xsl:with-param name="max" select="$max"/>
<xsl:with-param name="currentPage" select="$currentPage"/>
<xsl:with-param name="windowSize" select="$windowSize"/>
<!-- Cette fois on lui passe en valeur le résultat de $leftDotsOn et $rightDotsOn -->
<!-- Si ils sont à true, on a déjà affiché les points, et on ne les veux plus -->
<xsl:with-param name="displayLeftDots" select="$displayLeftDots='true' or $leftDotsOn='true'"/>
<xsl:with-param name="displayRightDots" select="$displayRightDots='true' or $rightDotsOn='true'"/>
</xsl:call-template>
</xsl:if>
</xsl:template> |