Skip to content

Commit 966234e

Browse files
committed
Add abillity to copy a block-position into clipboard
1 parent 5c59a95 commit 966234e

File tree

3 files changed

+80
-12
lines changed

3 files changed

+80
-12
lines changed

common/webapp/public/lang/en.conf

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,7 @@
135135
sun: "Sun"
136136
block: "Block"
137137
}
138+
clipboard: "click to copy"
138139
}
139140
info: {
140141
title: "Info"

common/webapp/src/js/PopupMarker.js

Lines changed: 42 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,10 @@ export class PopupMarker extends Marker {
7070
return true;
7171
}
7272

73+
static blockClipboardFormat = (pos, isHires) => isHires ? `${pos.x} ${pos.y} ${pos.z}` : `${pos.x} ${pos.z}`;
74+
static chunkClipboardFormat = (pos, isHires) => isHires ? `${pos.x} ${pos.y} ${pos.z}` : `${pos.x} ${pos.z}`;
75+
static regionClipboardFormat = pos => `r.${pos.x}.${pos.z}.mca`
76+
7377
onMapInteraction = evt => {
7478
let isHires = true;
7579
let int = evt.detail.hiresHit;
@@ -96,7 +100,9 @@ export class PopupMarker extends Marker {
96100

97101
if (isHires) {
98102
this.element.innerHTML = `
99-
<div class="group">
103+
<div class="group"
104+
data-tooltip="${i18n.t("blockTooltip.clipboard")}"
105+
onclick="navigator.clipboard.writeText('${PopupMarker.blockClipboardFormat(this.position, true)}')" >
100106
<div class="label">${i18n.t("blockTooltip.block")}:</div>
101107
<div class="content">
102108
<div class="entry"><span class="label">x: </span><span class="value">${this.position.x}</span></div>
@@ -107,7 +113,9 @@ export class PopupMarker extends Marker {
107113
`;
108114
} else {
109115
this.element.innerHTML = `
110-
<div class="group">
116+
<div class="group"
117+
data-tooltip="${i18n.t("blockTooltip.clipboard")}"
118+
onclick="navigator.clipboard.writeText('${PopupMarker.blockClipboardFormat(this.position, false)}')" >
111119
<div class="label">${i18n.t("blockTooltip.position")}:</div>
112120
<div class="content">
113121
<div class="entry"><span class="label">x: </span><span class="value">${this.position.x}</span></div>
@@ -122,18 +130,40 @@ export class PopupMarker extends Marker {
122130
let regionCoords = new Vector2(this.position.x, this.position.z).divideScalar(512).floor();
123131
let regionFile = `r.${regionCoords.x}.${regionCoords.y}.mca`;
124132

125-
this.element.innerHTML += `
126-
<hr>
127-
<div class="group">
128-
<div class="label">${i18n.t("blockTooltip.chunk")}:</div>
129-
<div class="content">
130-
<div class="entry"><span class="label">x: </span><span class="value">${chunkCoords.x}</span></div>
131-
<div class="entry"><span class="label">y: </span><span class="value">${chunkCoords.y}</span></div>
132-
<div class="entry"><span class="label">z: </span><span class="value">${chunkCoords.z}</span></div>
133+
if (isHires) {
134+
this.element.innerHTML += `
135+
<hr>
136+
<div class="group"
137+
data-tooltip="${i18n.t("blockTooltip.clipboard")}"
138+
onclick="navigator.clipboard.writeText('${PopupMarker.chunkClipboardFormat(chunkCoords, true)}')" >
139+
<div class="label">${i18n.t("blockTooltip.chunk")}:</div>
140+
<div class="content">
141+
<div class="entry"><span class="label">x: </span><span class="value">${chunkCoords.x}</span></div>
142+
<div class="entry"><span class="label">y: </span><span class="value">${chunkCoords.y}</span></div>
143+
<div class="entry"><span class="label">z: </span><span class="value">${chunkCoords.z}</span></div>
144+
</div>
133145
</div>
134-
</div>
146+
`;
147+
} else {
148+
this.element.innerHTML += `
149+
<hr>
150+
<div class="group"
151+
data-tooltip="${i18n.t("blockTooltip.clipboard")}"
152+
onclick="navigator.clipboard.writeText('${PopupMarker.chunkClipboardFormat(chunkCoords, false)}')" >
153+
<div class="label">${i18n.t("blockTooltip.chunk")}:</div>
154+
<div class="content">
155+
<div class="entry"><span class="label">x: </span><span class="value">${chunkCoords.x}</span></div>
156+
<div class="entry"><span class="label">z: </span><span class="value">${chunkCoords.z}</span></div>
157+
</div>
158+
</div>
159+
`;
160+
}
161+
162+
this.element.innerHTML += `
135163
<hr>
136-
<div class="group">
164+
<div class="group"
165+
data-tooltip="${i18n.t("blockTooltip.clipboard")}"
166+
onclick="navigator.clipboard.writeText('${PopupMarker.regionClipboardFormat(regionCoords)}')" >
137167
<div class="label">${i18n.t("blockTooltip.region.region")}:</div>
138168
<div class="content">
139169
<div class="entry"><span class="label">x: </span><span class="value">${regionCoords.x}</span></div>

common/webapp/src/scss/markers.scss

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,43 @@
8989
line-height: 1.2em;
9090

9191
.group {
92+
93+
&[data-tooltip] {
94+
95+
position: relative;
96+
97+
pointer-events: auto;
98+
user-select: none;
99+
cursor: pointer;
100+
101+
margin: -0.5em;
102+
padding: 0.5em;
103+
104+
&:hover::before {
105+
display: block;
106+
position: absolute;
107+
z-index: 1;
108+
109+
left: 50%;
110+
bottom: calc(100% + 0.5em);
111+
transform: translate(-50%, 0);
112+
113+
content: attr(data-tooltip);
114+
115+
background: var(--theme-bg);
116+
color: var(--theme-fg-light);
117+
filter: drop-shadow(1px 1px 3px #0008);
118+
font-size: 0.75em;
119+
line-height: 1em;
120+
padding: .5em;
121+
}
122+
123+
&:active {
124+
background-color: var(--theme-bg-light);
125+
}
126+
127+
}
128+
92129
> .label {
93130
position: relative;
94131
top: 0;

0 commit comments

Comments
 (0)