Execute actions from web UI
This commit is contained in:
parent
680d8db6bb
commit
6ef51b7286
@ -13,6 +13,16 @@
|
|||||||
>↷</button>
|
>↷</button>
|
||||||
{{- if .Link }}<a class="item-link" href="{{ .Link }}" target="_blank">⇗</a>
|
{{- if .Link }}<a class="item-link" href="{{ .Link }}" target="_blank">⇗</a>
|
||||||
{{ end -}}
|
{{ 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 }}
|
{{ end }}
|
||||||
|
|
||||||
{{ define "item-title" -}}
|
{{ define "item-title" -}}
|
||||||
@ -34,9 +44,7 @@
|
|||||||
{{ template "item-buttons" . }}
|
{{ template "item-buttons" . }}
|
||||||
{{ template "item-title" . }}
|
{{ template "item-title" . }}
|
||||||
</summary>
|
</summary>
|
||||||
{{ if .Body }}
|
|
||||||
<p>{{ raw .Body }}</p>
|
<p>{{ raw .Body }}</p>
|
||||||
{{ end }}
|
|
||||||
</details>
|
</details>
|
||||||
{{ template "item-buttons" . }}
|
{{ template "item-buttons" . }}
|
||||||
{{- else -}}
|
{{- else -}}
|
||||||
|
50
web/item.go
50
web/item.go
@ -1,7 +1,9 @@
|
|||||||
package web
|
package web
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/json"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/Jaculabilis/intake/core"
|
"github.com/Jaculabilis/intake/core"
|
||||||
"github.com/Jaculabilis/intake/web/html"
|
"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})
|
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 /source/{source}", env.getSource)
|
||||||
handleFunc("GET /item/{source}/{id}", env.getItem)
|
handleFunc("GET /item/{source}/{id}", env.getItem)
|
||||||
handleFunc("DELETE /item/{source}/{id}", env.deleteItem)
|
handleFunc("DELETE /item/{source}/{id}", env.deleteItem)
|
||||||
|
handleFunc("POST /item/{source}/{id}/action/{action}", env.doAction)
|
||||||
|
|
||||||
log.Fatal(http.ListenAndServe(bind, nil))
|
log.Fatal(http.ListenAndServe(bind, nil))
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user