Merge branch 'master' into correctly-pass-rollMode-parameter

This commit is contained in:
Johannes Loher 2021-01-26 21:14:40 +01:00
commit 972c3a7701
28 changed files with 450 additions and 431 deletions

View file

@ -3,9 +3,8 @@
An implementation of the Dungeonslayers 4 game system for [Foundry Virtual An implementation of the Dungeonslayers 4 game system for [Foundry Virtual
Tabletop](http://foundryvtt.com). Tabletop](http://foundryvtt.com).
This system provides character sheet support for Actors and Items and mechanical This system provides sheet support for Actors and Items and mechanical support
support for dice and rules necessary to for dice and rules necessary to play games of Dungeonslayers 4.
play games of Dungeponslayers 4.
## Installation ## Installation
@ -17,7 +16,7 @@ https://git.f3l.de/dungeonslayers/ds4/-/raw/latest/src/system.json?inline=false
## Development ## Development
### Prerequisits ### Prerequisites
In order to build this system, recent versions of `node` and `npm` are required. In order to build this system, recent versions of `node` and `npm` are required.
We recommend using the latest lts version of `node`, which is `v14.15.4` at the We recommend using the latest lts version of `node`, which is `v14.15.4` at the
@ -83,16 +82,18 @@ npm test
## Contributing ## Contributing
Code and content contributions are accepted. Please feel free to submit issues Code and content contributions are accepted. Please feel free to submit issues
to the issue tracker or submit merge requests for code changes. To create an issue send a mail to [git+dungeonslayers-ds4-155-issue-@git.f3l.de](mailto:git+dungeonslayers-ds4-155-issue-@git.f3l.de). to the issue tracker or submit merge requests for code changes. To create an
issue, send a mail to [git+dungeonslayers-ds4-155-issue-@git.f3l.de](mailto:git+dungeonslayers-ds4-155-issue-@git.f3l.de).
## Licensing ## Licensing
[Dungeonslayers](http://dungeonslayers.de/) (© Christian Kennig) is licensed under [CC BY-NC-SA 3.0](https://creativecommons.org/licenses/by-nc-sa/3.0/de/deed.en). [Dungeonslayers](http://dungeonslayers.de/) (© Christian Kennig) is licensed
under [CC BY-NC-SA 3.0](https://creativecommons.org/licenses/by-nc-sa/3.0/de/deed.en).
The icons in [src/assets/icons/official](src/assets/icons/official) are slightly modifed The icons in [src/assets/icons/official](src/assets/icons/official) are slightly
versions of original Dungeonslayers icons, which have also been published under modified versions of original Dungeonslayers icons, which have also been
CC BY-NC-SA 3.0. Hence the modified icons are also published under this published under CC BY-NC-SA 3.0. Hence the modified icons are also published
license. A copy of this license can be found under under this license. A copy of this license can be found under
[src/assets/icons/official/LICENSE](src/assets/icons/official/LICENSE). [src/assets/icons/official/LICENSE](src/assets/icons/official/LICENSE).
Similarly, the compendium packs found in [src/packs](src/packs) are based on Similarly, the compendium packs found in [src/packs](src/packs) are based on

2
package-lock.json generated
View file

@ -1,6 +1,6 @@
{ {
"name": "test", "name": "test",
"version": "0.2.0", "version": "0.2.1",
"lockfileVersion": 1, "lockfileVersion": 1,
"requires": true, "requires": true,
"dependencies": { "dependencies": {

View file

@ -2,7 +2,7 @@
"private": true, "private": true,
"name": "test", "name": "test",
"description": "An implementation of the Dungeonslayers 4 game system for Foundry Virtual Tabletop.", "description": "An implementation of the Dungeonslayers 4 game system for Foundry Virtual Tabletop.",
"version": "0.2.0", "version": "0.2.1",
"license": "MIT", "license": "MIT",
"homepage": "https://git.f3l.de/dungeonslayers/ds4", "homepage": "https://git.f3l.de/dungeonslayers/ds4",
"repository": { "repository": {

View file

@ -2,6 +2,9 @@
"DS4.UserInteractionAddItem": "Neu", "DS4.UserInteractionAddItem": "Neu",
"DS4.UserInteractionEditItem": "Bearbeiten", "DS4.UserInteractionEditItem": "Bearbeiten",
"DS4.UserInteractionDeleteItem": "Löschen", "DS4.UserInteractionDeleteItem": "Löschen",
"DS4.UserInteractionAddEffect": "Neuer Effekt",
"DS4.UserInteractionEditEffect": "Effekt bearbeiten",
"DS4.UserInteractionDeleteEffect": "Effekt löschen",
"DS4.NotOwned": "Nicht besessen", "DS4.NotOwned": "Nicht besessen",
"DS4.HeadingBiography": "Biografie", "DS4.HeadingBiography": "Biografie",
"DS4.HeadingDetails": "Details", "DS4.HeadingDetails": "Details",
@ -12,11 +15,11 @@
"DS4.HeadingSpells": "Zaubersprüche", "DS4.HeadingSpells": "Zaubersprüche",
"DS4.HeadingDescription": "Beschreibung", "DS4.HeadingDescription": "Beschreibung",
"DS4.HeadingSpecialCreatureAbilites": "Besondere Fähigkeiten", "DS4.HeadingSpecialCreatureAbilites": "Besondere Fähigkeiten",
"DS4.AttackType": "Angriffs Typ", "DS4.AttackType": "Angriffstyp",
"DS4.AttackTypeAbbr": "AT", "DS4.AttackTypeAbbr": "AT",
"DS4.WeaponBonus": "Waffen Bonus", "DS4.WeaponBonus": "Waffenbonus",
"DS4.WeaponBonusAbbr": "WB", "DS4.WeaponBonusAbbr": "WB",
"DS4.OpponentDefense": "Gegner Abwehr", "DS4.OpponentDefense": "Gegnerabwehr",
"DS4.OpponentDefenseAbbr": "GA", "DS4.OpponentDefenseAbbr": "GA",
"DS4.AttackTypeMelee": "Schlagen", "DS4.AttackTypeMelee": "Schlagen",
"DS4.AttackTypeRanged": "Schießen", "DS4.AttackTypeRanged": "Schießen",
@ -61,9 +64,9 @@
"DS4.ItemTypeSpecialCreatureAbilityPlural": "Besondere Kreaturenfähigkeiten", "DS4.ItemTypeSpecialCreatureAbilityPlural": "Besondere Kreaturenfähigkeiten",
"DS4.ArmorType": "Panzerungstyp", "DS4.ArmorType": "Panzerungstyp",
"DS4.ArmorTypeAbbr": "PAT", "DS4.ArmorTypeAbbr": "PAT",
"DS4.ArmorMaterialType": "Material Typ", "DS4.ArmorMaterialType": "Materialtyp",
"DS4.ArmorMaterialTypeAbbr": "Mat.", "DS4.ArmorMaterialTypeAbbr": "Mat.",
"DS4.ArmorValue": "Panzerungs Wert", "DS4.ArmorValue": "Panzerungswert",
"DS4.ArmorValueAbbr": "PA", "DS4.ArmorValueAbbr": "PA",
"DS4.ArmorTypeBody": "Körper", "DS4.ArmorTypeBody": "Körper",
"DS4.ArmorTypeBodyAbbr": "Körper", "DS4.ArmorTypeBodyAbbr": "Körper",
@ -125,7 +128,7 @@
"DS4.CombatValuesTargetedSpellcasting": "Zielzaubern", "DS4.CombatValuesTargetedSpellcasting": "Zielzaubern",
"DS4.CharacterBaseInfoRace": "Volk", "DS4.CharacterBaseInfoRace": "Volk",
"DS4.CharacterBaseInfoClass": "Klasse", "DS4.CharacterBaseInfoClass": "Klasse",
"DS4.CharacterBaseInfoHeroClass": "Helden Klasse", "DS4.CharacterBaseInfoHeroClass": "Heldenklasse",
"DS4.CharacterBaseInfoCulture": "Kultur", "DS4.CharacterBaseInfoCulture": "Kultur",
"DS4.CharacterProgressionLevel": "Stufe", "DS4.CharacterProgressionLevel": "Stufe",
"DS4.CharacterProgressionExperiencePoints": "Erfahrungspunkte", "DS4.CharacterProgressionExperiencePoints": "Erfahrungspunkte",
@ -144,9 +147,9 @@
"DS4.CharacterProfileBirthday": "Geburtstag", "DS4.CharacterProfileBirthday": "Geburtstag",
"DS4.CharacterProfileBirthplace": "Geburtsort", "DS4.CharacterProfileBirthplace": "Geburtsort",
"DS4.CharacterProfileAge": "Alter", "DS4.CharacterProfileAge": "Alter",
"DS4.CharacterProfileHeight": "Größe", "DS4.CharacterProfileHeight": "Größe [cm]",
"DS4.CharacterProfileHairColor": "Haarfarbe", "DS4.CharacterProfileHairColor": "Haarfarbe",
"DS4.CharacterProfileWeight": "Gewicht", "DS4.CharacterProfileWeight": "Gewicht [kg]",
"DS4.CharacterProfileEyeColor": "Augenfarbe", "DS4.CharacterProfileEyeColor": "Augenfarbe",
"DS4.CharacterProfileSpecialCharacteristics": "Besondere Eigenschaften", "DS4.CharacterProfileSpecialCharacteristics": "Besondere Eigenschaften",
"DS4.CharacterCurrencyGold": "Gold", "DS4.CharacterCurrencyGold": "Gold",
@ -193,7 +196,7 @@
"DS4.UnitCustom": "individuell", "DS4.UnitCustom": "individuell",
"DS4.UnitCustomAbbr": " ", "DS4.UnitCustomAbbr": " ",
"DS4.RollDialogDefaultTitle": "Proben-Optionen", "DS4.RollDialogDefaultTitle": "Proben-Optionen",
"DS4.RollDialogOkButton": "Ok", "DS4.RollDialogOkButton": "OK",
"DS4.RollDialogCancelButton": "Abbrechen", "DS4.RollDialogCancelButton": "Abbrechen",
"DS4.ErrorUnexpectedHtmlType": "Typfehler: Erwartet wurde {exType}, tatsächlich erhalten wurde {realType}", "DS4.ErrorUnexpectedHtmlType": "Typfehler: Erwartet wurde {exType}, tatsächlich erhalten wurde {realType}",
"DS4.RollDialogTargetLabel": "Probenwert", "DS4.RollDialogTargetLabel": "Probenwert",

View file

@ -2,6 +2,9 @@
"DS4.UserInteractionAddItem": "Add item", "DS4.UserInteractionAddItem": "Add item",
"DS4.UserInteractionEditItem": "Edit item", "DS4.UserInteractionEditItem": "Edit item",
"DS4.UserInteractionDeleteItem": "Delete item", "DS4.UserInteractionDeleteItem": "Delete item",
"DS4.UserInteractionAddEffect": "Add Effect",
"DS4.UserInteractionEditEffect": "Edit Effect",
"DS4.UserInteractionDeleteEffect": "Delete Effect",
"DS4.NotOwned": "No owner", "DS4.NotOwned": "No owner",
"DS4.HeadingBiography": "Biography", "DS4.HeadingBiography": "Biography",
"DS4.HeadingDetails": "Details", "DS4.HeadingDetails": "Details",
@ -144,9 +147,9 @@
"DS4.CharacterProfileBirthday": "Birthday", "DS4.CharacterProfileBirthday": "Birthday",
"DS4.CharacterProfileBirthplace": "Birthplace", "DS4.CharacterProfileBirthplace": "Birthplace",
"DS4.CharacterProfileAge": "Age", "DS4.CharacterProfileAge": "Age",
"DS4.CharacterProfileHeight": "Height", "DS4.CharacterProfileHeight": "Height [m]",
"DS4.CharacterProfileHairColor": "Hair Color", "DS4.CharacterProfileHairColor": "Hair Color",
"DS4.CharacterProfileWeight": "Weight", "DS4.CharacterProfileWeight": "Weight [kg]",
"DS4.CharacterProfileEyeColor": "Eye Color", "DS4.CharacterProfileEyeColor": "Eye Color",
"DS4.CharacterProfileSpecialCharacteristics": "Special Characteristics", "DS4.CharacterProfileSpecialCharacteristics": "Special Characteristics",
"DS4.CharacterCurrencyGold": "Gold", "DS4.CharacterCurrencyGold": "Gold",

View file

@ -8,6 +8,12 @@ export const DS4 = {
|____/ \___/|_| \_|\____|_____\___/|_| \_|____/|_____/_/ \_\_| |_____|_| \_\____/ |_| |____/ \___/|_| \_|\____|_____\___/|_| \_|____/|_____/_/ \_\_| |_____|_| \_\____/ |_|
=============================================================================================`, =============================================================================================`,
/**
* A dictionary of dictionaries each mapping keys to localized strings
* resp. their localization keys.
* The localization is assumed to take place on each reload.
*/
i18n: {
/** /**
* Define the set of acttack types that can be performed with weapon items * Define the set of acttack types that can be performed with weapon items
*/ */
@ -17,23 +23,6 @@ export const DS4 = {
meleeRanged: "DS4.AttackTypeMeleeRanged", meleeRanged: "DS4.AttackTypeMeleeRanged",
}, },
/**
* Define the file paths to icon images
*/
attackTypesIcons: {
melee: "systems/ds4/assets/icons/official/combat-values/melee-attack.png",
meleeRanged: "systems/ds4/assets/icons/official/combat-values/melee-ranged-attack.png",
ranged: "systems/ds4/assets/icons/official/combat-values/ranged-attack.png",
},
/**
* Define the file paths to icon images
*/
spellTypesIcons: {
spellcasting: "systems/ds4/assets/icons/official/combat-values/spellcasting.png",
targetedSpellcasting: "systems/ds4/assets/icons/official/combat-values/targeted-spellcasting.png",
},
/** /**
* Define the set of item availabilties * Define the set of item availabilties
*/ */
@ -209,23 +198,6 @@ export const DS4 = {
eyeColor: "DS4.CharacterProfileEyeColor", eyeColor: "DS4.CharacterProfileEyeColor",
specialCharacteristics: "DS4.CharacterProfileSpecialCharacteristics", specialCharacteristics: "DS4.CharacterProfileSpecialCharacteristics",
}, },
/**
* Define the profile info types for handlebars of a character
*/
characterProfileDTypes: {
biography: "String",
gender: "String",
birthday: "String",
birthplace: "String",
age: "Number",
height: "Number",
hairColor: "String",
weight: "Number",
eyeColor: "String",
specialCharacteristics: "String",
},
/** /**
* Define currency elements of a character * Define currency elements of a character
*/ */
@ -319,4 +291,43 @@ export const DS4 = {
blindroll: "DS4.ChatVisibilityBlindRoll", blindroll: "DS4.ChatVisibilityBlindRoll",
selfroll: "DS4.ChatVisibilitySelfRoll", selfroll: "DS4.ChatVisibilitySelfRoll",
}, },
},
/**
* A dictionary of dictionaries mapping keys to icon file paths.
*/
icons: {
/**
* Define the file paths to icon images
*/
attackTypes: {
melee: "systems/ds4/assets/icons/official/combat-values/melee-attack.png",
meleeRanged: "systems/ds4/assets/icons/official/combat-values/melee-ranged-attack.png",
ranged: "systems/ds4/assets/icons/official/combat-values/ranged-attack.png",
},
/**
* Define the file paths to icon images
*/
spellTypes: {
spellcasting: "systems/ds4/assets/icons/official/combat-values/spellcasting.png",
targetedSpellcasting: "systems/ds4/assets/icons/official/combat-values/targeted-spellcasting.png",
},
},
/**
* Define the profile info types for handlebars of a character
*/
characterProfileDTypes: {
biography: "String",
gender: "String",
birthday: "String",
birthplace: "String",
age: "Number",
height: "Number",
hairColor: "String",
weight: "Number",
eyeColor: "String",
specialCharacteristics: "String",
},
}; };

View file

@ -29,8 +29,8 @@ Hooks.once("init", async function () {
CONFIG.Item.entityClass = DS4Item as typeof Item; CONFIG.Item.entityClass = DS4Item as typeof Item;
// Define localized type labels // Define localized type labels
CONFIG.Actor.typeLabels = DS4.actorTypes; CONFIG.Actor.typeLabels = DS4.i18n.actorTypes;
CONFIG.Item.typeLabels = DS4.itemTypes; CONFIG.Item.typeLabels = DS4.i18n.itemTypes;
// Configure Dice // Configure Dice
CONFIG.Dice.types = [Die, DS4Check]; CONFIG.Dice.types = [Die, DS4Check];
@ -84,46 +84,16 @@ async function registerHandlebarsPartials() {
* This function runs after game data has been requested and loaded from the servers, so entities exist * This function runs after game data has been requested and loaded from the servers, so entities exist
*/ */
Hooks.once("setup", function () { Hooks.once("setup", function () {
// Localize CONFIG objects once up-front
const toLocalize = [
"attackTypes",
"itemAvailabilities",
"itemTypes",
"armorTypes",
"armorTypesAbbr",
"armorMaterialTypes",
"armorMaterialTypesAbbr",
"armorMaterialTypes",
"spellTypes",
"spellCategories",
"attributes",
"traits",
"combatValues",
"characterBaseInfo",
"characterProgression",
"characterLanguage",
"characterProfile",
"characterCurrency",
"creatureTypes",
"creatureSizeCategories",
"creatureBaseInfo",
"temporalUnits",
"temporalUnitsAbbr",
"distanceUnits",
"distanceUnitsAbbr",
"chatVisibilities",
];
// Exclude some from sorting where the default order matters // Exclude some from sorting where the default order matters
const noSort = ["attributes", "traits", "combatValues", "creatureSizeCategories"]; const noSort = ["attributes", "traits", "combatValues", "creatureSizeCategories"];
// Localize and sort CONFIG objects // Localize and sort CONFIG objects
for (const o of toLocalize) { for (const o of Object.keys(CONFIG.DS4.i18n)) {
const localized = Object.entries(CONFIG.DS4[o]).map((e) => { const localized = Object.entries(CONFIG.DS4.i18n[o]).map((e) => {
return [e[0], game.i18n.localize(e[1] as string)]; return [e[0], game.i18n.localize(e[1] as string)];
}); });
if (!noSort.includes(o)) localized.sort((a, b) => a[1].localeCompare(b[1])); if (!noSort.includes(o)) localized.sort((a, b) => a[1].localeCompare(b[1]));
CONFIG.DS4[o] = localized.reduce((obj, e) => { CONFIG.DS4.i18n[o] = localized.reduce((obj, e) => {
obj[e[0]] = e[1]; obj[e[0]] = e[1];
return obj; return obj;
}, {}); }, {});
@ -133,3 +103,21 @@ Hooks.once("setup", function () {
Hooks.once("ready", function () { Hooks.once("ready", function () {
migration.migrate(); migration.migrate();
}); });
/**
* Select the text of input elements in given sheets via onfocus listener.
* The hook names are of the form "render"+sheet_superclassname and are called within
* the render() method of the foundry Application class.
* Note: The render hooks of all classes in the class hierarchy are called,
* so e.g. for a Dialog, both "renderDialog" and "renderApplication" are called
* (in this order).
*/
["renderApplication", "renderActorSheet", "renderItemSheet"].forEach((hookName: string) => {
Hooks.on(hookName, (app: Dialog, html: JQueryStatic, data: any) => {
$(html)
.find("input")
.on("focus", (ev: JQuery.FocusEvent<HTMLInputElement>) => {
ev.currentTarget.select();
});
});
});

View file

@ -1,7 +1,7 @@
import { ModifiableData } from "../common/common-data"; import { ModifiableData } from "../common/common-data";
import { DS4 } from "../config"; import { DS4 } from "../config";
export type ItemType = keyof typeof DS4.itemTypes; export type ItemType = keyof typeof DS4.i18n.itemTypes;
export type DS4ItemDataType = export type DS4ItemDataType =
| DS4Weapon | DS4Weapon

View file

@ -2,7 +2,7 @@
"name": "ds4", "name": "ds4",
"title": "Dungeonslayers 4", "title": "Dungeonslayers 4",
"description": "The Dungeonslayers 4 system for FoundryVTT. Dungeonslayers (© Christian Kennig) is licensed under CC BY-NC-SA 3.0 (https://creativecommons.org/licenses/by-nc-sa/3.0/de/deed.en).", "description": "The Dungeonslayers 4 system for FoundryVTT. Dungeonslayers (© Christian Kennig) is licensed under CC BY-NC-SA 3.0 (https://creativecommons.org/licenses/by-nc-sa/3.0/de/deed.en).",
"version": "0.2.0", "version": "0.2.1",
"minimumCoreVersion": "0.7.9", "minimumCoreVersion": "0.7.9",
"compatibleCoreVersion": "0.7.9", "compatibleCoreVersion": "0.7.9",
"templateVersion": 2, "templateVersion": 2,
@ -43,7 +43,7 @@
"primaryTokenAttribute": "combatValues.hitPoints", "primaryTokenAttribute": "combatValues.hitPoints",
"url": "https://git.f3l.de/dungeonslayers/ds4", "url": "https://git.f3l.de/dungeonslayers/ds4",
"manifest": "https://git.f3l.de/dungeonslayers/ds4/-/raw/latest/src/system.json?inline=false", "manifest": "https://git.f3l.de/dungeonslayers/ds4/-/raw/latest/src/system.json?inline=false",
"download": "https://git.f3l.de/dungeonslayers/ds4/-/jobs/artifacts/0.2.0/download?job=build", "download": "https://git.f3l.de/dungeonslayers/ds4/-/jobs/artifacts/0.2.1/download?job=build",
"license": "MIT", "license": "MIT",
"initiative": "@combatValues.initiative.total" "initiative": "@combatValues.initiative.total"
} }

View file

@ -13,20 +13,20 @@
<div class="flexrow basic-properties"> <div class="flexrow basic-properties">
<div class="basic-property"> <div class="basic-property">
<label class="basic-property-label" <label class="basic-property-label"
for="data.baseInfo.race">{{config.characterBaseInfo.race}}</label> for="data.baseInfo.race">{{config.i18n.characterBaseInfo.race}}</label>
<input type="text" name="data.baseInfo.race" id="data.baseInfo.race" value="{{data.baseInfo.race}}" <input type="text" name="data.baseInfo.race" id="data.baseInfo.race" value="{{data.baseInfo.race}}"
data-dtype="String" /> data-dtype="String" />
</div> </div>
<div class="basic-property"> <div class="basic-property">
<label class="basic-property-label" <label class="basic-property-label"
for="data.baseInfo.culture">{{config.characterBaseInfo.culture}}</label> for="data.baseInfo.culture">{{config.i18n.characterBaseInfo.culture}}</label>
<input id="data.baseInfo.culture" type="text" name="data.baseInfo.culture" <input id="data.baseInfo.culture" type="text" name="data.baseInfo.culture"
value="{{data.baseInfo.culture}}" value="{{data.baseInfo.culture}}"
data-dtype="String" /> data-dtype="String" />
</div> </div>
<div class="basic-property flex125"> <div class="basic-property flex125">
<label class="basic-property-label" <label class="basic-property-label"
for="data.progression.progressPoints.used">{{config.characterProgression.progressPoints}}</label> for="data.progression.progressPoints.used">{{config.i18n.characterProgression.progressPoints}}</label>
<div class="flexrow"> <div class="flexrow">
<input id="data.progression.progressPoints.used" type="number" <input id="data.progression.progressPoints.used" type="number"
name="data.progression.progressPoints.used" name="data.progression.progressPoints.used"
@ -43,7 +43,7 @@
</div> </div>
<div class="basic-property flex125"> <div class="basic-property flex125">
<label class="basic-property-label" <label class="basic-property-label"
for="data.progression.talentPoints.used">{{config.characterProgression.talentPoints}}</label> for="data.progression.talentPoints.used">{{config.i18n.characterProgression.talentPoints}}</label>
<div class="flexrow"> <div class="flexrow">
<input type="number" name="data.progression.talentPoints.used" <input type="number" name="data.progression.talentPoints.used"
id="data.progression.talentPoints.used" id="data.progression.talentPoints.used"
@ -56,13 +56,13 @@
</div> </div>
<div class="basic-property"> <div class="basic-property">
<label class="basic-property-label" <label class="basic-property-label"
for="data.baseInfo.class">{{config.characterBaseInfo.class}}</label> for="data.baseInfo.class">{{config.i18n.characterBaseInfo.class}}</label>
<input type="text" id="data.baseInfo.class" name="data.baseInfo.class" <input type="text" id="data.baseInfo.class" name="data.baseInfo.class"
value="{{data.baseInfo.class}}" data-dtype="String" /> value="{{data.baseInfo.class}}" data-dtype="String" />
</div> </div>
<div class="basic-property"> <div class="basic-property">
<label class="basic-property-label" <label class="basic-property-label"
for="data.baseInfo.heroClass">{{config.characterBaseInfo.heroClass}}</label> for="data.baseInfo.heroClass">{{config.i18n.characterBaseInfo.heroClass}}</label>
<input type="text" id="data.baseInfo.heroClass" name="data.baseInfo.heroClass" <input type="text" id="data.baseInfo.heroClass" name="data.baseInfo.heroClass"
value="{{data.baseInfo.heroClass}}" value="{{data.baseInfo.heroClass}}"
data-dtype="String" /> data-dtype="String" />
@ -84,24 +84,28 @@
<a class="item" data-tab="biography">{{localize 'DS4.HeadingBiography'}}</a> <a class="item" data-tab="biography">{{localize 'DS4.HeadingBiography'}}</a>
</nav> </nav>
{{!-- Sheet Body --}} <!-- beautify ignore:start -->
<section class="sheet-body"> <!-- prettier-ignore-start -->
{{!-- Items Tab --}} {{!-- Sheet Body (remove indentation to avoid annoying Handlebars auto-indent) --}}
{{> systems/ds4/templates/actor/partials/character-inventory.hbs}} <section class="sheet-body">
{{!-- Items Tab --}}
{{> systems/ds4/templates/actor/partials/character-inventory.hbs}}
{{!-- Spells Tab --}} {{!-- Spells Tab --}}
{{> systems/ds4/templates/actor/partials/spells-overview.hbs}} {{> systems/ds4/templates/actor/partials/spells-overview.hbs}}
{{!-- Talents Tab --}} {{!-- Talents Tab --}}
{{> systems/ds4/templates/actor/partials/talents-abilities-overview.hbs}} {{> systems/ds4/templates/actor/partials/talents-abilities-overview.hbs}}
{{! Profile Tab --}} {{! Profile Tab --}}
{{> systems/ds4/templates/actor/partials/profile.hbs}} {{> systems/ds4/templates/actor/partials/profile.hbs}}
{{!-- Biography Tab --}} {{!-- Biography Tab --}}
<div class="tab biography" data-group="primary" data-tab="biography"> <div class="tab biography" data-group="primary" data-tab="biography">
{{editor content=data.profile.biography target="data.profile.biography" button=true owner=owner {{editor content=data.profile.biography target="data.profile.biography" button=true owner=owner
editable=editable}} editable=editable}}
</div> </div>
</section> </section>
<!-- prettier-ignore-end -->
<!-- beautify ignore:end -->
</form> </form>

View file

@ -6,10 +6,10 @@
<h1 class="charname"><input name="name" type="text" value="{{actor.name}}" placeholder="Name" /></h1> <h1 class="charname"><input name="name" type="text" value="{{actor.name}}" placeholder="Name" /></h1>
<div class="flexrow basic-properties"> <div class="flexrow basic-properties">
<div class="basic-property"> <div class="basic-property">
<label>{{config.creatureBaseInfo.creatureType}}</label> <label>{{config.i18n.creatureBaseInfo.creatureType}}</label>
<select name="data.baseInfo.creatureType" data-type="String"> <select name="data.baseInfo.creatureType" data-type="String">
{{#select data.baseInfo.creatureType}} {{#select data.baseInfo.creatureType}}
{{#each config.creatureTypes as |value key|}} {{#each config.i18n.creatureTypes as |value key|}}
<option value="{{key}}">{{value}}</option> <option value="{{key}}">{{value}}</option>
{{/each}} {{/each}}
{{/select}} {{/select}}
@ -17,20 +17,20 @@
</div> </div>
<div class="basic-property"> <div class="basic-property">
<label class="basic-property-label" <label class="basic-property-label"
for="data.baseInfo.loot">{{config.creatureBaseInfo.loot}}</label> for="data.baseInfo.loot">{{config.i18n.creatureBaseInfo.loot}}</label>
<input type="text" name="data.baseInfo.loot" value="{{data.baseInfo.loot}}" data-dtype="String" /> <input type="text" name="data.baseInfo.loot" value="{{data.baseInfo.loot}}" data-dtype="String" />
</div> </div>
<div class="basic-property"> <div class="basic-property">
<label class="basic-property-label" <label class="basic-property-label"
for="data.baseInfo.foeFactor">{{config.creatureBaseInfo.foeFactor}}</label> for="data.baseInfo.foeFactor">{{config.i18n.creatureBaseInfo.foeFactor}}</label>
<input type="text" name="data.baseInfo.foeFactor" value="{{data.baseInfo.foeFactor}}" <input type="text" name="data.baseInfo.foeFactor" value="{{data.baseInfo.foeFactor}}"
data-dtype="Number" /> data-dtype="Number" />
</div> </div>
<div class="basic-property"> <div class="basic-property">
<label>{{config.creatureBaseInfo.sizeCategory}}</label> <label>{{config.i18n.creatureBaseInfo.sizeCategory}}</label>
<select name="data.baseInfo.sizeCategory" data-type="String"> <select name="data.baseInfo.sizeCategory" data-type="String">
{{#select data.baseInfo.sizeCategory}} {{#select data.baseInfo.sizeCategory}}
{{#each config.creatureSizeCategories as |value key|}} {{#each config.i18n.creatureSizeCategories as |value key|}}
<option value="{{key}}">{{value}}</option> <option value="{{key}}">{{value}}</option>
{{/each}} {{/each}}
{{/select}} {{/select}}
@ -38,7 +38,7 @@
</div> </div>
<div class="basic-property"> <div class="basic-property">
<label class="basic-property-label" <label class="basic-property-label"
for="data.baseInfo.experiencePoints">{{config.creatureBaseInfo.experiencePoints}}</label> for="data.baseInfo.experiencePoints">{{config.i18n.creatureBaseInfo.experiencePoints}}</label>
<input type="text" name="data.baseInfo.experiencePoints" value="{{data.baseInfo.experiencePoints}}" <input type="text" name="data.baseInfo.experiencePoints" value="{{data.baseInfo.experiencePoints}}"
data-dtype="Number" /> data-dtype="Number" />
</div> </div>

View file

@ -42,11 +42,11 @@
{{!-- ======================================================================== --}} {{!-- ======================================================================== --}}
<div class="attributes-traits grid grid-3col"> <div class="attributes-traits grid grid-3col">
{{#each config.attributes as |attribute-label attribute-key|}} {{#each config.i18n.attributes as |attribute-label attribute-key|}}
{{> attribute attribute-label=attribute-label attribute-key=attribute-key attribute-data=(lookup ../data.attributes {{> attribute attribute-label=attribute-label attribute-key=attribute-key attribute-data=(lookup ../data.attributes
attribute-key)}} attribute-key)}}
{{/each}} {{/each}}
{{#each config.traits as |trait-label trait-key|}} {{#each config.i18n.traits as |trait-label trait-key|}}
{{> trait trait-label=trait-label trait-key=trait-key trait-data=(lookup ../data.traits trait-key)}} {{> trait trait-label=trait-label trait-key=trait-key trait-data=(lookup ../data.traits trait-key)}}
{{/each}} {{/each}}
</div> </div>

View file

@ -4,13 +4,13 @@
<h4 class="items-list-title">{{localize 'DS4.CharacterCurrency'}}</h4> <h4 class="items-list-title">{{localize 'DS4.CharacterCurrency'}}</h4>
<ol class="items-list"> <ol class="items-list">
<li class="item flexrow item-header"> <li class="item flexrow item-header">
<label for="data.currency.gold" class="flex05">{{config.characterCurrency.gold}}</label> <label for="data.currency.gold" class="flex05">{{config.i18n.characterCurrency.gold}}</label>
<input class="flex3 item-num-val item-change" type="number" min="0" step="1" name="data.currency.gold" <input class="flex3 item-num-val item-change" type="number" min="0" step="1" name="data.currency.gold"
id="data.currency.gold" value="{{data.currency.gold}}" data-dtype="Number" /> id="data.currency.gold" value="{{data.currency.gold}}" data-dtype="Number" />
<label for="data.currency.silver" class="flex05">{{config.characterCurrency.silver}}</label> <label for="data.currency.silver" class="flex05">{{config.i18n.characterCurrency.silver}}</label>
<input class="flex3 item-num-val item-change" type="number" min="0" step="1" name="data.currency.silver" <input class="flex3 item-num-val item-change" type="number" min="0" step="1" name="data.currency.silver"
id="data.currency.silver" value="{{data.currency.silver}}" data-dtype="Number" /> id="data.currency.silver" value="{{data.currency.silver}}" data-dtype="Number" />
<label for="data.currency.copper" class="flex05">{{config.characterCurrency.copper}}</label> <label for="data.currency.copper" class="flex05">{{config.i18n.characterCurrency.copper}}</label>
<input class="flex3 item-num-val item-change" type="number" min="0" step="1" name="data.currency.copper" <input class="flex3 item-num-val item-change" type="number" min="0" step="1" name="data.currency.copper"
id="data.currency.copper" value="{{data.currency.copper}}" data-dtype="Number" /> id="data.currency.copper" value="{{data.currency.copper}}" data-dtype="Number" />
</li> </li>

View file

@ -1,6 +1,6 @@
<div class="progression flexrow"> <div class="progression flexrow">
<div class="progression-entry"> <div class="progression-entry">
<h2 class="progression-label"><label for="data.progression.level">{{config.characterProgression.level}}</label> <h2 class="progression-label"><label for="data.progression.level">{{config.i18n.characterProgression.level}}</label>
</h2> </h2>
<label for="data.progression.level" class="hidden">Progression Level</label> <label for="data.progression.level" class="hidden">Progression Level</label>
<input class="progression-value" type="number" name="data.progression.level" id="data.progression.level" value="{{data.progression.level}}" <input class="progression-value" type="number" name="data.progression.level" id="data.progression.level" value="{{data.progression.level}}"
@ -8,7 +8,7 @@
</div> </div>
<div class="progression-entry"> <div class="progression-entry">
<h2 class="progression-label"><label <h2 class="progression-label"><label
for="data.progression.experiencePoints">{{config.characterProgression.experiencePoints}}</label> for="data.progression.experiencePoints">{{config.i18n.characterProgression.experiencePoints}}</label>
</h2> </h2>
<label for="data.progression.experiencePoints" class="hidden">Experience Points</label> <label for="data.progression.experiencePoints" class="hidden">Experience Points</label>
<input class="progression-value" type="number" name="data.progression.experiencePoints" id="data.progression.experiencePoints" <input class="progression-value" type="number" name="data.progression.experiencePoints" id="data.progression.experiencePoints"

View file

@ -23,7 +23,7 @@
{{!-- ======================================================================== --}} {{!-- ======================================================================== --}}
<div class="combat-values flexrow flex-between"> <div class="combat-values flexrow flex-between">
{{#each config.combatValues as |combat-value-label combat-value-key|}} {{#each config.i18n.combatValues as |combat-value-label combat-value-key|}}
{{> combat-value combat-value-key=combat-value-key combat-value-data=(lookup ../data.combatValues {{> combat-value combat-value-key=combat-value-key combat-value-data=(lookup ../data.combatValues
combat-value-key)}} combat-value-key)}}
{{/each}} {{/each}}

View file

@ -15,9 +15,8 @@
{{#*inline "ifHasItemOfType"}} {{#*inline "ifHasItemOfType"}}
{{#if (and (ne itemsArray undefined) (gt itemsArray.length 0))}} {{#if (and (ne itemsArray undefined) (gt itemsArray.length 0))}}
{{> @partial-block}} {{> @partial-block}}
{{else}}
{{> systems/ds4/templates/actor/partials/overview-add-button.hbs dataType=dataType }}
{{/if}} {{/if}}
{{> systems/ds4/templates/actor/partials/overview-add-button.hbs dataType=dataType }}
{{/inline}} {{/inline}}
@ -48,8 +47,8 @@
{{> @partial-block }} {{> @partial-block }}
{{!-- description --}} {{!-- description --}}
<div class="flex4">{{localize 'DS4.Description'}}</div> <div class="flex4">{{localize 'DS4.Description'}}</div>
{{!-- add button --}} {{!-- control buttons placeholder --}}
{{> systems/ds4/templates/actor/partials/overview-add-button.hbs dataType=dataType }} <div></div>
</li> </li>
{{/inline}} {{/inline}}
@ -110,8 +109,8 @@
{{#each itemsByType.weapon as |item id|}} {{#each itemsByType.weapon as |item id|}}
{{#> itemListEntry item=item}} {{#> itemListEntry item=item}}
<div class="flex05 item-image"> <div class="flex05 item-image">
<img src="{{lookup ../../config.attackTypesIcons item.data.data.attackType}}" <img src="{{lookup ../../config.icons.attackTypes item.data.data.attackType}}"
title="{{lookup ../../config.attackTypes item.data.data.attackType}}" width="24" height="24" /> title="{{lookup ../../config.i18n.attackTypes item.data.data.attackType}}" width="24" height="24" />
</div> </div>
<div class="flex05 item-num-val">{{ item.data.data.weaponBonus}}</div> <div class="flex05 item-num-val">{{ item.data.data.weaponBonus}}</div>
<div class="flex05 item-num-val">{{ item.data.data.opponentDefense}}</div> <div class="flex05 item-num-val">{{ item.data.data.opponentDefense}}</div>
@ -135,11 +134,11 @@
{{/itemListHeader}} {{/itemListHeader}}
{{#each itemsByType.armor as |item id|}} {{#each itemsByType.armor as |item id|}}
{{#> itemListEntry item=item }} {{#> itemListEntry item=item }}
<div title="{{lookup ../../config.armorMaterialTypes item.data.data.armorMaterialType}}"> <div title="{{lookup ../../config.i18n.armorMaterialTypes item.data.data.armorMaterialType}}">
{{lookup ../../config.armorMaterialTypesAbbr item.data.data.armorMaterialType}} {{lookup ../../config.i18n.armorMaterialTypesAbbr item.data.data.armorMaterialType}}
</div> </div>
<div title="{{lookup ../../config.armorTypes item.data.data.armorType}}"> <div title="{{lookup ../../config.i18n.armorTypes item.data.data.armorType}}">
{{lookup ../../config.armorTypesAbbr item.data.data.armorType}} {{lookup ../../config.i18n.armorTypesAbbr item.data.data.armorType}}
</div> </div>
<div class="flex05 item-num-val">{{ item.data.data.armorValue}}</div> <div class="flex05 item-num-val">{{ item.data.data.armorValue}}</div>
{{/itemListEntry}} {{/itemListEntry}}

View file

@ -3,6 +3,6 @@
!-- The current item is defined by the data-item-id HTML property of the parent li element. !-- The current item is defined by the data-item-id HTML property of the parent li element.
--}} --}}
<div class="item-controls"> <div class="item-controls">
<a class="item-control item-edit" title="Edit Item"><i class="fas fa-edit"></i></a> <a class="item-control item-edit" title="{{localize 'DS4.UserInteractionEditItem'}}"><i class="fas fa-edit"></i></a>
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a> <a class="item-control item-delete" title="{{localize 'DS4.UserInteractionDeleteItem'}}"><i class="fas fa-trash"></i></a>
</div> </div>

View file

@ -1,15 +1,21 @@
<div class="tab profile" data-group="primary" data-tab="profile"> <div class="tab profile" data-group="primary" data-tab="profile">
<div class="grid grid-2col"> <div class="grid grid-2col">
{{#each data.profile as |profile-data-value profile-data-key|}} {{#each data.profile as |profile-data-value profile-data-key|}}
{{#if (ne profile-data-key 'biography')}} {{#if (and (ne profile-data-key 'biography') (ne profile-data-key 'specialCharacteristics'))}}
<div class="profile-entry"> <div class="profile-entry">
<label for="data.profile.{{profile-data-key}}"> <label for="data.profile.{{profile-data-key}}">
{{lookup ../config.characterProfile profile-data-key}} {{lookup ../config.i18n.characterProfile profile-data-key}}
</label> </label>
<input type="text" name="data.profile.{{profile-data-key}}" value="{{profile-data-value}}" <input type="text" name="data.profile.{{profile-data-key}}" value="{{profile-data-value}}"
data-dtype="{{lookup ../config/characterProfileDTypes profile-data-key}}" /> data-dtype="{{lookup ../config.i18n.characterProfileDTypes profile-data-key}}" />
</div> </div>
{{/if}} {{/if}}
{{/each}} {{/each}}
<div>
<label for="data.profile.specialCharacteristics">
{{lookup config.i18n.characterProfile 'specialCharacteristics'}}
</label>
<textarea name="data.profile.specialCharacteristics" data-dtype="String" rows="4">{{data.profile.specialCharacteristics}}</textarea>
</div>
</div> </div>
</div> </div>

View file

@ -42,8 +42,8 @@
<div class="flex1 item-name">{{localize 'DS4.ItemName'}}</div> <div class="flex1 item-name">{{localize 'DS4.ItemName'}}</div>
{{!-- description --}} {{!-- description --}}
<div class="flex3">{{localize 'DS4.Description'}}</div> <div class="flex3">{{localize 'DS4.Description'}}</div>
{{!-- add button --}} {{!-- control buttons placeholder --}}
{{> systems/ds4/templates/actor/partials/overview-add-button.hbs dataType=dataType }} <div></div>
</li> </li>
{{/inline}} {{/inline}}
@ -58,4 +58,5 @@
{{> baseItemListEntry item=item}} {{> baseItemListEntry item=item}}
{{/each}} {{/each}}
</ol> </ol>
{{> systems/ds4/templates/actor/partials/overview-add-button.hbs dataType='specialCreatureAbility' }}
</div> </div>

View file

@ -13,7 +13,7 @@
<div class="unit-data-pair item-num-val" <div class="unit-data-pair item-num-val"
title="{{localize localizationString}} [{{lookup unitNames unitDatum.unit}}]" > title="{{localize localizationString}} [{{lookup unitNames unitDatum.unit}}]" >
{{#if unitDatum.value }} {{#if unitDatum.value }}
{{unitDatum.value}}{{lookup unitAbbrs unitDatum.unit}} {{unitDatum.value}}&thinsp;{{lookup unitAbbrs unitDatum.unit}}
{{else}}-{{/if}} {{else}}-{{/if}}
</div> </div>
{{/inline}} {{/inline}}
@ -23,11 +23,11 @@
!-- directly handing over the latter two. !-- directly handing over the latter two.
--}} --}}
{{#*inline "temporalUnit"}} {{#*inline "temporalUnit"}}
{{> unit unitNames=config.temporalUnits unitAbbrs=config.temporalUnitsAbbr unitDatum=unitDatum localizationString=localizationString}} {{> unit unitNames=config.i18n.temporalUnits unitAbbrs=config.i18n.temporalUnitsAbbr unitDatum=unitDatum localizationString=localizationString}}
{{/inline}} {{/inline}}
{{#*inline "distanceUnit"}} {{#*inline "distanceUnit"}}
{{> unit unitNames=config.distanceUnits unitAbbrs=config.distanceUnitsAbbr unitDatum=unitDatum localizationString=localizationString}} {{> unit unitNames=config.i18n.distanceUnits unitAbbrs=config.i18n.distanceUnitsAbbr unitDatum=unitDatum localizationString=localizationString}}
{{/inline}} {{/inline}}
@ -55,8 +55,8 @@
<div class="item-num-val" title="{{localize 'DS4.SpellCooldownDuration'}}"><i class="fas fa-hourglass-half"></i></div> <div class="item-num-val" title="{{localize 'DS4.SpellCooldownDuration'}}"><i class="fas fa-hourglass-half"></i></div>
{{!-- description --}} {{!-- description --}}
{{!-- <div class="flex3">{{localize 'DS4.Description'}}</div> --}} {{!-- <div class="flex3">{{localize 'DS4.Description'}}</div> --}}
{{!-- add button --}} {{!-- control buttons placeholder --}}
{{> systems/ds4/templates/actor/partials/overview-add-button.hbs dataType='spell' }} <div></div>
</li> </li>
{{#each itemsByType.spell as |item id|}} {{#each itemsByType.spell as |item id|}}
<li class="item flexrow" data-item-id="{{item._id}}"> <li class="item flexrow" data-item-id="{{item._id}}">
@ -71,8 +71,8 @@
data-property="name" title="{{localize 'DS4.ItemName'}}" /> data-property="name" title="{{localize 'DS4.ItemName'}}" />
{{!-- spell type --}} {{!-- spell type --}}
<div class="flex05 item-image"> <div class="flex05 item-image">
<img src="{{lookup ../config.spellTypesIcons item.data.data.spellType}}" <img src="{{lookup ../config.icons.spellTypes item.data.data.spellType}}"
title="{{lookup ../config.spellTypes item.data.data.spellType}}" width="24" height="24" /> title="{{lookup ../config.i18n.spellTypes item.data.data.spellType}}" width="24" height="24" />
</div> </div>
{{!-- spell bonus --}} {{!-- spell bonus --}}
<input class="item-num-val item-change" type="text" data-dtype="String" <input class="item-num-val item-change" type="text" data-dtype="String"
@ -90,4 +90,6 @@
</li> </li>
{{/each}} {{/each}}
</ol> </ol>
{{!-- add button --}}
{{> systems/ds4/templates/actor/partials/overview-add-button.hbs dataType='spell' }}
</div> </div>

View file

@ -15,9 +15,8 @@
{{#*inline "ifHasItemOfType"}} {{#*inline "ifHasItemOfType"}}
{{#if (and (ne itemsArray undefined) (gt itemsArray.length 0))}} {{#if (and (ne itemsArray undefined) (gt itemsArray.length 0))}}
{{> @partial-block}} {{> @partial-block}}
{{else}}
{{> systems/ds4/templates/actor/partials/overview-add-button.hbs dataType=dataType }}
{{/if}} {{/if}}
{{> systems/ds4/templates/actor/partials/overview-add-button.hbs dataType=dataType }}
{{/inline}} {{/inline}}
@ -98,7 +97,7 @@
{{/inline}} {{/inline}}
{{!-- {{!--
!-- Render a list header for a base item list entries from a given item. !-- Render a list header for a base item list entry from a given item.
!-- The partial assumes a variable dataType to be given in the context. !-- The partial assumes a variable dataType to be given in the context.
!-- !--
!-- @param dataType: the string item type for the list !-- @param dataType: the string item type for the list
@ -111,8 +110,8 @@
<div class="flex1 item-name">{{localize 'DS4.ItemName'}}</div> <div class="flex1 item-name">{{localize 'DS4.ItemName'}}</div>
{{!-- description --}} {{!-- description --}}
<div class="flex3">{{localize 'DS4.Description'}}</div> <div class="flex3">{{localize 'DS4.Description'}}</div>
{{!-- add button --}} {{!-- control buttons placeholder --}}
{{> systems/ds4/templates/actor/partials/overview-add-button.hbs dataType=dataType }} <div></div>
</li> </li>
{{/inline}} {{/inline}}
@ -133,8 +132,8 @@
<div class="flex3">{{localize 'DS4.TalentRank'}}</div> <div class="flex3">{{localize 'DS4.TalentRank'}}</div>
{{!-- description --}} {{!-- description --}}
<div class="flex4">{{localize 'DS4.Description'}}</div> <div class="flex4">{{localize 'DS4.Description'}}</div>
{{!-- add button --}} {{!-- control buttons placeholder --}}
{{> systems/ds4/templates/actor/partials/overview-add-button.hbs dataType='talent' }} <div></div>
</li> </li>
{{#each itemsByType.talent as |item id|}} {{#each itemsByType.talent as |item id|}}
{{> talentListEntry item=item}} {{> talentListEntry item=item}}

View file

@ -5,7 +5,7 @@
<label>{{localize "DS4.ArmorType"}}</label> <label>{{localize "DS4.ArmorType"}}</label>
<select name="data.armorType" data-type="String"> <select name="data.armorType" data-type="String">
{{#select data.armorType}} {{#select data.armorType}}
{{#each config.armorTypes as |value key|}} {{#each config.i18n.armorTypes as |value key|}}
<option value="{{key}}">{{value}}</option> <option value="{{key}}">{{value}}</option>
{{/each}} {{/each}}
{{/select}} {{/select}}
@ -15,7 +15,7 @@
<label for="data.armorMaterialType">{{localize "DS4.ArmorMaterialType"}}</label> <label for="data.armorMaterialType">{{localize "DS4.ArmorMaterialType"}}</label>
<select name="data.armorMaterialType" data-type="String"> <select name="data.armorMaterialType" data-type="String">
{{#select data.armorMaterialType}} {{#select data.armorMaterialType}}
{{#each config.armorMaterialTypes as |value key|}} {{#each config.i18n.armorMaterialTypes as |value key|}}
<option value="{{key}}">{{value}}</option> <option value="{{key}}">{{value}}</option>
{{/each}} {{/each}}
{{/select}} {{/select}}

View file

@ -11,7 +11,7 @@
<label for="data.availability">{{localize "DS4.ItemAvailability"}}</label> <label for="data.availability">{{localize "DS4.ItemAvailability"}}</label>
<select name="data.availability" data-type="String"> <select name="data.availability" data-type="String">
{{#select data.availability}} {{#select data.availability}}
{{#each config.itemAvailabilities as |value key|}} {{#each config.i18n.itemAvailabilities as |value key|}}
<option value="{{key}}">{{value}}</option> <option value="{{key}}">{{value}}</option>
{{/each}} {{/each}}
{{/select}} {{/select}}

View file

@ -5,16 +5,18 @@
<div class="effect-image"></div> <div class="effect-image"></div>
<div class="effect-name">Name</div> <div class="effect-name">Name</div>
<div class="effect-controls"> <div class="effect-controls">
<a class="effect-control" data-action="create" title="Create Effect"><i class="fas fa-plus"></i> Add <a class="effect-control" data-action="create" title="{{localize 'DS4.UserInteractionAddEffect'}}">
effect</a> <i class="fas fa-plus"></i> {{localize 'DS4.UserInteractionAddEffect'}}</a>
</div> </div>
</li> </li>
{{#each item.effects as |effect id|}} {{#each item.effects as |effect id|}}
<li class="effect flexrow" data-effect-id="{{effect._id}}"> <li class="effect flexrow" data-effect-id="{{effect._id}}">
<h4 class="effect-name">{{effect.label}}</h4> <h4 class="effect-name">{{effect.label}}</h4>
<div class="effect-controls"> <div class="effect-controls">
<a class="effect-control" data-action="edit" title="Edit Effect"><i class="fas fa-edit"></i></a> <a class="effect-control" data-action="edit" title="{{localize 'DS4.UserInteractionEditEffect'}}">
<a class="effect-control" data-action="delete" title="Delete Effect"><i class="fas fa-trash"></i></a> <i class="fas fa-edit"></i></a>
<a class="effect-control" data-action="delete" title="{{localize 'DS4.UserInteractionDeleteEffect'}}">
<i class="fas fa-trash"></i></a>
</div> </div>
</li> </li>
{{/each}} {{/each}}

View file

@ -2,7 +2,7 @@
<img class="profile-img" src="{{item.img}}" data-edit="img" title="{{item.name}}" /> <img class="profile-img" src="{{item.img}}" data-edit="img" title="{{item.name}}" />
<div class="header-fields flexrow"> <div class="header-fields flexrow">
<h1 class="charname"><input name="name" type="text" value="{{item.name}}" placeholder="Name" /></h1> <h1 class="charname"><input name="name" type="text" value="{{item.name}}" placeholder="Name" /></h1>
<h2 class="item-type">{{localize (lookup config.itemTypes item.type)}}</h2> <h2 class="item-type">{{lookup config.i18n.itemTypes item.type}}</h2>
{{> @partial-block}} {{> @partial-block}}
</div> </div>
</header> </header>

View file

@ -12,9 +12,9 @@
<select name="data.{{property}}.unit" data-type="String"> <select name="data.{{property}}.unit" data-type="String">
{{#select (lookup (lookup data property) 'unit')}} {{#select (lookup (lookup data property) 'unit')}}
{{#if (eq unitType 'temporal')}} {{#if (eq unitType 'temporal')}}
{{#each (lookup config 'temporalUnitsAbbr') as |value key|}}<option value="{{key}}">{{value}}</option>{{/each}} {{#each (lookup config.i18n 'temporalUnitsAbbr') as |value key|}}<option value="{{key}}">{{value}}</option>{{/each}}
{{else}} {{else}}
{{#each (lookup config 'distanceUnitsAbbr') as |value key|}}<option value="{{key}}">{{value}}</option>{{/each}} {{#each (lookup config.i18n 'distanceUnitsAbbr') as |value key|}}<option value="{{key}}">{{value}}</option>{{/each}}
{{/if}} {{/if}}
{{/select}} {{/select}}
</select> </select>
@ -33,7 +33,7 @@
<label for="data.spellType">{{localize "DS4.SpellType"}}</label> <label for="data.spellType">{{localize "DS4.SpellType"}}</label>
<select id="data.spellType" name="data.spellType" data-type="String"> <select id="data.spellType" name="data.spellType" data-type="String">
{{#select data.spellType}} {{#select data.spellType}}
{{#each config.spellTypes as |value key|}} {{#each config.i18n.spellTypes as |value key|}}
<option value="{{key}}">{{value}}</option> <option value="{{key}}">{{value}}</option>
{{/each}} {{/each}}
{{/select}} {{/select}}
@ -52,7 +52,7 @@
<label for="data.spellCategory">{{localize "DS4.SpellCategory"}}</label> <label for="data.spellCategory">{{localize "DS4.SpellCategory"}}</label>
<select id="data.spellCategory" name="data.spellCategory" data-type="String"> <select id="data.spellCategory" name="data.spellCategory" data-type="String">
{{#select data.spellCategory}} {{#select data.spellCategory}}
{{#each config.spellCategories as |value key|}} {{#each config.i18n.spellCategories as |value key|}}
<option value="{{key}}">{{value}}</option> <option value="{{key}}">{{value}}</option>
{{/each}} {{/each}}
{{/select}} {{/select}}

View file

@ -5,7 +5,7 @@
<label>{{localize "DS4.AttackType"}}</label> <label>{{localize "DS4.AttackType"}}</label>
<select name="data.attackType" data-type="String"> <select name="data.attackType" data-type="String">
{{#select data.attackType}} {{#select data.attackType}}
{{#each config.attackTypes as |value key|}} {{#each config.i18n.attackTypes as |value key|}}
<option value="{{key}}">{{value}}</option> <option value="{{key}}">{{value}}</option>
{{/each}} {{/each}}
{{/select}} {{/select}}

View file

@ -2,7 +2,7 @@
<label for="ctv">{{localize "DS4.RollDialogTargetLabel"}}</label> <label for="ctv">{{localize "DS4.RollDialogTargetLabel"}}</label>
<input id="ctv" data-type="Number" type="number" name="ctv" value="{{checkTargetValue}}" /> <input id="ctv" data-type="Number" type="number" name="ctv" value="{{checkTargetValue}}" />
<label for="gmmod">{{localize "DS4.RollDialogModifierLabel"}}</label> <label for="gmmod">{{localize "DS4.RollDialogModifierLabel"}}</label>
<input id="gmmod" data-type="Number" type="number" name="gmmod" value="0" /> <input id="gmmod" data-type="Number" type="number" name="gmmod" value="0" autofocus />
<label for="maxcoup">{{localize "DS4.RollDialogCoupLabel"}}</label> <label for="maxcoup">{{localize "DS4.RollDialogCoupLabel"}}</label>
<input id="maxcoup" data-type="Number" type="number" name="maxcoup" value="{{maxCritSuccess}}" /> <input id="maxcoup" data-type="Number" type="number" name="maxcoup" value="{{maxCritSuccess}}" />
<label for="minfumble">{{localize "DS4.RollDialogFumbleLabel"}}</label> <label for="minfumble">{{localize "DS4.RollDialogFumbleLabel"}}</label>
@ -10,7 +10,7 @@
<label for="visibility">{{localize "DS4.RollDialogVisibilityLabel"}}</label> <label for="visibility">{{localize "DS4.RollDialogVisibilityLabel"}}</label>
<select id="visibility" data-type="String"> <select id="visibility" data-type="String">
{{#select rollMode}} {{#select rollMode}}
{{#each config.chatVisibilities as |rollModeValue rollModeKey|}} {{#each config.i18n.chatVisibilities as |rollModeValue rollModeKey|}}
<option value="{{rollModeKey}}">{{rollModeValue}}</option> <option value="{{rollModeKey}}">{{rollModeValue}}</option>
{{/each}} {{/each}}
{{/select}} {{/select}}