From 6d0b2ccdf6fd6d2aa3e737d193decd6dc6b57d2e Mon Sep 17 00:00:00 2001 From: Eduard Urbach Date: Thu, 12 Oct 2017 12:07:17 +0200 Subject: [PATCH] Added array operations --- mixins/Input.pixy | 6 +++--- pages/soundtrack/edit.go | 8 +++++++- scripts/Actions.ts | 25 +++++++++++++++++++------ 3 files changed, 29 insertions(+), 10 deletions(-) diff --git a/mixins/Input.pixy b/mixins/Input.pixy index 9a9d6ba2..10511072 100644 --- a/mixins/Input.pixy +++ b/mixins/Input.pixy @@ -22,11 +22,11 @@ component InputTags(id string, value []string, label string) .widget-section label(for=id)= label + ":" .tags(id=id) - each tag in value + for index, tag := range value .tag span.tag-title= tag - .tag-remove.action(data-action="removeTag", data-trigger="click", data-tag=tag) x + .tag-remove.action(data-action="arrayRemove", data-trigger="click", data-field=id, data-index=index) x - button.tag-add + button.tag-add.action(data-action="arrayAppend", data-trigger="click", data-field=id) RawIcon("plus") \ No newline at end of file diff --git a/pages/soundtrack/edit.go b/pages/soundtrack/edit.go index 50aa2b5d..4b1bcd24 100644 --- a/pages/soundtrack/edit.go +++ b/pages/soundtrack/edit.go @@ -5,6 +5,7 @@ import ( "fmt" "net/http" "reflect" + "strconv" "strings" "github.com/animenotifier/notify.moe/components" @@ -88,9 +89,14 @@ func RenderField(b *bytes.Buffer, v *reflect.Value, field reflect.StructField, i arrayObj := fieldValue.Index(sliceIndex).Interface() arrayIDPrefix := fmt.Sprintf("%s[%d].", field.Name, sliceIndex) RenderObject(b, arrayObj, arrayIDPrefix) + + // Remove button + b.WriteString(`
`) } - b.WriteString(`
`) + b.WriteString(`
`) default: panic("No edit form implementation for " + idPrefix + field.Name + " with type " + field.Type.String()) } diff --git a/scripts/Actions.ts b/scripts/Actions.ts index 01f413fa..8ee8c49b 100644 --- a/scripts/Actions.ts +++ b/scripts/Actions.ts @@ -365,13 +365,26 @@ export function buyItem(arn: AnimeNotifier, button: HTMLElement) { .then(() => arn.loading(false)) } -// Remove tag -export function removeTag(arn: AnimeNotifier, element: HTMLElement) { - let tag = element.dataset.tag - - // arn.loading(true) +// Append new element to array +export function arrayAppend(arn: AnimeNotifier, element: HTMLElement) { + let field = element.dataset.field + let object = element.dataset.object ? JSON.parse(element.dataset.object) : {} + let apiEndpoint = arn.findAPIEndpoint(element) - alert("Remove " + tag) + arn.post(apiEndpoint + "/field/" + field + "/append", object) + .then(() => arn.reloadContent()) + .catch(err => arn.statusMessage.showError(err)) +} + +// Remove element from array +export function arrayRemove(arn: AnimeNotifier, element: HTMLElement) { + let field = element.dataset.field + let index = element.dataset.index + let apiEndpoint = arn.findAPIEndpoint(element) + + arn.post(apiEndpoint + "/field/" + field + "/remove/" + index, "") + .then(() => arn.reloadContent()) + .catch(err => arn.statusMessage.showError(err)) } // Chrome extension installation