Merge pull request #3467 from JLyne/leaflet

Update leaflet version (0.5.1 -> 1.7.1)
This commit is contained in:
mikeprimm 2021-09-07 22:01:52 -05:00 committed by GitHub
commit dbd073bddb
8 changed files with 14753 additions and 9134 deletions

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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;
if (!this._element && this.options.elementCreator) {
this._element = this.options.elementCreator();
this._element.className += ' leaflet-marker-icon';
this._initInteraction();
}
if (!this._shadow && this.options.shadowCreator) {
this._shadow = this.options.shadowCreator();
}
if (this._element) {
map._panes.markerPane.appendChild(this._element);
}
if (this._shadow) {
map._panes.shadowPane.appendChild(this._shadow);
}
map.on('viewreset', this._reset, this);
this._reset();
if (map.options.zoomAnimation && map.options.markerZoomAnimation) {
map.on('zoomanim', this._animateZoom, this);
}
},
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;
}
}); });
L.CustomIcon = L.DivIcon.extend({
options: {
elementCreator: function() {
return document.createElement('div');
},
shadowCreator: function() { },
className: '', //Remove divIcon class
},
initialize: function(options) {
L.Util.setOptions(this, options);
},
createIcon() {
//Call elementCreator to create icon
var icon = this.options.elementCreator(),
className = icon.className;
icon.className += ' leaflet-marker-icon'; //Required for correct styling
return icon;
},
createShadow() {
return this.options.shadowCreator();
}
});

View file

