You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
148 lines
3.8 KiB
148 lines
3.8 KiB
const moment = require("moment")
|
|
|
|
module.exports = class {
|
|
onCreate() {
|
|
this.state = {
|
|
operation: "",
|
|
links: [],
|
|
parentLink: null,
|
|
}
|
|
}
|
|
|
|
onInput(input) {
|
|
if (input.data) {
|
|
this.refresh(input.data)
|
|
}
|
|
}
|
|
|
|
refresh(data) {
|
|
this.state.links = []
|
|
this.state.operation = opText[data.op]
|
|
this.state.parentLink = null
|
|
|
|
switch (data.model) {
|
|
case "Channel": {
|
|
const key = data.keys.find(k => k.id !== "*")
|
|
|
|
this.state.operation += " channel"
|
|
this.state.links = [{
|
|
text: key.id,
|
|
href: `/data/channels/`,
|
|
}]
|
|
|
|
break
|
|
}
|
|
|
|
case "Character": {
|
|
const character = data.objects.find(o => o.type === "Character")
|
|
|
|
this.state.operation += " character"
|
|
this.state.links = [{
|
|
text: `${character.name} (${character.id})`,
|
|
href: `/data/characters/`,
|
|
}]
|
|
|
|
break
|
|
}
|
|
|
|
case "Story": {
|
|
const key = data.keys.find(k => k.model === "Story" && k.id !== "*")
|
|
const story = data.objects.find(o => o.type === "Story")
|
|
|
|
this.state.operation += " story"
|
|
this.state.links = [{
|
|
text: story.name,
|
|
href: `/story/${key.id}`,
|
|
}]
|
|
|
|
break
|
|
}
|
|
|
|
case "Chapter": {
|
|
const storyKey = data.keys.find(k => k.model === "Story")
|
|
const chapterKey = data.keys.find(k => k.model === "Chapter")
|
|
const chapter = data.objects.find(o => o.type === "Chapter")
|
|
|
|
this.state.operation += " chapter"
|
|
this.state.links = [{
|
|
text: (chapter||{}).title || `Untitled chapter (${(chapterKey||chapter).id})`,
|
|
href: `/story/${storyKey.id}#${(chapterKey||chapter).id}`,
|
|
}]
|
|
|
|
break
|
|
}
|
|
|
|
case "Comment": {
|
|
const storyKey = data.keys.find(k => k.model === "Story") || {}
|
|
const chapterKey = data.keys.find(k => k.model === "Chapter")
|
|
const chapter = data.objects.find(o => o.type === "Chapter") || {}
|
|
const comment = data.objects.find(o => o.type === "Comment") || {}
|
|
|
|
this.state.operation += ' ' + comment.characterName + " comment in chapter"
|
|
this.state.links = [{
|
|
text: chapter.title || `ID (${chapterKey.id})`,
|
|
href: `/story/${storyKey.id}#${chapterKey.id}`,
|
|
}]
|
|
|
|
break
|
|
}
|
|
|
|
case "Log": {
|
|
const key = data.keys.find(k => k.id !== "*")
|
|
|
|
this.state.operation += " log"
|
|
this.state.links = [{
|
|
text: key.id,
|
|
href: `/logs/${key.id}`,
|
|
}]
|
|
|
|
break
|
|
}
|
|
|
|
case "File": {
|
|
const key = data.keys.find(k => k.id !== "*")
|
|
const fileObj = data.objects.find(o => o.type === "File") || {name: key.id}
|
|
|
|
this.state.operation += " file"
|
|
this.state.links = [{
|
|
text: fileObj.name,
|
|
href: `/data/files#${key.id}`,
|
|
}]
|
|
|
|
break
|
|
}
|
|
|
|
case "Post": {
|
|
const logKey = data.keys.find(k => k.model === "Log")
|
|
const postKeys = data.keys.filter(k => k.model === "Post")
|
|
const postObjs = data.objects.filter(o => o.type === "Post")
|
|
|
|
this.state.operation += (postKeys.length > 1) ? " posts" : " post"
|
|
this.state.links = postObjs.map(po => ({
|
|
text: `[${moment(po.time).format("HH:mm")}] ${po.nick}`,
|
|
href: `/logs/${logKey.id}#${po.id}`,
|
|
}))
|
|
this.state.parentLink = {
|
|
prefix: "in log",
|
|
text: `${logKey.id}`,
|
|
href: `/logs/${logKey.id}`,
|
|
}
|
|
|
|
break
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
const opText = {
|
|
add: "added",
|
|
remove: "removed",
|
|
upload: "uploaded",
|
|
move: "moved",
|
|
edit: "edited",
|
|
import: "imported",
|
|
tag: "tagged",
|
|
untag: "untagged",
|
|
"move-in": "moved in",
|
|
"move-out": "moved out",
|
|
}
|