Refactor actions
This commit is contained in:
80
scripts/Actions/Serialization.ts
Normal file
80
scripts/Actions/Serialization.ts
Normal file
@ -0,0 +1,80 @@
|
||||
import { AnimeNotifier } from "../AnimeNotifier"
|
||||
|
||||
// Save new data from an input field
|
||||
export function save(arn: AnimeNotifier, input: HTMLElement) {
|
||||
let obj = {}
|
||||
let isContentEditable = input.isContentEditable
|
||||
let value = isContentEditable ? input.innerText : (input as HTMLInputElement).value
|
||||
|
||||
if(value === undefined) {
|
||||
return
|
||||
}
|
||||
|
||||
if((input as HTMLInputElement).type === "number" || input.dataset.type === "number") {
|
||||
if(input.getAttribute("step") === "1" || input.dataset.step === "1") {
|
||||
obj[input.dataset.field] = parseInt(value)
|
||||
} else {
|
||||
obj[input.dataset.field] = parseFloat(value)
|
||||
}
|
||||
} else {
|
||||
obj[input.dataset.field] = value
|
||||
}
|
||||
|
||||
if(isContentEditable) {
|
||||
input.contentEditable = "false"
|
||||
} else {
|
||||
(input as HTMLInputElement).disabled = true
|
||||
}
|
||||
|
||||
let apiEndpoint = arn.findAPIEndpoint(input)
|
||||
|
||||
arn.post(apiEndpoint, obj)
|
||||
.catch(err => arn.statusMessage.showError(err))
|
||||
.then(() => {
|
||||
if(isContentEditable) {
|
||||
input.contentEditable = "true"
|
||||
} else {
|
||||
(input as HTMLInputElement).disabled = false
|
||||
}
|
||||
|
||||
return arn.reloadContent()
|
||||
})
|
||||
}
|
||||
|
||||
// Append new element to array
|
||||
export function arrayAppend(arn: AnimeNotifier, element: HTMLElement) {
|
||||
let field = element.dataset.field
|
||||
let object = element.dataset.object || ""
|
||||
let apiEndpoint = arn.findAPIEndpoint(element)
|
||||
|
||||
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) {
|
||||
if(!confirm("Are you sure you want to remove this element?")) {
|
||||
return
|
||||
}
|
||||
|
||||
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))
|
||||
}
|
||||
|
||||
// Increase episode
|
||||
export function increaseEpisode(arn: AnimeNotifier, element: HTMLElement) {
|
||||
if(arn.isLoading) {
|
||||
return
|
||||
}
|
||||
|
||||
let prev = element.previousSibling as HTMLElement
|
||||
let episodes = parseInt(prev.innerText)
|
||||
prev.innerText = String(episodes + 1)
|
||||
save(arn, prev)
|
||||
}
|
Reference in New Issue
Block a user