diff --git a/deleterow/handlers.go b/deleterow/handlers.go new file mode 100644 index 0000000..e69cdf0 --- /dev/null +++ b/deleterow/handlers.go @@ -0,0 +1,27 @@ +package deleterow + +import ( + "fmt" + "net/http" + "strings" +) + +type user struct { + name, email, id string +} + +func Handlers(prefix string, mux *http.ServeMux) { + mux.HandleFunc(prefix+"/", index) + mux.HandleFunc(prefix+"/contact/", deleteUser) +} + +func index(w http.ResponseWriter, r *http.Request) { + // Load users + Index().Render(r.Context(), w) +} + +func deleteUser(w http.ResponseWriter, r *http.Request) { + segments := strings.Split(r.URL.Path, "/") + userID := segments[len(segments)-1] + fmt.Println("Delete user: ", userID) +} diff --git a/deleterow/templates.templ b/deleterow/templates.templ new file mode 100644 index 0000000..759183d --- /dev/null +++ b/deleterow/templates.templ @@ -0,0 +1,54 @@ +package deleterow + +import "examples/shared" + +templ demo() { + <style> + tr.htmx-swapping td { + opacity: 0; + transition: opacity 1s ease-out; + } + </style> + <table class="table"><thead> + <tr> + <th>Name</th> + <th>Email</th> + <th>Status</th> + <th></th> + </tr> +</thead><tbody hx-confirm="Are you sure?" hx-target="closest tr" hx-swap="outerHTML swap:1s"> + <tr> + <td>Joe Smith</td> + <td>joe@smith.org</td> + <td>Active</td> + <td><button class="button is-red" hx-delete="/delete-row/contact/0">Delete</button></td> + </tr> + <tr> + <td>Angie MacDowell</td> + <td>angie@macdowell.org</td> + <td>Active</td> + <td><button class="button is-red" hx-delete="/delete-row/contact/1">Delete</button></td> + </tr> + <tr> + <td>Fuqua Tarkenton</td> + <td>fuqua@tarkenton.org</td> + <td>Active</td> + <td><button class="button is-red" hx-delete="/delete-row/contact/2">Delete</button></td> + </tr> + <tr> + <td>Kim Yee</td> + <td>kim@yee.org</td> + <td>Inactive</td> + <td><button class="button is-red" hx-delete="/delete-row/contact/3">Delete</button></td> + </tr> +</tbody></table> +} + +templ Index() { + @shared.Layout("Delete Row") { + <h2 class="title">Delete Row</h2> + <h2 class="title">Demo</h2> + @demo() + } +} + diff --git a/deleterow/templates_templ.go b/deleterow/templates_templ.go new file mode 100644 index 0000000..a5bf4d3 --- /dev/null +++ b/deleterow/templates_templ.go @@ -0,0 +1,633 @@ +// Code generated by templ@(devel) DO NOT EDIT. + +package deleterow + +//lint:file-ignore SA4006 This context is only used if a nested component is present. + +import "github.com/a-h/templ" +import "context" +import "io" +import "bytes" + +// GoExpression +import "examples/shared" + +func demo() templ.Component { + return templ.ComponentFunc(func(ctx context.Context, w io.Writer) (err error) { + templBuffer, templIsBuffer := w.(*bytes.Buffer) + if !templIsBuffer { + templBuffer = templ.GetBuffer() + defer templ.ReleaseBuffer(templBuffer) + } + ctx = templ.InitializeContext(ctx) + var_1 := templ.GetChildren(ctx) + if var_1 == nil { + var_1 = templ.NopComponent + } + ctx = templ.ClearChildren(ctx) +// RawElement + _, err = templBuffer.WriteString("<style>") + if err != nil { + return err + } +// Text +var_2 := ` + tr.htmx-swapping td { + opacity: 0; + transition: opacity 1s ease-out; + } + ` +_, err = templBuffer.WriteString(var_2) +if err != nil { + return err +} + _, err = templBuffer.WriteString("</style>") + if err != nil { + return err + } + // Element (standard) + _, err = templBuffer.WriteString("<table") + if err != nil { + return err + } + // Element Attributes + _, err = templBuffer.WriteString(" class=\"table\"") + if err != nil { + return err + } + _, err = templBuffer.WriteString(">") + if err != nil { + return err + } + // Element (standard) + _, err = templBuffer.WriteString("<thead>") + if err != nil { + return err + } + // Element (standard) + _, err = templBuffer.WriteString("<tr>") + if err != nil { + return err + } + // Element (standard) + _, err = templBuffer.WriteString("<th>") + if err != nil { + return err + } + // Text + var_3 := `Name` + _, err = templBuffer.WriteString(var_3) + if err != nil { + return err + } + _, err = templBuffer.WriteString("</th>") + if err != nil { + return err + } + // Element (standard) + _, err = templBuffer.WriteString("<th>") + if err != nil { + return err + } + // Text + var_4 := `Email` + _, err = templBuffer.WriteString(var_4) + if err != nil { + return err + } + _, err = templBuffer.WriteString("</th>") + if err != nil { + return err + } + // Element (standard) + _, err = templBuffer.WriteString("<th>") + if err != nil { + return err + } + // Text + var_5 := `Status` + _, err = templBuffer.WriteString(var_5) + if err != nil { + return err + } + _, err = templBuffer.WriteString("</th>") + if err != nil { + return err + } + // Element (standard) + _, err = templBuffer.WriteString("<th>") + if err != nil { + return err + } + _, err = templBuffer.WriteString("</th>") + if err != nil { + return err + } + _, err = templBuffer.WriteString("</tr>") + if err != nil { + return err + } + _, err = templBuffer.WriteString("</thead>") + if err != nil { + return err + } + // Element (standard) + _, err = templBuffer.WriteString("<tbody") + if err != nil { + return err + } + // Element Attributes + _, err = templBuffer.WriteString(" hx-confirm=\"Are you sure?\"") + if err != nil { + return err + } + _, err = templBuffer.WriteString(" hx-target=\"closest tr\"") + if err != nil { + return err + } + _, err = templBuffer.WriteString(" hx-swap=\"outerHTML swap:1s\"") + if err != nil { + return err + } + _, err = templBuffer.WriteString(">") + if err != nil { + return err + } + // Element (standard) + _, err = templBuffer.WriteString("<tr>") + if err != nil { + return err + } + // Element (standard) + _, err = templBuffer.WriteString("<td>") + if err != nil { + return err + } + // Text + var_6 := `Joe Smith` + _, err = templBuffer.WriteString(var_6) + if err != nil { + return err + } + _, err = templBuffer.WriteString("</td>") + if err != nil { + return err + } + // Element (standard) + _, err = templBuffer.WriteString("<td>") + if err != nil { + return err + } + // Text + var_7 := `joe@smith.org` + _, err = templBuffer.WriteString(var_7) + if err != nil { + return err + } + _, err = templBuffer.WriteString("</td>") + if err != nil { + return err + } + // Element (standard) + _, err = templBuffer.WriteString("<td>") + if err != nil { + return err + } + // Text + var_8 := `Active` + _, err = templBuffer.WriteString(var_8) + if err != nil { + return err + } + _, err = templBuffer.WriteString("</td>") + if err != nil { + return err + } + // Element (standard) + _, err = templBuffer.WriteString("<td>") + if err != nil { + return err + } + // Element (standard) + _, err = templBuffer.WriteString("<button") + if err != nil { + return err + } + // Element Attributes + _, err = templBuffer.WriteString(" class=\"button is-red\"") + if err != nil { + return err + } + _, err = templBuffer.WriteString(" hx-delete=\"/delete-row/contact/0\"") + if err != nil { + return err + } + _, err = templBuffer.WriteString(">") + if err != nil { + return err + } + // Text + var_9 := `Delete` + _, err = templBuffer.WriteString(var_9) + if err != nil { + return err + } + _, err = templBuffer.WriteString("</button>") + if err != nil { + return err + } + _, err = templBuffer.WriteString("</td>") + if err != nil { + return err + } + _, err = templBuffer.WriteString("</tr>") + if err != nil { + return err + } + // Element (standard) + _, err = templBuffer.WriteString("<tr>") + if err != nil { + return err + } + // Element (standard) + _, err = templBuffer.WriteString("<td>") + if err != nil { + return err + } + // Text + var_10 := `Angie MacDowell` + _, err = templBuffer.WriteString(var_10) + if err != nil { + return err + } + _, err = templBuffer.WriteString("</td>") + if err != nil { + return err + } + // Element (standard) + _, err = templBuffer.WriteString("<td>") + if err != nil { + return err + } + // Text + var_11 := `angie@macdowell.org` + _, err = templBuffer.WriteString(var_11) + if err != nil { + return err + } + _, err = templBuffer.WriteString("</td>") + if err != nil { + return err + } + // Element (standard) + _, err = templBuffer.WriteString("<td>") + if err != nil { + return err + } + // Text + var_12 := `Active` + _, err = templBuffer.WriteString(var_12) + if err != nil { + return err + } + _, err = templBuffer.WriteString("</td>") + if err != nil { + return err + } + // Element (standard) + _, err = templBuffer.WriteString("<td>") + if err != nil { + return err + } + // Element (standard) + _, err = templBuffer.WriteString("<button") + if err != nil { + return err + } + // Element Attributes + _, err = templBuffer.WriteString(" class=\"button is-red\"") + if err != nil { + return err + } + _, err = templBuffer.WriteString(" hx-delete=\"/delete-row/contact/1\"") + if err != nil { + return err + } + _, err = templBuffer.WriteString(">") + if err != nil { + return err + } + // Text + var_13 := `Delete` + _, err = templBuffer.WriteString(var_13) + if err != nil { + return err + } + _, err = templBuffer.WriteString("</button>") + if err != nil { + return err + } + _, err = templBuffer.WriteString("</td>") + if err != nil { + return err + } + _, err = templBuffer.WriteString("</tr>") + if err != nil { + return err + } + // Element (standard) + _, err = templBuffer.WriteString("<tr>") + if err != nil { + return err + } + // Element (standard) + _, err = templBuffer.WriteString("<td>") + if err != nil { + return err + } + // Text + var_14 := `Fuqua Tarkenton` + _, err = templBuffer.WriteString(var_14) + if err != nil { + return err + } + _, err = templBuffer.WriteString("</td>") + if err != nil { + return err + } + // Element (standard) + _, err = templBuffer.WriteString("<td>") + if err != nil { + return err + } + // Text + var_15 := `fuqua@tarkenton.org` + _, err = templBuffer.WriteString(var_15) + if err != nil { + return err + } + _, err = templBuffer.WriteString("</td>") + if err != nil { + return err + } + // Element (standard) + _, err = templBuffer.WriteString("<td>") + if err != nil { + return err + } + // Text + var_16 := `Active` + _, err = templBuffer.WriteString(var_16) + if err != nil { + return err + } + _, err = templBuffer.WriteString("</td>") + if err != nil { + return err + } + // Element (standard) + _, err = templBuffer.WriteString("<td>") + if err != nil { + return err + } + // Element (standard) + _, err = templBuffer.WriteString("<button") + if err != nil { + return err + } + // Element Attributes + _, err = templBuffer.WriteString(" class=\"button is-red\"") + if err != nil { + return err + } + _, err = templBuffer.WriteString(" hx-delete=\"/delete-row/contact/2\"") + if err != nil { + return err + } + _, err = templBuffer.WriteString(">") + if err != nil { + return err + } + // Text + var_17 := `Delete` + _, err = templBuffer.WriteString(var_17) + if err != nil { + return err + } + _, err = templBuffer.WriteString("</button>") + if err != nil { + return err + } + _, err = templBuffer.WriteString("</td>") + if err != nil { + return err + } + _, err = templBuffer.WriteString("</tr>") + if err != nil { + return err + } + // Element (standard) + _, err = templBuffer.WriteString("<tr>") + if err != nil { + return err + } + // Element (standard) + _, err = templBuffer.WriteString("<td>") + if err != nil { + return err + } + // Text + var_18 := `Kim Yee` + _, err = templBuffer.WriteString(var_18) + if err != nil { + return err + } + _, err = templBuffer.WriteString("</td>") + if err != nil { + return err + } + // Element (standard) + _, err = templBuffer.WriteString("<td>") + if err != nil { + return err + } + // Text + var_19 := `kim@yee.org` + _, err = templBuffer.WriteString(var_19) + if err != nil { + return err + } + _, err = templBuffer.WriteString("</td>") + if err != nil { + return err + } + // Element (standard) + _, err = templBuffer.WriteString("<td>") + if err != nil { + return err + } + // Text + var_20 := `Inactive` + _, err = templBuffer.WriteString(var_20) + if err != nil { + return err + } + _, err = templBuffer.WriteString("</td>") + if err != nil { + return err + } + // Element (standard) + _, err = templBuffer.WriteString("<td>") + if err != nil { + return err + } + // Element (standard) + _, err = templBuffer.WriteString("<button") + if err != nil { + return err + } + // Element Attributes + _, err = templBuffer.WriteString(" class=\"button is-red\"") + if err != nil { + return err + } + _, err = templBuffer.WriteString(" hx-delete=\"/delete-row/contact/3\"") + if err != nil { + return err + } + _, err = templBuffer.WriteString(">") + if err != nil { + return err + } + // Text + var_21 := `Delete` + _, err = templBuffer.WriteString(var_21) + if err != nil { + return err + } + _, err = templBuffer.WriteString("</button>") + if err != nil { + return err + } + _, err = templBuffer.WriteString("</td>") + if err != nil { + return err + } + _, err = templBuffer.WriteString("</tr>") + if err != nil { + return err + } + _, err = templBuffer.WriteString("</tbody>") + if err != nil { + return err + } + _, err = templBuffer.WriteString("</table>") + if err != nil { + return err + } + if !templIsBuffer { + _, err = io.Copy(w, templBuffer) + } + return err + }) +} + +func Index() templ.Component { + return templ.ComponentFunc(func(ctx context.Context, w io.Writer) (err error) { + templBuffer, templIsBuffer := w.(*bytes.Buffer) + if !templIsBuffer { + templBuffer = templ.GetBuffer() + defer templ.ReleaseBuffer(templBuffer) + } + ctx = templ.InitializeContext(ctx) + var_22 := templ.GetChildren(ctx) + if var_22 == nil { + var_22 = templ.NopComponent + } + ctx = templ.ClearChildren(ctx) + // TemplElement + var_23 := templ.ComponentFunc(func(ctx context.Context, w io.Writer) (err error) { + templBuffer, templIsBuffer := w.(*bytes.Buffer) + if !templIsBuffer { + templBuffer = templ.GetBuffer() + defer templ.ReleaseBuffer(templBuffer) + } + // Element (standard) + _, err = templBuffer.WriteString("<h2") + if err != nil { + return err + } + // Element Attributes + _, err = templBuffer.WriteString(" class=\"title\"") + if err != nil { + return err + } + _, err = templBuffer.WriteString(">") + if err != nil { + return err + } + // Text + var_24 := `Delete Row` + _, err = templBuffer.WriteString(var_24) + if err != nil { + return err + } + _, err = templBuffer.WriteString("</h2>") + if err != nil { + return err + } + // Whitespace (normalised) + _, err = templBuffer.WriteString(` `) + if err != nil { + return err + } + // Element (standard) + _, err = templBuffer.WriteString("<h2") + if err != nil { + return err + } + // Element Attributes + _, err = templBuffer.WriteString(" class=\"title\"") + if err != nil { + return err + } + _, err = templBuffer.WriteString(">") + if err != nil { + return err + } + // Text + var_25 := `Demo` + _, err = templBuffer.WriteString(var_25) + if err != nil { + return err + } + _, err = templBuffer.WriteString("</h2>") + if err != nil { + return err + } + // Whitespace (normalised) + _, err = templBuffer.WriteString(` `) + if err != nil { + return err + } + // TemplElement + err = demo().Render(ctx, templBuffer) + if err != nil { + return err + } + if !templIsBuffer { + _, err = io.Copy(w, templBuffer) + } + return err + }) + err = shared.Layout("Delete Row").Render(templ.WithChildren(ctx, var_23), templBuffer) + if err != nil { + return err + } + if !templIsBuffer { + _, err = io.Copy(w, templBuffer) + } + return err + }) +} + diff --git a/main.go b/main.go index c51da31..6825951 100644 --- a/main.go +++ b/main.go @@ -4,6 +4,7 @@ import ( "examples/bulkupdate" "examples/clicktoedit" "examples/clicktoload" + "examples/deleterow" "log" "net/http" @@ -51,4 +52,10 @@ var examples = []Example{ Slug: "click-to-load", Handlers: clicktoload.Handlers, }, + { + Name: "Delete Row", + Desc: "Demonstrates row deletion in a table", + Slug: "delete-row", + Handlers: deleterow.Handlers, + }, }