/**
* @module components/Snapping.js
* @name Snapping
* @copyright 2023 3Liz
* @author BOISTEAULT Nicolas
* @license MPL-2.0
*/
import { mainLizmap, mainEventDispatcher } from '../modules/Globals.js';
import { html, render } from 'lit-html';
import '../images/svg/refresh.svg';
/**
* @class
* @name Snapping
* @augments HTMLElement
*/
export default class Snapping extends HTMLElement {
constructor() {
super();
}
connectedCallback() {
// Display
const mainTemplate = () => html`
<div class="${mainLizmap.snapping.config !== undefined ? '' : 'hide'}">
<h3>${lizDict['snapping.title']}</h3>
<div class="control-group">
<div class="controls">
<div class="btn-group">
<button
class="btn ${mainLizmap.snapping.active ? 'active btn-success' : ''}"
@click=${() => mainLizmap.snapping.toggle()}
>
${mainLizmap.snapping.active ? lizDict['geolocate.toolbar.stop'] : lizDict['geolocate.toolbar.start']}
</button>
<button
class="btn ${mainLizmap.snapping._snapLayersRefreshable ? 'btn-warning' : ''}"
?disabled=${!mainLizmap.snapping._snapLayersRefreshable}
@click=${() => mainLizmap.snapping.getSnappingData() }
>
<svg width="14" height="14">
<use xlink:href="#refresh"/>
</svg>
</button>
</div>
</div>
${mainLizmap.snapping.active ?
html`<div class="snap-panel-controls">
<p class="snap-layers-list-title">${lizDict['snapping.list.title']}</p>
<div class="snap-layers-list">
${mainLizmap.snapping?.config?.snap_layers.map((snapLayer) =>
html`<div class="snap-layer">
<input
id="${'snap-layer-'+snapLayer}"
name="${snapLayer}"
@change=${()=> mainLizmap.snapping.snapToggled = snapLayer}
.disabled=${!mainLizmap.snapping?.config?.snap_enabled[snapLayer]}
.checked=${mainLizmap.snapping?.config?.snap_on_layers[snapLayer]}
type="checkbox"/>
<label
data-bs-toggle="tooltip"
data-bs-title="${
mainLizmap.snapping?.config?.snap_enabled[snapLayer] ?
lizDict['snapping.list.toggle'] :
lizDict['snapping.list.disabled']}"
for="${'snap-layer-'+snapLayer}"
class="${mainLizmap.snapping?.config?.snap_enabled[snapLayer] ? '' : 'snap-disabled'}"
>
${mainLizmap.snapping?.getLayerTitle(snapLayer)}
</label>
</div>
`
)}
</div>
</div>`
: ''
}
</div>
<div>`;
render(mainTemplate(), this);
mainEventDispatcher.addListener(
() => {
render(mainTemplate(), this);
// display tooltips on rendered layer list
$('.snap-layer label', this).tooltip({
placement: 'top'
});
},
[
'snapping.config',
'snapping.active',
'snapping.refreshable'
]
);
}
disconnectedCallback() {
}
}