Refactor the handlebars helpers to namespace using dd instead of dotdungeon because it's so long

This commit is contained in:
Oliver-Akins 2023-12-30 22:15:23 -07:00
parent d4531f089a
commit 38952c61b4
11 changed files with 52 additions and 39 deletions

View file

@ -5,10 +5,11 @@ import { objectValue } from "./objectValue.mjs";
import { toFriendlyDuration } from "./toFriendlyDuration.mjs";
export default {
"dotdungeon-schemaOptions": schemaOptions,
"dotdungeon-array": createArray,
"dotdungeon-toFriendlyDuration": toFriendlyDuration,
"dotdungeon-objectValue": objectValue,
"dotdungeon-stringify": v => JSON.stringify(v, null, ` `),
"dotdungeon-expanded": detailsExpanded,
"dd-schemaOptions": schemaOptions,
"dd-array": createArray,
"dd-toFriendlyDuration": toFriendlyDuration,
"dd-objectValue": objectValue,
"dd-expanded": detailsExpanded,
"dd-stringify": v => JSON.stringify(v, null, ` `),
"dd-negate": v => !v,
};

View file

@ -21,25 +21,42 @@ export class GenericActorSheet extends ActorSheet {
ctx.meta = {
expanded: this._expanded,
idp: this.actor.uuid,
};
return ctx;
};
activateListeners(html) {
super.activateListeners(html);
if (this.document.isEmbedded) return;
if (!this.isEditable) return;
console.debug(`.dungeon | Generic sheet adding listeners`);
html.find(`.roll`).on(`click`, this._handleRoll);
html.find(`summary`).on(`click`, this._handleSummaryToggle);
html.find(`summary`).on(`click`, this._handleSummaryToggle.bind(this));
html.find(`.roll`).on(`click`, this._handleRoll.bind(this));
};
async _handleRoll($e) {
let data = $e.target.dataset;
if (!data.roll) return;
console.debug(`.dungeon | Attempting to roll with formula "${data.roll}"`);
game.i18n
let roll = new Roll(data.roll);
await roll.evaluate();
await roll.toMessage({
speaker: ChatMessage.getSpeaker({ actor: this.actor }),
});
};
_handleSummaryToggle($e) {
let data = $e.target.dataset;
let open = $e.target.parentNode.open;
console.debug(`.dungeon | Collapse ID: ${data.collapseId} (open: ${open})`);
/*
This seeming inversion of logic is due to the fact that this handler
gets called before the element is updated to include/reflect the
@ -51,12 +68,5 @@ export class GenericActorSheet extends ActorSheet {
} else {
this._expanded.delete(data.collapseId);
};
}
_handleRoll($e) {
let data = $e.target.dataset;
if (!data.roll) return;
console.debug(`.dungeon | Attempting to roll ${data.roll}`);
};
}
};

View file

@ -22,9 +22,6 @@ export class PlayerSheet extends GenericActorSheet {
/*
Toggles the expanded state for the detail elements in the sheet.
*/
html.find(`summary`).on(`click`, ($e) => {
});
};
#syncValue() {
@ -47,12 +44,12 @@ export class PlayerSheet extends GenericActorSheet {
canChangeGroup: ctx.settings.playersCanChangeGroup || ctx.isGM,
};
ctx.meta.idp = this.actor.uuid;
console.groupCollapsed(`PlayerSheet.getData`);
console.log(`ctx`, ctx);
console.log(`actor`, actor);
console.groupEnd();
return ctx;
};
};

View file

