Commit df0a88c8 authored by Niels Holt's avatar Niels Holt

Merge branch 'release/5.0.0'

parents bff846ad 8fa0af30
......@@ -16,8 +16,6 @@
"Raven" : false
},
"allowInlineConfig": true,
"rules": {
"strict" : "error",
"camelcase" : "off",
......
<!DOCTYPE html>
<!--
<!--
*********************************************************************
OWNER : FCOO - Forsvarets Center for Operativ Oceanografi /
Defence Centre for Operational Oceanography
APPLICATION : {APPLICATION_NAME}
GITLAB VERSION: {VERSION}
BUILD : {BUILD}
BUILD : {BUILD}
CONTACT : info@fcoo.dk
*********************************************************************
-->
<html lang="da" style="font-size: 100%">
<html class="loading" lang="da" style="font-size: 100%">
<head>
<title>{TITLE}</title>
......@@ -24,21 +24,32 @@ CONTACT : info@fcoo.dk
<meta name="google" content="notranslate" />
<script type="text/javascript">
/* fcoo/fcoo-global-switches */
!function(i){"use strict";var n="ios"==function(){var n=navigator.userAgent||navigator.vendor||i.opera;return/windows phone/i.test(n)?"windows_phone":/android/i.test(n)?"android":/iPad|iPhone|iPod/.test(n)&&!i.MSStream?"ios":null}();i.L_DISABLE_3D=n}(this);
!function(i){
"use strict";
var n="ios"==function(){
var n=navigator.userAgent||navigator.vendor||i.opera;
return /windows phone/i.test(n) ?
"windows_phone" :
/android/i.test(n) ?
"android" :
/iPad|iPhone|iPod/.test(n) && !i.MSStream ?
"ios" : null
}();
i.L_DISABLE_3D=n
}(this);
</script>
<link href="{CSS_FILE_NAME}" rel="stylesheet">
</head>
<body class="loading">
<div class="fa leaflet-default-icon-path modernizr-mediaquery-media-query modernizr-mediaquery-min-max lang-flag-icon-flag lang-flag-icon-lang lang-flag-icon-flag-modernizr lang-flag-icon-lang-modernizr" style="display:none"></div>
<body>
<div class="loading"></div>
<div id="map"></div>
<script type="text/javascript" src="{JS_FILE_NAME}"></script>
<!-- Piwik -->
<!--
<!--
<script type="text/javascript">
var _paq = _paq || [];
_paq.push(['disableCookies']);
......
{
"defaults": {
"type": "info",
"becomeRead": "P1Y"
},
"messages": [
{
"id": "5.0.0",
"date": "2018-04-18",
"url": "data/ifm-maps-v5.0.0.md",
"title": {"da":"Ny version af Sejladsudsigt (v5.0.0)", "en":"New version of Marine Forecast (v5.0.0)"}
}
]
}
\ No newline at end of file
<da>
Velkommen til en ny version af Sejladsudsigt
Denne version er første skridt i en større opdatering og forbedring af Sejladsudsigt, som vi er startet på.
Der er mange nye ting på vej, men vi har ikke nogen fast tidsplan, da vi også har andre og nogen gange akutte opgaver.
I stedet for at samle alle opdateringerne i én samlet ny version, vil vi løbende lægge nye små forbedringer ud.
Nedenfor en en list over de nye ting i denne version.
Forslag og spørgsmål er stadig velkommen på <a href="mailto:info@fcoo.dk">info@fcoo.dk</a>.
</da>
<en>
Welcome to a new version of Marine Forecast
This version is the first step in a larger update and improvement of Marine Forecast that we have started on.
There are many new things on the way but we do not have a fixed time schedule since we also have other and sometimes urgent tasks.
Instead of lumping all the improvement in one new version, we will continue releasing new versions with small improvements.
Below is a list of the new things in this version.
Questions and suggestions are still welcome at <a href="mailto:info@fcoo.dk">info@fcoo.dk</a>.
</en>
- <da>Ny top-menu</da><en>New top-menu</en>
- <da>Beskeder og nyheder i top-menuen</da><en>Messages and news in the top-menu</en>
- <da>Opdatering af tidsvælger med forskellige farver for fortid og fremtid</da><en>Updating time-selector with different colours for the past and the future</en>
- <da>Forbedring af fejlmeddelelser og håndtering af manglende netværksforbindelse</da><en>Improved error-messages and handling of missing connection</en>
- <da>Alle mellemlange meteorologiske prognoser dækker hele verden</da><en>All medium range meteorological forecasts now covers the hole world</en>
- <da>Ny global skala for havtemperatur</da><en>New global scale for sea water temperature</en>
- <da>Ny global skala for lufttemperatur</da><en>New global scale for air temperature</en>
- <da>Ny global skala for salinitet</da><en>New global scale for salinity</en>
- <da>Opdatering og optimering af bagvedliggende interne systemer</da><en>Updating and optimizing of internal systems</en>
- <da>DMI har skiftet den prognosemodel, der beregner de meteorologiske prognoser for området omkring Danmark, fra HIRLAM-S03 (3km) til HARMONIE-NEA (2.5km). På <a target="_blank" href="https://www.dmi.dk">DMIs hjemmeside</a> kan man læse mere om skiftet</da><en>DMI has replaced the forecast model for the Scandinavian region from HIRLAM-S03 (3km) to HARMONIE-NEA (2.5km). Read more about the new model at <a target="_blank" href="https://www.dmi.dk">DMIs homepage</a></en>
- <da>DMIs prognosemodel for Grønland, HIRLAM-K05 (5km), lukkes, og den nye model HARMONIE-IGB (2.5km) er ikke tilgængelig endnu. Derfor er der pt. ingen korte meteorologiske prognoser for Grønland. Når den nye model er tilgængelig vil den blive tilføjet hurtigst muligt</da><en>DMIs forecast model for Greenland, HIRLAM-K05 (5km), will be shut down. The new model HARMONIE-IGB (2.5km) is not yet available, therefore the short-range weather forecast is removed from the Greenland area. The new model will be added, as soon as it is available</en>
......@@ -13,7 +13,7 @@
* @param String lang the language id
* @return String the localized text item or the id if there's no translation found
*/
//Temp fix: Adding paramete name for legends. Both with lower- and uppercase
var parameterPhrases = {
'Wave height' : {en:'Wave height', da: 'Bølgehøjde'},
......@@ -43,15 +43,15 @@
'knots' : {en:'knots', da: 'knob'},
'fraction' : {en:'fraction', da: 'fraktion'},
'meters' : {en:'meters', da: 'meter'},
'Significant wave height of combined wind waves and swell':
'Significant wave height of combined wind waves and swell':
{en:'Wave height', da: 'Bølgehøjde'}
};
$.each( parameterPhrases, function( key, langValues ){ //return;
window.i18next.addPhrase( key, langValues );
var Key = key.charAt(0).toUpperCase() + key.slice(1),
......@@ -157,7 +157,6 @@
'Sea level': 'Vandstand',
'Safety': 'Sikkerhed',
'Celestial information': 'Himmellegemer',
'Solar Terminator': 'Dag og nat',
'Firing warnings': 'Skydevarsler',
'Firing areas': 'Skydeområder',
'Select depth': 'Vælg dybde',
......
This diff is collapsed.
This diff is collapsed.
......@@ -22,9 +22,9 @@
<h1 class="show-for-lang-da">Sejladsudsigt</h1>
<h1 class="show-for-lang-en">Marine Forecast</h1>
<select id="select-area" onchange="onChange(this)"></select>
<select id="select-area" onchange="onChange(this)"></select>
<div id="map"></div>
<div id="map"></div>
</div>
<script src="leaflet.js"></script>
......@@ -32,7 +32,7 @@
var search = window.location.search,
isEn = search.toUpperCase().indexOf('LANG=EN') > -1,
baseHRef = window.location.href;
baseHRef = baseHRef.replace( window.location.hash, '');
baseHRef = baseHRef.replace( window.location.search, '');
baseHRef = baseHRef.replace( 'index.html', '');
......@@ -40,10 +40,10 @@
baseHRef = baseHRef + 'index.html' + (isEn ? '?lang=en' : '') + '#domain=';
function getHref( domain ){
function getHref( domain ){
return baseHRef + domain;
}
//Set lang-class and title
document.body.className = isEn ? 'lang-en' : 'lang-da';
document.title = 'fcoo.dk - ' + (isEn ? 'Marine Forecast' : 'Sejladsudsigt');
......@@ -62,13 +62,13 @@
//Set da- or en-name
for (i=0; i<areas.length; i++ )
areas[i].name = isEn ? areas[i].en : areas[i].da;
//Add options to <select>
var select = document.getElementById('select-area'),
addOption = function(select, text, value, selected){
addOption = function(select, text, value, selected){
var option = document.createElement('option');
if (value !== null)
option.value = value;
option.value = value;
option.innerHTML = text;
if (selected)
option.setAttribute("selected", "selected");
......@@ -78,18 +78,18 @@
function onChange( select ) {
var option = select.options[select.selectedIndex];
if (option.value)
selectAreaByIndex( option.value );
selectAreaByIndex( option.value );
};
//Add default option
addOption(select, isEn ? '** Select Area **' : '** Vælg Område **', null, true);
for (i=0; i<areas.length; i++ )
addOption(select, areas[i].name, i);
//Create Leaflet map
var minZoom = 1,
var minZoom = 1,
defaultZoom = 2,
maxZoom = 4,
style = {color: 'cornflowerblue', weight: 1, opacity: 0.5, fillOpacity:0.4},
......@@ -101,44 +101,43 @@
//For debug map.on('click', function(e){ console.log('mouse:',e.latlng, 'map-center', map.getCenter(), 'map-zoom', map.getZoom()); });
L.tileLayer(
'https://tiles{s}.fcoo.dk/tiles/tiles_bckgrnd_512_mercator_201508030000/{z}/{x}/{y}.png',
{minZoom: minZoom, maxZoom: maxZoom, subdomains:['01','02','03'], tileSize:512, continuousWorld: false
'https://tiles{s}.fcoo.dk/tiles/tiles_bckgrnd_512_mercator_201508030000/{z}/{x}/{y}.png',
{minZoom: minZoom, maxZoom: maxZoom, subdomains:['01','02','03'], tileSize:512, continuousWorld: false
}).addTo(map);
for (i=0; i<areas.length; i++ ){
var area = areas[i],
rect = L.rectangle(area.bounds, style).addTo(map);
rect = L.rectangle(area.bounds, style).addTo(map);
rect.options._area_index = i;
area.rect = rect;
rect.on('click', function( event ){ selectAreaByIndex( event.target.options._area_index ); });
rect.on('mousedown', function( event ){ event.target.setStyle( clickStyle ); });
rect.on('mouseover', function( event ){
rect.on('mouseover', function( event ){
var rect = event.target;
rect.setStyle( hoverStyle );
rect.setStyle( hoverStyle );
select.selectedIndex = rect.options._area_index + 1;
});
rect.on('mouseout', function( event ){
event.target.setStyle( style );
rect.on('mouseout', function( event ){
event.target.setStyle( style );
select.selectedIndex = 0;
});
rect._container.setAttribute('title', area.name);
//REMOVE DUE TO UNKNOWN BUG rect.getPane().setAttribute('title', area.name);
}
//Select the area
function selectAreaByIndex( index ) {
//Select the area
function selectAreaByIndex( index ) {
var area = areas[index];
area.rect.setStyle( clickStyle );
area.rect.setStyle( clickStyle );
window.location.href = area.href;// + (isEn ? '?lang=en' : '');
}
</script>
</script>
<!-- Piwik -->
<script type="text/javascript">
var _paq = _paq || [];
......
/* required styles */
.leaflet-map-pane,
.leaflet-pane,
.leaflet-tile,
.leaflet-marker-icon,
.leaflet-marker-shadow,
.leaflet-tile-pane,
.leaflet-tile-container,
.leaflet-overlay-pane,
.leaflet-shadow-pane,
.leaflet-marker-pane,
.leaflet-popup-pane,
.leaflet-overlay-pane svg,
.leaflet-pane > svg,
.leaflet-pane > canvas,
.leaflet-zoom-box,
.leaflet-image-layer,
.leaflet-layer {
......@@ -20,8 +16,6 @@
}
.leaflet-container {
overflow: hidden;
-ms-touch-action: none;
touch-action: none;
}
.leaflet-tile,
.leaflet-marker-icon,
......@@ -29,20 +23,53 @@
-webkit-user-select: none;
-moz-user-select: none;
user-select: none;
-webkit-user-drag: none;
-webkit-user-drag: none;
}
/* 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;
}
/* map is broken in FF if you have max-width: 100% on tiles */
.leaflet-container img {
/* .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 {
max-width: none !important;
max-height: none !important;
}
/* stupid Android 2 doesn't understand "max-width: none" properly */
.leaflet-container img.leaflet-image-layer {
max-width: 15000px !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;
......@@ -53,18 +80,26 @@
.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-tile-pane { z-index: 2; }
.leaflet-objects-pane { z-index: 3; }
.leaflet-overlay-pane { z-index: 4; }
.leaflet-shadow-pane { z-index: 5; }
.leaflet-marker-pane { z-index: 6; }
.leaflet-popup-pane { z-index: 7; }
.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;
......@@ -81,7 +116,8 @@
.leaflet-control {
position: relative;
z-index: 7;
z-index: 800;
pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */
pointer-events: auto;
}
.leaflet-top,
......@@ -125,7 +161,9 @@
/* zoom and fade animations */
.leaflet-fade-anim .leaflet-tile,
.leaflet-fade-anim .leaflet-tile {
will-change: opacity;
}
.leaflet-fade-anim .leaflet-popup {
opacity: 0;
-webkit-transition: opacity 0.2s linear;
......@@ -133,11 +171,17 @@
-o-transition: opacity 0.2s linear;
transition: opacity 0.2s linear;
}
.leaflet-fade-anim .leaflet-tile-loaded,
.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);
......@@ -145,8 +189,7 @@
transition: transform 0.25s cubic-bezier(0,0,0.25,1);
}
.leaflet-zoom-anim .leaflet-tile,
.leaflet-pan-anim .leaflet-tile,
.leaflet-touching .leaflet-zoom-animated {
.leaflet-pan-anim .leaflet-tile {
-webkit-transition: none;
-moz-transition: none;
-o-transition: none;
......@@ -160,24 +203,44 @@
/* cursors */
.leaflet-clickable {
.leaflet-interactive {
cursor: pointer;
}
.leaflet-container {
.leaflet-grab {
cursor: -webkit-grab;
cursor: -moz-grab;
}
.leaflet-crosshair,
.leaflet-crosshair .leaflet-interactive {
cursor: crosshair;
}
.leaflet-popup-pane,
.leaflet-control {
cursor: auto;
}
.leaflet-dragging .leaflet-container,
.leaflet-dragging .leaflet-clickable {
.leaflet-dragging .leaflet-grab,
.leaflet-dragging .leaflet-grab .leaflet-interactive,
.leaflet-dragging .leaflet-marker-draggable {
cursor: move;
cursor: -webkit-grabbing;
cursor: -moz-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 {
pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */
pointer-events: auto;
}
/* visual tweaks */
......@@ -250,7 +313,14 @@
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 */
......@@ -259,16 +329,10 @@
font: bold 18px 'Lucida Console', Monaco, monospace;
text-indent: 1px;
}
.leaflet-control-zoom-out {
font-size: 20px;
}
.leaflet-touch .leaflet-control-zoom-in {
.leaflet-touch .leaflet-control-zoom-in, .leaflet-touch .leaflet-control-zoom-out {
font-size: 22px;
}
.leaflet-touch .leaflet-control-zoom-out {
font-size: 24px;
}
/* layers control */
......@@ -304,6 +368,11 @@
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;
......@@ -318,6 +387,11 @@
margin: 5px -10px 5px -6px;
}
/* Default icon URLs */
.leaflet-default-icon-path {
background-image: url(images/marker-icon.png);
}
/* attribution and scale controls */
......@@ -355,8 +429,8 @@
font-size: 11px;
white-space: nowrap;
overflow: hidden;
-moz-box-sizing: content-box;
box-sizing: content-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
background: #fff;
background: rgba(255, 255, 255, 0.5);
......@@ -387,6 +461,7 @@
.leaflet-popup {
position: absolute;
text-align: center;
margin-bottom: 20px;
}
.leaflet-popup-content-wrapper {
padding: 1px;
......@@ -401,11 +476,13 @@
margin: 18px 0;
}
.leaflet-popup-tip-container {
margin: 0 auto;
width: 40px;
height: 20px;
position: relative;
position: absolute;
left: 50%;
margin-left: -20px;
overflow: hidden;
pointer-events: none;
}
.leaflet-popup-tip {
width: 17px;
......@@ -423,7 +500,7 @@
.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 {
......@@ -431,6 +508,7 @@
top: 0;
right: 0;
padding: 4px 4px 0 0;
border: none;
text-align: center;
width: 18px;
height: 14px;
......@@ -477,3 +555,82 @@
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;
}
This source diff could not be displayed because it is too large. You can view the blob instead.
{
"name": "ifm-maps",
"version": "4.3.1",
"version": "5.0.0",
"homepage": "https://github.com/FCOO/ifm-maps",
"authors": [
"Jesper Baasch-Larsen jla@fcoo.dk",
......@@ -12,22 +12,23 @@
"url": "git://github.com/FCOO/ifm-maps.git"
},
"dependencies": {
"fcoo-application": "fcoo/fcoo-application#^3.0.0",
"fcoo-leaflet": "fcoo/fcoo-leaflet#^2.1.0",
"jquery-ui": "1.12.1",
"fcoo-application": "fcoo/fcoo-application#^5.0.0",
"fcoo-leaflet": "fcoo/fcoo-leaflet#^4.0.0",
"jquery-ui": "^1.12.1",
"leaflet-control-position": "fcoo/leaflet-control-position#~0.2.5",
"leaflet-categorized-layers": "fcoo/leaflet-categorized-layers#^1.0.0",
"leaflet-categorized-layers": "fcoo/leaflet-categorized-layers#^2.0.0",
"leaflet-control-osm-geocoder": "https://github.com/k4r573n/leaflet-control-osm-geocoder.git",
"leaflet-time-slider": "fcoo/leaflet-time-slider#^3.0.0",
"leaflet-time-slider": "fcoo/leaflet-time-slider#^4.0.0",
"leaflet-control-vertical": "fcoo/leaflet-control-vertical#^2.0.0",
"leaflet-control-datetime": "fcoo/leaflet-control-datetime#~1.0.2",
"leaflet-tilelayer-wms-pydap": "fcoo/leaflet-tilelayer-wms-pydap#^2.1.0",
"leaflet-tilelayer-wms-fcoo": "fcoo/leaflet-tilelayer-wms-fcoo#^2.0.0",
"leaflet-geojsonlayer-fwarn": "fcoo/leaflet-geojsonlayer-fwarn#~1.0.0",
"leaflet-layer-sealevel-denmark": "fcoo/leaflet-layer-sealevel-denmark#~0.2.0",
"leaflet-layer-tides-greenland": "fcoo/leaflet-layer-tides-greenland#~0.1.5",
"leaflet-geojsonlayer-msi": "fcoo/leaflet-geojsonlayer-msi#~1.0.0",
"fcoo-leaflet-control-legend": "fcoo/fcoo-leaflet-control-legend#^1.1.0"
"leaflet-control-datetime": "fcoo/leaflet-control-datetime#^1.0.0",
"leaflet-tilelayer-wms-pydap": "fcoo/leaflet-tilelayer-wms-pydap#^4.0.0",
"leaflet-tilelayer-wms-fcoo": "fcoo/leaflet-tilelayer-wms-fcoo#^5.0.0",
"leaflet-geojsonlayer-fwarn"