diff options
author | Hsieh Chin Fan <pham@topo.tw> | 2024-09-22 12:17:04 +0800 |
---|---|---|
committer | Hsieh Chin Fan <pham@topo.tw> | 2024-09-22 12:17:04 +0800 |
commit | 6d930d449f78b952d11ba524e33fe39c52d6e2df (patch) | |
tree | f185b5ffec895459c4675a6589961e5a669b13cb /src | |
parent | 698262eb4f618ec6f6ae5b3389b935d7b34f1701 (diff) |
feat: add close button for draggable block
Diffstat (limited to 'src')
-rw-r--r-- | src/Layout.mjs | 18 | ||||
-rw-r--r-- | src/css/dumbymap.css | 49 |
2 files changed, 44 insertions, 23 deletions
diff --git a/src/Layout.mjs b/src/Layout.mjs index 5673722..c81225f 100644 --- a/src/Layout.mjs +++ b/src/Layout.mjs | |||
@@ -66,6 +66,7 @@ export class Overlay extends Layout { | |||
66 | <div class="handle">\u2630</div> | 66 | <div class="handle">\u2630</div> |
67 | </div> | 67 | </div> |
68 | <div class="utils"> | 68 | <div class="utils"> |
69 | <div id="close">\u274C</div> | ||
69 | <div id="plus-font-size" ">\u2795</div> | 70 | <div id="plus-font-size" ">\u2795</div> |
70 | <div id="minus-font-size">\u2796</div> | 71 | <div id="minus-font-size">\u2796</div> |
71 | </div> | 72 | </div> |
@@ -92,24 +93,25 @@ export class Overlay extends Layout { | |||
92 | snap: { x: { step: 20 }, y: { step: 20 } }, | 93 | snap: { x: { step: 20 }, y: { step: 20 } }, |
93 | }) | 94 | }) |
94 | 95 | ||
96 | // Close button | ||
97 | draggableBlock.querySelector('#close').onclick = () => { | ||
98 | draggableBlock.setAttribute("data-hide", "true") | ||
99 | } | ||
95 | // Plus/Minus font-size of content | 100 | // Plus/Minus font-size of content |
96 | const plusButton = draggableBlock.querySelector('#plus-font-size') | 101 | draggableBlock.querySelector('#plus-font-size').onclick = () => { |
97 | plusButton.onclick = () => { | ||
98 | const fontSize = parseFloat(getComputedStyle(block).fontSize) / 16 | 102 | const fontSize = parseFloat(getComputedStyle(block).fontSize) / 16 |
99 | block.style.fontSize = `${fontSize + 0.1}rem` | 103 | block.style.fontSize = `${fontSize + 0.1}rem` |
100 | } | 104 | } |
101 | const minusButton = draggableBlock.querySelector('#minus-font-size') | 105 | draggableBlock.querySelector('#minus-font-size').onclick = () => { |
102 | minusButton.onclick = () => { | ||
103 | const fontSize = parseFloat(getComputedStyle(block).fontSize) / 16 | 106 | const fontSize = parseFloat(getComputedStyle(block).fontSize) / 16 |
104 | block.style.fontSize = `${fontSize - 0.1}rem` | 107 | block.style.fontSize = `${fontSize - 0.1}rem` |
105 | } | 108 | } |
109 | const utils = draggableBlock.querySelector('.utils') | ||
106 | draggableInstance.onDragStart = () => { | 110 | draggableInstance.onDragStart = () => { |
107 | plusButton.style.opacity = '0' | 111 | utils.style.opacity = 0 |
108 | minusButton.style.opacity = '0' | ||
109 | } | 112 | } |
110 | draggableInstance.onDragEnd = () => { | 113 | draggableInstance.onDragEnd = () => { |
111 | plusButton.style = '' | 114 | utils.style = '' |
112 | minusButton.style = '' | ||
113 | } | 115 | } |
114 | 116 | ||
115 | // Reposition draggable instance when resized | 117 | // Reposition draggable instance when resized |
diff --git a/src/css/dumbymap.css b/src/css/dumbymap.css index f1aa02c..b2e73ab 100644 --- a/src/css/dumbymap.css +++ b/src/css/dumbymap.css | |||
@@ -3,12 +3,22 @@ | |||
3 | } | 3 | } |
4 | 4 | ||
5 | @keyframes fade-in { | 5 | @keyframes fade-in { |
6 | from { opacity: 0.3; } | 6 | from { opacity: 0; } |
7 | to { opacity: 1; } | 7 | to { opacity: 1; } |
8 | } | 8 | } |
9 | 9 | ||
10 | @keyframes fade-out { | 10 | @keyframes fade-out { |
11 | from { opacity: 1; } | 11 | from { opacity: 1; } |
12 | to { opacity: 0; } | ||
13 | } | ||
14 | |||
15 | @keyframes map-fade-in { | ||
16 | from { opacity: 0.3; } | ||
17 | to { opacity: 1; } | ||
18 | } | ||
19 | |||
20 | @keyframes map-fade-out { | ||
21 | from { opacity: 1; } | ||
12 | to { opacity: 0.3; } | 22 | to { opacity: 0.3; } |
13 | } | 23 | } |
14 | 24 | ||
@@ -110,7 +120,7 @@ | |||
110 | border: 3px solid transparent; | 120 | border: 3px solid transparent; |
111 | 121 | ||
112 | background: white; | 122 | background: white; |
113 | animation: fade-in 1s; | 123 | animation: map-fade-in 1s; |
114 | 124 | ||
115 | &[data-focus="true"] { | 125 | &[data-focus="true"] { |
116 | border: 3px solid gray; | 126 | border: 3px solid gray; |
@@ -123,7 +133,7 @@ | |||
123 | border: 3px solid gray; | 133 | border: 3px solid gray; |
124 | 134 | ||
125 | opacity: 0.3; | 135 | opacity: 0.3; |
126 | animation: fade-out 1s; | 136 | animation: map-fade-out 1s; |
127 | } | 137 | } |
128 | } | 138 | } |
129 | 139 | ||
@@ -139,8 +149,8 @@ | |||
139 | height: 100%; | 149 | height: 100%; |
140 | 150 | ||
141 | position: absolute; | 151 | position: absolute; |
142 | top: 0; | ||
143 | left: 0; | 152 | left: 0; |
153 | top: 0; | ||
144 | } | 154 | } |
145 | 155 | ||
146 | [data-focus="true"] { | 156 | [data-focus="true"] { |
@@ -192,17 +202,17 @@ | |||
192 | height: 60px; | 202 | height: 60px; |
193 | 203 | ||
194 | position: absolute; | 204 | position: absolute; |
195 | top: calc(50% - 30px); | ||
196 | left: -30px; | 205 | left: -30px; |
206 | top: calc(50% - 30px); | ||
197 | 207 | ||
198 | border-radius: 50%; | 208 | border-radius: 50%; |
199 | 209 | ||
200 | background-color: #3887be; | 210 | background-color: #3887be; |
201 | background-image: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PHN2ZyAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIgICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiICAgd2lkdGg9IjYwIiAgIGhlaWdodD0iNjAiICAgdmVyc2lvbj0iMS4xIiAgIHZpZXdCb3g9IjAgMCA2MCA2MCIgICBpZD0ic3ZnNTQzNCIgICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkxK2RldmVsK29zeG1lbnUgcjEyOTExIiAgIHNvZGlwb2RpOmRvY25hbWU9Imwtci5zdmciPiAgPG1ldGFkYXRhICAgICBpZD0ibWV0YWRhdGE1NDQ0Ij4gICAgPHJkZjpSREY+ICAgICAgPGNjOldvcmsgICAgICAgICByZGY6YWJvdXQ9IiI+ICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4gICAgICAgIDxkYzp0eXBlICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPiAgICAgICAgPGRjOnRpdGxlPjwvZGM6dGl0bGU+ICAgICAgPC9jYzpXb3JrPiAgICA8L3JkZjpSREY+ICA8L21ldGFkYXRhPiAgPGRlZnMgICAgIGlkPSJkZWZzNTQ0MiIgLz4gIDxzb2RpcG9kaTpuYW1lZHZpZXcgICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIgICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IiAgICAgYm9yZGVyb3BhY2l0eT0iMSIgICAgIG9iamVjdHRvbGVyYW5jZT0iMTAiICAgICBncmlkdG9sZXJhbmNlPSIxMCIgICAgIGd1aWRldG9sZXJhbmNlPSIxMCIgICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwIiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIgICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTI4NiIgICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9Ijc1MSIgICAgIGlkPSJuYW1lZHZpZXc1NDQwIiAgICAgc2hvd2dyaWQ9InRydWUiICAgICBpbmtzY2FwZTp6b29tPSI0IiAgICAgaW5rc2NhcGU6Y3g9IjI1Ljg4OTgzMSIgICAgIGlua3NjYXBlOmN5PSIzNC4zODE4MzMiICAgICBpbmtzY2FwZTp3aW5kb3cteD0iMCIgICAgIGlua3NjYXBlOndpbmRvdy15PSIyMyIgICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjAiICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJzdmc1NDM0IiAgICAgaW5rc2NhcGU6b2JqZWN0LW5vZGVzPSJ0cnVlIiAgICAgaW5rc2NhcGU6c25hcC1zbW9vdGgtbm9kZXM9InRydWUiPiAgICA8aW5rc2NhcGU6Z3JpZCAgICAgICB0eXBlPSJ4eWdyaWQiICAgICAgIGlkPSJncmlkNTk4OSIgLz4gIDwvc29kaXBvZGk6bmFtZWR2aWV3PiAgPHBhdGggICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIiAgICAgZD0iTSAyNSAyNCBMIDE2IDMwIEwgMjUgMzYgTCAyNSAyNCB6IE0gMzUgMjQgTCAzNSAzNiBMIDQ0IDMwIEwgMzUgMjQgeiAiICAgICBpZD0icGF0aDU5OTUiIC8+PC9zdmc+"); | 211 | background-image: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PHN2ZyAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIgICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiICAgd2lkdGg9IjYwIiAgIGhlaWdodD0iNjAiICAgdmVyc2lvbj0iMS4xIiAgIHZpZXdCb3g9IjAgMCA2MCA2MCIgICBpZD0ic3ZnNTQzNCIgICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkxK2RldmVsK29zeG1lbnUgcjEyOTExIiAgIHNvZGlwb2RpOmRvY25hbWU9Imwtci5zdmciPiAgPG1ldGFkYXRhICAgICBpZD0ibWV0YWRhdGE1NDQ0Ij4gICAgPHJkZjpSREY+ICAgICAgPGNjOldvcmsgICAgICAgICByZGY6YWJvdXQ9IiI+ICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4gICAgICAgIDxkYzp0eXBlICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPiAgICAgICAgPGRjOnRpdGxlPjwvZGM6dGl0bGU+ICAgICAgPC9jYzpXb3JrPiAgICA8L3JkZjpSREY+ICA8L21ldGFkYXRhPiAgPGRlZnMgICAgIGlkPSJkZWZzNTQ0MiIgLz4gIDxzb2RpcG9kaTpuYW1lZHZpZXcgICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIgICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IiAgICAgYm9yZGVyb3BhY2l0eT0iMSIgICAgIG9iamVjdHRvbGVyYW5jZT0iMTAiICAgICBncmlkdG9sZXJhbmNlPSIxMCIgICAgIGd1aWRldG9sZXJhbmNlPSIxMCIgICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwIiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIgICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTI4NiIgICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9Ijc1MSIgICAgIGlkPSJuYW1lZHZpZXc1NDQwIiAgICAgc2hvd2dyaWQ9InRydWUiICAgICBpbmtzY2FwZTp6b29tPSI0IiAgICAgaW5rc2NhcGU6Y3g9IjI1Ljg4OTgzMSIgICAgIGlua3NjYXBlOmN5PSIzNC4zODE4MzMiICAgICBpbmtzY2FwZTp3aW5kb3cteD0iMCIgICAgIGlua3NjYXBlOndpbmRvdy15PSIyMyIgICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjAiICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJzdmc1NDM0IiAgICAgaW5rc2NhcGU6b2JqZWN0LW5vZGVzPSJ0cnVlIiAgICAgaW5rc2NhcGU6c25hcC1zbW9vdGgtbm9kZXM9InRydWUiPiAgICA8aW5rc2NhcGU6Z3JpZCAgICAgICB0eXBlPSJ4eWdyaWQiICAgICAgIGlkPSJncmlkNTk4OSIgLz4gIDwvc29kaXBvZGk6bmFtZWR2aWV3PiAgPHBhdGggICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIiAgICAgZD0iTSAyNSAyNCBMIDE2IDMwIEwgMjUgMzYgTCAyNSAyNCB6IE0gMzUgMjQgTCAzNSAzNiBMIDQ0IDMwIEwgMzUgMjQgeiAiICAgICBpZD0icGF0aDU5OTUiIC8+PC9zdmc+"); |
202 | 212 | ||
203 | cursor: grab; | ||
204 | transition: transform 0.3s ease-in-out; | ||
205 | transform: scale(0.5, 0.5); | 213 | transform: scale(0.5, 0.5); |
214 | transition: transform 0.3s ease-in-out; | ||
215 | cursor: grab; | ||
206 | box-shadow: inset 0 0 0 2px white; | 216 | box-shadow: inset 0 0 0 2px white; |
207 | 217 | ||
208 | &:hover { | 218 | &:hover { |
@@ -223,8 +233,8 @@ | |||
223 | padding: 0; | 233 | padding: 0; |
224 | 234 | ||
225 | position: fixed; | 235 | position: fixed; |
226 | top: 0; | ||
227 | left: 0; | 236 | left: 0; |
237 | top: 0; | ||
228 | } | 238 | } |
229 | 239 | ||
230 | .Showcase { | 240 | .Showcase { |
@@ -252,6 +262,8 @@ | |||
252 | font-size: 0.8rem; | 262 | font-size: 0.8rem; |
253 | pointer-events: auto; | 263 | pointer-events: auto; |
254 | 264 | ||
265 | transition: visibility 1s; | ||
266 | |||
255 | .dumby-block { | 267 | .dumby-block { |
256 | overflow: auto; | 268 | overflow: auto; |
257 | margin: 0; | 269 | margin: 0; |
@@ -299,8 +311,8 @@ | |||
299 | width: 100%; | 311 | width: 100%; |
300 | 312 | ||
301 | position: absolute; | 313 | position: absolute; |
302 | top: 0; | ||
303 | left: 0; | 314 | left: 0; |
315 | top: 0; | ||
304 | z-index: 1; | 316 | z-index: 1; |
305 | border-top-left-radius: 0.3rem; | 317 | border-top-left-radius: 0.3rem; |
306 | border-top-right-radius: 0.3rem; | 318 | border-top-right-radius: 0.3rem; |
@@ -309,8 +321,8 @@ | |||
309 | font-size: 1.1rem; | 321 | font-size: 1.1rem; |
310 | text-align: center; | 322 | text-align: center; |
311 | 323 | ||
312 | transition: all 0.3s ease-in-out; | ||
313 | transform: translate(0, -0.6rem); | 324 | transform: translate(0, -0.6rem); |
325 | transition: all 0.3s ease-in-out; | ||
314 | } | 326 | } |
315 | } | 327 | } |
316 | 328 | ||
@@ -319,7 +331,10 @@ | |||
319 | } | 331 | } |
320 | 332 | ||
321 | &[data-hide="true"] { | 333 | &[data-hide="true"] { |
322 | display: none; | 334 | animation: fade-out 0.3s; |
335 | |||
336 | opacity: 0; | ||
337 | visibility: hidden; | ||
323 | } | 338 | } |
324 | 339 | ||
325 | &:has(.draggable:hover, .utils:hover) { | 340 | &:has(.draggable:hover, .utils:hover) { |
@@ -341,16 +356,18 @@ | |||
341 | display: flex; | 356 | display: flex; |
342 | 357 | ||
343 | position: absolute; | 358 | position: absolute; |
359 | left: 100%; | ||
344 | top: 0; | 360 | top: 0; |
345 | top: -0.5rem; | 361 | top: -0.5rem; |
346 | left: 100%; | ||
347 | 362 | ||
348 | font-size: 1.5rem; | 363 | font-size: 1.5rem; |
364 | |||
365 | transition: opacity 1s linear; | ||
349 | gap: 6px; | 366 | gap: 6px; |
350 | animation: fade-in 1.5s; | 367 | animation: fade-in 1.5s; |
351 | padding-left: 1rem; | 368 | padding-left: 1rem; |
352 | 369 | ||
353 | [id$="-font-size"]{ | 370 | > * { |
354 | padding: 0.2rem 0.4rem; | 371 | padding: 0.2rem 0.4rem; |
355 | 372 | ||
356 | border: 3px gray solid; | 373 | border: 3px gray solid; |
@@ -358,13 +375,15 @@ | |||
358 | 375 | ||
359 | background: white; | 376 | background: white; |
360 | 377 | ||
361 | transition: opacity 1s linear; | ||
362 | user-select: none; | 378 | user-select: none; |
363 | } | 379 | } |
364 | 380 | ||
381 | #close { | ||
382 | cursor: pointer; | ||
383 | } | ||
384 | |||
365 | #plus-font-size { | 385 | #plus-font-size { |
366 | cursor: zoom-in; | 386 | cursor: zoom-in; |
367 | user-select: none; | ||
368 | } | 387 | } |
369 | 388 | ||
370 | #minus-font-size { | 389 | #minus-font-size { |