Ajout des legendes
This commit is contained in:
parent
af337ea0bf
commit
48aad70993
3 changed files with 98 additions and 1 deletions
|
|
@ -182,7 +182,15 @@ body > hr {
|
||||||
camp-feature-short-header {
|
camp-feature-short-header {
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-rows: 1fr min-content;
|
grid-template-rows: 1fr min-content;
|
||||||
grid-template-columns: 1fr;
|
grid-template-columns: 3em 1fr;
|
||||||
|
gap: 0.5ex 0.5em;
|
||||||
|
vertical-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
camp-feature-short-header .feature-legend {
|
||||||
|
grid-row: 1 / 3;
|
||||||
|
height: 3em;
|
||||||
|
align-self: flex-start;
|
||||||
}
|
}
|
||||||
|
|
||||||
camp-feature-short-header h2 {
|
camp-feature-short-header h2 {
|
||||||
|
|
@ -215,3 +223,9 @@ camp-feature-short-header .feature-location {
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
color: inherit;
|
color: inherit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* FEATURE */
|
||||||
|
|
||||||
|
camp-feature {
|
||||||
|
min-height: 25vh;
|
||||||
|
}
|
||||||
|
|
|
||||||
72
js/components/feature-legend.js
Normal file
72
js/components/feature-legend.js
Normal file
|
|
@ -0,0 +1,72 @@
|
||||||
|
const TEMPLATE = document.createElement("template")
|
||||||
|
TEMPLATE.innerHTML = `
|
||||||
|
<style>
|
||||||
|
:host {
|
||||||
|
display: inline-block;
|
||||||
|
width: 3em;
|
||||||
|
height: 3em;
|
||||||
|
background: #404040;
|
||||||
|
}
|
||||||
|
|
||||||
|
#legend-container {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
box-sizing: border-box;
|
||||||
|
border: solid 1px transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
#legend-container[hidden] {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#marker-icon {
|
||||||
|
max-height: 2em;
|
||||||
|
}
|
||||||
|
|
||||||
|
#marker-icon:not([src]) {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<div id="legend-container">
|
||||||
|
<img id="marker-icon" />
|
||||||
|
</div>
|
||||||
|
`
|
||||||
|
|
||||||
|
export class FeatureLegendElement extends HTMLElement {
|
||||||
|
|
||||||
|
feature
|
||||||
|
|
||||||
|
connectedCallback(){
|
||||||
|
if(!this.shadow){
|
||||||
|
this.shadow = this.attachShadow({mode: "open"})
|
||||||
|
this.shadow.append(TEMPLATE.content.cloneNode(true))
|
||||||
|
}
|
||||||
|
this.updateContent()
|
||||||
|
}
|
||||||
|
|
||||||
|
updateContent(){
|
||||||
|
let container = this.shadow.getElementById("legend-container")
|
||||||
|
let marker = this.shadow.getElementById("marker-icon")
|
||||||
|
container.hidden = !this.feature
|
||||||
|
if(this.feature){
|
||||||
|
let symbol = this.feature.mapSymbol
|
||||||
|
container.style.backgroundColor = symbol.backgroundColor || "transparent"
|
||||||
|
container.style.backgroundImage = symbol.backgroundUrl ? `url(${symbol.backgroundUrl})` : "none"
|
||||||
|
container.style.borderColor = symbol.borderColor || "transparent"
|
||||||
|
if(symbol.markerUrl){
|
||||||
|
marker.src = symbol.markerUrl
|
||||||
|
} else {
|
||||||
|
marker.removeAttribute("src")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
customElements.define("camp-feature-legend", FeatureLegendElement)
|
||||||
|
|
@ -1,5 +1,8 @@
|
||||||
|
import "./feature-legend.js"
|
||||||
|
|
||||||
const TEMPLATE = document.createElement("template")
|
const TEMPLATE = document.createElement("template")
|
||||||
TEMPLATE.innerHTML = `
|
TEMPLATE.innerHTML = `
|
||||||
|
<camp-feature-legend class="feature-legend"></camp-feature-legend>
|
||||||
<h2 class="feature-name"></h2>
|
<h2 class="feature-name"></h2>
|
||||||
<small class="feature-location"></small>
|
<small class="feature-location"></small>
|
||||||
`
|
`
|
||||||
|
|
@ -14,6 +17,9 @@ export class FeatureShortHeaderElement extends HTMLElement {
|
||||||
|
|
||||||
set feature(value){
|
set feature(value){
|
||||||
this.#feature = value
|
this.#feature = value
|
||||||
|
let legend = this.querySelector(".feature-legend")
|
||||||
|
if(legend)
|
||||||
|
legend.feature = value
|
||||||
}
|
}
|
||||||
|
|
||||||
connectedCallback(){
|
connectedCallback(){
|
||||||
|
|
@ -24,7 +30,12 @@ export class FeatureShortHeaderElement extends HTMLElement {
|
||||||
if(!this.feature){
|
if(!this.feature){
|
||||||
this.replaceChildren()
|
this.replaceChildren()
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
this.replaceChildren(TEMPLATE.content.cloneNode(true))
|
this.replaceChildren(TEMPLATE.content.cloneNode(true))
|
||||||
|
|
||||||
|
this.querySelector(".feature-legend").feature = this.feature
|
||||||
|
this.querySelector(".feature-legend").updateContent()
|
||||||
|
|
||||||
this.querySelector(".feature-name").textContent =
|
this.querySelector(".feature-name").textContent =
|
||||||
this.feature?.properties?.name ||
|
this.feature?.properties?.name ||
|
||||||
this.feature.mapSymbol.genericName ||
|
this.feature.mapSymbol.genericName ||
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue