xquery version "3.1"; module namespace f-misc="http://fontane-nb.dariah.eu/ns/SADE/misc"; import module namespace config="http://textgrid.de/ns/SADE/config" at "../config/config.xqm"; declare namespace tei="http://www.tei-c.org/ns/1.0"; declare namespace test="http://exist-db.org/xquery/xqsuite"; declare namespace tgmd="http://textgrid.info/namespaces/metadata/core/2010"; declare namespace xhtml="http://www.w3.org/1999/xhtml"; declare variable $f-misc:metadata-collection := collection("/db/sade-projects/textgrid/data/xml/meta"); declare %test:setUp function f-misc:setup(){ let $testconfig := doc("tests.xml")//testdata[@module="f-misc"] (: prepare the collections :) let $prepare-collections := for $create in $testconfig//create/collection return config:mkcol($create/@path) (: prepare documents :) let $prepare-documents := for $create in $testconfig//create/document return xmldb:store($create/@collection, $create/@name, $create/*) return true() }; declare %test:tearDown function f-misc:teardown(){ xmldb:remove("/db/sade-projects") }; declare %test:arg("baseUri","textgrid:16b00") %test:assertEquals("Notizbuch C7") %test:arg("baseUri","") %test:assertEquals("") function f-misc:get-title-by-baseUri($baseUri as xs:string) as xs:string? { if($baseUri = "") then () else $f-misc:metadata-collection//tgmd:textgridUri[starts-with(string(.), $baseUri)]/ancestor::tgmd:object//tgmd:title/string() => replace("([A-E])0(\d)", "$1$2") }; declare function f-misc:nb-param-to-title($node as node(), $model as map(*), $nb as xs:string?) as xs:string? { if(string($nb) = "") then "" else f-misc:get-title-by-baseUri( "textgrid:" || $nb ) }; (:~ : Translates tei:surface/@n to German : @param $n – a valid @tei:n value : @return the German version, e.g. outer_front_cover translates to "vordere Einbanddecke außen" : :) declare function f-misc:n-translate($n as xs:string) as xs:string{ if(contains($n, 'endpaper')) then let $seq := tokenize($n, '_') return ((switch($seq[1]) case "front" return 'vorderes' case "back" return 'hinteres' default return 'ungültiger Wert in @n') || ' Vorsatzblatt ' || $seq[last()]) else switch ($n) case "outer_front_cover" return "vordere Einbanddecke außen" case "inner_front_cover" return "vordere Einbanddecke innen" case "inner_back_cover" return "hintere Einbanddecke innen" case "outer_back_cover" return "hintere Einbanddecke außen" case "spine" return "Buchrücken" default return $n }; declare function f-misc:cite($node as node(), $model as map(*)) { let $url := request:get-url(), $res := tokenize($url, '/')[last()], $id := request:get-parameter('id', ''), $page := request:get-parameter('page', 'outer_front_cover'), $page := if($page = '') then 'outer_front_cover' else $page, $page := switch ($page) case "outer_front_cover" return "vordere Einbanddecke außen" case "inner_front_cover" return "vordere Einbanddecke innen" case "inner_back_cover" return "hintere Einbanddecke außen" case "outer_back_cover" return "hintere Einbanddecke innen" case "spine" return "Buchrücken" default return 'Blatt '||$page, $doc := doc( config:get("data-dir")||$id), $title := $doc//tei:TEI/tei:teiHeader/tei:fileDesc/tei:titleStmt/tei:title/string(), $version := string( ($doc//tei:TEI/tei:teiHeader/tei:revisionDesc/tei:change[last()]/text())[1] ), $date := current-date(), $date := day-from-date($date)||'.'||month-from-date($date)||'.'||year-from-date($date), $url := replace($url, 'localhost:8080/exist/apps/SADE/textgrid', 'fontane-nb.dariah.eu') ||(if (request:get-query-string()) then '?' || request:get-query-string() else '') return switch ($res) case 'edition.html' return Zitationsempfehlung case 'inhalt.html' return Zitationsempfehlung case 'doku.html' return Zitationsempfehlung default return Zitationsempfehlung }; declare function f-misc:kaesten($node as node(), $model as map(*)){ let $q := request:get-parameter('n', '') let $q := if(string-length($q) = 1) then $q||"0" else $q let $num := if(matches($q, "\d+$")) then number(substring($q, 2, 2)) else 0 let $q := substring($q, 1, 1) let $data-dir := config:get("data-dir") return (,
{ for $kasten in (('a', 'b', 'c', 'd', 'e')) return if ($q = $kasten) then
{f-misc:list( $data-dir || '/xml/meta', upper-case($kasten), $num)}
else
{f-misc:list($data-dir || '/xml/meta', upper-case($kasten), $num)}
}
) }; declare function f-misc:list($datadir, $param, $num as xs:integer) { let $tgnav:= doc('/db/sade-projects/textgrid/navigation-fontane.xml') for $item at $pos in distinct-values($tgnav//object[string(@type)="text/xml"][starts-with(string(@title), 'Notizbuch ' || $param)]/string(@title)) (: : use these lines, when more than on revision is in the database : let $maxRev:= max($tgnav//object[@title = $item]/number(substring-after(@uri, '.'))),:) (: $uri:= $tgnav//object[@title = $item][number(substring-after(@uri, '.')) = $maxRev]/substring-after(@uri, 'textgrid:'):) let $uri:= $tgnav//object[string(@title) = $item]/substring-before(substring-after(@uri, 'textgrid:'), '.') let $thisIn := upper-case(replace(request:get-parameter('n', ''), "\d", "")) || $num eq replace($item, "Notizbuch ([A-E])0(\d)", "$1$2") return
{ let $img := "digilib/"||substring-after($item, ' ')||"_001.jpg?dh=350&mo=jpg" return element xhtml:img { attribute class {"imgLazy"}, attribute src { if ($thisIn) then $img else "/public/img/loader.svg" }, if(not($thisIn)) then attribute data-original {$img} else () } }
}; declare function f-misc:content($node as node(), $model as map(*), $id, $page){

{f-misc:nbTitle(request:get-parameter('id', ''), $model)} {if(matches($page, '\d+(r|v)')) then ': '||replace($page, "-alt", "") else ()}

, , , }; declare function f-misc:buttons($node as node(), $model as map(*)){ let $cookies := request:get-cookie-names() let $pagenum := request:get-parameter('page', 'outer_front_cover') let $pagenum := if ($pagenum = '') then 'outer_front_cover' else $pagenum let $page := doc( config:get("data-dir") || request:get-parameter('id', '/xml/data/16b00.xml'))//tei:surface[@n = $pagenum] let $entities := distinct-values($page//tei:rs/substring-before(@ref, ':')) let $rslistItems := for $e in $entities order by $e return switch($e) case 'psn' return
  • Personen
  • case 'plc' return
  • Orte
  • case 'wrk' return
  • Werke
  • case 'eve' return
  • Ereignisse
  • case 'org' return
  • Institutionen
  • default return
  • Keine
  • let $datelistItems := if($page//tei:date) then for $item in distinct-values( $page//tei:date/string(@when-iso) ) return
  • {$item}
  • else
  • Keine
  • let $reflistItems := if($page//tei:ref[not(parent::tei:figDesc)]) then for $item in distinct-values( $page//tei:ref[not(parent::tei:figDesc)]/string-join(., ' ') ) return
  • {$item}
  • else
  • Keine
  • return switch ( config:get('sade.develop') ) case "true" return
    default return
    }; declare function f-misc:mirador($node as node(), $model as map(*), $n){ let $sandbox := doc( "/db/sade-projects/textgrid/data/xml" || "/sandbox-iiif.xml" ) let $url := "https://textgridlab.org/1.0/iiif/mirador/?uri=" let $book := if(string-length($n) = 2) then substring($n, 1, 1) || "0" || substring($n, 2, 1) else $n let $uri := string($sandbox//tgmd:title[matches(., "Notizbuch_" || $book || "-IIIF")]/ancestor::tgmd:generic//tgmd:textgridUri) return