Skip to content

Commit ec5b6e3

Browse files
committed
feat(directions): add bike routing
1 parent ee42979 commit ec5b6e3

7 files changed

Lines changed: 198 additions & 122 deletions

File tree

.github/workflows/android-deploy.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ jobs:
2121
echo "GPF_key=${{ secrets.GPF_key }}" > .env
2222
echo "signalement_url=${{ secrets.SIGNALEMENT_URL }}" >> .env
2323
echo "osm_bearer_token=${{ secrets.OSM_BEARER_TOKEN }}" >> .env
24+
echo "geovelo_key=${{ secrets.GEOVELO_KEY }}" >> .env
2425
2526
- name: Setup Node.js
2627
uses: actions/setup-node@v4

.github/workflows/ios-deploy.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ jobs:
2121
echo "GPF_key=${{ secrets.GPF_key }}" > .env
2222
echo "signalement_url=${{ secrets.SIGNALEMENT_URL }}" >> .env
2323
echo "osm_bearer_token=${{ secrets.OSM_BEARER_TOKEN }}" >> .env
24+
echo "geovelo_key=${{ secrets.GEOVELO_KEY }}" >> .env
2425
2526
- name: Setup Node.js
2627
uses: actions/setup-node@v4

src/css/directions.css

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@
7676
background-position: 12px 3px;
7777
font-family: "Open Sans Semibold";
7878
font-size: 14px;
79+
flex-shrink: 0;
7980
}
8081

8182
.divDirectionsTransport input[type="radio"]:checked + label, .divDirectionsComputation input[type="radio"]:checked + label {
@@ -92,6 +93,10 @@
9293
transform: translateX(-5px);
9394
}
9495

96+
.divDirectionsTransport input[id="directionsTransportVelo"]:checked ~ .sliderDirections {
97+
transform: translateX(calc(200% - 15px));
98+
}
99+
95100
.sliderDirections, .sliderComputation {
96101
position: absolute;
97102
display: flex;

src/js/directions/directions-dom.js

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,12 @@ let DirectionsDOM = {
7575
transport = self.dom.inputPedestrian.value;
7676
}
7777
}
78+
// vélo ?
79+
if (self.dom.inputBicycle) {
80+
if (self.dom.inputBicycle.checked) {
81+
transport = self.dom.inputBicycle.value;
82+
}
83+
}
7884

7985
var computation = null;
8086
// fast ?
@@ -225,6 +231,27 @@ let DirectionsDOM = {
225231
labelCar.title = "Véhicule";
226232
div.appendChild(labelCar);
227233

234+
var inputBicycle = this.dom.inputBicycle = document.createElement("input");
235+
inputBicycle.id = "directionsTransportVelo";
236+
inputBicycle.type = "radio";
237+
inputBicycle.name = "Transport";
238+
inputBicycle.value = "Velo";
239+
inputBicycle.addEventListener("change", function (e) {
240+
if (e.target.checked) {
241+
self.obj.configuration.profile = "bicycle";
242+
}
243+
});
244+
div.appendChild(inputBicycle);
245+
246+
var labelBicycle = document.createElement("label");
247+
var spanBicycle = document.createElement("span");
248+
labelBicycle.textContent = "À vélo";
249+
labelBicycle.appendChild(spanBicycle);
250+
labelBicycle.className = "lblDirectionsTransport";
251+
labelBicycle.htmlFor = "directionsTransportVelo";
252+
labelBicycle.title = "À vélo";
253+
div.appendChild(labelBicycle);
254+
228255
var slider = document.createElement("span");
229256
slider.className = "sliderDirections";
230257
div.appendChild(slider);

src/js/directions/directions-results-dom.js

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,8 @@ let DirectionsResultsDOM = {
4141
data.distance,
4242
data.duration,
4343
data.transport,
44-
data.computation
44+
data.computation,
45+
data.waypoints,
4546
));
4647
// ajout du bouton détails
4748
noDetailsDiv.appendChild(this.__addResultsDetailsContainerDOMElement());
@@ -79,7 +80,7 @@ let DirectionsResultsDOM = {
7980
* @returns {DOMElement}
8081
* @private
8182
*/
82-
__addResultsSummaryContainerDOMElement (distance, duration, transport, computation) {
83+
__addResultsSummaryContainerDOMElement (distance, duration, transport, computation, waypoints = []) {
8384
var div = document.createElement("div");
8485
div.id = "directionsSummary";
8586
div.className = "";
@@ -109,6 +110,19 @@ let DirectionsResultsDOM = {
109110
labelComputation.className = "lblDirectionsSummaryComputation";
110111
labelComputation.textContent = computation;
111112
line2.appendChild(labelComputation);
113+
if (transport === "Velo") {
114+
var linkGeovelo = document.createElement("a");
115+
const start = waypoints.shift();
116+
const end = waypoints.pop();
117+
linkGeovelo.href = `https://www.geovelo.app/route?from=${start[0]},${start[1]}&to=${end[0]},${end[1]}`;
118+
if (waypoints.length > 0) {
119+
waypoints = waypoints.map( point => `${point[0]},${point[1]}`);
120+
linkGeovelo.href += `&steps=${waypoints.join(";")}`;
121+
}
122+
linkGeovelo.target = "_blank";
123+
linkGeovelo.textContent = "Navigation, détails et itinéraires alternatifs sur Géovélo";
124+
line2.appendChild(linkGeovelo);
125+
}
112126

113127
div.appendChild(line1);
114128
div.appendChild(line2);

src/js/directions/directions-results.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@ class DirectionsResults {
2424
distance : "",
2525
transport : "",
2626
computation : "",
27-
instructions : [] // [ routes[0].legs ] : [distance, duration, [steps], summary]
27+
instructions : [], // [ routes[0].legs ] : [distance, duration, [steps], summary]
28+
wapoints: [],
2829
};
2930

3031
// target

0 commit comments

Comments
 (0)