Protokoll #24039

ID24039
Zeitstempel2025-12-27 15:44:41.414070
Clientroot
IP145.224.72.140
Modellclaude-sonnet-4-20250514
Statuscompleted
Tokens4,755 (Input: 2,221, Output: 2,534)
Dauer420 ms
Request-Zeit2025-12-27 15:44:41.414070
Response-Zeit2025-12-27 15:44:41.833666

Request

{
    "event": "PreToolUse",
    "tool_name": "mcp__mcp-docs__docs_update",
    "tool_input": {
        "id": 146,
        "content": "<nav class=\"breadcrumb\">\n    <a href=\"\/docs\">Dokumentation<\/a> &raquo;\n    <a href=\"\/docs\/frontend\">Frontend<\/a> &raquo;\n    <a href=\"\/docs\/frontend\/htmx\">HTMX<\/a> &raquo;\n    Patterns\n<\/nav>\n\n<h1>HTMX Patterns Referenz<\/h1>\n\n<p>Kopierbare Patterns für häufige Anwendungsfälle.<\/p>\n\n<h2>CRUD-Operationen<\/h2>\n\n<h3>Create (POST)<\/h3>\n\n<pre><code>&lt;form hx-post=\"\/api\/items\"\n      hx-headers='{\"X-CSRF-TOKEN\": \"&lt;?= $csrfToken ?&gt;\"}'\n      hx-target=\"#form-message\"\n      hx-swap=\"innerHTML\"\n      hx-indicator=\"#create-btn\"\n      hx-disabled-elt=\"#create-btn\"&gt;\n    \n    &lt;input type=\"text\" name=\"title\" required&gt;\n    &lt;textarea name=\"description\"&gt;&lt;\/textarea&gt;\n    \n    &lt;button type=\"submit\" id=\"create-btn\" class=\"btn btn--primary\"&gt;\n        &lt;span class=\"htmx-content\"&gt;Erstellen&lt;\/span&gt;\n        &lt;span class=\"htmx-indicator\"&gt;Erstelle...&lt;\/span&gt;\n    &lt;\/button&gt;\n&lt;\/form&gt;\n&lt;div id=\"form-message\"&gt;&lt;\/div&gt;<\/code><\/pre>\n\n<h3>Read (GET mit Partial)<\/h3>\n\n<pre><code>&lt;div hx-get=\"\/api\/items\/&lt;?= $id ?&gt;\/details\"\n     hx-trigger=\"revealed\"\n     hx-swap=\"innerHTML\"&gt;\n    Lade Details...\n&lt;\/div&gt;<\/code><\/pre>\n\n<h3>Update (PUT)<\/h3>\n\n<pre><code>&lt;form hx-put=\"\/api\/items\/&lt;?= $id ?&gt;\"\n      hx-headers='{\"X-CSRF-TOKEN\": \"&lt;?= $csrfToken ?&gt;\"}'\n      hx-target=\"#form-message\"\n      hx-swap=\"innerHTML\"\n      hx-indicator=\"#save-btn\"\n      hx-disabled-elt=\"#save-btn\"&gt;\n    \n    &lt;input type=\"text\" name=\"title\" value=\"&lt;?= htmlspecialchars($item['title']) ?&gt;\"&gt;\n    \n    &lt;button type=\"submit\" id=\"save-btn\" class=\"btn btn--primary\"&gt;\n        &lt;span class=\"htmx-content\"&gt;Speichern&lt;\/span&gt;\n        &lt;span class=\"htmx-indicator\"&gt;Speichere...&lt;\/span&gt;\n    &lt;\/button&gt;\n&lt;\/form&gt;\n&lt;div id=\"form-message\"&gt;&lt;\/div&gt;<\/code><\/pre>\n\n<h3>Delete (DELETE)<\/h3>\n\n<pre><code>&lt;button hx-delete=\"\/api\/items\/&lt;?= $id ?&gt;\"\n        hx-headers='{\"X-CSRF-TOKEN\": \"&lt;?= $csrfToken ?&gt;\"}'\n        hx-confirm=\"'&lt;?= htmlspecialchars($item['title']) ?&gt;' wirklich löschen?\"\n        hx-target=\"closest tr\"\n        hx-swap=\"outerHTML swap:0.3s\"\n        class=\"btn btn--danger\"&gt;\n    Löschen\n&lt;\/button&gt;<\/code><\/pre>\n\n<h2>Inline-Editing<\/h2>\n\n<h3>Text-Input mit Auto-Save<\/h3>\n\n<pre><code>&lt;input type=\"text\" \n       name=\"title\"\n       value=\"&lt;?= htmlspecialchars($value) ?&gt;\"\n       class=\"inline-edit\"\n       hx-post=\"\/api\/items\/&lt;?= $id ?&gt;\/title\"\n       hx-headers='{\"X-CSRF-TOKEN\": \"&lt;?= $csrfToken ?&gt;\"}'\n       hx-trigger=\"blur changed, keyup[key=='Enter'] changed\"\n       hx-swap=\"none\"\n       hx-disabled-elt=\"this\"\n       hx-on::after-request=\"this.classList.toggle('is-saved', event.detail.successful); setTimeout(() =&gt; this.classList.remove('is-saved'), 1000)\"&gt;<\/code><\/pre>\n\n<h3>Select mit Auto-Save<\/h3>\n\n<pre><code>&lt;select name=\"status\"\n        class=\"inline-select\"\n        hx-post=\"\/api\/items\/&lt;?= $id ?&gt;\/status\"\n        hx-headers='{\"X-CSRF-TOKEN\": \"&lt;?= $csrfToken ?&gt;\"}'\n        hx-swap=\"none\"\n        hx-disabled-elt=\"this\"\n        hx-on::after-request=\"this.classList.toggle('is-saved', event.detail.successful); setTimeout(() =&gt; this.classList.remove('is-saved'), 1000)\"&gt;\n    &lt;?php foreach ($statuses as $key =&gt; $label): ?&gt;\n    &lt;option value=\"&lt;?= $key ?&gt;\" &lt;?= $item['status'] === $key ? 'selected' : '' ?&gt;&gt;\n        &lt;?= htmlspecialchars($label) ?&gt;\n    &lt;\/option&gt;\n    &lt;?php endforeach; ?&gt;\n&lt;\/select&gt;<\/code><\/pre>\n\n<h3>Toggle (Checkbox)<\/h3>\n\n<pre><code>&lt;input type=\"checkbox\"\n       name=\"is_active\"\n       &lt;?= $item['is_active'] ? 'checked' : '' ?&gt;\n       hx-post=\"\/api\/items\/&lt;?= $id ?&gt;\/toggle-active\"\n       hx-headers='{\"X-CSRF-TOKEN\": \"&lt;?= $csrfToken ?&gt;\"}'\n       hx-swap=\"none\"\n       hx-disabled-elt=\"this\"&gt;<\/code><\/pre>\n\n<h2>Listen &amp; Tabellen<\/h2>\n\n<h3>Lazy-Load Tabelle<\/h3>\n\n<pre><code>&lt;table&gt;\n    &lt;thead&gt;...&lt;\/thead&gt;\n    &lt;tbody hx-get=\"\/api\/items?page=1\"\n           hx-trigger=\"revealed\"\n           hx-swap=\"innerHTML\"&gt;\n        &lt;tr&gt;&lt;td colspan=\"5\"&gt;Lade Daten...&lt;\/td&gt;&lt;\/tr&gt;\n    &lt;\/tbody&gt;\n&lt;\/table&gt;<\/code><\/pre>\n\n<h3>Infinite Scroll<\/h3>\n\n<pre><code>&lt;div id=\"items-list\"&gt;\n    &lt;?php foreach ($items as $item): ?&gt;\n    &lt;div class=\"item\"&gt;&lt;?= htmlspecialchars($item['title']) ?&gt;&lt;\/div&gt;\n    &lt;?php endforeach; ?&gt;\n    \n    &lt;?php if ($hasMore): ?&gt;\n    &lt;div hx-get=\"\/api\/items?page=&lt;?= $page + 1 ?&gt;\"\n         hx-trigger=\"revealed\"\n         hx-swap=\"outerHTML\"\n         hx-indicator=\"#load-more-spinner\"&gt;\n        &lt;span id=\"load-more-spinner\" class=\"htmx-indicator\"&gt;Lade mehr...&lt;\/span&gt;\n    &lt;\/div&gt;\n    &lt;?php endif; ?&gt;\n&lt;\/div&gt;<\/code><\/pre>\n\n<h3>Sortierbare Spalten<\/h3>\n\n<pre><code>&lt;th hx-get=\"\/api\/items?sort=title&amp;dir=&lt;?= $sortDir === 'asc' ? 'desc' : 'asc' ?&gt;\"\n    hx-target=\"#items-tbody\"\n    hx-swap=\"innerHTML\"\n    class=\"sortable &lt;?= $sortCol === 'title' ? 'sorted-' . $sortDir : '' ?&gt;\"&gt;\n    Titel\n&lt;\/th&gt;<\/code><\/pre>\n\n<h2>Suche &amp; Filter<\/h2>\n\n<h3>Live-Search<\/h3>\n\n<pre><code>&lt;input type=\"search\"\n       name=\"q\"\n       placeholder=\"Suchen...\"\n       hx-get=\"\/api\/items\/search\"\n       hx-trigger=\"input changed delay:300ms, search\"\n       hx-target=\"#search-results\"\n       hx-swap=\"innerHTML\"\n       hx-indicator=\"#search-spinner\"&gt;\n&lt;span id=\"search-spinner\" class=\"htmx-indicator\"&gt;...&lt;\/span&gt;\n&lt;div id=\"search-results\"&gt;&lt;\/div&gt;<\/code><\/pre>\n\n<h3>Filter-Form<\/h3>\n\n<pre><code>&lt;form hx-get=\"\/api\/items\"\n      hx-trigger=\"change from:select, change from:input[type='checkbox']\"\n      hx-target=\"#items-list\"\n      hx-swap=\"innerHTML\"\n      hx-indicator=\"#filter-spinner\"&gt;\n    \n    &lt;select name=\"status\"&gt;\n        &lt;option value=\"\"&gt;Alle Status&lt;\/option&gt;\n        &lt;option value=\"active\"&gt;Aktiv&lt;\/option&gt;\n        &lt;option value=\"draft\"&gt;Entwurf&lt;\/option&gt;\n    &lt;\/select&gt;\n    \n    &lt;select name=\"category\"&gt;\n        &lt;option value=\"\"&gt;Alle Kategorien&lt;\/option&gt;\n    &lt;\/select&gt;\n    \n    &lt;span id=\"filter-spinner\" class=\"htmx-indicator\"&gt;Filtere...&lt;\/span&gt;\n&lt;\/form&gt;<\/code><\/pre>\n\n<h2>Modals &amp; Dialogs<\/h2>\n\n<h3>Modal laden<\/h3>\n\n<pre><code>&lt;button hx-get=\"\/api\/items\/&lt;?= $id ?&gt;\/edit-modal\"\n        hx-target=\"#modal-container\"\n        hx-swap=\"innerHTML\"\n        hx-on::after-request=\"document.getElementById('modal-container').showModal()\"&gt;\n    Bearbeiten\n&lt;\/button&gt;\n\n&lt;dialog id=\"modal-container\"&gt;&lt;\/dialog&gt;<\/code><\/pre>\n\n<h3>Modal-Inhalt (Partial)<\/h3>\n\n<pre><code>&lt;form hx-put=\"\/api\/items\/&lt;?= $id ?&gt;\"\n      hx-headers='{\"X-CSRF-TOKEN\": \"&lt;?= $csrfToken ?&gt;\"}'\n      hx-target=\"#modal-container\"\n      hx-swap=\"innerHTML\"\n      hx-on::after-request=\"if(event.detail.successful) document.getElementById('modal-container').close()\"&gt;\n    \n    &lt;h2&gt;Bearbeiten&lt;\/h2&gt;\n    &lt;input type=\"text\" name=\"title\" value=\"&lt;?= htmlspecialchars($item['title']) ?&gt;\"&gt;\n    \n    &lt;button type=\"submit\"&gt;Speichern&lt;\/button&gt;\n    &lt;button type=\"button\" onclick=\"this.closest('dialog').close()\"&gt;Abbrechen&lt;\/button&gt;\n&lt;\/form&gt;<\/code><\/pre>\n\n<h2>Polling &amp; Updates<\/h2>\n\n<h3>Auto-Refresh<\/h3>\n\n<pre><code>&lt;div hx-get=\"\/api\/status\"\n     hx-trigger=\"every 5s\"\n     hx-swap=\"innerHTML\"&gt;\n    Status: &lt;?= $status ?&gt;\n&lt;\/div&gt;<\/code><\/pre>\n\n<h3>Polling mit Stop-Condition<\/h3>\n\n<pre><code>&lt;div hx-get=\"\/api\/jobs\/&lt;?= $jobId ?&gt;\/status\"\n     hx-trigger=\"&lt;?= $job['status'] === 'running' ? 'every 2s' : 'none' ?&gt;\"\n     hx-swap=\"outerHTML\"&gt;\n    Status: &lt;?= $job['status'] ?&gt;\n    &lt;?php if ($job['status'] === 'running'): ?&gt;\n    &lt;span class=\"spinner\"&gt;&lt;\/span&gt;\n    &lt;?php endif; ?&gt;\n&lt;\/div&gt;<\/code><\/pre>\n\n<h2>Verwandte Themen<\/h2>\n<ul>\n    <li><a href=\"\/docs\/frontend\/htmx\">HTMX Übersicht<\/a> - Grundlagen und Konfiguration<\/li>\n    <li><a href=\"\/docs\/frontend\/htmx\/troubleshooting\">Troubleshooting<\/a> - Häufige Probleme<\/li>\n    <li><a href=\"\/docs\/betrieb\/regeln\">Regeln<\/a> - HTMX statt fetch() Regel<\/li>\n<\/ul>"
    }
}

