1616 < link rel ="stylesheet " href ="https://unpkg.com/leaflet.markercluster/dist/MarkerCluster.css "/>
1717 < link rel ="stylesheet " href ="https://unpkg.com/leaflet.markercluster/dist/MarkerCluster.Default.css "/>
1818 < script src ="https://unpkg.com/leaflet.markercluster/dist/leaflet.markercluster-src.js "> </ script >
19+
20+ {% if data['itemtype'] == 'record' %}
21+ < link rel ="
stylesheet "
href ="
https://unpkg.com/[email protected] /dist/leaflet.draw.css "
> </ script > 22+ < script src ="
https://unpkg.com/[email protected] /dist/leaflet.draw.js "
> </ script > 23+ {% endif %}
1924{% endblock %}
2025
2126{% block body %}
@@ -25,6 +30,34 @@ <h1>{% for l in data['links'] if l.rel == 'collection' %} {{ l['title'] }} {% en
2530 </ section >
2631 < section id ="items ">
2732 {% if data['features'] %}
33+ {% if data['itemtype'] == 'record' %}
34+ < div class ="row ">
35+ < div class ="col-sm-12 col-md-6 ">
36+ < div class ="row ">
37+ < div class ="col-sm-4 ">
38+ < label for ="q "> Search</ label >
39+ < input name ="q " id ="q " type ="text " class ="form-control search-input " placeholder ="Search ">
40+ </ div >
41+ < div class ="col-sm-4 ">
42+ < label for ="datetime_begin "> Start date</ label >
43+ < input name ="datetime_begin " id ="datetime_begin " type ="date " class ="form-control " />
44+ </ div >
45+ < div class ="col-sm-4 ">
46+ < label for ="datetime_end "> End date</ label >
47+ < input name ="datetime_end " id ="datetime_end " type ="date " class ="form-control " />
48+ </ div >
49+ </ div >
50+ < div class ="row ">
51+ < div class ="col-sm-12 ">
52+ < input class ="form-check-input " onchange ="checkSpatialFilter() " type ="checkbox " id ="spatial_filter_check ">
53+ < label class ="form-check-label " for ="spatial_filter_check "> Spatial filter</ label >
54+ < button type ="button " class ="btn btn-primary " onclick ="submitForm(); "> Search</ button >
55+ < button type ="reset " class ="btn btn-secondary "> Reset</ button >
56+ </ div >
57+ </ div >
58+ </ div >
59+ </ div >
60+ {% endif %}
2861 < div class ="row ">
2962 < div class ="col-sm-12 col-md-6 ">
3063 < div class ="row ">
@@ -153,6 +186,51 @@ <h1>{% for l in data['links'] if l.rel == 'collection' %} {{ l['title'] }} {% en
153186{% block extrafoot %}
154187{% if data['features'] %}
155188 < script >
189+ { % if data [ 'itemtype' ] == 'record' % }
190+
191+ document . getElementById ( "q" ) . addEventListener ( "keydown" , function ( event ) {
192+ if ( event . key === "Enter" ) {
193+ submitForm ( ) ;
194+ }
195+ } ) ;
196+
197+ function submitForm ( ) {
198+ var query_string = [ ] ;
199+ var datetime = [ ] ;
200+
201+ var q = document . getElementById ( 'q' ) . value ;
202+ var datetime_begin = document . getElementById ( 'datetime_begin' ) . value ;
203+ var datetime_end = document . getElementById ( 'datetime_end' ) . value ;
204+
205+ if ( q ) {
206+ query_string . push ( 'q=' + encodeURIComponent ( q ) ) ;
207+ }
208+ if ( datetime_begin ) {
209+ datetime . push ( datetime_begin + 'T00:00:00Z' ) ;
210+ } else {
211+ datetime . push ( '..' ) ;
212+ }
213+ if ( datetime_end ) {
214+ datetime . push ( datetime_end + 'T23:59:59Z' ) ;
215+ } else {
216+ datetime . push ( '..' ) ;
217+ }
218+
219+ datetime = datetime . join ( '/' ) ;
220+
221+ if ( datetime !== '../..' ) {
222+ query_string . push ( 'datetime=' + encodeURIComponent ( datetime ) ) ;
223+ }
224+
225+ if ( map . hasLayer ( rectangle ) ) {
226+ query_string . push ( 'bbox=' + getBbox ( rectangle ) . join ( ',' ) ) ;
227+ }
228+
229+ if ( query_string . length > 0 ) {
230+ document . location . href = '{{ data[' items_path '] }}' + '?' + query_string . join ( '&' ) ;
231+ }
232+ }
233+ { % endif % }
156234 var map = L . map ( 'items-map' ) . setView ( [ { { 45 } } , { { - 75 } } ] , 5 ) ;
157235 map . addLayer ( new L . TileLayer (
158236 '{{ config[' server '] [ 'map' ] [ 'url' ] } } ', {
@@ -178,6 +256,37 @@ <h1>{% for l in data['links'] if l.rel == 'collection' %} {{ l['title'] }} {% en
178256 map . addLayer ( markers ) ;
179257
180258 map . fitBounds ( items . getBounds ( ) ) ;
259+
260+ { % if data [ 'itemtype' ] == 'record' % }
261+ function getBbox ( rect ) {
262+ bounds = rect . getBounds ( ) ;
263+
264+ return [ bounds . getWest ( ) ,
265+ bounds . getSouth ( ) ,
266+ bounds . getEast ( ) ,
267+ bounds . getNorth ( ) ] ;
268+ }
269+
270+ var rectangle ;
271+ function setRectangle ( bbox ) {
272+ if ( rectangle ) {
273+ rectangle . setBounds ( bbox )
274+ } else {
275+ rectangle = L . rectangle ( bbox ) ;
276+ rectangle . editing . enable ( ) ;
277+ rectangle . setStyle ( { color :'green' } ) ;
278+ }
279+ map . addLayer ( rectangle ) ;
280+ }
281+
282+ function checkSpatialFilter ( ) {
283+ if ( map . hasLayer ( rectangle ) ) {
284+ rectangle . remove ( ) ;
285+ } else {
286+ setRectangle ( map . getBounds ( ) . pad ( - 0.95 ) ) ;
287+ }
288+ }
289+ { % endif % }
181290 </ script >
182291{% endif %}
183292{% endblock %}
0 commit comments