UNPKG

@geogirafe/lib-geoportal

Version:

GeoGirafe is a flexible application to build online geoportals.

58 lines (57 loc) 3.49 kB
import { html as uHtml } from 'uhtml'; // SPDX-License-Identifier: Apache-2.0 import GirafeHTMLElement from '../../../base/GirafeHTMLElement.js'; class MobileLayerElementComponent extends GirafeHTMLElement { templateUrl = null; styleUrls = null; template = () => { return uHtml `<style> .hidden{display:none}.gg-tabs{cursor:pointer;grid-auto-flow:column;padding-bottom:1rem;font-size:1rem;display:grid}.gg-tab{border:none;border-bottom:var(--app-standard-border);cursor:pointer;color:var(--text-color);background:0 0;padding:.5rem}.gg-tab.active{border-bottom:solid 1px var(--text-color)}button,input,select,textarea{font:inherit}.gg-icon-button,.gg-button{color:var(--text-color);cursor:pointer;background-color:#0000;border:none;flex-direction:column;justify-content:center;align-items:center;padding:0;display:flex}.gg-button{text-align:left}.gg-small{flex-direction:row}.gg-small img{width:calc(var(--app-standard-height) / 2.5);margin:0}.gg-small span{margin-left:.5rem;font-size:1rem}.girafe-button-big{filter:drop-shadow(0 0 8px #0000004d);background-color:var(--bkg-color);width:3.5rem;height:3.5rem;color:var(--text-color);border:none;border-radius:4rem;flex-direction:column;align-items:center;padding:.5rem;display:flex}.girafe-button-big img{width:95%;height:auto;padding:5%;overflow:hidden}.girafe-button-big:hover,.girafe-button-large:hover,.girafe-button-small:hover,.girafe-button-tiny:hover{background-color:var(--bkg-color)} </style><style> .container{border-bottom:1px solid #ddd;align-items:center;height:3rem;display:flex} </style> <style>${this.customStyle}</style> <div class="container"><button class="${this.layer?.active ? 'gg-icon-button gg-small gg-selected' : 'gg-icon-button gg-small'}" tip="Activate / Deactivate" onclick="${() => this.toggle()}"><img class="${this.layer?.active ? 'gg-checkbox' : 'hidden'}" alt="Expand/Collapse button" src="icons/checked-full.svg"> <img class="${!this.layer?.active ? 'gg-checkbox' : 'hidden'}" alt="Expand/Collapse button" src="icons/checked-no.svg"></button><div class="label-container"><button class="${this.layer?.active ? 'gg-button gg-small gg-selected' : 'gg-button gg-small'}" onclick="${() => this.toggle()}"><span i18n="${this.layer?.name}" class="gg-tree-label">${this.layer?.name}</span></button></div></div> ${this.htmlUnsafe(this.feedbackTemplateHtml ?? '')}`; }; layer; static observedAttributes = []; constructor(name) { super(name ?? 'layer-mobile'); } registerEvents() { this.subscribe(/layers\.layersList\..*\.activeState/, (_oldValue, _newValue, layer) => { if (this.layer === layer) { super.refreshRender(); } }); } render() { super.render(); this.refreshGroup(); } toggle() { if (this.layer) { this.context.layerManager.toggleLayer(this.layer); } } refreshGroup() { const layerid = this.getAttribute('layerid'); if (layerid) { this.layer = this.context.layerManager.getTreeItem(layerid); } super.refreshRender(); } connectedCallback() { super.connectedCallback(); MobileLayerElementComponent.observedAttributes.push('layerid'); this.registerEvents(); this.render(); } attributeChangedCallback(name) { if (name === 'layerid') { this.refreshGroup(); } } } export default MobileLayerElementComponent;