Skip to content

Commit 997d1f2

Browse files
The colors for the accessibility comparison tab can now be changed in the preferences
This includes the colors of the polygons for the intersection and location/scenario 1 and 2, as well as the origin point in scenario mode and the two origin points in location mode. Fix: #1795
1 parent 227d049 commit 997d1f2

File tree

8 files changed

+185
-48
lines changed

8 files changed

+185
-48
lines changed

locales/en/transit.json

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -773,17 +773,23 @@
773773
"accessibilityComparison": {
774774
"Title": "Accessibility map comparison",
775775
"Legend": "Legend",
776+
"ScenarioNPolygon": "Scenario {{scenarioNumber}} polygon",
777+
"ScenarioLocation": "Scenarios location",
776778
"ScenarioIntersection": "Intersection of the scenarios",
779+
"ScenarioIntersectionPolygon": "Scenarios intersection polygon",
777780
"LocationIntersection": "Intersection of the locations",
781+
"LocationIntersectionPolygon": "Locations intersection polygon",
778782
"LocationN": "Location {{locationNumber}}",
783+
"LocationNPolygon": "Location {{locationNumber}} polygon",
779784
"Difference": "Difference",
780785
"SelectMaxTime": "Select max time to display (minutes)",
781786
"ComparisonByScenario": "Comparison by scenario",
782787
"ComparisonByLocation": "Comparison by location",
783788
"contextMenu": {
784789
"SetAsLocation1": "Set as Location 1",
785790
"SetAsLocation2": "Set as Location 2"
786-
}
791+
},
792+
"Colors": "Colors"
787793
},
788794
"gtfs": {
789795
"ButtonImport": "Import",
@@ -1032,6 +1038,14 @@
10321038
"transitAccessibilityMap": {
10331039
"LocationColor": "Location color",
10341040
"PolygonColor": "Accessibility polygon default color"
1041+
},
1042+
"transitAccessibilityMapComparison": {
1043+
"IntersectionLocationColor": "Intersection location color",
1044+
"IntersectionPolygonColor": "Intersection polygon default color",
1045+
"ComparisonLocation1Color": "Comparison location 1 color",
1046+
"ComparisonPolygon1Color": "Intersection polygon 1 default color",
1047+
"ComparisonLocation2Color": "Comparison location 2 color",
1048+
"ComparisonPolygon2Color": "Intersection polygon 2 default color"
10351049
}
10361050
},
10371051
"documentationTooltip": {

locales/fr/transit.json

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -773,17 +773,23 @@
773773
"accessibilityComparison": {
774774
"Title": "Comparaison de cartes d'accessibilité",
775775
"Legend": "Légende",
776+
"ScenarioNPolygon": "Polygone du scénario {{scenarioNumber}}",
777+
"ScenarioLocation": "Lieu des scénarios",
776778
"ScenarioIntersection": "Intersection des scénarios",
779+
"ScenarioIntersectionPolygon": "Polygone de l'intersection des scénarios",
777780
"LocationIntersection": "Intersection des lieux",
781+
"LocationIntersectionPolygon": "Polygone de l'intersection des lieux",
778782
"LocationN": "Lieu {{locationNumber}}",
783+
"LocationNPolygon": "Polygone du lieu {{locationNumber}}",
779784
"Difference": "Différence",
780785
"SelectMaxTime": "Sélectionner le temps maximal à afficher (en minutes)",
781786
"ComparisonByScenario": "Comparaison par scénario",
782787
"ComparisonByLocation": "Comparaison par lieu",
783788
"contextMenu": {
784789
"SetAsLocation1": "Définir comme le Lieu 1",
785790
"SetAsLocation2": "Définir comme le Lieu 2"
786-
}
791+
},
792+
"Colors": "Couleurs"
787793
},
788794
"gtfs": {
789795
"ButtonImport": "Importer",
@@ -1032,6 +1038,14 @@
10321038
"transitAccessibilityMap": {
10331039
"LocationColor": "Couleur du lieu",
10341040
"PolygonColor": "Couleur par défaut du polygone d'accessibilité"
1041+
},
1042+
"transitAccessibilityMapComparison": {
1043+
"IntersectionLocationColor": "Couleur du lieu d'intersection",
1044+
"IntersectionPolygonColor": "Couleur par défaut du polygone d'intersection",
1045+
"ComparisonLocation1Color": "Couleur du lieu de comparaison 1",
1046+
"ComparisonPolygon1Color": "Couleur par défaut du polygone de comparaison 1",
1047+
"ComparisonLocation2Color": "Couleur du lieu de comparaison 2",
1048+
"ComparisonPolygon2Color": "Couleur par défaut du polygone de comparaison 2"
10351049
}
10361050
},
10371051
"documentationTooltip": {

packages/chaire-lib-common/src/config/defaultPreferences.config.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -390,8 +390,14 @@ const defaultPreferences: PreferencesModel = {
390390
walkingSpeedMps: 1.3888888888,
391391
walkingSpeedFactor: 1.0, // walking travel times are weighted using this factor: Example: > 1.0 means faster walking, < 1.0 means slower walking
392392
maxTotalTravelTimeSeconds: 1800,
393-
locationColor: 'rgba(47, 138, 243, 1.0)',
393+
locationColor: 'rgba(47, 138, 243, 1)',
394394
polygonColor: 'rgba(47, 138, 243, 0.4)',
395+
intersectionLocationColor: 'rgba(47, 138, 243, 1)',
396+
intersectionPolygonColor: 'rgba(47, 138, 243, 0.6)',
397+
comparisonLocation1Color: 'rgba(252, 208, 89, 1)',
398+
comparisonPolygon1Color: 'rgba(252, 208, 89, 0.6)',
399+
comparisonLocation2Color: 'rgba(231, 74, 184, 1)',
400+
comparisonPolygon2Color: 'rgba(231, 74, 184, 0.6)',
395401
calculatePois: false,
396402
calculatePopulation: false
397403
},

packages/transition-frontend/src/components/forms/accessibilityComparison/AccessibilityComparisonForm.tsx

Lines changed: 82 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@ import {
5050
minutesToSeconds
5151
} from 'chaire-lib-common/lib/utils/DateTimeUtils';
5252
import AccessibilityComparisonStatsComponent from './AccessibilityComparisonStatsComponent';
53-
import * as AccessibilityComparisonConstants from './accessibilityComparisonConstants';
5453
import { comparisonModes } from './comparisonModes';
5554
import AccessibilityMapCoordinatesComponent from '../accessibilityMap/widgets/AccessibilityMapCoordinateComponent';
5655
import TimeOfTripComponent from '../transitRouting/widgets/TimeOfTripComponent';
@@ -90,6 +89,12 @@ interface TransitRoutingFormState extends ChangeEventsState<TransitAccessibility
9089
contextMenuRoot: Root | undefined;
9190
alternateScenario1Id?: string;
9291
alternateScenario2Id?: string;
92+
intersectionLocationColor: string;
93+
intersectionPolygonColor: string;
94+
comparisonLocation1Color: string;
95+
comparisonPolygon1Color: string;
96+
comparisonLocation2Color: string;
97+
comparisonPolygon2Color: string;
9398
}
9499

