Fist Push
2
.gitignore
vendored
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
|
||||
*.zip
|
||||
15
Dockerfile
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
FROM node:latest
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
COPY ./server/package*.json ./
|
||||
|
||||
RUN npm install
|
||||
|
||||
COPY . .
|
||||
|
||||
EXPOSE 3000
|
||||
|
||||
WORKDIR /app/server
|
||||
|
||||
CMD ["npm", "start"]
|
||||
BIN
public old/favicon.ico
Normal file
|
After Width: | Height: | Size: 22 KiB |
BIN
public old/icons/blue_circle_full.png
Normal file
|
After Width: | Height: | Size: 650 B |
BIN
public old/icons/blue_circle_void.png
Normal file
|
After Width: | Height: | Size: 658 B |
BIN
public old/icons/blue_cross_full.png
Normal file
|
After Width: | Height: | Size: 580 B |
BIN
public old/icons/green_circle_full.png
Normal file
|
After Width: | Height: | Size: 849 B |
BIN
public old/icons/green_star.png
Normal file
|
After Width: | Height: | Size: 565 B |
BIN
public old/icons/green_star_big.png
Normal file
|
After Width: | Height: | Size: 720 B |
BIN
public old/icons/grey_square.png
Normal file
|
After Width: | Height: | Size: 562 B |
BIN
public old/icons/orange_star.png
Normal file
|
After Width: | Height: | Size: 568 B |
BIN
public old/icons/red_cross_full.png
Normal file
|
After Width: | Height: | Size: 582 B |
BIN
public old/icons/red_cross_void.png
Normal file
|
After Width: | Height: | Size: 568 B |
BIN
public old/icons/red_star.png
Normal file
|
After Width: | Height: | Size: 563 B |
BIN
public old/icons/yellow_crown.png
Normal file
|
After Width: | Height: | Size: 598 B |
BIN
public old/icons/yellow_square_full.png
Normal file
|
After Width: | Height: | Size: 559 B |
BIN
public old/icons/yellow_square_void.png
Normal file
|
After Width: | Height: | Size: 581 B |
BIN
public old/icons/yellow_star.png
Normal file
|
After Width: | Height: | Size: 554 B |
BIN
public old/icons/yellow_star_big.png
Normal file
|
After Width: | Height: | Size: 675 B |
17
public old/index.html
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Map : Asheron's Call 2</title>
|
||||
<link rel="stylesheet" href="/scripts/dist/leaflet.css" />
|
||||
<script src="/scripts/dist/leaflet-src.js"></script>
|
||||
<link rel="stylesheet" href="/scripts/dist/MarkerCluster.css" />
|
||||
<link rel="stylesheet" href="/scripts/dist/MarkerCluster.Default.css" />
|
||||
<script src="/scripts/dist/leaflet.markercluster-src.js"></script>
|
||||
<link rel="stylesheet" href="/style/style.css" />
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="map"></div>
|
||||
<script type="module" src="/scripts/leafletBase.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
BIN
public old/scripts/._leafletBase.js
Normal file
16
public old/scripts/coordOverlay.js
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
export var coordOverlay = L.control({ position: "bottomleft" });
|
||||
|
||||
coordOverlay.onAdd = function (map) {
|
||||
this._div = L.DomUtil.create("div", "coordinates-overlay");
|
||||
this._div.innerHTML = "Cliquez sur la carte pour voir les coordonnées";
|
||||
return this._div;
|
||||
};
|
||||
|
||||
coordOverlay.update = function (coord, cardinal) {
|
||||
this._div.innerHTML = "LandBlockId:" + "<br>" +
|
||||
"0x" + coord.x.toString(16).toUpperCase().padStart(2, '0')
|
||||
+ "" + coord.y.toString(16).toUpperCase().padStart(2, '0')
|
||||
+ "FFFF"
|
||||
+ "<br>"
|
||||
+ cardinal;
|
||||
};
|
||||
60
public old/scripts/dist/MarkerCluster.Default.css
vendored
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
.marker-cluster-small {
|
||||
background-color: rgba(181, 226, 140, 0.6);
|
||||
}
|
||||
.marker-cluster-small div {
|
||||
background-color: rgba(110, 204, 57, 0.6);
|
||||
}
|
||||
|
||||
.marker-cluster-medium {
|
||||
background-color: rgba(241, 211, 87, 0.6);
|
||||
}
|
||||
.marker-cluster-medium div {
|
||||
background-color: rgba(240, 194, 12, 0.6);
|
||||
}
|
||||
|
||||
.marker-cluster-large {
|
||||
background-color: rgba(253, 156, 115, 0.6);
|
||||
}
|
||||
.marker-cluster-large div {
|
||||
background-color: rgba(241, 128, 23, 0.6);
|
||||
}
|
||||
|
||||
/* IE 6-8 fallback colors */
|
||||
.leaflet-oldie .marker-cluster-small {
|
||||
background-color: rgb(181, 226, 140);
|
||||
}
|
||||
.leaflet-oldie .marker-cluster-small div {
|
||||
background-color: rgb(110, 204, 57);
|
||||
}
|
||||
|
||||
.leaflet-oldie .marker-cluster-medium {
|
||||
background-color: rgb(241, 211, 87);
|
||||
}
|
||||
.leaflet-oldie .marker-cluster-medium div {
|
||||
background-color: rgb(240, 194, 12);
|
||||
}
|
||||
|
||||
.leaflet-oldie .marker-cluster-large {
|
||||
background-color: rgb(253, 156, 115);
|
||||
}
|
||||
.leaflet-oldie .marker-cluster-large div {
|
||||
background-color: rgb(241, 128, 23);
|
||||
}
|
||||
|
||||
.marker-cluster {
|
||||
background-clip: padding-box;
|
||||
border-radius: 20px;
|
||||
}
|
||||
.marker-cluster div {
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
margin-left: 5px;
|
||||
margin-top: 5px;
|
||||
|
||||
text-align: center;
|
||||
border-radius: 15px;
|
||||
font: 12px "Helvetica Neue", Arial, Helvetica, sans-serif;
|
||||
}
|
||||
.marker-cluster span {
|
||||
line-height: 30px;
|
||||
}
|
||||
14
public old/scripts/dist/MarkerCluster.css
vendored
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
.leaflet-cluster-anim .leaflet-marker-icon, .leaflet-cluster-anim .leaflet-marker-shadow {
|
||||
-webkit-transition: -webkit-transform 0.3s ease-out, opacity 0.3s ease-in;
|
||||
-moz-transition: -moz-transform 0.3s ease-out, opacity 0.3s ease-in;
|
||||
-o-transition: -o-transform 0.3s ease-out, opacity 0.3s ease-in;
|
||||
transition: transform 0.3s ease-out, opacity 0.3s ease-in;
|
||||
}
|
||||
|
||||
.leaflet-cluster-spider-leg {
|
||||
/* stroke-dashoffset (duration and function) should match with leaflet-marker-icon transform in order to track it exactly */
|
||||
-webkit-transition: -webkit-stroke-dashoffset 0.3s ease-out, -webkit-stroke-opacity 0.3s ease-in;
|
||||
-moz-transition: -moz-stroke-dashoffset 0.3s ease-out, -moz-stroke-opacity 0.3s ease-in;
|
||||
-o-transition: -o-stroke-dashoffset 0.3s ease-out, -o-stroke-opacity 0.3s ease-in;
|
||||
transition: stroke-dashoffset 0.3s ease-out, stroke-opacity 0.3s ease-in;
|
||||
}
|
||||
5
public old/scripts/dist/WhereAreTheJavascriptFiles.txt
vendored
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
We don't ship the .js files in the git master branch.
|
||||
They are only present in version tags and in npm.
|
||||
|
||||
See how to get the JS files here: https://github.com/Leaflet/Leaflet.markercluster#using-the-plugin
|
||||
Or how to build them: https://github.com/Leaflet/Leaflet.markercluster#building-testing-and-linting-scripts
|
||||
BIN
public old/scripts/dist/images/layers-2x.png
vendored
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
BIN
public old/scripts/dist/images/layers.png
vendored
Normal file
|
After Width: | Height: | Size: 696 B |
BIN
public old/scripts/dist/images/marker-icon-2x.png
vendored
Normal file
|
After Width: | Height: | Size: 2.4 KiB |
BIN
public old/scripts/dist/images/marker-icon.png
vendored
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
public old/scripts/dist/images/marker-shadow.png
vendored
Normal file
|
After Width: | Height: | Size: 618 B |
14419
public old/scripts/dist/leaflet-src.esm.js
vendored
Normal file
1
public old/scripts/dist/leaflet-src.esm.js.map
vendored
Normal file
14512
public old/scripts/dist/leaflet-src.js
vendored
Normal file
1
public old/scripts/dist/leaflet-src.js.map
vendored
Normal file
661
public old/scripts/dist/leaflet.css
vendored
Normal file
|
|
@ -0,0 +1,661 @@
|
|||
/* required styles */
|
||||
|
||||
.leaflet-pane,
|
||||
.leaflet-tile,
|
||||
.leaflet-marker-icon,
|
||||
.leaflet-marker-shadow,
|
||||
.leaflet-tile-container,
|
||||
.leaflet-pane > svg,
|
||||
.leaflet-pane > canvas,
|
||||
.leaflet-zoom-box,
|
||||
.leaflet-image-layer,
|
||||
.leaflet-layer {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
}
|
||||
.leaflet-container {
|
||||
overflow: hidden;
|
||||
}
|
||||
.leaflet-tile,
|
||||
.leaflet-marker-icon,
|
||||
.leaflet-marker-shadow {
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
user-select: none;
|
||||
-webkit-user-drag: none;
|
||||
}
|
||||
/* Prevents IE11 from highlighting tiles in blue */
|
||||
.leaflet-tile::selection {
|
||||
background: transparent;
|
||||
}
|
||||
/* Safari renders non-retina tile on retina better with this, but Chrome is worse */
|
||||
.leaflet-safari .leaflet-tile {
|
||||
image-rendering: -webkit-optimize-contrast;
|
||||
}
|
||||
/* hack that prevents hw layers "stretching" when loading new tiles */
|
||||
.leaflet-safari .leaflet-tile-container {
|
||||
width: 1600px;
|
||||
height: 1600px;
|
||||
-webkit-transform-origin: 0 0;
|
||||
}
|
||||
.leaflet-marker-icon,
|
||||
.leaflet-marker-shadow {
|
||||
display: block;
|
||||
}
|
||||
/* .leaflet-container svg: reset svg max-width decleration shipped in Joomla! (joomla.org) 3.x */
|
||||
/* .leaflet-container img: map is broken in FF if you have max-width: 100% on tiles */
|
||||
.leaflet-container .leaflet-overlay-pane svg {
|
||||
max-width: none !important;
|
||||
max-height: none !important;
|
||||
}
|
||||
.leaflet-container .leaflet-marker-pane img,
|
||||
.leaflet-container .leaflet-shadow-pane img,
|
||||
.leaflet-container .leaflet-tile-pane img,
|
||||
.leaflet-container img.leaflet-image-layer,
|
||||
.leaflet-container .leaflet-tile {
|
||||
max-width: none !important;
|
||||
max-height: none !important;
|
||||
width: auto;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.leaflet-container img.leaflet-tile {
|
||||
/* See: https://bugs.chromium.org/p/chromium/issues/detail?id=600120 */
|
||||
mix-blend-mode: plus-lighter;
|
||||
}
|
||||
|
||||
.leaflet-container.leaflet-touch-zoom {
|
||||
-ms-touch-action: pan-x pan-y;
|
||||
touch-action: pan-x pan-y;
|
||||
}
|
||||
.leaflet-container.leaflet-touch-drag {
|
||||
-ms-touch-action: pinch-zoom;
|
||||
/* Fallback for FF which doesn't support pinch-zoom */
|
||||
touch-action: none;
|
||||
touch-action: pinch-zoom;
|
||||
}
|
||||
.leaflet-container.leaflet-touch-drag.leaflet-touch-zoom {
|
||||
-ms-touch-action: none;
|
||||
touch-action: none;
|
||||
}
|
||||
.leaflet-container {
|
||||
-webkit-tap-highlight-color: transparent;
|
||||
}
|
||||
.leaflet-container a {
|
||||
-webkit-tap-highlight-color: rgba(51, 181, 229, 0.4);
|
||||
}
|
||||
.leaflet-tile {
|
||||
filter: inherit;
|
||||
visibility: hidden;
|
||||
}
|
||||
.leaflet-tile-loaded {
|
||||
visibility: inherit;
|
||||
}
|
||||
.leaflet-zoom-box {
|
||||
width: 0;
|
||||
height: 0;
|
||||
-moz-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
z-index: 800;
|
||||
}
|
||||
/* workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=888319 */
|
||||
.leaflet-overlay-pane svg {
|
||||
-moz-user-select: none;
|
||||
}
|
||||
|
||||
.leaflet-pane { z-index: 400; }
|
||||
|
||||
.leaflet-tile-pane { z-index: 200; }
|
||||
.leaflet-overlay-pane { z-index: 400; }
|
||||
.leaflet-shadow-pane { z-index: 500; }
|
||||
.leaflet-marker-pane { z-index: 600; }
|
||||
.leaflet-tooltip-pane { z-index: 650; }
|
||||
.leaflet-popup-pane { z-index: 700; }
|
||||
|
||||
.leaflet-map-pane canvas { z-index: 100; }
|
||||
.leaflet-map-pane svg { z-index: 200; }
|
||||
|
||||
.leaflet-vml-shape {
|
||||
width: 1px;
|
||||
height: 1px;
|
||||
}
|
||||
.lvml {
|
||||
behavior: url(#default#VML);
|
||||
display: inline-block;
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
|
||||
/* control positioning */
|
||||
|
||||
.leaflet-control {
|
||||
position: relative;
|
||||
z-index: 800;
|
||||
pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */
|
||||
pointer-events: auto;
|
||||
}
|
||||
.leaflet-top,
|
||||
.leaflet-bottom {
|
||||
position: absolute;
|
||||
z-index: 1000;
|
||||
pointer-events: none;
|
||||
}
|
||||
.leaflet-top {
|
||||
top: 0;
|
||||
}
|
||||
.leaflet-right {
|
||||
right: 0;
|
||||
}
|
||||
.leaflet-bottom {
|
||||
bottom: 0;
|
||||
}
|
||||
.leaflet-left {
|
||||
left: 0;
|
||||
}
|
||||
.leaflet-control {
|
||||
float: left;
|
||||
clear: both;
|
||||
}
|
||||
.leaflet-right .leaflet-control {
|
||||
float: right;
|
||||
}
|
||||
.leaflet-top .leaflet-control {
|
||||
margin-top: 10px;
|
||||
}
|
||||
.leaflet-bottom .leaflet-control {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.leaflet-left .leaflet-control {
|
||||
margin-left: 10px;
|
||||
}
|
||||
.leaflet-right .leaflet-control {
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
|
||||
/* zoom and fade animations */
|
||||
|
||||
.leaflet-fade-anim .leaflet-popup {
|
||||
opacity: 0;
|
||||
-webkit-transition: opacity 0.2s linear;
|
||||
-moz-transition: opacity 0.2s linear;
|
||||
transition: opacity 0.2s linear;
|
||||
}
|
||||
.leaflet-fade-anim .leaflet-map-pane .leaflet-popup {
|
||||
opacity: 1;
|
||||
}
|
||||
.leaflet-zoom-animated {
|
||||
-webkit-transform-origin: 0 0;
|
||||
-ms-transform-origin: 0 0;
|
||||
transform-origin: 0 0;
|
||||
}
|
||||
svg.leaflet-zoom-animated {
|
||||
will-change: transform;
|
||||
}
|
||||
|
||||
.leaflet-zoom-anim .leaflet-zoom-animated {
|
||||
-webkit-transition: -webkit-transform 0.25s cubic-bezier(0,0,0.25,1);
|
||||
-moz-transition: -moz-transform 0.25s cubic-bezier(0,0,0.25,1);
|
||||
transition: transform 0.25s cubic-bezier(0,0,0.25,1);
|
||||
}
|
||||
.leaflet-zoom-anim .leaflet-tile,
|
||||
.leaflet-pan-anim .leaflet-tile {
|
||||
-webkit-transition: none;
|
||||
-moz-transition: none;
|
||||
transition: none;
|
||||
}
|
||||
|
||||
.leaflet-zoom-anim .leaflet-zoom-hide {
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
|
||||
/* cursors */
|
||||
|
||||
.leaflet-interactive {
|
||||
cursor: pointer;
|
||||
}
|
||||
.leaflet-grab {
|
||||
cursor: -webkit-grab;
|
||||
cursor: -moz-grab;
|
||||
cursor: grab;
|
||||
}
|
||||
.leaflet-crosshair,
|
||||
.leaflet-crosshair .leaflet-interactive {
|
||||
cursor: crosshair;
|
||||
}
|
||||
.leaflet-popup-pane,
|
||||
.leaflet-control {
|
||||
cursor: auto;
|
||||
}
|
||||
.leaflet-dragging .leaflet-grab,
|
||||
.leaflet-dragging .leaflet-grab .leaflet-interactive,
|
||||
.leaflet-dragging .leaflet-marker-draggable {
|
||||
cursor: move;
|
||||
cursor: -webkit-grabbing;
|
||||
cursor: -moz-grabbing;
|
||||
cursor: grabbing;
|
||||
}
|
||||
|
||||
/* marker & overlays interactivity */
|
||||
.leaflet-marker-icon,
|
||||
.leaflet-marker-shadow,
|
||||
.leaflet-image-layer,
|
||||
.leaflet-pane > svg path,
|
||||
.leaflet-tile-container {
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.leaflet-marker-icon.leaflet-interactive,
|
||||
.leaflet-image-layer.leaflet-interactive,
|
||||
.leaflet-pane > svg path.leaflet-interactive,
|
||||
svg.leaflet-image-layer.leaflet-interactive path {
|
||||
pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */
|
||||
pointer-events: auto;
|
||||
}
|
||||
|
||||
/* visual tweaks */
|
||||
|
||||
.leaflet-container {
|
||||
background: #ddd;
|
||||
outline-offset: 1px;
|
||||
}
|
||||
.leaflet-container a {
|
||||
color: #0078A8;
|
||||
}
|
||||
.leaflet-zoom-box {
|
||||
border: 2px dotted #38f;
|
||||
background: rgba(255,255,255,0.5);
|
||||
}
|
||||
|
||||
|
||||
/* general typography */
|
||||
.leaflet-container {
|
||||
font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;
|
||||
font-size: 12px;
|
||||
font-size: 0.75rem;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
|
||||
/* general toolbar styles */
|
||||
|
||||
.leaflet-bar {
|
||||
box-shadow: 0 1px 5px rgba(0,0,0,0.65);
|
||||
border-radius: 4px;
|
||||
}
|
||||
.leaflet-bar a {
|
||||
background-color: #fff;
|
||||
border-bottom: 1px solid #ccc;
|
||||
width: 26px;
|
||||
height: 26px;
|
||||
line-height: 26px;
|
||||
display: block;
|
||||
text-align: center;
|
||||
text-decoration: none;
|
||||
color: black;
|
||||
}
|
||||
.leaflet-bar a,
|
||||
.leaflet-control-layers-toggle {
|
||||
background-position: 50% 50%;
|
||||
background-repeat: no-repeat;
|
||||
display: block;
|
||||
}
|
||||
.leaflet-bar a:hover,
|
||||
.leaflet-bar a:focus {
|
||||
background-color: #f4f4f4;
|
||||
}
|
||||
.leaflet-bar a:first-child {
|
||||
border-top-left-radius: 4px;
|
||||
border-top-right-radius: 4px;
|
||||
}
|
||||
.leaflet-bar a:last-child {
|
||||
border-bottom-left-radius: 4px;
|
||||
border-bottom-right-radius: 4px;
|
||||
border-bottom: none;
|
||||
}
|
||||
.leaflet-bar a.leaflet-disabled {
|
||||
cursor: default;
|
||||
background-color: #f4f4f4;
|
||||
color: #bbb;
|
||||
}
|
||||
|
||||
.leaflet-touch .leaflet-bar a {
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
line-height: 30px;
|
||||
}
|
||||
.leaflet-touch .leaflet-bar a:first-child {
|
||||
border-top-left-radius: 2px;
|
||||
border-top-right-radius: 2px;
|
||||
}
|
||||
.leaflet-touch .leaflet-bar a:last-child {
|
||||
border-bottom-left-radius: 2px;
|
||||
border-bottom-right-radius: 2px;
|
||||
}
|
||||
|
||||
/* zoom control */
|
||||
|
||||
.leaflet-control-zoom-in,
|
||||
.leaflet-control-zoom-out {
|
||||
font: bold 18px 'Lucida Console', Monaco, monospace;
|
||||
text-indent: 1px;
|
||||
}
|
||||
|
||||
.leaflet-touch .leaflet-control-zoom-in, .leaflet-touch .leaflet-control-zoom-out {
|
||||
font-size: 22px;
|
||||
}
|
||||
|
||||
|
||||
/* layers control */
|
||||
|
||||
.leaflet-control-layers {
|
||||
box-shadow: 0 1px 5px rgba(0,0,0,0.4);
|
||||
background: #fff;
|
||||
border-radius: 5px;
|
||||
}
|
||||
.leaflet-control-layers-toggle {
|
||||
background-image: url(images/layers.png);
|
||||
width: 36px;
|
||||
height: 36px;
|
||||
}
|
||||
.leaflet-retina .leaflet-control-layers-toggle {
|
||||
background-image: url(images/layers-2x.png);
|
||||
background-size: 26px 26px;
|
||||
}
|
||||
.leaflet-touch .leaflet-control-layers-toggle {
|
||||
width: 44px;
|
||||
height: 44px;
|
||||
}
|
||||
.leaflet-control-layers .leaflet-control-layers-list,
|
||||
.leaflet-control-layers-expanded .leaflet-control-layers-toggle {
|
||||
display: none;
|
||||
}
|
||||
.leaflet-control-layers-expanded .leaflet-control-layers-list {
|
||||
display: block;
|
||||
position: relative;
|
||||
}
|
||||
.leaflet-control-layers-expanded {
|
||||
padding: 6px 10px 6px 6px;
|
||||
color: #333;
|
||||
background: #fff;
|
||||
}
|
||||
.leaflet-control-layers-scrollbar {
|
||||
overflow-y: scroll;
|
||||
overflow-x: hidden;
|
||||
padding-right: 5px;
|
||||
}
|
||||
.leaflet-control-layers-selector {
|
||||
margin-top: 2px;
|
||||
position: relative;
|
||||
top: 1px;
|
||||
}
|
||||
.leaflet-control-layers label {
|
||||
display: block;
|
||||
font-size: 13px;
|
||||
font-size: 1.08333em;
|
||||
}
|
||||
.leaflet-control-layers-separator {
|
||||
height: 0;
|
||||
border-top: 1px solid #ddd;
|
||||
margin: 5px -10px 5px -6px;
|
||||
}
|
||||
|
||||
/* Default icon URLs */
|
||||
.leaflet-default-icon-path { /* used only in path-guessing heuristic, see L.Icon.Default */
|
||||
background-image: url(images/marker-icon.png);
|
||||
}
|
||||
|
||||
|
||||
/* attribution and scale controls */
|
||||
|
||||
.leaflet-container .leaflet-control-attribution {
|
||||
background: #fff;
|
||||
background: rgba(255, 255, 255, 0.8);
|
||||
margin: 0;
|
||||
}
|
||||
.leaflet-control-attribution,
|
||||
.leaflet-control-scale-line {
|
||||
padding: 0 5px;
|
||||
color: #333;
|
||||
line-height: 1.4;
|
||||
}
|
||||
.leaflet-control-attribution a {
|
||||
text-decoration: none;
|
||||
}
|
||||
.leaflet-control-attribution a:hover,
|
||||
.leaflet-control-attribution a:focus {
|
||||
text-decoration: underline;
|
||||
}
|
||||
.leaflet-attribution-flag {
|
||||
display: inline !important;
|
||||
vertical-align: baseline !important;
|
||||
width: 1em;
|
||||
height: 0.6669em;
|
||||
}
|
||||
.leaflet-left .leaflet-control-scale {
|
||||
margin-left: 5px;
|
||||
}
|
||||
.leaflet-bottom .leaflet-control-scale {
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
.leaflet-control-scale-line {
|
||||
border: 2px solid #777;
|
||||
border-top: none;
|
||||
line-height: 1.1;
|
||||
padding: 2px 5px 1px;
|
||||
white-space: nowrap;
|
||||
-moz-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
background: rgba(255, 255, 255, 0.8);
|
||||
text-shadow: 1px 1px #fff;
|
||||
}
|
||||
.leaflet-control-scale-line:not(:first-child) {
|
||||
border-top: 2px solid #777;
|
||||
border-bottom: none;
|
||||
margin-top: -2px;
|
||||
}
|
||||
.leaflet-control-scale-line:not(:first-child):not(:last-child) {
|
||||
border-bottom: 2px solid #777;
|
||||
}
|
||||
|
||||
.leaflet-touch .leaflet-control-attribution,
|
||||
.leaflet-touch .leaflet-control-layers,
|
||||
.leaflet-touch .leaflet-bar {
|
||||
box-shadow: none;
|
||||
}
|
||||
.leaflet-touch .leaflet-control-layers,
|
||||
.leaflet-touch .leaflet-bar {
|
||||
border: 2px solid rgba(0,0,0,0.2);
|
||||
background-clip: padding-box;
|
||||
}
|
||||
|
||||
|
||||
/* popup */
|
||||
|
||||
.leaflet-popup {
|
||||
position: absolute;
|
||||
text-align: center;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
.leaflet-popup-content-wrapper {
|
||||
padding: 1px;
|
||||
text-align: left;
|
||||
border-radius: 12px;
|
||||
}
|
||||
.leaflet-popup-content {
|
||||
margin: 13px 24px 13px 20px;
|
||||
line-height: 1.3;
|
||||
font-size: 13px;
|
||||
font-size: 1.08333em;
|
||||
min-height: 1px;
|
||||
}
|
||||
.leaflet-popup-content p {
|
||||
margin: 17px 0;
|
||||
margin: 1.3em 0;
|
||||
}
|
||||
.leaflet-popup-tip-container {
|
||||
width: 40px;
|
||||
height: 20px;
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
margin-top: -1px;
|
||||
margin-left: -20px;
|
||||
overflow: hidden;
|
||||
pointer-events: none;
|
||||
}
|
||||
.leaflet-popup-tip {
|
||||
width: 17px;
|
||||
height: 17px;
|
||||
padding: 1px;
|
||||
|
||||
margin: -10px auto 0;
|
||||
pointer-events: auto;
|
||||
|
||||
-webkit-transform: rotate(45deg);
|
||||
-moz-transform: rotate(45deg);
|
||||
-ms-transform: rotate(45deg);
|
||||
transform: rotate(45deg);
|
||||
}
|
||||
.leaflet-popup-content-wrapper,
|
||||
.leaflet-popup-tip {
|
||||
background: white;
|
||||
color: #333;
|
||||
box-shadow: 0 3px 14px rgba(0,0,0,0.4);
|
||||
}
|
||||
.leaflet-container a.leaflet-popup-close-button {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
border: none;
|
||||
text-align: center;
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
font: 16px/24px Tahoma, Verdana, sans-serif;
|
||||
color: #757575;
|
||||
text-decoration: none;
|
||||
background: transparent;
|
||||
}
|
||||
.leaflet-container a.leaflet-popup-close-button:hover,
|
||||
.leaflet-container a.leaflet-popup-close-button:focus {
|
||||
color: #585858;
|
||||
}
|
||||
.leaflet-popup-scrolled {
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.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-control-zoom,
|
||||
.leaflet-oldie .leaflet-control-layers,
|
||||
.leaflet-oldie .leaflet-popup-content-wrapper,
|
||||
.leaflet-oldie .leaflet-popup-tip {
|
||||
border: 1px solid #999;
|
||||
}
|
||||
|
||||
|
||||
/* div icon */
|
||||
|
||||
.leaflet-div-icon {
|
||||
background: #fff;
|
||||
border: 1px solid #666;
|
||||
}
|
||||
|
||||
|
||||
/* Tooltip */
|
||||
/* Base styles for the element that has a tooltip */
|
||||
.leaflet-tooltip {
|
||||
position: absolute;
|
||||
padding: 6px;
|
||||
background-color: #fff;
|
||||
border: 1px solid #fff;
|
||||
border-radius: 3px;
|
||||
color: #222;
|
||||
white-space: nowrap;
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
pointer-events: none;
|
||||
box-shadow: 0 1px 3px rgba(0,0,0,0.4);
|
||||
}
|
||||
.leaflet-tooltip.leaflet-interactive {
|
||||
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;
|
||||
}
|
||||
|
||||
/* Printing */
|
||||
|
||||
@media print {
|
||||
/* Prevent printers from removing background-images of controls. */
|
||||
.leaflet-control {
|
||||
-webkit-print-color-adjust: exact;
|
||||
print-color-adjust: exact;
|
||||
}
|
||||
}
|
||||
6
public old/scripts/dist/leaflet.js
vendored
Normal file
1
public old/scripts/dist/leaflet.js.map
vendored
Normal file
2718
public old/scripts/dist/leaflet.markercluster-src.js
vendored
Normal file
1
public old/scripts/dist/leaflet.markercluster-src.js.map
vendored
Normal file
2
public old/scripts/dist/leaflet.markercluster.js
vendored
Normal file
1
public old/scripts/dist/leaflet.markercluster.js.map
vendored
Normal file
53446
public old/scripts/dist/three.cjs
vendored
Normal file
53032
public old/scripts/dist/three.module.js
vendored
Normal file
6
public old/scripts/dist/three.module.min.js
vendored
Normal file
45
public old/scripts/fetching.js
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
import customIcons from './iconsMap.js';
|
||||
|
||||
const overlayMaps = {};
|
||||
|
||||
async function getOverlayMaps() {
|
||||
await Promise.all(Object.keys(overlayMapsTemplate).map(async (key) => {
|
||||
const url = `/poi/${key.toLowerCase()}/`;
|
||||
try {
|
||||
const response = await fetch(url);
|
||||
const data = await response.json();
|
||||
let icon = overlayMapsTemplate[key].icon;
|
||||
overlayMaps[key] = L.layerGroup(data.map((item) => L.marker([item.y, item.x], { icon: icon }).bindPopup(item.description)));
|
||||
} catch (error) {
|
||||
console.error(`Error fetching ${key} data:`, error);
|
||||
}
|
||||
}));
|
||||
return overlayMaps;
|
||||
}
|
||||
|
||||
// Fonction pour récupérer les positions des personnages
|
||||
async function getPlayersLocations() {
|
||||
const url = `/characterloc`;
|
||||
try {
|
||||
const response = await fetch(url);
|
||||
let data = await response.json();
|
||||
return data;
|
||||
} catch (error) {
|
||||
console.error(`Error fetching ${key} data:`, error);
|
||||
}
|
||||
}
|
||||
|
||||
// overlayMapsTemplate est l'objet avec les clés que vous avez définies
|
||||
const overlayMapsTemplate = {
|
||||
Ringways: { icon: customIcons.blueCircleVoidIcon },
|
||||
Gateways: { icon: customIcons.blueCircleFullIcon },
|
||||
PoI: { icon: customIcons.blueCrossFullIcon },
|
||||
Town: { icon: customIcons.yellowSquareFullIcon },
|
||||
Outpost: { icon: customIcons.yellowSquareVoidIcon },
|
||||
Vault: { icon: customIcons.redCrossFullIcon },
|
||||
Dungeon: { icon: customIcons.redCrossVoidIcon },
|
||||
City: { icon: customIcons.yellowCrownIcon },
|
||||
Faction: { icon: customIcons.greySquareIcon },
|
||||
};
|
||||
|
||||
export { getOverlayMaps, getPlayersLocations };
|
||||
54
public old/scripts/iconsMap.js
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
const customIcons = {
|
||||
redCrossFullIcon: new L.Icon({
|
||||
iconUrl: "./icons/red_cross_full.png",
|
||||
iconSize: [9, 9],
|
||||
iconAnchor: [4.5, 4.5],
|
||||
}),
|
||||
redCrossVoidIcon: new L.Icon({
|
||||
iconUrl: "./icons/red_cross_void.png",
|
||||
iconSize: [9, 9],
|
||||
iconAnchor: [4.5, 4.5],
|
||||
}),
|
||||
blueCircleFullIcon: new L.Icon({
|
||||
iconUrl: "./icons/blue_circle_full.png",
|
||||
iconSize: [9, 9],
|
||||
iconAnchor: [4.5, 4.5],
|
||||
}),
|
||||
blueCircleVoidIcon: new L.Icon({
|
||||
iconUrl: "./icons/blue_circle_void.png",
|
||||
iconSize: [9, 9],
|
||||
iconAnchor: [4.5, 4.5],
|
||||
}),
|
||||
blueCrossFullIcon: new L.Icon({
|
||||
iconUrl: "./icons/blue_cross_full.png",
|
||||
iconSize: [9, 9],
|
||||
iconAnchor: [4.5, 4.5],
|
||||
}),
|
||||
greySquareIcon: new L.Icon({
|
||||
iconUrl: "./icons/grey_square.png",
|
||||
iconSize: [9, 9],
|
||||
iconAnchor: [4.5, 4.5],
|
||||
}),
|
||||
yellowSquareFullIcon: new L.Icon({
|
||||
iconUrl: "./icons/yellow_square_full.png",
|
||||
iconSize: [9, 9],
|
||||
iconAnchor: [4.5, 4.5],
|
||||
}),
|
||||
yellowSquareVoidIcon: new L.Icon({
|
||||
iconUrl: "./icons/yellow_square_void.png",
|
||||
iconSize: [9, 9],
|
||||
iconAnchor: [4.5, 4.5],
|
||||
}),
|
||||
yellowCrownIcon: new L.Icon({
|
||||
iconUrl: "./icons/yellow_crown.png",
|
||||
iconSize: [9, 9],
|
||||
iconAnchor: [4.5, 4.5],
|
||||
}),
|
||||
greenPlayer: new L.Icon({
|
||||
iconUrl: "./icons/green_circle_full.png",
|
||||
iconSize: [9, 9],
|
||||
iconAnchor: [4.5, 4.5],
|
||||
}),
|
||||
};
|
||||
|
||||
export default customIcons;
|
||||
166
public old/scripts/leafletBase.js
Normal file
|
|
@ -0,0 +1,166 @@
|
|||
import { testList } from "./poi/testGroups.js";
|
||||
import { coordOverlay } from "./coordOverlay.js";
|
||||
import { getOverlayMaps } from "./fetching.js";
|
||||
import customIcons from './iconsMap.js';
|
||||
|
||||
const center = 127.5;
|
||||
let overlayPoi = {};
|
||||
|
||||
var map = L.map("map", {
|
||||
crs: L.CRS.Simple,
|
||||
minZoom: 1,
|
||||
maxZoom: 8,
|
||||
}).setView([-127.5, 127.5], 4); // Centre de la carte
|
||||
|
||||
var boundsMax = [
|
||||
[-255, 0],
|
||||
[0, 255],
|
||||
];
|
||||
|
||||
L.tileLayer("/tiles/{z}/{x}/{y}.jpg", {
|
||||
tileSize: 255, // Assurez-vous que cette valeur correspond à la taille de vos tuiles
|
||||
noWrap: true,
|
||||
bounds: boundsMax,
|
||||
attribution: "© Asheron's call 2 maps",
|
||||
}).addTo(map);
|
||||
|
||||
var rectangle = L.rectangle(boundsMax, { color: "#ff7800", weight: 1 });
|
||||
|
||||
map.on("click", function (ev) {
|
||||
coordOverlay.update(GetLandBlockId(ev), coordToCardinal(ev.latlng.lat, ev.latlng.lng));
|
||||
rectangle.remove();
|
||||
rectLandBlock(ev, map);
|
||||
});
|
||||
|
||||
var testtmp = L.layerGroup();
|
||||
|
||||
var overlayMaps = {};
|
||||
|
||||
async function setupOverlayMaps() {
|
||||
overlayPoi = await getOverlayMaps(); // Attend que overlayPoi soit chargé
|
||||
|
||||
// Itérer sur les clés de overlayPoi
|
||||
Object.keys(overlayPoi).forEach(key => {
|
||||
const layerGroup = overlayPoi[key];
|
||||
overlayMaps[key] = layerGroup; // Assigner chaque layerGroup à la clé correspondante dans overlayMaps
|
||||
layerControl.addOverlay(layerGroup, key); // Ajoute chaque couche à la carte avec son nom
|
||||
});
|
||||
}
|
||||
|
||||
setupOverlayMaps(); // Appel de la fonction pour initialiser les overlayMaps
|
||||
|
||||
|
||||
var markers = L.markerClusterGroup({
|
||||
chunkedLoading: true,
|
||||
disableClusteringAtZoom: 8,
|
||||
});
|
||||
testList.eachLayer(function (layer) {
|
||||
markers.addLayer(layer);
|
||||
});
|
||||
|
||||
var layerControl = L.control.layers(null, overlayMaps).addTo(map);
|
||||
coordOverlay.addTo(map);
|
||||
|
||||
function GetLandBlockId(ev) {
|
||||
var latlng = ev.latlng;
|
||||
var pointATmp = map.project(latlng, 4);
|
||||
const blockSize = 16; // Taille d'un bloc
|
||||
var y = Math.floor((4080 - pointATmp.y) / blockSize);
|
||||
var x = Math.floor(pointATmp.x / blockSize);
|
||||
|
||||
return L.point(x, y);
|
||||
}
|
||||
|
||||
function rectLandBlock(ev, map) {
|
||||
// Latitude et longitude initiales du coin supérieur gauche du rectangle
|
||||
var latlng = ev.latlng;
|
||||
|
||||
var pointATmp = map.project(latlng, 4);
|
||||
|
||||
const blockSize = 16; // Taille d'un bloc
|
||||
var testReverse = Math.floor((4080 - pointATmp.y) / blockSize);
|
||||
var pointA = L.point(Math.round(pointATmp.x), Math.round(pointATmp.y));
|
||||
const blockX = Math.floor(pointA.x / blockSize) * 16;
|
||||
const blockY = Math.floor(pointA.y / blockSize) * 16;
|
||||
|
||||
var landX = blockX / 16;
|
||||
|
||||
var pointAn = L.point(blockX, blockY);
|
||||
var pointB = L.point(blockX + blockSize, blockY + blockSize);
|
||||
console.log(pointAn, pointB);
|
||||
var latlngA = map.unproject(pointAn, 4);
|
||||
var latlngB = map.unproject(pointB, 4);
|
||||
|
||||
// Création du rectangle
|
||||
var bounds = L.latLngBounds(latlngA, latlngB);
|
||||
rectangle = L.rectangle(bounds, { color: "#ff7800", weight: 1, interactive: false })
|
||||
.addTo(map)
|
||||
.bindPopup(
|
||||
"LandBlock : 0x" +
|
||||
landX.toString(16).toUpperCase().padStart(2, "0") +
|
||||
"" +
|
||||
testReverse.toString(16).toUpperCase().padStart(2, "0") +
|
||||
"FFFF"
|
||||
);
|
||||
}
|
||||
|
||||
setInterval(fetchCharacterLocations, 5000);
|
||||
|
||||
// Fonction pour récupérer les positions des personnages
|
||||
function fetchCharacterLocations() {
|
||||
fetch("/characterloc") // Effectuer une requête GET vers /characterloc
|
||||
.then((response) => response.json()) // Convertir la réponse en JSON
|
||||
.then((data) => {
|
||||
// Parcourir les données et afficher chaque position de personnage
|
||||
data.forEach((character) => {
|
||||
updateCharacterMarker(
|
||||
character.literalValue,
|
||||
character.locy,
|
||||
character.locx
|
||||
);
|
||||
});
|
||||
})
|
||||
.catch((error) => {
|
||||
console.error("Error fetching character locations:", error);
|
||||
});
|
||||
}
|
||||
|
||||
// Dictionnaire pour stocker les marqueurs des personnages
|
||||
var characterMarkers = {};
|
||||
// Fonction pour créer ou mettre à jour un marqueur de personnage
|
||||
function updateCharacterMarker(characterId, lat, lng) {
|
||||
// Vérifier si le marqueur existe déjà
|
||||
if (characterMarkers[characterId]) {
|
||||
// Mettre à jour la position du marqueur existant
|
||||
characterMarkers[characterId].setLatLng([lat, lng]);
|
||||
} else {
|
||||
// Créer un nouveau marqueur
|
||||
var marker = L.marker([lat, lng], { icon: customIcons.greenPlayer }).bindPopup(characterId).addTo(map);
|
||||
// Stocker le marqueur dans le dictionnaire
|
||||
characterMarkers[characterId] = marker;
|
||||
}
|
||||
}
|
||||
|
||||
function coordToCardinal(lat, lng) {
|
||||
// Vérifier que les valeurs de lat et lng sont dans la plage spécifiée
|
||||
if (lat > 0 || lat < -255 || lng < 0 || lng > 255) {
|
||||
return "Coordonnées invalides";
|
||||
}
|
||||
let cardinalLng = 0;
|
||||
if (lng < center) cardinalLng = 100 - (lng * 100 / center);
|
||||
else if (lng > center) cardinalLng = (lng - center) * 100 / center;
|
||||
else if (lng === center) cardinalLng = 0;
|
||||
|
||||
let cardinalLat = 0;
|
||||
lat = lat * -1;
|
||||
if (lat < center) cardinalLat = 100 - (lat * 100 / center);
|
||||
else if (lat > center) cardinalLat = (lat - center) * 100 / center;
|
||||
else if (lat === 0) cardinalLat = 0;
|
||||
|
||||
// Déterminer les directions
|
||||
let directionLat = lat < center ? "N" : "S";
|
||||
let directionLng = lng < center ? "W" : "E";
|
||||
|
||||
// Retourner la chaîne de caractères résultante
|
||||
return cardinalLat.toFixed(1) + " " + directionLat + " - " + cardinalLng.toFixed(1) + " " + directionLng;
|
||||
}
|
||||
41573
public old/scripts/poi/testGroups.js
Normal file
24
public old/style/style.css
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
html, body {
|
||||
height: 100%; /* Assurez-vous que le corps prend toute la hauteur de la fenêtre */
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
#map {
|
||||
height: 100vh; /* Hauteur de la fenêtre de visualisation */
|
||||
width: 100vw; /* Largeur de la fenêtre de visualisation */
|
||||
}
|
||||
.leaflet-tile {
|
||||
border: 1px solid #ff000000; /* Ajoute une bordure noire d'un pixel */
|
||||
}
|
||||
.coordinates-overlay {
|
||||
width: 126px;
|
||||
position: absolute;
|
||||
bottom: 10px;
|
||||
left: 10px;
|
||||
background: white;
|
||||
padding: 5px 10px;
|
||||
border-radius: 5px;
|
||||
box-shadow: 0 0 5px rgba(0,0,0,0.5);
|
||||
font-size: 16px;
|
||||
z-index: 1000; /* S'assure que l'overlay est visible au-dessus de la carte */
|
||||
}
|
||||
BIN
public/favicon.ico
Normal file
|
After Width: | Height: | Size: 22 KiB |
BIN
public/icons/blue_circle_full.png
Normal file
|
After Width: | Height: | Size: 650 B |
BIN
public/icons/blue_circle_void.png
Normal file
|
After Width: | Height: | Size: 658 B |
BIN
public/icons/blue_cross_full.png
Normal file
|
After Width: | Height: | Size: 580 B |
BIN
public/icons/green_circle_full.png
Normal file
|
After Width: | Height: | Size: 849 B |
BIN
public/icons/green_star.png
Normal file
|
After Width: | Height: | Size: 565 B |
BIN
public/icons/green_star_big.png
Normal file
|
After Width: | Height: | Size: 720 B |
BIN
public/icons/grey_square.png
Normal file
|
After Width: | Height: | Size: 562 B |
BIN
public/icons/orange_star.png
Normal file
|
After Width: | Height: | Size: 568 B |
BIN
public/icons/red_cross_full.png
Normal file
|
After Width: | Height: | Size: 582 B |
BIN
public/icons/red_cross_void.png
Normal file
|
After Width: | Height: | Size: 568 B |
BIN
public/icons/red_star.png
Normal file
|
After Width: | Height: | Size: 563 B |
BIN
public/icons/yellow_crown.png
Normal file
|
After Width: | Height: | Size: 598 B |
BIN
public/icons/yellow_square_full.png
Normal file
|
After Width: | Height: | Size: 559 B |
BIN
public/icons/yellow_square_void.png
Normal file
|
After Width: | Height: | Size: 581 B |
BIN
public/icons/yellow_star.png
Normal file
|
After Width: | Height: | Size: 554 B |
BIN
public/icons/yellow_star_big.png
Normal file
|
After Width: | Height: | Size: 675 B |
17
public/index.html
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Map : Asheron's Call 2</title>
|
||||
<link rel="stylesheet" href="/scripts/dist/leaflet.css" />
|
||||
<script src="/scripts/dist/leaflet-src.js"></script>
|
||||
<link rel="stylesheet" href="/scripts/dist/MarkerCluster.css" />
|
||||
<link rel="stylesheet" href="/scripts/dist/MarkerCluster.Default.css" />
|
||||
<script src="/scripts/dist/leaflet.markercluster-src.js"></script>
|
||||
<link rel="stylesheet" href="/style/style.css" />
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="map"></div>
|
||||
<script type="module" src="/scripts/main.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
60
public/scripts/dist/MarkerCluster.Default.css
vendored
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
.marker-cluster-small {
|
||||
background-color: rgba(181, 226, 140, 0.6);
|
||||
}
|
||||
.marker-cluster-small div {
|
||||
background-color: rgba(110, 204, 57, 0.6);
|
||||
}
|
||||
|
||||
.marker-cluster-medium {
|
||||
background-color: rgba(241, 211, 87, 0.6);
|
||||
}
|
||||
.marker-cluster-medium div {
|
||||
background-color: rgba(240, 194, 12, 0.6);
|
||||
}
|
||||
|
||||
.marker-cluster-large {
|
||||
background-color: rgba(253, 156, 115, 0.6);
|
||||
}
|
||||
.marker-cluster-large div {
|
||||
background-color: rgba(241, 128, 23, 0.6);
|
||||
}
|
||||
|
||||
/* IE 6-8 fallback colors */
|
||||
.leaflet-oldie .marker-cluster-small {
|
||||
background-color: rgb(181, 226, 140);
|
||||
}
|
||||
.leaflet-oldie .marker-cluster-small div {
|
||||
background-color: rgb(110, 204, 57);
|
||||
}
|
||||
|
||||
.leaflet-oldie .marker-cluster-medium {
|
||||
background-color: rgb(241, 211, 87);
|
||||
}
|
||||
.leaflet-oldie .marker-cluster-medium div {
|
||||
background-color: rgb(240, 194, 12);
|
||||
}
|
||||
|
||||
.leaflet-oldie .marker-cluster-large {
|
||||
background-color: rgb(253, 156, 115);
|
||||
}
|
||||
.leaflet-oldie .marker-cluster-large div {
|
||||
background-color: rgb(241, 128, 23);
|
||||
}
|
||||
|
||||
.marker-cluster {
|
||||
background-clip: padding-box;
|
||||
border-radius: 20px;
|
||||
}
|
||||
.marker-cluster div {
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
margin-left: 5px;
|
||||
margin-top: 5px;
|
||||
|
||||
text-align: center;
|
||||
border-radius: 15px;
|
||||
font: 12px "Helvetica Neue", Arial, Helvetica, sans-serif;
|
||||
}
|
||||
.marker-cluster span {
|
||||
line-height: 30px;
|
||||
}
|
||||
14
public/scripts/dist/MarkerCluster.css
vendored
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
.leaflet-cluster-anim .leaflet-marker-icon, .leaflet-cluster-anim .leaflet-marker-shadow {
|
||||
-webkit-transition: -webkit-transform 0.3s ease-out, opacity 0.3s ease-in;
|
||||
-moz-transition: -moz-transform 0.3s ease-out, opacity 0.3s ease-in;
|
||||
-o-transition: -o-transform 0.3s ease-out, opacity 0.3s ease-in;
|
||||
transition: transform 0.3s ease-out, opacity 0.3s ease-in;
|
||||
}
|
||||
|
||||
.leaflet-cluster-spider-leg {
|
||||
/* stroke-dashoffset (duration and function) should match with leaflet-marker-icon transform in order to track it exactly */
|
||||
-webkit-transition: -webkit-stroke-dashoffset 0.3s ease-out, -webkit-stroke-opacity 0.3s ease-in;
|
||||
-moz-transition: -moz-stroke-dashoffset 0.3s ease-out, -moz-stroke-opacity 0.3s ease-in;
|
||||
-o-transition: -o-stroke-dashoffset 0.3s ease-out, -o-stroke-opacity 0.3s ease-in;
|
||||
transition: stroke-dashoffset 0.3s ease-out, stroke-opacity 0.3s ease-in;
|
||||
}
|
||||
5
public/scripts/dist/WhereAreTheJavascriptFiles.txt
vendored
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
We don't ship the .js files in the git master branch.
|
||||
They are only present in version tags and in npm.
|
||||
|
||||
See how to get the JS files here: https://github.com/Leaflet/Leaflet.markercluster#using-the-plugin
|
||||
Or how to build them: https://github.com/Leaflet/Leaflet.markercluster#building-testing-and-linting-scripts
|
||||
BIN
public/scripts/dist/images/layers-2x.png
vendored
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
BIN
public/scripts/dist/images/layers.png
vendored
Normal file
|
After Width: | Height: | Size: 696 B |
BIN
public/scripts/dist/images/marker-icon-2x.png
vendored
Normal file
|
After Width: | Height: | Size: 2.4 KiB |
BIN
public/scripts/dist/images/marker-icon.png
vendored
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
public/scripts/dist/images/marker-shadow.png
vendored
Normal file
|
After Width: | Height: | Size: 618 B |
14419
public/scripts/dist/leaflet-src.esm.js
vendored
Normal file
1
public/scripts/dist/leaflet-src.esm.js.map
vendored
Normal file
14512
public/scripts/dist/leaflet-src.js
vendored
Normal file
1
public/scripts/dist/leaflet-src.js.map
vendored
Normal file
661
public/scripts/dist/leaflet.css
vendored
Normal file
|
|
@ -0,0 +1,661 @@
|
|||
/* required styles */
|
||||
|
||||
.leaflet-pane,
|
||||
.leaflet-tile,
|
||||
.leaflet-marker-icon,
|
||||
.leaflet-marker-shadow,
|
||||
.leaflet-tile-container,
|
||||
.leaflet-pane > svg,
|
||||
.leaflet-pane > canvas,
|
||||
.leaflet-zoom-box,
|
||||
.leaflet-image-layer,
|
||||
.leaflet-layer {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
}
|
||||
.leaflet-container {
|
||||
overflow: hidden;
|
||||
}
|
||||
.leaflet-tile,
|
||||
.leaflet-marker-icon,
|
||||
.leaflet-marker-shadow {
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
user-select: none;
|
||||
-webkit-user-drag: none;
|
||||
}
|
||||
/* Prevents IE11 from highlighting tiles in blue */
|
||||
.leaflet-tile::selection {
|
||||
background: transparent;
|
||||
}
|
||||
/* Safari renders non-retina tile on retina better with this, but Chrome is worse */
|
||||
.leaflet-safari .leaflet-tile {
|
||||
image-rendering: -webkit-optimize-contrast;
|
||||
}
|
||||
/* hack that prevents hw layers "stretching" when loading new tiles */
|
||||
.leaflet-safari .leaflet-tile-container {
|
||||
width: 1600px;
|
||||
height: 1600px;
|
||||
-webkit-transform-origin: 0 0;
|
||||
}
|
||||
.leaflet-marker-icon,
|
||||
.leaflet-marker-shadow {
|
||||
display: block;
|
||||
}
|
||||
/* .leaflet-container svg: reset svg max-width decleration shipped in Joomla! (joomla.org) 3.x */
|
||||
/* .leaflet-container img: map is broken in FF if you have max-width: 100% on tiles */
|
||||
.leaflet-container .leaflet-overlay-pane svg {
|
||||
max-width: none !important;
|
||||
max-height: none !important;
|
||||
}
|
||||
.leaflet-container .leaflet-marker-pane img,
|
||||
.leaflet-container .leaflet-shadow-pane img,
|
||||
.leaflet-container .leaflet-tile-pane img,
|
||||
.leaflet-container img.leaflet-image-layer,
|
||||
.leaflet-container .leaflet-tile {
|
||||
max-width: none !important;
|
||||
max-height: none !important;
|
||||
width: auto;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.leaflet-container img.leaflet-tile {
|
||||
/* See: https://bugs.chromium.org/p/chromium/issues/detail?id=600120 */
|
||||
mix-blend-mode: plus-lighter;
|
||||
}
|
||||
|
||||
.leaflet-container.leaflet-touch-zoom {
|
||||
-ms-touch-action: pan-x pan-y;
|
||||
touch-action: pan-x pan-y;
|
||||
}
|
||||
.leaflet-container.leaflet-touch-drag {
|
||||
-ms-touch-action: pinch-zoom;
|
||||
/* Fallback for FF which doesn't support pinch-zoom */
|
||||
touch-action: none;
|
||||
touch-action: pinch-zoom;
|
||||
}
|
||||
.leaflet-container.leaflet-touch-drag.leaflet-touch-zoom {
|
||||
-ms-touch-action: none;
|
||||
touch-action: none;
|
||||
}
|
||||
.leaflet-container {
|
||||
-webkit-tap-highlight-color: transparent;
|
||||
}
|
||||
.leaflet-container a {
|
||||
-webkit-tap-highlight-color: rgba(51, 181, 229, 0.4);
|
||||
}
|
||||
.leaflet-tile {
|
||||
filter: inherit;
|
||||
visibility: hidden;
|
||||
}
|
||||
.leaflet-tile-loaded {
|
||||
visibility: inherit;
|
||||
}
|
||||
.leaflet-zoom-box {
|
||||
width: 0;
|
||||
height: 0;
|
||||
-moz-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
z-index: 800;
|
||||
}
|
||||
/* workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=888319 */
|
||||
.leaflet-overlay-pane svg {
|
||||
-moz-user-select: none;
|
||||
}
|
||||
|
||||
.leaflet-pane { z-index: 400; }
|
||||
|
||||
.leaflet-tile-pane { z-index: 200; }
|
||||
.leaflet-overlay-pane { z-index: 400; }
|
||||
.leaflet-shadow-pane { z-index: 500; }
|
||||
.leaflet-marker-pane { z-index: 600; }
|
||||
.leaflet-tooltip-pane { z-index: 650; }
|
||||
.leaflet-popup-pane { z-index: 700; }
|
||||
|
||||
.leaflet-map-pane canvas { z-index: 100; }
|
||||
.leaflet-map-pane svg { z-index: 200; }
|
||||
|
||||
.leaflet-vml-shape {
|
||||
width: 1px;
|
||||
height: 1px;
|
||||
}
|
||||
.lvml {
|
||||
behavior: url(#default#VML);
|
||||
display: inline-block;
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
|
||||
/* control positioning */
|
||||
|
||||
.leaflet-control {
|
||||
position: relative;
|
||||
z-index: 800;
|
||||
pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */
|
||||
pointer-events: auto;
|
||||
}
|
||||
.leaflet-top,
|
||||
.leaflet-bottom {
|
||||
position: absolute;
|
||||
z-index: 1000;
|
||||
pointer-events: none;
|
||||
}
|
||||
.leaflet-top {
|
||||
top: 0;
|
||||
}
|
||||
.leaflet-right {
|
||||
right: 0;
|
||||
}
|
||||
.leaflet-bottom {
|
||||
bottom: 0;
|
||||
}
|
||||
.leaflet-left {
|
||||
left: 0;
|
||||
}
|
||||
.leaflet-control {
|
||||
float: left;
|
||||
clear: both;
|
||||
}
|
||||
.leaflet-right .leaflet-control {
|
||||
float: right;
|
||||
}
|
||||
.leaflet-top .leaflet-control {
|
||||
margin-top: 10px;
|
||||
}
|
||||
.leaflet-bottom .leaflet-control {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.leaflet-left .leaflet-control {
|
||||
margin-left: 10px;
|
||||
}
|
||||
.leaflet-right .leaflet-control {
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
|
||||
/* zoom and fade animations */
|
||||
|
||||
.leaflet-fade-anim .leaflet-popup {
|
||||
opacity: 0;
|
||||
-webkit-transition: opacity 0.2s linear;
|
||||
-moz-transition: opacity 0.2s linear;
|
||||
transition: opacity 0.2s linear;
|
||||
}
|
||||
.leaflet-fade-anim .leaflet-map-pane .leaflet-popup {
|
||||
opacity: 1;
|
||||
}
|
||||
.leaflet-zoom-animated {
|
||||
-webkit-transform-origin: 0 0;
|
||||
-ms-transform-origin: 0 0;
|
||||
transform-origin: 0 0;
|
||||
}
|
||||
svg.leaflet-zoom-animated {
|
||||
will-change: transform;
|
||||
}
|
||||
|
||||
.leaflet-zoom-anim .leaflet-zoom-animated {
|
||||
-webkit-transition: -webkit-transform 0.25s cubic-bezier(0,0,0.25,1);
|
||||
-moz-transition: -moz-transform 0.25s cubic-bezier(0,0,0.25,1);
|
||||
transition: transform 0.25s cubic-bezier(0,0,0.25,1);
|
||||
}
|
||||
.leaflet-zoom-anim .leaflet-tile,
|
||||
.leaflet-pan-anim .leaflet-tile {
|
||||
-webkit-transition: none;
|
||||
-moz-transition: none;
|
||||
transition: none;
|
||||
}
|
||||
|
||||
.leaflet-zoom-anim .leaflet-zoom-hide {
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
|
||||
/* cursors */
|
||||
|
||||
.leaflet-interactive {
|
||||
cursor: pointer;
|
||||
}
|
||||
.leaflet-grab {
|
||||
cursor: -webkit-grab;
|
||||
cursor: -moz-grab;
|
||||
cursor: grab;
|
||||
}
|
||||
.leaflet-crosshair,
|
||||
.leaflet-crosshair .leaflet-interactive {
|
||||
cursor: crosshair;
|
||||
}
|
||||
.leaflet-popup-pane,
|
||||
.leaflet-control {
|
||||
cursor: auto;
|
||||
}
|
||||
.leaflet-dragging .leaflet-grab,
|
||||
.leaflet-dragging .leaflet-grab .leaflet-interactive,
|
||||
.leaflet-dragging .leaflet-marker-draggable {
|
||||
cursor: move;
|
||||
cursor: -webkit-grabbing;
|
||||
cursor: -moz-grabbing;
|
||||
cursor: grabbing;
|
||||
}
|
||||
|
||||
/* marker & overlays interactivity */
|
||||
.leaflet-marker-icon,
|
||||
.leaflet-marker-shadow,
|
||||
.leaflet-image-layer,
|
||||
.leaflet-pane > svg path,
|
||||
.leaflet-tile-container {
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.leaflet-marker-icon.leaflet-interactive,
|
||||
.leaflet-image-layer.leaflet-interactive,
|
||||
.leaflet-pane > svg path.leaflet-interactive,
|
||||
svg.leaflet-image-layer.leaflet-interactive path {
|
||||
pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */
|
||||
pointer-events: auto;
|
||||
}
|
||||
|
||||
/* visual tweaks */
|
||||
|
||||
.leaflet-container {
|
||||
background: #ddd;
|
||||
outline-offset: 1px;
|
||||
}
|
||||
.leaflet-container a {
|
||||
color: #0078A8;
|
||||
}
|
||||
.leaflet-zoom-box {
|
||||
border: 2px dotted #38f;
|
||||
background: rgba(255,255,255,0.5);
|
||||
}
|
||||
|
||||
|
||||
/* general typography */
|
||||
.leaflet-container {
|
||||
font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;
|
||||
font-size: 12px;
|
||||
font-size: 0.75rem;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
|
||||
/* general toolbar styles */
|
||||
|
||||
.leaflet-bar {
|
||||
box-shadow: 0 1px 5px rgba(0,0,0,0.65);
|
||||
border-radius: 4px;
|
||||
}
|
||||
.leaflet-bar a {
|
||||
background-color: #fff;
|
||||
border-bottom: 1px solid #ccc;
|
||||
width: 26px;
|
||||
height: 26px;
|
||||
line-height: 26px;
|
||||
display: block;
|
||||
text-align: center;
|
||||
text-decoration: none;
|
||||
color: black;
|
||||
}
|
||||
.leaflet-bar a,
|
||||
.leaflet-control-layers-toggle {
|
||||
background-position: 50% 50%;
|
||||
background-repeat: no-repeat;
|
||||
display: block;
|
||||
}
|
||||
.leaflet-bar a:hover,
|
||||
.leaflet-bar a:focus {
|
||||
background-color: #f4f4f4;
|
||||
}
|
||||
.leaflet-bar a:first-child {
|
||||
border-top-left-radius: 4px;
|
||||
border-top-right-radius: 4px;
|
||||
}
|
||||
.leaflet-bar a:last-child {
|
||||
border-bottom-left-radius: 4px;
|
||||
border-bottom-right-radius: 4px;
|
||||
border-bottom: none;
|
||||
}
|
||||
.leaflet-bar a.leaflet-disabled {
|
||||
cursor: default;
|
||||
background-color: #f4f4f4;
|
||||
color: #bbb;
|
||||
}
|
||||
|
||||
.leaflet-touch .leaflet-bar a {
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
line-height: 30px;
|
||||
}
|
||||
.leaflet-touch .leaflet-bar a:first-child {
|
||||
border-top-left-radius: 2px;
|
||||
border-top-right-radius: 2px;
|
||||
}
|
||||
.leaflet-touch .leaflet-bar a:last-child {
|
||||
border-bottom-left-radius: 2px;
|
||||
border-bottom-right-radius: 2px;
|
||||
}
|
||||
|
||||
/* zoom control */
|
||||
|
||||
.leaflet-control-zoom-in,
|
||||
.leaflet-control-zoom-out {
|
||||
font: bold 18px 'Lucida Console', Monaco, monospace;
|
||||
text-indent: 1px;
|
||||
}
|
||||
|
||||
.leaflet-touch .leaflet-control-zoom-in, .leaflet-touch .leaflet-control-zoom-out {
|
||||
font-size: 22px;
|
||||
}
|
||||
|
||||
|
||||
/* layers control */
|
||||
|
||||
.leaflet-control-layers {
|
||||
box-shadow: 0 1px 5px rgba(0,0,0,0.4);
|
||||
background: #fff;
|
||||
border-radius: 5px;
|
||||
}
|
||||
.leaflet-control-layers-toggle {
|
||||
background-image: url(images/layers.png);
|
||||
width: 36px;
|
||||
height: 36px;
|
||||
}
|
||||
.leaflet-retina .leaflet-control-layers-toggle {
|
||||
background-image: url(images/layers-2x.png);
|
||||
background-size: 26px 26px;
|
||||
}
|
||||
.leaflet-touch .leaflet-control-layers-toggle {
|
||||
width: 44px;
|
||||
height: 44px;
|
||||
}
|
||||
.leaflet-control-layers .leaflet-control-layers-list,
|
||||
.leaflet-control-layers-expanded .leaflet-control-layers-toggle {
|
||||
display: none;
|
||||
}
|
||||
.leaflet-control-layers-expanded .leaflet-control-layers-list {
|
||||
display: block;
|
||||
position: relative;
|
||||
}
|
||||
.leaflet-control-layers-expanded {
|
||||
padding: 6px 10px 6px 6px;
|
||||
color: #333;
|
||||
background: #fff;
|
||||
}
|
||||
.leaflet-control-layers-scrollbar {
|
||||
overflow-y: scroll;
|
||||
overflow-x: hidden;
|
||||
padding-right: 5px;
|
||||
}
|
||||
.leaflet-control-layers-selector {
|
||||
margin-top: 2px;
|
||||
position: relative;
|
||||
top: 1px;
|
||||
}
|
||||
.leaflet-control-layers label {
|
||||
display: block;
|
||||
font-size: 13px;
|
||||
font-size: 1.08333em;
|
||||
}
|
||||
.leaflet-control-layers-separator {
|
||||
height: 0;
|
||||
border-top: 1px solid #ddd;
|
||||
margin: 5px -10px 5px -6px;
|
||||
}
|
||||
|
||||
/* Default icon URLs */
|
||||
.leaflet-default-icon-path { /* used only in path-guessing heuristic, see L.Icon.Default */
|
||||
background-image: url(images/marker-icon.png);
|
||||
}
|
||||
|
||||
|
||||
/* attribution and scale controls */
|
||||
|
||||
.leaflet-container .leaflet-control-attribution {
|
||||
background: #fff;
|
||||
background: rgba(255, 255, 255, 0.8);
|
||||
margin: 0;
|
||||
}
|
||||
.leaflet-control-attribution,
|
||||
.leaflet-control-scale-line {
|
||||
padding: 0 5px;
|
||||
color: #333;
|
||||
line-height: 1.4;
|
||||
}
|
||||
.leaflet-control-attribution a {
|
||||
text-decoration: none;
|
||||
}
|
||||
.leaflet-control-attribution a:hover,
|
||||
.leaflet-control-attribution a:focus {
|
||||
text-decoration: underline;
|
||||
}
|
||||
.leaflet-attribution-flag {
|
||||
display: inline !important;
|
||||
vertical-align: baseline !important;
|
||||
width: 1em;
|
||||
height: 0.6669em;
|
||||
}
|
||||
.leaflet-left .leaflet-control-scale {
|
||||
margin-left: 5px;
|
||||
}
|
||||
.leaflet-bottom .leaflet-control-scale {
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
.leaflet-control-scale-line {
|
||||
border: 2px solid #777;
|
||||
border-top: none;
|
||||
line-height: 1.1;
|
||||
padding: 2px 5px 1px;
|
||||
white-space: nowrap;
|
||||
-moz-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
background: rgba(255, 255, 255, 0.8);
|
||||
text-shadow: 1px 1px #fff;
|
||||
}
|
||||
.leaflet-control-scale-line:not(:first-child) {
|
||||
border-top: 2px solid #777;
|
||||
border-bottom: none;
|
||||
margin-top: -2px;
|
||||
}
|
||||
.leaflet-control-scale-line:not(:first-child):not(:last-child) {
|
||||
border-bottom: 2px solid #777;
|
||||
}
|
||||
|
||||
.leaflet-touch .leaflet-control-attribution,
|
||||
.leaflet-touch .leaflet-control-layers,
|
||||
.leaflet-touch .leaflet-bar {
|
||||
box-shadow: none;
|
||||
}
|
||||
.leaflet-touch .leaflet-control-layers,
|
||||
.leaflet-touch .leaflet-bar {
|
||||
border: 2px solid rgba(0,0,0,0.2);
|
||||
background-clip: padding-box;
|
||||
}
|
||||
|
||||
|
||||
/* popup */
|
||||
|
||||
.leaflet-popup {
|
||||
position: absolute;
|
||||
text-align: center;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
.leaflet-popup-content-wrapper {
|
||||
padding: 1px;
|
||||
text-align: left;
|
||||
border-radius: 12px;
|
||||
}
|
||||
.leaflet-popup-content {
|
||||
margin: 13px 24px 13px 20px;
|
||||
line-height: 1.3;
|
||||
font-size: 13px;
|
||||
font-size: 1.08333em;
|
||||
min-height: 1px;
|
||||
}
|
||||
.leaflet-popup-content p {
|
||||
margin: 17px 0;
|
||||
margin: 1.3em 0;
|
||||
}
|
||||
.leaflet-popup-tip-container {
|
||||
width: 40px;
|
||||
height: 20px;
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
margin-top: -1px;
|
||||
margin-left: -20px;
|
||||
overflow: hidden;
|
||||
pointer-events: none;
|
||||
}
|
||||
.leaflet-popup-tip {
|
||||
width: 17px;
|
||||
height: 17px;
|
||||
padding: 1px;
|
||||
|
||||
margin: -10px auto 0;
|
||||
pointer-events: auto;
|
||||
|
||||
-webkit-transform: rotate(45deg);
|
||||
-moz-transform: rotate(45deg);
|
||||
-ms-transform: rotate(45deg);
|
||||
transform: rotate(45deg);
|
||||
}
|
||||
.leaflet-popup-content-wrapper,
|
||||
.leaflet-popup-tip {
|
||||
background: white;
|
||||
color: #333;
|
||||
box-shadow: 0 3px 14px rgba(0,0,0,0.4);
|
||||
}
|
||||
.leaflet-container a.leaflet-popup-close-button {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
border: none;
|
||||
text-align: center;
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
font: 16px/24px Tahoma, Verdana, sans-serif;
|
||||
color: #757575;
|
||||
text-decoration: none;
|
||||
background: transparent;
|
||||
}
|
||||
.leaflet-container a.leaflet-popup-close-button:hover,
|
||||
.leaflet-container a.leaflet-popup-close-button:focus {
|
||||
color: #585858;
|
||||
}
|
||||
.leaflet-popup-scrolled {
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.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-control-zoom,
|
||||
.leaflet-oldie .leaflet-control-layers,
|
||||
.leaflet-oldie .leaflet-popup-content-wrapper,
|
||||
.leaflet-oldie .leaflet-popup-tip {
|
||||
border: 1px solid #999;
|
||||
}
|
||||
|
||||
|
||||
/* div icon */
|
||||
|
||||
.leaflet-div-icon {
|
||||
background: #fff;
|
||||
border: 1px solid #666;
|
||||
}
|
||||
|
||||
|
||||
/* Tooltip */
|
||||
/* Base styles for the element that has a tooltip */
|
||||
.leaflet-tooltip {
|
||||
position: absolute;
|
||||
padding: 6px;
|
||||
background-color: #fff;
|
||||
border: 1px solid #fff;
|
||||
border-radius: 3px;
|
||||
color: #222;
|
||||
white-space: nowrap;
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
pointer-events: none;
|
||||
box-shadow: 0 1px 3px rgba(0,0,0,0.4);
|
||||
}
|
||||
.leaflet-tooltip.leaflet-interactive {
|
||||
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;
|
||||
}
|
||||
|
||||
/* Printing */
|
||||
|
||||
@media print {
|
||||
/* Prevent printers from removing background-images of controls. */
|
||||
.leaflet-control {
|
||||
-webkit-print-color-adjust: exact;
|
||||
print-color-adjust: exact;
|
||||
}
|
||||
}
|
||||
6
public/scripts/dist/leaflet.js
vendored
Normal file
1
public/scripts/dist/leaflet.js.map
vendored
Normal file
2718
public/scripts/dist/leaflet.markercluster-src.js
vendored
Normal file
1
public/scripts/dist/leaflet.markercluster-src.js.map
vendored
Normal file
2
public/scripts/dist/leaflet.markercluster.js
vendored
Normal file
1
public/scripts/dist/leaflet.markercluster.js.map
vendored
Normal file
53446
public/scripts/dist/three.cjs
vendored
Normal file
53032
public/scripts/dist/three.module.js
vendored
Normal file
6
public/scripts/dist/three.module.min.js
vendored
Normal file
18
public/scripts/main.js
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
import InitMap, { map } from "./map.js";
|
||||
import InitOverlayPoi from "./overlays/overlaysPoi.js";
|
||||
import InitOverlayCoord, { UpdateCoord } from "./overlays/overlaysCoord.js";
|
||||
import InitOverlayPlayer from "./overlays/overlaysPlayer.js";
|
||||
|
||||
//Init leaflet
|
||||
InitMap();
|
||||
|
||||
//Init Overlay Control
|
||||
InitOverlayPoi(map);
|
||||
InitOverlayCoord(map);
|
||||
|
||||
map.on("click", function (ev) {
|
||||
UpdateCoord(ev, map);
|
||||
});
|
||||
|
||||
//Interval Player Overlay
|
||||
setInterval(InitOverlayPlayer, 5000);
|
||||
33
public/scripts/map.js
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
// Constantes
|
||||
const TILE_SIZE = 255;
|
||||
const CENTER_LAT = -127.5;
|
||||
const CENTER_LON = 127.5;
|
||||
const ZOOM_LEVEL = 4;
|
||||
const BOUNDS_MAX = [
|
||||
[-255, 0],
|
||||
[0, 255],
|
||||
];
|
||||
|
||||
// Variables
|
||||
export var map = {};
|
||||
|
||||
// Fonction pour initialiser la carte
|
||||
export default function InitialisationMap() {
|
||||
map = L.map("map", {
|
||||
crs: L.CRS.Simple,
|
||||
minZoom: 1,
|
||||
maxZoom: 8,
|
||||
}).setView([CENTER_LAT, CENTER_LON], ZOOM_LEVEL);
|
||||
|
||||
addTileLayer();
|
||||
}
|
||||
|
||||
// Fonction pour ajouter la couche de tuiles
|
||||
function addTileLayer() {
|
||||
L.tileLayer("/tiles/{z}/{x}/{y}.jpg", {
|
||||
tileSize: TILE_SIZE,
|
||||
noWrap: true,
|
||||
bounds: BOUNDS_MAX,
|
||||
attribution: "© Asheron's call 2 maps",
|
||||
}).addTo(map);
|
||||
}
|
||||
59
public/scripts/modules/iconsMap.js
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
const customIcons = {
|
||||
redCrossFullIcon: new L.Icon({
|
||||
iconUrl: "./icons/red_cross_full.png",
|
||||
iconSize: [9, 9],
|
||||
iconAnchor: [4.5, 4.5],
|
||||
}),
|
||||
redCrossVoidIcon: new L.Icon({
|
||||
iconUrl: "./icons/red_cross_void.png",
|
||||
iconSize: [9, 9],
|
||||
iconAnchor: [4.5, 4.5],
|
||||
}),
|
||||
blueCircleFullIcon: new L.Icon({
|
||||
iconUrl: "./icons/blue_circle_full.png",
|
||||
iconSize: [9, 9],
|
||||
iconAnchor: [4.5, 4.5],
|
||||
}),
|
||||
blueCircleVoidIcon: new L.Icon({
|
||||
iconUrl: "./icons/blue_circle_void.png",
|
||||
iconSize: [9, 9],
|
||||
iconAnchor: [4.5, 4.5],
|
||||
}),
|
||||
blueCrossFullIcon: new L.Icon({
|
||||
iconUrl: "./icons/blue_cross_full.png",
|
||||
iconSize: [9, 9],
|
||||
iconAnchor: [4.5, 4.5],
|
||||
}),
|
||||
greySquareIcon: new L.Icon({
|
||||
iconUrl: "./icons/grey_square.png",
|
||||
iconSize: [9, 9],
|
||||
iconAnchor: [4.5, 4.5],
|
||||
}),
|
||||
yellowSquareFullIcon: new L.Icon({
|
||||
iconUrl: "./icons/yellow_square_full.png",
|
||||
iconSize: [9, 9],
|
||||
iconAnchor: [4.5, 4.5],
|
||||
}),
|
||||
yellowSquareVoidIcon: new L.Icon({
|
||||
iconUrl: "./icons/yellow_square_void.png",
|
||||
iconSize: [9, 9],
|
||||
iconAnchor: [4.5, 4.5],
|
||||
}),
|
||||
yellowCrownIcon: new L.Icon({
|
||||
iconUrl: "./icons/yellow_crown.png",
|
||||
iconSize: [9, 9],
|
||||
iconAnchor: [4.5, 4.5],
|
||||
}),
|
||||
greenPlayer: new L.Icon({
|
||||
iconUrl: "./icons/green_circle_full.png",
|
||||
iconSize: [9, 9],
|
||||
iconAnchor: [4.5, 4.5],
|
||||
}),
|
||||
yellowNpc: new L.Icon({
|
||||
iconUrl: "./icons/yellow_star_big.png",
|
||||
iconSize: [9, 9],
|
||||
iconAnchor: [4.5, 4.5],
|
||||
}),
|
||||
};
|
||||
|
||||
export default customIcons;
|
||||
35
public/scripts/modules/math.js
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
const CENTER = 127.5;
|
||||
|
||||
export function coordToCardinal(lat, lng) {
|
||||
// Vérifier que les valeurs de lat et lng sont dans la plage spécifiée
|
||||
if (lat > 0 || lat < -255 || lng < 0 || lng > 255) {
|
||||
return "Coordonnées invalides";
|
||||
}
|
||||
let cardinalLng = 0;
|
||||
if (lng < CENTER) cardinalLng = 100 - (lng * 100 / CENTER);
|
||||
else if (lng > CENTER) cardinalLng = (lng - CENTER) * 100 / CENTER;
|
||||
else if (lng === CENTER) cardinalLng = 0;
|
||||
|
||||
let cardinalLat = 0;
|
||||
lat = lat * -1;
|
||||
if (lat < CENTER) cardinalLat = 100 - (lat * 100 / CENTER);
|
||||
else if (lat > CENTER) cardinalLat = (lat - CENTER) * 100 / CENTER;
|
||||
else if (lat === 0) cardinalLat = 0;
|
||||
|
||||
// Déterminer les directions
|
||||
let directionLat = lat < CENTER ? "N" : "S";
|
||||
let directionLng = lng < CENTER ? "W" : "E";
|
||||
|
||||
// Retourner la chaîne de caractères résultante
|
||||
return cardinalLat.toFixed(1) + " " + directionLat + " - " + cardinalLng.toFixed(1) + " " + directionLng;
|
||||
}
|
||||
|
||||
export function GetLandBlockId(ev, map) {
|
||||
var latlng = ev.latlng;
|
||||
var pointATmp = map.project(latlng, 4);
|
||||
const blockSize = 16; // Taille d'un bloc
|
||||
var y = Math.floor((4080 - pointATmp.y) / blockSize);
|
||||
var x = Math.floor(pointATmp.x / blockSize);
|
||||
|
||||
return L.point(x, y);
|
||||
}
|
||||
26
public/scripts/overlays/overlaysCoord.js
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
import * as math from "../modules/math.js";
|
||||
|
||||
var coordOverlay = L.control({ position: "bottomleft" });
|
||||
|
||||
coordOverlay.onAdd = function (map) {
|
||||
this._div = L.DomUtil.create("div", "coordinates-overlay");
|
||||
this._div.innerHTML = "Cliquez sur la carte pour voir les coordonnées";
|
||||
return this._div;
|
||||
};
|
||||
|
||||
coordOverlay.update = function (coord, cardinal) {
|
||||
this._div.innerHTML = "LandBlockId:" + "<br>" +
|
||||
"0x" + coord.x.toString(16).toUpperCase().padStart(2, '0')
|
||||
+ "" + coord.y.toString(16).toUpperCase().padStart(2, '0')
|
||||
+ "FFFF"
|
||||
+ "<br>"
|
||||
+ cardinal;
|
||||
};
|
||||
|
||||
export function UpdateCoord(ev, map) {
|
||||
coordOverlay.update(math.GetLandBlockId(ev, map), math.coordToCardinal(ev.latlng.lat, ev.latlng.lng));
|
||||
}
|
||||
|
||||
export default function InitialisationOverlayCoord(map) {
|
||||
coordOverlay.addTo(map);
|
||||
}
|
||||
21
public/scripts/overlays/overlaysNpc.js
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
import customIcons from '../modules/iconsMap.js';
|
||||
|
||||
export default async function getOverlayNpc() {
|
||||
const url = `/npcloc`;
|
||||
try {
|
||||
var markers = L.markerClusterGroup({
|
||||
chunkedLoading: true,
|
||||
disableClusteringAtZoom: 8,
|
||||
});
|
||||
const layerNpc = L.layerGroup();
|
||||
const response = await fetch(url);
|
||||
const data = await response.json();
|
||||
let npcLoc = [];
|
||||
data.forEach((npc) => {
|
||||
markers.addLayer(L.marker([npc.locy, npc.locx], { icon: customIcons.yellowNpc }).bindPopup(npc.literalValue));
|
||||
});
|
||||
return markers;
|
||||
} catch (error) {
|
||||
console.error(`Error fetching ${url} data:`, error);
|
||||
}
|
||||
}
|
||||
46
public/scripts/overlays/overlaysPlayer.js
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
import customIcons from '../modules/iconsMap.js';
|
||||
import { map } from "../map.js";
|
||||
// Dictionnaire pour stocker les marqueurs des personnages
|
||||
var characterMarkers = {};
|
||||
// Fonction pour récupérer les positions des personnages
|
||||
export default function fetchCharacterLocations() {
|
||||
fetch("/characterloc") // Effectuer une requête GET vers /characterloc
|
||||
.then((response) => response.json()) // Convertir la réponse en JSON
|
||||
.then((data) => {
|
||||
// Parcourir les données et afficher chaque position de personnage
|
||||
data.forEach((character) => {
|
||||
updateCharacterMarker(
|
||||
character.literalValue,
|
||||
character.locy,
|
||||
character.locx
|
||||
);
|
||||
});
|
||||
})
|
||||
.catch((error) => {
|
||||
console.error("Error fetching character locations:", error);
|
||||
});
|
||||
}
|
||||
// Fonction pour créer ou mettre à jour un marqueur de personnage
|
||||
function updateCharacterMarker(characterId, lat, lng) {
|
||||
// Vérifier si le marqueur existe déjà
|
||||
if (characterMarkers[characterId]) {
|
||||
// Mettre à jour la position du marqueur existant
|
||||
characterMarkers[characterId].setLatLng([lat, lng]);
|
||||
} else {
|
||||
// Créer un nouveau marqueur
|
||||
var marker = L.marker([lat, lng], { icon: customIcons.greenPlayer }).bindPopup(characterId).addTo(map);
|
||||
// Stocker le marqueur dans le dictionnaire
|
||||
characterMarkers[characterId] = marker;
|
||||
}
|
||||
}
|
||||
// Fonction pour récupérer les positions des personnages
|
||||
async function getPlayersLocations() {
|
||||
const url = `/characterloc`;
|
||||
try {
|
||||
const response = await fetch(url);
|
||||
let data = await response.json();
|
||||
return data;
|
||||
} catch (error) {
|
||||
console.error(`Error fetching ${key} data:`, error);
|
||||
}
|
||||
}
|
||||
54
public/scripts/overlays/overlaysPoi.js
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
import customIcons from '../modules/iconsMap.js';
|
||||
import npcLocOverlay from "./overlaysNpc.js";
|
||||
|
||||
var overlayMaps = {};
|
||||
var layerControl = {};
|
||||
|
||||
async function setupOverlayMaps() {
|
||||
var overlayPoi = await getOverlayMaps(); // Attend que overlayPoi soit chargé
|
||||
|
||||
// Itérer sur les clés de overlayPoi
|
||||
Object.keys(overlayPoi).forEach(key => {
|
||||
const layerGroup = overlayPoi[key];
|
||||
//overlayMaps[key] = layerGroup; // Assigner chaque layerGroup à la clé correspondante dans overlayMaps
|
||||
layerControl.addOverlay(layerGroup, key); // Ajoute chaque couche à la carte avec son nom
|
||||
});
|
||||
|
||||
//ADD OVERLAY NPC
|
||||
let test = await npcLocOverlay();
|
||||
overlayMaps["Npc"] = test;
|
||||
layerControl.addOverlay(test, "Npc");
|
||||
}
|
||||
|
||||
async function getOverlayMaps() {
|
||||
await Promise.all(Object.keys(overlayMapsTemplate).map(async (key) => {
|
||||
const url = `/poi/${key.toLowerCase()}/`;
|
||||
try {
|
||||
const response = await fetch(url);
|
||||
const data = await response.json();
|
||||
let icon = overlayMapsTemplate[key].icon;
|
||||
overlayMaps[key] = L.layerGroup(data.map((item) => L.marker([item.y, item.x], { icon: icon }).bindPopup(item.description)));
|
||||
} catch (error) {
|
||||
console.error(`Error fetching ${key} data:`, error);
|
||||
}
|
||||
}));
|
||||
return overlayMaps;
|
||||
}
|
||||
|
||||
// overlayMapsTemplate est l'objet avec les clés que vous avez définies
|
||||
const overlayMapsTemplate = {
|
||||
Ringways: { icon: customIcons.blueCircleVoidIcon },
|
||||
Gateways: { icon: customIcons.blueCircleFullIcon },
|
||||
PoI: { icon: customIcons.blueCrossFullIcon },
|
||||
Town: { icon: customIcons.yellowSquareFullIcon },
|
||||
Outpost: { icon: customIcons.yellowSquareVoidIcon },
|
||||
Vault: { icon: customIcons.redCrossFullIcon },
|
||||
Dungeon: { icon: customIcons.redCrossVoidIcon },
|
||||
City: { icon: customIcons.yellowCrownIcon },
|
||||
Faction: { icon: customIcons.greySquareIcon },
|
||||
};
|
||||
|
||||
export default function InitialisationOverlay(map) {
|
||||
setupOverlayMaps();
|
||||
layerControl = L.control.layers(null, overlayMaps).addTo(map);
|
||||
}
|
||||
41573
public/scripts/poi/testGroups.js
Normal file
24
public/style/style.css
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
html, body {
|
||||
height: 100%; /* Assurez-vous que le corps prend toute la hauteur de la fenêtre */
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
#map {
|
||||
height: 100vh; /* Hauteur de la fenêtre de visualisation */
|
||||
width: 100vw; /* Largeur de la fenêtre de visualisation */
|
||||
}
|
||||
.leaflet-tile {
|
||||
border: 1px solid #ff000000; /* Ajoute une bordure noire d'un pixel */
|
||||
}
|
||||
.coordinates-overlay {
|
||||
width: 126px;
|
||||
position: absolute;
|
||||
bottom: 10px;
|
||||
left: 10px;
|
||||
background: white;
|
||||
padding: 5px 10px;
|
||||
border-radius: 5px;
|
||||
box-shadow: 0 0 5px rgba(0,0,0,0.5);
|
||||
font-size: 16px;
|
||||
z-index: 1000; /* S'assure que l'overlay est visible au-dessus de la carte */
|
||||
}
|
||||
169
server/.gitignore
vendored
Normal file
|
|
@ -0,0 +1,169 @@
|
|||
# Please take extra care not to add rules that will make tracked files ignored.
|
||||
# To test that, run `git ls-files -i --exclude-standard`.
|
||||
# To check why a specific file is ignored, run `git check-ignore -v <filepath>`.
|
||||
|
||||
# === Rule for dotfiles ===
|
||||
# Ignore all dotfiles.
|
||||
.*
|
||||
# Exclude specific dotfiles that we want to track.
|
||||
!deps/**/.*
|
||||
!.devcontainer/
|
||||
!.devcontainer/.devcontainer.json
|
||||
!test/fixtures/**/.*
|
||||
!.clang-format
|
||||
!.cpplint
|
||||
!.editorconfig
|
||||
!.eslintignore
|
||||
!.eslintrc.js
|
||||
!.eslintrc.yaml
|
||||
!.gitattributes
|
||||
!.github
|
||||
!.gitignore
|
||||
!.gitkeep
|
||||
!.gitpod.yml
|
||||
!.mailmap
|
||||
!.nycrc
|
||||
!.yamllint.yaml
|
||||
|
||||
# === Rules for root dir ===
|
||||
/core
|
||||
/vgcore.*
|
||||
/v8*.log
|
||||
/perf.data
|
||||
/perf.data.old
|
||||
/tags
|
||||
/tags.*
|
||||
/doc/api.xml
|
||||
/node
|
||||
/node_g
|
||||
/gon-config.json
|
||||
/*.exe
|
||||
/*.swp
|
||||
/out
|
||||
/*.msi
|
||||
/*.wixpdb
|
||||
/*.qlog
|
||||
# For GitHub Codespaces
|
||||
/pythonenv*
|
||||
|
||||
# === Rules for artifacts of `./configure` ===
|
||||
/icu_config.gypi
|
||||
/config.gypi
|
||||
/config.status
|
||||
/config_fips.gypi
|
||||
|
||||
# === Rules for MSVS artifacts ===
|
||||
Debug/
|
||||
Release/
|
||||
*.sln
|
||||
*.suo
|
||||
*.vcxproj*
|
||||
UpgradeLog*.XML
|
||||
_UpgradeReport_Files/
|
||||
*.sdf
|
||||
*.opensdf
|
||||
*.VC.*
|
||||
*.wixobj
|
||||
/tools/msvs/genfiles/
|
||||
/npm.wxs
|
||||
/corepack.wxs
|
||||
/tools/msvs/msi/**/Release/
|
||||
/tools/msvs/msi/**/obj/
|
||||
/tools/msvs/msi/**/x64/
|
||||
# Exclude MSVS files used for .msi file generation
|
||||
!tools/msvs/msi/**/custom_actions.vcxproj
|
||||
!tools/msvs/msi/**/nodemsi.sln
|
||||
|
||||
# === Rules for GYP artifacts ===
|
||||
*-nodegyp*
|
||||
/gyp-*-tool
|
||||
/test/addons/??_*/
|
||||
/*.mk
|
||||
|
||||
# === Rules for other build artifacts ===
|
||||
/email.md
|
||||
/deps/v8-*
|
||||
/deps/icu
|
||||
/deps/icu*.zip
|
||||
/deps/icu*.tgz
|
||||
/deps/icu-tmp
|
||||
./node_modules
|
||||
/android-toolchain/
|
||||
# generated by gyp on Windows
|
||||
/deps/openssl/openssl.props
|
||||
/deps/openssl/openssl.targets
|
||||
/deps/openssl/openssl.xml
|
||||
/deps/openssl/openssl-fipsmodule.props
|
||||
/deps/openssl/openssl-fipsmodule.targets
|
||||
/deps/openssl/openssl-fipsmodule.xml
|
||||
# generated by gyp on android
|
||||
/*.target.mk
|
||||
/*.host.mk
|
||||
/deps/openssl/openssl.target.mk
|
||||
/deps/zlib/zlib.target.mk
|
||||
# generated by MSVC with /P enabled
|
||||
tools/*/*.i
|
||||
tools/*/*.i.tmp
|
||||
|
||||
# === Rules for release artifacts ===
|
||||
/*.tar.*
|
||||
/*.pkg
|
||||
/SHASUMS*.txt*
|
||||
|
||||
# === Rules for `node_modules` ===
|
||||
!**/node_modules/**
|
||||
/node_modules
|
||||
/tools/doc/node_modules
|
||||
/tools/clang-format/node_modules
|
||||
|
||||
# === Rules for test artifacts ===
|
||||
/*.tap
|
||||
/*.xml
|
||||
/v8*-tap.json
|
||||
/node_trace.*.log
|
||||
# coverage related
|
||||
/gcovr
|
||||
/build
|
||||
/coverage
|
||||
|
||||
# === Rules for Xcode artifacts ===
|
||||
*.xcodeproj
|
||||
*.xcworkspace
|
||||
*.pbxproj
|
||||
|
||||
# === Rules for files in `/deps` ===
|
||||
# Exclude all files in the vendored `npm`.
|
||||
!/deps/npm/node_modules
|
||||
# These are not needed and causes issues for distro packagers.
|
||||
/deps/npm/node_modules/.bin/
|
||||
# Respect V8's .gitignore
|
||||
!deps/v8/**
|
||||
# Ignore the libuv book
|
||||
/deps/uv/docs/code/
|
||||
/deps/uv/docs/src/guide/
|
||||
# Ignore .github directories
|
||||
/deps/**/.github/
|
||||
# Ignore dependencies fetched by tools/v8/fetch_deps.py
|
||||
/deps/.cipd
|
||||
|
||||
# === Rules for Windows vcbuild.bat ===
|
||||
/temp-vcbuild
|
||||
|
||||
# === Rules for CMake ===
|
||||
cmake-build-debug/
|
||||
CMakeCache.txt
|
||||
CMakeFiles
|
||||
CTestTestfile.cmake
|
||||
cmake_install.cmake
|
||||
install_manifest.txt
|
||||
*.cbp
|
||||
|
||||
# === Global Rules ===
|
||||
# Keep last to avoid being excluded
|
||||
*.pyc
|
||||
__pycache__
|
||||
.DS_Store
|
||||
*~
|
||||
|
||||
# === Rules for C++ development ===
|
||||
compile_commands.json
|
||||