Files
musenalm/views/routes/baende/results/body.gohtml
2026-01-27 10:37:45 +01:00

58 lines
2.2 KiB
Plaintext

{{ $model := . }}
<div id="baenderesults"
x-data="{
hasMore: {{ if $model.has_more }}true{{ else }}false{{ end }},
offset: {{ if $model.next_offset }}{{ $model.next_offset }}{{ else }}0{{ end }},
loading: false,
search: '{{ $model.search }}',
letter: '{{ $model.letter }}',
activeFilterType: '{{ $model.active_filter_type }}',
activeFilterValue: '{{ $model.active_filter_value }}',
sortField: '{{ if $model.sort_field }}{{ $model.sort_field }}{{ else }}title{{ end }}',
sortOrder: '{{ if $model.sort_order }}{{ $model.sort_order }}{{ else }}asc{{ end }}'
}">
<span id="baende-count"
hx-swap-oob="outerHTML"
class="text-lg font-semibold font-sans text-gray-600 whitespace-nowrap">
{{ if $model.current_count }}{{ $model.current_count }}&thinsp;/&thinsp;{{ end }}{{ if $model.total_count }}{{ $model.total_count }}{{ else }}{{ len $model.result.Entries }}{{ end }} Bände
</span>
{{ template "_baende_table" $model }}
<!-- Load More Button -->
<div class="mt-6 flex justify-center" x-show="hasMore">
<button
type="button"
class="content-action-button"
:hx-get="`/baende/more/?offset=${offset}&${activeFilterType && activeFilterValue ? `${activeFilterType}=${encodeURIComponent(activeFilterValue)}` : `search=${search}&letter=${letter}`}&sort=${sortField}&order=${sortOrder}`"
hx-replace-url="true"
hx-target="#baende-tbody"
hx-swap="beforeend"
hx-indicator="this"
@htmx:before-request="loading = true"
@htmx:after-request="
loading = false;
hasMore = $event.detail.xhr.getResponseHeader('X-Has-More') === 'true';
offset = parseInt($event.detail.xhr.getResponseHeader('X-Next-Offset') || '0');
"
:disabled="loading">
<i class="ri-arrow-down-line" :class="{ 'spinning': loading }"></i>
<span x-text="loading ? 'Lädt...' : 'Weitere 150 laden'"></span>
</button>
</div>
{{ if $model.search }}
<script type="module">
let elements = document.querySelectorAll('.baende-text');
let mark_instance = new Mark(elements);
setTimeout(() => {
mark_instance.mark('{{ $model.search }}', {
"seperateWordSearch": true,
});
}, 200);
</script>
{{ end }}
</div>