77 lines
2.7 KiB
JavaScript
77 lines
2.7 KiB
JavaScript
import { ChatUtility } from "../chat-utility.js"
|
|
import { Misc } from "../misc.js"
|
|
import { RdDTimestamp } from "../time/rdd-timestamp.js"
|
|
|
|
const fields = foundry.applications.fields
|
|
|
|
export class DialogFlushByDate {
|
|
|
|
static async init() {
|
|
Hooks.once("renderChatLog", async () => await DialogFlushByDate.onFirstRenderChatLog())
|
|
}
|
|
|
|
static async onFirstRenderChatLog() {
|
|
if (game.user.isGM) {
|
|
const content = await foundry.applications.handlebars.renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat/button-flush-by-date.hbs')
|
|
const flushButton = document.querySelector("#chat-controls button[data-action='flush']")
|
|
flushButton.insertAdjacentHTML("afterend", content)
|
|
flushButton.parentElement.querySelector("button[name='flush-by-date']")?.addEventListener(
|
|
"click", e => {
|
|
if (game.messages.size > 0) {
|
|
DialogFlushByDate.create()
|
|
}
|
|
else {
|
|
ui.notifications.info("Aucun message à supprimer!")
|
|
}
|
|
e.preventDefault()
|
|
})
|
|
}
|
|
}
|
|
|
|
static async create() {
|
|
const dates = DialogFlushByDate.getChatMessageDates(game.messages)
|
|
|
|
const selectGroup = fields.createFormGroup({
|
|
input: fields.createSelectInput({
|
|
options: dates.map(it => { return { label: `${it.dateTerre} | ${it.dateReve}`, value: it.timestamp } }),
|
|
name: 'timestamp'
|
|
}),
|
|
label: 'Messages antérieurs au',
|
|
hint: 'Supprimer les messages antérieurs à la date'
|
|
})
|
|
|
|
const selected = await foundry.applications.api.DialogV2.input({
|
|
window: { title: "Supprimer les messages du tchat" },
|
|
content: selectGroup.outerHTML,
|
|
ok: {
|
|
label: "Supprimer",
|
|
icon: "fa-solid fa-trash-can",
|
|
}
|
|
})
|
|
if (selected) {
|
|
const timestamp = Number.parseInt(selected.timestamp)
|
|
const toDelete = game.messages.filter(it => it.timestamp < timestamp)
|
|
toDelete.forEach(it => it.delete())
|
|
}
|
|
}
|
|
|
|
static getChatMessageDates(messages) {
|
|
const datesTerre = Object.values(Misc.classifyFirst(messages,
|
|
m => ChatUtility.getISODate(m),
|
|
m => DialogFlushByDate.chatMessageDates(m)))
|
|
const timestamps = new Set(datesTerre.map(it => it.timestamp))
|
|
const datesReve = Object.values(Misc.classifyFirst(messages,
|
|
m => RdDTimestamp.fromChatMessage(m).isoDate(),
|
|
m => DialogFlushByDate.chatMessageDates(m)))
|
|
const dates = [...datesTerre, ...datesReve.filter(it => !timestamps.has(it.timestamp))]
|
|
return dates.sort(Misc.ascending(it => it.timestamp))
|
|
}
|
|
|
|
static chatMessageDates(it) {
|
|
return {
|
|
timestamp: it.timestamp,
|
|
dateTerre: new Date(it.timestamp).toLocaleDateString(),
|
|
dateReve: RdDTimestamp.fromChatMessage(it).formatDate()
|
|
}
|
|
}
|
|
} |