Combat tracker: multiple named encounters
- Encounter entity; Combatant now belongs to an encounter (ON DELETE
CASCADE). Migration adds encounter_id, rehoming any existing combatants.
- /tracker lists encounters (name, count, last updated) with a "New
encounter" form; /tracker/{id} is the HP tracker for one encounter.
- Encounters can be renamed, have their combatants cleared, or be deleted.
- The Enemies list gains an encounter picker next to "Add to tracker"
(existing encounter or "— New encounter —", which prompts for a name);
an encounter's "Add enemies" link pre-selects it via ?encounter=.
- Routes for combatant HP/remove moved under /tracker/combatant/ to keep
the numeric {id} for encounters.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -25,11 +25,21 @@ export default class extends Controller {
|
||||
return;
|
||||
}
|
||||
|
||||
const select = this.element.querySelector('.encounter-select');
|
||||
let encounter = select ? select.value : 'new';
|
||||
let name = '';
|
||||
if (encounter === 'new') {
|
||||
name = window.prompt('Name for the new encounter', 'Encounter');
|
||||
if (name === null) return; // cancelled
|
||||
}
|
||||
|
||||
const form = document.createElement('form');
|
||||
form.method = 'post';
|
||||
form.action = this.urlValue;
|
||||
form.insertAdjacentHTML('beforeend',
|
||||
`<input type="hidden" name="_token" value="${this.tokenValue}">`);
|
||||
`<input type="hidden" name="_token" value="${this.tokenValue}">` +
|
||||
`<input type="hidden" name="encounter" value="${encounter}">` +
|
||||
`<input type="hidden" name="name" value="${name.replace(/"/g, '"')}">`);
|
||||
picks.forEach((p, i) => {
|
||||
form.insertAdjacentHTML('beforeend',
|
||||
`<input type="hidden" name="picks[${i}][id]" value="${p.id}">` +
|
||||
|
||||
Reference in New Issue
Block a user