abaev-basex-htmx/xq/site/components/map.xqm

71 lines
2.6 KiB
Text
Raw Normal View History

module namespace map = 'http://ossetic-studies.org/ns/abaevdict-site/map';
import module namespace abv-m = 'http://ossetic-studies.org/ns/abaevdict-mod' at '../../abv-mod.xqm';
declare %rest:path("{$lang}/map")
%rest:query-param("entry", "{$entry}")
%rest:GET
%rest:produces("text/html")
%output:method("html")
%output:html-version('5')
function map:map($lang as xs:string, $entry as xs:string) {
let $mapdata := abv-m:make-geomap(
doc(`abaevdict_{$lang}/xml/{$entry}.xml`),
$lang)
return
(<article>
<header>
<button class="abv-close-map" aria-label="Close" rel="prev">
</button>
<p>{if ($lang = 'ru') then 'Карта' else 'Map'}</p>
</header>
<p>
<div id="map-display" style="width:100%;height:80%;"></div>
</p>
<footer>
<button class="abv-close-map"
hx-on-click="document.getElementById('modal_map').close()">
{if ($lang = 'ru') then 'Закрыть' else 'Close'}
</button>
</footer>
</article>,
<script defer="1">
{concat(`var mapdata = {json:serialize($mapdata)}`,
"
map = document.getElementById('map-display');
var layout = {
// title: {
// text: 'Canadian cities',
// font: {
// family: 'Droid Serif, serif',
// size: 16
// }
// },
geo: {
scope: 'world',
resolution: 50,
fitbounds: 'locations',
showrivers: true,
rivercolor: '#fff',
showlakes: true,
lakecolor: '#fff',
showland: true,
landcolor: '#EAEAAE',
showcountries: false,
subunitcolor: '#d3d3d3'
}
};
Plotly.newPlot(map, [mapdata], layout);
")}
</script>)
2025-03-30 01:25:51 +03:00
};
declare %rest:path("map")
%rest:query-param("entry", "{$entry}")
%rest:GET
%rest:produces("text/html")
%output:method("html")
%output:html-version('5')
function map:map($entry as xs:string) {
map:map('en', $entry)
};