@ -1,6 +1,6 @@
import { GenericSheet } from "../GenericSheet.mjs";
import { GenericActorSheet } from "../GenericActorSheet.mjs";
export class AbstractSyncSheet extends GenericSheet {
export class AbstractSyncSheet extends GenericActorSheet {
static get defaultOptions() {
let opts = mergeObject(
super.defaultOptions,

View file

@ -19,7 +19,7 @@
{{localize "dotdungeon.actor.pc.aspect.duration"}}
{{#if system.aspect.deactivateAfter}}
<span class="friendly-duration aspect__duration--friendly">
({{dotdungeon-toFriendlyDuration system.aspect.deactivateAfter}})
({{dd-toFriendlyDuration system.aspect.deactivateAfter}})
</span>
{{/if}}
<input

View file

@ -1,5 +1,5 @@
{{#> dotdungeon.panel class="weapons" title="dotdungeon.actor.pc.panel.weapons"}}
<details class="mainHand" {{dotdungeon-expanded meta.expanded "weapons.mainHand"}}>
<details class="mainHand" {{dd-expanded meta.expanded "weapons.mainHand"}}>
<summary data-collapse-id="weapons.mainHand">
{{localize "dotdungeon.actor.pc.weapon.mainHand"}}
</summary>
@ -24,7 +24,7 @@
<select name="system.weapon.mainHand.damage">
{{#select system.weapon.mainHand.damage}}
<option value="">Select...</option>
{{#each (dotdungeon-array "slashing" "piercing" "smashing" "gun" "neon" "shadow" "solar")}}
{{#each (dd-array "slashing" "piercing" "smashing" "gun" "neon" "shadow" "solar")}}
<option value="{{this}}">
{{localize (concat "dotdungeon.actor.pc.weapon.damage-type." this)}}
</option>
@ -69,7 +69,7 @@
{{/if}}
</div>
</details>
<details {{dotdungeon-expanded meta.expanded "weapons.offHand"}}>
<details {{dd-expanded meta.expanded "weapons.offHand"}}>
<summary data-collapse-id="weapons.offHand">
{{localize "dotdungeon.actor.pc.weapon.offHand"}}
</summary>
@ -93,7 +93,7 @@
<select name="system.weapon.offHand.damage">
{{#select system.weapon.offHand.damage}}
<option value="">Select...</option>
{{#each (dotdungeon-array "slashing" "piercing" "smashing" "gun" "neon" "shadow" "solar")}}
{{#each (dd-array "slashing" "piercing" "smashing" "gun" "neon" "shadow" "solar")}}
<option value="{{this}}">
{{localize (concat "dotdungeon.actor.pc.weapon.damage-type." this)}}
</option>

View file

@ -1,7 +1,7 @@
<select name="{{fieldToUpdate}}">
{{#select selected}}
<option value="">---</option>
{{#each (dotdungeon-array "d4" "d6" "d8" "d10" "d12" "d20")}}
{{#each (dd-array "d4" "d6" "d8" "d10" "d12" "d20")}}
<option value="{{this}}">{{this}}</option>
{{/each}}
{{/select}}

View file

@ -5,7 +5,7 @@
aria-label="{{localize "dotdungeon.aria.actor.pc.skill.button.roll" skill=name}}"
>
{{localize (concat "dotdungeon.actor.pc.skill." name)}}
{{#with (dotdungeon-objectValue system (concat "stats." stat)) as | die |}}
{{#with (dd-objectValue system (concat "stats." stat)) as | die |}}
{{#if die}}
({{die}})
{{/if}}
@ -16,7 +16,7 @@
class="skill__select"
aria-label="{{localize "dotdungeon.aria.actor.pc.skill.dropdown" skill=name}}"
>
{{#select (dotdungeon-objectValue system (concat "skills." stat "." name))}}
{{#select (dd-objectValue system (concat "skills." stat "." name))}}
<option value="">Novice (+0)</option>
<option value="+2">Trained (+2)</option>
<option value="+4">Expert (+4)</option>
@ -29,7 +29,7 @@
This would be nice to get working at some point, but it's not something
that is MVP
<img src="icons/dice/{{dotdungeon-objectValue system (concat "system.skills." stat "." name)}}black.svg">
<img src="icons/dice/{{dd-objectValue system (concat "system.skills." stat "." name)}}black.svg">
--}}
Roll
</button>

View file

@ -1,5 +1,10 @@
<label class="stat stat--{{name}}">
<button class="roll-stat" data-stat="{{name}}">
<button
class="roll"
data-stat="{{name}}"
data-roll-formula="1{{value}}"
{{disabled (dd-negate (dd-objectValue system (concat "stats." name)))}}
>
{{localize (concat "dotdungeon.actor.pc.stat." name)}}
</button>
{{> dotdungeon.dice_choice fieldToUpdate=(concat "system.stats." name) selected=value }}

View file

@ -4,7 +4,7 @@
{{#> dotdungeon.panel class="stats" title="dotdungeon.actor.pc.panel.statistics"}}
{{#each system.stats }}
{{> dotdungeon.stat name=@key value=this}}
{{> dotdungeon.stat system=../system name=@key value=this}}
{{/each}}
{{/ dotdungeon.panel}}
@ -43,21 +43,21 @@
<div class="debug-data" style="grid-column: 1 / span 3">
<div>
Settings:
<pre><code>{{dotdungeon-stringify settings}}</code></pre>
<pre><code>{{dd-stringify settings}}</code></pre>
</div>
<div>
Meta:
<pre><code>{{dotdungeon-stringify meta}}</code></pre>
<pre><code>{{dd-stringify meta}}</code></pre>
</div>
<hr>
<div>
System:
<pre><code>{{dotdungeon-stringify system}}</code></pre>
<pre><code>{{dd-stringify system}}</code></pre>
</div>
<hr>
<div>
Actor:
<pre><code>{{dotdungeon-stringify actor}}</code></pre>
<pre><code>{{dd-stringify actor}}</code></pre>
</div>
</div>
{{/if}}

View file

@ -15,7 +15,7 @@
name="system.deactivateAfter"
value="{{system.deactivateAfter}}"
>
{{dotdungeon-toFriendlyDuration system.deactivateAfter}}
{{dd-toFriendlyDuration system.deactivateAfter}}
</label>
<label>
{{localize "dotdungeon.item.aspect.description"}}: