commit ff607ff17de3f9e1f99d09e35a4cd5e6268e1e43 Author: cpinte Date: Wed Jan 14 12:58:15 2026 +0100 initial commit diff --git a/css/leaflet.css b/css/leaflet.css new file mode 100644 index 0000000..ea71aa8 --- /dev/null +++ b/css/leaflet.css @@ -0,0 +1,778 @@ + + +/* required styles */ + +.leaflet-pane, +.leaflet-tile, +.leaflet-marker-icon, +.leaflet-marker-shadow, +.leaflet-tile-container, +.leaflet-pane>svg, +.leaflet-pane>canvas, +.leaflet-zoom-box, +.leaflet-image-layer, +.leaflet-layer { + position: absolute; + left: 0; + top: 0; +} + +.leaflet-container { + overflow: hidden; +} + +.leaflet-tile, +.leaflet-marker-icon, +.leaflet-marker-shadow { + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; + -webkit-user-drag: none; +} + + +/* Prevents IE11 from highlighting tiles in blue */ + +.leaflet-tile::selection { + background: transparent; +} + + +/* Safari renders non-retina tile on retina better with this, but Chrome is worse */ + +.leaflet-safari .leaflet-tile { + image-rendering: -webkit-optimize-contrast; +} + + +/* hack that prevents hw layers "stretching" when loading new tiles */ + +.leaflet-safari .leaflet-tile-container { + width: 1600px; + height: 1600px; + -webkit-transform-origin: 0 0; +} + +.leaflet-marker-icon, +.leaflet-marker-shadow { + display: block; +} + + +/* .leaflet-container svg: reset svg max-width decleration shipped in Joomla! (joomla.org) 3.x */ + + +/* .leaflet-container img: map is broken in FF if you have max-width: 100% on tiles */ + +.leaflet-container .leaflet-overlay-pane svg, +.leaflet-container .leaflet-marker-pane img, +.leaflet-container .leaflet-shadow-pane img, +.leaflet-container .leaflet-tile-pane img, +.leaflet-container img.leaflet-image-layer, +.leaflet-container .leaflet-tile { + max-width: none !important; + max-height: none !important; +} + +.leaflet-container.leaflet-touch-zoom { + -ms-touch-action: pan-x pan-y; + touch-action: pan-x pan-y; +} + +.leaflet-container.leaflet-touch-drag { + -ms-touch-action: pinch-zoom; + /* Fallback for FF which doesn't support pinch-zoom */ + touch-action: none; + touch-action: pinch-zoom; +} + +.leaflet-container.leaflet-touch-drag.leaflet-touch-zoom { + -ms-touch-action: none; + touch-action: none; +} + +.leaflet-container { + -webkit-tap-highlight-color: transparent; +} + +.leaflet-container a { + -webkit-tap-highlight-color: rgba(51, 181, 229, 0.4); +} + +.leaflet-tile { + filter: inherit; + visibility: hidden; +} + +.leaflet-tile-loaded { + visibility: inherit; +} + +.leaflet-zoom-box { + width: 0; + height: 0; + -moz-box-sizing: border-box; + box-sizing: border-box; + z-index: 800; +} + + +/* workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=888319 */ + +.leaflet-overlay-pane svg { + -moz-user-select: none; +} + +.leaflet-pane { + z-index: 400; +} + +.leaflet-tile-pane { + z-index: 200; +} + +.leaflet-overlay-pane { + z-index: 400; +} + +.leaflet-shadow-pane { + z-index: 500; +} + +.leaflet-marker-pane { + z-index: 600; +} + +.leaflet-tooltip-pane { + z-index: 650; +} + +.leaflet-popup-pane { + z-index: 700; +} + +.leaflet-map-pane canvas { + z-index: 100; +} + +.leaflet-map-pane svg { + z-index: 200; +} + +.leaflet-vml-shape { + width: 1px; + height: 1px; +} + +.lvml { + behavior: url(#default#VML); + display: inline-block; + position: absolute; +} + + +/* control positioning */ + +.leaflet-control { + position: relative; + z-index: 800; + pointer-events: visiblePainted; + /* IE 9-10 doesn't have auto */ + pointer-events: auto; +} + +.leaflet-top, +.leaflet-bottom { + position: absolute; + z-index: 1000; + pointer-events: none; +} + +.leaflet-top { + top: 0; +} + +.leaflet-right { + right: 0; +} + +.leaflet-bottom { + bottom: 0; +} + +.leaflet-left { + left: 0; +} + +.leaflet-control { + float: left; + clear: both; +} + +.leaflet-right .leaflet-control { + float: right; +} + +.leaflet-top .leaflet-control { + margin-top: 10px; +} + +.leaflet-bottom .leaflet-control { + margin-bottom: 10px; +} + +.leaflet-left .leaflet-control { + margin-left: 10px; +} + +.leaflet-right .leaflet-control { + margin-right: 10px; +} + + +/* zoom and fade animations */ + +.leaflet-fade-anim .leaflet-tile { + will-change: opacity; +} + +.leaflet-fade-anim .leaflet-popup { + opacity: 0; + -webkit-transition: opacity 0.2s linear; + -moz-transition: opacity 0.2s linear; + transition: opacity 0.2s linear; +} + +.leaflet-fade-anim .leaflet-map-pane .leaflet-popup { + opacity: 1; +} + +.leaflet-zoom-animated { + -webkit-transform-origin: 0 0; + -ms-transform-origin: 0 0; + transform-origin: 0 0; +} + +.leaflet-zoom-anim .leaflet-zoom-animated { + will-change: transform; +} + +.leaflet-zoom-anim .leaflet-zoom-animated { + -webkit-transition: -webkit-transform 0.25s cubic-bezier(0, 0, 0.25, 1); + -moz-transition: -moz-transform 0.25s cubic-bezier(0, 0, 0.25, 1); + transition: transform 0.25s cubic-bezier(0, 0, 0.25, 1); +} + +.leaflet-zoom-anim .leaflet-tile, +.leaflet-pan-anim .leaflet-tile { + -webkit-transition: none; + -moz-transition: none; + transition: none; +} + +.leaflet-zoom-anim .leaflet-zoom-hide { + visibility: hidden; +} + + +/* cursors */ + +.leaflet-interactive { + cursor: pointer; +} + +.leaflet-grab { + cursor: -webkit-grab; + cursor: -moz-grab; + cursor: grab; +} + +.leaflet-crosshair, +.leaflet-crosshair .leaflet-interactive { + cursor: crosshair; +} + +.leaflet-popup-pane, +.leaflet-control { + cursor: auto; +} + +.leaflet-dragging .leaflet-grab, +.leaflet-dragging .leaflet-grab .leaflet-interactive, +.leaflet-dragging .leaflet-marker-draggable { + cursor: move; + cursor: -webkit-grabbing; + cursor: -moz-grabbing; + cursor: grabbing; +} + + +/* marker & overlays interactivity */ + +.leaflet-marker-icon, +.leaflet-marker-shadow, +.leaflet-image-layer, +.leaflet-pane>svg path, +.leaflet-tile-container { + pointer-events: none; +} + +.leaflet-marker-icon.leaflet-interactive, +.leaflet-image-layer.leaflet-interactive, +.leaflet-pane>svg path.leaflet-interactive, +svg.leaflet-image-layer.leaflet-interactive path { + pointer-events: visiblePainted; + /* IE 9-10 doesn't have auto */ + pointer-events: auto; +} + + +/* visual tweaks */ + +.leaflet-container { + background: #ddd; + outline: 0; +} + +.leaflet-container a { + color: #0078A8; +} + +.leaflet-container a.leaflet-active { + outline: 2px solid orange; +} + +.leaflet-zoom-box { + border: 2px dotted #38f; + background: rgba(255, 255, 255, 0.5); +} + + +/* general typography */ + +.leaflet-container { + font: 12px/1.5 "Helvetica Neue", Arial, Helvetica, sans-serif; +} + + +/* general toolbar styles */ + +.leaflet-bar { + box-shadow: 0 1px 5px rgba(0, 0, 0, 0.65); + border-radius: 4px; +} + +.leaflet-bar a, +.leaflet-bar a:hover { + background-color: #fff; + border-bottom: 1px solid #ccc; + width: 26px; + height: 26px; + line-height: 26px; + display: block; + text-align: center; + text-decoration: none; + color: black; +} + +.leaflet-bar a, +.leaflet-control-layers-toggle { + background-position: 50% 50%; + background-repeat: no-repeat; + display: block; +} + +.leaflet-bar a:hover { + background-color: #f4f4f4; +} + +.leaflet-bar a:first-child { + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} + +.leaflet-bar a:last-child { + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + border-bottom: none; +} + +.leaflet-bar a.leaflet-disabled { + cursor: default; + background-color: #f4f4f4; + color: #bbb; +} + +.leaflet-touch .leaflet-bar a { + width: 30px; + height: 30px; + line-height: 30px; +} + +.leaflet-touch .leaflet-bar a:first-child { + border-top-left-radius: 2px; + border-top-right-radius: 2px; +} + +.leaflet-touch .leaflet-bar a:last-child { + border-bottom-left-radius: 2px; + border-bottom-right-radius: 2px; +} + + +/* zoom control */ + +.leaflet-control-zoom-in, +.leaflet-control-zoom-out { + font: bold 18px 'Lucida Console', Monaco, monospace; + text-indent: 1px; +} + +.leaflet-touch .leaflet-control-zoom-in, +.leaflet-touch .leaflet-control-zoom-out { + font-size: 22px; +} + + +/* layers control */ + +.leaflet-control-layers { + box-shadow: 0 1px 5px rgba(0, 0, 0, 0.4); + background: #fff; + border-radius: 5px; +} + +.leaflet-control-layers-toggle { + background-image: url(images/layers.png); + width: 36px; + height: 36px; +} + +.leaflet-retina .leaflet-control-layers-toggle { + background-image: url(images/layers-2x.png); + background-size: 26px 26px; +} + +.leaflet-touch .leaflet-control-layers-toggle { + width: 44px; + height: 44px; +} + +.leaflet-control-layers .leaflet-control-layers-list, +.leaflet-control-layers-expanded .leaflet-control-layers-toggle { + display: none; +} + +.leaflet-control-layers-expanded .leaflet-control-layers-list { + display: block; + position: relative; +} + +.leaflet-control-layers-expanded { + padding: 6px 10px 6px 6px; + color: #333; + background: #fff; +} + +.leaflet-control-layers-scrollbar { + overflow-y: scroll; + overflow-x: hidden; + padding-right: 5px; +} + +.leaflet-control-layers-selector { + margin-top: 2px; + position: relative; + top: 1px; +} + +.leaflet-control-layers label { + display: block; +} + +.leaflet-control-layers-separator { + height: 0; + border-top: 1px solid #ddd; + margin: 5px -10px 5px -6px; +} + + +/* Default icon URLs */ + +.leaflet-default-icon-path { + background-image: url(images/marker-icon.png); +} + + +/* attribution and scale controls */ + +.leaflet-container .leaflet-control-attribution { + background: #fff; + background: rgba(255, 255, 255, 0.7); + margin: 0; +} + +.leaflet-control-attribution, +.leaflet-control-scale-line { + padding: 0 5px; + color: #333; +} + +.leaflet-control-attribution a { + text-decoration: none; +} + +.leaflet-control-attribution a:hover { + text-decoration: underline; +} + +.leaflet-container .leaflet-control-attribution, +.leaflet-container .leaflet-control-scale { + font-size: 11px; +} + +.leaflet-left .leaflet-control-scale { + margin-left: 5px; +} + +.leaflet-bottom .leaflet-control-scale { + margin-bottom: 5px; +} + +.leaflet-control-scale-line { + border: 2px solid #777; + border-top: none; + line-height: 1.1; + padding: 2px 5px 1px; + font-size: 11px; + white-space: nowrap; + overflow: hidden; + -moz-box-sizing: border-box; + box-sizing: border-box; + background: #fff; + background: rgba(255, 255, 255, 0.5); +} + +.leaflet-control-scale-line:not(:first-child) { + border-top: 2px solid #777; + border-bottom: none; + margin-top: -2px; +} + +.leaflet-control-scale-line:not(:first-child):not(:last-child) { + border-bottom: 2px solid #777; +} + +.leaflet-touch .leaflet-control-attribution, +.leaflet-touch .leaflet-control-layers, +.leaflet-touch .leaflet-bar { + box-shadow: none; +} + +.leaflet-touch .leaflet-control-layers, +.leaflet-touch .leaflet-bar { + border: 2px solid rgba(0, 0, 0, 0.2); + background-clip: padding-box; +} + + +/* popup */ + +.leaflet-popup { + position: absolute; + text-align: center; + margin-bottom: 20px; +} + +.leaflet-popup-content-wrapper { + padding: 1px; + text-align: left; + border-radius: 12px; +} + +.leaflet-popup-content { + margin: 13px 19px; + line-height: 1.4; +} + +.leaflet-popup-content p { + margin: 18px 0; +} + +.leaflet-popup-tip-container { + width: 40px; + height: 20px; + position: absolute; + left: 50%; + margin-left: -20px; + overflow: hidden; + pointer-events: none; +} + +.leaflet-popup-tip { + width: 17px; + height: 17px; + padding: 1px; + margin: -10px auto 0; + -webkit-transform: rotate(45deg); + -moz-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); +} + +.leaflet-popup-content-wrapper, +.leaflet-popup-tip { + background: white; + color: #333; + box-shadow: 0 3px 14px rgba(0, 0, 0, 0.4); +} + +.leaflet-container a.leaflet-popup-close-button { + position: absolute; + top: 0; + right: 0; + padding: 4px 4px 0 0; + border: none; + text-align: center; + width: 18px; + height: 14px; + font: 16px/14px Tahoma, Verdana, sans-serif; + color: #c3c3c3; + text-decoration: none; + font-weight: bold; + background: transparent; +} + +.leaflet-container a.leaflet-popup-close-button:hover { + color: #999; +} + +.leaflet-popup-scrolled { + overflow: auto; + border-bottom: 1px solid #ddd; + border-top: 1px solid #ddd; +} + +.leaflet-oldie .leaflet-popup-content-wrapper { + zoom: 1; +} + +.leaflet-oldie .leaflet-popup-tip { + width: 24px; + margin: 0 auto; + -ms-filter: "progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)"; + filter: progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678); +} + +.leaflet-oldie .leaflet-popup-tip-container { + margin-top: -1px; +} + +.leaflet-oldie .leaflet-control-zoom, +.leaflet-oldie .leaflet-control-layers, +.leaflet-oldie .leaflet-popup-content-wrapper, +.leaflet-oldie .leaflet-popup-tip { + border: 1px solid #999; +} + + +/* div icon */ + +.leaflet-div-icon { + background: #fff; + border: 1px solid #666; +} + + +/* Tooltip */ + + +/* Base styles for the element that has a tooltip */ + +.leaflet-tooltip { + position: absolute; + padding: 6px; + background-color: #fff; + border: 1px solid #fff; + border-radius: 3px; + color: #222; + white-space: nowrap; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + pointer-events: none; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4); +} + +.leaflet-tooltip.leaflet-clickable { + cursor: pointer; + pointer-events: auto; +} + +.leaflet-tooltip-top:before, +.leaflet-tooltip-bottom:before, +.leaflet-tooltip-left:before, +.leaflet-tooltip-right:before { + position: absolute; + pointer-events: none; + border: 6px solid transparent; + background: transparent; + content: ""; +} + + +/* Directions */ + +.leaflet-tooltip-bottom { + margin-top: 6px; +} + +.leaflet-tooltip-top { + margin-top: -6px; +} + +.leaflet-tooltip-bottom:before, +.leaflet-tooltip-top:before { + left: 50%; + margin-left: -6px; +} + +.leaflet-tooltip-top:before { + bottom: 0; + margin-bottom: -12px; + border-top-color: #fff; +} + +.leaflet-tooltip-bottom:before { + top: 0; + margin-top: -12px; + margin-left: -6px; + border-bottom-color: #fff; +} + +.leaflet-tooltip-left { + margin-left: -6px; +} + +.leaflet-tooltip-right { + margin-left: 6px; +} + +.leaflet-tooltip-left:before, +.leaflet-tooltip-right:before { + top: 50%; + margin-top: -6px; +} + +.leaflet-tooltip-left:before { + right: 0; + margin-right: -12px; + border-left-color: #fff; +} + +.leaflet-tooltip-right:before { + left: 0; + margin-left: -12px; + border-right-color: #fff; +} diff --git a/css/style.css b/css/style.css new file mode 100644 index 0000000..408651b --- /dev/null +++ b/css/style.css @@ -0,0 +1,292 @@ + + +@import "leaflet.css"; +* { + box-sizing: border-box; + padding: 0; + margin: 0; + font-family: "Cantarell"; +} + +a { + color: inherit; + text-decoration: none; +} + +input { + height: 40px; + border: solid; + border-style: dashed; + border-width: 1px; + border-color: #EAEAEA; + width: 90vw; + text-align: center; + margin: auto; + display: block; +} + +.item-info { + display: none; +} + +#main { + display: grid; + grid-template-rows: 30vh 70vh; + grid-template-areas: "map" "detail"; + grid-gap: 0px; +} + +#detail { + grid-area: detail; +} + +#container { + display: grid; + grid-gap: 0px; + grid-template-rows: 10vh 10vh 50vh; + grid-template-areas: "header" "subheader" "content"; +} + +#header { + grid-area: header; + padding: 10px; +} + +#name { + padding: 0px; + margin: 0px; + font-weight: bold; + text-align: center; +} + +#description { + padding: 35px; + text-align: justify; +} + + +/* Categories */ + +#subheader { + grid-area: subheader; +} + +.flex { + width: 90vw; + display: flex; + margin: auto; + align-items: center; + overflow-x: auto; +} + +.flex>* { + margin: 5px; + padding: 5px; +} + +#categories { + margin: auto; +} + +#categories>button { + border: solid; + width: 100%; + border-width: 1px; + border-radius: 5px; + border-color: #EAEAEA; + background-color: white; + max-height: 30px; + white-space: nowrap; +} + +#categories>li:hover { + box-shadow: rgba(0, 0, 0, 0.12) 0px 0px 12px; +} + +#contact { + justify-content: center; +} + + +/* Items */ + +#content { + grid-area: content; + overflow-y: auto; +} + +#list>button { + width: 90vw; + margin-left: auto; + margin-right: auto; + text-align: left; +} + +#list>button>div { + margin-top: auto; + margin-bottom: auto; +} + +.item { + display: flex; + padding: 10px; + margin: 10px; + text-align: left; + font-size:16px; +} + +button { + background-color: white; + border: solid; + border-width: 1px; + border-radius: 5px; + border-color: #EAEAEA; +} + +button:hover { + box-shadow: rgba(0, 0, 0, 0.12) 0px 0px 12px; +} + +button.selected { + border-color: #666 !important; + background-color: #666 !important; + color: white; +} + + +/* Leaflet */ + +.leaflet-popup { + top: -102px; +} + + +/* Icons */ + +#action { + position: absolute; + top: calc(30vh - 30px); + right: 10px; + width: 64px; + height: 64px; + border-radius: 50px; + z-index: 1000; + background-repeat: no-repeat; +} + +.geo { + background: url(../images/icon-gps.svg); +} + +.suggestion { + background: url(../images/icon-suggestion.svg); +} + +.icon { + display: block; + height: 40px; + width: 40px; + margin: 5px; + background-repeat: no-repeat; +} + +.icon-care { + background: url(../images/icon-care.svg); + background-repeat: no-repeat; +} + +.icon-gps { + background-image: url(../images/icon-gps.svg); +} + +.icon-phone { + background-image: url(../images/icon-phone.svg); +} + +.icon-facebook { + background-image: url(../images/icon-facebook.svg); +} + +.icon-mail { + background-image: url(../images/icon-mail.svg); +} + +.icon-close { + border-style: none; + background-image: url(../images/icon-back.svg); +} + +.icon-close:hover { + border-style: none; +} + + +/* Scrollbar */ + + ::-webkit-scrollbar { + width: 5px; + height: 5px; +} + + ::-webkit-scrollbar-track { + box-shadow: inset 0 0 5px #C4C4C4; + border-radius: 2px; +} + + ::-webkit-scrollbar-thumb { + background: dimgrey; + border-radius: 10px; +} + + ::-webkit-scrollbar-thumb:hover { + background: #B5B5B5; +} + +@media ( max-height: 500px) { + #main { + grid-template-rows: 0vh 100vh; + } + #action { + display: none; + } + #container { + grid-template-rows: 30vh 0vh 70vh; + } + #categories, + #contact { + display: none; + } +} + +@media (min-width: 850px) { + #main { + grid-template-columns: 30vw 70vw; + grid-template-areas: "detail" "map"; + } + #container { + grid-template-rows: 10vh 10vh 80vh; + grid-template-areas: "header" "subheader" "content"; + } + #content, + #subheader, + #header { + width: 30vw; + } + input { + width: 25vw; + } + #list>button { + width: 25vw; + } + .flex { + width: 25vw; + } + #action { + top: 90px; + left: calc(30vw - 30px); + } + #map { + height: 100vh; + } +} + diff --git a/index.html b/index.html new file mode 100644 index 0000000..b7a0f94 --- /dev/null +++ b/index.html @@ -0,0 +1,60 @@ + + + + + My Map + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+ +
+
+
+
+
+
+
+
+
+
+

+
+
+
+
+ + + + + + + \ No newline at end of file diff --git a/js/core.js b/js/core.js new file mode 100644 index 0000000..46fc84b --- /dev/null +++ b/js/core.js @@ -0,0 +1,147 @@ + + +//Update url //Rester au même endroit de la liste après clic const +searchInput = document.getElementById("search"); +var refreshCategories = true; +var currentCategory = null; +var regexValue = '.*'; +var searchedFeatures; +searchInput.addEventListener('input', function (evt) { + display(this.value); +}); + +function categoryFilter(categorie) { + if (currentCategory === categorie) { + document.getElementById(currentCategory).classList.remove('selected'); + currentCategory = null; + display(searchInput.value); + } else if (currentCategory != null) { + document.getElementById(currentCategory).classList.remove('selected'); + document.getElementById(categorie).classList.add('selected'); + currentCategory = categorie; + display(searchInput.value); + } else { + document.getElementById(categorie).classList.add('selected'); + currentCategory = categorie; + display(searchInput.value); + } +} + +function display(value) { + regexValue = '.*' + value + '.*'; + searchedFeatures = data.features.filter(function (feature) { + const regex = new RegExp(regexValue, 'gi'); + if (currentCategory === null) { + return feature.properties.name.match(regex); + } else { + return feature.properties.name.match(regex) && feature.properties.category.match(currentCategory); + } + }); + var categories = []; + var categoriesLink = ''; + var locationLink = ''; + searchedFeatures.forEach(function (element) { + if (refreshCategories) { + var category = element.properties.category; + if (!categories.includes(category)) { + categories.push(category); + categoriesLink += ``; + } + } + var long = element.geometry.coordinates[0]; + var lat = element.geometry.coordinates[1]; + locationLink += ``; + }); + document.getElementById('list').innerHTML = locationLink; + if (refreshCategories) { + document.getElementById('categories').innerHTML = categoriesLink; + } + refreshCategories = false; +} + +function focusOnLocation(lat, long) { + document.getElementById("action").classList.remove('suggestion'); + document.getElementById("action").classList.add('geo'); + var infoElements = document.getElementsByClassName('item-info'); + Array.prototype.forEach.call(infoElements, function (infoElement) { + infoElement.style.display = "block"; + }); + var mapElements = document.getElementsByClassName('map-info'); + Array.prototype.forEach.call(mapElements, function (mapElement) { + mapElement.style.display = "none"; + }); + searchedFeatures.forEach(function (element) { + var currentLong = element.geometry.coordinates[0]; + var currentLat = element.geometry.coordinates[1]; + if (currentLat == lat && currentLong == long) { + map.setView([lat, long], 17); + document.getElementById('name').innerHTML = element.properties.name; + document.getElementById('description').innerHTML = element.properties.description; + document.getElementById('action').href = `geo:${lat},${long}`; + document.getElementById('contact').innerHTML = ""; + var contactContent = ''; + var webValue = element.properties.website; + if (webValue !== undefined) { + var web = ``; + contactContent += web; + } + var phoneValue = element.properties.phone; + if (phoneValue !== undefined) { //TODO : Don't show if undefined + var phone = ``; + contactContent += phone; + } + var mailValue = element.properties.mail; + if (phoneValue !== undefined) { + var mail = ``; + contactContent += mail; + } + var facebookValue = element.properties.mail; + if (facebookValue !== undefined) { + var facebook = ``; + contactContent += facebook; + } + document.getElementById('contact').innerHTML += contactContent; + var popup = L.popup().setLatLng(new L.LatLng(lat, long)).setContent(element.properties.name).openOn(map); + } + }); +} + +function closeDetail() { + document.getElementById("action").classList.remove('geo'); + document.getElementById("action").classList.add('suggestion'); + var infoElements = document.getElementsByClassName('item-info'); + Array.prototype.forEach.call(infoElements, function (infoElement) { + infoElement.style.display = "none"; + }); + var mapElements = document.getElementsByClassName('map-info'); + Array.prototype.forEach.call(mapElements, function (mapElement) { + mapElement.style.display = "block"; + }); +} +display(''); /** Leaflet **/ +function whenClicked(e) { + var lat = e.latlng.lat; + var long = e.latlng.lng; + focusOnLocation(lat, long); +} + +function onEachFeature(feature, layer) { + layer.on({ + click: whenClicked + }); +} + +function searchFilter(feature) { + return feature.properties.name.match(regexValue); +} +var map = L.map('map').setView([47.16801, 5.174217], 11); +map.zoomControl.setPosition('topright'); +map.attributionControl.setPosition('bottomleft'); +L.tileLayer('https://cartodb-basemaps-{s}.global.ssl.fastly.net/rastertiles/voyager/{z}/{x}/{y}.png', { + id: 'mapbox.light' +}).addTo(map); //TODO : Refresh when filter +L.geoJson(searchedFeatures, { + filter: searchFilter, + onEachFeature: onEachFeature +}).addTo(map); + diff --git a/js/data.geojson b/js/data.geojson new file mode 100644 index 0000000..42f2e26 --- /dev/null +++ b/js/data.geojson @@ -0,0 +1,2574 @@ +var data = +{ + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "properties": { + "name": "Alternatives Agri-culturelles", + "category": "Écolieu", + "description": "Se nourrir. Se cultiver. Créer ensemble un monde plus soutenable, plus juste, plus convivial. Relier l’agriculture, l’alimentation et la société. Changer nos rapports à la terre. Construire des alternatives agri-culturelles. Mettons nos envies en culture !", + "website": "http://alternatives-agriculturelles.fr/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.808627, + 47.327025 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Alternatives economiques", + "category": "Média", + "description": "Alternatives économiques est un magazine mensuel traitant de questions économiques et sociales. Ses auteurs, outre les journalistes de la rédaction, sont des universitaires proches des théories économiques.", + "website": "http://www.alternatives-economiques.fr/" + + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.093021, + 47.311449 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Arborescence", + "category": "Éducation & formation", + "description": "Association de mise en valeur du patrimoine naturel par des actions de sensibilisation, de communication et de recherche.", + "website": "http://www.asso-arborescence.fr/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.044307, + 47.342676 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Black Market", + "category": "Loisirs", + "description": "Bar, disquaire, libraire associatif et militant", + "website": "https://blackmarketdijon.com/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.034997, + 47.317718 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Botanic", + "category": "Habitat", + "description": "Botanic est un réseau de jardineries spécialistes du jardinage écologique.", + "website": "https://www.botanic.com/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.094566, + 47.312766 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Bourgogne Energie", + "category": "Énergie", + "description": "Association qui vius accompagne dans la réalisation de vos projets éco-responsables ", + "website": "http://www.ber.asso.fr/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.05693, + 47.326927 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Caf & Co", + "chapo": "Bars & Cafés", + "category": "Loisirs", + "description": "Le caf&co est un café associatif géré par des bénévoles qui ont à coeur de promouvoir le commerce équitable, la solidarité, le lien social et le développement durable.", + "website": "http://www.cafandco.com/fr/", + "facebook": "https://fr-fr.facebook.com/Cafandco/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.045165, + 47.325136 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Cinéma Eldorado", + "category": "Loisirs", + "description": "Cinéma indépendant", + "website": "https://cinemaeldorado.wordpress.com/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.048808, + 47.314417 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Base de loisirs et jardin de Corcelles-les-Monts", + "category": "Éducation & formation", + "description": "La micro-ferme urbaine du Cercle Laïque Dijonnais, est un lieu vivant et ludique de rencontres, de pratiques, de culture et d’idées sur l’éducation à l’écologie et au développement durable. ", + "website": "http://www.cerclelaique.org/nos-locaux/corcelles-les-monts/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.941096, + 47.299031 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Ecole à la croisée des chemins", + "category": "Éducation & formation", + "description": "Ecole démocratique", + "website": "http://ecoledelacroiseedeschemins.fr/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.04453, + 47.350512 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Ecole apprendre, grandir et devenir", + "category": "Éducation & formation", + "description": "Une école appliquant la pédagogie de Maria Montessori ", + "website": "http://montessori-dijon.fr/", + "facebook": "https://www.facebook.com/Ecole-Montessori-Dijon-Apprendre-Grandir-et-Devenir-757666627632697/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.051394, + 47.365346 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Ecole Montessori du Morvan", + "category": "Éducation & formation", + "description": "L'école accueille les enfants du cycle 1 au cycle 3 dans une structure à effectifs réduits", + "website": "http://montessorimorvan.wixsite.com/ecole" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.294989, + 47.144241 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Ecole Montessori Verne", + "category": "Éducation & formation", + "description": "Cet établissement acceuille des enfants de 3 à 9 ans.", + "website": "https://pedagogieverne.wixsite.com/notre-ecole" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.400259, + 47.402503 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Ecoline", + "category": "Éducation & formation", + "description": "Une ecole inspirée par l’approche de Reggio Emilia.", + "website": "https://lecoline.ch/", + "facebook": "https://www.facebook.com/Lecoline", + "instagram": "http://instagram.com/l.ecoline" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.040421, + 47.32674 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Ferme de la Gauloise", + "chapo": "Ferme familliale", + "category": "Alimentation", + "description": "Une exploitation familiale qui propose des farines, des huiles et des légumineusess bio", + "website": "http://ferme-la-gauloise.e-monsite.com/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.332784, + 47.595311 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Ferme du Charmoi", + "chapo": "Ferme coopérative", + "category": "Alimentation", + "description": "Une coopérative qui a pour but de réunir des publics différents autour d’une agriculture durable et de participer au développement local", + "website": "http://charmoi.over-blog.com/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.7085, + 47.569056 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Fruimalin", + "category": "Alimentation", + "description": "Association de récupération de fruits et de lutte contre le gaspillage alimentaire", + "website": "http://relais-planete-solidaire.org/index.html", + "facebook": "https://www.facebook.com/fruimalin/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.022157, + 47.328825 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Graines de noé", + "chapo": "Semences", + "category": "Jardinage", + "description": "Une une association qui sauvegarde plus de 200 variétés de céréales anciennes et paysannes.", + "website": "http://www.graines-de-noe.org/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.268545, + 47.560832 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "ICO Imprimerie", + "category": "Réparation & Création", + "description": "Une imprimerie détentrice du label Imprim'Vert", + "website": "http://www.icoimprimeriedijon.com/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.032913, + 47.316228 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Incroyables commestibles", + "chapo": "Jardins partagés", + "category": "Jardinage", + "description": "Association de mise à disposition gratuite, dans de petits potagers disséminés dans les villes et les campagnes, de légumes cultivés par les volontaires participant au mouvement.", + "facebook": "https://www.facebook.com/ICDijonMetropole" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.032645, + 47.316388 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Jardin partagé de la vapeur", + "chapo": "Jardins partagés", + "category": "Jardinage", + "description": "Un jardin partagé est géré en commun par un groupe d’habitants. ", + "website": "http://www.lavapeur.com/jardin-partage/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.060116, + 47.345627 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Jardin partagé de Castelnau", + "chapo": "Jardins partagés", + "category": "Jardinage", + "description": "Un jardin partagé est géré en commun par un groupe d’habitants.", + "website": "https://zutique.com/fr/actions/les-jardins-partages-de-castelnau" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.065966, + 47.331241 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "La ferme de chaux", + "category": "Écolieu", + "description": "Eco-hameau chrétien, participatif et festif ou habite un collectif de familles et d'amis dans une démarche de simplicité volontaire et d'autonomie qui pratique l'hospitalité,une agriculture naturelle et une économie alternative", + "website": "http://www.goshen.fr/", + "facebook": "https://fr-fr.facebook.com/fermedelachaux" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.670219, + 47.21916 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "La graine et le potager", + "chapo": "Semences", + "category": "Jardinage", + "description": "Association défence de la reproduction de semences potagères", + "website": "http://www.lagraineetlepotager.fr/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.909397, + 47.037696 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "La Maison Hirondelle", + "category": "Alimentation", + "description": "Boutique associative où se mêlent épicerie du terroir et expositions.", + "website": "http://www.la-maison-hirondelle.com/index.php", + "facebook": "https://www.facebook.com/lamaisonhirondelle/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.03638, + 47.542093 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Laboratoire d'Analyses Microbiologiques des Sols", + "category": "Éducation & formation", + "description": "Le LAMS est un laboratoire d'analyse de sol spécialisé dans l'étude écologique de profil cultural pour restaurer la biodiversité des sols de terroir afin d'améliorer la qualité et la typicité des vins et des denrées agricoles. ", + "website": "http://www.lams-21.com/artc/1/fr/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.083081, + 47.600007 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Latitude 21", + "category": "Éducation & formation", + "description": "Un établissement public de médiation et d'éducation sur l'environnement", + "website": "http://www.latitude21.fr/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.062337, + 47.325378 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Le fournil de l'auxois", + "chapo": "Boulangerie", + "category": "Alimentation", + "description": "Produit des pains au levain sauvage sous la mention Nature & Progrès", + "website": "http://fournil-auxois.blogspot.fr", + "facebook": "https://fr-fr.facebook.com/fournil.auxois/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.540792, + 47.268565 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Le tache papier", + "category": "Réparation & Création", + "description": "Un lieu d'échange et de partage artistique et culturel, intergénérationnel. L’atelier est un lieu dédié à l’art, l’impression (sérigraphie), l’illustration, le graphisme, et l’édition. C’est un espace de travail collectif et associatif, une galerie d’art et un lieu de formation.", + "website": "http://letachepapier.fr/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.029069, + 47.325229 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Les tanneries", + "chapo": "Expace autogéré", + "category": "Écolieu", + "description": "L'espace autogéré des Tanneries est un centre social, culturel et politique", + "website": "https://tanneries.squat.net/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.022951, + 47.301912 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Maison des Arts Textiles & du Design", + "category": "Habitat", + "description": "Dans l'esprit Arts & Crafts, avec Bibliothèque, atelier de teintures naturelles, chambres d'hôtes et jardin, ce Musée du Patrimoine rural et centre de recherche créé par Algranate à Flavigny en 1970, allie innovation et savoir-faire ancestral.", + "facebook": "https://fr-fr.facebook.com/Flavigny.Algranate" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.529897, + 47.512469 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Pirouette Cacahuette", + "category": "Éducation & formation", + "description": "Pirouette Cacahuète conçoit des outils pédagogiques sur le thème de la biodiversité, du jardin, de la ville, de la mobilité.", + "website": "http://www.pirouette-cacahuete.net/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.01123, + 47.298427 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Quartier Libre des lentières", + "category": "Écolieu", + "description": "Le quartier libre des Lentillères est né d’une manifestation fourche en main en 2010, à Dijon, à l’issue de laquelle une centaine de personnes a défriché puis cultivé des terres de qualité à l’abandon menacées par un projet immobilier. Depuis le quartier à vue naitre une ferme maraîchère, des jardins individuels, un potager collectif et des habitats en auto-construction...", + "website": "https://lentilleres.potager.org/", + "facebook": "https://www.facebook.com/quartierdeslentilleres/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.055825, + 47.303389 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Radio Bresse", + "category": "Média", + "description": "Radio Bresse est une station de radio associative non commerciale généraliste de catégorie A, située en Saône-et-Loire", + "website": "http://www.radiobresse.com/", + "wikipedia": "https://fr.wikipedia.org/wiki/Radio_Bresse" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.180102, + 46.643125 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Rezo'Fêt'Art", + "category": "Loisirs", + "description": "Rézo’Fêt’Art génère du lien social dans un cadre multiculturel et intergénérationnel, par le biais d’activités créatives et récréatives.", + "facebook": "https://www.facebook.com/Rezofetart/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.014905, + 47.317821 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "TransMoutardeExpress", + "category": "Transport", + "description": "une entreprise de coursiers à vélo en proposant une alternative à la livraison motorisée de plis et colis en ville.", + "website": "http://www.tme.bike/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.039511, + 47.308985 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "USB dead drop", + "category": "Loisirs", + "description": "Une Dead Drop est une clé USB fixée dans l'espace public permettant un partage de données (en l'occurrence un partage de fichiers) de manière anonyme et non connectée à un réseau informatique.", + "wikipedia": "https://fr.wikipedia.org/wiki/Dead_Drop" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.066382, + 47.31407 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Bio Demeure", + "category": "Habitat", + "description": "Bio-Demeure a pour vocation de rénover et d'embellir votre intérieur avec des matériaux naturels qui limitent la diffusion des C.O.V (composants organiques volatils) d'origine pétro-chimique.", + "website": "http://www.bio-demeure.fr/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.864722, + 47.311773 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Bourgogne Ecologie", + "category": "Habitat", + "phone": "+33380841787" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.498381, + 47.226039 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "L'arbre a l'étrier", + "category": "Habitat", + "description": "Fabriquant spécialisé dans la charpente: maison ossature, bois, charpente, escaliers, auvents, terrasses, pergolas, etc.", + "website": "http://www.larbrealetrier.fr/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.747467, + 47.237921 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Naturel21", + "category": "Habitat", + "description": "Naturel21 propose la vente de produits écologiques pour décorer ou rénover un habitat ainsi que de la location de matériel", + "website": "http://www.naturel21.com/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.458003, + 47.059657 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Divia", + "category": "Transport", + "description": "DiviaMobilités, ce sont toutes les solutions de mobilités de Dijon métropole : bus, tram, vélo et stationnement.", + "website": "http://www.mobigo-bourgogne.com/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.0318, + 47.323767 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Ensemble à Vélo dans l’Agglomération Dijonnaise", + "category": "Transport", + "description": "L’association Ensemble à Vélo dans l’Agglomération Dijonnaise (EVAD), membre de la FUB(Fédération française des Usagers de la Bicyclette), défend la cause du vélo dans l’agglomération dijonnaise.", + "website": "http://www.evad-dijon.fr/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.031588, + 47.315297 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "SNCF", + "category": "Transport", + "description": "Siege des TER", + "website": "http://www.mobigo-bourgogne.com/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.027398, + 47.323196 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "AD2N", + "category": "Réparation & Création", + "description": "Fablab de Beaune", + "facebook": "https://fr-fr.facebook.com/FabLabBeaune/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.838823, + 47.021491 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Atelier D'calés", + "category": "Réparation & Création", + "description": "L’Atelier D’calés fait partie des FabLabs de France (Laboratoire de fabrication). A l'atelier, il est possible de travailler le bois et le métal dans ainsi que l’aménagement de véhicules (isolation, transformation, etc).", + "facebook": "https://www.facebook.com/AtelierDcales" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.026433, + 47.355564 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Cric & Co", + "category": "Réparation & Création", + "description": "CRIC&CO permet de parler de mobilité, et son atelier de co-réparation permet l'entretien ou la réparation de son véhicule", + "facebook": "https://www.facebook.com/Cric-Co-614430985371620/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.01608, + 47.308761 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Espace Baudelaire", + "category": "Réparation & Création", + "description": "", + "website": "http://www.espacebaudelaire.fr/Fablab-panda.php" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.042564, + 47.350796 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Fablab de la Maison Phare", + "category": "Réparation & Création", + "description": "", + "website": "https://www.lamaisonphare.fr/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.00479, + 47.316758 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Fablab des vignes", + "category": "Réparation & Création", + "description": "", + "website": "http://fablab-vignes.org/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.818245, + 47.063165 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Kelle FabriK", + "category": "Réparation & Création", + "description": "Fablab associatif permettant la rencontre de personnes et la mise en œuvre de projets personnels ou professionnels, ayant en commun d’allier créativité et innovation.", + "website": "https://kellefabrik.wordpress.com/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.03161, + 47.315061 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "La bécane à Jules", + "category": "Réparation & Création", + "description": "Réparation et vente de vélos manufacturés à partir de vélos et de pièces issues du réemploi.", + "website": "http://www.labecaneajules.fr/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.029904, + 47.314006 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "La rustine", + "category": "Réparation & Création", + "description": "Atelier associatif de réparation de vélos", + "website": "http://larustine.org/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.037111, + 47.330592 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Lab'Aux", + "category": "Réparation & Création", + "description": "Fab Lab de l’Auxois", + "website": "https://www.labaux.org" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.335418, + 47.495176 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "LAB6", + "category": "Réparation & Création", + "description": "FabLab et Hackerspace exclusivement sous logiciels libres", + "website": "https://fablab.coagul.org/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.040375, + 47.323024 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Coagul", + "category": "Informatique", + "description": "Association des utilisateurs de logiciels libres", + "website": "http://coagul.org/drupal/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.113095, + 47.312293 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "EOLE", + "category": "Informatique", + "description": "Pôle EOLE éditeur de la solution Linux EOLE pour les établissements scolaires", + "website": "http://www.pcll.ac-dijon.fr" + + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.052547, + 47.33025 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "potager.org", + "category": "Informatique", + "description": "", + "website": "https://potager.org/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.062696, + 47.301414 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Pour une informatique libre", + "category": "Informatique", + "description": "Association des utilisateurs de logiciels libres, ", + "website": "http://www.pil-dijon.org" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.069673, + 47.329454 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "SCOP Cadoles", + "category": "Informatique", + "description": "Coopératives de services en informatique libre", + "website": "http://www.cadoles.com" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.029694, + 47.321071 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "TEMMI", + "category": "Informatique", + "description": "Vente de matériel sous Linux, de consommables d'informatique Conseils, services, maintenance en informatique.", + "website": "http://temmii.com/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.029976, + 47.3207 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Sellier Dijonnais", + "chapo": "Systèmes d'échanges", + "category": "Économie", + "description": "Le Sellier est une association fonctionnant en collégialité dont les membres échangent entre eux des biens, des services et des savoirs.", + "website": "http://dijon.communityforge.net/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.018424, + 47.312882 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Credit Coopératif", + "chapo": "Banque", + "category": "Économie", + "description": "Le Crédit coopératif est une banque coopérative française.", + "website": "https://www.credit-cooperatif.coop/agences/liste/region/bourgogne/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.046008, + 47.350818 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "1000 sapes", + "category": "Habillement", + "description": "", + "website": "http://www.sdat.asso.fr/millesapes.php" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.058324, + 47.328163 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "1000 sapes", + "category": "Habillement", + "description": "", + "website": "http://www.sdat.asso.fr/millesapes.php" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.995604, + 47.340393 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Chic & Choc", + "category": "Habillement", + "description": "", + "facebook": "https://fr-fr.facebook.com/Chic.Choc.Beaune/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.84018, + 47.021216 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Edy Troc", + "category": "Habillement", + "description": "", + "facebook": "https://www.facebook.com/edy.trocdijon" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.034496, + 47.31908 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Emmaus", + "category": "Habillement", + "description": "", + "website": "http://www.emmaus-dijon.org/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.076113, + 47.404486 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Emmaus", + "category": "Habillement", + "description": "", + "website": "http://www.emmaus-dijon.org/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.017419, + 47.284402 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Emmaus", + "category": "Habillement", + "description": "", + "website": "http://www.emmaus-dijon.org/spip.php?rubrique11" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.843772, + 47.01631 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Emmaus", + "category": "Habillement", + "description": "", + "website": "http://www.emmaus-dijon.org/spip.php?rubrique12" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.528615, + 47.12352 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Emmaus", + "category": "Habillement", + "description": "" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.353333, + 47.187846 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Emmaus", + "category": "Habillement", + "description": "", + "website": "https://www.emmaus-nievre.net/archives/47" + + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.14853, + 47.019413 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Envie", + "category": "Habitat", + "description": "", + "website": "http://www.envie-dijon.fr/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.017563, + 47.284223 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "F comme Femme", + "category": "Habillement", + "description": "", + "website": "http://dijoon.free.fr/commerce/ffemme/ffemme.htm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.027951, + 47.326276 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Frip'Onne", + "category": "Habillement", + "description": "", + "facebook": "https://fr-fr.facebook.com/FripOnne-500405453353395/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.04449, + 47.3234 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Friperie", + "category": "Habillement" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.043438, + 47.325903 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "La Recyclade", + "category": "Habitat", + "description": "", + "facebook": "https://www.facebook.com/La-recyclade-975600535851610/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.018553, + 47.306588 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Troc Habit", + "category": "Habillement" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.887902, + 47.066567 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Voyons VOIR", + "category": "Habillement", + "description": "", + "facebook": "https://www.facebook.com/pages/Voyons-VOIR" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.035971, + 47.32002 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Artisans du monde", + "chapo": "Commerce équitable", + "category": "Habitat", + "description": "", + "website": "http://dijon.artisansdumonde.org/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.039259, + 47.319678 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Artisans Du Monde", + "chapo": "Commerce équitable", + "category": "Habitat", + "description": "", + "website": "https://www.artisansdumonde.org/les-associations-locales/artisans-du-monde-nevers" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.163108, + 46.990586 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Coté bébé", + "category": "Habillement" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.03875, + 47.32396 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Ekyog", + "category": "Habillement", + "description": "", + "website": "https://www.ekyog.com/dijon.html" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.039568, + 47.321177 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Esquise Ethique", + "category": "Habillement", + "description": "", + "website": "http://www.exquise-ethique.com/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.03883, + 47.32456 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Badianne", + "category": "Cosmétique", + "description": "", + "website": "https://www.savonnaturelbadiane.com/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.49137, + 47.192731 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "GreenHouse", + "category": "Cosmétique", + "description": "", + "website": "https://greenhouseepinac.com/", + "facebook": "https://fr-fr.facebook.com/Greenhouse-Epinac-414241418712657/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.518314, + 46.990323 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Marisson", + "category": "Cosmétique", + "description": "", + "website": "http://marisson.fr/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.968234, + 47.230286 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Savonnerie Amoa", + "category": "Cosmétique", + "description": "", + "website": "http://marisson.fr/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.029056, + 46.963019 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Solsequia", + "category": "Cosmétique", + "description": "", + "website": "http://www.savonneriesolsequia.com/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.039307, + 47.320476 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Beauté Bio", + "category": "Cosmétique", + "description": "", + "website": "http://neochicbeaute.wixsite.com/biobeaute", + "facebook": "https://fr-fr.facebook.com/Neochicbeautebio/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.817955, + 47.063148 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "BioStudio", + "category": "Cosmétique", + "description": "BioStudio est un Institut de Beauté. Ses gérantes privilégient dans la mesure du possible et de leurs moyens des produits & matériaux, soucieux de l’environnement, de la santé de l’homme et quand cela est possible des produits issus du commerce équitable.", + "website": "http://biostudio.fr/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.054714, + 47.309554 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Forme et zen", + "category": "Cosmétique", + "description": "", + "website": "http://formeetzen.fr/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.033415, + 47.318629 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Racines naturelles", + "category": "Cosmétique", + "description": "", + "website": "http://www.racinesnaturelles.fr/home" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.026975, + 47.32821 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Epi'Sourire", + "category": "Alimentation", + "description": "", + "website": "http://www.episourire.fr/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.034691, + 47.314468 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "La bonne mesure", + "category": "Alimentation", + "description": "", + "website": "http://www.grocerystoresite.com/store/1707705862887940/La+Bonne+Mesure" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.005753, + 47.334111 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Vrac' & Bio", + "category": "Alimentation", + "description": "" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.163446, + 46.989493 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Agriself", + "category": "Alimentation", + "description": "", + "website": "http://www.agriself.fr/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.115681, + 47.242823 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Au Coin Bio", + "category": "Alimentation", + "description": "", + "facebook": "https://fr-fr.facebook.com/AuCoinBio/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.33364, + 47.489804 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Bio C Bon", + "category": "Alimentation", + "description": "http://www.bio-c-bon.eu/fr/nos_magasins/bio-c-bon-dijon", + "website": "http://www.bio-c-bon.eu/fr/nos_magasins/bio-c-bon-dijon" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.036011, + 47.322872 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Bio N'Etre", + "category": "Alimentation", + "facebook": "https://fr-fr.facebook.com/bio.netre" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.338559, + 47.624913 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Biocoop", + "category": "Alimentation", + "description": "Produits bio et en vrac.", + "website": "http://www.biocoop-nevers.fr/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.122256, + 46.994342 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Biocoop / Terre Bio", + "category": "Alimentation", + "description": "", + "website": "http://www.biocoop.fr/magasins-bio/Trouver-mon-magasin-Biocoop/Bourgogne-Franche-Comte/Cote-d-Or/TERRES-BIO" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.034764, + 47.357606 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Botanic", + "category": "Habitat" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.045836, + 47.361545 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Cistelle Nature", + "category": "Alimentation", + "website": "http://www.cistelle-nature.com/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.455664, + 47.221259 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Eau vive", + "category": "Alimentation", + "description": "", + "website": "http://www.eau-vive.com/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.097071, + 47.308778 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Epicentre", + "category": "Alimentation" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.776059, + 47.13287 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Épicerie Locavore des Bourroches", + "category": "Alimentation", + "description": "", + "website": "http://www.epicerie-locavore-des-bourroches.fr/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.01579, + 47.309365 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "L'Odyssée Bio", + "category": "Alimentation", + "description": "", + "website": "http://www.produits-bio-magasin.fr/" + + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.842932, + 47.041162 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "La vie Claire", + "category": "Alimentation", + "description": "", + "website": "http://www.lavieclaire.com/magasin-bio/beaune.html" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.842007, + 47.020924 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "La vie Claire", + "category": "Alimentation", + "description": "", + "website": "http://www.lavieclaire.com/magasin-bio/dijon.html" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.040618, + 47.31859 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "La Vie Claire ", + "category": "Alimentation", + "description": "", + "website": "https://magasins.lavieclaire.com/lavieclaire/fr/france/bourgogne-franche-comte/nievre/varennes-vauzelles" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.150909, + 47.010109 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "La vie Saine", + "category": "Alimentation", + "description": "", + "website": "http://www.laviesaine.fr/magasins-bio/46/21-chenove/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.019615, + 47.292817 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "La vie Saine", + "category": "Alimentation", + "description": "", + "website": "http://www.laviesaine.fr/magasins-bio/62/21-dijon/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.038479, + 47.322926 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Le B", + "category": "Alimentation", + "description": "", + "facebook": "https://fr-fr.facebook.com/boulangeriebiodijon/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.01955, + 47.369641 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Le Fournil Saint Arigle", + "category": "Alimentation", + "description": "Artisan Boulanger - Faits Maison", + "facebook": "https://www.facebook.com/carinelangloismorel/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.16371, + 46.989186 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Miss Terre verte", + "category": "Alimentation", + "description": "", + "website": "http://www.missterreverte.com/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.040893, + 47.318602 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Natur O Bio", + "category": "Alimentation" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.948992, + 47.136877 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Natura Bio", + "category": "Alimentation", + "description": "Produits bio et en vrac", + "website": "https://natura-bio-nevers.clicnbio.com/fr" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.173759, + 46.993178 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "ÔLieu", + "category": "Alimentation", + "description": "Bières artisanales Biologiques.", + "website": "http://olieu.fr/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.157079, + 46.993858 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Proxi Bio", + "category": "Alimentation", + "website": "http://www.proxi-bio21.fr/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.407473, + 47.19276 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Thés & Traditions", + "category": "Alimentation", + "description": "", + "website": "https://www.thes-traditions.com/fr/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.031556, + 47.352112 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Amappi", + "chapo": "AMAP", + "category": "Alimentation", + "website": "http://amappi.asso.fr/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.709766, + 47.308983 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Les Paniers de l'eldo", + "chapo": "AMAP", + "category": "Alimentation", + "website": "http://lespaniersbiodeleldo.blogspot.fr" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.048819, + 47.314039 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Les paniers de Marie", + "category": "Alimentation", + "website": "http://les-paniersdemarie.fr/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.135014, + 47.301112 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "La Ferme de la Ruchotte", + "category": "Ferme Auberge, Restaurant bio", + "category": "Loisirs", + "description": "La Ferme de la Ruchotte élève des volailles de races anciennes (Barbezieux, dindes rouges des Ardennes ...) reconnues par les plus grandes tables, mais aussi des moutons solognots et des cochons noirs de Bigorre, dans le seul but de ne cuisiner que les animaux qu'il a lui-même élevés.", + "website": "https://www.lafermedelaruchotte.com" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.709744, + 47.095253 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Boulangerie du cheval Gris", + "chapo": "Boulangerie", + "category": "Alimentation", + "description": "", + "facebook": "https://www.facebook.com/Boulangerie-du-cheval-gris-a-Is-sur-tille-162429030473354/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.114071, + 47.526605 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Drive Fermier", + "chapo": "Produits Fermiers", + "category": "Alimentation", + "description": "Acheter en ligne directement aux producteurs locaux", + "website": "http://www.drive-fermier.fr/21/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.061779, + 47.341273 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Du pain pour demain", + "chapo": "Boulangerie", + "category": "Alimentation", + "description": "Cette boulangerie propose des pains et baguettes réalisés avec du blé bio ou uniquement cultivé en Bourgogne...", + "website": "http://www.dupainpourdemain.fr/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.038787, + 47.347078 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Ferme Cérès", + "chapo": "Farines, fruits & légumes bios", + "category": "Alimentation", + "description": "Ventes et productions de farines et produits biologiques fermièrs", + "website": "https://sites.google.com/site/fermeceres/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.98584, + 47.233776 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Ferme pédagogique de Florence VOISOT", + "chapo": "Ferme pédagogique", + "category": "Alimentation", + "description": "Ferme pédagogique, céréales anciennes et biologiques", + "website": "http://www.visitealafermebiocotedor.fr/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.068367, + 47.446836 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "La corbeille aux saveurs", + "chapo" : "Produits fermiers", + "category": "Alimentation", + "description": "Suite à une réflexion de plusieurs agriculteurs en 1998, trois d'entre eux décident de s'unir pour tenir à Chevigny-St Sauveur un magasin proposant les produits de leurs fermes.", + "website": "http://www.fermebelair.com/ferme_bel_air/magasin.html" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.12605, + 47.301745 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "La ferme de neuvelle", + "chapo": "Cueillette de fruits et légumes", + "category": "Alimentation", + "description": "La Ferme de Neuvelle vous propose en vente directe, des fruits et légumes de saisons issus de l'agriculture biologique.", + "website": "https://ferme.neuvelle.fr/", + "facebook": "https://www.facebook.com/fermedeneuvelle" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.90443, + 47.064699 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "La ferme de Tontenant", + "category": "Alimentation" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.195718, + 47.046945 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Fruits rouges & cie", + "chapo": "Magasin de producteurs", + "category": "Alimentation", + "description": " Fruirouge & Compagnie, l'épicerie fermière vends des produits 100% fermiers de nos amis producteurs, provenant de plus de 80 fermes en France.", + "website": "http://www.fruirouge.fr/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.919719, + 47.164465 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Le coeur du terroir", + "category": "Alimentation", + "facebook": "https://www.facebook.com/Le-Coeur-du-Terroir-154610101562029/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.841548, + 47.030325 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Le jardin de Quincey", + "chapo": "Cueillette de fruits et légumes bio", + "category": "Alimentation", + "description": "Le jardin de Quincey est un libre cueillette de légumes biologiques.", + "facebook": "https://fr-fr.facebook.com/Le-Jardin-de-Quincey-236682653178988/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.973588, + 47.107187 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Les ateliers de sarasin", + "chapo": "Biscuiterie", + "category": "Alimentation", + "description": "Une biscuiterie bio et sans gluten", + "website": "http://www.ateliersarrasin.com/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.33879, + 47.62311 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Les champs du destin", + "chapo": "Boulangerie bio", + "category": "Alimentation", + "description": "Pains bio de céréales paysannes et chocolats bio sans lécithine", + "website": "https://www.leschampsdudestin.com/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.317458, + 47.590963 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Les Ruchers du Morvan", + "chapo": "Miels", + "category": "Alimentation", + "description": "Les Ruchers du Morvan est une ferme biologique de 1000 ruches qui propose une large gamme de miels ainsi que ses spécialités (pain d'épice à 70% de miel, gâteaux à la peau de lait...)", + "website": "https://www.achat-nivernais-morvan.com/lerucherdumorvan", + "facebook": "https://fr-fr.facebook.com/Les-Ruchers-du-Morvan-140014632846992/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 3.939304, + 47.091718 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Magapomme", + "chapo": "Produits locaux", + "category": "Alimentation", + "description": "Dans un souci de retrouver les valeurs d’antan, Magapomme se positionne comme un intermédiaire direct entre vous et les fermiers auprès desquels les produits sont issus.", + "website": "https://www.magapomme.com/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.11199, + 47.233324 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Marché de Dijon", + "chapo": "Marché", + "category": "Alimentation", + "website": "http://www.biobourgogne-vitrine.org/marche-de-dijon_p265.php" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.039903, + 47.323669 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Miel de Sully", + "chapo": "Miel", + "category": "Alimentation", + "description":"Miels produits dans le paysage vallonné de la vallée de la Drée en Bourgogne du sud. Eloigné de l’agriculture intensive de la vallée de la Saône, ce site assure des miels de sources locales essentiellement libres de tout pesticide.", + "website": "http://www.mieldesully.fr/index.html", + "facebook": "https://fr-fr.facebook.com/mieldesully/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.471316, + 47.009019 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Multiferm", + "chapo": "Produits fermiers", + "category": "Alimentation", + "description" : "L'enseigne Multiferm du Val dispose de deux magasins installés entre Langres et Dijon permettant de vous proposer des produits fermiers.", + "website":"https://www.multiferm.fr/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.052466, + 47.383067 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "C' du jardin", + "chapo": "Restaurant", + "category": "Loisirs", + "description" : "Un bar à salade lié à la chaine de magasins Bio C' Bon.", + "website": "http://www.cdujardin.fr/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.036054, + 47.322853 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Craft Beer Pub", + "chapo": "Bars & Cafés", + "category": "Loisirs", + "description" : "Ce bar propose des produits français et issus du tissu économique local.", + "mail": "contact@lagastache-restaurant.com", + "website": "https://www.craftbeerpub.fr/", + "facebook": "https://fr-fr.facebook.com/craft.dijon/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.043293, + 47.326012 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "L'agastache", + "chapo": "Restaurant", + "category": "Loisirs", + "description": "Un restaurant qui propose une cuisine maison avec des produits bios issus de l'agriculture locale", + "website": "http://lagastache-restaurant.com/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.780635, + 47.001153 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "La Crepitante", + "chapo": "Restaurant", + "category": "Loisirs", + "description":"Une crêperie revisitant les recettes emblématiques de la Bourgogne en privilègiant l'utilisation de produits bio et locaux", + "facebook": "https://www.facebook.com/LaCrepitante21" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.043411, + 47.323592 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "La Péniche Cancale", + "chapo": "Bar, concert, dancefloor, restaurant", + "category": "Loisirs", + "description": "La Péniche Cancale est un établissement culturel et gourmand amarré au Port du Canal de Dijon, ouvert tout au long de l’année. On peut y venir pour écouter un concert, boire un coup, pour danser sur les sons d’un bon Dj, pour grignoter, participer à une animation culinaire, en famille, avec des amis ou quelques collègues.", + "website": "http://penichecancale.com/", + "facebook": "https://www.facebook.com/PenicheCancaleDijon" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.027736, + 47.314534 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "La petite marche", + "chapo": "Restaurant", + "category": "Loisirs", + "facebook": "https://www.facebook.com/petitemarche/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.038476, + 47.322915 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Le Chez Nous", + "chapo": "Café", + "category": "Loisirs" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.040383, + 47.323037 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Le dé Masqué", + "chapo": "Café associatif", + "category": "Loisirs", + "description" : "Le dé masqué est un bar à jeux associatif ouvert cinq fois par semaine du mardi au samedi, vous pourrez venir pratiquer le jeu de société, que vous soyez seuls, en famille ou entre amis.", + "website": "https://www.de-masque.net/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.033391, + 47.318454 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "La coudée", + "chapo": "Café associatif", + "category": "Loisirs", + "description": "La volonté de l'association La Coudée est de dynamiser et développer un carrefour d'activités, créant du lien social en zone rurale, par l'image emblématique du café, lieu de vie, de créations et de savoirs.", + "website": "http://lacoudee.fr/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 4.412979, + 47.295476 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Le potimarron", + "chapo": "Restaurant", + "category": "Loisirs", + "description" : "Un restaurant bio et végétairien avec de la cuisine faite maison" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.026808, + 47.317881 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Le Shanti", + "chapo": "Restaurant", + "category": "Loisirs", + "description" : "Le shanti est avant tout un lieu de partage, d’évasion et de détente. Il se compose de 3 espaces: un resto végétarien, un salon de thé indien et un lieu d’échange culturel et spirituel dans le caveau", + "website": "http://leshanti.unblog.fr/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.034871, + 47.317649 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Les treizes lucioles", + "chapo": "Restaurant", + "category": "Loisirs", + "description" : "Un restaurant avec un buffet végétairien, avec des plats fait maison qui peuvent être servi en version végétarienne ou végétalienne.", + "facebook": "https://fr-fr.facebook.com/Treize-Lucioles-218662948299200/" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.035805, + 47.318749 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Maloka", + "chapo": "Association libertaire", + "category": "Éducation & formation", + "description": "Maloka est une association dijonnaise, dont les principaux objectifs sont d'organiser nombre d'activités proposant des alternatives au mode de vie imposé par nos sociétés capitalistes, patriarcales et hiérarchisés. Nous pronons une prise de contrôle de nos vies, dans l'idée d'une société égalitaire, non basée sur les rapports d'argent et de pouvoir ou sur l'appartenance à une catégorie sociale (femme/homme, noir-e/blanc-he, animal/humain, etc.) mais sur les réels intérêts de chacun-e. Concrètement, Maloka se propose de fournir des outils théoriques et pratiques pour la mise en place, ici et maintenant, de pratiques égalitaires et libertaires. Pour ce faire, Maloka regroupe différents collectifs de luttes se reconnaissant comme partie de la mouvance libertaire.", + "website": "http://maloka.chez.com/infoact.htm" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.047043, + 47.321665 + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "Ô gre du vin", + "chapo": "Bars & Cafés", + "category": "Loisirs", + "description": "Caviste indépendant et bar à vins qui propose à la vente de vins issus d’une viticulture respectueuse de l’environnement", + "website": "http://www.ogreduvin.fr" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.0328, + 47.318296 + ] + } + } + ] +} diff --git a/js/leaflet.js b/js/leaflet.js new file mode 100644 index 0000000..4b989f0 --- /dev/null +++ b/js/leaflet.js @@ -0,0 +1 @@ +/* @preserve * Leaflet 1.5.1+build.2e3e0ff, a JS library for interactive maps. http://leafletjs.com * (c) 2010-2018 Vladimir Agafonkin, (c) 2010-2011 CloudMade */ !function(t,i){"object"==typeof exports&&"undefined"!=typeof module?i(exports):"function"==typeof define&&define.amd?define(["exports"],i):i(t.L={})}(this,function(t){"use strict";var i=Object.freeze;function h(t){var i,e,n,o;for(e=1,n=arguments.length;e=this.min.x&&e.x<=this.max.x&&i.y>=this.min.y&&e.y<=this.max.y},intersects:function(t){t=R(t);var i=this.min,e=this.max,n=t.min,o=t.max,s=o.x>=i.x&&n.x<=e.x,r=o.y>=i.y&&n.y<=e.y;return s&&r},overlaps:function(t){t=R(t);var i=this.min,e=this.max,n=t.min,o=t.max,s=o.x>i.x&&n.xi.y&&n.y=n.lat&&e.lat<=o.lat&&i.lng>=n.lng&&e.lng<=o.lng},intersects:function(t){t=D(t);var i=this._southWest,e=this._northEast,n=t.getSouthWest(),o=t.getNorthEast(),s=o.lat>=i.lat&&n.lat<=e.lat,r=o.lng>=i.lng&&n.lng<=e.lng;return s&&r},overlaps:function(t){t=D(t);var i=this._southWest,e=this._northEast,n=t.getSouthWest(),o=t.getNorthEast(),s=o.lat>i.lat&&n.lati.lng&&n.lng';var i=t.firstChild;return i.style.behavior="url(#default#VML)",i&&"object"==typeof i.adj}catch(t){return!1}}();function kt(t){return 0<=navigator.userAgent.toLowerCase().indexOf(t)}var Bt=(Object.freeze||Object)({ie:it,ielt9:et,edge:nt,webkit:ot,android:st,android23:rt,androidStock:ht,opera:ut,chrome:lt,gecko:ct,safari:_t,phantom:dt,opera12:pt,win:mt,ie3d:ft,webkit3d:gt,gecko3d:vt,any3d:yt,mobile:xt,mobileWebkit:wt,mobileWebkit3d:Pt,msPointer:bt,pointer:Lt,touch:Tt,mobileOpera:zt,mobileGecko:Mt,retina:Ct,canvas:St,svg:Zt,vml:Et}),At=bt?"MSPointerDown":"pointerdown",It=bt?"MSPointerMove":"pointermove",Ot=bt?"MSPointerUp":"pointerup",Rt=bt?"MSPointerCancel":"pointercancel",Nt=["INPUT","SELECT","OPTION"],Dt={},jt=!1,Wt=0;function Ht(t,i,e,n){return"touchstart"===i?function(t,i,e){var n=a(function(t){if("mouse"!==t.pointerType&&t.MSPOINTER_TYPE_MOUSE&&t.pointerType!==t.MSPOINTER_TYPE_MOUSE){if(!(Nt.indexOf(t.target.tagName)<0))return;Di(t)}qt(t,i)});t["_leaflet_touchstart"+e]=n,t.addEventListener(At,n,!1),jt||(document.documentElement.addEventListener(At,Ft,!0),document.documentElement.addEventListener(It,Ut,!0),document.documentElement.addEventListener(Ot,Vt,!0),document.documentElement.addEventListener(Rt,Vt,!0),jt=!0)}(t,e,n):"touchmove"===i?function(t,i,e){var n=function(t){(t.pointerType!==t.MSPOINTER_TYPE_MOUSE&&"mouse"!==t.pointerType||0!==t.buttons)&&qt(t,i)};t["_leaflet_touchmove"+e]=n,t.addEventListener(It,n,!1)}(t,e,n):"touchend"===i&&function(t,i,e){var n=function(t){qt(t,i)};t["_leaflet_touchend"+e]=n,t.addEventListener(Ot,n,!1),t.addEventListener(Rt,n,!1)}(t,e,n),this}function Ft(t){Dt[t.pointerId]=t,Wt++}function Ut(t){Dt[t.pointerId]&&(Dt[t.pointerId]=t)}function Vt(t){delete Dt[t.pointerId],Wt--}function qt(t,i){for(var e in t.touches=[],Dt)t.touches.push(Dt[e]);t.changedTouches=[t],i(t)}var Gt=bt?"MSPointerDown":Lt?"pointerdown":"touchstart",Kt=bt?"MSPointerUp":Lt?"pointerup":"touchend",Yt="_leaflet_";function Xt(t,o,i){var s,r,a=!1;function e(t){var i;if(Lt){if(!nt||"mouse"===t.pointerType)return;i=Wt}else i=t.touches.length;if(!(1this.options.maxZoom)?this.setZoom(t):this},panInsideBounds:function(t,i){this._enforcingBounds=!0;var e=this.getCenter(),n=this._limitCenter(e,this._zoom,D(t));return e.equals(n)||this.panTo(n,i),this._enforcingBounds=!1,this},panInside:function(t,i){var e=I((i=i||{}).paddingTopLeft||i.padding||[0,0]),n=I(i.paddingBottomRight||i.padding||[0,0]),o=this.getCenter(),s=this.project(o),r=this.project(t),a=this.getPixelBounds(),h=a.getSize().divideBy(2),u=R([a.min.add(e),a.max.subtract(n)]);if(!u.contains(r)){this._enforcingBounds=!0;var l=s.subtract(r),c=I(r.x+l.x,r.y+l.y);(r.xu.max.x)&&(c.x=s.x-l.x,0u.max.y)&&(c.y=s.y-l.y,0=this.options.transform3DLimit&&this._resetView(this.getCenter(),this.getZoom())},_findEventTargets:function(t,i){for(var e,n=[],o="mouseout"===i||"mouseover"===i,s=t.target||t.srcElement,r=!1;s;){if((e=this._targets[u(s)])&&("click"===i||"preclick"===i)&&!t._simulated&&this._draggableMoved(e)){r=!0;break}if(e&&e.listens(i,!0)){if(o&&!Ki(s,t))break;if(n.push(e),o)break}if(s===this._container)break;s=s.parentNode}return n.length||r||o||!Ki(s,t)||(n=[this]),n},_handleDOMEvent:function(t){if(this._loaded&&!Gi(t)){var i=t.type;"mousedown"!==i&&"keypress"!==i&&"keyup"!==i&&"keydown"!==i||zi(t.target||t.srcElement),this._fireDOMEvent(t,i)}},_mouseEvents:["click","dblclick","mouseover","mouseout","contextmenu"],_fireDOMEvent:function(t,i,e){if("click"===t.type){var n=h({},t);n.type="preclick",this._fireDOMEvent(n,n.type,e)}if(!t._stopped&&(e=(e||[]).concat(this._findEventTargets(t,i))).length){var o=e[0];"contextmenu"===i&&o.listens(i,!0)&&Di(t);var s={originalEvent:t};if("keypress"!==t.type&&"keydown"!==t.type&&"keyup"!==t.type){var r=o.getLatLng&&(!o._radius||o._radius<=10);s.containerPoint=r?this.latLngToContainerPoint(o.getLatLng()):this.mouseEventToContainerPoint(t),s.layerPoint=this.containerPointToLayerPoint(s.containerPoint),s.latlng=r?o.getLatLng():this.layerPointToLatLng(s.layerPoint)}for(var a=0;athis.options.zoomAnimationThreshold)return!1;var n=this.getZoomScale(i),o=this._getCenterOffset(t)._divideBy(1-1/n);return!(!0!==e.animate&&!this.getSize().contains(o))&&(M(function(){this._moveStart(!0,!1)._animateZoom(t,i,!0)},this),!0)},_animateZoom:function(t,i,e,n){this._mapPane&&(e&&(this._animatingZoom=!0,this._animateToCenter=t,this._animateToZoom=i,pi(this._mapPane,"leaflet-zoom-anim")),this.fire("zoomanim",{center:t,zoom:i,noUpdate:n}),setTimeout(a(this._onZoomTransitionEnd,this),250))},_onZoomTransitionEnd:function(){this._animatingZoom&&(this._mapPane&&mi(this._mapPane,"leaflet-zoom-anim"),this._animatingZoom=!1,this._move(this._animateToCenter,this._animateToZoom),M(function(){this._moveEnd(!0)},this))}});function $i(t){return new Qi(t)}var Qi=Z.extend({options:{position:"topright"},initialize:function(t){p(this,t)},getPosition:function(){return this.options.position},setPosition:function(t){var i=this._map;return i&&i.removeControl(this),this.options.position=t,i&&i.addControl(this),this},getContainer:function(){return this._container},addTo:function(t){this.remove(),this._map=t;var i=this._container=this.onAdd(t),e=this.getPosition(),n=t._controlCorners[e];return pi(i,"leaflet-control"),-1!==e.indexOf("bottom")?n.insertBefore(i,n.firstChild):n.appendChild(i),this._map.on("unload",this.remove,this),this},remove:function(){return this._map&&(ui(this._container),this.onRemove&&this.onRemove(this._map),this._map.off("unload",this.remove,this),this._map=null),this},_refocusOnMap:function(t){this._map&&t&&0",n=document.createElement("div");return n.innerHTML=e,n.firstChild},_addItem:function(t){var i,e=document.createElement("label"),n=this._map.hasLayer(t.layer);t.overlay?((i=document.createElement("input")).type="checkbox",i.className="leaflet-control-layers-selector",i.defaultChecked=n):i=this._createRadioElement("leaflet-base-layers_"+u(this),n),this._layerControlInputs.push(i),i.layerId=u(t.layer),Ei(i,"click",this._onInputClick,this);var o=document.createElement("span");o.innerHTML=" "+t.name;var s=document.createElement("div");return e.appendChild(s),s.appendChild(i),s.appendChild(o),(t.overlay?this._overlaysList:this._baseLayersList).appendChild(e),this._checkDisabledLayers(),e},_onInputClick:function(){var t,i,e=this._layerControlInputs,n=[],o=[];this._handlingClick=!0;for(var s=e.length-1;0<=s;s--)t=e[s],i=this._getLayer(t.layerId).layer,t.checked?n.push(i):t.checked||o.push(i);for(s=0;si.options.maxZoom},_expandIfNotCollapsed:function(){return this._map&&!this.options.collapsed&&this.expand(),this},_expand:function(){return this.expand()},_collapse:function(){return this.collapse()}}),ie=Qi.extend({options:{position:"topleft",zoomInText:"+",zoomInTitle:"Zoom in",zoomOutText:"−",zoomOutTitle:"Zoom out"},onAdd:function(t){var i="leaflet-control-zoom",e=hi("div",i+" leaflet-bar"),n=this.options;return this._zoomInButton=this._createButton(n.zoomInText,n.zoomInTitle,i+"-in",e,this._zoomIn),this._zoomOutButton=this._createButton(n.zoomOutText,n.zoomOutTitle,i+"-out",e,this._zoomOut),this._updateDisabled(),t.on("zoomend zoomlevelschange",this._updateDisabled,this),e},onRemove:function(t){t.off("zoomend zoomlevelschange",this._updateDisabled,this)},disable:function(){return this._disabled=!0,this._updateDisabled(),this},enable:function(){return this._disabled=!1,this._updateDisabled(),this},_zoomIn:function(t){!this._disabled&&this._map._zoomthis._map.getMinZoom()&&this._map.zoomOut(this._map.options.zoomDelta*(t.shiftKey?3:1))},_createButton:function(t,i,e,n,o){var s=hi("a",e,n);return s.innerHTML=t,s.href="#",s.title=i,s.setAttribute("role","button"),s.setAttribute("aria-label",i),Ni(s),Ei(s,"click",ji),Ei(s,"click",o,this),Ei(s,"click",this._refocusOnMap,this),s},_updateDisabled:function(){var t=this._map,i="leaflet-disabled";mi(this._zoomInButton,i),mi(this._zoomOutButton,i),!this._disabled&&t._zoom!==t.getMinZoom()||pi(this._zoomOutButton,i),!this._disabled&&t._zoom!==t.getMaxZoom()||pi(this._zoomInButton,i)}});Ji.mergeOptions({zoomControl:!0}),Ji.addInitHook(function(){this.options.zoomControl&&(this.zoomControl=new ie,this.addControl(this.zoomControl))});var ee=Qi.extend({options:{position:"bottomleft",maxWidth:100,metric:!0,imperial:!0},onAdd:function(t){var i="leaflet-control-scale",e=hi("div",i),n=this.options;return this._addScales(n,i+"-line",e),t.on(n.updateWhenIdle?"moveend":"move",this._update,this),t.whenReady(this._update,this),e},onRemove:function(t){t.off(this.options.updateWhenIdle?"moveend":"move",this._update,this)},_addScales:function(t,i,e){t.metric&&(this._mScale=hi("div",i,e)),t.imperial&&(this._iScale=hi("div",i,e))},_update:function(){var t=this._map,i=t.getSize().y/2,e=t.distance(t.containerPointToLatLng([0,i]),t.containerPointToLatLng([this.options.maxWidth,i]));this._updateScales(e)},_updateScales:function(t){this.options.metric&&t&&this._updateMetric(t),this.options.imperial&&t&&this._updateImperial(t)},_updateMetric:function(t){var i=this._getRoundNum(t),e=i<1e3?i+" m":i/1e3+" km";this._updateScale(this._mScale,e,i/t)},_updateImperial:function(t){var i,e,n,o=3.2808399*t;5280Leaflet'},initialize:function(t){p(this,t),this._attributions={}},onAdd:function(t){for(var i in(t.attributionControl=this)._container=hi("div","leaflet-control-attribution"),Ni(this._container),t._layers)t._layers[i].getAttribution&&this.addAttribution(t._layers[i].getAttribution());return this._update(),this._container},setPrefix:function(t){return this.options.prefix=t,this._update(),this},addAttribution:function(t){return t&&(this._attributions[t]||(this._attributions[t]=0),this._attributions[t]++,this._update()),this},removeAttribution:function(t){return t&&this._attributions[t]&&(this._attributions[t]--,this._update()),this},_update:function(){if(this._map){var t=[];for(var i in this._attributions)this._attributions[i]&&t.push(i);var e=[];this.options.prefix&&e.push(this.options.prefix),t.length&&e.push(t.join(", ")),this._container.innerHTML=e.join(" | ")}}});Ji.mergeOptions({attributionControl:!0}),Ji.addInitHook(function(){this.options.attributionControl&&(new ne).addTo(this)});Qi.Layers=te,Qi.Zoom=ie,Qi.Scale=ee,Qi.Attribution=ne,$i.layers=function(t,i,e){return new te(t,i,e)},$i.zoom=function(t){return new ie(t)},$i.scale=function(t){return new ee(t)},$i.attribution=function(t){return new ne(t)};var oe=Z.extend({initialize:function(t){this._map=t},enable:function(){return this._enabled||(this._enabled=!0,this.addHooks()),this},disable:function(){return this._enabled&&(this._enabled=!1,this.removeHooks()),this},enabled:function(){return!!this._enabled}});oe.addTo=function(t,i){return t.addHandler(i,this),this};var se,re={Events:E},ae=Tt?"touchstart mousedown":"mousedown",he={mousedown:"mouseup",touchstart:"touchend",pointerdown:"touchend",MSPointerDown:"touchend"},ue={mousedown:"mousemove",touchstart:"touchmove",pointerdown:"touchmove",MSPointerDown:"touchmove"},le=k.extend({options:{clickTolerance:3},initialize:function(t,i,e,n){p(this,n),this._element=t,this._dragStartTarget=i||t,this._preventOutline=e},enable:function(){this._enabled||(Ei(this._dragStartTarget,ae,this._onDown,this),this._enabled=!0)},disable:function(){this._enabled&&(le._dragging===this&&this.finishDrag(),Bi(this._dragStartTarget,ae,this._onDown,this),this._enabled=!1,this._moved=!1)},_onDown:function(t){if(!t._simulated&&this._enabled&&(this._moved=!1,!di(this._element,"leaflet-zoom-anim")&&!(le._dragging||t.shiftKey||1!==t.which&&1!==t.button&&!t.touches||((le._dragging=this)._preventOutline&&zi(this._element),Li(),$t(),this._moving)))){this.fire("down");var i=t.touches?t.touches[0]:t,e=Ci(this._element);this._startPoint=new B(i.clientX,i.clientY),this._parentScale=Si(e),Ei(document,ue[t.type],this._onMove,this),Ei(document,he[t.type],this._onUp,this)}},_onMove:function(t){if(!t._simulated&&this._enabled)if(t.touches&&1i.max.x&&(e|=2),t.yi.max.y&&(e|=8),e}function fe(t,i,e,n){var o,s=i.x,r=i.y,a=e.x-s,h=e.y-r,u=a*a+h*h;return 0this._layersMaxZoom&&this.setZoom(this._layersMaxZoom),void 0===this.options.minZoom&&this._layersMinZoom&&this.getZoom()t.y!=n.y>t.y&&t.x<(n.x-e.x)*(t.y-e.y)/(n.y-e.y)+e.x&&(u=!u);return u||De.prototype._containsPoint.call(this,t,!0)}});var We=Ee.extend({initialize:function(t,i){p(this,i),this._layers={},t&&this.addData(t)},addData:function(t){var i,e,n,o=v(t)?t:t.features;if(o){for(i=0,e=o.length;iu.x&&(l=s.x+n-u.x+h.x),s.x-l-a.x<0&&(l=s.x-a.x),s.y+e+h.y>u.y&&(c=s.y+e-u.y+h.y),s.y-c-a.y<0&&(c=s.y-a.y),(l||c)&&t.fire("autopanstart").panBy([l,c])}},_onCloseButtonClick:function(t){this._close(),ji(t)},_getAnchor:function(){return I(this._source&&this._source._getPopupAnchor?this._source._getPopupAnchor():[0,0])}});Ji.mergeOptions({closePopupOnClick:!0}),Ji.include({openPopup:function(t,i,e){return t instanceof nn||(t=new nn(e).setContent(t)),i&&t.setLatLng(i),this.hasLayer(t)?this:(this._popup&&this._popup.options.autoClose&&this.closePopup(),this._popup=t,this.addLayer(t))},closePopup:function(t){return t&&t!==this._popup||(t=this._popup,this._popup=null),t&&this.removeLayer(t),this}}),Se.include({bindPopup:function(t,i){return t instanceof nn?(p(t,i),(this._popup=t)._source=this):(this._popup&&!i||(this._popup=new nn(i,this)),this._popup.setContent(t)),this._popupHandlersAdded||(this.on({click:this._openPopup,keypress:this._onKeyPress,remove:this.closePopup,move:this._movePopup}),this._popupHandlersAdded=!0),this},unbindPopup:function(){return this._popup&&(this.off({click:this._openPopup,keypress:this._onKeyPress,remove:this.closePopup,move:this._movePopup}),this._popupHandlersAdded=!1,this._popup=null),this},openPopup:function(t,i){return this._popup&&this._map&&(i=this._popup._prepareOpen(this,t,i),this._map.openPopup(this._popup,i)),this},closePopup:function(){return this._popup&&this._popup._close(),this},togglePopup:function(t){return this._popup&&(this._popup._map?this.closePopup():this.openPopup(t)),this},isPopupOpen:function(){return!!this._popup&&this._popup.isOpen()},setPopupContent:function(t){return this._popup&&this._popup.setContent(t),this},getPopup:function(){return this._popup},_openPopup:function(t){var i=t.layer||t.target;this._popup&&this._map&&(ji(t),i instanceof Oe?this.openPopup(t.layer||t.target,t.latlng):this._map.hasLayer(this._popup)&&this._popup._source===i?this.closePopup():this.openPopup(i,t.latlng))},_movePopup:function(t){this._popup.setLatLng(t.latlng)},_onKeyPress:function(t){13===t.originalEvent.keyCode&&this._openPopup(t)}});var on=en.extend({options:{pane:"tooltipPane",offset:[0,0],direction:"auto",permanent:!1,sticky:!1,interactive:!1,opacity:.9},onAdd:function(t){en.prototype.onAdd.call(this,t),this.setOpacity(this.options.opacity),t.fire("tooltipopen",{tooltip:this}),this._source&&this._source.fire("tooltipopen",{tooltip:this},!0)},onRemove:function(t){en.prototype.onRemove.call(this,t),t.fire("tooltipclose",{tooltip:this}),this._source&&this._source.fire("tooltipclose",{tooltip:this},!0)},getEvents:function(){var t=en.prototype.getEvents.call(this);return Tt&&!this.options.permanent&&(t.preclick=this._close),t},_close:function(){this._map&&this._map.closeTooltip(this)},_initLayout:function(){var t="leaflet-tooltip "+(this.options.className||"")+" leaflet-zoom-"+(this._zoomAnimated?"animated":"hide");this._contentNode=this._container=hi("div",t)},_updateLayout:function(){},_adjustPan:function(){},_setPosition:function(t){var i=this._map,e=this._container,n=i.latLngToContainerPoint(i.getCenter()),o=i.layerPointToContainerPoint(t),s=this.options.direction,r=e.offsetWidth,a=e.offsetHeight,h=I(this.options.offset),u=this._getAnchor();t="top"===s?t.add(I(-r/2+h.x,-a+h.y+u.y,!0)):"bottom"===s?t.subtract(I(r/2-h.x,-h.y,!0)):"center"===s?t.subtract(I(r/2+h.x,a/2-u.y+h.y,!0)):"right"===s||"auto"===s&&o.xthis.options.maxZoom||ethis.options.maxZoom||void 0!==this.options.minZoom&&oe.max.x)||!i.wrapLat&&(t.ye.max.y))return!1}if(!this.options.bounds)return!0;var n=this._tileCoordsToBounds(t);return D(this.options.bounds).overlaps(n)},_keyToBounds:function(t){return this._tileCoordsToBounds(this._keyToTileCoords(t))},_tileCoordsToNwSe:function(t){var i=this._map,e=this.getTileSize(),n=t.scaleBy(e),o=n.add(e);return[i.unproject(n,t.z),i.unproject(o,t.z)]},_tileCoordsToBounds:function(t){var i=this._tileCoordsToNwSe(t),e=new N(i[0],i[1]);return this.options.noWrap||(e=this._map.wrapLatLngBounds(e)),e},_tileCoordsToKey:function(t){return t.x+":"+t.y+":"+t.z},_keyToTileCoords:function(t){var i=t.split(":"),e=new B(+i[0],+i[1]);return e.z=+i[2],e},_removeTile:function(t){var i=this._tiles[t];i&&(ui(i.el),delete this._tiles[t],this.fire("tileunload",{tile:i.el,coords:this._keyToTileCoords(t)}))},_initTile:function(t){pi(t,"leaflet-tile");var i=this.getTileSize();t.style.width=i.x+"px",t.style.height=i.y+"px",t.onselectstart=l,t.onmousemove=l,et&&this.options.opacity<1&&vi(t,this.options.opacity),st&&!rt&&(t.style.WebkitBackfaceVisibility="hidden")},_addTile:function(t,i){var e=this._getTilePos(t),n=this._tileCoordsToKey(t),o=this.createTile(this._wrapCoords(t),a(this._tileReady,this,t));this._initTile(o),this.createTile.length<2&&M(a(this._tileReady,this,t,null,o)),wi(o,e),this._tiles[n]={el:o,coords:t,current:!0},i.appendChild(o),this.fire("tileloadstart",{tile:o,coords:t})},_tileReady:function(t,i,e){i&&this.fire("tileerror",{error:i,tile:e,coords:t});var n=this._tileCoordsToKey(t);(e=this._tiles[n])&&(e.loaded=+new Date,this._map._fadeAnimated?(vi(e.el,0),C(this._fadeFrame),this._fadeFrame=M(this._updateOpacity,this)):(e.active=!0,this._pruneTiles()),i||(pi(e.el,"leaflet-tile-loaded"),this.fire("tileload",{tile:e.el,coords:t})),this._noTilesToLoad()&&(this._loading=!1,this.fire("load"),et||!this._map._fadeAnimated?M(this._pruneTiles,this):setTimeout(a(this._pruneTiles,this),250)))},_getTilePos:function(t){return t.scaleBy(this.getTileSize()).subtract(this._level.origin)},_wrapCoords:function(t){var i=new B(this._wrapX?r(t.x,this._wrapX):t.x,this._wrapY?r(t.y,this._wrapY):t.y);return i.z=t.z,i},_pxBoundsToTileRange:function(t){var i=this.getTileSize();return new O(t.min.unscaleBy(i).floor(),t.max.unscaleBy(i).ceil().subtract([1,1]))},_noTilesToLoad:function(){for(var t in this._tiles)if(!this._tiles[t].loaded)return!1;return!0}});var an=rn.extend({options:{minZoom:0,maxZoom:18,subdomains:"abc",errorTileUrl:"",zoomOffset:0,tms:!1,zoomReverse:!1,detectRetina:!1,crossOrigin:!1},initialize:function(t,i){this._url=t,(i=p(this,i)).detectRetina&&Ct&&0')}}catch(t){return function(t){return document.createElement("<"+t+' xmlns="urn:schemas-microsoft.com:vml" class="lvml">')}}}(),pn={_initContainer:function(){this._container=hi("div","leaflet-vml-container")},_update:function(){this._map._animatingZoom||(ln.prototype._update.call(this),this.fire("update"))},_initPath:function(t){var i=t._container=dn("shape");pi(i,"leaflet-vml-shape "+(this.options.className||"")),i.coordsize="1 1",t._path=dn("path"),i.appendChild(t._path),this._updateStyle(t),this._layers[u(t)]=t},_addPath:function(t){var i=t._container;this._container.appendChild(i),t.options.interactive&&t.addInteractiveTarget(i)},_removePath:function(t){var i=t._container;ui(i),t.removeInteractiveTarget(i),delete this._layers[u(t)]},_updateStyle:function(t){var i=t._stroke,e=t._fill,n=t.options,o=t._container;o.stroked=!!n.stroke,o.filled=!!n.fill,n.stroke?(i||(i=t._stroke=dn("stroke")),o.appendChild(i),i.weight=n.weight+"px",i.color=n.color,i.opacity=n.opacity,n.dashArray?i.dashStyle=v(n.dashArray)?n.dashArray.join(" "):n.dashArray.replace(/( *, *)/g," "):i.dashStyle="",i.endcap=n.lineCap.replace("butt","flat"),i.joinstyle=n.lineJoin):i&&(o.removeChild(i),t._stroke=null),n.fill?(e||(e=t._fill=dn("fill")),o.appendChild(e),e.color=n.fillColor||n.color,e.opacity=n.fillOpacity):e&&(o.removeChild(e),t._fill=null)},_updateCircle:function(t){var i=t._point.round(),e=Math.round(t._radius),n=Math.round(t._radiusY||e);this._setPath(t,t._empty()?"M0 0":"AL "+i.x+","+i.y+" "+e+","+n+" 0,23592600")},_setPath:function(t,i){t._path.v=i},_bringToFront:function(t){ci(t._container)},_bringToBack:function(t){_i(t._container)}},mn=Et?dn:$,fn=ln.extend({getEvents:function(){var t=ln.prototype.getEvents.call(this);return t.zoomstart=this._onZoomStart,t},_initContainer:function(){this._container=mn("svg"),this._container.setAttribute("pointer-events","none"),this._rootGroup=mn("g"),this._container.appendChild(this._rootGroup)},_destroyContainer:function(){ui(this._container),Bi(this._container),delete this._container,delete this._rootGroup,delete this._svgSize},_onZoomStart:function(){this._update()},_update:function(){if(!this._map._animatingZoom||!this._bounds){ln.prototype._update.call(this);var t=this._bounds,i=t.getSize(),e=this._container;this._svgSize&&this._svgSize.equals(i)||(this._svgSize=i,e.setAttribute("width",i.x),e.setAttribute("height",i.y)),wi(e,t.min),e.setAttribute("viewBox",[t.min.x,t.min.y,i.x,i.y].join(" ")),this.fire("update")}},_initPath:function(t){var i=t._path=mn("path");t.options.className&&pi(i,t.options.className),t.options.interactive&&pi(i,"leaflet-interactive"),this._updateStyle(t),this._layers[u(t)]=t},_addPath:function(t){this._rootGroup||this._initContainer(),this._rootGroup.appendChild(t._path),t.addInteractiveTarget(t._path)},_removePath:function(t){ui(t._path),t.removeInteractiveTarget(t._path),delete this._layers[u(t)]},_updatePath:function(t){t._project(),t._update()},_updateStyle:function(t){var i=t._path,e=t.options;i&&(e.stroke?(i.setAttribute("stroke",e.color),i.setAttribute("stroke-opacity",e.opacity),i.setAttribute("stroke-width",e.weight),i.setAttribute("stroke-linecap",e.lineCap),i.setAttribute("stroke-linejoin",e.lineJoin),e.dashArray?i.setAttribute("stroke-dasharray",e.dashArray):i.removeAttribute("stroke-dasharray"),e.dashOffset?i.setAttribute("stroke-dashoffset",e.dashOffset):i.removeAttribute("stroke-dashoffset")):i.setAttribute("stroke","none"),e.fill?(i.setAttribute("fill",e.fillColor||e.color),i.setAttribute("fill-opacity",e.fillOpacity),i.setAttribute("fill-rule",e.fillRule||"evenodd")):i.setAttribute("fill","none"))},_updatePoly:function(t,i){this._setPath(t,Q(t._parts,i))},_updateCircle:function(t){var i=t._point,e=Math.max(Math.round(t._radius),1),n="a"+e+","+(Math.max(Math.round(t._radiusY),1)||e)+" 0 1,0 ",o=t._empty()?"M0 0":"M"+(i.x-e)+","+i.y+n+2*e+",0 "+n+2*-e+",0 ";this._setPath(t,o)},_setPath:function(t,i){t._path.setAttribute("d",i)},_bringToFront:function(t){ci(t._path)},_bringToBack:function(t){_i(t._path)}});function gn(t){return Zt||Et?new fn(t):null}Et&&fn.include(pn),Ji.include({getRenderer:function(t){var i=t.options.renderer||this._getPaneRenderer(t.options.pane)||this.options.renderer||this._renderer;return i||(i=this._renderer=this._createRenderer()),this.hasLayer(i)||this.addLayer(i),i},_getPaneRenderer:function(t){if("overlayPane"===t||void 0===t)return!1;var i=this._paneRenderers[t];return void 0===i&&(i=this._createRenderer({pane:t}),this._paneRenderers[t]=i),i},_createRenderer:function(t){return this.options.preferCanvas&&_n(t)||gn(t)}});var vn=je.extend({initialize:function(t,i){je.prototype.initialize.call(this,this._boundsToLatLngs(t),i)},setBounds:function(t){return this.setLatLngs(this._boundsToLatLngs(t))},_boundsToLatLngs:function(t){return[(t=D(t)).getSouthWest(),t.getNorthWest(),t.getNorthEast(),t.getSouthEast()]}});fn.create=mn,fn.pointsToPath=Q,We.geometryToLayer=He,We.coordsToLatLng=Fe,We.coordsToLatLngs=Ue,We.latLngToCoords=Ve,We.latLngsToCoords=qe,We.getFeature=Ge,We.asFeature=Ke,Ji.mergeOptions({boxZoom:!0});var yn=oe.extend({initialize:function(t){this._map=t,this._container=t._container,this._pane=t._panes.overlayPane,this._resetStateTimeout=0,t.on("unload",this._destroy,this)},addHooks:function(){Ei(this._container,"mousedown",this._onMouseDown,this)},removeHooks:function(){Bi(this._container,"mousedown",this._onMouseDown,this)},moved:function(){return this._moved},_destroy:function(){ui(this._pane),delete this._pane},_resetState:function(){this._resetStateTimeout=0,this._moved=!1},_clearDeferredResetState:function(){0!==this._resetStateTimeout&&(clearTimeout(this._resetStateTimeout),this._resetStateTimeout=0)},_onMouseDown:function(t){if(!t.shiftKey||1!==t.which&&1!==t.button)return!1;this._clearDeferredResetState(),this._resetState(),$t(),Li(),this._startPoint=this._map.mouseEventToContainerPoint(t),Ei(document,{contextmenu:ji,mousemove:this._onMouseMove,mouseup:this._onMouseUp,keydown:this._onKeyDown},this)},_onMouseMove:function(t){this._moved||(this._moved=!0,this._box=hi("div","leaflet-zoom-box",this._container),pi(this._container,"leaflet-crosshair"),this._map.fire("boxzoomstart")),this._point=this._map.mouseEventToContainerPoint(t);var i=new O(this._point,this._startPoint),e=i.getSize();wi(this._box,i.min),this._box.style.width=e.x+"px",this._box.style.height=e.y+"px"},_finish:function(){this._moved&&(ui(this._box),mi(this._container,"leaflet-crosshair")),Qt(),Ti(),Bi(document,{contextmenu:ji,mousemove:this._onMouseMove,mouseup:this._onMouseUp,keydown:this._onKeyDown},this)},_onMouseUp:function(t){if((1===t.which||1===t.button)&&(this._finish(),this._moved)){this._clearDeferredResetState(),this._resetStateTimeout=setTimeout(a(this._resetState,this),0);var i=new N(this._map.containerPointToLatLng(this._startPoint),this._map.containerPointToLatLng(this._point));this._map.fitBounds(i).fire("boxzoomend",{boxZoomBounds:i})}},_onKeyDown:function(t){27===t.keyCode&&this._finish()}});Ji.addInitHook("addHandler","boxZoom",yn),Ji.mergeOptions({doubleClickZoom:!0});var xn=oe.extend({addHooks:function(){this._map.on("dblclick",this._onDoubleClick,this)},removeHooks:function(){this._map.off("dblclick",this._onDoubleClick,this)},_onDoubleClick:function(t){var i=this._map,e=i.getZoom(),n=i.options.zoomDelta,o=t.originalEvent.shiftKey?e-n:e+n;"center"===i.options.doubleClickZoom?i.setZoom(o):i.setZoomAround(t.containerPoint,o)}});Ji.addInitHook("addHandler","doubleClickZoom",xn),Ji.mergeOptions({dragging:!0,inertia:!rt,inertiaDeceleration:3400,inertiaMaxSpeed:1/0,easeLinearity:.2,worldCopyJump:!1,maxBoundsViscosity:0});var wn=oe.extend({addHooks:function(){if(!this._draggable){var t=this._map;this._draggable=new le(t._mapPane,t._container),this._draggable.on({dragstart:this._onDragStart,drag:this._onDrag,dragend:this._onDragEnd},this),this._draggable.on("predrag",this._onPreDragLimit,this),t.options.worldCopyJump&&(this._draggable.on("predrag",this._onPreDragWrap,this),t.on("zoomend",this._onZoomEnd,this),t.whenReady(this._onZoomEnd,this))}pi(this._map._container,"leaflet-grab leaflet-touch-drag"),this._draggable.enable(),this._positions=[],this._times=[]},removeHooks:function(){mi(this._map._container,"leaflet-grab"),mi(this._map._container,"leaflet-touch-drag"),this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},moving:function(){return this._draggable&&this._draggable._moving},_onDragStart:function(){var t=this._map;if(t._stop(),this._map.options.maxBounds&&this._map.options.maxBoundsViscosity){var i=D(this._map.options.maxBounds);this._offsetLimit=R(this._map.latLngToContainerPoint(i.getNorthWest()).multiplyBy(-1),this._map.latLngToContainerPoint(i.getSouthEast()).multiplyBy(-1).add(this._map.getSize())),this._viscosity=Math.min(1,Math.max(0,this._map.options.maxBoundsViscosity))}else this._offsetLimit=null;t.fire("movestart").fire("dragstart"),t.options.inertia&&(this._positions=[],this._times=[])},_onDrag:function(t){if(this._map.options.inertia){var i=this._lastTime=+new Date,e=this._lastPos=this._draggable._absPos||this._draggable._newPos;this._positions.push(e),this._times.push(i),this._prunePositions(i)}this._map.fire("move",t).fire("drag",t)},_prunePositions:function(t){for(;1i.max.x&&(t.x=this._viscousLimit(t.x,i.max.x)),t.y>i.max.y&&(t.y=this._viscousLimit(t.y,i.max.y)),this._draggable._newPos=this._draggable._startPos.add(t)}},_onPreDragWrap:function(){var t=this._worldWidth,i=Math.round(t/2),e=this._initialWorldOffset,n=this._draggable._newPos.x,o=(n-i+e)%t+i-e,s=(n+i+e)%t-i-e,r=Math.abs(o+e)i.getMaxZoom()&&1 { + 'use strict'; + if ('serviceWorker' in navigator) { + navigator.serviceWorker.register('sw.js', { + scope: '/map/' + }).then(function (reg) { // registration worked + console.log('Registration succeeded. Scope is ' + reg.scope); + }).catch(function (error) { // registration failed + console.log('Registration failed with ' + error); + }); + }; +} + diff --git a/manifest.json b/manifest.json new file mode 100644 index 0000000..f8e6570 --- /dev/null +++ b/manifest.json @@ -0,0 +1 @@ +{ "name": "My map", "short_name": "Map", "icons": [{ "src": "images/favicon-128.png", "sizes": "128x128", "type": "image/png" }, { "src": "images/favicon-144.png", "sizes": "144x144", "type": "image/png" }, { "src": "images/favicon-150.png", "sizes": "150x150", "type": "image/png" }, { "src": "images/favicon-192.png", "sizes": "192x192", "type": "image/png" }, { "src": "images/favicon-256.png", "sizes": "256x256", "type": "image/png" }, { "src": "images/favicon-512.png", "sizes": "512x512", "type": "image/png" }], "lang": "fr", "start_url": "index.html", "display": "standalone", "background_color": "#FFC40D", "theme_color": "#FFC40D" } \ No newline at end of file