class AutomatedEvocationsCustomBindings extends FormApplication {
|
|
constructor() {
|
|
super();
|
|
}
|
|
|
|
static get defaultOptions() {
|
|
return {
|
|
...super.defaultOptions,
|
|
title: game.i18n.localize("AE.custombindings.bindingstitle"),
|
|
id: "companionManager-custombindings",
|
|
template: `modules/automated-evocations/templates/custombindings.hbs`,
|
|
resizable: true,
|
|
width: 300,
|
|
height: window.innerHeight > 400 ? 400 : window.innerHeight - 100,
|
|
dragDrop: [{ dragSelector: null, dropSelector: null }],
|
|
};
|
|
}
|
|
|
|
getData() {
|
|
return {
|
|
customautospells: game.settings.get(AECONSTS.MN, "customautospells")
|
|
}
|
|
}
|
|
|
|
activateListeners(html) {
|
|
html.on("click", ".fa-trash", async (event) => {
|
|
const binding = event.currentTarget.closest("li").dataset.binding;
|
|
const customautospells = game.settings.get(AECONSTS.MN, "customautospells");
|
|
delete customautospells[binding];
|
|
await game.settings.set(AECONSTS.MN, "customautospells", customautospells);
|
|
this.render(true);
|
|
});
|
|
html.on("click", ".fa-edit", async (event) => {
|
|
const binding = event.currentTarget.closest("li").dataset.binding;
|
|
new AutomatedEvocationsCustomBindingsConfig(binding).render(true);
|
|
|
|
});
|
|
html.on("click", ".add-binding", async (event) => {
|
|
const binding = "New Binding";
|
|
const customautospells = game.settings.get(AECONSTS.MN, "customautospells");
|
|
customautospells[binding] = [];
|
|
await game.settings.set(AECONSTS.MN, "customautospells", customautospells);
|
|
this.render(true);
|
|
});
|
|
html.on("change submit", "input", async (event) => {
|
|
const binding = event.currentTarget.closest("li").dataset.binding;
|
|
const customautospells = game.settings.get(AECONSTS.MN, "customautospells");
|
|
customautospells[event.currentTarget.value] = customautospells[binding];
|
|
delete customautospells[binding];
|
|
await game.settings.set(AECONSTS.MN, "customautospells", customautospells);
|
|
this.render(true);
|
|
});
|
|
}
|
|
}
|
|
|
|
class AutomatedEvocationsCustomBindingsConfig extends FormApplication {
|
|
constructor(binding) {
|
|
super();
|
|
this._binding = binding;
|
|
}
|
|
|
|
static get defaultOptions() {
|
|
return {
|
|
...super.defaultOptions,
|
|
title: game.i18n.localize("AE.custombindings.bindingtitle"),
|
|
id: "companionManager-custombinding-config",
|
|
template: `modules/automated-evocations/templates/custombindingconfig.hbs`,
|
|
resizable: true,
|
|
width: 300,
|
|
height: window.innerHeight > 400 ? 400 : window.innerHeight - 100,
|
|
dragDrop: [{ dragSelector: null, dropSelector: null }],
|
|
};
|
|
}
|
|
|
|
getData() {
|
|
const animations = {};
|
|
for(let [key, value] of Object.entries(AECONSTS.animations)) {
|
|
animations[key] = {};
|
|
for(let a of value) {
|
|
const aKey = a.key;
|
|
animations[key][aKey] = a.name;
|
|
}
|
|
}
|
|
|
|
return {
|
|
binding: game.settings.get(AECONSTS.MN, "customautospells")[this._binding],
|
|
animations
|
|
}
|
|
}
|
|
|
|
activateListeners(html) {
|
|
html.on("click", ".fa-trash", async (event) => {
|
|
const binding = game.settings.get(AECONSTS.MN, "customautospells")[this._binding];
|
|
const index = event.currentTarget.closest("li").dataset.index;
|
|
binding.splice(index, 1);
|
|
const newBindings = game.settings.get(AECONSTS.MN, "customautospells");
|
|
newBindings[this._binding] = binding;
|
|
await game.settings.set(AECONSTS.MN, "customautospells",newBindings);
|
|
this.render(true);
|
|
});
|
|
html.on("click", ".add-binding", async (event) => {
|
|
const binding = game.settings.get(AECONSTS.MN, "customautospells")[this._binding];
|
|
binding.push({creature: "Creature Name" ,number: 1});
|
|
const newBindings = game.settings.get(AECONSTS.MN, "customautospells");
|
|
newBindings[this._binding] = binding;
|
|
await game.settings.set(AECONSTS.MN, "customautospells", newBindings);
|
|
this.render(true);
|
|
});
|
|
html.on("change submit", "input, select", async (event) => {
|
|
this.saveData(true);
|
|
});
|
|
}
|
|
|
|
async saveData(render = true) {
|
|
const newBinding = [];
|
|
for(let li of this.element.find("li")) {
|
|
if(li.className === "add-binding") continue;
|
|
const creature = li.querySelector("input[type=text]").value;
|
|
const animation = li.querySelector("select").value;
|
|
const number = parseInt(li.querySelector("input[type=number]").value);
|
|
newBinding.push({creature, number, animation});
|
|
}
|
|
const newBindings = game.settings.get(AECONSTS.MN, "customautospells");
|
|
newBindings[this._binding] = newBinding;
|
|
await game.settings.set(AECONSTS.MN, "customautospells", newBindings);
|
|
if(render) this.render(true);
|
|
}
|
|
|
|
async close() {
|
|
await this.saveData(false);
|
|
await super.close();
|
|
Object.values(ui.windows).forEach((window) => {
|
|
if (window instanceof AutomatedEvocationsCustomBindings) {
|
|
window.render(true);
|
|
}
|
|
});
|
|
}
|
|
}
|