Improved EditForm
This commit is contained in:
parent
e0dc3f2f93
commit
49b887a201
@ -515,7 +515,7 @@ export class AnimeNotifier {
|
|||||||
let extension = ""
|
let extension = ""
|
||||||
|
|
||||||
// Replace URL with WebP if supported
|
// Replace URL with WebP if supported
|
||||||
if(this.webpEnabled && element.dataset.webp) {
|
if(this.webpEnabled && element.dataset.webp === "true") {
|
||||||
let queryPos = dataSrc.lastIndexOf("?")
|
let queryPos = dataSrc.lastIndexOf("?")
|
||||||
|
|
||||||
if(queryPos !== -1) {
|
if(queryPos !== -1) {
|
||||||
|
@ -30,6 +30,18 @@
|
|||||||
vertical
|
vertical
|
||||||
width 100%
|
width 100%
|
||||||
|
|
||||||
|
.widget-section-with-preview
|
||||||
|
horizontal
|
||||||
|
|
||||||
|
.widget-section-preview
|
||||||
|
display flex
|
||||||
|
justify-content center
|
||||||
|
align-items center
|
||||||
|
margin-left 1rem
|
||||||
|
|
||||||
|
img
|
||||||
|
anime-mini-item-image
|
||||||
|
|
||||||
.widget-title
|
.widget-title
|
||||||
horizontal
|
horizontal
|
||||||
align-items center
|
align-items center
|
||||||
|
@ -16,7 +16,7 @@ import (
|
|||||||
func Render(obj interface{}, title string, user *arn.User) string {
|
func Render(obj interface{}, title string, user *arn.User) string {
|
||||||
t := reflect.TypeOf(obj).Elem()
|
t := reflect.TypeOf(obj).Elem()
|
||||||
v := reflect.ValueOf(obj).Elem()
|
v := reflect.ValueOf(obj).Elem()
|
||||||
id := reflect.Indirect(v.FieldByName("ID"))
|
id := findMainID(t, v)
|
||||||
lowerCaseTypeName := strings.ToLower(t.Name())
|
lowerCaseTypeName := strings.ToLower(t.Name())
|
||||||
endpoint := `/api/` + lowerCaseTypeName + `/` + id.String()
|
endpoint := `/api/` + lowerCaseTypeName + `/` + id.String()
|
||||||
|
|
||||||
@ -89,6 +89,26 @@ func RenderField(b *bytes.Buffer, v *reflect.Value, field reflect.StructField, i
|
|||||||
|
|
||||||
// String
|
// String
|
||||||
if fieldType == "string" {
|
if fieldType == "string" {
|
||||||
|
idType := field.Tag.Get("idType")
|
||||||
|
|
||||||
|
// Try to infer the ID type by the field name
|
||||||
|
if idType == "" {
|
||||||
|
switch field.Name {
|
||||||
|
case "AnimeID":
|
||||||
|
idType = "Anime"
|
||||||
|
|
||||||
|
case "CharacterID":
|
||||||
|
idType = "Character"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
showPreview := idType != "" && fieldValue.String() != ""
|
||||||
|
|
||||||
|
if showPreview {
|
||||||
|
b.WriteString("<div class='widget-section-with-preview'>")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Input field
|
||||||
if field.Tag.Get("datalist") != "" {
|
if field.Tag.Get("datalist") != "" {
|
||||||
dataList := field.Tag.Get("datalist")
|
dataList := field.Tag.Get("datalist")
|
||||||
values := arn.DataLists[dataList]
|
values := arn.DataLists[dataList]
|
||||||
@ -99,6 +119,40 @@ func RenderField(b *bytes.Buffer, v *reflect.Value, field reflect.StructField, i
|
|||||||
b.WriteString(components.InputText(idPrefix+field.Name, fieldValue.String(), field.Name, field.Tag.Get("tooltip")))
|
b.WriteString(components.InputText(idPrefix+field.Name, fieldValue.String(), field.Name, field.Tag.Get("tooltip")))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if showPreview {
|
||||||
|
b.WriteString("<div class='widget-section-preview'>")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Preview
|
||||||
|
switch idType {
|
||||||
|
case "Anime":
|
||||||
|
animeID := fieldValue.String()
|
||||||
|
anime, err := arn.GetAnime(animeID)
|
||||||
|
|
||||||
|
if err == nil {
|
||||||
|
b.WriteString(components.EditFormImagePreview(anime.Link(), anime.Image("small"), true))
|
||||||
|
}
|
||||||
|
|
||||||
|
case "Character":
|
||||||
|
characterID := fieldValue.String()
|
||||||
|
character, err := arn.GetCharacter(characterID)
|
||||||
|
|
||||||
|
if err == nil {
|
||||||
|
b.WriteString(components.EditFormImagePreview(character.Link(), character.Image, false))
|
||||||
|
}
|
||||||
|
|
||||||
|
case "":
|
||||||
|
break
|
||||||
|
|
||||||
|
default:
|
||||||
|
fmt.Println("Error: Unknown idType tag: " + idType)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Close preview tags
|
||||||
|
if showPreview {
|
||||||
|
b.WriteString("</div></div>")
|
||||||
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -186,3 +240,22 @@ func RenderField(b *bytes.Buffer, v *reflect.Value, field reflect.StructField, i
|
|||||||
|
|
||||||
b.WriteString(`</div>`)
|
b.WriteString(`</div>`)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// findMainID finds the main ID of the object.
|
||||||
|
func findMainID(t reflect.Type, v reflect.Value) reflect.Value {
|
||||||
|
idField := v.FieldByName("ID")
|
||||||
|
|
||||||
|
if idField.IsValid() {
|
||||||
|
return reflect.Indirect(idField)
|
||||||
|
}
|
||||||
|
|
||||||
|
for i := 0; i < t.NumField(); i++ {
|
||||||
|
field := t.Field(i)
|
||||||
|
|
||||||
|
if field.Tag.Get("mainID") == "true" {
|
||||||
|
return reflect.Indirect(v.Field(i))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
panic("Type " + t.Name() + " doesn't have a main ID!")
|
||||||
|
}
|
||||||
|
3
utils/editform/editform.pixy
Normal file
3
utils/editform/editform.pixy
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
component EditFormImagePreview(link string, imageURL string, webp bool)
|
||||||
|
a(href=link, target="_blank")
|
||||||
|
img.lazy(data-src=imageURL, alt="Preview", data-webp=webp)
|
Loading…
Reference in New Issue
Block a user