clicking/removing a badge inside a multiselect does not toggle the dropdown anymore

This commit is contained in:
eclipse 2025-05-14 20:44:44 +02:00
parent 170b4d8a18
commit 3e31dbf4e0
4 changed files with 44 additions and 8 deletions

View File

@ -115,15 +115,28 @@ summary:empty::before {
color: var(--pico-background-color); color: var(--pico-background-color);
font-size: .8em; font-size: .8em;
padding: calc(var(--pico-form-element-spacing-vertical) * .5) calc(var(--pico-form-element-spacing-horizontal) * .5); padding: calc(var(--pico-form-element-spacing-vertical) * .5) calc(var(--pico-form-element-spacing-horizontal) * .5);
margin: auto calc(var(--pico-spacing) * .25); margin: calc(var(--pico-spacing) * .25);
cursor: default; cursor: default;
text-wrap: nowrap;
position: relative;
} }
.dropdown-badge-close { .dropdown-badge-close {
cursor: pointer; cursor: pointer;
font-size: 1.5em;
position: relative;
vertical-align: sub;
} }
form:not([novalidate]) input:user-valid[type="search"] { form:not([novalidate]) input:user-valid[type="search"] {
border-color: inherit; border-color: inherit;
background-image: none; background-image: none;
} }
/* style for Klappentext tooltips */
[data-tooltip][data-placement="bottom"]::after,
[data-tooltip][data-placement="bottom"]::before {
white-space: pre-line;
max-width: 400px;
}

View File

@ -146,7 +146,7 @@ function updateDropdownSelected(that, summary) {
// add closing X to badge // add closing X to badge
let badgeX = document.createElement("span"); let badgeX = document.createElement("span");
badgeX.classList.add("dropdown-badge-close"); badgeX.classList.add("dropdown-badge-close");
badgeX.innerHTML = "✖"; badgeX.innerHTML = "×";
badge.appendChild(badgeX); badge.appendChild(badgeX);
badgeX.addEventListener("click", removeDropdownBadge); badgeX.addEventListener("click", removeDropdownBadge);
} else { } else {
@ -162,3 +162,29 @@ function removeDropdownBadge(event) {
this.parentNode.remove(); this.parentNode.remove();
event.stopPropagation(); event.stopPropagation();
} }
// initializes all dropdown selects on the page
function initAllDropdownSelects() {
// initialize each dropdown individually
let dropdowns = document.querySelectorAll("form details.dropdown");
dropdowns.forEach((d) => initDropdownSelect(d));
// now it's time to set the z-indices
// get the_works style sheet
let sheet = [...document.styleSheets].filter((s) => s.ownerNode.getAttribute("href").includes("the_works"))[0];
const initialZ = 20;
// set z-index on dropdowns in reverse order
for ( let i = 0; i < dropdowns.length; i++ ) {
sheet.insertRule(`#${dropdowns[dropdowns.length-i-1].id} { z-index: ${initialZ + i*3};}`, sheet.cssRules.length);
sheet.insertRule(`#${dropdowns[dropdowns.length-i-1].id} .dropdown-badge { z-index: ${initialZ+1+i*3};}`, sheet.cssRules.length);
sheet.insertRule(`#${dropdowns[dropdowns.length-i-1].id} .dropdown-badge-close { z-index: ${initialZ+2+i*3};}`, sheet.cssRules.length);
}
// event handler for summary elements (see below)
function summaryClick(event, that) {
if ( event.target != that && that.contains(event.target) ) {
event.preventDefault();
}
}
// add event handler to summary elements preventing default behavior (toggling the details element) if the click actually targeted a badge
document.querySelectorAll("form details.dropdown summary").forEach((summary) => summary.addEventListener("click", (event) => summaryClick(event, summary), true));
}

View File

@ -93,6 +93,6 @@ Text bearbeiten
{% block script %} {% block script %}
<script src="{{ url_for('static', filename='the_works.js') }}"></script> <script src="{{ url_for('static', filename='the_works.js') }}"></script>
<script> <script>
window.onload = () => initDropdownSelect(document.getElementById("form_Genre_dropdown")); window.onload = () => initAllDropdownSelects();
</script> </script>
{% endblock script %} {% endblock script %}

View File

@ -159,9 +159,6 @@ Werk bearbeiten
{% block script %} {% block script %}
<script src="{{ url_for('static', filename='the_works.js') }}"></script> <script src="{{ url_for('static', filename='the_works.js') }}"></script>
<script> <script>
window.onload = () => { window.onload = () => initAllDropdownSelects();
initDropdownSelect(document.getElementById("form_Genre_dropdown"));
initDropdownSelect(document.getElementById("form_Herausgeber_dropdown"));
}
</script> </script>
{% endblock script %} {% endblock script %}