Merge pull request #3467 from JLyne/leaflet
Update leaflet version (0.5.1 -> 1.7.1)
This commit is contained in:
commit
dbd073bddb
8 changed files with 14753 additions and 9134 deletions
|
|
@ -1,15 +1,12 @@
|
||||||
/* required styles */
|
/* required styles */
|
||||||
|
|
||||||
.leaflet-map-pane,
|
.leaflet-pane,
|
||||||
.leaflet-tile,
|
.leaflet-tile,
|
||||||
.leaflet-marker-icon,
|
.leaflet-marker-icon,
|
||||||
.leaflet-marker-shadow,
|
.leaflet-marker-shadow,
|
||||||
.leaflet-tile-pane,
|
.leaflet-tile-container,
|
||||||
.leaflet-overlay-pane,
|
.leaflet-pane > svg,
|
||||||
.leaflet-shadow-pane,
|
.leaflet-pane > canvas,
|
||||||
.leaflet-marker-pane,
|
|
||||||
.leaflet-popup-pane,
|
|
||||||
.leaflet-overlay-pane svg,
|
|
||||||
.leaflet-zoom-box,
|
.leaflet-zoom-box,
|
||||||
.leaflet-image-layer,
|
.leaflet-image-layer,
|
||||||
.leaflet-layer {
|
.leaflet-layer {
|
||||||
|
|
@ -19,7 +16,6 @@
|
||||||
}
|
}
|
||||||
.leaflet-container {
|
.leaflet-container {
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
-ms-touch-action: none;
|
|
||||||
}
|
}
|
||||||
.leaflet-tile,
|
.leaflet-tile,
|
||||||
.leaflet-marker-icon,
|
.leaflet-marker-icon,
|
||||||
|
|
@ -27,19 +23,58 @@
|
||||||
-webkit-user-select: none;
|
-webkit-user-select: none;
|
||||||
-moz-user-select: none;
|
-moz-user-select: none;
|
||||||
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-icon,
|
||||||
.leaflet-marker-shadow {
|
.leaflet-marker-shadow {
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
/* map is broken in FF if you have max-width: 100% on tiles */
|
/* .leaflet-container svg: reset svg max-width decleration shipped in Joomla! (joomla.org) 3.x */
|
||||||
.leaflet-container img {
|
/* .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-width: none !important;
|
||||||
|
max-height: none !important;
|
||||||
}
|
}
|
||||||
/* stupid Android 2 doesn't understand "max-width: none" properly */
|
|
||||||
.leaflet-container img.leaflet-image-layer {
|
.leaflet-container.leaflet-touch-zoom {
|
||||||
max-width: 15000px !important;
|
-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 {
|
.leaflet-tile {
|
||||||
filter: inherit;
|
filter: inherit;
|
||||||
visibility: hidden;
|
visibility: hidden;
|
||||||
|
|
@ -50,21 +85,44 @@
|
||||||
.leaflet-zoom-box {
|
.leaflet-zoom-box {
|
||||||
width: 0;
|
width: 0;
|
||||||
height: 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-pane { z-index: 400; }
|
||||||
.leaflet-objects-pane { z-index: 3; }
|
|
||||||
.leaflet-overlay-pane { z-index: 4; }
|
.leaflet-tile-pane { z-index: 200; }
|
||||||
.leaflet-shadow-pane { z-index: 5; }
|
.leaflet-overlay-pane { z-index: 400; }
|
||||||
.leaflet-marker-pane { z-index: 6; }
|
.leaflet-shadow-pane { z-index: 500; }
|
||||||
.leaflet-popup-pane { z-index: 7; }
|
.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 */
|
/* control positioning */
|
||||||
|
|
||||||
.leaflet-control {
|
.leaflet-control {
|
||||||
position: relative;
|
position: relative;
|
||||||
z-index: 7;
|
z-index: 800;
|
||||||
|
pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */
|
||||||
pointer-events: auto;
|
pointer-events: auto;
|
||||||
}
|
}
|
||||||
.leaflet-top,
|
.leaflet-top,
|
||||||
|
|
@ -108,31 +166,35 @@
|
||||||
|
|
||||||
/* zoom and fade animations */
|
/* zoom and fade animations */
|
||||||
|
|
||||||
.leaflet-fade-anim .leaflet-tile,
|
.leaflet-fade-anim .leaflet-tile {
|
||||||
|
will-change: opacity;
|
||||||
|
}
|
||||||
.leaflet-fade-anim .leaflet-popup {
|
.leaflet-fade-anim .leaflet-popup {
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
-webkit-transition: opacity 0.2s linear;
|
-webkit-transition: opacity 0.2s linear;
|
||||||
-moz-transition: opacity 0.2s linear;
|
-moz-transition: opacity 0.2s linear;
|
||||||
-o-transition: opacity 0.2s linear;
|
|
||||||
transition: opacity 0.2s linear;
|
transition: opacity 0.2s linear;
|
||||||
}
|
}
|
||||||
.leaflet-fade-anim .leaflet-tile-loaded,
|
|
||||||
.leaflet-fade-anim .leaflet-map-pane .leaflet-popup {
|
.leaflet-fade-anim .leaflet-map-pane .leaflet-popup {
|
||||||
opacity: 1;
|
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 {
|
.leaflet-zoom-anim .leaflet-zoom-animated {
|
||||||
-webkit-transition: -webkit-transform 0.25s cubic-bezier(0,0,0.25,1);
|
-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);
|
-moz-transition: -moz-transform 0.25s cubic-bezier(0,0,0.25,1);
|
||||||
-o-transition: -o-transform 0.25s cubic-bezier(0,0,0.25,1);
|
|
||||||
transition: 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-zoom-anim .leaflet-tile,
|
||||||
.leaflet-pan-anim .leaflet-tile,
|
.leaflet-pan-anim .leaflet-tile {
|
||||||
.leaflet-touching .leaflet-zoom-animated {
|
|
||||||
-webkit-transition: none;
|
-webkit-transition: none;
|
||||||
-moz-transition: none;
|
-moz-transition: none;
|
||||||
-o-transition: none;
|
|
||||||
transition: none;
|
transition: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -143,25 +205,47 @@
|
||||||
|
|
||||||
/* cursors */
|
/* cursors */
|
||||||
|
|
||||||
.leaflet-clickable {
|
.leaflet-interactive {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
.leaflet-container {
|
.leaflet-grab {
|
||||||
cursor: -webkit-grab;
|
cursor: -webkit-grab;
|
||||||
cursor: -moz-grab;
|
cursor: -moz-grab;
|
||||||
|
cursor: grab;
|
||||||
|
}
|
||||||
|
.leaflet-crosshair,
|
||||||
|
.leaflet-crosshair .leaflet-interactive {
|
||||||
|
cursor: crosshair;
|
||||||
}
|
}
|
||||||
.leaflet-popup-pane,
|
.leaflet-popup-pane,
|
||||||
.leaflet-control {
|
.leaflet-control {
|
||||||
cursor: auto;
|
cursor: auto;
|
||||||
}
|
}
|
||||||
.leaflet-dragging,
|
.leaflet-dragging .leaflet-grab,
|
||||||
.leaflet-dragging .leaflet-clickable,
|
.leaflet-dragging .leaflet-grab .leaflet-interactive,
|
||||||
.leaflet-dragging .leaflet-container {
|
.leaflet-dragging .leaflet-marker-draggable {
|
||||||
cursor: move;
|
cursor: move;
|
||||||
cursor: -webkit-grabbing;
|
cursor: -webkit-grabbing;
|
||||||
cursor: -moz-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 */
|
/* visual tweaks */
|
||||||
|
|
||||||
|
|
@ -176,9 +260,8 @@
|
||||||
outline: 2px solid orange;
|
outline: 2px solid orange;
|
||||||
}
|
}
|
||||||
.leaflet-zoom-box {
|
.leaflet-zoom-box {
|
||||||
border: 2px dotted #05f;
|
border: 2px dotted #38f;
|
||||||
background: white;
|
background: rgba(255,255,255,0.5);
|
||||||
opacity: 0.5;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -191,104 +274,88 @@
|
||||||
/* general toolbar styles */
|
/* general toolbar styles */
|
||||||
|
|
||||||
.leaflet-bar {
|
.leaflet-bar {
|
||||||
box-shadow: 0 0 8px rgba(0,0,0,0.4);
|
box-shadow: 0 1px 5px rgba(0,0,0,0.65);
|
||||||
border: 1px solid #888;
|
border-radius: 4px;
|
||||||
-webkit-border-radius: 5px;
|
|
||||||
border-radius: 5px;
|
|
||||||
}
|
}
|
||||||
.leaflet-bar-part {
|
.leaflet-bar a,
|
||||||
background-color: rgba(255, 255, 255, 0.8);
|
.leaflet-bar a:hover {
|
||||||
border-bottom: 1px solid #aaa;
|
background-color: #fff;
|
||||||
}
|
border-bottom: 1px solid #ccc;
|
||||||
.leaflet-bar-part-top {
|
width: 26px;
|
||||||
-webkit-border-radius: 4px 4px 0 0;
|
height: 26px;
|
||||||
border-radius: 4px 4px 0 0;
|
line-height: 26px;
|
||||||
}
|
display: block;
|
||||||
.leaflet-bar-part-bottom {
|
|
||||||
-webkit-border-radius: 0 0 4px 4px;
|
|
||||||
border-radius: 0 0 4px 4px;
|
|
||||||
border-bottom: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.leaflet-touch .leaflet-bar {
|
|
||||||
-webkit-border-radius: 10px;
|
|
||||||
border-radius: 10px;
|
|
||||||
}
|
|
||||||
.leaflet-touch .leaflet-bar-part {
|
|
||||||
border-bottom: 4px solid rgba(0,0,0,0.3);
|
|
||||||
}
|
|
||||||
.leaflet-touch .leaflet-bar-part-top {
|
|
||||||
-webkit-border-radius: 7px 7px 0 0;
|
|
||||||
border-radius: 7px 7px 0 0;
|
|
||||||
}
|
|
||||||
.leaflet-touch .leaflet-bar-part-bottom {
|
|
||||||
-webkit-border-radius: 0 0 7px 7px;
|
|
||||||
border-radius: 0 0 7px 7px;
|
|
||||||
border-bottom: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* zoom control */
|
|
||||||
|
|
||||||
.leaflet-container .leaflet-control-zoom {
|
|
||||||
margin-left: 10px;
|
|
||||||
margin-top: 10px;
|
|
||||||
}
|
|
||||||
.leaflet-control-zoom a {
|
|
||||||
width: 22px;
|
|
||||||
height: 22px;
|
|
||||||
text-align: center;
|
text-align: center;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
color: black;
|
color: black;
|
||||||
}
|
}
|
||||||
.leaflet-control-zoom a,
|
.leaflet-bar a,
|
||||||
.leaflet-control-layers-toggle {
|
.leaflet-control-layers-toggle {
|
||||||
background-position: 50% 50%;
|
background-position: 50% 50%;
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
.leaflet-control-zoom a:hover {
|
.leaflet-bar a:hover {
|
||||||
background-color: #fff;
|
background-color: #f4f4f4;
|
||||||
color: #777;
|
|
||||||
}
|
}
|
||||||
.leaflet-control-zoom-in {
|
.leaflet-bar a:first-child {
|
||||||
font: bold 18px/24px Arial, Helvetica, sans-serif;
|
border-top-left-radius: 4px;
|
||||||
|
border-top-right-radius: 4px;
|
||||||
}
|
}
|
||||||
.leaflet-control-zoom-out {
|
.leaflet-bar a:last-child {
|
||||||
font: bold 23px/20px Tahoma, Verdana, sans-serif;
|
border-bottom-left-radius: 4px;
|
||||||
|
border-bottom-right-radius: 4px;
|
||||||
|
border-bottom: none;
|
||||||
}
|
}
|
||||||
.leaflet-control-zoom a.leaflet-control-zoom-disabled {
|
.leaflet-bar a.leaflet-disabled {
|
||||||
cursor: default;
|
cursor: default;
|
||||||
background-color: rgba(255, 255, 255, 0.8);
|
background-color: #f4f4f4;
|
||||||
color: #bbb;
|
color: #bbb;
|
||||||
}
|
}
|
||||||
|
|
||||||
.leaflet-touch .leaflet-control-zoom a {
|
.leaflet-touch .leaflet-bar a {
|
||||||
width: 30px;
|
width: 30px;
|
||||||
height: 30px;
|
height: 30px;
|
||||||
|
line-height: 30px;
|
||||||
}
|
}
|
||||||
.leaflet-touch .leaflet-control-zoom-in {
|
.leaflet-touch .leaflet-bar a:first-child {
|
||||||
font-size: 24px;
|
border-top-left-radius: 2px;
|
||||||
line-height: 29px;
|
border-top-right-radius: 2px;
|
||||||
}
|
}
|
||||||
.leaflet-touch .leaflet-control-zoom-out {
|
.leaflet-touch .leaflet-bar a:last-child {
|
||||||
font-size: 28px;
|
border-bottom-left-radius: 2px;
|
||||||
line-height: 24px;
|
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 */
|
/* layers control */
|
||||||
|
|
||||||
.leaflet-control-layers {
|
.leaflet-control-layers {
|
||||||
box-shadow: 0 1px 7px rgba(0,0,0,0.4);
|
box-shadow: 0 1px 5px rgba(0,0,0,0.4);
|
||||||
background: #f8f8f9;
|
background: #fff;
|
||||||
-webkit-border-radius: 8px;
|
border-radius: 5px;
|
||||||
border-radius: 8px;
|
|
||||||
}
|
}
|
||||||
.leaflet-control-layers-toggle {
|
.leaflet-control-layers-toggle {
|
||||||
background-image: url(images/layers.png);
|
background-image: url(images/layers.png);
|
||||||
width: 36px;
|
width: 36px;
|
||||||
height: 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 {
|
.leaflet-touch .leaflet-control-layers-toggle {
|
||||||
width: 44px;
|
width: 44px;
|
||||||
height: 44px;
|
height: 44px;
|
||||||
|
|
@ -306,6 +373,11 @@
|
||||||
color: #333;
|
color: #333;
|
||||||
background: #fff;
|
background: #fff;
|
||||||
}
|
}
|
||||||
|
.leaflet-control-layers-scrollbar {
|
||||||
|
overflow-y: scroll;
|
||||||
|
overflow-x: hidden;
|
||||||
|
padding-right: 5px;
|
||||||
|
}
|
||||||
.leaflet-control-layers-selector {
|
.leaflet-control-layers-selector {
|
||||||
margin-top: 2px;
|
margin-top: 2px;
|
||||||
position: relative;
|
position: relative;
|
||||||
|
|
@ -320,12 +392,17 @@
|
||||||
margin: 5px -10px 5px -6px;
|
margin: 5px -10px 5px -6px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Default icon URLs */
|
||||||
|
.leaflet-default-icon-path {
|
||||||
|
background-image: url(images/marker-icon.png);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* attribution and scale controls */
|
/* attribution and scale controls */
|
||||||
|
|
||||||
.leaflet-container .leaflet-control-attribution {
|
.leaflet-container .leaflet-control-attribution {
|
||||||
background-color: rgba(255, 255, 255, 0.7);
|
background: #fff;
|
||||||
box-shadow: 0 0 5px #bbb;
|
background: rgba(255, 255, 255, 0.7);
|
||||||
margin: 0;
|
margin: 0;
|
||||||
}
|
}
|
||||||
.leaflet-control-attribution,
|
.leaflet-control-attribution,
|
||||||
|
|
@ -333,6 +410,12 @@
|
||||||
padding: 0 5px;
|
padding: 0 5px;
|
||||||
color: #333;
|
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-attribution,
|
||||||
.leaflet-container .leaflet-control-scale {
|
.leaflet-container .leaflet-control-scale {
|
||||||
font-size: 11px;
|
font-size: 11px;
|
||||||
|
|
@ -346,21 +429,21 @@
|
||||||
.leaflet-control-scale-line {
|
.leaflet-control-scale-line {
|
||||||
border: 2px solid #777;
|
border: 2px solid #777;
|
||||||
border-top: none;
|
border-top: none;
|
||||||
color: black;
|
|
||||||
line-height: 1.1;
|
line-height: 1.1;
|
||||||
padding: 2px 5px 1px;
|
padding: 2px 5px 1px;
|
||||||
font-size: 11px;
|
font-size: 11px;
|
||||||
text-shadow: 1px 1px 1px #fff;
|
|
||||||
background-color: rgba(255, 255, 255, 0.5);
|
|
||||||
box-shadow: 0 -1px 5px rgba(0, 0, 0, 0.2);
|
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
overflow: hidden;
|
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) {
|
.leaflet-control-scale-line:not(:first-child) {
|
||||||
border-top: 2px solid #777;
|
border-top: 2px solid #777;
|
||||||
border-bottom: none;
|
border-bottom: none;
|
||||||
margin-top: -2px;
|
margin-top: -2px;
|
||||||
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2);
|
|
||||||
}
|
}
|
||||||
.leaflet-control-scale-line:not(:first-child):not(:last-child) {
|
.leaflet-control-scale-line:not(:first-child):not(:last-child) {
|
||||||
border-bottom: 2px solid #777;
|
border-bottom: 2px solid #777;
|
||||||
|
|
@ -368,12 +451,13 @@
|
||||||
|
|
||||||
.leaflet-touch .leaflet-control-attribution,
|
.leaflet-touch .leaflet-control-attribution,
|
||||||
.leaflet-touch .leaflet-control-layers,
|
.leaflet-touch .leaflet-control-layers,
|
||||||
.leaflet-touch .leaflet-control-zoom {
|
.leaflet-touch .leaflet-bar {
|
||||||
box-shadow: none;
|
box-shadow: none;
|
||||||
}
|
}
|
||||||
.leaflet-touch .leaflet-control-layers,
|
.leaflet-touch .leaflet-control-layers,
|
||||||
.leaflet-touch .leaflet-control-zoom {
|
.leaflet-touch .leaflet-bar {
|
||||||
border: 4px solid rgba(0,0,0,0.3);
|
border: 2px solid rgba(0,0,0,0.2);
|
||||||
|
background-clip: padding-box;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -382,50 +466,53 @@
|
||||||
.leaflet-popup {
|
.leaflet-popup {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
|
margin-bottom: 20px;
|
||||||
}
|
}
|
||||||
.leaflet-popup-content-wrapper {
|
.leaflet-popup-content-wrapper {
|
||||||
padding: 1px;
|
padding: 1px;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
-webkit-border-radius: 20px;
|
border-radius: 12px;
|
||||||
border-radius: 20px;
|
|
||||||
}
|
}
|
||||||
.leaflet-popup-content {
|
.leaflet-popup-content {
|
||||||
margin: 14px 20px;
|
margin: 13px 19px;
|
||||||
line-height: 1.4;
|
line-height: 1.4;
|
||||||
}
|
}
|
||||||
.leaflet-popup-content p {
|
.leaflet-popup-content p {
|
||||||
margin: 18px 0;
|
margin: 18px 0;
|
||||||
}
|
}
|
||||||
.leaflet-popup-tip-container {
|
.leaflet-popup-tip-container {
|
||||||
margin: 0 auto;
|
|
||||||
width: 40px;
|
width: 40px;
|
||||||
height: 20px;
|
height: 20px;
|
||||||
position: relative;
|
position: absolute;
|
||||||
|
left: 50%;
|
||||||
|
margin-left: -20px;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
pointer-events: none;
|
||||||
}
|
}
|
||||||
.leaflet-popup-tip {
|
.leaflet-popup-tip {
|
||||||
width: 15px;
|
width: 17px;
|
||||||
height: 15px;
|
height: 17px;
|
||||||
padding: 1px;
|
padding: 1px;
|
||||||
|
|
||||||
margin: -8px auto 0;
|
margin: -10px auto 0;
|
||||||
|
|
||||||
-webkit-transform: rotate(45deg);
|
-webkit-transform: rotate(45deg);
|
||||||
-moz-transform: rotate(45deg);
|
-moz-transform: rotate(45deg);
|
||||||
-ms-transform: rotate(45deg);
|
-ms-transform: rotate(45deg);
|
||||||
-o-transform: rotate(45deg);
|
|
||||||
transform: rotate(45deg);
|
transform: rotate(45deg);
|
||||||
}
|
}
|
||||||
.leaflet-popup-content-wrapper, .leaflet-popup-tip {
|
.leaflet-popup-content-wrapper,
|
||||||
|
.leaflet-popup-tip {
|
||||||
background: white;
|
background: white;
|
||||||
|
color: #333;
|
||||||
box-shadow: 0 3px 14px rgba(0,0,0,0.4);
|
box-shadow: 0 3px 14px rgba(0,0,0,0.4);
|
||||||
}
|
}
|
||||||
.leaflet-container a.leaflet-popup-close-button {
|
.leaflet-container a.leaflet-popup-close-button {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 0;
|
top: 0;
|
||||||
right: 0;
|
right: 0;
|
||||||
padding: 4px 5px 0 0;
|
padding: 4px 4px 0 0;
|
||||||
|
border: none;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
width: 18px;
|
width: 18px;
|
||||||
height: 14px;
|
height: 14px;
|
||||||
|
|
@ -444,6 +531,27 @@
|
||||||
border-top: 1px solid #ddd;
|
border-top: 1px solid #ddd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.leaflet-oldie .leaflet-popup-content-wrapper {
|
||||||
|
-ms-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 */
|
/* div icon */
|
||||||
|
|
||||||
|
|
@ -451,7 +559,82 @@
|
||||||
background: #fff;
|
background: #fff;
|
||||||
border: 1px solid #666;
|
border: 1px solid #666;
|
||||||
}
|
}
|
||||||
.leaflet-editing-icon {
|
|
||||||
-webkit-border-radius: 2px;
|
|
||||||
border-radius: 2px;
|
/* 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;
|
||||||
}
|
}
|
||||||
|
|
@ -1,57 +0,0 @@
|
||||||
.leaflet-vml-shape {
|
|
||||||
width: 1px;
|
|
||||||
height: 1px;
|
|
||||||
}
|
|
||||||
.lvml {
|
|
||||||
behavior: url(#default#VML);
|
|
||||||
display: inline-block;
|
|
||||||
position: absolute;
|
|
||||||
}
|
|
||||||
|
|
||||||
.leaflet-control {
|
|
||||||
display: inline;
|
|
||||||
}
|
|
||||||
|
|
||||||
.leaflet-popup-tip {
|
|
||||||
width: 21px;
|
|
||||||
_width: 27px;
|
|
||||||
margin: 0 auto;
|
|
||||||
_margin-top: -3px;
|
|
||||||
|
|
||||||
filter: progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678);
|
|
||||||
-ms-filter: "progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)";
|
|
||||||
}
|
|
||||||
.leaflet-popup-tip-container {
|
|
||||||
margin-top: -1px;
|
|
||||||
}
|
|
||||||
.leaflet-popup-content-wrapper, .leaflet-popup-tip {
|
|
||||||
border: 1px solid #999;
|
|
||||||
}
|
|
||||||
.leaflet-popup-content-wrapper {
|
|
||||||
zoom: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
.leaflet-control-zoom,
|
|
||||||
.leaflet-control-layers {
|
|
||||||
border: 3px solid #999;
|
|
||||||
}
|
|
||||||
.leaflet-control-zoom a {
|
|
||||||
background-color: #eee;
|
|
||||||
}
|
|
||||||
.leaflet-control-zoom a:hover {
|
|
||||||
background-color: #fff;
|
|
||||||
}
|
|
||||||
.leaflet-control-layers-toggle {
|
|
||||||
}
|
|
||||||
.leaflet-control-attribution,
|
|
||||||
.leaflet-control-layers,
|
|
||||||
.leaflet-control-scale-line {
|
|
||||||
background: white;
|
|
||||||
}
|
|
||||||
.leaflet-zoom-box {
|
|
||||||
filter: alpha(opacity=50);
|
|
||||||
}
|
|
||||||
.leaflet-control-attribution {
|
|
||||||
border-top: 1px solid #bbb;
|
|
||||||
border-left: 1px solid #bbb;
|
|
||||||
}
|
|
||||||
|
|
@ -1,146 +1,45 @@
|
||||||
L.CustomMarker = L.Class.extend({
|
L.CustomMarker = L.Marker.extend({
|
||||||
|
|
||||||
includes: L.Mixin.Events,
|
|
||||||
|
|
||||||
options: {
|
options: {
|
||||||
contentCreator: undefined,
|
elementCreator: undefined,
|
||||||
shadowCreator: undefined,
|
shadowCreator: undefined,
|
||||||
clickable: true,
|
clickable: true,
|
||||||
draggable: false
|
draggable: false
|
||||||
},
|
},
|
||||||
|
|
||||||
initialize: function(latlng, options) {
|
initialize: function(latlng, options) {
|
||||||
|
//Dynmap - Pass options to CustomIcon
|
||||||
|
options.icon = new L.CustomIcon(options);
|
||||||
|
|
||||||
L.Util.setOptions(this, options);
|
L.Util.setOptions(this, options);
|
||||||
this._latlng = latlng;
|
this._latlng = latlng;
|
||||||
},
|
},
|
||||||
|
});
|
||||||
onAdd: function(map) {
|
|
||||||
this._map = map;
|
L.CustomIcon = L.DivIcon.extend({
|
||||||
|
options: {
|
||||||
if (!this._element && this.options.elementCreator) {
|
elementCreator: function() {
|
||||||
this._element = this.options.elementCreator();
|
return document.createElement('div');
|
||||||
|
},
|
||||||
this._element.className += ' leaflet-marker-icon';
|
shadowCreator: function() { },
|
||||||
|
className: '', //Remove divIcon class
|
||||||
this._initInteraction();
|
},
|
||||||
}
|
|
||||||
if (!this._shadow && this.options.shadowCreator) {
|
initialize: function(options) {
|
||||||
this._shadow = this.options.shadowCreator();
|
L.Util.setOptions(this, options);
|
||||||
}
|
},
|
||||||
|
|
||||||
if (this._element) {
|
createIcon() {
|
||||||
map._panes.markerPane.appendChild(this._element);
|
//Call elementCreator to create icon
|
||||||
}
|
var icon = this.options.elementCreator(),
|
||||||
if (this._shadow) {
|
className = icon.className;
|
||||||
map._panes.shadowPane.appendChild(this._shadow);
|
|
||||||
}
|
icon.className += ' leaflet-marker-icon'; //Required for correct styling
|
||||||
|
|
||||||
map.on('viewreset', this._reset, this);
|
return icon;
|
||||||
this._reset();
|
},
|
||||||
if (map.options.zoomAnimation && map.options.markerZoomAnimation) {
|
|
||||||
map.on('zoomanim', this._animateZoom, this);
|
createShadow() {
|
||||||
}
|
return this.options.shadowCreator();
|
||||||
},
|
}
|
||||||
|
|
||||||
onRemove: function(map) {
|
|
||||||
if (this._element) {
|
|
||||||
map._panes.markerPane.removeChild(this._element);
|
|
||||||
}
|
|
||||||
if (this._shadow) {
|
|
||||||
map._panes.shadowPane.removeChild(this._elementShadow);
|
|
||||||
}
|
|
||||||
|
|
||||||
map.off('viewreset', this._reset, this);
|
|
||||||
|
|
||||||
map = null;
|
|
||||||
},
|
|
||||||
|
|
||||||
getLatLng: function() {
|
|
||||||
return this._latlng;
|
|
||||||
},
|
|
||||||
|
|
||||||
setLatLng: function(latlng) {
|
|
||||||
this._latlng = latlng;
|
|
||||||
this._reset();
|
|
||||||
},
|
|
||||||
|
|
||||||
_animateZoom: function (opt) {
|
|
||||||
var pos = this._map._latLngToNewLayerPoint(this._latlng, opt.zoom, opt.center);
|
|
||||||
L.DomUtil.setPosition(this._element, pos);
|
|
||||||
this._element.style.zIndex = pos.y;
|
|
||||||
},
|
|
||||||
|
|
||||||
_reset: function() {
|
|
||||||
if(this._map == null)
|
|
||||||
return;
|
|
||||||
var pos = this._map.latLngToLayerPoint(this._latlng);
|
|
||||||
|
|
||||||
if (this._element) {
|
|
||||||
L.DomUtil.setPosition(this._element, pos);
|
|
||||||
}
|
|
||||||
if (this._shadow) {
|
|
||||||
L.DomUtil.setPosition(this._shadow, pos);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this._element) {
|
|
||||||
this._element.style.zIndex = pos.y;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
_initInteraction: function() {
|
|
||||||
if (this._element && this.options.clickable) {
|
|
||||||
this._element.className += ' leaflet-clickable';
|
|
||||||
|
|
||||||
L.DomEvent.addListener(this._element, 'click', this._onMouseClick, this);
|
|
||||||
|
|
||||||
var events = ['dblclick', 'mousedown', 'mouseover', 'mouseout'];
|
|
||||||
for (var i = 0; i < events.length; i++) {
|
|
||||||
L.DomEvent.addListener(this._element, events[i], this._fireMouseEvent, this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this._element && L.Handler.MarkerDrag) {
|
|
||||||
this.dragging = new L.Handler.MarkerDrag(this);
|
|
||||||
|
|
||||||
if (this.options.draggable) {
|
|
||||||
this.dragging.enable();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
var animation = (map.options.zoomAnimation && map.options.markerZoomAnimation);
|
|
||||||
if (this._element)
|
|
||||||
this._element.className += animation ? ' leaflet-zoom-animated' : ' leaflet-zoom-hide';
|
|
||||||
},
|
|
||||||
|
|
||||||
_onMouseClick: function(e) {
|
|
||||||
L.DomEvent.stopPropagation(e);
|
|
||||||
if (this.dragging && this.dragging.moved()) { return; }
|
|
||||||
this.fire(e.type);
|
|
||||||
},
|
|
||||||
|
|
||||||
_fireMouseEvent: function(e) {
|
|
||||||
this.fire(e.type);
|
|
||||||
L.DomEvent.stopPropagation(e);
|
|
||||||
},
|
|
||||||
|
|
||||||
openPopup: function() {
|
|
||||||
this._popup.setLatLng(this._latlng);
|
|
||||||
this._map.openPopup(this._popup);
|
|
||||||
|
|
||||||
return this;
|
|
||||||
},
|
|
||||||
|
|
||||||
closePopup: function() {
|
|
||||||
if (this._popup) {
|
|
||||||
this._popup._close();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
bindPopup: function(content, options) {
|
|
||||||
this._popup = new L.Popup(options);
|
|
||||||
this._popup.setContent(content);
|
|
||||||
this.on('click', this.openPopup, this);
|
|
||||||
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
@ -70,271 +70,179 @@ var DynmapLayerControl = L.Control.Layers.extend({
|
||||||
this._lastZIndex++;
|
this._lastZIndex++;
|
||||||
layer.setZIndex(this._lastZIndex);
|
layer.setZIndex(this._lastZIndex);
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
|
|
||||||
// Function override to convert the position-based ordering into the id-based ordering
|
|
||||||
_onInputClick: function () {
|
|
||||||
var i, input, obj,
|
|
||||||
inputs = this._form.getElementsByTagName('input'),
|
|
||||||
inputsLen = inputs.length,
|
|
||||||
baseLayer;
|
|
||||||
|
|
||||||
this._handlingClick = true;
|
|
||||||
|
|
||||||
// Convert ID to pos
|
|
||||||
var id2pos = {};
|
|
||||||
for (i in this._layers) {
|
|
||||||
id2pos[this._layers[i].id] = i;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; i < inputsLen; i++) {
|
|
||||||
input = inputs[i];
|
|
||||||
obj = this._layers[id2pos[input.layerId]];
|
|
||||||
|
|
||||||
if (input.checked && !this._map.hasLayer(obj.layer)) {
|
|
||||||
this._map.addLayer(obj.layer);
|
|
||||||
if (!obj.overlay) {
|
|
||||||
baseLayer = obj.layer;
|
|
||||||
}
|
|
||||||
} else if (!input.checked && this._map.hasLayer(obj.layer)) {
|
|
||||||
this._map.removeLayer(obj.layer);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (baseLayer) {
|
|
||||||
this._map.setZoom(this._map.getZoom());
|
|
||||||
this._map.fire('baselayerchange', {layer: baseLayer});
|
|
||||||
}
|
|
||||||
|
|
||||||
this._handlingClick = false;
|
|
||||||
},
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
var DynmapTileLayer = L.TileLayer.extend({
|
var DynmapTileLayer = L.TileLayer.extend({
|
||||||
_currentzoom: undefined,
|
_namedTiles: {},
|
||||||
getProjection: function() {
|
_cachedTileUrls: {},
|
||||||
return this.projection;
|
_loadQueue: [],
|
||||||
},
|
_loadingTiles: [],
|
||||||
onTileUpdated: function(tile, tileName) {
|
|
||||||
var src = this.dynmap.getTileUrl(tileName);
|
|
||||||
tile.attr('src', src);
|
|
||||||
tile.show();
|
|
||||||
},
|
|
||||||
|
|
||||||
getTileName: function(tilePoint, zoom) {
|
createTile: function(coords, done) {
|
||||||
throw "getTileName not implemented";
|
var me = this,
|
||||||
},
|
tile = document.createElement('img');
|
||||||
|
|
||||||
getTileUrl: function(tilePoint, zoom) {
|
if (this.options.crossOrigin || this.options.crossOrigin === '') {
|
||||||
var tileName = this.getTileName(tilePoint, zoom);
|
tile.crossOrigin = this.options.crossOrigin === true ? '' : this.options.crossOrigin;
|
||||||
var url = this._cachedTileUrls[tileName];
|
}
|
||||||
if (!url) {
|
|
||||||
this._cachedTileUrls[tileName] = url = this.options.dynmap.getTileUrl(tileName);
|
|
||||||
}
|
|
||||||
return url;
|
|
||||||
},
|
|
||||||
|
|
||||||
updateNamedTile: function(name) {
|
tile.alt = '';
|
||||||
var tile = this._namedTiles[name];
|
tile.setAttribute('role', 'presentation');
|
||||||
delete this._cachedTileUrls[name];
|
|
||||||
if (tile) {
|
|
||||||
this.updateTile(tile);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
updateTile: function(tile) {
|
//Dynmap - Tile names
|
||||||
this._loadTile(tile, tile.tilePoint, this._map.getZoom());
|
tile.tileName = this.getTileName(coords);
|
||||||
},
|
this._namedTiles[tile.tileName] = tile;
|
||||||
// Override to fix loads completing after layer removed
|
|
||||||
_addTilesFromCenterOut: function(bounds) {
|
|
||||||
if(this._container == null) // Ignore if we've stopped being active layer
|
|
||||||
return;
|
|
||||||
var queue = [],
|
|
||||||
center = bounds.getCenter();
|
|
||||||
|
|
||||||
for (var j = bounds.min.y; j <= bounds.max.y; j++) {
|
tile.onload = function() {
|
||||||
for (var i = bounds.min.x; i <= bounds.max.x; i++) {
|
me._tileOnLoad(done, tile);
|
||||||
if ((i + ':' + j) in this._tiles) { continue; }
|
|
||||||
queue.push(new L.Point(i, j));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// load tiles in order of their distance to center
|
//Dynmap - Update load queue
|
||||||
queue.sort(function(a, b) {
|
|
||||||
return a.distanceTo(center) - b.distanceTo(center);
|
|
||||||
});
|
|
||||||
|
|
||||||
var fragment = document.createDocumentFragment();
|
|
||||||
|
|
||||||
this._tilesToLoad = queue.length;
|
|
||||||
for (var k = 0, len = this._tilesToLoad; k < len; k++) {
|
|
||||||
this._addTile(queue[k], fragment);
|
|
||||||
}
|
|
||||||
|
|
||||||
this._container.appendChild(fragment);
|
|
||||||
},
|
|
||||||
//Copy and mod of Leaflet method - marked changes with Dynmap: to simplify reintegration
|
|
||||||
_addTile: function(tilePoint, container) {
|
|
||||||
var tilePos = this._getTilePos(tilePoint),
|
|
||||||
zoom = this._map.getZoom(),
|
|
||||||
key = tilePoint.x + ':' + tilePoint.y,
|
|
||||||
name = this.getTileName(tilePoint, zoom), //Dynmap
|
|
||||||
tileLimit = (1 << zoom);
|
|
||||||
|
|
||||||
// wrap tile coordinates
|
|
||||||
if (!this.options.continuousWorld) {
|
|
||||||
if (!this.options.noWrap) {
|
|
||||||
tilePoint.x = ((tilePoint.x % tileLimit) + tileLimit) % tileLimit;
|
|
||||||
} else if (tilePoint.x < 0 || tilePoint.x >= tileLimit) {
|
|
||||||
this._tilesToLoad--;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tilePoint.y < 0 || tilePoint.y >= tileLimit) {
|
|
||||||
this._tilesToLoad--;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// create tile
|
|
||||||
var tile = this._createTile();
|
|
||||||
tile.tileName = name; //Dynmap
|
|
||||||
tile.tilePoint = tilePoint; //Dynmap
|
|
||||||
L.DomUtil.setPosition(tile, tilePos);
|
|
||||||
|
|
||||||
this._tiles[key] = tile;
|
|
||||||
this._namedTiles[name] = tile; //Dynmap
|
|
||||||
|
|
||||||
if (this.options.scheme == 'tms') {
|
|
||||||
tilePoint.y = tileLimit - tilePoint.y - 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
this._loadTile(tile, tilePoint, zoom);
|
|
||||||
|
|
||||||
container.appendChild(tile);
|
|
||||||
},
|
|
||||||
_loadTile: function(tile, tilePoint, zoom) {
|
|
||||||
var me = this;
|
|
||||||
tile._layer = this;
|
|
||||||
function done() {
|
|
||||||
me._loadingTiles.splice(me._loadingTiles.indexOf(tile), 1);
|
me._loadingTiles.splice(me._loadingTiles.indexOf(tile), 1);
|
||||||
me._nextLoadTile();
|
me._tickLoadQueue();
|
||||||
}
|
|
||||||
tile.onload = function(e) {
|
|
||||||
me._tileOnLoad.apply(this, [e]);
|
|
||||||
done();
|
|
||||||
}
|
|
||||||
tile.onerror = function() {
|
|
||||||
me._tileOnError.apply(this);
|
|
||||||
done();
|
|
||||||
}
|
|
||||||
tile.loadSrc = function() {
|
|
||||||
me._loadingTiles.push(tile);
|
|
||||||
tile.src = me.getTileUrl(tilePoint, zoom);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
tile.onerror = function() {
|
||||||
|
me._tileOnError(done, tile);
|
||||||
|
|
||||||
|
//Dynmap - Update load queue
|
||||||
|
me._loadingTiles.splice(me._loadingTiles.indexOf(tile), 1);
|
||||||
|
me._tickLoadQueue();
|
||||||
|
};
|
||||||
|
|
||||||
|
//Dynmap - Queue for loading
|
||||||
|
tile.url = this.getTileUrl(coords);
|
||||||
this._loadQueue.push(tile);
|
this._loadQueue.push(tile);
|
||||||
this._nextLoadTile();
|
this._tickLoadQueue();
|
||||||
},
|
|
||||||
_nextLoadTile: function() {
|
|
||||||
if (this._loadingTiles.length > 4) { return; }
|
|
||||||
var next = this._loadQueue.shift();
|
|
||||||
if (!next) { return; }
|
|
||||||
|
|
||||||
next.loadSrc();
|
return tile;
|
||||||
},
|
},
|
||||||
|
|
||||||
_removeOtherTiles: function(bounds) {
|
_abortLoading: function() {
|
||||||
var kArr, x, y, key;
|
var tile;
|
||||||
|
|
||||||
for (key in this._tiles) {
|
for (var i in this._tiles) {
|
||||||
if (this._tiles.hasOwnProperty(key)) {
|
if (!Object.prototype.hasOwnProperty.call(this._tiles, i)) {
|
||||||
kArr = key.split(':');
|
continue;
|
||||||
x = parseInt(kArr[0], 10);
|
}
|
||||||
y = parseInt(kArr[1], 10);
|
|
||||||
|
|
||||||
// remove tile if it's out of bounds
|
tile = this._tiles[i];
|
||||||
if (x < bounds.min.x || x > bounds.max.x || y < bounds.min.y || y > bounds.max.y) {
|
|
||||||
var tile = this._tiles[key];
|
//Dynmap - remove namedTiles entry
|
||||||
if (tile.parentNode === this._container) {
|
if (tile.coords.z !== this._tileZoom) {
|
||||||
this._container.removeChild(this._tiles[key]);
|
if (tile.loaded && tile.el && tile.el.tileName) {
|
||||||
}
|
delete this._namedTiles[tile.el.tileName];
|
||||||
delete this._namedTiles[tile.tileName];
|
}
|
||||||
delete this._tiles[key];
|
|
||||||
|
if(this._loadQueue.indexOf(tile.el) > -1) {
|
||||||
|
this._loadQueue.splice(this._loadQueue.indexOf(tile.el), 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(this._loadingTiles.indexOf(tile.el) > -1) {
|
||||||
|
this._loadingTiles.splice(this._loadingTiles.indexOf(tile.el), 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
L.TileLayer.prototype._abortLoading.call(this);
|
||||||
},
|
},
|
||||||
_updateTileSize: function() {
|
|
||||||
var newzoom = this._map.getZoom();
|
_removeTile: function(key) {
|
||||||
if (this._currentzoom !== newzoom) {
|
var tile = this._tiles[key];
|
||||||
var newTileSize = this.calculateTileSize(newzoom);
|
|
||||||
this._currentzoom = newzoom;
|
if (!tile) {
|
||||||
if (newTileSize !== this.options.tileSize) {
|
return;
|
||||||
this.setTileSize(newTileSize);
|
}
|
||||||
}
|
|
||||||
|
//Dynmap - remove namedTiles entry
|
||||||
|
var tileName = tile.el.tileName;
|
||||||
|
|
||||||
|
if (tileName) {
|
||||||
|
delete this._namedTiles[tileName];
|
||||||
|
}
|
||||||
|
|
||||||
|
//Dynmap - remove from load queue
|
||||||
|
if(this._loadingTiles.indexOf(tile.el) > -1) {
|
||||||
|
this._loadingTiles.splice(this._loadingTiles.indexOf(tile.el), 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(this._loadQueue.indexOf(tile.el) > -1) {
|
||||||
|
this._loadQueue.splice(this._loadQueue.indexOf(tile.el), 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
tile.el.onerror = null;
|
||||||
|
tile.el.onload = null;
|
||||||
|
|
||||||
|
L.TileLayer.prototype._removeTile.call(this, key);
|
||||||
|
},
|
||||||
|
|
||||||
|
getTileUrl: function(coords, timestamp) {
|
||||||
|
return this.getTileUrlFromName(this.getTileName(coords), timestamp);
|
||||||
|
},
|
||||||
|
|
||||||
|
getTileUrlFromName(tileName, timestamp) {
|
||||||
|
var url = this._cachedTileUrls[tileName];
|
||||||
|
|
||||||
|
if (!url) {
|
||||||
|
this._cachedTileUrls[tileName] = url = this.options.dynmap.getTileUrl(tileName);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(typeof timestamp !== 'undefined') {
|
||||||
|
url += (url.indexOf('?') === -1 ? '?timestamp=' + timestamp : '×tamp=' + timestamp);
|
||||||
|
}
|
||||||
|
|
||||||
|
return url;
|
||||||
|
},
|
||||||
|
|
||||||
|
getProjection: function() {
|
||||||
|
return this.projection;
|
||||||
|
},
|
||||||
|
|
||||||
|
_tickLoadQueue: function() {
|
||||||
|
if (this._loadingTiles.length > 4) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var next = this._loadQueue.shift();
|
||||||
|
|
||||||
|
if (!next) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this._loadingTiles.push(next);
|
||||||
|
next.src = next.url;
|
||||||
|
},
|
||||||
|
|
||||||
|
getTileName: function(coords) {
|
||||||
|
throw "getTileName not implemented";
|
||||||
|
},
|
||||||
|
|
||||||
|
updateNamedTile: function(name, timestamp) {
|
||||||
|
var tile = this._namedTiles[name];
|
||||||
|
|
||||||
|
if (tile) {
|
||||||
|
tile.url = this.getTileUrlFromName(name, timestamp);
|
||||||
|
this._loadQueue.push(tile);
|
||||||
|
this._tickLoadQueue();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
_reset: function() {
|
|
||||||
this._updateTileSize();
|
|
||||||
this._tiles = {};
|
|
||||||
this._namedTiles = {};
|
|
||||||
this._loadQueue = [];
|
|
||||||
this._loadingTiles = [];
|
|
||||||
this._cachedTileUrls = {};
|
|
||||||
this._initContainer();
|
|
||||||
this._container.innerHTML = '';
|
|
||||||
},
|
|
||||||
|
|
||||||
_update: function() {
|
|
||||||
this._updateTileSize();
|
|
||||||
var bounds = this._map.getPixelBounds(),
|
|
||||||
tileSize = this.options.tileSize;
|
|
||||||
|
|
||||||
var nwTilePoint = new L.Point(
|
|
||||||
Math.floor(bounds.min.x / tileSize),
|
|
||||||
Math.floor(bounds.min.y / tileSize)),
|
|
||||||
seTilePoint = new L.Point(
|
|
||||||
Math.floor(bounds.max.x / tileSize),
|
|
||||||
Math.floor(bounds.max.y / tileSize)),
|
|
||||||
tileBounds = new L.Bounds(nwTilePoint, seTilePoint);
|
|
||||||
|
|
||||||
this._addTilesFromCenterOut(tileBounds);
|
|
||||||
|
|
||||||
if (this.options.unloadInvisibleTiles) {
|
|
||||||
this._removeOtherTiles(tileBounds);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
/*calculateTileSize: function(zoom) {
|
|
||||||
return this.options.tileSize;
|
|
||||||
},*/
|
|
||||||
calculateTileSize: function(zoom) {
|
|
||||||
// zoomoutlevel: 0 when izoom > mapzoomin, else mapzoomin - izoom (which ranges from 0 till mapzoomin)
|
|
||||||
var izoom = this.options.maxZoom - zoom;
|
|
||||||
var zoominlevel = Math.max(0, this.options.mapzoomin - izoom);
|
|
||||||
return 128 << zoominlevel;
|
|
||||||
},
|
|
||||||
setTileSize: function(tileSize) {
|
|
||||||
this.options.tileSize = tileSize;
|
|
||||||
this._tiles = {};
|
|
||||||
this._createTileProto();
|
|
||||||
},
|
|
||||||
updateTileSize: function(zoom) {},
|
|
||||||
|
|
||||||
// Some helper functions.
|
// Some helper functions.
|
||||||
zoomprefix: function(amount) {
|
zoomprefix: function(amount) {
|
||||||
return 'zzzzzzzzzzzzzzzzzzzzzz'.substr(0, amount);
|
return 'zzzzzzzzzzzzzzzzzzzzzz'.substr(0, amount);
|
||||||
},
|
},
|
||||||
getTileInfo: function(tilePoint, zoom) {
|
|
||||||
|
getTileInfo: function(coords) {
|
||||||
// zoom: max zoomed in = this.options.maxZoom, max zoomed out = 0
|
// zoom: max zoomed in = this.options.maxZoom, max zoomed out = 0
|
||||||
// izoom: max zoomed in = 0, max zoomed out = this.options.maxZoom
|
// izoom: max zoomed in = 0, max zoomed out = this.options.maxZoom
|
||||||
// zoomoutlevel: izoom < mapzoomin -> 0, else -> izoom - mapzoomin (which ranges from 0 till mapzoomout)
|
// zoomoutlevel: izoom < mapzoomin -> 0, else -> izoom - mapzoomin (which ranges from 0 till mapzoomout)
|
||||||
var izoom = this.options.maxZoom - zoom;
|
var izoom = this._getZoomForUrl(),
|
||||||
var zoomoutlevel = Math.max(0, izoom - this.options.mapzoomin);
|
zoomoutlevel = Math.max(0, izoom - this.options.mapzoomin),
|
||||||
var scale = 1 << zoomoutlevel;
|
scale = 1 << zoomoutlevel,
|
||||||
var x = scale*tilePoint.x;
|
x = scale * coords.x,
|
||||||
var y = scale*tilePoint.y;
|
y = scale * coords.y;
|
||||||
|
|
||||||
return {
|
return {
|
||||||
prefix: this.options.prefix,
|
prefix: this.options.prefix,
|
||||||
nightday: (this.options.nightandday && this.options.dynmap.serverday) ? '_day' : '',
|
nightday: (this.options.nightandday && this.options.dynmap.serverday) ? '_day' : '',
|
||||||
|
|
|
||||||
|
|
@ -1,39 +1,43 @@
|
||||||
var HDProjection = DynmapProjection.extend({
|
var HDProjection = DynmapProjection.extend({
|
||||||
fromLocationToLatLng: function(location) {
|
fromLocationToLatLng: function(location) {
|
||||||
var wtp = this.options.worldtomap;
|
var wtp = this.options.worldtomap;
|
||||||
var xx = wtp[0]*location.x + wtp[1]*location.y + wtp[2]*location.z;
|
lat = wtp[3] * location.x + wtp[4] * location.y + wtp[5] * location.z,
|
||||||
var yy = wtp[3]*location.x + wtp[4]*location.y + wtp[5]*location.z;
|
lng = wtp[0] * location.x + wtp[1] * location.y + wtp[2] * location.z;
|
||||||
|
|
||||||
return new L.LatLng(
|
return new L.LatLng(
|
||||||
xx / (1 << this.options.mapzoomout)
|
-((128 - lat) / (1 << this.options.mapzoomout))
|
||||||
, (128-yy) / (1 << this.options.mapzoomout)
|
, lng / (1 << this.options.mapzoomout)
|
||||||
, true);
|
, location.y);
|
||||||
},
|
},
|
||||||
fromLatLngToLocation: function(latlon, y) {
|
fromLatLngToLocation: function(latlon, y) {
|
||||||
var ptw = this.options.maptoworld;
|
var ptw = this.options.maptoworld,
|
||||||
var lat = latlon.lat * (1 << this.options.mapzoomout);
|
lat = 128 + latlon.lat * (1 << this.options.mapzoomout),
|
||||||
var lon = 128 - latlon.lng * (1 << this.options.mapzoomout);
|
lng = latlon.lng * (1 << this.options.mapzoomout),
|
||||||
var x = ptw[0]*lat + ptw[1]*lon + ptw[2]*y;
|
x = ptw[0] * lng + ptw[1] * lat + ptw[2] * y,
|
||||||
var z = ptw[6]*lat + ptw[7]*lon + ptw[8]*y;
|
z = ptw[6] * lng + ptw[7] * lat + ptw[8] * y;
|
||||||
|
|
||||||
return { x: x, y: y, z: z };
|
return { x: x, y: y, z: z };
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
var HDMapType = DynmapTileLayer.extend({
|
var HDMapType = DynmapTileLayer.extend({
|
||||||
projection: undefined,
|
projection: undefined,
|
||||||
options: {
|
options: {
|
||||||
minZoom: 0,
|
minZoom: 0,
|
||||||
maxZoom: 0,
|
|
||||||
errorTileUrl: 'images/blank.png',
|
errorTileUrl: 'images/blank.png',
|
||||||
continuousWorld: true
|
tileSize: 128,
|
||||||
|
zoomReverse: true,
|
||||||
},
|
},
|
||||||
initialize: function(options) {
|
initialize: function(options) {
|
||||||
options.maxZoom = options.mapzoomin + options.mapzoomout;
|
options.maxZoom = options.mapzoomin + options.mapzoomout;
|
||||||
L.Util.setOptions(this, options);
|
options.maxNativeZoom = options.mapzoomout;
|
||||||
|
|
||||||
this.projection = new HDProjection($.extend({map: this}, options));
|
this.projection = new HDProjection($.extend({map: this}, options));
|
||||||
|
|
||||||
|
L.Util.setOptions(this, options);
|
||||||
},
|
},
|
||||||
getTileName: function(tilePoint, zoom) {
|
getTileName: function(coords) {
|
||||||
var info = this.getTileInfo(tilePoint, zoom);
|
var info = this.getTileInfo(coords);
|
||||||
// Y is inverted for HD-map.
|
// Y is inverted for HD-map.
|
||||||
info.y = -info.y;
|
info.y = -info.y;
|
||||||
info.scaledy = info.y >> 5;
|
info.scaledy = info.y >> 5;
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load diff
|
|
@ -177,34 +177,12 @@ DynMap.prototype = {
|
||||||
zoomAnimation: true,
|
zoomAnimation: true,
|
||||||
zoomControl: !me.nogui,
|
zoomControl: !me.nogui,
|
||||||
attributionControl: false,
|
attributionControl: false,
|
||||||
crs: L.extend({}, L.CRS, {
|
crs: L.CRS.Simple,
|
||||||
code: 'simple',
|
|
||||||
projection: {
|
|
||||||
project: function(latlng) {
|
|
||||||
// Direct translation of lat -> x, lng -> y.
|
|
||||||
return new L.Point(latlng.lat, latlng.lng);
|
|
||||||
},
|
|
||||||
unproject: function(point) {
|
|
||||||
// Direct translation of x -> lat, y -> lng.
|
|
||||||
return new L.LatLng(point.x, point.y);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
// a = 1; b = 2; c = 1; d = 0
|
|
||||||
// x = a * x + b; y = c * y + d
|
|
||||||
// End result is 1:1 values during transformation.
|
|
||||||
transformation: new L.Transformation(1, 0, 1, 0),
|
|
||||||
scale: function(zoom) {
|
|
||||||
// Equivalent to 2 raised to the power of zoom, but faster.
|
|
||||||
return (1 << zoom);
|
|
||||||
}
|
|
||||||
}),
|
|
||||||
continuousWorld: true,
|
|
||||||
worldCopyJump: false
|
worldCopyJump: false
|
||||||
});
|
});
|
||||||
window.map = map; // Placate Leaflet need for top-level 'map'....
|
window.map = map; // Placate Leaflet need for top-level 'map'....
|
||||||
|
|
||||||
map.on('zoomend', function() {
|
map.on('zoomend', function() {
|
||||||
me.maptype.updateTileSize(me.map.getZoom());
|
|
||||||
$(me).trigger('zoomchanged');
|
$(me).trigger('zoomchanged');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -717,7 +695,7 @@ DynMap.prototype = {
|
||||||
|
|
||||||
swtch(update.type, {
|
swtch(update.type, {
|
||||||
tile: function() {
|
tile: function() {
|
||||||
me.onTileUpdated(update.name,update.timestamp);
|
me.maptype.updateNamedTile(update.name, update.timestamp);
|
||||||
},
|
},
|
||||||
playerjoin: function() {
|
playerjoin: function() {
|
||||||
$(me).trigger('playerjoin', [ update.playerName ]);
|
$(me).trigger('playerjoin', [ update.playerName ]);
|
||||||
|
|
@ -754,7 +732,7 @@ DynMap.prototype = {
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
getTileUrl: function(tileName, always) {
|
getTileUrl: function(tileName) {
|
||||||
var me = this;
|
var me = this;
|
||||||
var tile = me.registeredTiles[tileName];
|
var tile = me.registeredTiles[tileName];
|
||||||
|
|
||||||
|
|
@ -764,25 +742,6 @@ DynMap.prototype = {
|
||||||
}
|
}
|
||||||
return tile;
|
return tile;
|
||||||
},
|
},
|
||||||
onTileUpdated: function(tileName,timestamp) {
|
|
||||||
var me = this;
|
|
||||||
var prev = this.registeredTiles[tileName];
|
|
||||||
var a_b = true;
|
|
||||||
if (prev && (prev.indexOf('upd=0') > 0))
|
|
||||||
a_b = false;
|
|
||||||
var url = me.options.url.tiles;
|
|
||||||
if (a_b) {
|
|
||||||
if (url.indexOf('?') > 0) {
|
|
||||||
this.registeredTiles[tileName] = url + escape(me.world.name + '/' + tileName) + '&upd=0';
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
this.registeredTiles[tileName] = url + escape(me.world.name + '/' + tileName) + '?upd=0';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
this.registeredTiles[tileName] = url + me.world.name + '/' + tileName;
|
|
||||||
me.maptype.updateNamedTile(tileName);
|
|
||||||
},
|
|
||||||
addPlayer: function(update) {
|
addPlayer: function(update) {
|
||||||
var me = this;
|
var me = this;
|
||||||
var player = me.players[update.account] = {
|
var player = me.players[update.account] = {
|
||||||
|
|
|
||||||
|
|
@ -94,7 +94,7 @@ componentconstructors['playermarkers'] = function(dynmap, configuration) {
|
||||||
var markerPosition = dynmap.getProjection().fromLocationToLatLng(player.location);
|
var markerPosition = dynmap.getProjection().fromLocationToLatLng(player.location);
|
||||||
player.marker.setLatLng(markerPosition);
|
player.marker.setLatLng(markerPosition);
|
||||||
// Update health
|
// Update health
|
||||||
if (configuration.showplayerhealth) {
|
if (configuration.showplayerhealth && player.healthContainer) {
|
||||||
if (player.health !== undefined && player.armor !== undefined) {
|
if (player.health !== undefined && player.armor !== undefined) {
|
||||||
player.healthContainer.css('display','block');
|
player.healthContainer.css('display','block');
|
||||||
player.healthBar.css('width', Math.ceil(player.health*2.5) + 'px');
|
player.healthBar.css('width', Math.ceil(player.health*2.5) + 'px');
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue