Execute actions from web UI
This commit is contained in:
parent
680d8db6bb
commit
6ef51b7286
@ -13,6 +13,16 @@
|
||||
>↷</button>
|
||||
{{- if .Link }}<a class="item-link" href="{{ .Link }}" target="_blank">⇗</a>
|
||||
{{ end -}}
|
||||
{{ range $key, $_ := .Action }}
|
||||
<button
|
||||
class="item-button"
|
||||
title="{{ $key }}"
|
||||
hx-target="closest article"
|
||||
hx-swap="outerHTML"
|
||||
hx-select="article"
|
||||
hx-post="/item/{{ $.Source }}/{{ $.Id }}/action/{{ $key }}"
|
||||
>{{ $key }}</button>
|
||||
{{ end -}}
|
||||
{{ end }}
|
||||
|
||||
{{ define "item-title" -}}
|
||||
@ -34,9 +44,7 @@
|
||||
{{ template "item-buttons" . }}
|
||||
{{ template "item-title" . }}
|
||||
</summary>
|
||||
{{ if .Body }}
|
||||
<p>{{ raw .Body }}</p>
|
||||
{{ end }}
|
||||
</details>
|
||||
{{ template "item-buttons" . }}
|
||||
{{- else -}}
|
||||
|
50
web/item.go
50
web/item.go
@ -1,7 +1,9 @@
|
||||
package web
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"net/http"
|
||||
"time"
|
||||
|
||||
"github.com/Jaculabilis/intake/core"
|
||||
"github.com/Jaculabilis/intake/web/html"
|
||||
@ -35,3 +37,51 @@ func (env *Env) deleteItem(writer http.ResponseWriter, req *http.Request) {
|
||||
}
|
||||
html.Item(writer, html.ItemData{Item: item})
|
||||
}
|
||||
|
||||
func (env *Env) doAction(writer http.ResponseWriter, req *http.Request) {
|
||||
source := req.PathValue("source")
|
||||
id := req.PathValue("id")
|
||||
action := req.PathValue("action")
|
||||
|
||||
item, err := core.GetItem(env.db, source, id)
|
||||
if err != nil {
|
||||
http.Error(writer, err.Error(), 500)
|
||||
return
|
||||
}
|
||||
|
||||
if item.Action[action] == nil {
|
||||
http.Error(writer, "no such action", 500)
|
||||
return
|
||||
}
|
||||
|
||||
argv, err := core.GetArgvForAction(env.db, source, action)
|
||||
if err != nil {
|
||||
http.Error(writer, err.Error(), 500)
|
||||
return
|
||||
}
|
||||
|
||||
itemJson, err := json.Marshal(item)
|
||||
if err != nil {
|
||||
http.Error(writer, err.Error(), 500)
|
||||
return
|
||||
}
|
||||
|
||||
res, err := core.Execute(source, argv, nil, string(itemJson), time.Minute)
|
||||
if err != nil {
|
||||
http.Error(writer, err.Error(), 500)
|
||||
return
|
||||
}
|
||||
if len(res) != 1 {
|
||||
http.Error(writer, "not exactly one item", 500)
|
||||
return
|
||||
}
|
||||
newItem := res[0]
|
||||
core.BackfillItem(&newItem, &item)
|
||||
|
||||
if err = core.UpdateItems(env.db, []core.Item{newItem}); err != nil {
|
||||
http.Error(writer, err.Error(), 500)
|
||||
return
|
||||
}
|
||||
|
||||
html.Item(writer, html.ItemData{Item: newItem})
|
||||
}
|
||||
|
@ -33,6 +33,7 @@ func RunServer(db *core.DB, addr string, port string) {
|
||||
handleFunc("GET /source/{source}", env.getSource)
|
||||
handleFunc("GET /item/{source}/{id}", env.getItem)
|
||||
handleFunc("DELETE /item/{source}/{id}", env.deleteItem)
|
||||
handleFunc("POST /item/{source}/{id}/action/{action}", env.doAction)
|
||||
|
||||
log.Fatal(http.ListenAndServe(bind, nil))
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user