Skip to content

Commit 726e6d3

Browse files
authored
Merge branch 'main' into depfu/update/importmap/@turf/destination-7.3.3
2 parents 52830b6 + 400e3ec commit 726e6d3

22 files changed

Lines changed: 139 additions & 171 deletions

File tree

app/assets/stylesheets/application.css

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -104,8 +104,13 @@ a:active, .link:active {
104104

105105
.flex-center {
106106
display: flex;
107-
justify-content: center; /* Vertically centers the items */
108-
align-items: center;
107+
justify-content: center; /* Horizontally centers the items */
108+
align-items: center; /* Vertically centers the items */
109+
}
110+
111+
.flex-vcenter {
112+
display: flex;
113+
align-items: center; /* Vertically centers the items */
109114
}
110115

111116
.flex-no-wrap {

app/assets/stylesheets/feature.css

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
text-overflow: ellipsis;
2020
margin-top: 0.1rem;
2121
line-height: 1.5;
22+
font-weight: 400;
2223
}
2324

2425
@media (width <= 574px) {
@@ -102,6 +103,10 @@
102103
height: auto;
103104
}
104105

106+
#feature-details-body .icon {
107+
max-height: 1rem;
108+
}
109+
105110
#feature-edit-raw textarea {
106111
width: 100%;
107112
height: 100%;

app/javascript/controllers/feature/edit_controller.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { Controller } from '@hotwired/stimulus'
22
import { mapChannel } from 'channels/map_channel'
33
import { featureIcon, featureImage, uploadImageToFeature, confirmImageLocation } from 'maplibre/feature'
44
import { handleDelete, draw } from 'maplibre/edit'
5-
import { featureColor, featureOutlineColor } from 'maplibre/styles'
5+
import { featureColor, featureOutlineColor } from 'maplibre/styles/styles'
66
import { status } from 'helpers/status'
77
import * as functions from 'helpers/functions'
88
import * as dom from 'helpers/dom'

app/javascript/controllers/feature/modal_controller.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { Controller } from '@hotwired/stimulus'
22
import { mapChannel } from 'channels/map_channel'
3-
import { defaultLineWidth, featureColor, featureOutlineColor } from 'maplibre/styles'
3+
import { defaultLineWidth, featureColor, featureOutlineColor } from 'maplibre/styles/styles'
44
import { AnimateLineAnimation, AnimatePolygonAnimation, animateViewFromProperties } from 'maplibre/animations'
55
import { status } from 'helpers/status'
66
import { showFeatureDetails, highlightedFeatureId } from 'maplibre/feature'

app/javascript/controllers/map/layers_controller.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ import { initLayersModal } from 'maplibre/controls/shared'
55
import { uploadImageToFeature, confirmImageLocation } from 'maplibre/feature'
66
import { status } from 'helpers/status'
77
import * as functions from 'helpers/functions'
8-
import { initializeOverpassLayers } from 'maplibre/overpass/overpass'
9-
import { queries } from 'maplibre/overpass/queries'
8+
import { initializeOverpassLayers } from 'maplibre/layers/overpass'
9+
import { queries } from 'maplibre/layers/queries'
1010
import { flyToFeature } from 'maplibre/animations'
1111
import { layers, initializeLayerStyles, initializeLayerSources, loadLayerData, loadAllLayerData } from 'maplibre/layers/layers'
1212
import { renderGeoJSONLayer } from 'maplibre/layers/geojson'

app/javascript/maplibre/edit.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { map, destroyFeature, addFeature, mapProperties } from 'maplibre/map'
2-
import { editStyles } from 'maplibre/edit_styles'
2+
import { editStyles } from 'maplibre/styles/edit_styles'
33
import { highlightFeature } from 'maplibre/feature'
44
import { getRouteUpdate, getRouteElevation } from 'maplibre/routing/openrouteservice'
55
import { initDirections, resetDirections } from 'maplibre/routing/osrm'

app/javascript/maplibre/feature.js

Lines changed: 39 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
1-
import { map, mapProperties } from 'maplibre/map'
1+
import { map } from 'maplibre/map'
22
import * as f from 'helpers/functions'
33
import * as dom from 'helpers/dom'
44
import { marked } from 'marked'
5-
import { defaultLineWidth } from 'maplibre/styles'
65
import { showElevationChart } from 'maplibre/feature/elevation'
76
import { length } from "@turf/length"
87
import { area } from "@turf/area"
9-
import { buffer } from "@turf/buffer"
108
import { lineString, multiLineString, polygon, multiPolygon } from "@turf/helpers"
11-
import { layers, getFeature, getFeatures, getFeatureSource } from "maplibre/layers/layers"
9+
import { layers, getFeature, getFeatureSource } from "maplibre/layers/layers"
1210

