diff --git a/webgis/img/icons/subacquei.png b/webgis/img/icons/subacquei.png
new file mode 100644
index 0000000..05cd5df
Binary files /dev/null and b/webgis/img/icons/subacquei.png differ
diff --git a/webgis/img/icons/subacquei_menu.png b/webgis/img/icons/subacquei_menu.png
new file mode 100644
index 0000000..eff52d2
Binary files /dev/null and b/webgis/img/icons/subacquei_menu.png differ
diff --git a/webgis/index.html b/webgis/index.html
index a77869e..dcd520c 100644
--- a/webgis/index.html
+++ b/webgis/index.html
@@ -527,6 +527,47 @@
+
+
@@ -653,6 +694,14 @@
diff --git a/webgis/js/components/Underwater.js b/webgis/js/components/Underwater.js
new file mode 100644
index 0000000..c6e0261
--- /dev/null
+++ b/webgis/js/components/Underwater.js
@@ -0,0 +1,41 @@
+/**
+ * @class Underwater
+ */
+export class Underwater {
+
+ /**
+ * @param {object} data
+ */
+ set data(data) {
+ this._data = data;
+ }
+
+ async render() {
+ return `
+
+
+ Denominazione: ${this._data.denomination}
+
+
+ Località generica: ${this._data.genericPlace}
+
+
+ Periodo: ${this._data.period}
+
+
+ Stato di conservazione: ${this._data.conservationState}
+
+
+ Descrizione breve
+ ${this._data.shortDescription}
+
+
+ Autore scheda: ${this._data.author}
+
+
`;
+ }
+
+ async fetchData(url) {
+ return await fetch(url).then(res => res.json());
+ }
+}
diff --git a/webgis/js/controllers/layer_controller.js b/webgis/js/controllers/layer_controller.js
index 060bd83..59bb603 100644
--- a/webgis/js/controllers/layer_controller.js
+++ b/webgis/js/controllers/layer_controller.js
@@ -15,6 +15,7 @@ export default class extends Controller {
'non-conser': window.NotConserved,
'rinv': window.Findings,
'preist': window.Prehistoric,
+ 'subacquei': window.Underwater,
}
let group = layers[id];
diff --git a/webgis/js/gis.js b/webgis/js/gis.js
index 344a00e..b49360e 100644
--- a/webgis/js/gis.js
+++ b/webgis/js/gis.js
@@ -120,6 +120,7 @@ GIS.initMap = async function (mapId, zoomLevel = this.INIT_ZOOM) {
this.notConserved().then(group => {group.addTo(map); window.NotConserved = group});
this.findings().then(group => {group.addTo(map); window.Findings = group});
this.prehistoric().then(group => {group.addTo(map); window.Prehistoric = group});
+ this.underwater().then(group => {group.addTo(map); window.Underwater = group});
const archeo = {
'Vincoli archeologici' : layerVincoli,
@@ -237,6 +238,30 @@ GIS.prehistoric = async function () {
return prehistoric;
}
+/**
+ * Create underwater sites group
+ * @returns {L.MarkerClusterGroup}
+ */
+GIS.underwater = async function () {
+ let underwaterData = await fetch(`${API_URL}/underwater`)
+ .then(data => data.json());
+
+ let underwater = L.markerClusterGroup(clusterOptions);
+
+ for (let record of underwaterData.records) {
+ underwater.addLayer(L.marker(
+ record.coordinates,
+ {icon: Icons.underwater}
+ ).bindTooltip(record.denomination)
+ .on(
+ 'click',
+ () => UI.openUnderwaterModal(record, '#underwater-data')
+ )
+ );
+ }
+
+ return underwater;
+}
/**
* Adds layers to map and returns an object
* with {baseMap, archeoLayers, sitesLayerGroup}
diff --git a/webgis/js/icons.js b/webgis/js/icons.js
index 95d7ba7..a13056f 100644
--- a/webgis/js/icons.js
+++ b/webgis/js/icons.js
@@ -39,6 +39,15 @@ Icons.prehistoric = L.icon(
}
);
+Icons.underwater = L.icon(
+ {
+ iconUrl: 'img/icons/subacquei.png',
+ iconSize: [18, 27],
+ iconAnchor: [10, 24],
+ tooltipAnchor: [0, -22],
+ }
+);
+
Icons.camera = L.divIcon({className: 'fa fa-camera'});
export default Icons;
\ No newline at end of file
diff --git a/webgis/js/ui.js b/webgis/js/ui.js
index 86ada0f..0459166 100644
--- a/webgis/js/ui.js
+++ b/webgis/js/ui.js
@@ -8,6 +8,7 @@ import { SiteMedia } from './components/SiteMedia.js';
import { NotConserved } from './components/NotConserved.js';
import { Finding } from './components/Finding.js';
import { Prehistoric } from './components/Prehistoric.js';
+import { Underwater } from './components/Underwater.js';
/**
* @namespace UI
@@ -213,6 +214,22 @@ UI.openPrehistModal = function (data, selector) {
prehistoric.render().then(html => modal.querySelector('#prehist-sheet').innerHTML = html);
modal.classList.add('is-active');
}
+/**
+ * @todo Biblio?
+ * @param {object} data The data retrieved from the DB to display as modal content
+ * @param {string} selector The modal selector
+ */
+UI.openUnderwaterModal = function (data, selector) {
+ const modal = document.querySelector(selector);
+
+ let underwater = new Underwater();
+ underwater.data = data;
+
+ // For Stimulus biblio_controller
+ //window.Biblio = prehistoric;
+ underwater.render().then(html => modal.querySelector('#underwater-sheet').innerHTML = html);
+ modal.classList.add('is-active');
+}
/**
* Open Spotlight gallery
* @param {string} galleryId The id of the trigger element