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";
import module namespace console="http://exist-db.org/xquery/console";
declare namespace tei="http://www.tei-c.org/ns/1.0";
declare namespace xhtml="http://www.w3.org/1999/xhtml";
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/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
Theodor Fontane: {$title}. Hrsg. von Gabriele Radecke.
In: Theodor Fontane: Notizbücher. Digitale genetisch-kritische und kommentierte Edition.
Hrsg. von Gabriele Radecke, {$page}.
{$url},
abgerufen am: {$date}
case 'inhalt.html'
return
Zitationsempfehlung
Theodor Fontane: {$title} (Inhaltsverzeichnis). Hrsg. von Gabriele Radecke.
{$url},
abgerufen am: {$date}
case 'doku.html'
return
Zitationsempfehlung
Gabriele Radecke unter Mitarbeit von Martin de la Iglesia und Mathias Göbel: Editorische Gesamtdokumentation.
Editorische Assistenz: Rahel Rami und Judith Michaelis. In: Theodor Fontane: Notizbücher. Digitale
genetisch-kritische und kommentierte Edition. Hrsg. von Gabriele Radecke.
{$url}, abgerufen am {$date}
default
return
Zitationsempfehlung
Theodor Fontane: Notizbücher. Hrsg. von Gabriele Radecke.
{$url}
abgerufen am: {$date}
};
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 := $param||$pos = $param||$num
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 ': '||$page else ()}
,
Faksimile
,
Transkription
,
XML
};
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){
if((string-length($n) lt 4) and matches($n, "^[A-Ea-e]\d+"))
then
else "Die Digitalisate zum gesuchten Notizbuch sind noch nicht verfügbar oder die Anfrage ist ungültig."
};
declare function f-misc:debug( $node as node(), $model as map(*) ){
};
declare function f-misc:ToolbarExtended($node as node(), $model as map(*)) {
let $develop := config:get('sade.develop')
return
switch ($develop)
case "true" return
default return
};
declare function f-misc:textgridStatus($node as node(), $model as map(*)) {
let $col := "/db/sade-projects/textgrid"
let $res := "tgstatus.xml"
let $url := "https://dariah-de.github.io/status/textgrid/repstatus.html"
let $lastMod := xmldb:last-modified($col, $res)
let $path := $col || "/" || $res
let $doc := doc( $path )
let $active := not( exists( $doc//ok ) )
let $needUpdate := not(doc-available($path)) or $lastMod < (current-dateTime() - xs:dayTimeDuration("PT12H"))
let $getStatus :=
if( $needUpdate )
then
let $status := httpclient:get(xs:anyURI($url), false(), ())//xhtml:div[contains(@class, 'repstatus')][not( contains(@class, 'ok') )]
let $status := if( exists( $status ) ) then $status else
return
xmldb:store($col, $res, $status)
else if($active and $lastMod < (current-dateTime() - xs:dayTimeDuration("PT2H")))
then
let $status := httpclient:get(xs:anyURI($url), false(), ())//xhtml:div[contains(@class, 'repstatus')][not( contains(@class, 'ok') )]
let $status := if( exists( $status ) ) then $status else
return
(xmldb:login($col, config:get("sade.user"), config:get("sade.password")), xmldb:store($col, $res, $status))
else ()
let $doc := doc( $col || "/" || $res )
return
let $status := $doc/xhtml:div[@class]/tokenize(@class, '\s+')[last()]
return
if( $doc//ok ) then () else
TextGrid-Statusmeldung
Es liegt eine aktuelle Meldung zum TextGrid Repository vor. Einige
Funktionen, z.Bsp die Darstellung der Faksimiles, sind vom TextGrid
Repository abhängig und daher evtl. davon betroffen. Hier folgt die
Meldung von TextGrid.
Status: {$status}
{for $i at $pos in $doc/xhtml:div//xhtml:p[@lang="de"] return (if($pos gt 1) then
else (),$i)}
};
declare function f-misc:nbTitle($id as xs:string, $model as map(*)){
let $doc := doc( config:get("data-dir") || $id)
let $title := $doc//tei:teiHeader/tei:fileDesc/tei:titleStmt/tei:title/string(.)
let $beta := if(contains(($doc//tei:revisionDesc/tei:change)[last()]/text(), 'Version 0.')) then beta else ()
return (
(: {substring-before($title, ' ')},:)
{' '||substring-after($title, ' ')},
$beta
)
};
declare function f-misc:pageNav($node as node(), $model as map(*), $id){
if(request:get-parameter-names() = 'page')
then
let $page := if(request:get-parameter('page', '') = '') then 'outer_front_cover' else request:get-parameter('page', '')
let $doc:= doc('/db/sade-projects/textgrid/data'||$id)/tei:TEI
let $pagelist := $doc//tei:sourceDoc//tei:surface[parent::tei:sourceDoc or @type="clipping"]/string(@n)
let $page := if ($page = '') then 'outer_front_cover' else $page
let $index := index-of($pagelist, $page)
let $return :=
(
(
if ( $index gt 1 )
then
vorige Seite
else ()
)
,
(
if ( $index lt count($pagelist) )
then
nächste Seite
else ()
),
element script {
'$(document).keyup(function(e){
var next = jQuery.isEmptyObject( $("#navNext").attr("href") );
var prev = jQuery.isEmptyObject( $("#navPrev").attr("href") );
if ( (e.keyCode == 37) && prev == false )
{location.href = $( "#navPrev" ).attr("href"); }
else if (e.keyCode == 39 && next == false )
{location.href = $( "#navNext" ).attr("href"); }
});'
}
)
return $return
else ()
};
declare function f-misc:tocHeader($node as node(), $model as map(*)){
{f-misc:nbTitle(request:get-parameter('id', ''), $model)}
};