Skip to content

Commit dfd4f37

Browse files
author
Arman Badalyan
committed
geophystech#305 Damage level colors.
1 parent c4c96ca commit dfd4f37

File tree

4 files changed

+89
-58
lines changed

4 files changed

+89
-58
lines changed

src/assets/scss/event_map.scss

+19-13
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,20 @@ $legend-marker-size: 10px;
3939
}
4040
}
4141

42+
.marker-cluster
43+
{
44+
> div {
45+
border-radius: 50%;
46+
padding: 5px;
47+
height: 100%;
48+
width: 100%;
49+
50+
> div {
51+
margin: 0;
52+
}
53+
}
54+
}
55+
4256
.map-legend
4357
{
4458
box-shadow: 0 0 15px rgba(0, 0, 0, .2);
@@ -95,22 +109,14 @@ $legend-marker-size: 10px;
95109
width: 50px;
96110
top: -1px;
97111

98-
span:first-child
99-
{
112+
> span:first-child {
100113
height: $legend-marker-size;
101114
width: $legend-marker-size;
102-
vertical-align: middle;
103-
display: inline-block;
104-
}
105-
106-
span:last-child
107-
{
108-
line-height: $legend-marker-size;
109-
height: $legend-marker-size;
110-
vertical-align: middle;
111115
display: inline-block;
112-
margin-left: 8px;
113-
width: auto;
116+
position: relative;
117+
margin-right: 8px;
118+
content: '';
119+
top: 1px;
114120
}
115121
}
116122
}

src/components/maps/Buildings.vue

+16-25
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
setView, createMapMarkerPopupBuilding
99
} from '@/map_functions.js'
1010
11-
import { colorDarken } from '@/helpers/color'
11+
import { colorDarken, colorLighten, colorHexToRGB } from '@/helpers/color'
1212
1313
export default {
1414
props: ['event', 'tab'],
@@ -43,15 +43,22 @@
4343
})
4444
4545
damageLevels = Object.entries(damageLevels).sort((a, b) => b[1] - a[1] || 1)
46-
let damageLevel = damageLevels[0][0]
46+
let damageLevel = parseInt(damageLevels[0][0], 10)
4747
4848
if (damageLevel > 5) {
4949
damageLevel = 5
5050
}
5151
52+
let _color = buildingColor(damageLevel)
53+
5254
return new window.L.DivIcon({
5355
className: `marker-cluster marker-cluster-damage-level-${damageLevel}`,
54-
html: `<div><span>${cluster.getChildCount()}</span></div>`,
56+
html:
57+
`<div style="background: ${colorHexToRGB(colorLighten(_color, 20), 0.4)}">
58+
<div style="background: ${colorHexToRGB(_color, 0.6)}">
59+
<span>${cluster.getChildCount()}</span>
60+
</div>
61+
</div>`,
5562
iconSize: new window.L.Point(40, 40)
5663
})
5764
}
@@ -108,13 +115,13 @@
108115
const legend = window.L.control({ position: 'bottomright' })
109116
110117
legend.onAdd = map => {
111-
let div = window.L.DomUtil.create('div', 'map-legend')
118+
let div = window.L.DomUtil.create('div', 'map-legend buildings-legends')
112119
div.innerHTML =
113-
`<div class="buildings-legend"><span style="background: ${buildingColor(1)}"></span><span>d-1</span></div>
114-
<div class="buildings-legend"><span style="background: ${buildingColor(2)}"></span><span>d-2</span></div>
115-
<div class="buildings-legend"><span style="background: ${buildingColor(3)}"></span><span>d-3</span></div>
116-
<div class="buildings-legend"><span style="background: ${buildingColor(4)}"></span><span>d-4</span></div>
117-
<div class="buildings-legend"><span style="background: ${buildingColor(5)}"></span><span>d≥5</span></div>`
120+
`<div class="buildings-legend"><span style="background: ${buildingColor(1)}"></span>d-1</div>
121+
<div class="buildings-legend"><span style="background: ${buildingColor(2)}"></span>d-2</div>
122+
<div class="buildings-legend"><span style="background: ${buildingColor(3)}"></span>d-3</div>
123+
<div class="buildings-legend"><span style="background: ${buildingColor(4)}"></span>d-4</div>
124+
<div class="buildings-legend"><span style="background: ${buildingColor(5)}"></span>d≥5</div>`
118125
return div
119126
}
120127
@@ -165,21 +172,5 @@
165172

