Files
Foundry-VTT-Docker/resources/app/client/apps/forms/playlist-sound-config.js
2025-01-04 00:34:03 +01:00

74 lines
2.3 KiB
JavaScript

/**
* The Application responsible for configuring a single PlaylistSound document within a parent Playlist.
* @extends {DocumentSheet}
*
* @param {PlaylistSound} sound The PlaylistSound document being configured
* @param {DocumentSheetOptions} [options] Additional application rendering options
*/
class PlaylistSoundConfig extends DocumentSheet {
/** @inheritdoc */
static get defaultOptions() {
return foundry.utils.mergeObject(super.defaultOptions, {
id: "track-config",
template: "templates/playlist/sound-config.html",
width: 360
});
}
/* -------------------------------------------- */
/** @inheritdoc */
get title() {
if ( !this.object.id ) return `${game.i18n.localize("PLAYLIST.SoundCreate")}: ${this.object.parent.name}`;
return `${game.i18n.localize("PLAYLIST.SoundEdit")}: ${this.object.name}`;
}
/* -------------------------------------------- */
/** @inheritdoc */
getData(options={}) {
const context = super.getData(options);
if ( !this.document.id ) context.data.name = "";
context.lvolume = foundry.audio.AudioHelper.volumeToInput(this.document.volume);
context.channels = CONST.AUDIO_CHANNELS;
return context;
}
/* -------------------------------------------- */
/* Event Listeners and Handlers
/* -------------------------------------------- */
/** @inheritdoc */
activateListeners(html) {
super.activateListeners(html);
html.find('input[name="path"]').change(this._onSourceChange.bind(this));
return html;
}
/* -------------------------------------------- */
/**
* Auto-populate the track name using the provided filename, if a name is not already set
* @param {Event} event
* @private
*/
_onSourceChange(event) {
event.preventDefault();
const field = event.target;
const form = field.form;
if ( !form.name.value ) {
form.name.value = foundry.audio.AudioHelper.getDefaultSoundName(field.value);
}
}
/* -------------------------------------------- */
/** @inheritdoc */
async _updateObject(event, formData) {
formData["volume"] = foundry.audio.AudioHelper.inputToVolume(formData["lvolume"]);
if (this.object.id) return this.object.update(formData);
return this.object.constructor.create(formData, {parent: this.object.parent});
}
}