95100
class AccessibilityComparisonForm extends ChangeEventsForm<AccessibilityComparisonFormProps, TransitRoutingFormState> {
@@ -123,14 +128,28 @@ class AccessibilityComparisonForm extends ChangeEventsForm<AccessibilityComparis
123128
alternateScenario1Id: '',
124129
alternateScenario2Id: '',
125130
contextMenu: null,
126-
contextMenuRoot: undefined
131+
contextMenuRoot: undefined,
132+
intersectionLocationColor: Preferences.get(
133+
'transit.routing.transitAccessibilityMap.intersectionLocationColor'
134+
),
135+
intersectionPolygonColor: Preferences.get(
136+
'transit.routing.transitAccessibilityMap.intersectionPolygonColor'
137+
),
138+
comparisonLocation1Color: Preferences.get(
139+
'transit.routing.transitAccessibilityMap.comparisonLocation1Color'
140+
),
141+
comparisonPolygon1Color: Preferences.get('transit.routing.transitAccessibilityMap.comparisonPolygon1Color'),
142+
comparisonLocation2Color: Preferences.get(
143+
'transit.routing.transitAccessibilityMap.comparisonLocation2Color'
144+
),
145+
comparisonPolygon2Color: Preferences.get('transit.routing.transitAccessibilityMap.comparisonPolygon2Color')
127146
};
128147