166173
<style lang="scss">
167174
@import '~scss/event_map';
168-
169-
$level-colors: (
170-
1: green,
171-
2: yellow,
172-
3: orange,
173-
4: red,
174-
5: #C50126
175-
);
176-
177-
@each $level, $color in $level-colors {
178-
.marker-cluster-damage-level-#{$level} {
179-
background-color: rgba(lighten($color, 20%), 0.6);
180-
> div { background-color: rgba($color, 0.6) }
181-
}
182-
}
183-
184175
</style>
185176

src/helpers/color.js

+48-14
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,54 @@
1-
export function colorDarken(color, percent)
1+
2+
function lightenDarkenColor(color, amt)
23
{
3-
let R = parseInt(color.substring(1, 3), 16)
4-
let G = parseInt(color.substring(3, 5), 16)
5-
let B = parseInt(color.substring(5, 7), 16)
4+
let usePound = false
5+
6+
if (color[0] === '#') {
7+
color = color.slice(1)
8+
usePound = true
9+
}
10+
11+
let num = parseInt(color, 16)
12+
let r = (num >> 16) + amt
13+
14+
if (r > 255) r = 255
15+
else if (r < 0) r = 0
16+
17+
let b = ((num >> 8) & 0x00FF) + amt
18+
19+
if (b > 255) b = 255
20+
else if (b < 0) b = 0
21+
22+
let g = (num & 0x0000FF) + amt
23+
24+
if (g > 255) g = 255
25+
else if (g < 0) g = 0
626

7-
R = parseInt(R * (100 + percent) / 100)
8-
G = parseInt(G * (100 + percent) / 100)
9-
B = parseInt(B * (100 + percent) / 100)
27+
return (usePound ? '#' : '') + (g | (b << 8) | (r << 16)).toString(16)
1028

11-
R = (R < 255) ? R : 255
12-
G = (G < 255) ? G : 255
13-
B = (B < 255) ? B : 255
29+
}
30+
31+
export function colorDarken(color, percent) {
32+
return lightenDarkenColor(color, percent * -1)
33+
}
34+
35+
export function colorLighten(color, percent) {
36+
return lightenDarkenColor(color, percent)
37+
}
38+
39+
export function colorHexToRGB(hex, alpha)
40+
{
41+
if (hex[0] === '#') {
42+
hex = hex.slice(1)
43+
}
1444

15-
let RR = ((R.toString(16).length === 1) ? '0' + R.toString(16) : R.toString(16))
16-
let GG = ((G.toString(16).length === 1) ? '0' + G.toString(16) : G.toString(16))
17-
let BB = ((B.toString(16).length === 1) ? '0' + B.toString(16) : B.toString(16))
45+
let r = parseInt(hex.slice(0, 2), 16)
46+
let g = parseInt(hex.slice(2, 4), 16)
47+
let b = parseInt(hex.slice(4, 6), 16)
1848

19-
return '#' + RR + GG + BB
49+
if (alpha) {
50+
return 'rgba(' + r + ', ' + g + ', ' + b + ', ' + alpha + ')'
51+
} else {
52+
return 'rgb(' + r + ', ' + g + ', ' + b + ')'
53+
}
2054
}

src/map_functions.js

+6-6
Original file line numberDiff line numberDiff line change
@@ -144,15 +144,15 @@ export function addStations(map, controls, show = true)
144144
export function buildingColor(damageLevel)
145145
{
146146
if (damageLevel >= 5) {
147-
return '#c50126'
147+
return '#C50126' // Dark crimson
148148
}
149149

150150
switch (damageLevel) {
151-
case 0: return 'cyan'
152-
case 1: return 'green'
153-
case 2: return 'yellow'
154-
case 3: return 'orange'
155-
case 4: return 'red'
151+
case 0: return '#00FFFF' // cyan
152+
case 1: return '#008000' // green
153+
case 2: return '#FFFF00' // yellow
154+
case 3: return '#FFA500' // orange
155+
case 4: return '#FF0000' // red
156156
}
157157
}
158158

0 commit comments

Comments
 (0)