Response

{
    "tool_response": [
        {
            "type": "text",
            "text": "{\n  \"success\": true,\n  \"doc\": {\n    \"id\": 146,\n    \"parent_id\": 145,\n    \"slug\": \"patterns\",\n    \"path\": \"\/frontend\/htmx\/patterns\",\n    \"title\": \"HTMX Patterns Referenz\",\n    \"description\": \"Kopierbare HTMX-Patterns für häufige Use-Cases\",\n    \"content\": \"<nav class=\\\"breadcrumb\\\">\\n    <a href=\\\"\/docs\\\">Dokumentation<\/a> &raquo;\\n    <a href=\\\"\/docs\/frontend\\\">Frontend<\/a> &raquo;\\n    <a href=\\\"\/docs\/frontend\/htmx\\\">HTMX<\/a> &raquo;\\n    Patterns\\n<\/nav>\\n\\n<h1>HTMX Patterns Referenz<\/h1>\\n\\n<p>Kopierbare Patterns für häufige Anwendungsfälle.<\/p>\\n\\n<h2>CRUD-Operationen<\/h2>\\n\\n<h3>Create (POST)<\/h3>\\n\\n<pre><code>&lt;form hx-post=\\\"\/api\/items\\\"\\n      hx-headers='{\\\"X-CSRF-TOKEN\\\": \\\"&lt;?= $csrfToken ?&gt;\\\"}'\\n      hx-target=\\\"#form-message\\\"\\n      hx-swap=\\\"innerHTML\\\"\\n      hx-indicator=\\\"#create-btn\\\"\\n      hx-disabled-elt=\\\"#create-btn\\\"&gt;\\n    \\n    &lt;input type=\\\"text\\\" name=\\\"title\\\" required&gt;\\n    &lt;textarea name=\\\"description\\\"&gt;&lt;\/textarea&gt;\\n    \\n    &lt;button type=\\\"submit\\\" id=\\\"create-btn\\\" class=\\\"btn btn--primary\\\"&gt;\\n        &lt;span class=\\\"htmx-content\\\"&gt;Erstellen&lt;\/span&gt;\\n        &lt;span class=\\\"htmx-indicator\\\"&gt;Erstelle...&lt;\/span&gt;\\n    &lt;\/button&gt;\\n&lt;\/form&gt;\\n&lt;div id=\\\"form-message\\\"&gt;&lt;\/div&gt;<\/code><\/pre>\\n\\n<h3>Read (GET mit Partial)<\/h3>\\n\\n<pre><code>&lt;div hx-get=\\\"\/api\/items\/&lt;?= $id ?&gt;\/details\\\"\\n     hx-trigger=\\\"revealed\\\"\\n     hx-swap=\\\"innerHTML\\\"&gt;\\n    Lade Details...\\n&lt;\/div&gt;<\/code><\/pre>\\n\\n<h3>Update (PUT)<\/h3>\\n\\n<pre><code>&lt;form hx-put=\\\"\/api\/items\/&lt;?= $id ?&gt;\\\"\\n      hx-headers='{\\\"X-CSRF-TOKEN\\\": \\\"&lt;?= $csrfToken ?&gt;\\\"}'\\n      hx-target=\\\"#form-message\\\"\\n      hx-swap=\\\"innerHTML\\\"\\n      hx-indicator=\\\"#save-btn\\\"\\n      hx-disabled-elt=\\\"#save-btn\\\"&gt;\\n    \\n    &lt;input type=\\\"text\\\" name=\\\"title\\\" value=\\\"&lt;?= htmlspecialchars($item['title']) ?&gt;\\\"&gt;\\n    \\n    &lt;button type=\\\"submit\\\" id=\\\"save-btn\\\" class=\\\"btn btn--primary\\\"&gt;\\n        &lt;span class=\\\"htmx-content\\\"&gt;Speichern&lt;\/span&gt;\\n        &lt;span class=\\\"htmx-indicator\\\"&gt;Speichere...&lt;\/span&gt;\\n    &lt;\/button&gt;\\n&lt;\/form&gt;\\n&lt;div id=\\\"form-message\\\"&gt;&lt;\/div&gt;<\/code><\/pre>\\n\\n<h3>Delete (DELETE)<\/h3>\\n\\n<pre><code>&lt;button hx-delete=\\\"\/api\/items\/&lt;?= $id ?&gt;\\\"\\n        hx-headers='{\\\"X-CSRF-TOKEN\\\": \\\"&lt;?= $csrfToken ?&gt;\\\"}'\\n        hx-confirm=\\\"'&lt;?= htmlspecialchars($item['title']) ?&gt;' wirklich löschen?\\\"\\n        hx-target=\\\"closest tr\\\"\\n        hx-swap=\\\"outerHTML swap:0.3s\\\"\\n        class=\\\"btn btn--danger\\\"&gt;\\n    Löschen\\n&lt;\/button&gt;<\/code><\/pre>\\n\\n<h2>Inline-Editing<\/h2>\\n\\n<h3>Text-Input mit Auto-Save<\/h3>\\n\\n<pre><code>&lt;input type=\\\"text\\\" \\n       name=\\\"title\\\"\\n       value=\\\"&lt;?= htmlspecialchars($value) ?&gt;\\\"\\n       class=\\\"inline-edit\\\"\\n       hx-post=\\\"\/api\/items\/&lt;?= $id ?&gt;\/title\\\"\\n       hx-headers='{\\\"X-CSRF-TOKEN\\\": \\\"&lt;?= $csrfToken ?&gt;\\\"}'\\n       hx-trigger=\\\"blur changed, keyup[key=='Enter'] changed\\\"\\n       hx-swap=\\\"none\\\"\\n       hx-disabled-elt=\\\"this\\\"\\n       hx-on::after-request=\\\"this.classList.toggle('is-saved', event.detail.successful); setTimeout(() =&gt; this.classList.remove('is-saved'), 1000)\\\"&gt;<\/code><\/pre>\\n\\n<h3>Select mit Auto-Save<\/h3>\\n\\n<pre><code>&lt;select name=\\\"status\\\"\\n        class=\\\"inline-select\\\"\\n        hx-post=\\\"\/api\/items\/&lt;?= $id ?&gt;\/status\\\"\\n        hx-headers='{\\\"X-CSRF-TOKEN\\\": \\\"&lt;?= $csrfToken ?&gt;\\\"}'\\n        hx-swap=\\\"none\\\"\\n        hx-disabled-elt=\\\"this\\\"\\n        hx-on::after-request=\\\"this.classList.toggle('is-saved', event.detail.successful); setTimeout(() =&gt; this.classList.remove('is-saved'), 1000)\\\"&gt;\\n    &lt;?php foreach ($statuses as $key =&gt; $label): ?&gt;\\n    &lt;option value=\\\"&lt;?= $key ?&gt;\\\" &lt;?= $item['status'] === $key ? 'selected' : '' ?&gt;&gt;\\n        &lt;?= htmlspecialchars($label) ?&gt;\\n    &lt;\/option&gt;\\n    &lt;?php endforeach; ?&gt;\\n&lt;\/select&gt;<\/code><\/pre>\\n\\n<h3>Toggle (Checkbox)<\/h3>\\n\\n<pre><code>&lt;input type=\\\"checkbox\\\"\\n       name=\\\"is_active\\\"\\n       &lt;?= $item['is_active'] ? 'checked' : '' ?&gt;\\n       hx-post=\\\"\/api\/items\/&lt;?= $id ?&gt;\/toggle-active\\\"\\n       hx-headers='{\\\"X-CSRF-TOKEN\\\": \\\"&lt;?= $csrfToken ?&gt;\\\"}'\\n       hx-swap=\\\"none\\\"\\n       hx-disabled-elt=\\\"this\\\"&gt;<\/code><\/pre>\\n\\n<h2>Listen &amp; Tabellen<\/h2>\\n\\n<h3>Lazy-Load Tabelle<\/h3>\\n\\n<pre><code>&lt;table&gt;\\n    &lt;thead&gt;...&lt;\/thead&gt;\\n    &lt;tbody hx-get=\\\"\/api\/items?page=1\\\"\\n           hx-trigger=\\\"revealed\\\"\\n           hx-swap=\\\"innerHTML\\\"&gt;\\n        &lt;tr&gt;&lt;td colspan=\\\"5\\\"&gt;Lade Daten...&lt;\/td&gt;&lt;\/tr&gt;\\n    &lt;\/tbody&gt;\\n&lt;\/table&gt;<\/code><\/pre>\\n\\n<h3>Infinite Scroll<\/h3>\\n\\n<pre><code>&lt;div id=\\\"items-list\\\"&gt;\\n    &lt;?php foreach ($items as $item): ?&gt;\\n    &lt;div class=\\\"item\\\"&gt;&lt;?= htmlspecialchars($item['title']) ?&gt;&lt;\/div&gt;\\n    &lt;?php endforeach; ?&gt;\\n    \\n    &lt;?php if ($hasMore): ?&gt;\\n    &lt;div hx-get=\\\"\/api\/items?page=&lt;?= $page + 1 ?&gt;\\\"\\n         hx-trigger=\\\"revealed\\\"\\n         hx-swap=\\\"outerHTML\\\"\\n         hx-indicator=\\\"#load-more-spinner\\\"&gt;\\n        &lt;span id=\\\"load-more-spinner\\\" class=\\\"htmx-indicator\\\"&gt;Lade mehr...&lt;\/span&gt;\\n    &lt;\/div&gt;\\n    &lt;?php endif; ?&gt;\\n&lt;\/div&gt;<\/code><\/pre>\\n\\n<h3>Sortierbare Spalten<\/h3>\\n\\n<pre><code>&lt;th hx-get=\\\"\/api\/items?sort=title&amp;dir=&lt;?= $sortDir === 'asc' ? 'desc' : 'asc' ?&gt;\\\"\\n    hx-target=\\\"#items-tbody\\\"\\n    hx-swap=\\\"innerHTML\\\"\\n    class=\\\"sortable &lt;?= $sortCol === 'title' ? 'sorted-' . $sortDir : '' ?&gt;\\\"&gt;\\n    Titel\\n&lt;\/th&gt;<\/code><\/pre>\\n\\n<h2>Suche &amp; Filter<\/h2>\\n\\n<h3>Live-Search<\/h3>\\n\\n<pre><code>&lt;input type=\\\"search\\\"\\n       name=\\\"q\\\"\\n       placeholder=\\\"Suchen...\\\"\\n       hx-get=\\\"\/api\/items\/search\\\"\\n       hx-trigger=\\\"input changed delay:300ms, search\\\"\\n       hx-target=\\\"#search-results\\\"\\n       hx-swap=\\\"innerHTML\\\"\\n       hx-indicator=\\\"#search-spinner\\\"&gt;\\n&lt;span id=\\\"search-spinner\\\" class=\\\"htmx-indicator\\\"&gt;...&lt;\/span&gt;\\n&lt;div id=\\\"search-results\\\"&gt;&lt;\/div&gt;<\/code><\/pre>\\n\\n<h3>Filter-Form<\/h3>\\n\\n<pre><code>&lt;form hx-get=\\\"\/api\/items\\\"\\n      hx-trigger=\\\"change from:select, change from:input[type='checkbox']\\\"\\n      hx-target=\\\"#items-list\\\"\\n      hx-swap=\\\"innerHTML\\\"\\n      hx-indicator=\\\"#filter-spinner\\\"&gt;\\n    \\n    &lt;select name=\\\"status\\\"&gt;\\n        &lt;option value=\\\"\\\"&gt;Alle Status&lt;\/option&gt;\\n        &lt;option value=\\\"active\\\"&gt;Aktiv&lt;\/option&gt;\\n        &lt;option value=\\\"draft\\\"&gt;Entwurf&lt;\/option&gt;\\n    &lt;\/select&gt;\\n    \\n    &lt;select name=\\\"category\\\"&gt;\\n        &lt;option value=\\\"\\\"&gt;Alle Kategorien&lt;\/option&gt;\\n    &lt;\/select&gt;\\n    \\n    &lt;span id=\\\"filter-spinner\\\" class=\\\"htmx-indicator\\\"&gt;Filtere...&lt;\/span&gt;\\n&lt;\/form&gt;<\/code><\/pre>\\n\\n<h2>Modals &amp; Dialogs<\/h2>\\n\\n<h3>Modal laden<\/h3>\\n\\n<pre><code>&lt;button hx-get=\\\"\/api\/items\/&lt;?= $id ?&gt;\/edit-modal\\\"\\n        hx-target=\\\"#modal-container\\\"\\n        hx-swap=\\\"innerHTML\\\"\\n        hx-on::after-request=\\\"document.getElementById('modal-container').showModal()\\\"&gt;\\n    Bearbeiten\\n&lt;\/button&gt;\\n\\n&lt;dialog id=\\\"modal-container\\\"&gt;&lt;\/dialog&gt;<\/code><\/pre>\\n\\n<h3>Modal-Inhalt (Partial)<\/h3>\\n\\n<pre><code>&lt;form hx-put=\\\"\/api\/items\/&lt;?= $id ?&gt;\\\"\\n      hx-headers='{\\\"X-CSRF-TOKEN\\\": \\\"&lt;?= $csrfToken ?&gt;\\\"}'\\n      hx-target=\\\"#modal-container\\\"\\n      hx-swap=\\\"innerHTML\\\"\\n      hx-on::after-request=\\\"if(event.detail.successful) document.getElementById('modal-container').close()\\\"&gt;\\n    \\n    &lt;h2&gt;Bearbeiten&lt;\/h2&gt;\\n    &lt;input type=\\\"text\\\" name=\\\"title\\\" value=\\\"&lt;?= htmlspecialchars($item['title']) ?&gt;\\\"&gt;\\n    \\n    &lt;button type=\\\"submit\\\"&gt;Speichern&lt;\/button&gt;\\n    &lt;button type=\\\"button\\\" onclick=\\\"this.closest('dialog').close()\\\"&gt;Abbrechen&lt;\/button&gt;\\n&lt;\/form&gt;<\/code><\/pre>\\n\\n<h2>Polling &amp; Updates<\/h2>\\n\\n<h3>Auto-Refresh<\/h3>\\n\\n<pre><code>&lt;div hx-get=\\\"\/api\/status\\\"\\n     hx-trigger=\\\"every 5s\\\"\\n     hx-swap=\\\"innerHTML\\\"&gt;\\n    Status: &lt;?= $status ?&gt;\\n&lt;\/div&gt;<\/code><\/pre>\\n\\n<h3>Polling mit Stop-Condition<\/h3>\\n\\n<pre><code>&lt;div hx-get=\\\"\/api\/jobs\/&lt;?= $jobId ?&gt;\/status\\\"\\n     hx-trigger=\\\"&lt;?= $job['status'] === 'running' ? 'every 2s' : 'none' ?&gt;\\\"\\n     hx-swap=\\\"outerHTML\\\"&gt;\\n    Status: &lt;?= $job['status'] ?&gt;\\n    &lt;?php if ($job['status'] === 'running'): ?&gt;\\n    &lt;span class=\\\"spinner\\\"&gt;&lt;\/span&gt;\\n    &lt;?php endif; ?&gt;\\n&lt;\/div&gt;<\/code><\/pre>\\n\\n<h2>Verwandte Themen<\/h2>\\n<ul>\\n    <li><a href=\\\"\/docs\/frontend\/htmx\\\">HTMX Übersicht<\/a> - Grundlagen und Konfiguration<\/li>\\n    <li><a href=\\\"\/docs\/frontend\/htmx\/troubleshooting\\\">Troubleshooting<\/a> - Häufige Probleme<\/li>\\n    <li><a href=\\\"\/docs\/betrieb\/regeln\\\">Regeln<\/a> - HTMX statt fetch() Regel<\/li>\\n<\/ul>\",\n    \"status\": \"published\",\n    \"sort_order\": 1,\n    \"depth\": 2,\n    \"created_at\": \"2025-12-27T12:25:04\",\n    \"updated_at\": \"2025-12-27T15:44:41\"\n  },\n  \"message\": \"Document #146 updated\"\n}"
        }
    ]
}
← Vorheriger Zur Liste Nächster →