129148
this.displayMap = this.displayMap.bind(this);
130149
this.calculateRouting = this.calculateRouting.bind(this);
131150
this.onScenarioCollectionUpdate = this.onScenarioCollectionUpdate.bind(this);
132151

133-
routingEngine.updatePointColor(AccessibilityComparisonConstants.INTERSECTION_COLOR);
152+
routingEngine.updatePointColor(this.state.intersectionLocationColor);
134153
if (routingEngine.hasLocation()) {
135154
(serviceLocator.eventManager as EventManager).emitEvent<MapUpdateLayerEventType>('map.updateLayer', {
136155
layerName: 'accessibilityMapPoints',
@@ -175,17 +194,17 @@ class AccessibilityComparisonForm extends ChangeEventsForm<AccessibilityComparis
175194

176195
const numberOfPolygons = routing.attributes.numberOfPolygons as number;
177196

178-
const colors = {
179-
intersectionColor: this.convertToRGBA(AccessibilityComparisonConstants.INTERSECTION_COLOR, 0.6),
180-
scenario1Minus2Color: this.convertToRGBA(AccessibilityComparisonConstants.MAP_1_COLOR, 0.6),
181-
scenario2Minus1Color: this.convertToRGBA(AccessibilityComparisonConstants.MAP_2_COLOR, 0.6)
197+
const polygonColors = {
198+
intersectionColor: this.state.intersectionPolygonColor,
199+
scenario1Minus2Color: this.state.comparisonPolygon1Color,
200+
scenario2Minus1Color: this.state.comparisonPolygon2Color
182201
};
183202

184203
const mapComparison = await calculateAccessibilityMapComparison(
185204
currentResult1.polygons,
186205
currentResult2.polygons,
187206
numberOfPolygons,
188-
colors
207+
polygonColors
189208
);
190209

191210
const finalMap: TransitAccessibilityMapWithPolygonAndTimeResult[] = [];
@@ -498,8 +517,15 @@ class AccessibilityComparisonForm extends ChangeEventsForm<AccessibilityComparis
498517
};
499518
}
500519

501-
private convertToRGBA = (rgbValue: string, alpha: number) => {
502-
return rgbValue.replace(')', `, ${alpha})`).replace('rgb', 'rgba');
520+
private changeAlphaValue = (rgbaValue: string, alpha: number) => {
521+
const rgbaArray = rgbaValue.split(',');
522+
if (rgbaArray.length !== 4) {
523+
console.error(`The color value ${rgbaValue} isn't properly formatted to convert the alpha value.`);
524+
return rgbaValue;
525+
}
526+
527+
rgbaArray[3] = `${alpha})`;
528+
return rgbaArray.join();
503529
};
504530

505531
render() {
@@ -531,30 +557,58 @@ class AccessibilityComparisonForm extends ChangeEventsForm<AccessibilityComparis
531557
return (
532558
<React.Fragment>
533559
<Collapsible
534-
trigger={this.props.t('transit:accessibilityComparison:Legend')}
560+
trigger={this.props.t('transit:accessibilityComparison:Colors')}
535561
open={true}
536562
transitionTime={100}
537563
>
564+
{mode === 'scenarios' && (
565+
<div className="tr__form-section">
566+
{this.props.t('transit:accessibilityComparison:ScenarioLocation')}: &nbsp;
567+
<span style={{ color: this.state.intersectionLocationColor }}>&#9673;</span>
568+
</div>
569+
)}
538570
<div className="tr__form-section">
539-
{mode === 'scenarios'
540-
? this.props.t('transit:transitComparison:ScenarioN', { scenarioNumber: '1' })
541-
: this.props.t('transit:accessibilityComparison:LocationN', { locationNumber: '1' })}
571+
{this.props.t(
572+
`transit:accessibilityComparison:${mode === 'scenarios' ? 'Scenario' : 'Location'}IntersectionPolygon`
573+
)}
542574
: &nbsp;
543-
<span style={{ color: AccessibilityComparisonConstants.MAP_1_COLOR }}>&#9673;</span>
575+
<span style={{ color: this.state.intersectionPolygonColor }}>&#9673;</span>
544576
</div>
577+
{mode === 'locations' && (
578+
<div className="tr__form-section">
579+
{this.props.t('transit:accessibilityComparison:LocationN', { locationNumber: '1' })}:
580+
&nbsp;
581+
<span style={{ color: this.state.comparisonLocation1Color }}>&#9673;</span>
582+
</div>
583+
)}
545584
<div className="tr__form-section">
546585
{mode === 'scenarios'
547-
? this.props.t('transit:transitComparison:ScenarioN', { scenarioNumber: '2' })
548-
: this.props.t('transit:accessibilityComparison:LocationN', { locationNumber: '2' })}
586+
? this.props.t('transit:accessibilityComparison:ScenarioNPolygon', {
587+
scenarioNumber: '1'
588+
})
589+
: this.props.t('transit:accessibilityComparison:LocationNPolygon', {
590+
locationNumber: '1'
591+
})}
549592
: &nbsp;
550-
<span style={{ color: AccessibilityComparisonConstants.MAP_2_COLOR }}>&#9673;</span>
593+
<span style={{ color: this.state.comparisonPolygon1Color }}>&#9673;</span>
551594
</div>
595+
{mode === 'locations' && (
596+
<div className="tr__form-section">
597+
{this.props.t('transit:accessibilityComparison:LocationN', { locationNumber: '2' })}:
598+
&nbsp;
599+
<span style={{ color: this.state.comparisonLocation2Color }}>&#9673;</span>
600+
</div>
601+
)}
552602
<div className="tr__form-section">
553-
{this.props.t(
554-
`transit:accessibilityComparison:${mode === 'scenarios' ? 'Scenario' : 'Location'}Intersection`
555-
)}
603+
{mode === 'scenarios'
604+
? this.props.t('transit:accessibilityComparison:ScenarioNPolygon', {
605+
scenarioNumber: '2'
606+
})
607+
: this.props.t('transit:accessibilityComparison:LocationNPolygon', {
608+
locationNumber: '2'
609+
})}
556610
: &nbsp;
557-
<span style={{ color: AccessibilityComparisonConstants.INTERSECTION_COLOR }}>&#9673;</span>
611+
<span style={{ color: this.state.comparisonPolygon2Color }}>&#9673;</span>
558612
</div>
559613
</Collapsible>
560614

@@ -951,6 +1005,8 @@ class AccessibilityComparisonForm extends ChangeEventsForm<AccessibilityComparis
9511005
<AccessibilityComparisonStatsComponent
9521006
accessibilityPolygons={this.state.currentPolygons}
9531007
mode={mode}
1008+
color1={this.changeAlphaValue(this.state.comparisonPolygon1Color, 1)}
1009+
color2={this.changeAlphaValue(this.state.comparisonPolygon2Color, 1)}
9541010
/>
9551011
</React.Fragment>
9561012
)}
@@ -968,8 +1024,8 @@ class AccessibilityComparisonForm extends ChangeEventsForm<AccessibilityComparis
9681024
const value = comparisonModes[index];
9691025
this.onValueChange('selectedMode', { value });
9701026
if (value === 'scenarios') {
971-
routing.updatePointColor(AccessibilityComparisonConstants.INTERSECTION_COLOR);
972-
alternateRouting.updatePointColor(AccessibilityComparisonConstants.INTERSECTION_COLOR);
1027+
routing.updatePointColor(this.state.intersectionLocationColor);
1028+
alternateRouting.updatePointColor(this.state.intersectionLocationColor);
9731029
if (routing.hasLocation()) {
9741030
alternateRouting.setLocation(
9751031
routing.attributes.locationGeojson!.geometry.coordinates
@@ -983,8 +1039,8 @@ class AccessibilityComparisonForm extends ChangeEventsForm<AccessibilityComparis
9831039
);
9841040
}
9851041
} else if (value === 'locations') {
986-
routing.updatePointColor(AccessibilityComparisonConstants.MAP_1_COLOR);
987-
alternateRouting.updatePointColor(AccessibilityComparisonConstants.MAP_2_COLOR);
1042+
routing.updatePointColor(this.state.comparisonLocation1Color);
1043+
alternateRouting.updatePointColor(this.state.comparisonLocation2Color);
9881044
alternateRouting.attributes.scenarioId = routing.attributes.scenarioId;
9891045
if (routing.hasLocation()) {
9901046
alternateRouting.setLocation(

packages/transition-frontend/src/components/forms/accessibilityComparison/AccessibilityComparisonStatsComponent.tsx

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
import React, { JSX, useState } from 'react';
88
import { useTranslation } from 'react-i18next';
99
import { Tooltip } from 'react-tooltip';
10-
import * as AccessibilityComparisonConstants from './accessibilityComparisonConstants';
1110
import { ComparisonMode } from './comparisonModes';
1211
import { InputCheckboxBoolean } from 'chaire-lib-frontend/lib/components/input/InputCheckbox';
1312

@@ -17,6 +16,8 @@ export interface AccessibilityComparisonStatsComponentProps {
1716
result2: GeoJSON.FeatureCollection;
1817
};
1918
mode: ComparisonMode;
19+
color1: string;
20+
color2: string;
2021
}
2122

2223
const AccessibilityComparisonStatsComponent: React.FunctionComponent<AccessibilityComparisonStatsComponentProps> = (
@@ -248,12 +249,12 @@ const AccessibilityComparisonStatsComponent: React.FunctionComponent<Accessibili
248249
<thead>
249250
<tr>
250251
<th></th>
251-
<th style={{ color: AccessibilityComparisonConstants.MAP_1_COLOR }}>
252+
<th style={{ color: props.color1 }}>
252253
{props.mode === 'scenarios'
253254
? t('transit:transitComparison:ScenarioN', { scenarioNumber: '1' })
254255
: t('transit:accessibilityComparison:LocationN', { locationNumber: '1' })}
255256
</th>
256-
<th style={{ color: AccessibilityComparisonConstants.MAP_2_COLOR }}>
257+
<th style={{ color: props.color2 }}>
257258
{props.mode === 'scenarios'
258259
? t('transit:transitComparison:ScenarioN', { scenarioNumber: '2' })
259260
: t('transit:accessibilityComparison:LocationN', { locationNumber: '2' })}
@@ -264,13 +265,13 @@ const AccessibilityComparisonStatsComponent: React.FunctionComponent<Accessibili
264265
<tbody>{combinedFeaturesStatsTable}</tbody>
265266
</table>
266267
<Tooltip id="difference-header" opacity={1}>
267-
<span style={{ color: AccessibilityComparisonConstants.MAP_2_COLOR }}>
268+
<span style={{ color: props.color2 }}>
268269
{props.mode === 'scenarios'
269270
? t('transit:transitComparison:ScenarioN', { scenarioNumber: '2' })
270271
: t('transit:accessibilityComparison:LocationN', { locationNumber: '2' })}
271272
</span>
272273
&nbsp;-&nbsp;
273-
<span style={{ color: AccessibilityComparisonConstants.MAP_1_COLOR }}>
274+
<span style={{ color: props.color1 }}>
274275
{props.mode === 'scenarios'
275276
? t('transit:transitComparison:ScenarioN', { scenarioNumber: '1' })
276277
: t('transit:accessibilityComparison:LocationN', { locationNumber: '1' })}

packages/transition-frontend/src/components/forms/accessibilityComparison/accessibilityComparisonConstants.ts

Lines changed: 0 additions & 14 deletions
This file was deleted.

0 commit comments

Comments
 (0)