Support videos
This commit is contained in:
parent
c895894b0d
commit
1393b779ff
1
.gitignore
vendored
1
.gitignore
vendored
@ -7,6 +7,7 @@
|
|||||||
*.zip
|
*.zip
|
||||||
*.pdf
|
*.pdf
|
||||||
*.tif
|
*.tif
|
||||||
|
*.mp4
|
||||||
vendor/
|
vendor/
|
||||||
progetto_QGIS/
|
progetto_QGIS/
|
||||||
conf.json
|
conf.json
|
||||||
|
46
webgis/js/components/SiteMedia.js
Normal file
46
webgis/js/components/SiteMedia.js
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
/**
|
||||||
|
* Component to render data for site media (photos and videos)
|
||||||
|
* @class SiteMedia
|
||||||
|
*/
|
||||||
|
export class SiteMedia {
|
||||||
|
/**
|
||||||
|
* @param {object} data
|
||||||
|
*/
|
||||||
|
set siteData(data) {
|
||||||
|
this._siteData = data;
|
||||||
|
}
|
||||||
|
|
||||||
|
renderPhotos() {
|
||||||
|
return `
|
||||||
|
<div class="content has-text-centered mb-5 pb-5">
|
||||||
|
<p class="is-size-5 mt-3">Fotografie</p>
|
||||||
|
<div style="max-width: 70%; margin: 0 auto">
|
||||||
|
<p class="is-size-6">Cliccare sull'immagine per aprire la gallery</p>
|
||||||
|
<figure class="is-relative is-clickable has-text-centered" id="gallery-2">
|
||||||
|
<img src="img/${this._siteData.filename}" width="300"/>
|
||||||
|
<div class="icon overlay is-flex is-justify-content-center is-align-items-center">
|
||||||
|
<i class="is-flex fa fa-2x fa-play-circle"></i>
|
||||||
|
</div>
|
||||||
|
</figure>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
`;
|
||||||
|
}
|
||||||
|
|
||||||
|
renderVideos() {
|
||||||
|
return `
|
||||||
|
<div class="content has-text-centered mb-5 pb-5">
|
||||||
|
<p class="is-size-5 mt-3">Video</p>
|
||||||
|
<div style="max-width: 70%; margin: 0 auto">
|
||||||
|
<p class="is-size-6 has-text-centered">Gallery video</p>
|
||||||
|
<figure class="is-relative is-clickable has-text-centered" id="gallery-video">
|
||||||
|
<img src="video/${this._siteData.filename.replace('mp4', 'png')}" width="300"/>
|
||||||
|
<div class="icon overlay is-flex is-justify-content-center is-align-items-center">
|
||||||
|
<i class="is-flex fa fa-2x fa-play-circle"></i>
|
||||||
|
</div>
|
||||||
|
</figure>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
`;
|
||||||
|
}
|
||||||
|
}
|
@ -1,31 +0,0 @@
|
|||||||
/**
|
|
||||||
* Component to render data for site photos
|
|
||||||
* @class SitePhotos
|
|
||||||
*/
|
|
||||||
export class SitePhotos {
|
|
||||||
/**
|
|
||||||
* @param {object} data
|
|
||||||
*/
|
|
||||||
set siteData(data) {
|
|
||||||
this._siteData = data;
|
|
||||||
}
|
|
||||||
|
|
||||||
render() {
|
|
||||||
let content = `<div class="content has-text-centered">
|
|
||||||
<p class="is-size-5 mt-3">Fotografie</p>`;
|
|
||||||
content += `
|
|
||||||
<div style="max-width: 70%; margin: 0 auto">
|
|
||||||
<p class="is-size-6 has-text-centered">Cliccare sull'immagine per aprire la gallery</p>
|
|
||||||
<figure class="is-relative is-clickable has-text-centered" id="gallery-2">
|
|
||||||
<img src="img/${this._siteData.filename}" width="300"/>
|
|
||||||
<div class="icon overlay is-flex is-justify-content-center is-align-items-center">
|
|
||||||
<i class="is-flex fa fa-2x fa-play-circle"></i>
|
|
||||||
</div>
|
|
||||||
</figure>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
`;
|
|
||||||
|
|
||||||
return content;
|
|
||||||
}
|
|
||||||
}
|
|
@ -11,21 +11,19 @@ export class SiteSurveys {
|
|||||||
}
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
let content = `<div class="has-text-centered has-bottom-border mb-5 pb-5">
|
return `
|
||||||
<p class="is-size-5 mt-3">Rilievi CNR-ISPC, elaborazioni grafiche</p>`;
|
<div class="has-text-centered mb-5 pb-5">
|
||||||
content += `
|
<p class="is-size-5 mt-3">Rilievi CNR-ISPC, elaborazioni grafiche</p>
|
||||||
<div style="max-width: 70%; margin: 0 auto">
|
<div style="max-width: 70%; margin: 0 auto">
|
||||||
<p class="is-size-6 has-text-centered">Cliccare sull'immagine per aprire la gallery</p>
|
<p class="is-size-6">Cliccare sull'immagine per aprire la gallery</p>
|
||||||
<figure class="is-relative has-text-centered is-clickable" id="gallery-1">
|
<figure class="is-relative has-text-centered is-clickable" id="gallery-1">
|
||||||
<img src="img/${this._siteData.filename}" width="300"/>
|
<img src="img/${this._siteData.filename}" width="300"/>
|
||||||
<div class="icon overlay is-flex is-justify-content-center is-align-items-center">
|
<div class="icon overlay is-flex is-justify-content-center is-align-items-center">
|
||||||
<i class="is-flex fa fa-2x fa-play-circle"></i>
|
<i class="is-flex fa fa-2x fa-play-circle"></i>
|
||||||
</div>
|
</div>
|
||||||
</figure>
|
</figure>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
`;
|
`;
|
||||||
|
|
||||||
return content;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -144,6 +144,8 @@ GIS.initMap = async function (mapId, zoomLevel = this.INIT_ZOOM) {
|
|||||||
'Vincoli archeologici' : layerVincoli,
|
'Vincoli archeologici' : layerVincoli,
|
||||||
'Vincoli paesistici' : layerPaesistici,
|
'Vincoli paesistici' : layerPaesistici,
|
||||||
};
|
};
|
||||||
|
// TEMP!! Remove point for Lo Pozzo...
|
||||||
|
sitesGroup.removeLayer(sitesGroup.customGetLayer('lopozzo'));
|
||||||
|
|
||||||
markersGroup.addTo(map);
|
markersGroup.addTo(map);
|
||||||
sitesGroup.addTo(map);
|
sitesGroup.addTo(map);
|
||||||
@ -152,9 +154,6 @@ GIS.initMap = async function (mapId, zoomLevel = this.INIT_ZOOM) {
|
|||||||
|
|
||||||
L.control.layers(baseMap, archeo).addTo(map);
|
L.control.layers(baseMap, archeo).addTo(map);
|
||||||
|
|
||||||
// TEMP!! Remove point for Lo Pozzo...
|
|
||||||
map.removeLayer(sitesGroup.customGetLayer('lopozzo'));
|
|
||||||
|
|
||||||
return map;
|
return map;
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
|
@ -4,7 +4,7 @@ import Spotlight from './vendor/spotlight.js/src/js/spotlight.js';
|
|||||||
import { SiteSheet } from './components/SiteSheet.js';
|
import { SiteSheet } from './components/SiteSheet.js';
|
||||||
import { SiteDocuments } from './components/SiteDocuments.js';
|
import { SiteDocuments } from './components/SiteDocuments.js';
|
||||||
import { SiteSurveys } from './components/SiteSurveys.js';
|
import { SiteSurveys } from './components/SiteSurveys.js';
|
||||||
import { SitePhotos } from './components/SitePhotos.js';
|
import { SiteMedia } from './components/SiteMedia.js';
|
||||||
import { NotConservedSheet } from './components/NotConservedSheet.js';
|
import { NotConservedSheet } from './components/NotConservedSheet.js';
|
||||||
import GIS from './gis.js';
|
import GIS from './gis.js';
|
||||||
import { Finding } from './components/Finding.js';
|
import { Finding } from './components/Finding.js';
|
||||||
@ -116,30 +116,42 @@ UI.openSiteModal = async function (data, selector) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let images = modal.querySelector('#photos');
|
let images = modal.querySelector('#photos');
|
||||||
|
let docs = modal.querySelector('#documents');
|
||||||
|
|
||||||
if (data.documents?.length) {
|
if (data.documents?.length) {
|
||||||
let siteDocs = new SiteDocuments;
|
let siteDocs = new SiteDocuments;
|
||||||
siteDocs.siteData = data;
|
siteDocs.siteData = data;
|
||||||
modal.querySelector('#documents').innerHTML = siteDocs.render();
|
docs.innerHTML = siteDocs.render();
|
||||||
|
} else {
|
||||||
|
docs.innerHTML = '<p class="has-text-centered">Nessun documento disponibile</p>'
|
||||||
}
|
}
|
||||||
|
|
||||||
let surveys = data.images.filter(i => i.type === 'Survey');
|
let surveys = data.images.filter(i => i.type === 'Survey');
|
||||||
let photos = data.images.filter(i => i.type === 'Photo');
|
let photos = data.images.filter(i => i.type === 'Photo');
|
||||||
|
let videos = data.images.filter(i => i.type === 'Video');
|
||||||
|
|
||||||
|
if (surveys.length === 0 && photos.length === 0 && videos.length === 0) {
|
||||||
|
images.innerHTML = '<p class="has-text-centered">Nessuna risorsa visuale disponibile</p>';
|
||||||
|
}
|
||||||
|
|
||||||
if (images.innerHTML.length === 0) {
|
if (images.innerHTML.length === 0) {
|
||||||
let siteSurveys = new SiteSurveys;
|
let siteSurveys = new SiteSurveys;
|
||||||
siteSurveys.siteData = surveys[0] ?? undefined;
|
siteSurveys.siteData = surveys[0] ?? undefined;
|
||||||
images.innerHTML += surveys[0] ? siteSurveys.render() : '';
|
images.innerHTML += surveys[0] ? siteSurveys.render() : '';
|
||||||
|
|
||||||
let sitePhotos = new SitePhotos;
|
let siteMedia = new SiteMedia;
|
||||||
sitePhotos.siteData = photos[0] ?? undefined;
|
siteMedia.siteData = photos[0] ?? undefined;
|
||||||
images.innerHTML += photos[0] ? sitePhotos.render() : '';
|
images.innerHTML += photos[0] ? siteMedia.renderPhotos() : '';
|
||||||
|
|
||||||
|
siteMedia.siteData = videos[0] ?? undefined;
|
||||||
|
images.innerHTML += videos[0] ? siteMedia.renderVideos() : '';
|
||||||
}
|
}
|
||||||
|
|
||||||
modal.classList.add('is-active');
|
modal.classList.add('is-active');
|
||||||
|
|
||||||
this.imageGallery('gallery-1', surveys);
|
this.imageGallery('gallery-1', surveys);
|
||||||
this.imageGallery('gallery-2', photos);
|
this.imageGallery('gallery-2', photos);
|
||||||
|
this.imageGallery('gallery-video', videos, true);
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* @param {object} data The data retrieved from the DB to display as modal content
|
* @param {object} data The data retrieved from the DB to display as modal content
|
||||||
@ -220,17 +232,27 @@ UI.sitesMenu = function (menuListSel, map, sites) {
|
|||||||
* Open Spotlight gallery
|
* Open Spotlight gallery
|
||||||
* @param {string} galleryId The id of the trigger element
|
* @param {string} galleryId The id of the trigger element
|
||||||
* @param {Array<Object>} images Array of image objects from DB
|
* @param {Array<Object>} images Array of image objects from DB
|
||||||
|
* @param {boolean} video Is this a video gallery?
|
||||||
*/
|
*/
|
||||||
UI.imageGallery = function (galleryId, images) {
|
UI.imageGallery = function (galleryId, images, video = false) {
|
||||||
const element = document.querySelector(`#${galleryId}`);
|
const element = document.querySelector(`#${galleryId}`);
|
||||||
|
|
||||||
if (element) {
|
if (element) {
|
||||||
let gallery = [];
|
let gallery = [];
|
||||||
for (let img of images) {
|
for (let img of images) {
|
||||||
gallery.push({
|
let mediaObj = {
|
||||||
src: `img/${img.filename}`,
|
|
||||||
description: `${img.caption} (${img.author})`
|
description: `${img.caption} (${img.author})`
|
||||||
});
|
};
|
||||||
|
|
||||||
|
if (video) {
|
||||||
|
mediaObj.media = 'video';
|
||||||
|
mediaObj["src-mp4"] = `video/${img.filename}`;
|
||||||
|
mediaObj.poster = `video/${img.filename.replace('mp4', 'png')}`;
|
||||||
|
} else {
|
||||||
|
mediaObj.src = `img/${img.filename}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
gallery.push(mediaObj);
|
||||||
}
|
}
|
||||||
|
|
||||||
document.querySelector(`#${galleryId}`).addEventListener('click', () => {
|
document.querySelector(`#${galleryId}`).addEventListener('click', () => {
|
||||||
|
0
webgis/video/.keep
Normal file
0
webgis/video/.keep
Normal file
BIN
webgis/video/Filmato_DAMECUTA_EMICICLO.png
Normal file
BIN
webgis/video/Filmato_DAMECUTA_EMICICLO.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 330 KiB |
Loading…
Reference in New Issue
Block a user