diff --git a/scripts/AnimeNotifier.ts b/scripts/AnimeNotifier.ts index 63dd6e1f..574944af 100644 --- a/scripts/AnimeNotifier.ts +++ b/scripts/AnimeNotifier.ts @@ -515,7 +515,7 @@ export class AnimeNotifier { let extension = "" // Replace URL with WebP if supported - if(this.webpEnabled && element.dataset.webp) { + if(this.webpEnabled && element.dataset.webp === "true") { let queryPos = dataSrc.lastIndexOf("?") if(queryPos !== -1) { diff --git a/styles/widgets.scarlet b/styles/widgets.scarlet index 4a6cd56b..9d0ed164 100644 --- a/styles/widgets.scarlet +++ b/styles/widgets.scarlet @@ -30,6 +30,18 @@ vertical 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 horizontal align-items center diff --git a/utils/editform/editform.go b/utils/editform/editform.go index 52516d4c..d161dbab 100644 --- a/utils/editform/editform.go +++ b/utils/editform/editform.go @@ -16,7 +16,7 @@ import ( func Render(obj interface{}, title string, user *arn.User) string { t := reflect.TypeOf(obj).Elem() v := reflect.ValueOf(obj).Elem() - id := reflect.Indirect(v.FieldByName("ID")) + id := findMainID(t, v) lowerCaseTypeName := strings.ToLower(t.Name()) endpoint := `/api/` + lowerCaseTypeName + `/` + id.String() @@ -89,6 +89,26 @@ func RenderField(b *bytes.Buffer, v *reflect.Value, field reflect.StructField, i // 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("
") + } + return } @@ -186,3 +240,22 @@ func RenderField(b *bytes.Buffer, v *reflect.Value, field reflect.StructField, i b.WriteString(``) } + +// 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!") +} diff --git a/utils/editform/editform.pixy b/utils/editform/editform.pixy new file mode 100644 index 00000000..ff4d8e93 --- /dev/null +++ b/utils/editform/editform.pixy @@ -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) \ No newline at end of file