Widget:Test: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
Keine Bearbeitungszusammenfassung |
Keine Bearbeitungszusammenfassung |
||
| Zeile 1: | Zeile 1: | ||
{literal}<style> | |||
<style> | /* CSS hier */ | ||
</style>{/literal} | |||
</style> | |||
<div class="lm-wrapper" id="lm-{{{id|karte}}}" style="width:{{{width|800}}}px; max-width:100%"> | <div class="lm-wrapper" id="lm-{{{id|karte}}}" style="width:{{{width|800}}}px; max-width:100%"> | ||
<div class="lm-controls" role="toolbar"> | |||
<div class="lm-controls" role="toolbar | |||
<span class="lm-controls-title">Ebenen</span> | <span class="lm-controls-title">Ebenen</span> | ||
</div> | </div> | ||
<div class="lm-viewport" style="width:{{{width|800}}}px; height:{{{height|600}}}px; max-width:100%"> | <div class="lm-viewport" style="width:{{{width|800}}}px; height:{{{height|600}}}px; max-width:100%"> | ||
<!--layerdata:{{{layers}}}--> | <!--layerdata:{{{layers}}}--> | ||
</div> | </div> | ||
<div class="lm-opacity-bar" style="display:none"> | <div class="lm-opacity-bar" style="display:none"> | ||
<span class="lm-opacity-label">Deckkraft:</span> | <span class="lm-opacity-label">Deckkraft:</span> | ||
| Zeile 111: | Zeile 15: | ||
<span class="lm-opacity-value">100%</span> | <span class="lm-opacity-value">100%</span> | ||
</div> | </div> | ||
</div> | </div> | ||
{literal}<script> | |||
<script> | |||
(function() { | (function() { | ||
function init() { | function init() { | ||
var wrapperId = ' | var wrapperId = '{/literal}{{{id|karte}}}{literal}'; | ||
var wrapper = document.getElementById(wrapperId); | var wrapper = document.getElementById('lm-' + wrapperId); | ||
if (!wrapper) return; | if (!wrapper) return; | ||
| Zeile 139: | Zeile 41: | ||
var img = document.createElement('img'); | var img = document.createElement('img'); | ||
img.className = 'lm-layer'; | img.className = 'lm-layer'; | ||
img.id = wrapperId + '-layer' + i; | img.id = 'lm-' + wrapperId + '-layer' + i; | ||
img.src = layer.image; | img.src = layer.image; | ||
img.alt = layer.label; | img.alt = layer.label; | ||
| Zeile 159: | Zeile 61: | ||
btn.addEventListener('click', function() { | btn.addEventListener('click', function() { | ||
layer.visible = !layer.visible; | layer.visible = !layer.visible; | ||
var img = document.getElementById(wrapperId + '-layer' + i); | var img = document.getElementById('lm-' + wrapperId + '-layer' + i); | ||
if (img) img.style.opacity = layer.visible ? '1' : '0'; | if (img) img.style.opacity = layer.visible ? '1' : '0'; | ||
btn.className = 'lm-btn' + (layer.visible ? ' lm-btn-active' : ''); | btn.className = 'lm-btn' + (layer.visible ? ' lm-btn-active' : ''); | ||
| Zeile 168: | Zeile 70: | ||
btn.addEventListener('mouseenter', function() { | btn.addEventListener('mouseenter', function() { | ||
if (!layer.visible) return; | if (!layer.visible) return; | ||
var img = document.getElementById(wrapperId + '-layer' + i); | var img = document.getElementById('lm-' + wrapperId + '-layer' + i); | ||
opacitySlider.dataset.target = wrapperId + '-layer' + i; | opacitySlider.dataset.target = 'lm-' + wrapperId + '-layer' + i; | ||
opacitySlider.value = Math.round(parseFloat(img.style.opacity) * 100); | opacitySlider.value = Math.round(parseFloat(img.style.opacity) * 100); | ||
opacityValue.textContent = opacitySlider.value + '%'; | opacityValue.textContent = opacitySlider.value + '%'; | ||
| Zeile 193: | Zeile 95: | ||
} | } | ||
})(); | })(); | ||
</script> | </script>{/literal} | ||
Version vom 6. Juni 2026, 13:23 Uhr
{literal}<style> /* CSS hier */ </style>{/literal}
Ebenen
{literal}<script> (function() {
function init() {
var wrapperId = '{/literal}karte{literal}';
var wrapper = document.getElementById('lm-' + wrapperId);
if (!wrapper) return;
var viewport = wrapper.querySelector('.lm-viewport');
var controls = wrapper.querySelector('.lm-controls');
var opacityBar = wrapper.querySelector('.lm-opacity-bar');
var opacitySlider = opacityBar.querySelector('.lm-opacity-slider');
var opacityValue = opacityBar.querySelector('.lm-opacity-value');
var comment = viewport.innerHTML.match(//); if (!comment) return;
var layers;
try { layers = JSON.parse(comment[1]); }
catch(e) { return; }
viewport.innerHTML = ;
layers.forEach(function(layer, i) {
var img = document.createElement('img');
img.className = 'lm-layer';
img.id = 'lm-' + wrapperId + '-layer' + i;
img.src = layer.image;
img.alt = layer.label;
img.style.opacity = layer.visible ? '1' : '0';
viewport.appendChild(img);
});
controls.innerHTML = 'Ebenen';
layers.forEach(function(layer, i) {
var btn = document.createElement('button');
btn.type = 'button';
btn.textContent = layer.label;
btn.className = 'lm-btn' + (layer.visible ? ' lm-btn-active' : );
if (layer.visible) {
btn.style.background = layer.color;
btn.style.borderColor = layer.color;
btn.style.color = '#fff';
}
btn.addEventListener('click', function() {
layer.visible = !layer.visible;
var img = document.getElementById('lm-' + wrapperId + '-layer' + i);
if (img) img.style.opacity = layer.visible ? '1' : '0';
btn.className = 'lm-btn' + (layer.visible ? ' lm-btn-active' : );
btn.style.background = layer.visible ? layer.color : ;
btn.style.borderColor = layer.visible ? layer.color : ;
btn.style.color = layer.visible ? '#fff' : ;
});
btn.addEventListener('mouseenter', function() {
if (!layer.visible) return;
var img = document.getElementById('lm-' + wrapperId + '-layer' + i);
opacitySlider.dataset.target = 'lm-' + wrapperId + '-layer' + i;
opacitySlider.value = Math.round(parseFloat(img.style.opacity) * 100);
opacityValue.textContent = opacitySlider.value + '%';
opacityBar.style.display = 'flex';
});
controls.appendChild(btn);
});
opacitySlider.addEventListener('input', function() {
var img = document.getElementById(opacitySlider.dataset.target);
if (img) img.style.opacity = opacitySlider.value / 100;
opacityValue.textContent = opacitySlider.value + '%';
});
wrapper.addEventListener('mouseleave', function() {
opacityBar.style.display = 'none';
});
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', init);
} else {
init();
}
})(); </script>{/literal}