@ -1,450 +1,358 @@
var DynmapProjection = L.Class.extend({ var DynmapProjection = L.Class.extend({
initialize: function(options) { initialize: function(options) {
L.Util.setOptions(this, options); L.Util.setOptions(this, options);
}, },
fromLocationToLatLng: function(location) { fromLocationToLatLng: function(location) {
throw "fromLocationToLatLng not implemented"; throw "fromLocationToLatLng not implemented";
}, },
fromLatLngToLocation: function(location) { fromLatLngToLocation: function(location) {
return null; return null;
} }
}); });
if (!Array.prototype.indexOf) { // polyfill for IE < 9 if (!Array.prototype.indexOf) { // polyfill for IE < 9
Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) { Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {
"use strict"; "use strict";
if (this === void 0 || this === null) { if (this === void 0 || this === null) {
throw new TypeError(); throw new TypeError();
} }
var t = Object(this); var t = Object(this);
var len = t.length >>> 0; var len = t.length >>> 0;
if (len === 0) { if (len === 0) {
return -1; return -1;
} }
var n = 0; var n = 0;
if (arguments.length > 0) { if (arguments.length > 0) {
n = Number(arguments[1]); n = Number(arguments[1]);
if (n !== n) { // shortcut for verifying if it's NaN if (n !== n) { // shortcut for verifying if it's NaN
n = 0; n = 0;
} else if (n !== 0 && n !== (1 / 0) && n !== -(1 / 0)) { } else if (n !== 0 && n !== (1 / 0) && n !== -(1 / 0)) {
n = (n > 0 || -1) * Math.floor(Math.abs(n)); n = (n > 0 || -1) * Math.floor(Math.abs(n));
} }
} }
if (n >= len) { if (n >= len) {
return -1; return -1;
} }
var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0); var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);
for (; k < len; k++) { for (; k < len; k++) {
if (k in t && t[k] === searchElement) { if (k in t && t[k] === searchElement) {
return k; return k;
} }
} }
return -1; return -1;
} }
} }
var DynmapLayerControl = L.Control.Layers.extend({ var DynmapLayerControl = L.Control.Layers.extend({
getPosition: function() { getPosition: function() {
return 'topleft'; return 'topleft';
}, },
// Function override to include pos // Function override to include pos
addOverlay: function(layer, name, pos) { addOverlay: function(layer, name, pos) {
this._addLayer(layer, name, true, pos); this._addLayer(layer, name, true, pos);
this._update(); this._update();
return this; return this;
}, },
// Function override to order layers by pos // Function override to order layers by pos
_addLayer: function (layer, name, overlay, pos) { _addLayer: function (layer, name, overlay, pos) {
var id = L.stamp(layer); var id = L.stamp(layer);
this._layers[pos] = { this._layers[pos] = {
layer: layer, layer: layer,
name: name, name: name,
overlay: overlay, overlay: overlay,
id: id id: id
}; };
if (this.options.autoZIndex && layer.setZIndex) { if (this.options.autoZIndex && layer.setZIndex) {
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, var DynmapTileLayer = L.TileLayer.extend({
inputs = this._form.getElementsByTagName('input'), _namedTiles: {},
inputsLen = inputs.length, _cachedTileUrls: {},
baseLayer; _loadQueue: [],
_loadingTiles: [],
this._handlingClick = true;
createTile: function(coords, done) {
// Convert ID to pos var me = this,
var id2pos = {}; tile = document.createElement('img');
for (i in this._layers) {
id2pos[this._layers[i].id] = i; if (this.options.crossOrigin || this.options.crossOrigin === '') {
} tile.crossOrigin = this.options.crossOrigin === true ? '' : this.options.crossOrigin;
}
for (i = 0; i < inputsLen; i++) {
input = inputs[i]; tile.alt = '';
obj = this._layers[id2pos[input.layerId]]; tile.setAttribute('role', 'presentation');
if (input.checked && !this._map.hasLayer(obj.layer)) { //Dynmap - Tile names
this._map.addLayer(obj.layer); tile.tileName = this.getTileName(coords);
if (!obj.overlay) { this._namedTiles[tile.tileName] = tile;
baseLayer = obj.layer;
} tile.onload = function() {
} else if (!input.checked && this._map.hasLayer(obj.layer)) { me._tileOnLoad(done, tile);
this._map.removeLayer(obj.layer);
} //Dynmap - Update load queue
} me._loadingTiles.splice(me._loadingTiles.indexOf(tile), 1);
me._tickLoadQueue();
if (baseLayer) { };
this._map.setZoom(this._map.getZoom());
this._map.fire('baselayerchange', {layer: baseLayer}); tile.onerror = function() {
} me._tileOnError(done, tile);
this._handlingClick = false; //Dynmap - Update load queue
}, me._loadingTiles.splice(me._loadingTiles.indexOf(tile), 1);
}); me._tickLoadQueue();
};
var DynmapTileLayer = L.TileLayer.extend({ //Dynmap - Queue for loading
_currentzoom: undefined, tile.url = this.getTileUrl(coords);
getProjection: function() { this._loadQueue.push(tile);
return this.projection; this._tickLoadQueue();
},
onTileUpdated: function(tile, tileName) { return tile;
var src = this.dynmap.getTileUrl(tileName); },
tile.attr('src', src);
tile.show(); _abortLoading: function() {
}, var tile;
getTileName: function(tilePoint, zoom) { for (var i in this._tiles) {
throw "getTileName not implemented"; if (!Object.prototype.hasOwnProperty.call(this._tiles, i)) {
}, continue;
}
getTileUrl: function(tilePoint, zoom) {
var tileName = this.getTileName(tilePoint, zoom); tile = this._tiles[i];
var url = this._cachedTileUrls[tileName];
if (!url) { //Dynmap - remove namedTiles entry
this._cachedTileUrls[tileName] = url = this.options.dynmap.getTileUrl(tileName); if (tile.coords.z !== this._tileZoom) {
} if (tile.loaded && tile.el && tile.el.tileName) {
return url; delete this._namedTiles[tile.el.tileName];
}, }
updateNamedTile: function(name) { if(this._loadQueue.indexOf(tile.el) > -1) {
var tile = this._namedTiles[name]; this._loadQueue.splice(this._loadQueue.indexOf(tile.el), 1);
delete this._cachedTileUrls[name]; }
if (tile) {
this.updateTile(tile); if(this._loadingTiles.indexOf(tile.el) > -1) {
} this._loadingTiles.splice(this._loadingTiles.indexOf(tile.el), 1);
}, }
}
updateTile: function(tile) { }
this._loadTile(tile, tile.tilePoint, this._map.getZoom());
}, L.TileLayer.prototype._abortLoading.call(this);
// Override to fix loads completing after layer removed },
_addTilesFromCenterOut: function(bounds) {
if(this._container == null) // Ignore if we've stopped being active layer _removeTile: function(key) {
return; var tile = this._tiles[key];
var queue = [],
center = bounds.getCenter(); if (!tile) {
return;
for (var j = bounds.min.y; j <= bounds.max.y; j++) { }
for (var i = bounds.min.x; i <= bounds.max.x; i++) {
if ((i + ':' + j) in this._tiles) { continue; } //Dynmap - remove namedTiles entry
queue.push(new L.Point(i, j)); var tileName = tile.el.tileName;
}
} if (tileName) {
delete this._namedTiles[tileName];
// load tiles in order of their distance to center }
queue.sort(function(a, b) {
return a.distanceTo(center) - b.distanceTo(center); //Dynmap - remove from load queue
}); if(this._loadingTiles.indexOf(tile.el) > -1) {
this._loadingTiles.splice(this._loadingTiles.indexOf(tile.el), 1);
var fragment = document.createDocumentFragment(); }
this._tilesToLoad = queue.length; if(this._loadQueue.indexOf(tile.el) > -1) {
for (var k = 0, len = this._tilesToLoad; k < len; k++) { this._loadQueue.splice(this._loadQueue.indexOf(tile.el), 1);
this._addTile(queue[k], fragment); }
}
tile.el.onerror = null;
this._container.appendChild(fragment); tile.el.onload = null;
},
//Copy and mod of Leaflet method - marked changes with Dynmap: to simplify reintegration L.TileLayer.prototype._removeTile.call(this, key);
_addTile: function(tilePoint, container) { },
var tilePos = this._getTilePos(tilePoint),
zoom = this._map.getZoom(), getTileUrl: function(coords, timestamp) {
key = tilePoint.x + ':' + tilePoint.y, return this.getTileUrlFromName(this.getTileName(coords), timestamp);
name = this.getTileName(tilePoint, zoom), //Dynmap },
tileLimit = (1 << zoom);
getTileUrlFromName(tileName, timestamp) {
// wrap tile coordinates var url = this._cachedTileUrls[tileName];
if (!this.options.continuousWorld) {
if (!this.options.noWrap) { if (!url) {
tilePoint.x = ((tilePoint.x % tileLimit) + tileLimit) % tileLimit; this._cachedTileUrls[tileName] = url = this.options.dynmap.getTileUrl(tileName);
} else if (tilePoint.x < 0 || tilePoint.x >= tileLimit) { }
this._tilesToLoad--;
return; if(typeof timestamp !== 'undefined') {
} url += (url.indexOf('?') === -1 ? '?timestamp=' + timestamp : '&timestamp=' + timestamp);
}
if (tilePoint.y < 0 || tilePoint.y >= tileLimit) {
this._tilesToLoad--; return url;
return; },
}
} getProjection: function() {
return this.projection;
// create tile },
var tile = this._createTile();
tile.tileName = name; //Dynmap _tickLoadQueue: function() {
tile.tilePoint = tilePoint; //Dynmap if (this._loadingTiles.length > 4) {
L.DomUtil.setPosition(tile, tilePos); return;
}
this._tiles[key] = tile;
this._namedTiles[name] = tile; //Dynmap var next = this._loadQueue.shift();
if (this.options.scheme == 'tms') { if (!next) {
tilePoint.y = tileLimit - tilePoint.y - 1; return;
} }
this._loadTile(tile, tilePoint, zoom); this._loadingTiles.push(next);
next.src = next.url;
container.appendChild(tile); },
},
_loadTile: function(tile, tilePoint, zoom) { getTileName: function(coords) {
var me = this; throw "getTileName not implemented";
tile._layer = this; },
function done() {
me._loadingTiles.splice(me._loadingTiles.indexOf(tile), 1); updateNamedTile: function(name, timestamp) {
me._nextLoadTile(); var tile = this._namedTiles[name];
}
tile.onload = function(e) { if (tile) {
me._tileOnLoad.apply(this, [e]); tile.url = this.getTileUrlFromName(name, timestamp);
done(); this._loadQueue.push(tile);
} this._tickLoadQueue();
tile.onerror = function() { }
me._tileOnError.apply(this); },
done();
} // Some helper functions.
tile.loadSrc = function() { zoomprefix: function(amount) {
me._loadingTiles.push(tile); return 'zzzzzzzzzzzzzzzzzzzzzz'.substr(0, amount);
tile.src = me.getTileUrl(tilePoint, zoom); },
};
this._loadQueue.push(tile); getTileInfo: function(coords) {
this._nextLoadTile(); // zoom: max zoomed in = this.options.maxZoom, max zoomed out = 0
}, // izoom: max zoomed in = 0, max zoomed out = this.options.maxZoom
_nextLoadTile: function() { // zoomoutlevel: izoom < mapzoomin -> 0, else -> izoom - mapzoomin (which ranges from 0 till mapzoomout)
if (this._loadingTiles.length > 4) { return; } var izoom = this._getZoomForUrl(),
var next = this._loadQueue.shift(); zoomoutlevel = Math.max(0, izoom - this.options.mapzoomin),
if (!next) { return; } scale = 1 << zoomoutlevel,
x = scale * coords.x,
next.loadSrc(); y = scale * coords.y;
},
return {
_removeOtherTiles: function(bounds) { prefix: this.options.prefix,
var kArr, x, y, key; nightday: (this.options.nightandday && this.options.dynmap.serverday) ? '_day' : '',
scaledx: x >> 5,
for (key in this._tiles) { scaledy: y >> 5,
if (this._tiles.hasOwnProperty(key)) { zoom: this.zoomprefix(zoomoutlevel),
kArr = key.split(':'); zoomprefix: (zoomoutlevel==0)?"":(this.zoomprefix(zoomoutlevel)+"_"),
x = parseInt(kArr[0], 10); x: x,
y = parseInt(kArr[1], 10); y: y,
fmt: this.options['image-format'] || 'png'
// remove tile if it's out of bounds };
if (x < bounds.min.x || x > bounds.max.x || y < bounds.min.y || y > bounds.max.y) { }
var tile = this._tiles[key]; });
if (tile.parentNode === this._container) {
this._container.removeChild(this._tiles[key]); function loadjs(url, completed) {
} var script = document.createElement('script');
delete this._namedTiles[tile.tileName]; script.setAttribute('src', url);
delete this._tiles[key]; script.setAttribute('type', 'text/javascript');
} var isloaded = false;
} script.onload = function() {
} if (isloaded) { return; }
}, isloaded = true;
_updateTileSize: function() { completed();
var newzoom = this._map.getZoom(); };
if (this._currentzoom !== newzoom) {
var newTileSize = this.calculateTileSize(newzoom); // Hack for IE, don't know whether this still applies to IE9.
this._currentzoom = newzoom; script.onreadystatechange = function() {
if (newTileSize !== this.options.tileSize) { if (script.readyState == 'loaded' || script.readyState == 'complete')
this.setTileSize(newTileSize); script.onload();
} };
} (document.head || document.getElementsByTagName('head')[0]).appendChild(script);
}, }
_reset: function() { function loadcss(url, completed) {
this._updateTileSize(); var link = document.createElement('link');
this._tiles = {}; link.setAttribute('href', url);
this._namedTiles = {}; link.setAttribute('rel', 'stylesheet');
this._loadQueue = []; var isloaded = false;
this._loadingTiles = []; if (completed) {
this._cachedTileUrls = {}; link.onload = function() {
this._initContainer(); if (isloaded) { return; }
this._container.innerHTML = ''; isloaded = true;
}, completed();
};
_update: function() {
this._updateTileSize(); // Hack for IE, don't know whether this still applies to IE9.
var bounds = this._map.getPixelBounds(), link.onreadystatechange = function() {
tileSize = this.options.tileSize; link.onload();
};
var nwTilePoint = new L.Point( }
Math.floor(bounds.min.x / tileSize),
Math.floor(bounds.min.y / tileSize)), (document.head || document.getElementsByTagName('head')[0]).appendChild(link);
seTilePoint = new L.Point( }
Math.floor(bounds.max.x / tileSize),
Math.floor(bounds.max.y / tileSize)), function splitArgs(s) {
tileBounds = new L.Bounds(nwTilePoint, seTilePoint); var r = s.split(' ');
delete arguments[0];
this._addTilesFromCenterOut(tileBounds); var obj = {};
var index = 0;
if (this.options.unloadInvisibleTiles) { $.each(arguments, function(argumentIndex, argument) {
this._removeOtherTiles(tileBounds); if (!argumentIndex) { return; }
} var value = r[argumentIndex-1];
}, obj[argument] = value;
/*calculateTileSize: function(zoom) { });
return this.options.tileSize; return obj;
},*/ }
calculateTileSize: function(zoom) {
// zoomoutlevel: 0 when izoom > mapzoomin, else mapzoomin - izoom (which ranges from 0 till mapzoomin) function swtch(value, options, defaultOption) {
var izoom = this.options.maxZoom - zoom; return (options[value] || defaultOption || function(){})(value);
var zoominlevel = Math.max(0, this.options.mapzoomin - izoom); }
return 128 << zoominlevel; (function( $ ){
}, $.fn.scrollHeight = function(height) {
setTileSize: function(tileSize) { return this[0].scrollHeight;
this.options.tileSize = tileSize; };
this._tiles = {}; })($);
this._createTileProto();
}, function Location(world, x, y, z) {
updateTileSize: function(zoom) {}, this.world = world;
this.x = x;
// Some helper functions. this.y = y;
zoomprefix: function(amount) { this.z = z;
return 'zzzzzzzzzzzzzzzzzzzzzz'.substr(0, amount); }
},
getTileInfo: function(tilePoint, zoom) { function namedReplace(str, obj)
// zoom: max zoomed in = this.options.maxZoom, max zoomed out = 0 {
// izoom: max zoomed in = 0, max zoomed out = this.options.maxZoom var startIndex = 0;
// zoomoutlevel: izoom < mapzoomin -> 0, else -> izoom - mapzoomin (which ranges from 0 till mapzoomout) var result = '';
var izoom = this.options.maxZoom - zoom; while(true) {
var zoomoutlevel = Math.max(0, izoom - this.options.mapzoomin); var variableBegin = str.indexOf('{', startIndex);
var scale = 1 << zoomoutlevel; var variableEnd = str.indexOf('}', variableBegin+1);
var x = scale*tilePoint.x; if (variableBegin < 0 || variableEnd < 0) {
var y = scale*tilePoint.y; result += str.substr(startIndex);
return { break;
prefix: this.options.prefix, }
nightday: (this.options.nightandday && this.options.dynmap.serverday) ? '_day' : '', if (variableBegin < variableEnd) {
scaledx: x >> 5, var variableName = str.substring(variableBegin+1, variableEnd);
scaledy: y >> 5, result += str.substring(startIndex, variableBegin);
zoom: this.zoomprefix(zoomoutlevel), result += obj[variableName];
zoomprefix: (zoomoutlevel==0)?"":(this.zoomprefix(zoomoutlevel)+"_"), } else /* found '{}' */ {
x: x, result += str.substring(startIndex, variableBegin-1);
y: y, result += '';
fmt: this.options['image-format'] || 'png' }
}; startIndex = variableEnd+1;
} }
}); return result;
}
function loadjs(url, completed) {
var script = document.createElement('script'); function concatURL(base, addition) {
script.setAttribute('src', url); if(base.indexOf('?') >= 0)
script.setAttribute('type', 'text/javascript'); return base + escape(addition);
var isloaded = false;
script.onload = function() { return base + addition;
if (isloaded) { return; } }
isloaded = true;
completed();
};
// Hack for IE, don't know whether this still applies to IE9.
script.onreadystatechange = function() {
if (script.readyState == 'loaded' || script.readyState == 'complete')
script.onload();
};
(document.head || document.getElementsByTagName('head')[0]).appendChild(script);
}
function loadcss(url, completed) {
var link = document.createElement('link');
link.setAttribute('href', url);
link.setAttribute('rel', 'stylesheet');
var isloaded = false;
if (completed) {
link.onload = function() {
if (isloaded) { return; }
isloaded = true;
completed();
};
// Hack for IE, don't know whether this still applies to IE9.
link.onreadystatechange = function() {
link.onload();
};
}
(document.head || document.getElementsByTagName('head')[0]).appendChild(link);
}
function splitArgs(s) {
var r = s.split(' ');
delete arguments[0];
var obj = {};
var index = 0;
$.each(arguments, function(argumentIndex, argument) {
if (!argumentIndex) { return; }
var value = r[argumentIndex-1];
obj[argument] = value;
});
return obj;
}
function swtch(value, options, defaultOption) {
return (options[value] || defaultOption || function(){})(value);
}
(function( $ ){
$.fn.scrollHeight = function(height) {
return this[0].scrollHeight;
};
})($);
function Location(world, x, y, z) {
this.world = world;
this.x = x;
this.y = y;
this.z = z;
}
function namedReplace(str, obj)
{
var startIndex = 0;
var result = '';
while(true) {
var variableBegin = str.indexOf('{', startIndex);
var variableEnd = str.indexOf('}', variableBegin+1);
if (variableBegin < 0 || variableEnd < 0) {
result += str.substr(startIndex);
break;
}
if (variableBegin < variableEnd) {
var variableName = str.substring(variableBegin+1, variableEnd);
result += str.substring(startIndex, variableBegin);
result += obj[variableName];
} else /* found '{}' */ {
result += str.substring(startIndex, variableBegin-1);
result += '';
}
startIndex = variableEnd+1;
}
return result;
}
function concatURL(base, addition) {
if(base.indexOf('?') >= 0)
return base + escape(addition);
return base + addition;
}

View file

@ -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

View file

@ -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] = {

View file

@ -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');