diff --git a/2025/gulpfile.mjs b/2025/gulpfile.mjs index 01c3adb..8474dad 100644 --- a/2025/gulpfile.mjs +++ b/2025/gulpfile.mjs @@ -61,6 +61,11 @@ function font() { .pipe(dest('dist/fonts')); } +function manifest() { + return src('src/**/*.json') + .pipe(dest('dist/')); +} + // Static Server function serve() { series(clean, html, image, font, css, javascript, jsVendor); @@ -82,6 +87,6 @@ function watchFiles() { watch('src/img/**/*.+(png|jpg|jpeg|svg)', series(image, browserSyncReload)); } -const _build = series(clean, html, image, font, css, javascript, jsVendor); +const _build = series(clean, html, image, font, css, javascript, jsVendor, manifest); task('serve', parallel(_build, watchFiles, serve)) task('build', _build) diff --git a/2025/src/html/layouts/layout.html b/2025/src/html/layouts/layout.html index 81dbe88..8086fae 100644 --- a/2025/src/html/layouts/layout.html +++ b/2025/src/html/layouts/layout.html @@ -6,6 +6,7 @@ + {{ site_name }} - {{ page_name }} @@ -16,9 +17,18 @@ + + + + + + + + + diff --git a/2025/src/js/main.js b/2025/src/js/main.js index 7d15fc3..eaed86f 100644 --- a/2025/src/js/main.js +++ b/2025/src/js/main.js @@ -25,4 +25,14 @@ $(function () { // Démarrer les tooltips pour les sponsors const tooltipTriggerList = document.querySelectorAll('[data-bs-toggle="tooltip"]'); [...tooltipTriggerList].map(tooltipTriggerEl => new bootstrap.Tooltip(tooltipTriggerEl)); + + if ('serviceWorker' in navigator) { + navigator.serviceWorker.register('/js/service-worker.js') + .then((registration) => { + console.log('Service Worker registered with scope:', registration.scope); + }) + .catch((error) => { + console.error('Service Worker registration failed:', error); + }); + } }); diff --git a/2025/src/js/service-worker.js b/2025/src/js/service-worker.js new file mode 100644 index 0000000..b99bc9e --- /dev/null +++ b/2025/src/js/service-worker.js @@ -0,0 +1,41 @@ +const CACHE_NAME = 'sotm-v1'; +const urlsToCache = [ + '/', + '/index.html', + '/css/main.css', + '/js/main.js' +]; + +// Install event +self.addEventListener('install', (event) => { + event.waitUntil( + caches.open(CACHE_NAME).then((cache) => { + return cache.addAll(urlsToCache); + }) + ); +}); + +// Fetch event +self.addEventListener('fetch', (event) => { + event.respondWith( + caches.match(event.request).then((response) => { + return response || fetch(event.request); + }) + ); +}); + +// Activate event +self.addEventListener('activate', (event) => { + const cacheWhitelist = [CACHE_NAME]; + event.waitUntil( + caches.keys().then((cacheNames) => { + return Promise.all( + cacheNames.map((cacheName) => { + if (!cacheWhitelist.includes(cacheName)) { + return caches.delete(cacheName); + } + }) + ); + }) + ); +}); diff --git a/2025/src/manifest.json b/2025/src/manifest.json new file mode 100644 index 0000000..c6f141c --- /dev/null +++ b/2025/src/manifest.json @@ -0,0 +1,19 @@ +{ + "short_name": "SOTM-FR 2025", + "name": "SOTM-FR 2025", + "description":"Site web du State of The Map France 2025", + "lang": "fr", + "theme_color": "#ffffff", + "background_color": "#ffffff", + "display": "fullscreen", + "Scope": "/", + "orientation": "portrait", + "serviceworker": "/", + "icons": [ + { + "src": "/img/osm.svg", + "type": "image/svg", + "sizes": "256x256" + } ], + "start_url": "/index.html" +}