···11-package inertia
22-33-import (
44- "context"
55- "net/http"
66- "slices"
77-)
88-99-type Props map[string]Prop
1010-1111-type Prop struct {
1212- Value func() (any, error)
1313- Lazy bool
1414- Optional bool
1515- Always bool
1616- Deferred bool
1717- DeferredKey string
1818- Default bool
1919- isError bool
2020-}
2121-2222-func (p *Prop) ShouldDefer(r *http.Request) bool {
2323- return true
2424-}
2525-2626-func (p *Prop) IsReturned(r *http.Request, key string, only []string, except []string) bool {
2727- isFirstLoad := !isPartialRequest(r)
2828-2929- if isFirstLoad && p.Deferred {
3030- return false
3131- }
3232-3333- if slices.Contains(except, key) {
3434- return false
3535- }
3636-3737- if slices.Contains(only, key) {
3838- return true
3939- }
4040-4141- if p.Always || p.Default {
4242- return true
4343- }
4444-4545- if isFirstLoad && p.Lazy {
4646- return true
4747- }
4848-4949- return false
5050-}
5151-5252-const PropsCtxKey = "INERTIA_KEY"
5353-5454-type PropOption func(*Prop)
5555-5656-// The value is always evaluated during a request, but can be left out of the response when
5757-// the request is a partial request. In other Inertia adapters this would be the same as just
5858-// passing the value.
5959-func Default(value any, opts ...PropOption) Prop {
6060- return Prop{Value: func() (any, error) { return value, nil }, Default: true}
6161-}
6262-6363-// The value is evaluated and returned for the first request to a page. For all partial request
6464-// to that same page, the value is not evaluated and returned unless the property is specified
6565-// in the `X-Inertia-Partial-Data` header. In other Inertia adapters this would be the same as
6666-// passing a closure.
6767-func Lazy(valuefn func() (any, error), opts ...PropOption) Prop {
6868- return Prop{Value: valuefn, Lazy: true}
6969-}
7070-7171-// The value is only evaluated during a request when the request is a partial request. The value
7272-// is never returned during the first request from a page.
7373-func Optional(valuefn func() (any, error), opts ...PropOption) Prop {
7474- return Prop{Value: valuefn, Optional: true}
7575-}
7676-7777-// The value is always returned during a partial request, and the first request from a page.
7878-func Always(value any) Prop {
7979- return Prop{Value: func() (any, error) { return value, nil }, Always: true}
8080-}
8181-8282-func WithDeferredKey(key string) PropOption {
8383- return func(p *Prop) {
8484- p.DeferredKey = key
8585- }
8686-}
8787-8888-// Besides setting the props in the handler when rendering the page, you can also set props in the
8989-// middleware. This is useful when you want to set props that are available to all pages. One can
9090-// use the SetProp function to set props. The value will be stored in the request context and will
9191-// be retrieved when rendering the page.
9292-func SetProp(r *http.Request, key string, value Prop) {
9393- props, ok := r.Context().Value(PropsCtxKey).(Props)
9494-9595- if !ok {
9696- props = make(Props)
9797- }
9898-9999- props[key] = value
100100-101101- ctx := context.WithValue(r.Context(), PropsCtxKey, props)
102102-103103- *r = *r.WithContext(ctx)
104104-}
···11+{{ define "title" }}About{{ end }}
22+33+{{ define "content"}}
44+<h1>About</h1>
55+66+<a href="/" hx-boost="true">Link</a>
77+{{ end }}
+15
resources/views/index.html
···11+{{ define "title" }} Hi {{ end }}
22+33+{{ define "content" }}
44+<h1>Hello World</h1>
55+<p>This is a test</p>
66+77+<a class="button variant-default shape-square scheme-default" href="/about" hx-boost="true">Link</a>
88+99+1010+<button type="button">Button</button>
1111+1212+<p>
1313+ Lorem ipsum, dolor sit amet consectetur adipisicing elit. Tenetur temporibus laborum iste aut veniam vitae ipsum quas dolore quasi enim tempora odit soluta qui assumenda, quae possimus, magni ad, sequi alias exercitationem suscipit aperiam. Eveniet omnis molestias, at eligendi illum similique excepturi facilis quidem mollitia doloribus rerum eius hic ea nulla natus, exercitationem laudantium fugiat corrupti quas rem minus! Vero accusantium quam maiores quae odit ratione fugit beatae nisi tempore distinctio labore soluta voluptatum iure ipsum aperiam blanditiis laborum quaerat, assumenda debitis expedita modi. Veniam voluptatum error labore nulla autem assumenda consequuntur asperiores illum exercitationem, quam quod obcaecati ratione facere quas? Quo cum corporis vel ipsa tempore maxime minus sapiente blanditiis dolore laborum modi architecto, consequatur voluptate sequi! Sunt consectetur, ipsam esse quae quia totam quod labore iste et vitae veniam nihil, reiciendis perferendis enim, facilis debitis officiis ipsa corrupti qui nesciunt sed placeat ad sequi. Vitae temporibus necessitatibus omnis amet, consequuntur iusto nulla asperiores delectus commodi, doloremque expedita ipsa nostrum doloribus tempore a modi distinctio aliquid eius placeat ipsam. Temporibus libero iusto possimus soluta inventore sit veniam voluptate hic, eum voluptas saepe quos aliquid dolores qui tenetur id provident assumenda. Iusto amet maxime vero fuga. Temporibus saepe praesentium sapiente facere adipisci. Quis excepturi minima obcaecati optio ad illum molestiae quas, explicabo exercitationem dolorem voluptatibus omnis. Hic, assumenda a, sit ratione tempora dolorum natus voluptate consequatur ipsa expedita cum in fugiat laudantium aut facilis est corrupti ipsum! Deleniti, nulla. Odit corporis atque aliquid ea, obcaecati sunt veniam, eius exercitationem iusto necessitatibus ratione? Molestias repudiandae debitis quae maiores vitae sapiente dolor sequi fugiat facere cupiditate, ut sit tenetur, hic eius, harum atque a eaque rem similique praesentium? Obcaecati ullam repudiandae porro quos quas nemo provident eum excepturi laboriosam fuga minima dolorem molestiae, ex deserunt ea quod tempora impedit reprehenderit eius. Eaque consequatur obcaecati blanditiis eius, hic aspernatur est voluptatem deserunt, eum qui optio aliquam laboriosam fugit nemo itaque minima? Ex saepe dignissimos ullam deserunt veritatis, officiis facere enim exercitationem. Harum eius necessitatibus ducimus aut eveniet facere quibusdam repellendus. Earum itaque sed aperiam placeat repellendus ex nam laboriosam saepe magni distinctio quia eveniet rem laborum dolorem quis explicabo, iste beatae excepturi nulla. Voluptatem quasi voluptatibus eligendi magni ducimus reiciendis blanditiis architecto. Iusto, dolorem placeat voluptatem reprehenderit quia, perferendis officia similique possimus obcaecati quod nisi ipsa. Iste rerum nulla atque dolor possimus facere minima adipisci ratione aut quae at nobis fuga, vitae eligendi quia dicta architecto sint vel omnis, totam ea numquam fugit laboriosam ducimus. Quisquam iure beatae autem, ipsum error in nulla necessitatibus alias totam voluptates vero quod, rerum dolore molestiae sint odio velit, recusandae similique aliquid impedit! Quo tenetur asperiores fuga corporis explicabo consequuntur obcaecati ipsum maxime dignissimos quasi voluptate temporibus repudiandae tempora dolore odit impedit, ad ex aliquam. Minima, iure incidunt necessitatibus aliquam officiis, veniam, assumenda porro itaque sed enim possimus quas aliquid! Temporibus molestias at mollitia blanditiis ea. Consectetur mollitia minus atque in officia adipisci! Dignissimos, exercitationem. Dolore vel vero quo eos eligendi at minus illum voluptas sint ducimus!
1414+</p>
1515+{{ end }}