turbo-frames-patterns
/turbo-frames-patterns
Zawęża nawigację do wybranego obszaru strony przez Turbo Frames i wykrywa błędy połączeń, które cicho nie działają.
- Autor
- davidteren ↗
- Repozytorium
- hotwire-codex-skills ↗
- Licencja
- MIT
- Ostatnia zmiana repozytorium
- 02.07.2026
Ocena i bezpieczeństwo
- Pliki w paczce
- 3
- Skrypty
- 1
- Komentarze HTML
- 0
- Adresy URL w SKILL.md
- 0
Brak sygnałów. Repozytorium zmienione 02.07.2026, bez odwołań do wycofanych modeli i API.
MIT, otwarta: można używać i zmieniać, z zachowaniem informacji o autorze.
- 1 skrypt w paczce. Przejrzyj je przed instalacją, bo Claude może je uruchomić.
Skrypty: scripts/lint_turbo_frames.sh
Co robi i kiedy
Zawęża nawigację do wybranego obszaru strony przez Turbo Frames i wykrywa błędy połączeń, które cicho nie działają.
Oryginalny opis (EN)
Scope navigation to a region with Turbo Frames correctly, and catch the wiring mistakes that fail silently. Use when adding a turbo_frame_tag (a turbo-frame element), driving a frame from an outside link/form, lazy-loading a panel (src + loading: :lazy), inline-editing a row, or debugging a frame that does nothing / a click that navigates nowhere / a filter form that loses focus / duplicate frame ids from a collection. The region-scoped complement to targeted streams (turbo-streams-patterns) and morph refreshes (turbo-morphing).
Jak działa
- When to use
- The patterns (and their footguns)
- Lint an app
Podgląd SKILL.md
---
name: turbo-frames-patterns
description: Scope navigation to a region with Turbo Frames correctly, and catch the wiring mistakes that fail silently. Use when adding a turbo_frame_tag (a turbo-frame element), driving a frame from an outside link/form, lazy-loading a panel (src + loading: :lazy), inline-editing a row, or debugging a frame that does nothing / a click that navigates nowhere / a filter form that loses focus / duplicate frame ids from a collection. The region-scoped complement to targeted streams (turbo-streams-patterns) and morph refreshes (turbo-morphing).
---
# Turbo Frames
Frames scope navigation to a region: a click or form submit inside a `<turbo-frame>` is
captured by Turbo and only that frame updates. The failures are quiet — a mistargeted or
missing frame produces no error, just navigation that goes nowhere. Full patterns:
[`references/turbo-frames-guide.md`](references/turbo-frames-guide.md).
## When to use
- Adding a frame (`turbo_frame_tag "id"` / `<turbo-frame id="id">`).
- Driving a frame from **outside** (`data: { turbo_frame: "id" }`) — e.g. a filter bar
above a list.
- Lazy-loading a panel (`src:` + `loading: :lazy`).
- Inline-editing one record (a per-row `turbo_frame_tag dom_id(record)`).
- Debugging: a frame that does nothing, a click that navigates nowhere, a filter form
that loses focus on each keystroke, or duplicate ids from a collection partial.
## The patterns (and their footguns)
1. **Target must resolve** — a link targeting `turbo_frame: "x"` needs a
`turbo_frame_tag "x"` in the response (and your views), or the click silently does
nothing. Use `_top` to break out to a full-page navigation (the common case for row
links). *(linted)*
2. **Collection partials use `dom_id(record)`** — a literal `turbo_frame_tag "card"` in a
per-row partial stamps the same id on every row → duplicate DOM ids, only the first
updates. *(linted)*
3. **Frame request variant** — render the lean `show.html+turbo_frame.erb` for frame
requests (`turbo_frame_request?`) instead of re-rendering the whole layout.
4. **`turbo_action: "advance"`** — frame navigations don't change the URL by default;
promote tab/list/filter frames so reload/back/forward work.
5. **Filter/search forms go OUTSIDE the frame they target** — a form inside the frame
replaces itself (and the focused input) on every submit.
6. **Lazy frames** — `src:` + `loading: :lazy` defer content; the `src` response must
contain a matching `<turbo-frame id>` or the frame stays empty.
Patterns 3–6 aren't checker-able with low false positives — see the reference.
## Lint an app
```bash
scripts/lint_turbo_frames.sh path/to/rails-app
```
Flags (HIGH confidence, literal ids only): a **dangling frame target** — a link/form
targets a frame id with no `turbo_frame_tag` / `<turbo-frame id>` defined in any view
(navigation goes nowhere); a **literal frame id inside a collection partial** — duplicate
DOM ids (use `dom_id`). Reserved targets (`_top`/`_self`) and dynamic ids
(`dom_id(...)`, interpolation, `<%= %>`) are never flagged — when either side is dynamic
it can't be resolved statically, so it's skipped and reported as such. Heuristic regex
scan (needs `ruby`), not an ERB/HTML parser — names its ceiling. Verified: clean on
miela_app (6 real frames, all targets resolve, collection partials use `dom_id`), flags a
synthetic dangling-target + duplicate-id app.
Pliki w paczce (3)
- SKILL.md 3 KB
- references/turbo-frames-guide.md 6 KB
- scripts/lint_turbo_frames.sh 6 KB
Wersje
W bazie nie ma innych skilli o nazwie turbo-frames-patterns.
Migawka bazy z 28.10.2026 · wersja paczki f8900b5e6b69 (skrót SHA-256 całej paczki)
Zgłoś problem z tym skillem: szkodliwa treść, błędny opis albo prośba autora o usunięcie.
Podobne skille
- 100developing-with-turbo-frames
Pomaga pracować z Turbo Frames w Laravel dla nawigacji w zakresie ramki i leniwego ładowania: komponent x-turbo::frame, data-turbo-frame, atrybut src, data-turbo-action, wasFromTurboFrame() i morphing ramek. - 100turbo-morphing
Stosuje odświeżanie stron Turbo 8 z morfowaniem i transmisję odświeżeń, unikając pułapek, takich jak utrata stanu przeglądarki. - 100turbo-patterns
Tworzy Turbo Streams, Turbo Frames i wzorce morfowania do aktualizacji interfejsu w czasie rzeczywistym i renderowania częściowego. - 100turbo-streams-patterns
Buduje precyzyjne Turbo Streams: transmisje modeli przez Action Cable, własne akcje, autoryzację subskrybentów i obecność Kredis. - 100rails-hotwire
Podpowiada dobre praktyki Hotwire w Rails: Turbo Drive, Frames, Streams, morphing w Turbo 8 i kontrolery Stimulus, w tym obsługę błędów i progresywne ulepszanie. - 100hotwire-patterns
Wyjaśnia modele myślowe i wzorce decyzyjne Hotwire (Turbo, Stimulus, Hotwire Native) w aplikacjach Rails oraz pomaga debugować Turbo Frames, Streams, ActionCable, cache i kontrolery Stimulus.