1311
window.marked = marked
1412

@@ -173,7 +171,12 @@ export async function showFeatureDetails (feature) {
173171

174172
f.e('.feature-symbol', e => { e.innerHTML = featureIcon(feature) })
175173
f.e('.feature-image', e => { e.innerHTML = featureImage(feature) })
176-
document.querySelector('#feature-title').innerHTML = featureTitle(feature)
174+
175+
const title = featureTitle(feature)
176+
const titleElement = document.querySelector('#feature-title')
177+
titleElement.innerHTML = title
178+
titleElement.style.fontSize = titleElement.textContent.length > 24 ? '1rem' : null;
179+
177180
document.querySelector('#feature-size').innerHTML = featureMeta(feature)
178181
document.querySelector('#feature-vertexes').innerHTML = featureVertexes(feature)
179182
if (feature.geometry.type === 'Point') {
@@ -188,19 +191,44 @@ export async function showFeatureDetails (feature) {
188191
link.href = link.href.replace(/feature\/.*/, 'feature/' + feature.id + '.gpx')
189192
if (feature.properties.title) { link.href += '/' + encodeURIComponent(feature.properties.title.replace(/[\s\/]+/g, "_")) }
190193
}
194+
195+
document.querySelector('#feature-details-description').innerHTML = 'Loading description...'
196+
featureDescription(feature).then(desc => {
197+
document.querySelector('#feature-details-description').innerHTML = desc
198+
})
199+
200+
}
201+
202+
async function featureDescription (feature) {
191203
marked.use({ gfm: true, breaks: true })
192-
let desc = marked(feature?.properties?.desc || '')
204+
let desc = ''
193205
// show link target if onclick is link
194-
if (feature?.properties?.onclick === 'link' && feature?.properties?.['onclick-target']) {
206+
if (feature?.properties?.onclick === 'link' && feature?.properties?.['onclick-target']) {
195207
desc = `<p><i class="bi bi-box-arrow-up-right"></i> ${feature.properties['onclick-target']}</p>`
196-
} else if (feature?.properties?.onclick === 'feature' && feature?.properties?.['onclick-target']) {
197-
// show feature target if onclick is feature
208+
} else if (feature?.properties?.onclick === 'feature' && feature?.properties?.['onclick-target']) {
209+
// show feature target if onclick is feature
198210
desc = `<p><i class="bi bi-geo-alt-fill"></i> ${feature.properties['onclick-target']}</p>`
211+
} else if (feature?.properties?.wikipediaId) {
212+
const page = encodeURIComponent(feature.properties.title)
213+
const api = `https://en.wikipedia.org/api/rest_v1/page/summary/${page}`
214+
const url = `https://en.wikipedia.org/wiki/${page}`
215+
216+
const data = await fetch(api).then(r => r.json())
217+
if (data.thumbnail?.source) {
218+
desc += `<p><a target="_blank" href="${url}">` +
219+
`<img class="w-100" src="${data.thumbnail.source}"></a></p>`
220+
}
221+
desc += `<p>${data.extract}</p>`
222+
desc += `<p>Read the full <img src="/icons/wikipedia.png" class="me-1 ms-1 icon"/><a target="_blank" href="${url}">Wikipedia article</a></p>`
223+
224+
} else {
225+
desc = f.sanitizeMarkdown(marked(feature?.properties?.desc || ''))
199226
}
200-
desc = f.sanitizeMarkdown(desc)
201-
document.querySelector('#feature-details-description').innerHTML = desc
227+
return desc
202228
}
203229

230+
231+
204232
// set title image according to feature type
205233
export function featureIcon (feature) {
206234
let image = ''
@@ -277,32 +305,6 @@ export function highlightFeature (feature, sticky = false, source) {
277305
}
278306
}
279307

280-
export function renderExtrusionLines () {
281-
// Disable extrusionlines on 3D terrain, it does not work
282-
if (mapProperties.terrain) { return [] }
283-
284-
let extrusionLines = getFeatures('geojson').filter(feature => (
285-
feature.geometry.type === 'LineString' &&
286-
feature.properties['fill-extrusion-height'] &&
287-
feature.geometry.coordinates.length !== 1 // don't break line animation
288-
))
289-
290-
extrusionLines = extrusionLines.map(feature => {
291-
const width = feature.properties['fill-extrusion-width'] || feature.properties['stroke-width'] || defaultLineWidth
292-
const extrusionLine = buffer(feature, width, { units: 'meters' })
293-
// clone properties hash, else we're writing into the original feature's properties
294-
extrusionLine.properties = { ...feature.properties }
295-
if (!extrusionLine.properties['fill-extrusion-color'] && feature.properties.stroke) {
296-
extrusionLine.properties['fill-extrusion-color'] = feature.properties.stroke
297-
}
298-
extrusionLine.properties['stroke-width'] = 0
299-
extrusionLine.properties['stroke-opacity'] = 0
300-
extrusionLine.properties['fill-opacity'] = 0
301-
return extrusionLine
302-
})
303-
return extrusionLines
304-
}
305-
306308
export async function uploadImage(image) {
307309
const formData = new FormData() // send using multipart/form-data
308310
formData.append('image', image)

app/javascript/maplibre/feature/elevation.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { featureColor } from 'maplibre/styles'
1+
import { featureColor } from 'maplibre/styles/styles'
22
import { map } from 'maplibre/map'
33
import { point } from "@turf/helpers"
44
import { distance } from "@turf/distance"

app/javascript/maplibre/layers/geojson.js

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
1-
import { map } from 'maplibre/map'
2-
import { initializeViewStyles, initializeClusterStyles, styles, featureColor, labelFont, setSource } from 'maplibre/styles'
3-
import { layers } from 'maplibre/layers/layers'
1+
import { map, mapProperties } from 'maplibre/map'
2+
import { initializeViewStyles, initializeClusterStyles, styles, featureColor, labelFont, setSource } from 'maplibre/styles/styles'
3+
import { layers, getFeatures } from 'maplibre/layers/layers'
44
import { draw, select } from 'maplibre/edit'
55
import { getFeature } from 'maplibre/layers/layers'
6-
import { renderExtrusionLines } from 'maplibre/feature'
76
import { lineString } from "@turf/helpers"
87
import { length } from "@turf/length"
98
import { along } from "@turf/along"
9+
import { buffer } from "@turf/buffer"
10+
import { defaultLineWidth } from 'maplibre/styles/styles'
1011

1112
export function initializeGeoJSONLayers(id = null) {
1213
// console.log('Initializing geojson layers')
@@ -193,4 +194,30 @@ export function initializeKmMarkerStyles(id) {
193194
style = setSource (style, 'km-marker-source-' + id)
194195
map.addLayer(style)
195196
})
197+
}
198+
199+
function renderExtrusionLines() {
200+
// Disable extrusionlines on 3D terrain, it does not work
201+
if (mapProperties.terrain) { return [] }
202+
203+
let extrusionLines = getFeatures('geojson').filter(feature => (
204+
feature.geometry.type === 'LineString' &&
205+
feature.properties['fill-extrusion-height'] &&
206+
feature.geometry.coordinates.length !== 1 // don't break line animation
207+
))
208+
209+
extrusionLines = extrusionLines.map(feature => {
210+
const width = feature.properties['fill-extrusion-width'] || feature.properties['stroke-width'] || defaultLineWidth
211+
const extrusionLine = buffer(feature, width, { units: 'meters' })
212+
// clone properties hash, else we're writing into the original feature's properties
213+
extrusionLine.properties = { ...feature.properties }
214+
if (!extrusionLine.properties['fill-extrusion-color'] && feature.properties.stroke) {
215+
extrusionLine.properties['fill-extrusion-color'] = feature.properties.stroke
216+
}
217+
extrusionLine.properties['stroke-width'] = 0
218+
extrusionLine.properties['stroke-opacity'] = 0
219+
extrusionLine.properties['fill-opacity'] = 0
220+
return extrusionLine
221+
})
222+
return extrusionLines
196223
}

app/javascript/maplibre/layers/layers.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { initializeWikipediaLayers, loadWikipediaLayer } from 'maplibre/layers/wikipedia'
2-
import { initializeOverpassLayers, loadOverpassLayer } from 'maplibre/overpass/overpass'
2+
import { initializeOverpassLayers, loadOverpassLayer } from 'maplibre/layers/overpass'
33
import { addGeoJSONSource, map, sortLayers } from 'maplibre/map'
44
import { initializeGeoJSONLayers } from 'maplibre/layers/geojson'
55
import * as functions from 'helpers/functions'

0 commit comments

Comments
 (0)