abaev-basex/xq/site/restx_search.xq

75 lines
No EOL
3 KiB
Text

module namespace search = 'http://ossetic-studies.org/ns/abaevdict-site/search';
import module namespace abv-m = 'http://ossetic-studies.org/ns/abaevdict-mod' at '../abv-mod.xqm';
import module namespace entry = 'http://ossetic-studies.org/ns/abaevdict-site/entrypoints' at './restx_entrypoints.xq';
(: =============================================================== :)
(: ======================= SEARCH ENTRYPOINT ===================== :)
(: =============================================================== :)
declare %rest:path("/search/{$path=.+}")
%rest:GET
function search:search-default($path as xs:string) {
web:forward(`/en/search/{$path}`)
};
declare %rest:path("{$lang}/search/new")
%rest:query-param("searchType", "{$searchType}", 'full')
%rest:query-param("searchQuery", "{$searchQuery}")
%output:method("html")
%output:html-version('5')
function search:search($lang, $searchType, $searchQuery) {
let $sd := abv-m:search($lang,$searchType,$searchQuery)
let $r1 := session:set('searchType', $searchType)
let $r2 := session:set('searchQuery', $searchQuery)
let $r3 := session:set('searchN', 1)
let $r4 := session:set('searchData', $sd)
return
if(array:size($sd) > 0) then
entry:by-id($lang,
$sd(1)('entry'),
'')
else
web:redirect('../search/clear')
};
declare %rest:path("{$lang}/search/next")
%output:method("html")
%output:html-version('5')
function search:search-next($lang) {
let $n as xs:integer := session:get('searchN')+1
let $r1 := session:set('searchN', $n)
let $sd := session:get('searchData')
return entry:by-id($lang, $sd($n)('entry'), ())
};
declare %rest:path("{$lang}/search/prev")
%output:method("html")
%output:html-version('5')
function search:search-prev($lang) {
let $n as xs:integer := session:get('searchN')-1
let $r1 := session:set('searchN', $n)
let $sd := session:get('searchData')
return entry:by-id($lang, $sd($n)('entry'), ())
};
declare %rest:path("{$lang}/search/position")
%rest:query-param("p", "{$p}")
%output:method("html")
%output:html-version('5')
function search:search-position($lang, $p as xs:integer) {
let $r1 := session:set('searchN', $p)
let $sd := session:get('searchData')
return entry:by-id($lang, $sd($p)('entry'), ())
};
declare %rest:path("{$lang}/search/clear")
%output:method("html")
%output:html-version('5')
function search:clearSearch($lang) {
let $r1 := session:delete('searchType')
let $r2 := session:delete('searchQuery')
let $r3 := session:delete('searchN')
let $r4 := session:delete('searchData')
return web:redirect('../dict')
};