diff --git a/modules/core.xqm b/modules/core.xqm index b8f84d41c..4d8fed2ce 100755 --- a/modules/core.xqm +++ b/modules/core.xqm @@ -80,12 +80,30 @@ declare %private function core:createColl($collName as xs:string, $cacheKey as x declare function core:undated($docType as xs:string) as document-node()* { switch($docType) case 'letters' case 'writings' case 'documents' return crud:data-collection($docType)/tei:TEI[ft:query(., 'date:undated')][not(tei:ref)]/root() + case 'sources' return + crud:data-collection($docType)/tei:TEI[ft:query(., 'date:undated')][not(tei:ref)]/root() | + crud:data-collection($docType)/mei:manifestation[ft:query(., 'date:undated')]/root() default return () }; +(:~ + : Return a sequence of unique index values for a given field + : defined in the Lucene index configuration. + : + : @see http://exist-db.org/exist/apps/doc/lucene#facets-and-fields + : @param $coll a collection of documents + : @param $field the index field name, e.g. "date" + : @return a sequence of index entries + :) declare function core:index-keys-for-field($coll as document-node()*, $field as xs:string) as xs:string* { distinct-values( - for $i in $coll/tei:TEI[ft:query(., (), map { "fields": $field })] | $coll/tei:ab[ft:query(., (), map { "fields": $field })] | $coll/tei:biblStruct[ft:query(., (), map { "fields": $field })] + for $i in + ( + $coll/tei:TEI[ft:query(., (), map { "fields": $field })] | + $coll/tei:ab[ft:query(., (), map { "fields": $field })] | + $coll/tei:biblStruct[ft:query(., (), map { "fields": $field })] | + $coll/mei:manifestation[ft:query(., (), map { "fields": $field })] + ) return ft:field($i, $field) ) diff --git a/modules/search.xqm b/modules/search.xqm index 94cdad189..049d24944 100644 --- a/modules/search.xqm +++ b/modules/search.xqm @@ -400,8 +400,10 @@ declare %private function search:facsimile-filter($collection as document-node() declare %private function search:get-earliest-date($coll as document-node()*, $docType as xs:string) as xs:string? { if(count($coll) gt 0) then switch ($docType) - case 'news' case 'biblio' case 'letters' case 'writings' case 'diaries' case 'documents' return - min(core:index-keys-for-field($coll, 'date')[not(.='undated')]) + case 'news' case 'biblio' case 'letters' case 'writings' + case 'diaries' case 'documents' case 'sources' + return + min(core:index-keys-for-field($coll, 'date')[not(.='undated')]) case 'persons' case 'orgs' return () case 'works' return () case 'places' return () @@ -415,8 +417,10 @@ declare %private function search:get-earliest-date($coll as document-node()*, $d declare %private function search:get-latest-date($coll as document-node()*, $docType as xs:string) as xs:string? { if(count($coll) gt 0) then switch ($docType) - case 'news' case 'biblio' case 'letters' case 'writings' case 'diaries' case 'documents' return - max(core:index-keys-for-field($coll, 'date')[not(.='undated')]) + case 'news' case 'biblio' case 'letters' case 'writings' + case 'diaries' case 'documents' case 'sources' + return + max(core:index-keys-for-field($coll, 'date')[not(.='undated')]) case 'persons' case 'orgs' return () case 'works' return () case 'places' return () diff --git a/modules/wdt.xqm b/modules/wdt.xqm index eb4f6c7c4..1d0ef7e3c 100644 --- a/modules/wdt.xqm +++ b/modules/wdt.xqm @@ -759,7 +759,7 @@ declare function wdt:sources($item as item()*) as map(*) { else () }, 'filter-by-date' : function($dateFrom as xs:date?, $dateTo as xs:date?) as document-node()* { - () + $wdt:filter-by-date($item, $dateFrom, $dateTo)[parent::tei:imprint or parent::tei:creation or parent::mei:pubStmt or parent::mei:creation]/root() }, 'sort' : function($params as map(*)?) as document-node()* { if(sort:has-index('sources')) then () diff --git a/templates/ajax/sources.html b/templates/ajax/sources.html index db66aaa7f..608c8740d 100644 --- a/templates/ajax/sources.html +++ b/templates/ajax/sources.html @@ -3,7 +3,8 @@