]> Lady’s Gitweb - Shushe/commitdiff
Allow including entire directories
authorLady <redacted>
Wed, 3 Jul 2024 01:10:31 +0000 (21:10 -0400)
committerLady <redacted>
Sat, 3 Aug 2024 16:51:10 +0000 (12:51 -0400)
This commit enables `@xlink:href`s pointing to entire directories
(ending in `/`) in `<书社:link>`s as an alias for providing a link to
each file in the directory individually. This was always planned, but
apparently never actually implemented before now.

lib/catalog2transform.xslt
lib/expandmetadata.xslt

index 1cc6bad4aacc22fddc33ac797ba32fd910664d76..88644aa938cadf19ac3c9af510981b06377ab4c0 100644 (file)
@@ -347,38 +347,42 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one
                        </xslt:template>
                        <xslt:template match="书社:link[@xlink:show='embed' and (not(@xlink:actuate) or @xlink:actuate='none')]" mode="书社:expand" priority="1">
                                <xslt:variable name="identifier" select="string(@xlink:href)"/>
-                               <xslt:variable name="included" select="$书社:about//*[@rdf:about=$identifier]"/>
+                               <xslt:variable name="is-dir" select="substring($identifier, string-length($identifier))='/'"/>
+                               <xslt:variable name="included" select="$书社:about//*[@rdf:about=$identifier or $is-dir and starts-with(@rdf:about, $identifier)]"/>
                                <xslt:choose>
                                        <xslt:when test="$included">
-                                               <xslt:variable name="uri" select="$included/书社vocab:hasParsedFile/@nfo:fileUrl"/>
-                                               <xslt:variable name="expanded">
-                                                       <xslt:apply-templates select="document($uri)" mode="书社:expand">
-                                                               <xslt:with-param name="identifier" select="$identifier"/>
-                                                       </xslt:apply-templates>
-                                               </xslt:variable>
-                                               <xslt:for-each select="exsl:node-set($expanded)/node()">
-                                                       <xslt:copy>
-                                                               <xslt:choose>
-                                                                       <xslt:when test="self::html:*">
-                                                                               <xslt:attribute name="itemscope">itemscope</xslt:attribute>
-                                                                               <xslt:attribute name="itemtype">
-                                                                                       <xslt:text>
-                                                                                               <text>&书社;:embed</text>
-                                                                                       </xslt:text>
-                                                                                       <xslt:for-each select="exslstr:tokenize(@itemtype)/token[string()!='&书社;:document']">
+                                               <xslt:for-each select="$included">
+                                                       <xslt:sort select="@rdf:about" data-type="text" lang="zxx" case-order="upper-first"/>
+                                                       <xslt:variable name="uri" select="书社vocab:hasParsedFile/@nfo:fileUrl"/>
+                                                       <xslt:variable name="expanded">
+                                                               <xslt:apply-templates select="document($uri)" mode="书社:expand">
+                                                                       <xslt:with-param name="identifier" select="string(@rdf:about)"/>
+                                                               </xslt:apply-templates>
+                                                       </xslt:variable>
+                                                       <xslt:for-each select="exsl:node-set($expanded)/node()">
+                                                               <xslt:copy>
+                                                                       <xslt:choose>
+                                                                               <xslt:when test="self::html:*">
+                                                                                       <xslt:attribute name="itemscope">itemscope</xslt:attribute>
+                                                                                       <xslt:attribute name="itemtype">
                                                                                                <xslt:text>
-                                                                                                       <text> </text>
+                                                                                                       <text>&书社;:embed</text>
                                                                                                </xslt:text>
-                                                                                               <xslt:value-of select="."/>
-                                                                                       </xslt:for-each>
-                                                                               </xslt:attribute>
-                                                                               <xslt:copy-of select="@*[not(namespace-uri()='' and (local-name()='itemscope' or local-name()='itemtype'))]|node()"/>
-                                                                       </xslt:when>
-                                                                       <xslt:otherwise>
-                                                                               <xslt:apply-templates select="@*|node()" mode="书社:expand"/>
-                                                                       </xslt:otherwise>
-                                                               </xslt:choose>
-                                                       </xslt:copy>
+                                                                                               <xslt:for-each select="exslstr:tokenize(@itemtype)/token[string()!='&书社;:document']">
+                                                                                                       <xslt:text>
+                                                                                                               <text> </text>
+                                                                                                       </xslt:text>
+                                                                                                       <xslt:value-of select="."/>
+                                                                                               </xslt:for-each>
+                                                                                       </xslt:attribute>
+                                                                                       <xslt:copy-of select="@*[not(namespace-uri()='' and (local-name()='itemscope' or local-name()='itemtype'))]|node()"/>
+                                                                               </xslt:when>
+                                                                               <xslt:otherwise>
+                                                                                       <xslt:apply-templates select="@*|node()" mode="书社:expand"/>
+                                                                               </xslt:otherwise>
+                                                                       </xslt:choose>
+                                                               </xslt:copy>
+                                                       </xslt:for-each>
                                                </xslt:for-each>
                                        </xslt:when>
                                        <xslt:otherwise>
index dd393550c5ea66416287886042cc3cda0fa6e6e6..2501355ef5bca2b455b569d8736c0e8acb0de6eb 100644 (file)
@@ -57,22 +57,29 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one
                                        <variable name="parent" select="@rdf:about"/>
                                        <variable name="uri" select="书社vocab:hasParsedFile/@nfo:fileUrl"/>
                                        <for-each select="document($uri)//书社:link[@xlink:show='embed']">
-                                               <if test="exsl:node-set($old)/书社:dependency-root[string()=string(current()/@xlink:href)]">
-                                                       <书社:recursive-dependency>
-                                                               <value-of select="$parent"/>
-                                                       </书社:recursive-dependency>
-                                               </if>
-                                               <if test="$files/@rdf:about[string()=string(current()/@xlink:href)]">
-                                                       <书社:dependency>
-                                                               <value-of select="@xlink:href"/>
-                                                       </书社:dependency>
-                                               </if>
+                                               <variable name="identifier" select="string(current()/@xlink:href)"/>
+                                               <variable name="is-dir" select="substring($identifier, string-length($identifier))='/'"/>
+                                               <for-each select="$files/@rdf:about[string(.)=$identifier or $is-dir and starts-with(., $identifier)]">
+                                                       <sort select="." data-type="text" lang="zxx" case-order="upper-first"/>
+                                                       <choose>
+                                                               <when test="exsl:node-set($old)/书社:dependency-root[string()=string(current())]">
+                                                                       <书社:recursive-dependency>
+                                                                               <value-of select="$parent"/>
+                                                                       </书社:recursive-dependency>
+                                                               </when>
+                                                               <otherwise>
+                                                                       <书社:dependency>
+                                                                               <value-of select="."/>
+                                                                       </书社:dependency>
+                                                               </otherwise>
+                                                       </choose>
+                                               </for-each>
                                        </for-each>
                                </for-each>
                        </for-each>
                </variable>
                <choose>
-                       <when test="exsl:node-set($new)/书社:dependency">
+                       <when test="exsl:node-set($new)/*">
                                <call-template name="书社:process-dependencies">
                                        <with-param name="processed">
                                                <copy-of select="$old"/>
This page took 0.031648 seconds and 4 git commands to generate.