2 Commits

Author SHA1 Message Date
b407f6e8c0 Migration complétée vers appv2
All checks were successful
Release Creation / build (release) Successful in 1m14s
2026-02-28 12:14:21 +01:00
aecc15d8b9 Migration complétée vers appv2 2026-02-28 12:14:01 +01:00
93 changed files with 5376 additions and 3195 deletions

View File

@@ -8,45 +8,56 @@ jobs:
build: build:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- run: echo "💡 The ${{ gitea.repository }} repository will cloned to the runner." - run: echo "💡 The ${{ gitea.repository }} repository will cloned to the runner."
#- uses: actions/checkout@v3 #- uses: actions/checkout@v3
- uses: RouxAntoine/checkout@v3.5.4 - uses: https://github.com/RouxAntoine/checkout@v3.5.4
# get part of the tag after the `v` # get part of the tag after the `v`
- name: Extract tag version number - name: Extract tag version number
id: get_version id: get_version
uses: battila7/get-version-action@v2 uses: https://github.com/battila7/get-version-action@v2
# Substitute the Manifest and Download URLs in the module.json # Substitute the Manifest and Download URLs in the module.json
- name: Substitute Manifest and Download Links For Versioned Ones - name: Substitute Manifest and Download Links For Versioned Ones
id: sub_manifest_link_version id: sub_manifest_link_version
uses: microsoft/variable-substitution@v1 uses: https://github.com/microsoft/variable-substitution@v1
with: with:
files: 'system.json' files: "system.json"
env: env:
version: ${{steps.get_version.outputs.version-without-v}} version: ${{steps.get_version.outputs.version-without-v}}
url: https://www.uberwald.me/gitea/${{gitea.repository}} url: https://www.uberwald.me/gitea/${{gitea.repository}}
manifest: https://www.uberwald.me/gitea/${{gitea.repository}}/releases/download/latest/system.json manifest: https://www.uberwald.me/gitea/public/fvtt-te-deum/releases/download/latest/system.json
download: https://www.uberwald.me/gitea/${{gitea.repository}}/releases/download/${{github.event.release.tag_name}}/fvtt-te-deum-${{github.event.release.tag_name}}.zip download: https://www.uberwald.me/gitea/public/fvtt-te-deum/releases/download/${{github.event.release.tag_name}}/fvtt-te-deum.zip
# Create a zip file with all files required by the module to add to the release # Create a zip file with all files required by the module to add to the release
- run: | - run: |
apt update -y apt update -y
apt install -y zip apt install -y zip
- run: zip -r ./fvtt-te-deum-${{github.event.release.tag_name}}.zip system.json template.json README.md LICENSE.txt assets/ fonts/ images/ lang/ modules/ styles/ packs/ templates/ te-deum.mjs - run: zip -r ./fvtt-te-deum.zip system.json README.md LICENSE.txt assets/ fonts/ images/ lang/ modules/ styles/ packs/ templates/
- name: setup go - name: setup go
uses: https://github.com/actions/setup-go@v4 uses: https://github.com/actions/setup-go@v4
with: with:
go-version: '>=1.20.1' go-version: ">=1.20.1"
- name: Use Go Action - name: Use Go Action
id: use-go-action id: use-go-action
uses: https://gitea.com/actions/release-action@main uses: https://gitea.com/actions/release-action@main
with: with:
files: |- files: |-
./fvtt-te-deum-${{github.event.release.tag_name}}.zip ./fvtt-te-deum.zip
system.json system.json
api_key: '${{secrets.ALLOW_PUSH_RELEASE}}' api_key: "${{secrets.ALLOW_PUSH_RELEASE}}"
- name: Publish to Foundry server
uses: https://github.com/djlechuck/foundryvtt-publish-package-action@v1
with:
token: ${{ secrets.FOUNDRYVTT_RELEASE_TOKEN }}
id: 'fvtt-te-deum'
version: ${{github.event.release.tag_name}}
manifest: 'https://www.uberwald.me/gitea/public/fvtt-te-deum/releases/download/latest/system.json'
notes: 'https://www.uberwald.me/gitea/${{gitea.repository}}/releases/download/${{github.event.release.tag_name}}/fvtt-te-deum.zip'
compatibility-minimum: '13'
compatibility-verified: '13'

469
less/actor-sheet.less Normal file
View File

@@ -0,0 +1,469 @@
.editor {
border: 2;
height: 100%;
padding: 0 3px;
}
.medium-editor {
border: 2;
height: 240px;
max-height: 240px;
overflow-y: auto;
overflow-x: hidden;
padding: 0 3px;
prose-mirror, .editor, .editor-content, .ProseMirror {
overflow: hidden;
height: auto;
}
}
.small-editor {
border: 2;
height: 120px;
max-height: 120px;
overflow-y: auto;
overflow-x: hidden;
padding: 0 3px;
prose-mirror, .editor, .editor-content, .ProseMirror {
overflow: hidden;
height: auto;
}
}
.questionnaire-reponse {
max-width: 42rem;
margin-left: 1rem;
}
.questionnaire-element {
margin-top: 0.5rem;
}
// Style unifié pour tous les inputs et selects (fiches acteur, item, roll dialogs)
.fvtt-te-deum {
input:not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="submit"]):not([type="image"]):not([type="file"]),
select {
background: rgba(248, 245, 238, 0.95);
color: rgba(19, 18, 18, 0.95);
border: 1px solid rgba(139, 115, 85, 0.35);
border-radius: 3px;
padding: 0.15rem 0.3rem;
transition: border-color 0.2s ease, box-shadow 0.2s ease;
&:hover {
border-color: rgba(139, 115, 85, 0.65);
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12);
}
&:focus {
outline: none;
border-color: rgba(139, 115, 85, 0.85);
box-shadow: 0 0 0 2px rgba(139, 115, 85, 0.2);
}
&:disabled {
color: rgba(19, 18, 18, 0.4);
background: rgba(220, 216, 205, 0.6);
border-color: rgba(139, 115, 85, 0.15);
}
}
textarea {
background: rgba(248, 245, 238, 0.95);
color: rgba(19, 18, 18, 0.95);
border: 1px solid rgba(139, 115, 85, 0.35);
border-radius: 3px;
padding: 0.2rem 0.4rem;
transition: border-color 0.2s ease, box-shadow 0.2s ease;
&:hover {
border-color: rgba(139, 115, 85, 0.65);
}
&:focus {
outline: none;
border-color: rgba(139, 115, 85, 0.85);
box-shadow: 0 0 0 2px rgba(139, 115, 85, 0.2);
}
}
}
.fvtt-te-deum.window-app .window-content,
.fvtt-te-deum.application .window-content,
.fvtt-te-deum.window-app.sheet .window-content .sheet-body,
.fvtt-te-deum.application.sheet .window-content .sheet-body {
font-size: 0.8rem;
background: rgba(226, 226, 222, 0.95);
color: rgba(19, 18, 18, 0.95);
}
// Améliorations pour les fiches d'items
.item-form {
.sheet-header {
background: linear-gradient(
135deg,
rgba(226, 226, 222, 0.95) 0%,
rgba(240, 235, 225, 0.9) 100%
);
padding: 0.8rem;
border-radius: 8px;
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.15);
border: 1px solid rgba(139, 115, 85, 0.3);
margin-bottom: 0.5rem;
h1.charname input {
// Voir règles haute-spécificité charname ci-dessous
}
}
.sheet-body {
ul {
list-style: none;
padding: 0;
margin: 0;
li.flexrow {
background: rgba(255, 255, 255, 0.3);
padding: 0.4rem 0.6rem;
margin: 0.3rem 0;
border-radius: 4px;
border-left: 3px solid rgba(139, 115, 85, 0.3);
transition: all 0.2s ease;
&:hover {
background: rgba(255, 255, 255, 0.5);
border-left-color: rgba(139, 115, 85, 0.6);
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
}
}
}
h3 {
background: linear-gradient(
135deg,
rgba(196, 186, 166, 0.6) 0%,
rgba(226, 226, 222, 0.5) 100%
);
padding: 0.4rem 0.6rem;
margin: 0.8rem 0 0.4rem 0;
border-radius: 4px;
border-left: 4px solid rgba(139, 115, 85, 0.6);
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
font-family: MailartRubberstamp;
font-size: 1.1rem;
color: #3d3a2e;
}
input[type="checkbox"] {
width: 18px;
height: 18px;
cursor: pointer;
}
}
}
// Champ "name" — règles haute-spécificité (spec 0,6,2 / 0,7,2) pour surcharger les règles génériques d'input
// Fiche acteur : font-size 3rem
.fvtt-te-deum.application .window-content .sheet-header h1.charname input[name="name"],
.fvtt-te-deum.window-app .window-content .sheet-header h1.charname input[name="name"] {
font-family: "GreatPrimer";
font-size: 3rem;
background: transparent;
border: none;
border-bottom: 2px solid rgba(139, 115, 85, 0.4);
color: rgba(50, 35, 15, 0.95);
width: 100%;
height: 100%;
margin: 0;
letter-spacing: 0.05em;
transition: border-color 0.2s ease;
&:hover {
border-width: 2px;
border-color: rgba(139, 115, 85, 0.7);
}
&:focus {
border-bottom-color: rgba(139, 115, 85, 0.9);
outline: none;
}
}
// Fiche item : même style mais font-size plus petit
.fvtt-te-deum.application .window-content .item-form .sheet-header h1.charname input[name="name"],
.fvtt-te-deum.window-app .window-content .item-form .sheet-header h1.charname input[name="name"] {
font-size: 1.6rem;
height: auto;
}
.fvtt-te-deum .sheet-body {
padding: 0.25rem 0.5rem;
&:after {
content: "";
display: block;
clear: both;
}
}
.fvtt-te-deum nav {
&.tabs {
.item {
z-index: 2;
position: relative;
opacity: 1;
color: rgba(29, 28, 31);
padding: 0 0.25rem;
&:after {
content: "";
position: absolute;
top: 0;
right: 0;
height: 2rem;
width: 1px;
}
}
}
}
.select-diff {
display: inline-block;
text-align: left;
width: 50px;
}
.fvtt-te-deum.window-app.sheet .window-content .carac-value,
.fvtt-te-deum.application.sheet .window-content .carac-value,
.fvtt-te-deum.window-app.sheet .window-content .competence-xp,
.fvtt-te-deum.application.sheet .window-content .competence-xp {
margin: 0.05rem;
flex-basis: 3rem;
text-align: center;
}
.fvtt-te-deum h1,
.fvtt-te-deum h2,
.fvtt-te-deum h3,
.fvtt-te-deum h4 {
font-weight: bold;
color: rgba(19, 18, 18, 0.95);
}
.fvtt-te-deum .malus-sante {
font-size: 0.88rem;
font-weight: normal;
}
.fvtt-te-deum .malus-sante-active {
color: rgba(200, 80, 10, 0.95);
font-weight: bold;
}
.fvtt-te-deum ul,
.fvtt-te-deum ol {
margin: 0;
padding: 0;
}
.fvtt-te-deum ul,
.fvtt-te-deum li {
list-style-type: none;
}
.header-fields {
li {
margin: 0;
padding: 0;
}
}
.alterne-list {
& > .list-item {
&:hover {
background: rgba(226, 226, 222, 0.4);
transform: translateX(2px);
}
&:nth-child(even) {
background: rgba(240, 235, 225, 0.3);
}
&:nth-child(odd) {
background: rgba(250, 245, 235, 0.2);
}
}
}
.specialisation-label {
font-size: 0.8rem;
}
.carac-label,
.attr-label {
font-weight: bold;
}
.list-item {
margin: 0.125rem;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
border-radius: 0.3rem;
padding: 0.3rem 0.4rem;
flex: 1 1 5rem;
border: 1px solid rgba(139, 115, 85, 0.15);
transition: all 0.2s ease;
&:hover {
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.15);
border-color: rgba(139, 115, 85, 0.3);
background: rgba(255, 255, 255, 0.3);
}
}
.list-item-shadow {
background: linear-gradient(
135deg,
rgba(170, 168, 167, 0.25) 0%,
rgba(200, 195, 185, 0.2) 100%
);
flex-grow: 0;
flex-wrap: nowrap;
justify-content: flex-start;
border-left: 3px solid rgba(139, 115, 85, 0.3);
}
.list-item-shadow2 {
background: linear-gradient(
135deg,
rgba(87, 60, 32, 0.2) 0%,
rgba(120, 90, 60, 0.15) 100%
);
flex-grow: 0;
flex-wrap: nowrap;
justify-content: flex-start;
border-left: 3px solid rgba(87, 60, 32, 0.4);
}
.item-display-show {
display: block;
}
.item-display-hide {
display: none;
}
.item-quantite {
margin-left: 0.5rem;
}
.list-item-margin1 {
margin-left: 1rem;
}
.list-item-margin2 {
margin-left: 2rem;
}
.list-item-margin3 {
margin-left: 3rem;
}
.list-item-margin4 {
margin-left: 4rem;
}
.sheet-competence-img {
width: 24px;
max-width: 24px;
height: 24px;
max-height: 24px;
flex-grow: 0;
margin-right: 0.25rem;
border-radius: 3px;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.15);
border: 1px solid rgba(139, 115, 85, 0.3);
}
.competence-column {
flex-direction: column;
align-content: flex-start;
justify-content: flex-start;
flex-grow: 0;
flex-basis: 1;
}
.competence-header {
align-content: flex-start;
justify-content: flex-start;
font-weight: bold;
flex-grow: 0;
}
.comp-li {
max-width: 8rem;
width: 8rem;
}
.description-label {
flex-grow: 2;
margin-left: 4px;
}
.status-header-label {
margin-left: 2px;
}
.roll-dialog-label {
margin: 4px 0;
min-width: 96px;
}
.short-label {
flex-grow: 1;
}
.keyword-label {
font-size: 0.85rem;
}
.item-sheet-label {
flex-grow: 1;
}
.item-text-long-line {
flex-grow: 3;
}
.score-label {
flex-grow: 2;
align-content: center;
}
.attribut-value,
.carac-value {
flex-grow: 0;
flex-basis: 64px;
margin-right: 4px;
margin-left: 4px;
}
.sante-value,
.competence-value {
flex-grow: 0;
flex-basis: 2rem;
margin-right: 0.25rem;
margin-left: 0.25rem;
}
.description-value {
flex-grow: 0;
flex-basis: 4rem;
margin-right: 0.25rem;
margin-left: 0.25rem;
}
.small-label {
margin-top: 5px;
}

235
less/base.less Normal file
View File

@@ -0,0 +1,235 @@
.fvtt-te-deum.window-app,
.fvtt-te-deum.application {
text-align: justify;
font-size: 16px;
letter-spacing: 1px;
&.sheet {
.window-content {
margin: 0;
padding: 0;
font-family: "GreatPrimer";
.sheet-header {
color: rgba(19, 18, 18, 0.95);
background: rgba(226, 226, 222, 0.95);
}
.tooltip {
&:hover {
.tooltiptext {
top: 2rem;
left: 2rem;
margin: 0;
padding: 0.25rem;
}
}
}
}
}
}
.fvtt-te-deum.sheet header.sheet-header h1 input,
.window-app .window-header,
.application .window-header,
#actors .directory-list,
#navigation #scene-list .scene.nav-item {
font-size: 1rem;
}
.fvtt-te-deum.sheet {
nav {
&.sheet-tabs,
&.tabs {
font-size: 0.8rem;
font-size: 1.2rem;
font-weight: bold;
height: 3rem;
flex: 0 0 3rem;
margin: 0;
padding: 0 0 0 0.25rem;
text-align: center;
line-height: 1.5rem;
border-top: 0 none;
border-bottom: 0 none;
background:
linear-gradient(rgba(226, 226, 222, 0.5), rgba(226, 226, 222, 0.5)),
url("../images/ui/frise_bottom_01.webp");
background-repeat: no-repeat;
background-size: 100% 100%;
z-index: 1;
}
}
header {
&.sheet-header {
.profile-img {
-o-object-fit: cover;
object-fit: cover;
-o-object-position: 50% 0;
object-position: 50% 0;
margin: 0.5rem 0 0.5rem 0.5rem;
padding: 0;
}
.flex-compteurs {
text-align: right;
}
.resource-content {
width: 2rem;
}
}
}
.tab[data-tab] {
padding: 0;
}
li {
margin: 0.2rem;
padding: 0.15rem;
}
}
.fvtt-te-deum.window-app input,
.fvtt-te-deum.application input,
.fvtt-te-deum .item-form,
.fvtt-te-deum.sheet header.sheet-header .flex-group-center.flex-compteurs,
.fvtt-te-deum.sheet header.sheet-header .flex-group-center.flex-fatigue,
.fvtt-te-deum select,
.fvtt-te-deum button,
.item-checkbox,
#sidebar,
#players,
#navigation #nav-toggle {
font-size: 0.8rem;
}
.window-header {
background: rgba(0, 0, 0, 0.75);
}
.strong-text {
font-weight: bold;
}
.fvtt-te-deum .tabs .item.active,
.fvtt-te-deum .blessures-list li ul li:first-child:hover,
.fvtt-te-deum a:hover {
text-shadow: 1px 0px 0px #ff6600;
}
.rollable:hover,
.rollable:focus {
color: #000;
text-shadow: 0 0 10px red;
cursor: pointer;
}
li.folder > .folder-header h3 {
color: #aaa;
}
.fvtt-te-deum table {
border: 1px solid #7a7971;
}
.grid,
.grid-2col {
display: grid;
grid-column: span 2 / span 2;
grid-template-columns: repeat(2, minmax(0, 1fr));
grid-gap: 10px;
grid-gap: 10px;
gap: 10px;
margin: 10px 0;
padding: 0;
}
.grid-3col {
grid-column: span 3 / span 3;
grid-template-columns: repeat(3, minmax(0, 1fr));
}
.grid-4col {
grid-column: span 4 / span 4;
grid-template-columns: repeat(4, minmax(0, 1fr));
}
.grid-5col {
grid-column: span 5 / span 5;
grid-template-columns: repeat(5, minmax(0, 1fr));
}
.grid-6col {
grid-column: span 5 / span 5;
grid-template-columns: repeat(5, minmax(0, 1fr));
}
.grid-7col {
grid-column: span 7 / span 7;
grid-template-columns: repeat(7, minmax(0, 1fr));
}
.grid-8col {
grid-column: span 8 / span 8;
grid-template-columns: repeat(8, minmax(0, 1fr));
}
.grid-9col {
grid-column: span 9 / span 9;
grid-template-columns: repeat(9, minmax(0, 1fr));
}
.grid-10col {
grid-column: span 10 / span 10;
grid-template-columns: repeat(10, minmax(0, 1fr));
}
.grid-11col {
grid-column: span 11 / span 11;
grid-template-columns: repeat(11, minmax(0, 1fr));
}
.grid-12col {
grid-column: span 12 / span 12;
grid-template-columns: repeat(12, minmax(0, 1fr));
}
.flex-group-center,
.flex-group-left,
.flex-group-right {
justify-content: center;
align-items: center;
text-align: center;
padding: 5px;
}
.flex-group-left {
justify-content: flex-start;
text-align: left;
}
.flex-group-right {
justify-content: flex-end;
text-align: right;
}
.flex-center {
align-items: center;
justify-content: center;
text-align: center;
}
.table-create-actor {
font-size: 0.8rem;
}
.flex-between {
justify-content: space-between;
}
.flex-shrink {
flex: "flex-shrink";
}

581
less/chat.less Normal file
View File

@@ -0,0 +1,581 @@
.chat-message-header {
background: linear-gradient(
135deg,
rgba(226, 226, 222, 0.95) 0%,
rgba(196, 186, 166, 0.9) 100%
);
font-size: 0.9rem;
min-height: 26px;
text-align: center;
vertical-align: middle;
display: flex;
align-items: center;
justify-content: center;
border-bottom: 2px solid rgba(139, 115, 85, 0.6);
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.15);
padding: 0.1rem 0.3rem;
border-radius: 6px 6px 0 0;
}
.chat-message .message-header .flavor-text,
.chat-message .message-header .whisper-to {
font-size: 0.9rem;
}
.chat-result-text {
font-weight: bold;
font-family: GreatPrimer;
font-size: 1.1rem;
color: rgba(80, 50, 15, 0.95);
padding: 0 0 0.1rem 0;
line-height: 1.3;
border-bottom: 1px solid rgba(139, 115, 85, 0.4);
display: block;
margin-bottom: 0.2rem;
letter-spacing: 0.03em;
}
.chat-actor-name {
font-weight: bold;
font-family: GreatPrimer;
font-size: 1.1rem;
color: rgba(80, 50, 15, 0.95);
line-height: 1;
letter-spacing: 0.03em;
margin: 0;
padding: 0;
}
.chat-actor-name-opposition {
font-weight: bold;
font-family: GreatPrimer;
font-size: 1.1rem;
color: rgba(80, 50, 15, 0.95);
padding: 0.1rem 0.3rem;
letter-spacing: 0.03em;
}
.chat-result-success {
color: #2d5016;
background: linear-gradient(
135deg,
rgba(144, 238, 144, 0.3),
rgba(107, 186, 107, 0.25)
);
padding: 0.25rem 0.6rem;
border-radius: 4px;
border-left: 3px solid #4a7c2c;
display: inline-block;
margin: 0.15rem 0;
box-shadow: 0 1px 3px rgba(45, 80, 22, 0.2);
font-weight: bold;
}
.chat-result-failure {
color: #7a1a1a;
background: linear-gradient(
135deg,
rgba(255, 160, 160, 0.3),
rgba(205, 120, 120, 0.25)
);
padding: 0.25rem 0.6rem;
border-radius: 4px;
border-left: 3px solid #a82020;
display: inline-block;
margin: 0.15rem 0;
box-shadow: 0 1px 3px rgba(122, 26, 26, 0.2);
font-weight: bold;
}
.chat-img {
width: 64px;
height: 64px;
}
.chat-command-img {
border: 0px;
width: 32px;
height: 32px;
transition:
transform 0.2s ease,
box-shadow 0.2s ease;
border-radius: 4px;
&:hover {
transform: scale(1.1);
box-shadow: 0 3px 8px rgba(255, 102, 0, 0.4);
}
}
.chat-result-column {
min-width: 70%;
width: 70%;
}
.roll-dialog-header {
background: linear-gradient(
135deg,
rgba(226, 226, 222, 0.95) 0%,
rgba(196, 186, 166, 0.9) 100%
);
min-height: 48px;
padding: 0.4rem 0.6rem;
border-radius: 6px 6px 0 0;
border-bottom: 2px solid rgba(139, 115, 85, 0.6);
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.15);
display: flex;
align-items: center;
justify-content: center;
gap: 0.5rem;
.actor-icon {
width: 40px;
height: 40px;
border-radius: 50%;
border: 2px solid rgba(139, 115, 85, 0.5);
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);
}
.dialog-roll-title {
font-family: GreatPrimer;
font-size: 1.1rem;
margin: 0;
color: #3d3a2e;
text-shadow: 1px 1px 1px rgba(255, 255, 255, 0.5);
}
}
.actor-icon {
width: 28px;
height: 28px;
padding: 1px;
border-radius: 50%;
border: 2px solid rgba(139, 115, 85, 0.5);
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);
flex-shrink: 0;
margin-right: 0.4rem;
}
.padding-dice {
padding-top: 0.2rem;
padding-bottom: 0.2rem;
}
.dice-image {
box-sizing: border-box;
border: none;
border-radius: 0;
max-width: 100%;
}
.dice-image-reroll {
background-color: rgba(115, 224, 115, 0.25);
border-color: #011d33;
box-sizing: border-box;
border: 1px;
border-radius: 0%;
max-width: 100%;
}
.chat-dice {
width: 15%;
height: 15%;
font-size: 15px;
padding: 10px;
padding-bottom: 20px;
padding-top: 0.2rem;
padding-bottom: 0.2rem;
}
.div-center {
align-self: center;
}
.chat-message {
background: rgba(240, 235, 225, 0.95);
font-size: 0.9rem;
border-radius: 8px;
box-shadow: 0 3px 8px rgba(0, 0, 0, 0.15);
border: 1px solid rgba(139, 115, 85, 0.3);
&.whisper {
background: rgba(220, 220, 210, 0.85);
border: 2px solid #545469;
box-shadow: 0 3px 10px rgba(84, 84, 105, 0.3);
}
.chat-icon {
border: 0;
padding: 2px 6px 2px 2px;
float: left;
width: 64px;
height: 64px;
}
}
.ability-icon {
border: 0;
padding: 2px 2px 2px 2px;
max-width: 32px;
max-height: 32px;
width: auto;
height: auto;
}
.small-ability-icon {
border: 0;
padding: 2px 2px 2px 2px;
max-width: 16px;
max-height: 16px;
width: auto;
height: auto;
}
.combat-icon {
border: 0;
padding: 2px 2px 2px 2px;
max-width: 24px;
max-height: 24px;
width: auto;
height: auto;
}
#sidebar-tabs {
flex: 0 0 32px;
box-sizing: border-box;
margin: 0 0 5px;
border-bottom: 1px solid rgba(0, 0, 0, 0);
box-shadow: inset 0 0 2rem rgba(0, 0, 0, 0.5);
& > .item {
&.active {
border: 1px solid rgba(114, 98, 72, 1);
background: rgba(30, 25, 20, 0.75);
box-shadow: 0 0 6px inset rgba(114, 98, 72, 1);
}
}
}
#controls .scene-control,
#controls .control-tool {
box-shadow: 0 0 3px #000;
margin: 0 0 8px;
border-radius: 0;
background: rgba(30, 25, 20, 1);
background-origin: padding-box;
border-image-width: 4px;
border-image-outset: 0px;
}
#controls .scene-control.active,
#controls .control-tool.active,
#controls .scene-control:hover,
#controls .control-tool:hover {
background: rgba(72, 46, 28, 1);
background-origin: padding-box;
border-image-width: 4px;
border-image-outset: 0px;
box-shadow: 0 0 3px #ff6400;
}
#hotbar {
#action-bar {
#macro-list {
border: 1px solid rgba(72, 46, 28, 1);
box-shadow: 2px 2px 5px #000000;
}
.macro {
border-image: url(img/ui/bg_control.jpg) 21 repeat;
border-image-slice: 6 6 6 6 fill;
border-image-width: 6px 6px 6px 6px;
border-image-outset: 0px 0px 0px 0px;
border-radius: 0px;
}
}
.bar-controls {
background: rgba(30, 25, 20, 1);
border: 1px solid rgba(72, 46, 28, 1);
}
}
#players {
border-image-width: 4px;
border-image-outset: 0px;
background: rgba(30, 25, 20, 1);
}
#navigation {
#scene-list {
.scene {
&.nav-item {
background: rgba(30, 25, 20, 1);
background-origin: padding-box;
border-image-width: 4px;
border-image-outset: 0px;
&.active {
background: rgba(72, 46, 28, 1);
}
}
}
}
#nav-toggle {
background: rgba(30, 25, 20, 1);
background-origin: padding-box;
border-image-width: 4px;
border-image-outset: 0px;
}
}
#navigation #scene-list .scene.view,
#navigation #scene-list .scene.context {
background: rgba(72, 46, 28, 1);
background-origin: padding-box;
border-image-width: 4px;
border-image-outset: 0px;
box-shadow: 0 0 3px #ff6400;
}
.chat-card-button {
box-shadow: inset 0px 1px 0px 0px #a6827e;
background: linear-gradient(
to bottom,
rgba(33, 55, 74, 0.98824) 5%,
rgba(21, 40, 51, 0.67059) 100%
);
background-color: rgba(125, 93, 59, 0);
border-radius: 3px;
border: 2px ridge #846109;
display: inline-block;
cursor: pointer;
color: #ffffff;
font-size: 0.8rem;
padding: 4px 12px 0px 12px;
text-decoration: none;
text-shadow: 0px 1px 0px #4d3534;
position: relative;
margin: 2px;
&:hover {
background: linear-gradient(to bottom, #800000 5%, #3e0101 100%);
background-color: red;
}
&:active {
position: relative;
top: 1px;
}
}
.plus-minus-button {
box-shadow: inset 0px 1px 0px 0px #a6827e;
background: linear-gradient(
to bottom,
rgba(33, 55, 74, 0.98824) 5%,
rgba(21, 40, 51, 0.67059) 100%
);
background-color: rgba(125, 93, 59, 0);
border-radius: 2px;
border: 1px ridge #846109;
display: inline-block;
cursor: pointer;
color: #ffffff;
margin: 2px 2px 2px 2px;
padding: 2px 2px 2px 2px;
text-decoration: none;
text-shadow: 0px 1px 0px #4d3534;
position: relative;
margin: 0px;
}
.plus-minus-button:hover,
.chat-card-button:hover {
background: linear-gradient(to bottom, #800000 5%, #3e0101 100%);
background-color: red;
}
.plus-minus-button:active,
.chat-card-button:active {
position: relative;
top: 1px;
}
.plus-minus {
font-size: 0.9rem;
font-weight: bold;
}
.ul-level1 {
padding-left: 2rem;
}
#pause {
font-size: 2rem;
& > h3 {
color: #ccc;
}
& > img {
content: url(../images/ui/logo_tedeum_pause.webp);
height: 200px;
width: 200px;
top: -200px;
left: calc(50% - 132px);
}
}
#logo {
content: url(../images/ui/logo_tedeum_pause.webp);
width: 100px;
height: 60px;
}
.dice-cell {
padding-left: 12px;
padding-right: 12px;
width: 60px;
text-align: center;
}
.dice-formula,
.dice-total {
height: 54px;
position: relative;
}
// Améliorations esthétiques pour les messages de chat
.chat-roll-details {
background: rgba(255, 255, 255, 0.4);
border-radius: 4px;
padding: 0.4rem 0.5rem;
margin: 0.25rem 0;
border: 1px solid rgba(139, 115, 85, 0.25);
ul {
margin: 0;
padding-left: 0.8rem;
li {
padding: 0.05rem 0;
line-height: 1.25;
strong {
color: rgba(70, 67, 49, 0.9);
}
}
}
}
.chat-roll-result-section {
background: linear-gradient(
135deg,
rgba(255, 250, 240, 0.6),
rgba(245, 240, 230, 0.5)
);
border-radius: 4px;
padding: 0.35rem;
margin: 0.2rem 0;
border: 2px solid rgba(139, 115, 85, 0.3);
box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1);
.chat-total-result {
font-size: 1rem;
font-weight: bold;
color: #3d3a2e;
text-align: center;
padding: 0.25rem;
background: rgba(226, 226, 222, 0.5);
border-radius: 4px;
margin-bottom: 0.25rem;
text-shadow: 1px 1px 2px rgba(255, 255, 255, 0.5);
}
}
.chat-dice-formula {
display: inline-block;
background: rgba(139, 115, 85, 0.15);
padding: 0.15rem 0.4rem;
border-radius: 3px;
font-family: monospace;
font-size: 0.9em;
border: 1px solid rgba(139, 115, 85, 0.3);
color: #5a4a3a;
font-weight: 600;
}
.chat-difficulty-badge {
display: inline-block;
background: linear-gradient(
135deg,
rgba(180, 160, 130, 0.4),
rgba(160, 140, 110, 0.35)
);
padding: 0.15rem 0.5rem;
border-radius: 10px;
font-weight: bold;
border: 1px solid rgba(139, 115, 85, 0.4);
color: #4a3a2a;
font-size: 0.85em;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.15);
}
.chat-info-badge {
display: inline-block;
background: rgba(100, 149, 237, 0.15);
padding: 0.15rem 0.4rem;
border-radius: 3px;
border-left: 2px solid rgba(70, 130, 180, 0.6);
margin: 0.08rem 0;
font-size: 0.8em;
color: #2c4a6a;
}
.chat-warning-badge {
display: inline-block;
background: rgba(255, 200, 100, 0.2);
padding: 0.15rem 0.4rem;
border-radius: 3px;
border-left: 2px solid rgba(218, 165, 32, 0.7);
margin: 0.08rem 0;
font-size: 0.8em;
color: #7a5a1a;
}
.chat-actions-bar {
display: flex;
justify-content: center;
gap: 0.3rem;
padding: 0.4rem;
background: rgba(226, 226, 222, 0.4);
border-top: 1px solid rgba(139, 115, 85, 0.25);
border-radius: 0 0 6px 6px;
margin-top: 0.25rem;
a {
transition: all 0.2s ease;
&:hover {
transform: translateY(-2px);
}
}
}
.chat-negative-dice {
display: inline-block;
background: linear-gradient(
135deg,
rgba(255, 100, 100, 0.2),
rgba(220, 80, 80, 0.15)
);
padding: 0.2rem 0.5rem;
border-radius: 4px;
border: 2px solid rgba(178, 34, 34, 0.4);
font-weight: bold;
color: #8b0000;
margin: 0.15rem 0;
box-shadow: 0 1px 3px rgba(178, 34, 34, 0.2);
}

235
less/dialogs.less Normal file
View File

@@ -0,0 +1,235 @@
.te-deum-roll-dialog {
.window-header {
border-radius: 10px 10px 0% 0%;
}
.window-content {
border-radius: 0% 0% 10px 10px;
}
}
.skill-roll-dialog {
background: linear-gradient(
135deg,
rgba(240, 235, 225, 0.98) 0%,
rgba(250, 245, 235, 0.95) 100%
);
border-radius: 8px;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);
border: 1px solid rgba(139, 115, 85, 0.3);
overflow: hidden;
.flexcol {
padding: 0.6rem 0.8rem;
gap: 0.4rem;
}
.flexrow {
margin: 0.3rem 0;
padding: 0.4rem 0.5rem;
background: rgba(255, 255, 255, 0.4);
border-radius: 4px;
border-left: 3px solid rgba(139, 115, 85, 0.3);
align-items: center;
gap: 0.5rem;
transition: all 0.2s ease;
&:hover {
background: rgba(255, 255, 255, 0.6);
border-left-color: rgba(139, 115, 85, 0.6);
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
}
}
.roll-dialog-label {
font-family: GreatPrimer;
font-size: 0.85rem;
font-weight: 600;
color: #3d3a2e;
min-width: 140px;
&:first-child {
color: rgba(70, 67, 49, 0.9);
font-weight: 700;
}
}
input[type="checkbox"] {
width: 18px;
height: 18px;
cursor: pointer;
}
div {
margin-top: 4px;
margin-bottom: 4px;
}
.sheet-footer {
padding: 0.5rem 0.8rem;
gap: 0.5rem;
border-top: 1px solid rgba(139, 115, 85, 0.3);
margin-top: 0.5rem;
button {
flex: 1;
padding: 0.4rem 0.8rem;
border-radius: 4px;
font-family: "GreatPrimer";
font-size: 0.9rem;
cursor: pointer;
border: 1px solid rgba(139, 115, 85, 0.5);
background: linear-gradient(135deg, rgba(196, 186, 166, 0.8) 0%, rgba(226, 226, 222, 0.9) 100%);
color: rgba(50, 35, 15, 0.95);
transition: all 0.2s ease;
&:hover {
background: linear-gradient(135deg, rgba(196, 186, 166, 1) 0%, rgba(210, 205, 195, 1) 100%);
border-color: rgba(139, 115, 85, 0.8);
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.15);
}
}
}
}
.confront-dice {
border-width: 0px;
}
.bonus-spec {
max-width: 48px;
}
.confront-bonus-container {
position: relative;
flex-grow: 1;
text-align: center;
color: black;
}
.pool-list {
align-items: center;
justify-content: center;
}
.corps-combat-block {
position: relative;
width: 600px;
height: 600px;
}
.silhouette-combat-picture {
width: 250px;
max-width: 250px;
border: 0;
}
.silhouette-combat-block {
position: absolute;
background: white;
border-color: darkgray;
border-style: ridge;
border: 1;
width: 180px;
min-height: 84px;
height: auto;
margin: 0 auto;
font-size: 0.8rem;
align-self: center;
overflow: visible;
}
.silhouette-combat-space {
width: 60px;
min-width: 60px;
}
.center-content {
display: flex;
justify-content: center;
align-items: center;
}
.chat-message .message {
font-family: "GreatPrimer";
font-size: 0.9rem;
}
.fvtt-te-deum-character-creator {
/*background: rgba(226, 226, 222, 0.95);*/
font-family: "GreatPrimer";
font-size: 0.9rem;
.field-title {
font-weight: bold;
}
.form-group label {
color: rgba(30, 25, 15, 0.9);
}
.status-section {
display: block;
max-width: 34rem;
}
.creator-finished-section {
display: block;
max-width: 34rem;
text-align: center;
margin-bottom: 1rem;
}
.stage-main-details {
text-align: center;
margin-top: 1rem;
}
}
.grace-texte {
margin-top: 1rem;
}
.chat-welcome {
text-align: center;
}
.item-name-label {
min-width: 12rem;
}
.compendium-sidebar .directory-item.compendium.locked .compendium-name {
background: rgba(0, 0, 0, 0.1);
}
.compendium-sidebar .directory-item.compendium .compendium-name {
background: rgba(0, 0, 0, 0.1);
}
.compendium-sidebar .directory-item.compendium:hover .compendium-name {
text-shadow: 0 0 8px var(--color-shadow-primary);
background: rgba(0, 0, 0, 0.9);
}
.compendium-sidebar .directory-item.compendium .compendium-footer .source {
display: inline-block;
font-size: var(--font-size-12);
padding: 1px 0.5rem 0 0.25rem;
border-radius: 0 3px 0 0;
background: rgba(0, 0, 0, 0.1);
}
.tedeum-create-character {
align-self: anchor-center;
}
.message-chat-center {
text-align: center;
}
.welcome-message-h3 {
font-size: 1.2rem;
text-align: center;
margin-bottom: 0.5rem;
color: darkred;
}

414
less/items.less Normal file
View File

@@ -0,0 +1,414 @@
.padd-right {
margin-right: 8px;
}
.padd-left {
margin-left: 8px;
}
.fortune-row {
flex-wrap: nowrap;
align-items: center;
gap: 0.4rem;
padding: 0.3rem 0.5rem;
margin-bottom: 0.5rem;
label {
flex: 0 0 auto;
min-width: unset;
font-weight: 600;
color: rgba(70, 67, 49, 0.9);
}
input {
flex: 0 0 auto;
}
}
.stack-left {
align-items: center;
flex-shrink: 1;
flex-grow: 0;
}
.packed-left {
white-space: nowrap;
flex-grow: 0;
}
.input-numeric-short {
width: 52px;
max-width: 52px;
flex-grow: 0;
flex-shrink: 0;
flex-basis: 52px;
margin-right: 0.15rem;
margin-left: 0.15rem;
}
.abilities-table {
align-content: flex-start;
}
.tokenhudext {
display: flex;
flex: 0 !important;
font-weight: 600;
&.left {
justify-content: flex-start;
flex-direction: column;
position: absolute;
top: 2.75rem;
right: 4rem;
}
&.right {
justify-content: flex-start;
flex-direction: column;
position: absolute;
top: 2.75rem;
left: 4rem;
}
}
.control-icon {
&.tokenhudicon {
width: -moz-fit-content;
width: fit-content;
height: -moz-fit-content;
height: fit-content;
min-width: 6rem;
flex-basis: auto;
padding: 0;
line-height: 1rem;
margin: 0.25rem;
&.right {
margin-left: 8px;
}
}
}
#token-hud {
.status-effects {
&.active {
z-index: 2;
}
}
}
.token-sheet {
.window-content {
.flexcol {
.sheet-tabs {
font-size: 0.8rem;
}
}
}
}
.item-checkbox {
height: 25px;
border: 1px solid rgba(115, 105, 83, 0.65098);
border-left: none;
font-weight: 500;
font-size: 1rem;
color: black;
padding-top: 5px;
margin-right: 0px;
width: 45px;
position: relative;
left: 0px;
text-align: center;
}
.skill-label {
font-size: 0.7rem;
}
.skill-good-checkbox {
max-height: 10px;
max-width: 10px;
}
.flex-actions-bar {
flex-grow: 2;
}
#sidebar {
font-size: 1rem;
background-color: #f5f5f5;
background-position: 0px 35px;
background-repeat: no-repeat;
background: rgba(226, 226, 222, 0.95);
color: rgba(19, 18, 18, 0.95);
&.collapsed {
height: 470px !important;
}
#sidebar-tabs {
i {
display: inline-block;
background-position: center;
background-size: cover;
text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.75);
}
}
}
#sidebar-tabs > .collapsed,
#chat-controls .chat-control-icon {
color: rgba(19, 18, 18, 0.95);
text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.75);
}
.sidebar-tab {
.directory-list {
.entity {
border-top: 1px rgba(0, 0, 0, 0.25);
border-bottom: 0 none;
padding: 0.25rem 0;
&:hover {
background: rgba(0, 0, 0, 0.05);
cursor: pointer;
}
}
}
}
.status-small-label {
font-size: 0.65rem;
}
.no-grow {
flex-grow: 1;
max-width: 32px;
}
.status-col-name {
max-width: 72px;
}
.img-no-border {
max-width: 48px;
max-height: 48px;
border: 0px;
}
.items-title-bg {
margin-top: 6px;
color: rgba(19, 18, 18, 0.95);
background: linear-gradient(
135deg,
rgba(196, 186, 166, 0.6) 0%,
rgba(226, 226, 222, 0.5) 100%
);
border-radius: 4px;
padding: 0.3rem 0.5rem;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
border-left: 4px solid rgba(139, 115, 85, 0.6);
h3 {
margin: 0;
padding: 0;
font-size: 1.15rem;
font-weight: 600;
color: rgba(19, 18, 18, 0.95);
}
}
.item-name-label-header-long2 {
flex-grow: 1;
max-width: 14rem;
min-width: 14rem;
}
.impact-box {
border-width: 2px;
border-color: #000000;
border-radius: 6px;
border: 2px ridge #443307;
margin: 4px;
padding: 4px;
}
.impact-title {
font-size: bold;
display: flex;
align-items: center;
justify-content: center;
margin-left: auto;
margin-right: auto;
text-align: center;
}
.items-title-text {
text-align: center;
font-family: MailartRubberstamp;
margin-left: 4px;
}
.lock-icon {
width: 16px;
height: 16px;
}
.item-sheet-img {
width: 64px;
height: 64px;
border: 2px solid rgba(139, 115, 85, 0.4);
border-radius: 8px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
object-fit: cover;
}
.item-name-img {
flex-grow: 1;
max-width: 2rem;
min-width: 2rem;
}
.item-field {
margin-top: 4px;
}
.item-field-xp {
margin-top: 4px;
min-width: 8rem;
max-width: 8rem;
}
.item-field-label-short {
flex-grow: 1;
max-width: 4rem;
min-width: 4rem;
}
.item-field-label-medium {
flex-grow: 1;
max-width: 6rem;
min-width: 6rem;
}
.item-field-label-long,
.item-name-label-long {
font-weight: 600;
color: rgba(70, 67, 49, 0.9);
min-width: 160px;
}
.item-field-skill {
flex-grow: 1;
max-width: 6.8rem;
min-width: 6.8rem;
}
.item-field-label-long {
flex-grow: 1;
max-width: 10rem;
min-width: 10rem;
}
.item-field-title-long {
flex-grow: 1;
max-width: 12rem;
min-width: 12rem;
}
.item-field-label-long14 {
flex-grow: 1;
max-width: 14rem;
min-width: 14rem;
color: rgba(70, 67, 49, 0.9);
font-size: 1.0rem;
font-weight: 600;
}
.carac-box {
background: linear-gradient(
135deg,
rgba(226, 226, 222, 0.4) 0%,
rgba(240, 235, 225, 0.3) 100%
);
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
border-radius: 0.45rem;
padding: 0.3rem 0.5rem;
border: 1px solid rgba(139, 115, 85, 0.2);
transition: all 0.2s ease;
&:hover {
border-color: rgba(139, 115, 85, 0.4);
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.15);
}
}
.comp-box {
max-width: 16rem;
min-width: 16rem;
width: 16rem;
min-height: 1.6rem;
background: linear-gradient(
135deg,
rgba(250, 245, 235, 0.5) 0%,
rgba(255, 255, 255, 0.3) 100%
);
padding: 0.25rem 0.4rem;
margin: 0.15rem;
border-radius: 3px;
border-left: 2px solid rgba(139, 115, 85, 0.3);
transition: all 0.2s ease;
&:hover {
background: rgba(226, 226, 222, 0.4);
border-left-color: rgba(139, 115, 85, 0.6);
transform: translateX(2px);
}
}
.item-control-end {
align-self: flex-end;
}
.alternate-list {
margin-top: 4px;
flex-wrap: nowrap;
}
.item-filler {
flex-grow: 6;
flex-shrink: 7;
}
.item-controls-fixed {
min-width: 2rem;
max-width: 2rem;
}
.item-controls-fixed-full {
min-width: 3rem;
max-width: 3rem;
}
.item-left-pad {
margin-left: 4px;
}
.attribute-label {
font-weight: bold;
}
.flexrow-no-expand {
flex-grow: 0;
}
.item-input-small {
max-width: 16px;
max-height: 12px;
}
.character-summary-rollable {
text-decoration: underline;
}

240
less/layout.less Normal file
View File

@@ -0,0 +1,240 @@
.fvtt-te-deum.window-app.sheet .window-content,
.fvtt-te-deum.application.sheet .window-content {
overflow: hidden;
display: flex;
flex-direction: column;
}
// AppV2: le part wrapper et la section root du template doivent propager la hauteur
// Uniquement pour les fiches (.sheet) — les autres fenêtres (dialogs) gardent un layout block normal
.application.fvtt-te-deum.sheet .window-content > [data-application-part],
.application.fvtt-te-deum.sheet .window-content > [data-application-part] > section {
flex: 1 1 0;
min-height: 0;
display: flex;
flex-direction: column;
overflow: hidden;
}
.fvtt-te-deum {
display: flex;
flex-direction: column;
overflow: hidden;
.sheet-header {
flex: 0 0 auto;
overflow: hidden;
display: flex;
flex-direction: row;
flex-wrap: wrap;
justify-content: flex-start;
margin-bottom: 10px;
background: linear-gradient(
135deg,
rgba(226, 226, 222, 0.95) 0%,
rgba(240, 235, 225, 0.9) 100%
);
padding: 0.3rem 0.8rem;
border-radius: 8px;
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.15);
border: 1px solid rgba(139, 115, 85, 0.3);
.profile-img {
flex: 0 0 128px;
width: 128px;
height: auto;
max-height: 128px;
margin-top: 0px;
margin-right: 10px;
-o-object-fit: cover;
object-fit: cover;
-o-object-position: 50% 0;
object-position: 50% 0;
border-width: 0px;
border-radius: 8px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
border: 2px solid rgba(139, 115, 85, 0.4);
}
.header-fields {
flex: 1;
}
h1 {
&.charname {
height: 50px;
padding: 0px;
margin: 5px 0;
border-bottom: 0;
}
}
.header-identity-fields {
flex-wrap: nowrap;
align-items: center;
gap: 0.3rem;
margin-top: 0.2rem;
input, select {
flex: 1 1 auto;
font-size: 0.75rem;
height: 1.6rem;
}
}
.header-identity-label {
flex: 0 0 auto;
font-size: 0.7rem;
font-weight: 600;
color: rgba(70, 67, 49, 0.9);
white-space: nowrap;
}
}
.sheet-tabs {
flex: 0;
font-family: "MailartRubberstamp";
font-size: 2.2rem;
}
.tox {
.tox-editor-container {
background: #fff;
}
.tox-edit-area {
padding: 0 8px;
}
}
.resource-label {
font-weight: bold;
text-transform: uppercase;
}
.tabs {
height: 40px;
border-top: 1px solid rgba(139, 115, 85, 0.4);
border-bottom: 1px solid rgba(139, 115, 85, 0.4);
background: linear-gradient(
180deg,
rgba(226, 226, 222, 0.5) 0%,
rgba(240, 235, 225, 0.3) 100%
);
color: #000000;
font-family: "GreatPrimer";
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
.item {
line-height: 40px;
font-weight: bold;
padding: 0 1rem;
transition: all 0.2s ease;
&:hover {
background: rgba(226, 226, 222, 0.6);
color: rgba(70, 67, 49, 0.9);
}
&.active {
text-decoration: underline;
text-shadow: none;
background: rgba(196, 186, 166, 0.4);
border-bottom: 3px solid rgba(139, 115, 85, 0.8);
}
}
}
.items-list {
list-style: none;
margin: 1px 0;
padding: 0;
overflow-y: auto;
.item-header {
font-weight: bold;
}
.item {
height: 30px;
line-height: 24px;
padding: 1px 0;
border-bottom: 1px solid #bbb;
.item-image {
flex: 0 0 24px;
margin-right: 5px;
}
img {
display: block;
}
}
.item-name {
margin: 0;
}
.item-controls {
flex: 0 0 86px;
text-align: right;
}
}
}
.profile-img-container {
margin-right: 0.2rem;
max-width: 140px;
width: 140px;
}
.button-img {
vertical-align: baseline;
width: 8%;
height: 8%;
max-height: 48px;
border-width: 0px;
border: 1px solid rgba(0, 0, 0, 0);
&:hover {
color: rgba(255, 255, 128, 0.7);
border: 1px solid rgba(255, 128, 0, 0.8);
cursor: pointer;
}
}
.button-effect-img {
vertical-align: baseline;
width: 16px;
max-height: 16px;
height: 16;
border-width: 0;
}
.small-button-container {
height: 16px;
width: 16px;
border: 0;
vertical-align: bottom;
}
.fvtt-te-deum .sheet-body {
flex: 1 1 0;
min-height: 0;
overflow: hidden;
font-size: 0.8rem;
font-family: "GreatPrimer";
}
.fvtt-te-deum .sheet-body .tab {
height: 100%;
overflow-y: auto;
font-size: 0.8rem;
font-family: "GreatPrimer";
}
.fvtt-te-deum .sheet-body .tab .editor {
height: 100%;
font-size: 0.8rem;
font-family: "GreatPrimer";
}

File diff suppressed because it is too large Load Diff

30
less/variables.less Normal file
View File

@@ -0,0 +1,30 @@
@font-face {
font-family: "MailartRubberstamp";
src: url("../fonts/MailartRubberstamp-Regular.woff") format("woff");
font-family: "GreatPrimer";
src: url("../fonts/IM_FELL_Great_Primer_Roman.woff") format("woff");
}
// Variables LESS
@window-header-title-font-size: 1.3rem;
@window-header-title-font-weight: normal;
@window-header-title-color: #f5f5f5;
@major-button-font-size: 1.05rem;
@major-button-font-weight: normal;
@major-button-color: #dadada;
@tab-header-font-size: 1rem;
@tab-header-font-weight: 700;
@tab-header-color: #403f3e;
@tab-header-color-active: #4a0404;
@actor-input-font-size: 0.8rem;
@actor-input-font-weight: 500;
@actor-input-color: black;
@actor-label-font-size: 0.8rem;
@actor-label-font-weight: 700;
@actor-label-color: rgba(70, 67, 49, 0.76863);
@debug-background-color-red: rgba(255, 0, 0, 0.32941);
@debug-background-color-blue: rgba(29, 0, 255, 0.32941);
@debug-background-color-green: rgba(84, 255, 0, 0.32941);
@debug-box-shadow-red: inset 0 0 2px red;
@debug-box-shadow-blue: inset 0 0 2px blue;
@debug-box-shadow-green: inset 0 0 2px green;

View File

@@ -1,179 +1,227 @@
/** /**
* Extend the basic ActorSheet with some very simple modifications * Feuille de personnage Te Deum - AppV2
* @extends {ActorSheet}
*/ */
import { TeDeumUtility } from "../common/tedeum-utility.js"; import { TeDeumUtility } from "../common/tedeum-utility.js";
const { HandlebarsApplicationMixin } = foundry.applications.api
/* -------------------------------------------- */ /* -------------------------------------------- */
export class TeDeumActorPJSheet extends foundry.appv1.sheets.ActorSheet { export class TeDeumActorPJSheet extends HandlebarsApplicationMixin(foundry.applications.sheets.ActorSheetV2) {
constructor(options = {}) {
super(options)
this._sheetMode = this.constructor.SHEET_MODES.PLAY
}
static SHEET_MODES = { EDIT: 0, PLAY: 1 }
/** @override */ /** @override */
static get defaultOptions() { static DEFAULT_OPTIONS = {
classes: ["fvtt-te-deum", "sheet", "actor"],
return foundry.utils.mergeObject(super.defaultOptions, { position: {
classes: ["fvtt-te-deum", "sheet", "actor"],
template: "systems/fvtt-te-deum/templates/actors/actor-sheet.hbs",
width: 860, width: 860,
height: 680, height: 680,
tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "skills" }], },
dragDrop: [{ dragSelector: ".item-list .item", dropSelector: null }], form: {
editScore: true submitOnChange: true,
}); closeOnSubmit: false,
},
window: {
resizable: true,
},
dragDrop: [{ dragSelector: ".item-list .item", dropSelector: null }],
actions: {
editImage: TeDeumActorPJSheet.#onEditImage,
toggleSheet: TeDeumActorPJSheet.#onToggleSheet,
editItem: TeDeumActorPJSheet.#onEditItem,
deleteItem: TeDeumActorPJSheet.#onDeleteItem,
createItem: TeDeumActorPJSheet.#onCreateItem,
createBlessure: TeDeumActorPJSheet.#onCreateBlessure,
createCompetence: TeDeumActorPJSheet.#onCreateCompetence,
equipItem: TeDeumActorPJSheet.#onEquipItem,
modifyQuantity: TeDeumActorPJSheet.#onModifyQuantity,
rollCompetence: TeDeumActorPJSheet.#onRollCompetence,
rollArme: TeDeumActorPJSheet.#onRollArme,
rollDegats: TeDeumActorPJSheet.#onRollDegats,
},
}
/** @override */
static PARTS = {
sheet: {
template: "systems/fvtt-te-deum/templates/actors/actor-sheet.hbs",
},
}
tabGroups = { primary: "principal" }
get isEditMode() {
return this._sheetMode === this.constructor.SHEET_MODES.EDIT
}
get isPlayMode() {
return this._sheetMode === this.constructor.SHEET_MODES.PLAY
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
async getData() { /** @override */
async _prepareContext() {
let formData = { const actor = this.document
return {
title: this.title, title: this.title,
id: this.actor.id, id: actor.id,
type: this.actor.type, type: actor.type,
img: this.actor.img, img: actor.img,
name: this.actor.name, name: actor.name,
editable: this.isEditable, editable: this.isEditable,
cssClass: this.isEditable ? "editable" : "locked", cssClass: this.isEditable ? "editable" : "locked",
system: foundry.utils.duplicate(this.object.system), system: foundry.utils.duplicate(actor.system),
limited: this.object.limited, systemFields: actor.system.schema.fields,
competences: this.actor.getCompetences(), limited: actor.limited,
competences: actor.getCompetences(),
config: foundry.utils.duplicate(game.system.tedeum.config), config: foundry.utils.duplicate(game.system.tedeum.config),
armes: this.actor.getArmes(), armes: actor.getArmes(),
caracList: this.actor.prepareCaracteristiques(), caracList: actor.prepareCaracteristiques(),
providence: this.actor.prepareProvidence(), providence: actor.prepareProvidence(),
arbreCompetences: this.actor.prepareArbreCompetences(), arbreCompetences: actor.prepareArbreCompetences(),
equipements: this.actor.getEquipements(), equipements: actor.getEquipements(),
simples: this.actor.getSimples(), simples: actor.getSimples(),
armures: this.actor.getArmures(), armures: actor.getArmures(),
graces: this.actor.getGraces(), graces: actor.getGraces(),
blessures: this.actor.getBlessures(), blessures: actor.getBlessures(),
maladies: this.actor.getMaladies(), maladies: actor.getMaladies(),
poisons: this.actor.getPoisons(), poisons: actor.getPoisons(),
combat: this.actor.prepareCombat(), combat: actor.prepareCombat(),
bonusDegats: this.actor.getBonusDegats(), bonusDegats: actor.getBonusDegats(),
nbActions: this.actor.getNbActions(), nbActions: actor.getNbActions(),
initiative: this.actor.getInitiative(), initiative: actor.getInitiative(),
pointsArmuresLourdes: this.actor.getNbArmures(), pointsArmuresLourdes: actor.getNbArmures(),
nbArmuresLourdes: this.actor.getNbArmuresLourdesActuel(), nbArmuresLourdes: actor.getNbArmuresLourdesActuel(),
santeModifier: this.actor.getSanteModifier(), santeModifier: actor.getSanteModifier(),
educations: this.actor.getEducations(), educations: actor.getEducations(),
description: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.description, { async: true }), enrichedDescription: await foundry.applications.ux.TextEditor.implementation.enrichHTML(actor.system.description, { async: true }),
equipmentfree: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.equipmentfree, { async: true }), enrichedEquipmentFree: await foundry.applications.ux.TextEditor.implementation.enrichHTML(actor.system.equipmentfree, { async: true }),
notes: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.notes, { async: true }), enrichedNotes: await foundry.applications.ux.TextEditor.implementation.enrichHTML(actor.system.notes, { async: true }),
histoire: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.histoire, { async: true }), enrichedHistoire: await foundry.applications.ux.TextEditor.implementation.enrichHTML(actor.system.histoire, { async: true }),
options: this.options, owner: actor.isOwner,
owner: this.document.isOwner, isEditMode: this.isEditMode,
editScore: this.options.editScore, isPlayMode: this.isPlayMode,
isGM: game.user.isGM isGM: game.user.isGM,
} }
this.formData = formData;
return formData;
}
/* -------------------------------------------- */
/** @override */
activateListeners(html) {
super.activateListeners(html);
// Everything below here is only needed if the sheet is editable
if (!this.options.editable) return;
html.bind("keydown", function (e) { // Ignore Enter in actores sheet
if (e.keyCode === 13) return false;
});
// Update Inventory Item
html.find('.item-edit').click(ev => {
const li = $(ev.currentTarget).parents(".item-id")
let itemId = li.data("item-id")
const item = this.actor.items.get(itemId);
item.sheet.render(true);
});
// Delete Inventory Item
html.find('.item-delete').click(ev => {
const li = $(ev.currentTarget).parents(".item-id")
TeDeumUtility.confirmDelete(this, li).catch("Error : No deletion confirmed")
})
html.find('.item-add').click(ev => {
let dataType = $(ev.currentTarget).data("type")
this.actor.createEmbeddedDocuments('Item', [{ name: "Nouveau " + dataType, type: dataType }], { renderSheet: true })
})
html.find('.blessure-add').click(ev => {
let dataType = $(ev.currentTarget).data("type")
this.actor.createEmbeddedDocuments('Item', [{ name: "Nouvelle " + dataType, type: dataType, system: { typeBlessure: "estafilade", localisation: "corps", value: 0, appliquee: true, description: "" } }], { renderSheet: true })
})
html.find('.competence-add').click(ev => {
let dataType = $(ev.currentTarget).data("type")
let caracKey = $(ev.currentTarget).data("carac-key")
this.actor.createEmbeddedDocuments('Item', [{ name: "Nouvelle " + dataType, type: dataType, system: { caracteristique: caracKey } }], { renderSheet: true })
})
html.find('.subactor-edit').click(ev => {
const li = $(ev.currentTarget).parents(".item");
let actorId = li.data("actor-id");
let actor = game.actors.get(actorId);
actor.sheet.render(true);
});
html.find('.subactor-delete').click(ev => {
const li = $(ev.currentTarget).parents(".item");
let actorId = li.data("actor-id");
this.actor.delSubActor(actorId);
});
html.find('.quantity-minus').click(event => {
const li = $(event.currentTarget).parents(".item");
this.actor.incDecQuantity(li.data("item-id"), -1);
});
html.find('.quantity-plus').click(event => {
const li = $(event.currentTarget).parents(".item");
this.actor.incDecQuantity(li.data("item-id"), +1);
});
html.find('.roll-competence').click((event) => {
let compId = $(event.currentTarget).data("comp-id")
this.actor.rollCompetence(compId)
});
html.find('.roll-arme').click((event) => {
const armeId = $(event.currentTarget).data("arme-id")
this.actor.rollArme(armeId)
});
html.find('.roll-degats').click((event) => {
const armeId = $(event.currentTarget).data("arme-id")
this.actor.rollDegatsArme(armeId)
});
html.find('.lock-unlock-sheet').click((event) => {
this.options.editScore = !this.options.editScore;
this.render(true);
});
html.find('.item-equip').click(ev => {
const li = $(ev.currentTarget).parents(".item");
this.actor.equipItem(li.data("item-id"));
this.render(true);
});
html.find('.update-field').change(ev => {
const fieldName = $(ev.currentTarget).data("field-name");
let value = Number(ev.currentTarget.value);
this.actor.update({ [`${fieldName}`]: value });
});
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
/** @override */ /** @override */
setPosition(options = {}) { _onRender(context, options) {
const position = super.setPosition(options); super._onRender(context, options)
const sheetBody = this.element.find(".sheet-body");
const bodyHeight = position.height - 192; // Tab navigation
sheetBody.css("height", bodyHeight); const nav = this.element.querySelector('nav.tabs[data-group]')
return position; if (nav) {
const group = nav.dataset.group
const activeTab = this.tabGroups[group] || "principal"
nav.querySelectorAll('[data-tab]').forEach(link => {
const tab = link.dataset.tab
link.classList.toggle('active', tab === activeTab)
link.addEventListener('click', event => {
event.preventDefault()
this.tabGroups[group] = tab
this.render()
})
})
this.element.querySelectorAll(`[data-group="${group}"][data-tab]`).forEach(content => {
content.classList.toggle('active', content.dataset.tab === activeTab)
})
}
// Ignore Enter key in sheet inputs
this.element.addEventListener('keydown', e => {
if (e.keyCode === 13 && e.target.tagName !== 'TEXTAREA') e.preventDefault()
})
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
/** @override */ // #region Static action handlers
_updateObject(event, formData) {
// Update the Actor static async #onEditImage(event) {
return this.object.update(formData); const fp = new FilePicker({
type: "image",
current: this.document.img,
callback: path => this.document.update({ img: path }),
})
fp.browse()
} }
static async #onToggleSheet(event) {
this._sheetMode = this.isEditMode
? this.constructor.SHEET_MODES.PLAY
: this.constructor.SHEET_MODES.EDIT
this.render()
}
static async #onEditItem(event, target) {
const li = target.closest("[data-item-id]")
const item = this.actor.items.get(li?.dataset.itemId)
if (item) item.sheet.render(true)
}
static async #onDeleteItem(event, target) {
const li = target.closest("[data-item-id]")
await TeDeumUtility.confirmDelete(this, li)
}
static async #onCreateItem(event, target) {
const type = target.dataset.type
await this.actor.createEmbeddedDocuments('Item', [{ name: "Nouveau " + type, type }], { renderSheet: true })
}
static async #onCreateBlessure(event, target) {
const type = target.dataset.type
await this.actor.createEmbeddedDocuments('Item', [{
name: "Nouvelle " + type, type,
system: { typeBlessure: "estafilade", localisation: "corps", value: 0, appliquee: true, description: "" }
}], { renderSheet: true })
}
static async #onCreateCompetence(event, target) {
const type = target.dataset.type
const caracKey = target.dataset.caracKey
await this.actor.createEmbeddedDocuments('Item', [{ name: "Nouvelle " + type, type, system: { caracteristique: caracKey } }], { renderSheet: true })
}
static async #onEquipItem(event, target) {
const li = target.closest("[data-item-id]")
if (!li?.dataset.itemId) return
await this.actor.equipItem(li.dataset.itemId)
}
static async #onModifyQuantity(event, target) {
const li = target.closest("[data-item-id]")
if (!li?.dataset.itemId) return
const item = this.actor.items.get(li.dataset.itemId)
if (!item) return
const delta = parseInt(target.dataset.qty) || 0
await this.actor.incDecQuantity(li.dataset.itemId, delta)
}
static async #onRollCompetence(event, target) {
const li = target.closest("[data-item-id]")
if (!li?.dataset.itemId) return
await this.actor.rollCompetence(li.dataset.itemId)
}
static async #onRollArme(event, target) {
const li = target.closest("[data-item-id]")
if (!li?.dataset.itemId) return
await this.actor.rollArme(li.dataset.itemId)
}
static async #onRollDegats(event, target) {
const li = target.closest("[data-item-id]")
if (!li?.dataset.itemId) return
await this.actor.rollDegatsArme(li.dataset.itemId)
}
// #endregion
} }

View File

@@ -785,8 +785,7 @@ export class TeDeumActor extends Actor {
/* -------------------------------------------- */ /* -------------------------------------------- */
async startRoll(rollData) { async startRoll(rollData) {
console.log("startRoll", rollData) console.log("startRoll", rollData)
let rollDialog = await TeDeumRollDialog.create(this, rollData) await TeDeumRollDialog.create(this, rollData)
rollDialog.render(true)
} }
} }

View File

@@ -575,7 +575,7 @@ export class TeDeumCharacterCreator {
for (let compName in this.competenceBonus) { for (let compName in this.competenceBonus) {
let comp = actor.items.find( i => i.type == "competence" && i.name.toLowerCase() === compName.toLowerCase()) let comp = actor.items.find( i => i.type == "competence" && i.name.toLowerCase() === compName.toLowerCase())
if (comp) { if (comp) {
updateComp.push({ _id: comp._id, "system.score": this.competenceBonus[compName].value }) updateComp.push({ _id: comp._id, "system.score": comp.system.score + this.competenceBonus[compName].value })
} else { } else {
toAdd.push( compName) toAdd.push( compName)
} }

View File

@@ -147,6 +147,14 @@ export class TeDeumUtility {
} }
return value return value
}) })
// Handle v12 removal of this helper
Handlebars.registerHelper('select', function (selected, options) {
const escapedValue = RegExp.escape(Handlebars.escapeExpression(selected));
const rgx = new RegExp(' value=[\"\']' + escapedValue + '[\"\']');
const html = options.fn(this);
return html.replace(rgx, "$& selected");
});
// Load compendium data // Load compendium data
const competences = await TeDeumUtility.loadCompendium("fvtt-te-deum.competences") const competences = await TeDeumUtility.loadCompendium("fvtt-te-deum.competences")
@@ -389,7 +397,17 @@ export class TeDeumUtility {
'systems/fvtt-te-deum/templates/actors/editor-notes-gm.hbs', 'systems/fvtt-te-deum/templates/actors/editor-notes-gm.hbs',
'systems/fvtt-te-deum/templates/items/partial-item-nav.hbs', 'systems/fvtt-te-deum/templates/items/partial-item-nav.hbs',
'systems/fvtt-te-deum/templates/items/partial-item-description.hbs', 'systems/fvtt-te-deum/templates/items/partial-item-description.hbs',
'systems/fvtt-te-deum/templates/dialogs/partial-creator-status.hbs' 'systems/fvtt-te-deum/templates/dialogs/partial-creator-status.hbs',
'systems/fvtt-te-deum/templates/items/item-arme-sheet.hbs',
'systems/fvtt-te-deum/templates/items/item-armure-sheet.hbs',
'systems/fvtt-te-deum/templates/items/item-blessure-sheet.hbs',
'systems/fvtt-te-deum/templates/items/item-competence-sheet.hbs',
'systems/fvtt-te-deum/templates/items/item-education-sheet.hbs',
'systems/fvtt-te-deum/templates/items/item-equipement-sheet.hbs',
'systems/fvtt-te-deum/templates/items/item-grace-sheet.hbs',
'systems/fvtt-te-deum/templates/items/item-maladie-sheet.hbs',
'systems/fvtt-te-deum/templates/items/item-origine-sheet.hbs',
'systems/fvtt-te-deum/templates/items/item-simple-sheet.hbs',
] ]
return foundry.applications.handlebars.loadTemplates(templatePaths); return foundry.applications.handlebars.loadTemplates(templatePaths);
} }
@@ -885,7 +903,7 @@ export class TeDeumUtility {
/* -------------------------------------------- */ /* -------------------------------------------- */
static async confirmDelete(actorSheet, li) { static async confirmDelete(actorSheet, li) {
let itemId = li.data("item-id"); let itemId = li.dataset ? li.dataset.itemId : li.data("item-id");
let msgTxt = "<p>Etes vous certain de supprimer cet item ?"; let msgTxt = "<p>Etes vous certain de supprimer cet item ?";
let buttons = { let buttons = {
delete: { delete: {
@@ -893,7 +911,12 @@ export class TeDeumUtility {
label: "Oui, aucun souci", label: "Oui, aucun souci",
callback: () => { callback: () => {
actorSheet.actor.deleteEmbeddedDocuments("Item", [itemId]); actorSheet.actor.deleteEmbeddedDocuments("Item", [itemId]);
li.slideUp(200, () => actorSheet.render(false)); if (li.slideUp) {
li.slideUp(200, () => actorSheet.render(false));
} else {
li.style.display = "none";
actorSheet.render(false);
}
} }
}, },
cancel: { cancel: {

View File

@@ -1,102 +1,103 @@
import { TeDeumUtility } from "../common/tedeum-utility.js"; import { TeDeumUtility } from "../common/tedeum-utility.js";
export class TeDeumRollDialog extends Dialog { const { HandlebarsApplicationMixin } = foundry.applications.api
/* -------------------------------------------- */
export class TeDeumRollDialog extends HandlebarsApplicationMixin(foundry.applications.api.ApplicationV2) {
static DEFAULT_OPTIONS = {
classes: ["fvtt-te-deum", "te-deum-roll-dialog"],
window: { title: "Lancer !", resizable: false },
position: { width: 540 },
actions: {
roll: TeDeumRollDialog.#onRoll,
cancel: TeDeumRollDialog.#onCancel,
}
}
static PARTS = {
content: { template: "systems/fvtt-te-deum/templates/dialogs/roll-dialog-generic.hbs" }
}
/* -------------------------------------------- */
constructor(actor, rollData, options = {}) {
super(options)
this.actor = actor
this.rollData = rollData
}
/* -------------------------------------------- */ /* -------------------------------------------- */
static async create(actor, rollData) { static async create(actor, rollData) {
const dialog = new TeDeumRollDialog(actor, rollData)
let options = { classes: ["tedeum-roll-dialog"], width: 540, height: 'fit-content', 'z-index': 99999 } dialog.render(true)
let html = await foundry.applications.handlebars.renderTemplate('systems/fvtt-te-deum/templates/dialogs/roll-dialog-generic.hbs', rollData); return dialog
return new TeDeumRollDialog(actor, rollData, html, options);
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
constructor(actor, rollData, html, options, close = undefined) { async _prepareContext() {
let conf = { return { ...this.rollData }
title: "Lancer !",
content: html,
buttons: {
roll: {
icon: '<i class="fas fa-check"></i>',
label: "Lancer",
callback: () => { this.roll() }
},
cancel: {
icon: '<i class="fas fa-times"></i>',
label: "Annuler",
callback: () => { this.close() }
}
},
close: close
}
super(conf, options);
this.actor = actor;
this.rollData = rollData;
}
/* -------------------------------------------- */
roll() {
TeDeumUtility.rollTeDeum(this.rollData)
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
async refreshDialog() { async refreshDialog() {
const content = await foundry.applications.handlebars.renderTemplate("systems/fvtt-te-deum/templates/dialogs/roll-dialog-generic.hbs", this.rollData) this.render()
this.data.content = content
this.render(true)
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
activateListeners(html) { static #onRoll(event, target) {
super.activateListeners(html); TeDeumUtility.rollTeDeum(this.rollData)
this.close()
}
let dialog = this; /* -------------------------------------------- */
function onLoad() { static #onCancel(event, target) {
} this.close()
$(function () { onLoad(); }); }
html.find('#bonusMalusPerso').change((event) => { /* -------------------------------------------- */
_onRender(context, options) {
super._onRender(context, options)
const html = this.element
html.querySelector('#bonusMalusPerso')?.addEventListener('change', (event) => {
this.rollData.bonusMalusPerso = Number(event.currentTarget.value) this.rollData.bonusMalusPerso = Number(event.currentTarget.value)
}) })
html.find('#roll-allonge').change((event) => { html.querySelector('#roll-allonge')?.addEventListener('change', (event) => {
this.rollData.allongeId = event.currentTarget.value this.rollData.allongeId = event.currentTarget.value
}) })
html.find('#roll-main-gauche').change((event) => { html.querySelector('#roll-main-gauche')?.addEventListener('change', (event) => {
this.rollData.isMainGauche = event.currentTarget.checked this.rollData.isMainGauche = event.currentTarget.checked
}) })
html.find('#roll-difficulty').change((event) => { html.querySelector('#roll-difficulty')?.addEventListener('change', (event) => {
this.rollData.difficulty = String(event.currentTarget.value) || "pardefaut" this.rollData.difficulty = String(event.currentTarget.value) || "pardefaut"
}) })
html.find('#roll-attaque-ciblee').change((event) => { html.querySelector('#roll-attaque-ciblee')?.addEventListener('change', (event) => {
this.rollData.attaqueCiblee = event.currentTarget.value || "0" this.rollData.attaqueCiblee = event.currentTarget.value || "0"
}) })
html.find('#roll-bonus-malus').change((event) => { html.querySelector('#roll-bonus-malus')?.addEventListener('change', (event) => {
this.rollData.bonusMalus = event.currentTarget.value || "0" this.rollData.bonusMalus = event.currentTarget.value || "0"
}) })
html.find('#roll-enable-providence').change((event) => { html.querySelector('#roll-enable-providence')?.addEventListener('change', (event) => {
this.rollData.enableProvidence = event.currentTarget.checked this.rollData.enableProvidence = event.currentTarget.checked
}) })
html.find('#roll-portee-tir').change((event) => { html.querySelector('#roll-portee-tir')?.addEventListener('change', (event) => {
this.rollData.porteeTir = event.currentTarget.value this.rollData.porteeTir = event.currentTarget.value
this.rollData.difficulty = game.system.tedeum.config.ARME_PORTEES[this.rollData.porteeTir].difficulty this.rollData.difficulty = game.system.tedeum.config.ARME_PORTEES[this.rollData.porteeTir].difficulty
this.rollData.porteeLabel = game.system.tedeum.config.ARME_PORTEES[this.rollData.porteeTir].label this.rollData.porteeLabel = game.system.tedeum.config.ARME_PORTEES[this.rollData.porteeTir].label
this.refreshDialog()
}) })
html.find('#roll-tir-viser').change((event) => { html.querySelector('#roll-tir-viser')?.addEventListener('change', (event) => {
this.rollData.isViser = event.currentTarget.checked this.rollData.isViser = event.currentTarget.checked
}) })
html.find('#roll-tir-mouvement').change((event) => { html.querySelector('#roll-tir-mouvement')?.addEventListener('change', (event) => {
this.rollData.isMouvement = event.currentTarget.checked this.rollData.isMouvement = event.currentTarget.checked
}) })
html.find('#roll-charge-a-pied').change((event) => { html.querySelector('#roll-charge-a-pied')?.addEventListener('change', (event) => {
this.rollData.isChargeAPied = event.currentTarget.checked this.rollData.isChargeAPied = event.currentTarget.checked
}) })
html.find('#roll-charge-a-cheval').change((event) => { html.querySelector('#roll-charge-a-cheval')?.addEventListener('change', (event) => {
this.rollData.isChargeACheval = event.currentTarget.checked this.rollData.isChargeACheval = event.currentTarget.checked
}) })
} }
} }

View File

@@ -1,172 +1,154 @@
import { TeDeumUtility } from "../common/tedeum-utility.js"; import { TeDeumUtility } from "../common/tedeum-utility.js";
const { HandlebarsApplicationMixin } = foundry.applications.api
/** /**
* Extend the basic ItemSheet with some very simple modifications * Feuille d'item Te Deum - AppV2
* @extends {ItemSheet}
*/ */
export class TeDeumItemSheet extends foundry.appv1.sheets.ItemSheet { export class TeDeumItemSheet extends HandlebarsApplicationMixin(foundry.applications.sheets.ItemSheetV2) {
/** @override */ /** @override */
static get defaultOptions() { static DEFAULT_OPTIONS = {
return foundry.utils.mergeObject(super.defaultOptions, { classes: ["fvtt-te-deum", "sheet", "item"],
classes: ["fvtt-te-deum", "sheet", "item"], position: {
template: "systems/fvtt-te-deum/templates/item-sheet.hbs",
dragDrop: [{ dragSelector: null, dropSelector: null }],
width: 620, width: 620,
height: 580, height: 580,
tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "description" }] },
}); form: {
submitOnChange: true,
closeOnSubmit: false,
},
window: {
resizable: true,
},
actions: {
editImage: TeDeumItemSheet.#onEditImage,
postItem: TeDeumItemSheet.#onPostItem,
deleteSubitem: TeDeumItemSheet.#onDeleteSubitem,
viewSubitem: TeDeumItemSheet.#onViewSubitem,
},
} }
/* -------------------------------------------- */ // Static PARTS pointing to the dynamic wrapper template
_getHeaderButtons() { static PARTS = {
let buttons = super._getHeaderButtons(); sheet: { template: "systems/fvtt-te-deum/templates/items/item-sheet.hbs" },
// Add "Post to chat" button
// We previously restricted this to GM and editable items only. If you ever find this comment because it broke something: eh, sorry!
buttons.unshift(
{
class: "post",
icon: "fas fa-comment",
onclick: ev => { }
})
return buttons
} }
/* -------------------------------------------- */ tabGroups = { primary: "description" }
async getData() {
let formData = { /* -------------------------------------------- */
/** @override */
async _prepareContext() {
const item = this.document
const TextEditor = foundry.applications.ux.TextEditor.implementation
const enrich = async (val) => val !== undefined ? await TextEditor.enrichHTML(val ?? "", { async: true }) : ""
const context = {
title: this.title, title: this.title,
id: this.id, id: item.id,
type: this.object.type, type: item.type,
img: this.object.img, img: item.img,
name: this.object.name, name: item.name,
editable: this.isEditable, editable: this.isEditable,
cssClass: this.isEditable ? "editable" : "locked", cssClass: this.isEditable ? "editable" : "locked",
system: foundry.utils.duplicate(this.object.system), system: foundry.utils.duplicate(item.system),
systemFields: item.system.schema.fields,
config: foundry.utils.duplicate(game.system.tedeum.config), config: foundry.utils.duplicate(game.system.tedeum.config),
competences: TeDeumUtility.getCompetencesForDropDown(), competences: TeDeumUtility.getCompetencesForDropDown(),
limited: this.object.limited, limited: item.limited,
options: this.options, owner: item.isOwner,
owner: this.document.isOwner, enrichedDescription: await enrich(item.system.description),
description: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.description, { async: true }), enrichedTransmission: await enrich(item.system.transmission),
notes: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.notes, { async: true }), enrichedSymptomes: await enrich(item.system.symptomes),
isGM: game.user.isGM enrichedComplications: await enrich(item.system.complications),
enrichedVertus: await enrich(item.system.vertus),
enrichedToxicite: await enrich(item.system.toxicite),
isGM: game.user.isGM,
itemPartialName: `systems/fvtt-te-deum/templates/items/item-${item.type}-sheet.hbs`,
} }
if (item.type === "education") {
if (this.object.type == "education") { TeDeumUtility.prepareEducationContent(context)
TeDeumUtility.prepareEducationContent(formData);
} }
return context
this.options.editable = !(this.object.origin == "embeddedItem");
return formData;
}
/* -------------------------------------------- */
_getHeaderButtons() {
let buttons = super._getHeaderButtons();
buttons.unshift({
class: "post",
icon: "fas fa-comment",
onclick: ev => this.postItem()
});
return buttons
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
postItem() { /** @override */
let chatData = duplicate(this.item) _onRender(context, options) {
super._onRender(context, options)
// Tab navigation
const nav = this.element.querySelector('nav.tabs[data-group]')
if (nav) {
const group = nav.dataset.group
const activeTab = this.tabGroups[group] || "description"
nav.querySelectorAll('[data-tab]').forEach(link => {
const tab = link.dataset.tab
link.classList.toggle('active', tab === activeTab)
link.addEventListener('click', event => {
event.preventDefault()
this.tabGroups[group] = tab
this.render()
})
})
this.element.querySelectorAll(`[data-group="${group}"][data-tab]`).forEach(content => {
content.classList.toggle('active', content.dataset.tab === activeTab)
})
}
// Ignore Enter key in inputs
this.element.addEventListener('keydown', e => {
if (e.keyCode === 13 && e.target.tagName !== 'TEXTAREA') e.preventDefault()
})
}
// #region Static action handlers
static async #onEditImage(event, target) {
const fp = new FilePicker({
type: "image",
current: this.document.img,
callback: path => this.document.update({ img: path }),
})
fp.browse()
}
static async #onPostItem(event, target) {
const chatData = foundry.utils.duplicate(this.item)
if (this.actor) { if (this.actor) {
chatData.actor = { id: this.actor.id }; chatData.actor = { id: this.actor.id }
} }
// Don't post any image for the item (which would leave a large gap) if the default image is used if (chatData.img?.includes("/blank.png")) {
if (chatData.img.includes("/blank.png")) { chatData.img = null
chatData.img = null;
} }
// JSON object for easy creation chatData.jsondata = JSON.stringify({ compendium: "postedItem", payload: chatData })
chatData.jsondata = JSON.stringify( const html = await foundry.applications.handlebars.renderTemplate(
{ 'systems/fvtt-te-deum/templates/post-item.html', chatData
compendium: "postedItem", )
payload: chatData, ChatMessage.create(TeDeumUtility.chatDataSetup(html))
});
foundry.applications.handlebars.renderTemplate('systems/fvtt-te-deum/templates/post-item.html', chatData).then(html => {
let chatOptions = TeDeumUtility.chatDataSetup(html);
ChatMessage.create(chatOptions)
});
} }
/* -------------------------------------------- */ static async #onDeleteSubitem(event, target) {
async viewSubitem(ev) { const field = target.dataset.type
let levelIndex = Number($(ev.currentTarget).parents(".item").data("level-index")) const idx = parseInt(target.dataset.index)
let choiceIndex = Number($(ev.currentTarget).parents(".item").data("choice-index")) const oldArray = this.document.system[field]
let featureId = $(ev.currentTarget).parents(".item").data("feature-id") if (Array.isArray(oldArray) && oldArray[idx]?.name !== 'None') {
const newArray = oldArray.filter((_, i) => i !== idx)
let itemData = this.object.system.levels[levelIndex].choices[choiceIndex].features[featureId] this.document.update({ [`system.${field}`]: newArray })
if (itemData.name != 'None') {
let item = await Item.create(itemData, { temporary: true });
item.system.origin = "embeddedItem";
new TeDeumItemSheet(item).render(true);
} }
} }
/* -------------------------------------------- */ static async #onViewSubitem(event, target) {
async deleteSubitem(ev) { const li = target.closest(".item")
let field = $(ev.currentTarget).data('type'); const levelIndex = parseInt(li?.dataset.levelIndex)
let idx = Number($(ev.currentTarget).data('index')); const choiceIndex = parseInt(li?.dataset.choiceIndex)
let oldArray = this.object.system[field]; const featureId = li?.dataset.featureId
let itemData = this.object.system[field][idx]; const itemData = this.document.system.levels?.[levelIndex]?.choices?.[choiceIndex]?.features?.[featureId]
if (itemData.name != 'None') { if (itemData?.name !== 'None') {
let newArray = []; const item = await Item.create(itemData, { temporary: true })
for (let i = 0; i < oldArray.length; i++) { item.system.origin = "embeddedItem"
if (i != idx) { new TeDeumItemSheet(item).render(true)
newArray.push(oldArray[i]);
}
}
this.object.update({ [`system.${field}`]: newArray });
} }
} }
/* -------------------------------------------- */ // #endregion
/** @override */
activateListeners(html) {
super.activateListeners(html);
// Everything below here is only needed if the sheet is editable
if (!this.options.editable) return;
// Update Inventory Item
html.find('.item-edit').click(ev => {
const li = $(ev.currentTarget).parents(".item");
const item = this.object.options.actor.getOwnedItem(li.data("item-id"));
item.sheet.render(true);
});
html.find('.delete-subitem').click(ev => {
this.deleteSubitem(ev);
});
// Update Inventory Item
html.find('.item-delete').click(ev => {
const li = $(ev.currentTarget).parents(".item");
let itemId = li.data("item-id");
let itemType = li.data("item-type");
});
}
/* -------------------------------------------- */
get template() {
let type = this.item.type;
return `systems/fvtt-te-deum/templates/items/item-${type}-sheet.hbs`
}
/* -------------------------------------------- */
/** @override */
_updateObject(event, formData) {
return this.object.update(formData)
}
} }

View File

@@ -1 +1 @@
MANIFEST-000226 MANIFEST-000245

View File

@@ -1,3 +1,7 @@
2026/02/25-16:17:49.096861 7f821f7fe6c0 Recovering log #224 2026/02/28-09:14:40.938346 7f56f93fe6c0 Recovering log #243
2026/02/25-16:17:49.106471 7f821f7fe6c0 Delete type=3 #222 2026/02/28-09:14:40.993306 7f56f93fe6c0 Delete type=3 #241
2026/02/25-16:17:49.106539 7f821f7fe6c0 Delete type=0 #224 2026/02/28-09:14:40.993438 7f56f93fe6c0 Delete type=0 #243
2026/02/28-11:53:47.481993 7f54e37ef6c0 Level-0 table #248: started
2026/02/28-11:53:47.482026 7f54e37ef6c0 Level-0 table #248: 0 bytes OK
2026/02/28-11:53:47.487859 7f54e37ef6c0 Delete type=0 #246
2026/02/28-11:53:47.488058 7f54e37ef6c0 Manual compaction at level-0 from '!journal!uNwJgi4kXBCiZmAH' @ 72057594037927935 : 1 .. '!journal.pages!uNwJgi4kXBCiZmAH.onhNU0mXhOpdNZJF' @ 0 : 0; will stop at (end)

View File

@@ -1,7 +1,7 @@
2026/02/25-15:53:40.937630 7f821ffff6c0 Recovering log #220 2026/02/27-17:11:33.828064 7f56f8bfd6c0 Recovering log #239
2026/02/25-15:53:40.949873 7f821ffff6c0 Delete type=3 #218 2026/02/27-17:11:33.838170 7f56f8bfd6c0 Delete type=3 #237
2026/02/25-15:53:40.949933 7f821ffff6c0 Delete type=0 #220 2026/02/27-17:11:33.838231 7f56f8bfd6c0 Delete type=0 #239
2026/02/25-16:16:19.716603 7f821d8d46c0 Level-0 table #225: started 2026/02/27-17:22:38.249017 7f54e37ef6c0 Level-0 table #244: started
2026/02/25-16:16:19.716652 7f821d8d46c0 Level-0 table #225: 0 bytes OK 2026/02/27-17:22:38.249057 7f54e37ef6c0 Level-0 table #244: 0 bytes OK
2026/02/25-16:16:19.765894 7f821d8d46c0 Delete type=0 #223 2026/02/27-17:22:38.255519 7f54e37ef6c0 Delete type=0 #242
2026/02/25-16:16:19.766155 7f821d8d46c0 Manual compaction at level-0 from '!journal!uNwJgi4kXBCiZmAH' @ 72057594037927935 : 1 .. '!journal.pages!uNwJgi4kXBCiZmAH.onhNU0mXhOpdNZJF' @ 0 : 0; will stop at (end) 2026/02/27-17:22:38.255693 7f54e37ef6c0 Manual compaction at level-0 from '!journal!uNwJgi4kXBCiZmAH' @ 72057594037927935 : 1 .. '!journal.pages!uNwJgi4kXBCiZmAH.onhNU0mXhOpdNZJF' @ 0 : 0; will stop at (end)

Binary file not shown.

BIN
packs/aides/MANIFEST-000245 Normal file

Binary file not shown.

Binary file not shown.

View File

@@ -1 +1 @@
MANIFEST-000329 MANIFEST-000347

View File

@@ -1,3 +1,7 @@
2026/02/25-16:17:49.007591 7f821f7fe6c0 Recovering log #327 2026/02/28-09:14:40.507166 7f56f8bfd6c0 Recovering log #345
2026/02/25-16:17:49.018485 7f821f7fe6c0 Delete type=3 #325 2026/02/28-09:14:40.569877 7f56f8bfd6c0 Delete type=3 #343
2026/02/25-16:17:49.018548 7f821f7fe6c0 Delete type=0 #327 2026/02/28-09:14:40.570013 7f56f8bfd6c0 Delete type=0 #345
2026/02/28-11:53:47.420510 7f54e37ef6c0 Level-0 table #350: started
2026/02/28-11:53:47.420538 7f54e37ef6c0 Level-0 table #350: 0 bytes OK
2026/02/28-11:53:47.427480 7f54e37ef6c0 Delete type=0 #348
2026/02/28-11:53:47.427767 7f54e37ef6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)

View File

@@ -1,7 +1,7 @@
2026/02/25-15:53:40.848906 7f821effd6c0 Recovering log #323 2026/02/27-17:11:33.742557 7f56f8bfd6c0 Recovering log #341
2026/02/25-15:53:40.858667 7f821effd6c0 Delete type=3 #321 2026/02/27-17:11:33.751671 7f56f8bfd6c0 Delete type=3 #339
2026/02/25-15:53:40.858720 7f821effd6c0 Delete type=0 #323 2026/02/27-17:11:33.751725 7f56f8bfd6c0 Delete type=0 #341
2026/02/25-16:16:19.467652 7f821d8d46c0 Level-0 table #328: started 2026/02/27-17:22:38.183980 7f54e37ef6c0 Level-0 table #346: started
2026/02/25-16:16:19.467677 7f821d8d46c0 Level-0 table #328: 0 bytes OK 2026/02/27-17:22:38.184010 7f54e37ef6c0 Level-0 table #346: 0 bytes OK
2026/02/25-16:16:19.528659 7f821d8d46c0 Delete type=0 #326 2026/02/27-17:22:38.189997 7f54e37ef6c0 Delete type=0 #344
2026/02/25-16:16:19.528885 7f821d8d46c0 Manual compaction at level-0 from '!folders!InCQeTRdT5jXMX82' @ 72057594037927935 : 1 .. '!items!wxIHkrq98eQ3cOvp' @ 0 : 0; will stop at (end) 2026/02/27-17:22:38.202756 7f54e37ef6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)

Binary file not shown.

BIN
packs/armes/MANIFEST-000347 Normal file

Binary file not shown.

View File

@@ -1 +1 @@
MANIFEST-000329 MANIFEST-000348

View File

@@ -1,3 +1,7 @@
2026/02/25-16:17:49.020792 7f821effd6c0 Recovering log #327 2026/02/28-09:14:40.573416 7f56f93fe6c0 Recovering log #346
2026/02/25-16:17:49.030955 7f821effd6c0 Delete type=3 #325 2026/02/28-09:14:40.630571 7f56f93fe6c0 Delete type=3 #344
2026/02/25-16:17:49.031024 7f821effd6c0 Delete type=0 #327 2026/02/28-09:14:40.630725 7f56f93fe6c0 Delete type=0 #346
2026/02/28-11:53:47.408468 7f54e37ef6c0 Level-0 table #351: started
2026/02/28-11:53:47.408492 7f54e37ef6c0 Level-0 table #351: 0 bytes OK
2026/02/28-11:53:47.414369 7f54e37ef6c0 Delete type=0 #349
2026/02/28-11:53:47.427738 7f54e37ef6c0 Manual compaction at level-0 from '!folders!2wTJBj3dicRKzNOE' @ 72057594037927935 : 1 .. '!items!ufvhWG5V8pX0qrtR' @ 0 : 0; will stop at (end)

View File

@@ -1,7 +1,7 @@
2026/02/25-15:53:40.860848 7f821f7fe6c0 Recovering log #323 2026/02/27-17:11:33.753908 7f56f9bff6c0 Recovering log #342
2026/02/25-15:53:40.871268 7f821f7fe6c0 Delete type=3 #321 2026/02/27-17:11:33.763888 7f56f9bff6c0 Delete type=3 #340
2026/02/25-15:53:40.871372 7f821f7fe6c0 Delete type=0 #323 2026/02/27-17:11:33.763941 7f56f9bff6c0 Delete type=0 #342
2026/02/25-16:16:19.298465 7f821d8d46c0 Level-0 table #328: started 2026/02/27-17:22:38.176835 7f54e37ef6c0 Level-0 table #347: started
2026/02/25-16:16:19.298546 7f821d8d46c0 Level-0 table #328: 0 bytes OK 2026/02/27-17:22:38.176924 7f54e37ef6c0 Level-0 table #347: 0 bytes OK
2026/02/25-16:16:19.356349 7f821d8d46c0 Delete type=0 #326 2026/02/27-17:22:38.183841 7f54e37ef6c0 Delete type=0 #345
2026/02/25-16:16:19.528831 7f821d8d46c0 Manual compaction at level-0 from '!folders!2wTJBj3dicRKzNOE' @ 72057594037927935 : 1 .. '!items!ufvhWG5V8pX0qrtR' @ 0 : 0; will stop at (end) 2026/02/27-17:22:38.202741 7f54e37ef6c0 Manual compaction at level-0 from '!folders!2wTJBj3dicRKzNOE' @ 72057594037927935 : 1 .. '!items!ufvhWG5V8pX0qrtR' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

View File

@@ -1 +1 @@
MANIFEST-000327 MANIFEST-000346

View File

@@ -1,3 +1,7 @@
2026/02/25-16:17:48.995540 7f821e7fc6c0 Recovering log #325 2026/02/28-09:14:40.445424 7f56e3fff6c0 Recovering log #344
2026/02/25-16:17:49.005262 7f821e7fc6c0 Delete type=3 #323 2026/02/28-09:14:40.502194 7f56e3fff6c0 Delete type=3 #342
2026/02/25-16:17:49.005349 7f821e7fc6c0 Delete type=0 #325 2026/02/28-09:14:40.502321 7f56e3fff6c0 Delete type=0 #344
2026/02/28-11:53:47.402111 7f54e37ef6c0 Level-0 table #349: started
2026/02/28-11:53:47.402185 7f54e37ef6c0 Level-0 table #349: 0 bytes OK
2026/02/28-11:53:47.408357 7f54e37ef6c0 Delete type=0 #347
2026/02/28-11:53:47.427714 7f54e37ef6c0 Manual compaction at level-0 from '!folders!4OPhigzcPv46qbWW' @ 72057594037927935 : 1 .. '!items!yx4k7lQHGcom99mk' @ 0 : 0; will stop at (end)

View File

@@ -1,7 +1,7 @@
2026/02/25-15:53:40.836015 7f821ffff6c0 Recovering log #321 2026/02/27-17:11:33.729701 7f56f93fe6c0 Recovering log #340
2026/02/25-15:53:40.846129 7f821ffff6c0 Delete type=3 #319 2026/02/27-17:11:33.739927 7f56f93fe6c0 Delete type=3 #338
2026/02/25-15:53:40.846180 7f821ffff6c0 Delete type=0 #321 2026/02/27-17:11:33.739998 7f56f93fe6c0 Delete type=0 #340
2026/02/25-16:16:19.415073 7f821d8d46c0 Level-0 table #326: started 2026/02/27-17:22:38.190111 7f54e37ef6c0 Level-0 table #345: started
2026/02/25-16:16:19.415106 7f821d8d46c0 Level-0 table #326: 0 bytes OK 2026/02/27-17:22:38.190141 7f54e37ef6c0 Level-0 table #345: 0 bytes OK
2026/02/25-16:16:19.467523 7f821d8d46c0 Delete type=0 #324 2026/02/27-17:22:38.196111 7f54e37ef6c0 Delete type=0 #343
2026/02/25-16:16:19.528868 7f821d8d46c0 Manual compaction at level-0 from '!folders!4OPhigzcPv46qbWW' @ 72057594037927935 : 1 .. '!items!yx4k7lQHGcom99mk' @ 0 : 0; will stop at (end) 2026/02/27-17:22:38.202769 7f54e37ef6c0 Manual compaction at level-0 from '!folders!4OPhigzcPv46qbWW' @ 72057594037927935 : 1 .. '!items!yx4k7lQHGcom99mk' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

View File

@@ -1 +1 @@
MANIFEST-000339 MANIFEST-000358

View File

@@ -1,3 +1,7 @@
2026/02/25-16:17:49.032966 7f821ffff6c0 Recovering log #337 2026/02/28-09:14:40.634961 7f56e3fff6c0 Recovering log #356
2026/02/25-16:17:49.043199 7f821ffff6c0 Delete type=3 #335 2026/02/28-09:14:40.683602 7f56e3fff6c0 Delete type=3 #354
2026/02/25-16:17:49.043264 7f821ffff6c0 Delete type=0 #337 2026/02/28-09:14:40.683765 7f56e3fff6c0 Delete type=0 #356
2026/02/28-11:53:47.414491 7f54e37ef6c0 Level-0 table #361: started
2026/02/28-11:53:47.414521 7f54e37ef6c0 Level-0 table #361: 0 bytes OK
2026/02/28-11:53:47.420403 7f54e37ef6c0 Delete type=0 #359
2026/02/28-11:53:47.427753 7f54e37ef6c0 Manual compaction at level-0 from '!folders!9PQi3Lv54rpcxavo' @ 72057594037927935 : 1 .. '!items!zGlRtP7zSnkjuuue' @ 0 : 0; will stop at (end)

View File

@@ -1,7 +1,7 @@
2026/02/25-15:53:40.874436 7f821ffff6c0 Recovering log #333 2026/02/27-17:11:33.765979 7f56f93fe6c0 Recovering log #352
2026/02/25-15:53:40.884848 7f821ffff6c0 Delete type=3 #331 2026/02/27-17:11:33.775426 7f56f93fe6c0 Delete type=3 #350
2026/02/25-15:53:40.884904 7f821ffff6c0 Delete type=0 #333 2026/02/27-17:11:33.775496 7f56f93fe6c0 Delete type=0 #352
2026/02/25-16:16:19.356498 7f821d8d46c0 Level-0 table #338: started 2026/02/27-17:22:38.196266 7f54e37ef6c0 Level-0 table #357: started
2026/02/25-16:16:19.356535 7f821d8d46c0 Level-0 table #338: 0 bytes OK 2026/02/27-17:22:38.196298 7f54e37ef6c0 Level-0 table #357: 0 bytes OK
2026/02/25-16:16:19.414898 7f821d8d46c0 Delete type=0 #336 2026/02/27-17:22:38.202584 7f54e37ef6c0 Delete type=0 #355
2026/02/25-16:16:19.528852 7f821d8d46c0 Manual compaction at level-0 from '!folders!9PQi3Lv54rpcxavo' @ 72057594037927935 : 1 .. '!items!zGlRtP7zSnkjuuue' @ 0 : 0; will stop at (end) 2026/02/27-17:22:38.202781 7f54e37ef6c0 Manual compaction at level-0 from '!folders!9PQi3Lv54rpcxavo' @ 72057594037927935 : 1 .. '!items!zGlRtP7zSnkjuuue' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

View File

@@ -1 +1 @@
MANIFEST-000328 MANIFEST-000347

View File

@@ -1,3 +1,7 @@
2026/02/25-16:17:49.045639 7f821e7fc6c0 Recovering log #326 2026/02/28-09:14:40.690048 7f56f9bff6c0 Recovering log #345
2026/02/25-16:17:49.056537 7f821e7fc6c0 Delete type=3 #324 2026/02/28-09:14:40.753536 7f56f9bff6c0 Delete type=3 #343
2026/02/25-16:17:49.056606 7f821e7fc6c0 Delete type=0 #326 2026/02/28-09:14:40.753696 7f56f9bff6c0 Delete type=0 #345
2026/02/28-11:53:47.440306 7f54e37ef6c0 Level-0 table #350: started
2026/02/28-11:53:47.440331 7f54e37ef6c0 Level-0 table #350: 0 bytes OK
2026/02/28-11:53:47.446262 7f54e37ef6c0 Delete type=0 #348
2026/02/28-11:53:47.453090 7f54e37ef6c0 Manual compaction at level-0 from '!items!17mjvwS8R3B6LloG' @ 72057594037927935 : 1 .. '!items!zUYIVOuFpRur9aAR' @ 0 : 0; will stop at (end)

View File

@@ -1,7 +1,7 @@
2026/02/25-15:53:40.888183 7f821effd6c0 Recovering log #322 2026/02/27-17:11:33.778709 7f56f8bfd6c0 Recovering log #341
2026/02/25-15:53:40.897808 7f821effd6c0 Delete type=3 #320 2026/02/27-17:11:33.788574 7f56f8bfd6c0 Delete type=3 #339
2026/02/25-15:53:40.897873 7f821effd6c0 Delete type=0 #322 2026/02/27-17:11:33.788626 7f56f8bfd6c0 Delete type=0 #341
2026/02/25-16:16:19.645632 7f821d8d46c0 Level-0 table #327: started 2026/02/27-17:22:38.202910 7f54e37ef6c0 Level-0 table #346: started
2026/02/25-16:16:19.645665 7f821d8d46c0 Level-0 table #327: 0 bytes OK 2026/02/27-17:22:38.202969 7f54e37ef6c0 Level-0 table #346: 0 bytes OK
2026/02/25-16:16:19.716424 7f821d8d46c0 Delete type=0 #325 2026/02/27-17:22:38.209282 7f54e37ef6c0 Delete type=0 #344
2026/02/25-16:16:19.766141 7f821d8d46c0 Manual compaction at level-0 from '!items!17mjvwS8R3B6LloG' @ 72057594037927935 : 1 .. '!items!zUYIVOuFpRur9aAR' @ 0 : 0; will stop at (end) 2026/02/27-17:22:38.228524 7f54e37ef6c0 Manual compaction at level-0 from '!items!17mjvwS8R3B6LloG' @ 72057594037927935 : 1 .. '!items!zUYIVOuFpRur9aAR' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

View File

@@ -1 +1 @@
MANIFEST-000328 MANIFEST-000347

View File

@@ -1,3 +1,7 @@
2026/02/25-16:17:49.058989 7f821effd6c0 Recovering log #326 2026/02/28-09:14:40.758009 7f56f8bfd6c0 Recovering log #345
2026/02/25-16:17:49.068511 7f821effd6c0 Delete type=3 #324 2026/02/28-09:14:40.809385 7f56f8bfd6c0 Delete type=3 #343
2026/02/25-16:17:49.068568 7f821effd6c0 Delete type=0 #326 2026/02/28-09:14:40.809522 7f56f8bfd6c0 Delete type=0 #345
2026/02/28-11:53:47.427947 7f54e37ef6c0 Level-0 table #350: started
2026/02/28-11:53:47.427981 7f54e37ef6c0 Level-0 table #350: 0 bytes OK
2026/02/28-11:53:47.434137 7f54e37ef6c0 Delete type=0 #348
2026/02/28-11:53:47.453062 7f54e37ef6c0 Manual compaction at level-0 from '!items!1icaxIywAwDXQcMz' @ 72057594037927935 : 1 .. '!items!ysGehYm1VkMWrI22' @ 0 : 0; will stop at (end)

View File

@@ -1,7 +1,7 @@
2026/02/25-15:53:40.899737 7f821f7fe6c0 Recovering log #322 2026/02/27-17:11:33.790985 7f56e3fff6c0 Recovering log #341
2026/02/25-15:53:40.910545 7f821f7fe6c0 Delete type=3 #320 2026/02/27-17:11:33.800729 7f56e3fff6c0 Delete type=3 #339
2026/02/25-15:53:40.910590 7f821f7fe6c0 Delete type=0 #322 2026/02/27-17:11:33.800800 7f56e3fff6c0 Delete type=0 #341
2026/02/25-16:16:19.529006 7f821d8d46c0 Level-0 table #327: started 2026/02/27-17:22:38.215408 7f54e37ef6c0 Level-0 table #346: started
2026/02/25-16:16:19.529044 7f821d8d46c0 Level-0 table #327: 0 bytes OK 2026/02/27-17:22:38.215437 7f54e37ef6c0 Level-0 table #346: 0 bytes OK
2026/02/25-16:16:19.584573 7f821d8d46c0 Delete type=0 #325 2026/02/27-17:22:38.221481 7f54e37ef6c0 Delete type=0 #344
2026/02/25-16:16:19.766110 7f821d8d46c0 Manual compaction at level-0 from '!items!1icaxIywAwDXQcMz' @ 72057594037927935 : 1 .. '!items!ysGehYm1VkMWrI22' @ 0 : 0; will stop at (end) 2026/02/27-17:22:38.228550 7f54e37ef6c0 Manual compaction at level-0 from '!items!1icaxIywAwDXQcMz' @ 72057594037927935 : 1 .. '!items!ysGehYm1VkMWrI22' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

View File

@@ -1 +1 @@
MANIFEST-000265 MANIFEST-000284

View File

@@ -1,3 +1,7 @@
2026/02/25-16:17:49.082827 7f821e7fc6c0 Recovering log #263 2026/02/28-09:14:40.881498 7f56f9bff6c0 Recovering log #282
2026/02/25-16:17:49.093869 7f821e7fc6c0 Delete type=3 #261 2026/02/28-09:14:40.932289 7f56f9bff6c0 Delete type=3 #280
2026/02/25-16:17:49.093933 7f821e7fc6c0 Delete type=0 #263 2026/02/28-09:14:40.932424 7f56f9bff6c0 Delete type=0 #282
2026/02/28-11:53:47.446364 7f54e37ef6c0 Level-0 table #287: started
2026/02/28-11:53:47.446388 7f54e37ef6c0 Level-0 table #287: 0 bytes OK
2026/02/28-11:53:47.452966 7f54e37ef6c0 Delete type=0 #285
2026/02/28-11:53:47.453100 7f54e37ef6c0 Manual compaction at level-0 from '!scenes!FJXugdbkBpEJEdR6' @ 72057594037927935 : 1 .. '!scenes!FJXugdbkBpEJEdR6' @ 0 : 0; will stop at (end)

View File

@@ -1,7 +1,7 @@
2026/02/25-15:53:40.925187 7f821effd6c0 Recovering log #259 2026/02/27-17:11:33.815402 7f56f9bff6c0 Recovering log #278
2026/02/25-15:53:40.934520 7f821effd6c0 Delete type=3 #257 2026/02/27-17:11:33.825096 7f56f9bff6c0 Delete type=3 #276
2026/02/25-15:53:40.934568 7f821effd6c0 Delete type=0 #259 2026/02/27-17:11:33.825159 7f56f9bff6c0 Delete type=0 #278
2026/02/25-16:16:19.945947 7f821d8d46c0 Level-0 table #264: started 2026/02/27-17:22:38.221603 7f54e37ef6c0 Level-0 table #283: started
2026/02/25-16:16:19.946001 7f821d8d46c0 Level-0 table #264: 0 bytes OK 2026/02/27-17:22:38.221636 7f54e37ef6c0 Level-0 table #283: 0 bytes OK
2026/02/25-16:16:20.001848 7f821d8d46c0 Delete type=0 #262 2026/02/27-17:22:38.228408 7f54e37ef6c0 Delete type=0 #281
2026/02/25-16:16:20.001994 7f821d8d46c0 Manual compaction at level-0 from '!scenes!FJXugdbkBpEJEdR6' @ 72057594037927935 : 1 .. '!scenes!FJXugdbkBpEJEdR6' @ 0 : 0; will stop at (end) 2026/02/27-17:22:38.228561 7f54e37ef6c0 Manual compaction at level-0 from '!scenes!FJXugdbkBpEJEdR6' @ 72057594037927935 : 1 .. '!scenes!FJXugdbkBpEJEdR6' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

View File

@@ -1 +1 @@
MANIFEST-000329 MANIFEST-000348

View File

@@ -1,3 +1,7 @@
2026/02/25-16:17:49.070393 7f821ffff6c0 Recovering log #327 2026/02/28-09:14:40.813470 7f56f93fe6c0 Recovering log #346
2026/02/25-16:17:49.080654 7f821ffff6c0 Delete type=3 #325 2026/02/28-09:14:40.876043 7f56f93fe6c0 Delete type=3 #344
2026/02/25-16:17:49.080720 7f821ffff6c0 Delete type=0 #327 2026/02/28-09:14:40.876176 7f56f93fe6c0 Delete type=0 #346
2026/02/28-11:53:47.434224 7f54e37ef6c0 Level-0 table #351: started
2026/02/28-11:53:47.434247 7f54e37ef6c0 Level-0 table #351: 0 bytes OK
2026/02/28-11:53:47.440199 7f54e37ef6c0 Delete type=0 #349
2026/02/28-11:53:47.453078 7f54e37ef6c0 Manual compaction at level-0 from '!items!1bAL2MQVpVBd0c5Z' @ 72057594037927935 : 1 .. '!items!zs67k4sxCid6oTK3' @ 0 : 0; will stop at (end)

View File

@@ -1,7 +1,7 @@
2026/02/25-15:53:40.912618 7f821e7fc6c0 Recovering log #323 2026/02/27-17:11:33.802695 7f56f93fe6c0 Recovering log #342
2026/02/25-15:53:40.922737 7f821e7fc6c0 Delete type=3 #321 2026/02/27-17:11:33.813017 7f56f93fe6c0 Delete type=3 #340
2026/02/25-15:53:40.922804 7f821e7fc6c0 Delete type=0 #323 2026/02/27-17:11:33.813086 7f56f93fe6c0 Delete type=0 #342
2026/02/25-16:16:19.584692 7f821d8d46c0 Level-0 table #328: started 2026/02/27-17:22:38.209394 7f54e37ef6c0 Level-0 table #347: started
2026/02/25-16:16:19.584724 7f821d8d46c0 Level-0 table #328: 0 bytes OK 2026/02/27-17:22:38.209417 7f54e37ef6c0 Level-0 table #347: 0 bytes OK
2026/02/25-16:16:19.645484 7f821d8d46c0 Delete type=0 #326 2026/02/27-17:22:38.215315 7f54e37ef6c0 Delete type=0 #345
2026/02/25-16:16:19.766128 7f821d8d46c0 Manual compaction at level-0 from '!items!1bAL2MQVpVBd0c5Z' @ 72057594037927935 : 1 .. '!items!zs67k4sxCid6oTK3' @ 0 : 0; will stop at (end) 2026/02/27-17:22:38.228539 7f54e37ef6c0 Manual compaction at level-0 from '!items!1bAL2MQVpVBd0c5Z' @ 72057594037927935 : 1 .. '!items!zs67k4sxCid6oTK3' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

371
styles/actor-sheet.css Normal file
View File

@@ -0,0 +1,371 @@
.editor {
border: 2;
height: 100%;
padding: 0 3px;
}
.medium-editor {
border: 2;
height: 240px;
max-height: 240px;
overflow-y: auto;
overflow-x: hidden;
padding: 0 3px;
}
.medium-editor prose-mirror,
.medium-editor .editor,
.medium-editor .editor-content,
.medium-editor .ProseMirror {
overflow: hidden;
height: auto;
}
.small-editor {
border: 2;
height: 120px;
max-height: 120px;
overflow-y: auto;
overflow-x: hidden;
padding: 0 3px;
}
.small-editor prose-mirror,
.small-editor .editor,
.small-editor .editor-content,
.small-editor .ProseMirror {
overflow: hidden;
height: auto;
}
.questionnaire-reponse {
max-width: 42rem;
margin-left: 1rem;
}
.questionnaire-element {
margin-top: 0.5rem;
}
.fvtt-te-deum input:not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="submit"]):not([type="image"]):not([type="file"]),
.fvtt-te-deum select {
background: rgba(248, 245, 238, 0.95);
color: rgba(19, 18, 18, 0.95);
border: 1px solid rgba(139, 115, 85, 0.35);
border-radius: 3px;
padding: 0.15rem 0.3rem;
transition: border-color 0.2s ease, box-shadow 0.2s ease;
}
.fvtt-te-deum input:not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="submit"]):not([type="image"]):not([type="file"]):hover,
.fvtt-te-deum select:hover {
border-color: rgba(139, 115, 85, 0.65);
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12);
}
.fvtt-te-deum input:not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="submit"]):not([type="image"]):not([type="file"]):focus,
.fvtt-te-deum select:focus {
outline: none;
border-color: rgba(139, 115, 85, 0.85);
box-shadow: 0 0 0 2px rgba(139, 115, 85, 0.2);
}
.fvtt-te-deum input:not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="submit"]):not([type="image"]):not([type="file"]):disabled,
.fvtt-te-deum select:disabled {
color: rgba(19, 18, 18, 0.4);
background: rgba(220, 216, 205, 0.6);
border-color: rgba(139, 115, 85, 0.15);
}
.fvtt-te-deum textarea {
background: rgba(248, 245, 238, 0.95);
color: rgba(19, 18, 18, 0.95);
border: 1px solid rgba(139, 115, 85, 0.35);
border-radius: 3px;
padding: 0.2rem 0.4rem;
transition: border-color 0.2s ease, box-shadow 0.2s ease;
}
.fvtt-te-deum textarea:hover {
border-color: rgba(139, 115, 85, 0.65);
}
.fvtt-te-deum textarea:focus {
outline: none;
border-color: rgba(139, 115, 85, 0.85);
box-shadow: 0 0 0 2px rgba(139, 115, 85, 0.2);
}
.fvtt-te-deum.window-app .window-content,
.fvtt-te-deum.application .window-content,
.fvtt-te-deum.window-app.sheet .window-content .sheet-body,
.fvtt-te-deum.application.sheet .window-content .sheet-body {
font-size: 0.8rem;
background: rgba(226, 226, 222, 0.95);
color: rgba(19, 18, 18, 0.95);
}
.item-form .sheet-header {
background: linear-gradient(135deg, rgba(226, 226, 222, 0.95) 0%, rgba(240, 235, 225, 0.9) 100%);
padding: 0.8rem;
border-radius: 8px;
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.15);
border: 1px solid rgba(139, 115, 85, 0.3);
margin-bottom: 0.5rem;
}
.item-form .sheet-body ul {
list-style: none;
padding: 0;
margin: 0;
}
.item-form .sheet-body ul li.flexrow {
background: rgba(255, 255, 255, 0.3);
padding: 0.4rem 0.6rem;
margin: 0.3rem 0;
border-radius: 4px;
border-left: 3px solid rgba(139, 115, 85, 0.3);
transition: all 0.2s ease;
}
.item-form .sheet-body ul li.flexrow:hover {
background: rgba(255, 255, 255, 0.5);
border-left-color: rgba(139, 115, 85, 0.6);
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
}
.item-form .sheet-body h3 {
background: linear-gradient(135deg, rgba(196, 186, 166, 0.6) 0%, rgba(226, 226, 222, 0.5) 100%);
padding: 0.4rem 0.6rem;
margin: 0.8rem 0 0.4rem 0;
border-radius: 4px;
border-left: 4px solid rgba(139, 115, 85, 0.6);
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
font-family: MailartRubberstamp;
font-size: 1.1rem;
color: #3d3a2e;
}
.item-form .sheet-body input[type="checkbox"] {
width: 18px;
height: 18px;
cursor: pointer;
}
.fvtt-te-deum.application .window-content .sheet-header h1.charname input[name="name"],
.fvtt-te-deum.window-app .window-content .sheet-header h1.charname input[name="name"] {
font-family: "GreatPrimer";
font-size: 3rem;
background: transparent;
border: none;
border-bottom: 2px solid rgba(139, 115, 85, 0.4);
color: rgba(50, 35, 15, 0.95);
width: 100%;
height: 100%;
margin: 0;
letter-spacing: 0.05em;
transition: border-color 0.2s ease;
}
.fvtt-te-deum.application .window-content .sheet-header h1.charname input[name="name"]:hover,
.fvtt-te-deum.window-app .window-content .sheet-header h1.charname input[name="name"]:hover {
border-width: 2px;
border-color: rgba(139, 115, 85, 0.7);
}
.fvtt-te-deum.application .window-content .sheet-header h1.charname input[name="name"]:focus,
.fvtt-te-deum.window-app .window-content .sheet-header h1.charname input[name="name"]:focus {
border-bottom-color: rgba(139, 115, 85, 0.9);
outline: none;
}
.fvtt-te-deum.application .window-content .item-form .sheet-header h1.charname input[name="name"],
.fvtt-te-deum.window-app .window-content .item-form .sheet-header h1.charname input[name="name"] {
font-size: 1.6rem;
height: auto;
}
.fvtt-te-deum .sheet-body {
padding: 0.25rem 0.5rem;
}
.fvtt-te-deum .sheet-body:after {
content: "";
display: block;
clear: both;
}
.fvtt-te-deum nav.tabs .item {
z-index: 2;
position: relative;
opacity: 1;
color: rgba(29, 28, 31);
padding: 0 0.25rem;
}
.fvtt-te-deum nav.tabs .item:after {
content: "";
position: absolute;
top: 0;
right: 0;
height: 2rem;
width: 1px;
}
.select-diff {
display: inline-block;
text-align: left;
width: 50px;
}
.fvtt-te-deum.window-app.sheet .window-content .carac-value,
.fvtt-te-deum.application.sheet .window-content .carac-value,
.fvtt-te-deum.window-app.sheet .window-content .competence-xp,
.fvtt-te-deum.application.sheet .window-content .competence-xp {
margin: 0.05rem;
flex-basis: 3rem;
text-align: center;
}
.fvtt-te-deum h1,
.fvtt-te-deum h2,
.fvtt-te-deum h3,
.fvtt-te-deum h4 {
font-weight: bold;
color: rgba(19, 18, 18, 0.95);
}
.fvtt-te-deum .malus-sante {
font-size: 0.88rem;
font-weight: normal;
}
.fvtt-te-deum .malus-sante-active {
color: rgba(200, 80, 10, 0.95);
font-weight: bold;
}
.fvtt-te-deum ul,
.fvtt-te-deum ol {
margin: 0;
padding: 0;
}
.fvtt-te-deum ul,
.fvtt-te-deum li {
list-style-type: none;
}
.header-fields li {
margin: 0;
padding: 0;
}
.alterne-list > .list-item:hover {
background: rgba(226, 226, 222, 0.4);
transform: translateX(2px);
}
.alterne-list > .list-item:nth-child(even) {
background: rgba(240, 235, 225, 0.3);
}
.alterne-list > .list-item:nth-child(odd) {
background: rgba(250, 245, 235, 0.2);
}
.specialisation-label {
font-size: 0.8rem;
}
.carac-label,
.attr-label {
font-weight: bold;
}
.list-item {
margin: 0.125rem;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
border-radius: 0.3rem;
padding: 0.3rem 0.4rem;
flex: 1 1 5rem;
border: 1px solid rgba(139, 115, 85, 0.15);
transition: all 0.2s ease;
}
.list-item:hover {
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.15);
border-color: rgba(139, 115, 85, 0.3);
background: rgba(255, 255, 255, 0.3);
}
.list-item-shadow {
background: linear-gradient(135deg, rgba(170, 168, 167, 0.25) 0%, rgba(200, 195, 185, 0.2) 100%);
flex-grow: 0;
flex-wrap: nowrap;
justify-content: flex-start;
border-left: 3px solid rgba(139, 115, 85, 0.3);
}
.list-item-shadow2 {
background: linear-gradient(135deg, rgba(87, 60, 32, 0.2) 0%, rgba(120, 90, 60, 0.15) 100%);
flex-grow: 0;
flex-wrap: nowrap;
justify-content: flex-start;
border-left: 3px solid rgba(87, 60, 32, 0.4);
}
.item-display-show {
display: block;
}
.item-display-hide {
display: none;
}
.item-quantite {
margin-left: 0.5rem;
}
.list-item-margin1 {
margin-left: 1rem;
}
.list-item-margin2 {
margin-left: 2rem;
}
.list-item-margin3 {
margin-left: 3rem;
}
.list-item-margin4 {
margin-left: 4rem;
}
.sheet-competence-img {
width: 24px;
max-width: 24px;
height: 24px;
max-height: 24px;
flex-grow: 0;
margin-right: 0.25rem;
border-radius: 3px;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.15);
border: 1px solid rgba(139, 115, 85, 0.3);
}
.competence-column {
flex-direction: column;
align-content: flex-start;
justify-content: flex-start;
flex-grow: 0;
flex-basis: 1;
}
.competence-header {
align-content: flex-start;
justify-content: flex-start;
font-weight: bold;
flex-grow: 0;
}
.comp-li {
max-width: 8rem;
width: 8rem;
}
.description-label {
flex-grow: 2;
margin-left: 4px;
}
.status-header-label {
margin-left: 2px;
}
.roll-dialog-label {
margin: 4px 0;
min-width: 96px;
}
.short-label {
flex-grow: 1;
}
.keyword-label {
font-size: 0.85rem;
}
.item-sheet-label {
flex-grow: 1;
}
.item-text-long-line {
flex-grow: 3;
}
.score-label {
flex-grow: 2;
align-content: center;
}
.attribut-value,
.carac-value {
flex-grow: 0;
flex-basis: 64px;
margin-right: 4px;
margin-left: 4px;
}
.sante-value,
.competence-value {
flex-grow: 0;
flex-basis: 2rem;
margin-right: 0.25rem;
margin-left: 0.25rem;
}
.description-value {
flex-grow: 0;
flex-basis: 4rem;
margin-right: 0.25rem;
margin-left: 0.25rem;
}
.small-label {
margin-top: 5px;
}

186
styles/base.css Normal file
View File

@@ -0,0 +1,186 @@
.fvtt-te-deum.window-app,
.fvtt-te-deum.application {
text-align: justify;
font-size: 16px;
letter-spacing: 1px;
}
.fvtt-te-deum.window-app.sheet .window-content,
.fvtt-te-deum.application.sheet .window-content {
margin: 0;
padding: 0;
font-family: "GreatPrimer";
}
.fvtt-te-deum.window-app.sheet .window-content .sheet-header,
.fvtt-te-deum.application.sheet .window-content .sheet-header {
color: rgba(19, 18, 18, 0.95);
background: rgba(226, 226, 222, 0.95);
}
.fvtt-te-deum.window-app.sheet .window-content .tooltip:hover .tooltiptext,
.fvtt-te-deum.application.sheet .window-content .tooltip:hover .tooltiptext {
top: 2rem;
left: 2rem;
margin: 0;
padding: 0.25rem;
}
.fvtt-te-deum.sheet header.sheet-header h1 input,
.window-app .window-header,
.application .window-header,
#actors .directory-list,
#navigation #scene-list .scene.nav-item {
font-size: 1rem;
}
.fvtt-te-deum.sheet nav.sheet-tabs,
.fvtt-te-deum.sheet nav.tabs {
font-size: 0.8rem;
font-size: 1.2rem;
font-weight: bold;
height: 3rem;
flex: 0 0 3rem;
margin: 0;
padding: 0 0 0 0.25rem;
text-align: center;
line-height: 1.5rem;
border-top: 0 none;
border-bottom: 0 none;
background: linear-gradient(rgba(226, 226, 222, 0.5), rgba(226, 226, 222, 0.5)), url("../images/ui/frise_bottom_01.webp");
background-repeat: no-repeat;
background-size: 100% 100%;
z-index: 1;
}
.fvtt-te-deum.sheet header.sheet-header .profile-img {
-o-object-fit: cover;
object-fit: cover;
-o-object-position: 50% 0;
object-position: 50% 0;
margin: 0.5rem 0 0.5rem 0.5rem;
padding: 0;
}
.fvtt-te-deum.sheet header.sheet-header .flex-compteurs {
text-align: right;
}
.fvtt-te-deum.sheet header.sheet-header .resource-content {
width: 2rem;
}
.fvtt-te-deum.sheet .tab[data-tab] {
padding: 0;
}
.fvtt-te-deum.sheet li {
margin: 0.2rem;
padding: 0.15rem;
}
.fvtt-te-deum.window-app input,
.fvtt-te-deum.application input,
.fvtt-te-deum .item-form,
.fvtt-te-deum.sheet header.sheet-header .flex-group-center.flex-compteurs,
.fvtt-te-deum.sheet header.sheet-header .flex-group-center.flex-fatigue,
.fvtt-te-deum select,
.fvtt-te-deum button,
.item-checkbox,
#sidebar,
#players,
#navigation #nav-toggle {
font-size: 0.8rem;
}
.window-header {
background: rgba(0, 0, 0, 0.75);
}
.strong-text {
font-weight: bold;
}
.fvtt-te-deum .tabs .item.active,
.fvtt-te-deum .blessures-list li ul li:first-child:hover,
.fvtt-te-deum a:hover {
text-shadow: 1px 0px 0px #ff6600;
}
.rollable:hover,
.rollable:focus {
color: #000;
text-shadow: 0 0 10px red;
cursor: pointer;
}
li.folder > .folder-header h3 {
color: #aaa;
}
.fvtt-te-deum table {
border: 1px solid #7a7971;
}
.grid,
.grid-2col {
display: grid;
grid-column: span 2 / span 2;
grid-template-columns: repeat(2, minmax(0, 1fr));
grid-gap: 10px;
gap: 10px;
margin: 10px 0;
padding: 0;
}
.grid-3col {
grid-column: span 3 / span 3;
grid-template-columns: repeat(3, minmax(0, 1fr));
}
.grid-4col {
grid-column: span 4 / span 4;
grid-template-columns: repeat(4, minmax(0, 1fr));
}
.grid-5col {
grid-column: span 5 / span 5;
grid-template-columns: repeat(5, minmax(0, 1fr));
}
.grid-6col {
grid-column: span 5 / span 5;
grid-template-columns: repeat(5, minmax(0, 1fr));
}
.grid-7col {
grid-column: span 7 / span 7;
grid-template-columns: repeat(7, minmax(0, 1fr));
}
.grid-8col {
grid-column: span 8 / span 8;
grid-template-columns: repeat(8, minmax(0, 1fr));
}
.grid-9col {
grid-column: span 9 / span 9;
grid-template-columns: repeat(9, minmax(0, 1fr));
}
.grid-10col {
grid-column: span 10 / span 10;
grid-template-columns: repeat(10, minmax(0, 1fr));
}
.grid-11col {
grid-column: span 11 / span 11;
grid-template-columns: repeat(11, minmax(0, 1fr));
}
.grid-12col {
grid-column: span 12 / span 12;
grid-template-columns: repeat(12, minmax(0, 1fr));
}
.flex-group-center,
.flex-group-left,
.flex-group-right {
justify-content: center;
align-items: center;
text-align: center;
padding: 5px;
}
.flex-group-left {
justify-content: flex-start;
text-align: left;
}
.flex-group-right {
justify-content: flex-end;
text-align: right;
}
.flex-center {
align-items: center;
justify-content: center;
text-align: center;
}
.table-create-actor {
font-size: 0.8rem;
}
.flex-between {
justify-content: space-between;
}
.flex-shrink {
flex: "flex-shrink";
}

466
styles/chat.css Normal file
View File

@@ -0,0 +1,466 @@
.chat-message-header {
background: linear-gradient(135deg, rgba(226, 226, 222, 0.95) 0%, rgba(196, 186, 166, 0.9) 100%);
font-size: 0.9rem;
min-height: 26px;
text-align: center;
vertical-align: middle;
display: flex;
align-items: center;
justify-content: center;
border-bottom: 2px solid rgba(139, 115, 85, 0.6);
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.15);
padding: 0.1rem 0.3rem;
border-radius: 6px 6px 0 0;
}
.chat-message .message-header .flavor-text,
.chat-message .message-header .whisper-to {
font-size: 0.9rem;
}
.chat-result-text {
font-weight: bold;
font-family: GreatPrimer;
font-size: 1.1rem;
color: rgba(80, 50, 15, 0.95);
padding: 0 0 0.1rem 0;
line-height: 1.3;
border-bottom: 1px solid rgba(139, 115, 85, 0.4);
display: block;
margin-bottom: 0.2rem;
letter-spacing: 0.03em;
}
.chat-actor-name {
font-weight: bold;
font-family: GreatPrimer;
font-size: 1.1rem;
color: rgba(80, 50, 15, 0.95);
line-height: 1;
letter-spacing: 0.03em;
margin: 0;
padding: 0;
}
.chat-actor-name-opposition {
font-weight: bold;
font-family: GreatPrimer;
font-size: 1.1rem;
color: rgba(80, 50, 15, 0.95);
padding: 0.1rem 0.3rem;
letter-spacing: 0.03em;
}
.chat-result-success {
color: #2d5016;
background: linear-gradient(135deg, rgba(144, 238, 144, 0.3), rgba(107, 186, 107, 0.25));
padding: 0.25rem 0.6rem;
border-radius: 4px;
border-left: 3px solid #4a7c2c;
display: inline-block;
margin: 0.15rem 0;
box-shadow: 0 1px 3px rgba(45, 80, 22, 0.2);
font-weight: bold;
}
.chat-result-failure {
color: #7a1a1a;
background: linear-gradient(135deg, rgba(255, 160, 160, 0.3), rgba(205, 120, 120, 0.25));
padding: 0.25rem 0.6rem;
border-radius: 4px;
border-left: 3px solid #a82020;
display: inline-block;
margin: 0.15rem 0;
box-shadow: 0 1px 3px rgba(122, 26, 26, 0.2);
font-weight: bold;
}
.chat-img {
width: 64px;
height: 64px;
}
.chat-command-img {
border: 0px;
width: 32px;
height: 32px;
transition: transform 0.2s ease, box-shadow 0.2s ease;
border-radius: 4px;
}
.chat-command-img:hover {
transform: scale(1.1);
box-shadow: 0 3px 8px rgba(255, 102, 0, 0.4);
}
.chat-result-column {
min-width: 70%;
width: 70%;
}
.roll-dialog-header {
background: linear-gradient(135deg, rgba(226, 226, 222, 0.95) 0%, rgba(196, 186, 166, 0.9) 100%);
min-height: 48px;
padding: 0.4rem 0.6rem;
border-radius: 6px 6px 0 0;
border-bottom: 2px solid rgba(139, 115, 85, 0.6);
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.15);
display: flex;
align-items: center;
justify-content: center;
gap: 0.5rem;
}
.roll-dialog-header .actor-icon {
width: 40px;
height: 40px;
border-radius: 50%;
border: 2px solid rgba(139, 115, 85, 0.5);
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);
}
.roll-dialog-header .dialog-roll-title {
font-family: GreatPrimer;
font-size: 1.1rem;
margin: 0;
color: #3d3a2e;
text-shadow: 1px 1px 1px rgba(255, 255, 255, 0.5);
}
.actor-icon {
width: 28px;
height: 28px;
padding: 1px;
border-radius: 50%;
border: 2px solid rgba(139, 115, 85, 0.5);
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);
flex-shrink: 0;
margin-right: 0.4rem;
}
.padding-dice {
padding-top: 0.2rem;
padding-bottom: 0.2rem;
}
.dice-image {
box-sizing: border-box;
border: none;
border-radius: 0;
max-width: 100%;
}
.dice-image-reroll {
background-color: rgba(115, 224, 115, 0.25);
border-color: #011d33;
box-sizing: border-box;
border: 1px;
border-radius: 0%;
max-width: 100%;
}
.chat-dice {
width: 15%;
height: 15%;
font-size: 15px;
padding: 10px;
padding-bottom: 20px;
padding-top: 0.2rem;
padding-bottom: 0.2rem;
}
.div-center {
align-self: center;
}
.chat-message {
background: rgba(240, 235, 225, 0.95);
font-size: 0.9rem;
border-radius: 8px;
box-shadow: 0 3px 8px rgba(0, 0, 0, 0.15);
border: 1px solid rgba(139, 115, 85, 0.3);
}
.chat-message.whisper {
background: rgba(220, 220, 210, 0.85);
border: 2px solid #545469;
box-shadow: 0 3px 10px rgba(84, 84, 105, 0.3);
}
.chat-message .chat-icon {
border: 0;
padding: 2px 6px 2px 2px;
float: left;
width: 64px;
height: 64px;
}
.ability-icon {
border: 0;
padding: 2px 2px 2px 2px;
max-width: 32px;
max-height: 32px;
width: auto;
height: auto;
}
.small-ability-icon {
border: 0;
padding: 2px 2px 2px 2px;
max-width: 16px;
max-height: 16px;
width: auto;
height: auto;
}
.combat-icon {
border: 0;
padding: 2px 2px 2px 2px;
max-width: 24px;
max-height: 24px;
width: auto;
height: auto;
}
#sidebar-tabs {
flex: 0 0 32px;
box-sizing: border-box;
margin: 0 0 5px;
border-bottom: 1px solid rgba(0, 0, 0, 0);
box-shadow: inset 0 0 2rem rgba(0, 0, 0, 0.5);
}
#sidebar-tabs > .item.active {
border: 1px solid #726248;
background: rgba(30, 25, 20, 0.75);
box-shadow: 0 0 6px inset #726248;
}
#controls .scene-control,
#controls .control-tool {
box-shadow: 0 0 3px #000;
margin: 0 0 8px;
border-radius: 0;
background: #1e1914;
background-origin: padding-box;
border-image-width: 4px;
border-image-outset: 0px;
}
#controls .scene-control.active,
#controls .control-tool.active,
#controls .scene-control:hover,
#controls .control-tool:hover {
background: #482e1c;
background-origin: padding-box;
border-image-width: 4px;
border-image-outset: 0px;
box-shadow: 0 0 3px #ff6400;
}
#hotbar #action-bar #macro-list {
border: 1px solid #482e1c;
box-shadow: 2px 2px 5px #000000;
}
#hotbar #action-bar .macro {
-o-border-image: url(img/ui/bg_control.jpg) 21 repeat;
border-image: url(img/ui/bg_control.jpg) 21 repeat;
border-image-slice: 6 6 6 6 fill;
border-image-width: 6px 6px 6px 6px;
border-image-outset: 0px 0px 0px 0px;
border-radius: 0px;
}
#hotbar .bar-controls {
background: #1e1914;
border: 1px solid #482e1c;
}
#players {
border-image-width: 4px;
border-image-outset: 0px;
background: #1e1914;
}
#navigation #scene-list .scene.nav-item {
background: #1e1914;
background-origin: padding-box;
border-image-width: 4px;
border-image-outset: 0px;
}
#navigation #scene-list .scene.nav-item.active {
background: #482e1c;
}
#navigation #nav-toggle {
background: #1e1914;
background-origin: padding-box;
border-image-width: 4px;
border-image-outset: 0px;
}
#navigation #scene-list .scene.view,
#navigation #scene-list .scene.context {
background: #482e1c;
background-origin: padding-box;
border-image-width: 4px;
border-image-outset: 0px;
box-shadow: 0 0 3px #ff6400;
}
.chat-card-button {
box-shadow: inset 0px 1px 0px 0px #a6827e;
background: linear-gradient(to bottom, rgba(33, 55, 74, 0.98824) 5%, rgba(21, 40, 51, 0.67059) 100%);
background-color: rgba(125, 93, 59, 0);
border-radius: 3px;
border: 2px ridge #846109;
display: inline-block;
cursor: pointer;
color: #ffffff;
font-size: 0.8rem;
padding: 4px 12px 0px 12px;
text-decoration: none;
text-shadow: 0px 1px 0px #4d3534;
position: relative;
margin: 2px;
}
.chat-card-button:hover {
background: linear-gradient(to bottom, #800000 5%, #3e0101 100%);
background-color: red;
}
.chat-card-button:active {
position: relative;
top: 1px;
}
.plus-minus-button {
box-shadow: inset 0px 1px 0px 0px #a6827e;
background: linear-gradient(to bottom, rgba(33, 55, 74, 0.98824) 5%, rgba(21, 40, 51, 0.67059) 100%);
background-color: rgba(125, 93, 59, 0);
border-radius: 2px;
border: 1px ridge #846109;
display: inline-block;
cursor: pointer;
color: #ffffff;
margin: 2px 2px 2px 2px;
padding: 2px 2px 2px 2px;
text-decoration: none;
text-shadow: 0px 1px 0px #4d3534;
position: relative;
margin: 0px;
}
.plus-minus-button:hover,
.chat-card-button:hover {
background: linear-gradient(to bottom, #800000 5%, #3e0101 100%);
background-color: red;
}
.plus-minus-button:active,
.chat-card-button:active {
position: relative;
top: 1px;
}
.plus-minus {
font-size: 0.9rem;
font-weight: bold;
}
.ul-level1 {
padding-left: 2rem;
}
#pause {
font-size: 2rem;
}
#pause > h3 {
color: #ccc;
}
#pause > img {
content: url(../images/ui/logo_tedeum_pause.webp);
height: 200px;
width: 200px;
top: -200px;
left: calc(50% - 132px);
}
#logo {
content: url(../images/ui/logo_tedeum_pause.webp);
width: 100px;
height: 60px;
}
.dice-cell {
padding-left: 12px;
padding-right: 12px;
width: 60px;
text-align: center;
}
.dice-formula,
.dice-total {
height: 54px;
position: relative;
}
.chat-roll-details {
background: rgba(255, 255, 255, 0.4);
border-radius: 4px;
padding: 0.4rem 0.5rem;
margin: 0.25rem 0;
border: 1px solid rgba(139, 115, 85, 0.25);
}
.chat-roll-details ul {
margin: 0;
padding-left: 0.8rem;
}
.chat-roll-details ul li {
padding: 0.05rem 0;
line-height: 1.25;
}
.chat-roll-details ul li strong {
color: rgba(70, 67, 49, 0.9);
}
.chat-roll-result-section {
background: linear-gradient(135deg, rgba(255, 250, 240, 0.6), rgba(245, 240, 230, 0.5));
border-radius: 4px;
padding: 0.35rem;
margin: 0.2rem 0;
border: 2px solid rgba(139, 115, 85, 0.3);
box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1);
}
.chat-roll-result-section .chat-total-result {
font-size: 1rem;
font-weight: bold;
color: #3d3a2e;
text-align: center;
padding: 0.25rem;
background: rgba(226, 226, 222, 0.5);
border-radius: 4px;
margin-bottom: 0.25rem;
text-shadow: 1px 1px 2px rgba(255, 255, 255, 0.5);
}
.chat-dice-formula {
display: inline-block;
background: rgba(139, 115, 85, 0.15);
padding: 0.15rem 0.4rem;
border-radius: 3px;
font-family: monospace;
font-size: 0.9em;
border: 1px solid rgba(139, 115, 85, 0.3);
color: #5a4a3a;
font-weight: 600;
}
.chat-difficulty-badge {
display: inline-block;
background: linear-gradient(135deg, rgba(180, 160, 130, 0.4), rgba(160, 140, 110, 0.35));
padding: 0.15rem 0.5rem;
border-radius: 10px;
font-weight: bold;
border: 1px solid rgba(139, 115, 85, 0.4);
color: #4a3a2a;
font-size: 0.85em;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.15);
}
.chat-info-badge {
display: inline-block;
background: rgba(100, 149, 237, 0.15);
padding: 0.15rem 0.4rem;
border-radius: 3px;
border-left: 2px solid rgba(70, 130, 180, 0.6);
margin: 0.08rem 0;
font-size: 0.8em;
color: #2c4a6a;
}
.chat-warning-badge {
display: inline-block;
background: rgba(255, 200, 100, 0.2);
padding: 0.15rem 0.4rem;
border-radius: 3px;
border-left: 2px solid rgba(218, 165, 32, 0.7);
margin: 0.08rem 0;
font-size: 0.8em;
color: #7a5a1a;
}
.chat-actions-bar {
display: flex;
justify-content: center;
gap: 0.3rem;
padding: 0.4rem;
background: rgba(226, 226, 222, 0.4);
border-top: 1px solid rgba(139, 115, 85, 0.25);
border-radius: 0 0 6px 6px;
margin-top: 0.25rem;
}
.chat-actions-bar a {
transition: all 0.2s ease;
}
.chat-actions-bar a:hover {
transform: translateY(-2px);
}
.chat-negative-dice {
display: inline-block;
background: linear-gradient(135deg, rgba(255, 100, 100, 0.2), rgba(220, 80, 80, 0.15));
padding: 0.2rem 0.5rem;
border-radius: 4px;
border: 2px solid rgba(178, 34, 34, 0.4);
font-weight: bold;
color: #8b0000;
margin: 0.15rem 0;
box-shadow: 0 1px 3px rgba(178, 34, 34, 0.2);
}

191
styles/dialogs.css Normal file
View File

@@ -0,0 +1,191 @@
.te-deum-roll-dialog .window-header {
border-radius: 10px 10px 0% 0%;
}
.te-deum-roll-dialog .window-content {
border-radius: 0% 0% 10px 10px;
}
.skill-roll-dialog {
background: linear-gradient(135deg, rgba(240, 235, 225, 0.98) 0%, rgba(250, 245, 235, 0.95) 100%);
border-radius: 8px;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);
border: 1px solid rgba(139, 115, 85, 0.3);
overflow: hidden;
}
.skill-roll-dialog .flexcol {
padding: 0.6rem 0.8rem;
gap: 0.4rem;
}
.skill-roll-dialog .flexrow {
margin: 0.3rem 0;
padding: 0.4rem 0.5rem;
background: rgba(255, 255, 255, 0.4);
border-radius: 4px;
border-left: 3px solid rgba(139, 115, 85, 0.3);
align-items: center;
gap: 0.5rem;
transition: all 0.2s ease;
}
.skill-roll-dialog .flexrow:hover {
background: rgba(255, 255, 255, 0.6);
border-left-color: rgba(139, 115, 85, 0.6);
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
}
.skill-roll-dialog .roll-dialog-label {
font-family: GreatPrimer;
font-size: 0.85rem;
font-weight: 600;
color: #3d3a2e;
min-width: 140px;
}
.skill-roll-dialog .roll-dialog-label:first-child {
color: rgba(70, 67, 49, 0.9);
font-weight: 700;
}
.skill-roll-dialog input[type="checkbox"] {
width: 18px;
height: 18px;
cursor: pointer;
}
.skill-roll-dialog div {
margin-top: 4px;
margin-bottom: 4px;
}
.skill-roll-dialog .sheet-footer {
padding: 0.5rem 0.8rem;
gap: 0.5rem;
border-top: 1px solid rgba(139, 115, 85, 0.3);
margin-top: 0.5rem;
}
.skill-roll-dialog .sheet-footer button {
flex: 1;
padding: 0.4rem 0.8rem;
border-radius: 4px;
font-family: "GreatPrimer";
font-size: 0.9rem;
cursor: pointer;
border: 1px solid rgba(139, 115, 85, 0.5);
background: linear-gradient(135deg, rgba(196, 186, 166, 0.8) 0%, rgba(226, 226, 222, 0.9) 100%);
color: rgba(50, 35, 15, 0.95);
transition: all 0.2s ease;
}
.skill-roll-dialog .sheet-footer button:hover {
background: linear-gradient(135deg, #c4baa6 0%, #d2cdc3 100%);
border-color: rgba(139, 115, 85, 0.8);
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.15);
}
.confront-dice {
border-width: 0px;
}
.bonus-spec {
max-width: 48px;
}
.confront-bonus-container {
position: relative;
flex-grow: 1;
text-align: center;
color: black;
}
.pool-list {
align-items: center;
justify-content: center;
}
.corps-combat-block {
position: relative;
width: 600px;
height: 600px;
}
.silhouette-combat-picture {
width: 250px;
max-width: 250px;
border: 0;
}
.silhouette-combat-block {
position: absolute;
background: white;
border-color: darkgray;
border-style: ridge;
border: 1;
width: 180px;
min-height: 84px;
height: auto;
margin: 0 auto;
font-size: 0.8rem;
align-self: center;
overflow: visible;
}
.silhouette-combat-space {
width: 60px;
min-width: 60px;
}
.center-content {
display: flex;
justify-content: center;
align-items: center;
}
.chat-message .message {
font-family: "GreatPrimer";
font-size: 0.9rem;
}
.fvtt-te-deum-character-creator {
/*background: rgba(226, 226, 222, 0.95);*/
font-family: "GreatPrimer";
font-size: 0.9rem;
}
.fvtt-te-deum-character-creator .field-title {
font-weight: bold;
}
.fvtt-te-deum-character-creator .form-group label {
color: rgba(30, 25, 15, 0.9);
}
.fvtt-te-deum-character-creator .status-section {
display: block;
max-width: 34rem;
}
.fvtt-te-deum-character-creator .creator-finished-section {
display: block;
max-width: 34rem;
text-align: center;
margin-bottom: 1rem;
}
.fvtt-te-deum-character-creator .stage-main-details {
text-align: center;
margin-top: 1rem;
}
.grace-texte {
margin-top: 1rem;
}
.chat-welcome {
text-align: center;
}
.item-name-label {
min-width: 12rem;
}
.compendium-sidebar .directory-item.compendium.locked .compendium-name {
background: rgba(0, 0, 0, 0.1);
}
.compendium-sidebar .directory-item.compendium .compendium-name {
background: rgba(0, 0, 0, 0.1);
}
.compendium-sidebar .directory-item.compendium:hover .compendium-name {
text-shadow: 0 0 8px var(--color-shadow-primary);
background: rgba(0, 0, 0, 0.9);
}
.compendium-sidebar .directory-item.compendium .compendium-footer .source {
display: inline-block;
font-size: var(--font-size-12);
padding: 1px 0.5rem 0 0.25rem;
border-radius: 0 3px 0 0;
background: rgba(0, 0, 0, 0.1);
}
.tedeum-create-character {
align-self: anchor-center;
}
.message-chat-center {
text-align: center;
}
.welcome-message-h3 {
font-size: 1.2rem;
text-align: center;
margin-bottom: 0.5rem;
color: darkred;
}

324
styles/items.css Normal file
View File

@@ -0,0 +1,324 @@
.padd-right {
margin-right: 8px;
}
.padd-left {
margin-left: 8px;
}
.fortune-row {
flex-wrap: nowrap;
align-items: center;
gap: 0.4rem;
padding: 0.3rem 0.5rem;
margin-bottom: 0.5rem;
}
.fortune-row label {
flex: 0 0 auto;
min-width: unset;
font-weight: 600;
color: rgba(70, 67, 49, 0.9);
}
.fortune-row input {
flex: 0 0 auto;
}
.stack-left {
align-items: center;
flex-shrink: 1;
flex-grow: 0;
}
.packed-left {
white-space: nowrap;
flex-grow: 0;
}
.input-numeric-short {
width: 52px;
max-width: 52px;
flex-grow: 0;
flex-shrink: 0;
flex-basis: 52px;
margin-right: 0.15rem;
margin-left: 0.15rem;
}
.abilities-table {
align-content: flex-start;
}
.tokenhudext {
display: flex;
flex: 0 !important;
font-weight: 600;
}
.tokenhudext.left {
justify-content: flex-start;
flex-direction: column;
position: absolute;
top: 2.75rem;
right: 4rem;
}
.tokenhudext.right {
justify-content: flex-start;
flex-direction: column;
position: absolute;
top: 2.75rem;
left: 4rem;
}
.control-icon.tokenhudicon {
width: -moz-fit-content;
width: fit-content;
height: -moz-fit-content;
height: fit-content;
min-width: 6rem;
flex-basis: auto;
padding: 0;
line-height: 1rem;
margin: 0.25rem;
}
.control-icon.tokenhudicon.right {
margin-left: 8px;
}
#token-hud .status-effects.active {
z-index: 2;
}
.token-sheet .window-content .flexcol .sheet-tabs {
font-size: 0.8rem;
}
.item-checkbox {
height: 25px;
border: 1px solid rgba(115, 105, 83, 0.65098);
border-left: none;
font-weight: 500;
font-size: 1rem;
color: black;
padding-top: 5px;
margin-right: 0px;
width: 45px;
position: relative;
left: 0px;
text-align: center;
}
.skill-label {
font-size: 0.7rem;
}
.skill-good-checkbox {
max-height: 10px;
max-width: 10px;
}
.flex-actions-bar {
flex-grow: 2;
}
#sidebar {
font-size: 1rem;
background-color: #f5f5f5;
background-position: 0px 35px;
background-repeat: no-repeat;
background: rgba(226, 226, 222, 0.95);
color: rgba(19, 18, 18, 0.95);
}
#sidebar.collapsed {
height: 470px !important;
}
#sidebar #sidebar-tabs i {
display: inline-block;
background-position: center;
background-size: cover;
text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.75);
}
#sidebar-tabs > .collapsed,
#chat-controls .chat-control-icon {
color: rgba(19, 18, 18, 0.95);
text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.75);
}
.sidebar-tab .directory-list .entity {
border-top: 1px rgba(0, 0, 0, 0.25);
border-bottom: 0 none;
padding: 0.25rem 0;
}
.sidebar-tab .directory-list .entity:hover {
background: rgba(0, 0, 0, 0.05);
cursor: pointer;
}
.status-small-label {
font-size: 0.65rem;
}
.no-grow {
flex-grow: 1;
max-width: 32px;
}
.status-col-name {
max-width: 72px;
}
.img-no-border {
max-width: 48px;
max-height: 48px;
border: 0px;
}
.items-title-bg {
margin-top: 6px;
color: rgba(19, 18, 18, 0.95);
background: linear-gradient(135deg, rgba(196, 186, 166, 0.6) 0%, rgba(226, 226, 222, 0.5) 100%);
border-radius: 4px;
padding: 0.3rem 0.5rem;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
border-left: 4px solid rgba(139, 115, 85, 0.6);
}
.items-title-bg h3 {
margin: 0;
padding: 0;
font-size: 1.15rem;
font-weight: 600;
color: rgba(19, 18, 18, 0.95);
}
.item-name-label-header-long2 {
flex-grow: 1;
max-width: 14rem;
min-width: 14rem;
}
.impact-box {
border-width: 2px;
border-color: #000000;
border-radius: 6px;
border: 2px ridge #443307;
margin: 4px;
padding: 4px;
}
.impact-title {
font-size: bold;
display: flex;
align-items: center;
justify-content: center;
margin-left: auto;
margin-right: auto;
text-align: center;
}
.items-title-text {
text-align: center;
font-family: MailartRubberstamp;
margin-left: 4px;
}
.lock-icon {
width: 16px;
height: 16px;
}
.item-sheet-img {
width: 64px;
height: 64px;
border: 2px solid rgba(139, 115, 85, 0.4);
border-radius: 8px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
-o-object-fit: cover;
object-fit: cover;
}
.item-name-img {
flex-grow: 1;
max-width: 2rem;
min-width: 2rem;
}
.item-field {
margin-top: 4px;
}
.item-field-xp {
margin-top: 4px;
min-width: 8rem;
max-width: 8rem;
}
.item-field-label-short {
flex-grow: 1;
max-width: 4rem;
min-width: 4rem;
}
.item-field-label-medium {
flex-grow: 1;
max-width: 6rem;
min-width: 6rem;
}
.item-field-label-long,
.item-name-label-long {
font-weight: 600;
color: rgba(70, 67, 49, 0.9);
min-width: 160px;
}
.item-field-skill {
flex-grow: 1;
max-width: 6.8rem;
min-width: 6.8rem;
}
.item-field-label-long {
flex-grow: 1;
max-width: 10rem;
min-width: 10rem;
}
.item-field-title-long {
flex-grow: 1;
max-width: 12rem;
min-width: 12rem;
}
.item-field-label-long14 {
flex-grow: 1;
max-width: 14rem;
min-width: 14rem;
color: rgba(70, 67, 49, 0.9);
font-size: 1rem;
font-weight: 600;
}
.carac-box {
background: linear-gradient(135deg, rgba(226, 226, 222, 0.4) 0%, rgba(240, 235, 225, 0.3) 100%);
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
border-radius: 0.45rem;
padding: 0.3rem 0.5rem;
border: 1px solid rgba(139, 115, 85, 0.2);
transition: all 0.2s ease;
}
.carac-box:hover {
border-color: rgba(139, 115, 85, 0.4);
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.15);
}
.comp-box {
max-width: 16rem;
min-width: 16rem;
width: 16rem;
min-height: 1.6rem;
background: linear-gradient(135deg, rgba(250, 245, 235, 0.5) 0%, rgba(255, 255, 255, 0.3) 100%);
padding: 0.25rem 0.4rem;
margin: 0.15rem;
border-radius: 3px;
border-left: 2px solid rgba(139, 115, 85, 0.3);
transition: all 0.2s ease;
}
.comp-box:hover {
background: rgba(226, 226, 222, 0.4);
border-left-color: rgba(139, 115, 85, 0.6);
transform: translateX(2px);
}
.item-control-end {
align-self: flex-end;
}
.alternate-list {
margin-top: 4px;
flex-wrap: nowrap;
}
.item-filler {
flex-grow: 6;
flex-shrink: 7;
}
.item-controls-fixed {
min-width: 2rem;
max-width: 2rem;
}
.item-controls-fixed-full {
min-width: 3rem;
max-width: 3rem;
}
.item-left-pad {
margin-left: 4px;
}
.attribute-label {
font-weight: bold;
}
.flexrow-no-expand {
flex-grow: 0;
}
.item-input-small {
max-width: 16px;
max-height: 12px;
}
.character-summary-rollable {
text-decoration: underline;
}

195
styles/layout.css Normal file
View File

@@ -0,0 +1,195 @@
.fvtt-te-deum.window-app.sheet .window-content,
.fvtt-te-deum.application.sheet .window-content {
overflow: hidden;
display: flex;
flex-direction: column;
}
.application.fvtt-te-deum.sheet .window-content > [data-application-part],
.application.fvtt-te-deum.sheet .window-content > [data-application-part] > section {
flex: 1 1 0;
min-height: 0;
display: flex;
flex-direction: column;
overflow: hidden;
}
.fvtt-te-deum {
display: flex;
flex-direction: column;
overflow: hidden;
}
.fvtt-te-deum .sheet-header {
flex: 0 0 auto;
overflow: hidden;
display: flex;
flex-direction: row;
flex-wrap: wrap;
justify-content: flex-start;
margin-bottom: 10px;
background: linear-gradient(135deg, rgba(226, 226, 222, 0.95) 0%, rgba(240, 235, 225, 0.9) 100%);
padding: 0.3rem 0.8rem;
border-radius: 8px;
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.15);
border: 1px solid rgba(139, 115, 85, 0.3);
}
.fvtt-te-deum .sheet-header .profile-img {
flex: 0 0 128px;
width: 128px;
height: auto;
max-height: 128px;
margin-top: 0px;
margin-right: 10px;
-o-object-fit: cover;
object-fit: cover;
-o-object-position: 50% 0;
object-position: 50% 0;
border-width: 0px;
border-radius: 8px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
border: 2px solid rgba(139, 115, 85, 0.4);
}
.fvtt-te-deum .sheet-header .header-fields {
flex: 1;
}
.fvtt-te-deum .sheet-header h1.charname {
height: 50px;
padding: 0px;
margin: 5px 0;
border-bottom: 0;
}
.fvtt-te-deum .sheet-header .header-identity-fields {
flex-wrap: nowrap;
align-items: center;
gap: 0.3rem;
margin-top: 0.2rem;
}
.fvtt-te-deum .sheet-header .header-identity-fields input,
.fvtt-te-deum .sheet-header .header-identity-fields select {
flex: 1 1 auto;
font-size: 0.75rem;
height: 1.6rem;
}
.fvtt-te-deum .sheet-header .header-identity-label {
flex: 0 0 auto;
font-size: 0.7rem;
font-weight: 600;
color: rgba(70, 67, 49, 0.9);
white-space: nowrap;
}
.fvtt-te-deum .sheet-tabs {
flex: 0;
font-family: "MailartRubberstamp";
font-size: 2.2rem;
}
.fvtt-te-deum .tox .tox-editor-container {
background: #fff;
}
.fvtt-te-deum .tox .tox-edit-area {
padding: 0 8px;
}
.fvtt-te-deum .resource-label {
font-weight: bold;
text-transform: uppercase;
}
.fvtt-te-deum .tabs {
height: 40px;
border-top: 1px solid rgba(139, 115, 85, 0.4);
border-bottom: 1px solid rgba(139, 115, 85, 0.4);
background: linear-gradient(180deg, rgba(226, 226, 222, 0.5) 0%, rgba(240, 235, 225, 0.3) 100%);
color: #000000;
font-family: "GreatPrimer";
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
}
.fvtt-te-deum .tabs .item {
line-height: 40px;
font-weight: bold;
padding: 0 1rem;
transition: all 0.2s ease;
}
.fvtt-te-deum .tabs .item:hover {
background: rgba(226, 226, 222, 0.6);
color: rgba(70, 67, 49, 0.9);
}
.fvtt-te-deum .tabs .item.active {
text-decoration: underline;
text-shadow: none;
background: rgba(196, 186, 166, 0.4);
border-bottom: 3px solid rgba(139, 115, 85, 0.8);
}
.fvtt-te-deum .items-list {
list-style: none;
margin: 1px 0;
padding: 0;
overflow-y: auto;
}
.fvtt-te-deum .items-list .item-header {
font-weight: bold;
}
.fvtt-te-deum .items-list .item {
height: 30px;
line-height: 24px;
padding: 1px 0;
border-bottom: 1px solid #bbb;
}
.fvtt-te-deum .items-list .item .item-image {
flex: 0 0 24px;
margin-right: 5px;
}
.fvtt-te-deum .items-list .item img {
display: block;
}
.fvtt-te-deum .items-list .item-name {
margin: 0;
}
.fvtt-te-deum .items-list .item-controls {
flex: 0 0 86px;
text-align: right;
}
.profile-img-container {
margin-right: 0.2rem;
max-width: 140px;
width: 140px;
}
.button-img {
vertical-align: baseline;
width: 8%;
height: 8%;
max-height: 48px;
border-width: 0px;
border: 1px solid rgba(0, 0, 0, 0);
}
.button-img:hover {
color: rgba(255, 255, 128, 0.7);
border: 1px solid rgba(255, 128, 0, 0.8);
cursor: pointer;
}
.button-effect-img {
vertical-align: baseline;
width: 16px;
max-height: 16px;
height: 16;
border-width: 0;
}
.small-button-container {
height: 16px;
width: 16px;
border: 0;
vertical-align: bottom;
}
.fvtt-te-deum .sheet-body {
flex: 1 1 0;
min-height: 0;
overflow: hidden;
font-size: 0.8rem;
font-family: "GreatPrimer";
}
.fvtt-te-deum .sheet-body .tab {
height: 100%;
overflow-y: auto;
font-size: 0.8rem;
font-family: "GreatPrimer";
}
.fvtt-te-deum .sheet-body .tab .editor {
height: 100%;
font-size: 0.8rem;
font-family: "GreatPrimer";
}

File diff suppressed because it is too large Load Diff

6
styles/variables.css Normal file
View File

@@ -0,0 +1,6 @@
@font-face {
font-family: "MailartRubberstamp";
src: url("../fonts/MailartRubberstamp-Regular.woff") format("woff");
font-family: "GreatPrimer";
src: url("../fonts/IM_FELL_Great_Primer_Roman.woff") format("woff");
}

View File

@@ -151,6 +151,48 @@
"version": "13.0.2", "version": "13.0.2",
"download": "https://www.uberwald.me/gitea/public/fvtt-te-deum/releases/download/13.0.1/fvtt-te-deum-13.0.2.zip", "download": "https://www.uberwald.me/gitea/public/fvtt-te-deum/releases/download/13.0.1/fvtt-te-deum-13.0.2.zip",
"background": "systems/fvtt-te-deum/images/ui/tdeum_welcome_page_01.webp", "background": "systems/fvtt-te-deum/images/ui/tdeum_welcome_page_01.webp",
"documentTypes": {
"Actor": {
"pj": {
"htmlFields": ["description", "notes", "connaissances", "histoire", "vetements", "equipmentfree"]
},
"pnj": {
"htmlFields": ["description", "notes", "connaissances", "histoire", "vetements", "equipmentfree"]
}
},
"Item": {
"arme": {
"htmlFields": ["description"]
},
"competence": {
"htmlFields": ["description"]
},
"armure": {
"htmlFields": ["description"]
},
"equipement": {
"htmlFields": ["description"]
},
"origine": {
"htmlFields": ["description"]
},
"education": {
"htmlFields": ["description"]
},
"grace": {
"htmlFields": ["description"]
},
"blessure": {
"htmlFields": ["description"]
},
"maladie": {
"htmlFields": ["transmission", "symptomes", "complications", "description"]
},
"simple": {
"htmlFields": ["vertus", "toxicite", "description"]
}
}
},
"flags": { "flags": {
"hotReload": { "hotReload": {
"extensions": [ "extensions": [

22
template.json.BACKUP Normal file
View File

@@ -0,0 +1,22 @@
{
"Actor": {
"types": ["pj", "pnj"],
"htmlFields": ["description", "equipmentfree", "histoire"],
"pj": {},
"pnj": {}
},
"Item": {
"types": ["arme", "competence", "armure", "grace", "equipement", "origine", "education", "blessure", "maladie", "simple"],
"htmlFields": ["description", "transmission", "symptomes", "vertus", "toxicité"],
"blessure": {},
"maladie": {},
"arme": {},
"competence": {},
"armure": {},
"equipement": {},
"origine": {},
"education": {},
"grace": {},
"debouche": {}
}
}

View File

@@ -1,4 +1,4 @@
<form class="{{cssClass}}" autocomplete="off"> <section class="{{cssClass}}" autocomplete="off">
{{!-- Sheet Header --}} {{!-- Sheet Header --}}
<header class="sheet-header"> <header class="sheet-header">
@@ -6,24 +6,31 @@
<div class="flexrow"> <div class="flexrow">
<div class="profile-img-container"> <div class="profile-img-container">
<img class="profile-img" src="{{img}}" data-edit="img" title="{{name}}" /> <img class="profile-img" src="{{img}}" data-action="editImage" title="{{name}}" />
</div> </div>
<div class="flexcol"> <div class="flexcol">
<h1 class="charname margin-right"><input name="name" type="text" value="{{name}}" placeholder="Name" /></h1> <h1 class="charname margin-right"><input name="name" type="text" value="{{name}}" placeholder="Name" /></h1>
<div class="flexrow"> <div class="flexrow header-identity-fields">
<label class="header-identity-label">Origine sociale</label>
<input type="text" name="system.statutocial" value="{{system.statutocial}}" data-dtype="String" />
<label class="header-identity-label">Genre</label>
<select type="text" name="system.genre" data-dtype="String">
{{selectOptions @root.config.genre selected=system.genre}}
</select>
<label class="header-identity-label">Religion</label>
<input type="text" name="system.religion" value="{{system.religion}}" data-dtype="String" />
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div>
</header> </header>
{{!-- Sheet Tab Navigation --}} {{!-- Sheet Tab Navigation --}}
<nav class="sheet-tabs tabs" data-group="primary"> <nav class="tabs" data-group="primary">
<a class="item" data-tab="principal">Carac&Santé</a> <a class="item" data-tab="principal">Carac&Santé</a>
<a class="item" data-tab="competences">Compétences</a> <a class="item" data-tab="competences">Compétences</a>
<a class="item" data-tab="combat">Combat</a> <a class="item" data-tab="combat">Combat</a>
@@ -57,7 +64,7 @@
</ul> </ul>
<div> <div>
<h4>Malus de santé : {{santeModifier}} niveaux</h4> <h4 class="malus-sante {{#if santeModifier}}malus-sante-active{{/if}}">Malus de santé : {{santeModifier}} niveaux</h4>
</div> </div>
<ul class="item-list alternate-list"> <ul class="item-list alternate-list">
@@ -66,13 +73,13 @@
<h3><label class="item-field-label-long">Blessures</label></h3> <h3><label class="item-field-label-long">Blessures</label></h3>
</span> </span>
<div class="item-controls item-controls-fixed"> <div class="item-controls item-controls-fixed">
<a class="item-control blessure-add" data-type="blessure" title="Ajouter une Blessure"><i class="fas fa-plus"></i></a> <a class="item-control blessure-add" data-action="createBlessure" data-type="blessure" title="Ajouter une Blessure"><i class="fas fa-plus"></i></a>
</div> </div>
</li> </li>
{{#each blessures as |blessure key|}} {{#each blessures as |blessure key|}}
<li class="item flexrow list-item list-item-shadow item-id" data-item-id="{{blessure._id}}"> <li class="item flexrow list-item list-item-shadow item-id" data-item-id="{{blessure._id}}">
<a class="item-edit item-name-img" title="Editer Item"><img class="sheet-competence-img" <a class="item-edit item-name-img" data-action="editItem" title="Editer Item"><img class="sheet-competence-img"
src="{{blessure.img}}" /></a> src="{{blessure.img}}" /></a>
<span class="item-field-label-medium"> <span class="item-field-label-medium">
{{blessure.name}} {{blessure.name}}
@@ -88,8 +95,8 @@
</span> </span>
<div class="item-filler">&nbsp;</div> <div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed"> <div class="item-controls item-controls-fixed">
<a class="item-control item-edit" title="Editer"><i class="fas fa-edit"></i></a> <a class="item-control item-edit" data-action="editItem" title="Editer"><i class="fas fa-edit"></i></a>
<a class="item-control item-delete" title="Supprimer l'arme"><i class="fas fa-trash"></i></a> <a class="item-control item-delete" data-action="deleteItem" title="Supprimer l'arme"><i class="fas fa-trash"></i></a>
</div> </div>
</li> </li>
{{/each}} {{/each}}
@@ -104,7 +111,7 @@
</li> </li>
{{#each maladies as |maladie key|}} {{#each maladies as |maladie key|}}
<li class="item flexrow list-item list-item-shadow item-id" data-item-id="{{maladie._id}}"> <li class="item flexrow list-item list-item-shadow item-id" data-item-id="{{maladie._id}}">
<a class="item-edit item-name-img" title="Editer Item"><img class="sheet-competence-img" <a class="item-edit item-name-img" data-action="editItem" title="Editer Item"><img class="sheet-competence-img"
src="{{maladie.img}}" /></a> src="{{maladie.img}}" /></a>
<span class="item-field-label-medium"> <span class="item-field-label-medium">
{{maladie.name}} {{maladie.name}}
@@ -114,14 +121,14 @@
</span> </span>
<div class="item-filler">&nbsp;</div> <div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed"> <div class="item-controls item-controls-fixed">
<a class="item-control item-edit" title="Editer"><i class="fas fa-edit"></i></a> <a class="item-control item-edit" data-action="editItem" title="Editer"><i class="fas fa-edit"></i></a>
<a class="item-control item-delete" title="Supprimer l'arme"><i class="fas fa-trash"></i></a> <a class="item-control item-delete" data-action="deleteItem" title="Supprimer l'arme"><i class="fas fa-trash"></i></a>
</div> </div>
</li> </li>
{{/each}} {{/each}}
{{#each poisons as |poison key|}} {{#each poisons as |poison key|}}
<li class="item flexrow list-item list-item-shadow item-id" data-item-id="{{poison._id}}"> <li class="item flexrow list-item list-item-shadow item-id" data-item-id="{{poison._id}}">
<a class="item-edit item-name-img" title="Editer Item"><img class="sheet-competence-img" <a class="item-edit item-name-img" data-action="editItem" title="Editer Item"><img class="sheet-competence-img"
src="{{poison.img}}" /></a> src="{{poison.img}}" /></a>
<span class="item-field-label-medium"> <span class="item-field-label-medium">
{{poison.name}} {{poison.name}}
@@ -131,8 +138,8 @@
</span> </span>
<div class="item-filler">&nbsp;</div> <div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed"> <div class="item-controls item-controls-fixed">
<a class="item-control item-edit" title="Editer"><i class="fas fa-edit"></i></a> <a class="item-control item-edit" data-action="editItem" title="Editer"><i class="fas fa-edit"></i></a>
<a class="item-control item-delete" title="Supprimer l'arme"><i class="fas fa-trash"></i></a> <a class="item-control item-delete" data-action="deleteItem" title="Supprimer l'arme"><i class="fas fa-trash"></i></a>
</div> </div>
</li> </li>
{{/each}} {{/each}}
@@ -182,21 +189,21 @@
</span> </span>
<div class="item-filler">&nbsp;</div> <div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed"> <div class="item-controls item-controls-fixed">
<a class="item-control item-add" data-type="grace" title="Créer une Grâce"><i <a class="item-control item-add" data-action="createItem" data-type="grace" title="Créer une Grâce"><i
class="fas fa-plus"></i></a> class="fas fa-plus"></i></a>
</div> </div>
</li> </li>
{{#each graces as |grace key|}} {{#each graces as |grace key|}}
<li class="item flexrow list-item list-item-shadow item-id" data-item-id="{{grace._id}}"> <li class="item flexrow list-item list-item-shadow item-id" data-item-id="{{grace._id}}">
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img" <a class="item-edit item-name-img" data-action="editItem" title="Edit Item"><img class="sheet-competence-img"
src="{{grace.img}}" /></a> src="{{grace.img}}" /></a>
<span class="item-field-label-long" data-tooltip="{{grace.system.effet}}"> <span class="item-field-label-long" data-tooltip="{{grace.system.effet}}">
{{grace.name}} {{grace.name}}
</span> </span>
<div class="item-filler">&nbsp;</div> <div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed"> <div class="item-controls item-controls-fixed">
<a class="item-control item-edit" title="Editer"><i class="fas fa-edit"></i></a> <a class="item-control item-edit" data-action="editItem" title="Editer"><i class="fas fa-edit"></i></a>
<a class="item-control item-delete" title="Supprimer l'arme"><i class="fas fa-trash"></i></a> <a class="item-control item-delete" data-action="deleteItem" title="Supprimer l'arme"><i class="fas fa-trash"></i></a>
</div> </div>
</li> </li>
{{/each}} {{/each}}
@@ -211,7 +218,7 @@
{{#each arbreCompetences as |carac key|}} {{#each arbreCompetences as |carac key|}}
<ul> <ul>
<li class="flexrow"> <li class="flexrow items-title-bg">
<img class="sheet-competence-img" src="systems/fvtt-te-deum/images/icons/{{key}}.webp" /> <img class="sheet-competence-img" src="systems/fvtt-te-deum/images/icons/{{key}}.webp" />
<h3 class="item-field-label-long14" data-tooltip="Caracteristique">{{carac.name}} : {{carac.qualite}}</h3> <h3 class="item-field-label-long14" data-tooltip="Caracteristique">{{carac.name}} : {{carac.qualite}}</h3>
<label class="item-field item-field-label-short">{{carac.value}}</label> <label class="item-field item-field-label-short">{{carac.value}}</label>
@@ -226,7 +233,7 @@
</label> </label>
<div class="item-filler">&nbsp;</div> <div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed"> <div class="item-controls item-controls-fixed">
<a class="item-control competence-add" data-type="competence" data-carac-key="{{key}}" <a class="item-control competence-add" data-action="createCompetence" data-type="competence" data-carac-key="{{key}}"
title="Ajouter une Compétence"><i class="fas fa-plus"></i></a> title="Ajouter une Compétence"><i class="fas fa-plus"></i></a>
</div> </div>
</li> </li>
@@ -234,14 +241,14 @@
{{#each carac.competences as |comp skillkey|}} {{#each carac.competences as |comp skillkey|}}
<li class="flexrow carac-box comp-box item-id" data-item-id="{{comp.id}}"> <li class="flexrow carac-box comp-box item-id" data-item-id="{{comp.id}}">
<label class="item-left-pad item-field item-field-label-long"> <label class="item-left-pad item-field item-field-label-long">
<a class="roll-competence" data-comp-id="{{comp.id}}">{{comp.name}} {{comp.system.formula}} </a> <a class="roll-competence" data-action="rollCompetence">{{comp.name}} {{comp.system.formula}} </a>
</label> </label>
<span>&nbsp;</span> <span>&nbsp;</span>
<a class="item-control item-edit" title="Editer"><i class="fas fa-edit"></i></a> <a class="item-control item-edit" data-action="editItem" title="Editer"><i class="fas fa-edit"></i></a>
{{#if comp.system.isBase}} {{#if comp.system.isBase}}
<span class="item-control"><i class="fa-solid fa-trash-slash"></i></span> <span class="item-control"><i class="fa-solid fa-trash-slash"></i></span>
{{else}} {{else}}
<a class="item-control item-delete" title="Supprimer"><i class="fas fa-trash"></i></a> <a class="item-control item-delete" data-action="deleteItem" title="Supprimer"><i class="fas fa-trash"></i></a>
{{/if}} {{/if}}
</li> </li>
{{/each}} {{/each}}
@@ -274,26 +281,25 @@
</li> </li>
{{#each armes as |arme key|}} {{#each armes as |arme key|}}
<li class="item flexrow list-item list-item-shadow item-id" data-item-id="{{arme._id}}"> <li class="item flexrow list-item list-item-shadow item-id" data-item-id="{{arme._id}}">
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img" <a class="item-edit item-name-img" data-action="editItem" title="Edit Item"><img class="sheet-competence-img"
src="{{arme.img}}" /></a> src="{{arme.img}}" /></a>
<span class="item-field-label-long"> <span class="item-field-label-long">
<a class="roll-arme" data-arme-id="{{arme._id}}"> <a class="roll-arme" data-action="rollArme">
{{arme.name}} {{arme.name}}
</a> </a>
</span> </span>
<span class="item-field-label-medium">{{upperFirst arme.system.typeArme}}</span> <span class="item-field-label-medium">{{upperFirst arme.system.typeArme}}</span>
<span class="item-field-label-medium">{{upperFirst arme.system.competence}}</span> <span class="item-field-label-medium">{{upperFirst arme.system.competence}}</span>
<span class="item-field-label-medium"><a class="roll-degats" <span class="item-field-label-medium"><a class="roll-degats" data-action="rollDegats">{{arme.system.degats}}</a></span>
data-arme-id="{{arme._id}}">{{arme.system.degats}}</a></span>
<div class="item-filler">&nbsp;</div> <div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed-full"> <div class="item-controls item-controls-fixed-full">
<a class="item-control item-equip" title="Equiper" {{#unless arme.system.equipe}}style="color:gray;" <a class="item-control item-equip" data-action="equipItem" title="Equiper" {{#unless arme.system.equipe}}style="color:gray;"
{{/unless}}> {{/unless}}>
<i class="fas fa-shield-alt"></i> <i class="fas fa-shield-alt"></i>
</a> </a>
<a class="item-control item-edit" title="Editer"><i class="fas fa-edit"></i></a> <a class="item-control item-edit" data-action="editItem" title="Editer"><i class="fas fa-edit"></i></a>
<a class="item-control item-delete" title="Supprimer l'arme"><i class="fas fa-trash"></i></a> <a class="item-control item-delete" data-action="deleteItem" title="Supprimer l'arme"><i class="fas fa-trash"></i></a>
</div> </div>
</li> </li>
{{/each}} {{/each}}
@@ -301,13 +307,13 @@
<ul class="item-list alternate-list"> <ul class="item-list alternate-list">
<li class="item flexrow list-item items-title-bg"> <li class="item flexrow list-item items-title-bg">
<span class="item-name-label-header-long2"> <span class="item-field-label-long">
<h3><label class="item-name-label-header-long2">Armures</label></h3> <h3><label class="item-field-label-long">Armures</label></h3>
</span> </span>
</li> </li>
{{#each armures as |armure key|}} {{#each armures as |armure key|}}
<li class="item flexrow list-item list-item-shadow item-id" data-item-id="{{armure._id}}"> <li class="item flexrow list-item list-item-shadow item-id" data-item-id="{{armure._id}}">
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img" <a class="item-edit item-name-img" data-action="editItem" title="Edit Item"><img class="sheet-competence-img"
src="{{armure.img}}" /></a> src="{{armure.img}}" /></a>
<span class="item-name-label-long2"> <span class="item-name-label-long2">
{{armure.name}} {{armure.name}}
@@ -315,12 +321,12 @@
<div class="item-filler">&nbsp;</div> <div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed-full"> <div class="item-controls item-controls-fixed-full">
<a class="item-control item-equip" title="Equiper" {{#unless armure.system.equipe}}style="color:gray;" <a class="item-control item-equip" data-action="equipItem" title="Equiper" {{#unless armure.system.equipe}}style="color:gray;"
{{/unless}}> {{/unless}}>
<i class="fas fa-shield-alt"></i> <i class="fas fa-shield-alt"></i>
</a> </a>
<a class="item-control item-edit" title="Editer l'armure"><i class="fas fa-edit"></i></a> <a class="item-control item-edit" data-action="editItem" title="Editer l'armure"><i class="fas fa-edit"></i></a>
<a class="item-control item-delete" title="Supprimer l'armure"><i class="fas fa-trash"></i></a> <a class="item-control item-delete" data-action="deleteItem" title="Supprimer l'armure"><i class="fas fa-trash"></i></a>
</div> </div>
</li> </li>
{{/each}} {{/each}}
@@ -357,26 +363,29 @@
{{!-- Equipement Tab --}} {{!-- Equipement Tab --}}
<div class="tab equipements" data-group="primary" data-tab="equipements"> <div class="tab equipements" data-group="primary" data-tab="equipements">
<div class="form-group"> <div class="flexrow fortune-row">
{{#each system.fortune as |fortune key|}} {{#each system.fortune as |fortune key|}}
<div class="flexrow"> <label class="item-field item-field-label-medium">{{upperFirst key}}</label>
<label class="item-field item-field-label-medium">{{upperFirst key}}</label> <input type="text" class="input-numeric-short" name="system.fortune.{{key}}" value="{{fortune}}"
<input type="text" class="input-numeric-short" name="system.fortune.{{key}}" value="{{fortune}}" data-dtype="Number" />
data-dtype="Number" />
</div>
{{/each}} {{/each}}
</div> </div>
<span class="item-name-label-header items-title-bg"> <ul class="item-list">
<h3><label class="items-title-text">Zone libre</label></h3> <li class="item flexrow list-item items-title-bg">
</span> <span class="item-field-title-long">
<h3><label class="item-field-label-long">Zone libre</label></h3>
</span>
</li>
</ul>
<div class="form-group small-editor"> <div class="form-group small-editor">
{{editor equipmentfree target="system.equipmentfree" button=true owner=owner editable=editable}} {{formInput systemFields.equipmentfree enriched=enrichedEquipmentFree value=system.equipmentfree name="system.equipmentfree" toggled=true}}
</div> </div>
<ul class="item-list alternate-list"> <ul class="item-list alternate-list">
<li class="item flexrow list-item items-title-bg"> <li class="item flexrow list-item items-title-bg">
<span class="item-field-label-long"> <span class="item-name-img"></span>
<span class="item-name-label">
<h3><label class="item-field-label-long">Equipements</label></h3> <h3><label class="item-field-label-long">Equipements</label></h3>
</span> </span>
<span class="item-field-label-medium"> <span class="item-field-label-medium">
@@ -384,22 +393,22 @@
</span> </span>
<div class="item-filler">&nbsp;</div> <div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed"> <div class="item-controls item-controls-fixed">
<a class="item-control item-add" data-type="equipement" title="Créer un équipement"><i <a class="item-control item-add" data-action="createItem" data-type="equipement" title="Créer un équipement"><i
class="fas fa-plus"></i></a> class="fas fa-plus"></i></a>
</div> </div>
</li> </li>
{{#each equipements as |equip key|}} {{#each equipements as |equip key|}}
<li class="item list-item flexrow list-item-shadow item-id" data-item-id="{{equip._id}}"> <li class="item list-item flexrow list-item-shadow item-id" data-item-id="{{equip._id}}">
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img" <a class="item-edit item-name-img" data-action="editItem" title="Edit Item"><img class="sheet-competence-img"
src="{{equip.img}}" /></a> src="{{equip.img}}" /></a>
<span class="item-name-label">{{equip.name}}</span> <span class="item-name-label">{{equip.name}}</span>
<span class="item-field-label-medium">{{equip.system.prix}} {{monnaie equip.system.monnaie}}</span> <span class="item-field-label-medium">{{equip.system.prix}} {{monnaie equip.system.monnaie}}</span>
<div class="item-filler">&nbsp;</div> <div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed"> <div class="item-controls item-controls-fixed">
<a class="item-control item-edit" title="Editer un équipement"><i class="fas fa-edit"></i></a> <a class="item-control item-edit" data-action="editItem" title="Editer un équipement"><i class="fas fa-edit"></i></a>
<a class="item-control item-delete" title="Supprimer un équipement"><i class="fas fa-trash"></i></a> <a class="item-control item-delete" data-action="deleteItem" title="Supprimer un équipement"><i class="fas fa-trash"></i></a>
</div> </div>
</li> </li>
{{/each}} {{/each}}
@@ -408,7 +417,8 @@
<ul class="item-list alternate-list"> <ul class="item-list alternate-list">
<li class="item flexrow list-item items-title-bg"> <li class="item flexrow list-item items-title-bg">
<span class="item-field-label-long"> <span class="item-name-img"></span>
<span class="item-name-label">
<h3><label class="item-field-label-long">Simples</label></h3> <h3><label class="item-field-label-long">Simples</label></h3>
</span> </span>
<span class="item-field-label-medium"> <span class="item-field-label-medium">
@@ -416,20 +426,20 @@
</span> </span>
<div class="item-filler">&nbsp;</div> <div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed"> <div class="item-controls item-controls-fixed">
<a class="item-control item-add" data-type="simple" title="Créer une simple"><i class="fas fa-plus"></i></a> <a class="item-control item-add" data-action="createItem" data-type="simple" title="Créer une simple"><i class="fas fa-plus"></i></a>
</div> </div>
</li> </li>
{{#each simples as |simple key|}} {{#each simples as |simple key|}}
<li class="item list-item flexrow list-item-shadow item-id" data-item-id="{{simple._id}}"> <li class="item list-item flexrow list-item-shadow item-id" data-item-id="{{simple._id}}">
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img" <a class="item-edit item-name-img" data-action="editItem" title="Edit Item"><img class="sheet-competence-img"
src="{{simple.img}}" /></a> src="{{simple.img}}" /></a>
<span class="item-name-label">{{simple.name}}</span> <span class="item-name-label">{{simple.name}}</span>
<span class="item-field-label-medium">{{simple.system.prix}} {{monnaie simple.system.monnaie}}</span> <span class="item-field-label-medium">{{simple.system.prix}} {{monnaie simple.system.monnaie}}</span>
<div class="item-filler">&nbsp;</div> <div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed"> <div class="item-controls item-controls-fixed">
<a class="item-control item-edit" title="Editer une simple"><i class="fas fa-edit"></i></a> <a class="item-control item-edit" data-action="editItem" title="Editer une simple"><i class="fas fa-edit"></i></a>
<a class="item-control item-delete" title="Supprimer une simple"><i class="fas fa-trash"></i></a> <a class="item-control item-delete" data-action="deleteItem" title="Supprimer une simple"><i class="fas fa-trash"></i></a>
</div> </div>
</li> </li>
{{/each}} {{/each}}
@@ -443,17 +453,6 @@
<div class="grid grid-2col"> <div class="grid grid-2col">
<div> <div>
<ul class="item-list alternate-list"> <ul class="item-list alternate-list">
<li class="item flexrow">
<label class="item-name-label-medium">Genre</label>
<select type="text" class="" name="system.genre" value="{{system.genre}}" data-dtype="String" />
{{selectOptions @root.config.genre selected=system.genre}}
</select>
</li>
<li class="item flexrow">
<label class="item-name-label-medium">Lieu de naissance</label>
<input type="text" class="" name="system.lieunaissance" value="{{system.lieunaissance}}"
data-dtype="String" />
</li>
<li class="item flexrow"> <li class="item flexrow">
<label class="item-name-label-medium">Age</label> <label class="item-name-label-medium">Age</label>
<input type="text" class="" name="system.age" value="{{system.age}}" data-dtype="String" /> <input type="text" class="" name="system.age" value="{{system.age}}" data-dtype="String" />
@@ -468,8 +467,8 @@
<div> <div>
<ul> <ul>
<li class="item flexrow"> <li class="item flexrow">
<label class="item-name-label-medium">Origine sociale</label> <label class="item-name-label-medium">Lieu de naissance</label>
<input type="text" class="" name="system.statutocial" value="{{system.statutocial}}" <input type="text" class="" name="system.lieunaissance" value="{{system.lieunaissance}}"
data-dtype="String" /> data-dtype="String" />
</li> </li>
<li class="item flexrow"> <li class="item flexrow">
@@ -477,10 +476,6 @@
<input type="text" class="" name="system.chargestitre" value="{{system.chargestitre}}" <input type="text" class="" name="system.chargestitre" value="{{system.chargestitre}}"
data-dtype="String" /> data-dtype="String" />
</li> </li>
<li class="item flexrow">
<label class="item-name-label-medium">Religion</label>
<input type="text" class="" name="system.religion" value="{{system.religion}}" data-dtype="String" />
</li>
</ul> </ul>
</div> </div>
</div> </div>
@@ -499,15 +494,15 @@
</li> </li>
{{#each educations as |education key|}} {{#each educations as |education key|}}
<li class="item list-item flexrow list-item-shadow item-id" data-item-id="{{education._id}}"> <li class="item list-item flexrow list-item-shadow item-id" data-item-id="{{education._id}}">
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img" <a class="item-edit item-name-img" data-action="editItem" title="Edit Item"><img class="sheet-competence-img"
src="{{education.img}}" /></a> src="{{education.img}}" /></a>
<span class="item-name-label">{{ education.name}}</span> <span class="item-name-label">{{ education.name}}</span>
<span class="item-name-label">{{getEducationEtape education.system.etape}}</span> <span class="item-name-label">{{getEducationEtape education.system.etape}}</span>
<div class="item-filler">&nbsp;</div> <div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed"> <div class="item-controls item-controls-fixed">
<a class="item-control item-edit" title="Editer une éducation"><i class="fas fa-edit"></i></a> <a class="item-control item-edit" data-action="editItem" title="Editer une éducation"><i class="fas fa-edit"></i></a>
{{#if @root.isGM}} {{#if @root.isGM}}
<a class="item-control item-delete" title="Supprimer une éducation"><i class="fas fa-trash"></i></a> <a class="item-control item-delete" data-action="deleteItem" title="Supprimer une éducation"><i class="fas fa-trash"></i></a>
{{/if}} {{/if}}
</div> </div>
</li> </li>
@@ -515,26 +510,25 @@
</ul> </ul>
<hr> <hr>
<span class="item-name-label-header items-title-bg"> <div class="items-title-bg">
<h3><label class="items-title-text">Background</label></h3> <h3>Background</h3>
</span> </div>
<div class="form-group editor"> <div class="form-group editor">
{{editor description target="system.description" button=true owner=owner {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}}
editable=editable}}
</div> </div>
<hr> <hr>
<span class="item-name-label-header items-title-bg"> <div class="items-title-bg">
<h3><label class="items-title-text">Notes</label></h3> <h3>Notes</h3>
</span> </div>
<div class="form-group editor"> <div class="form-group editor">
{{editor notes target="system.notes" button=true owner=owner editable=editable}} {{formInput systemFields.notes enriched=enrichedNotes value=system.notes name="system.notes" toggled=true}}
</div> </div>
<hr> <hr>
<span class="item-name-label-header items-title-bg"> <div class="items-title-bg">
<h3><label class="items-title-text">Histoire</label></h3> <h3>Histoire</h3>
</span> </div>
<div class="form-group editor"> <div class="form-group editor">
{{editor histoire target="system.histoire" button=true owner=owner editable=editable}} {{formInput systemFields.histoire enriched=enrichedHistoire value=system.histoire name="system.histoire" toggled=true}}
</div> </div>
<hr> <hr>
@@ -542,4 +536,4 @@
</section> </section>
</form> </section>

View File

@@ -1,4 +1,4 @@
<form class="skill-roll-dialog"> <section class="skill-roll-dialog">
<header class="roll-dialog-header"> <header class="roll-dialog-header">
{{#if img}} {{#if img}}
<img class="actor-icon" src="{{img}}" data-edit="img" title="{{name}}" /> <img class="actor-icon" src="{{img}}" data-edit="img" title="{{name}}" />
@@ -175,4 +175,9 @@
</div> </div>
</form> <footer class="sheet-footer flexrow">
<button type="button" data-action="roll"><i class="fas fa-check"></i> Lancer</button>
<button type="button" data-action="cancel"><i class="fas fa-times"></i> Annuler</button>
</footer>
</section>

View File

@@ -1,6 +1,6 @@
<form class="{{cssClass}}" autocomplete="off"> <section class="{{cssClass}}" autocomplete="off">
<header class="sheet-header"> <header class="sheet-header">
<img class="item-sheet-img" src="{{img}}" data-edit="img" title="{{name}}" /> <img class="item-sheet-img" src="{{img}}" data-action="editImage" title="{{name}}" />
<div class="header-fields"> <div class="header-fields">
<h1 class="charname"><input name="name" type="text" value="{{name}}" placeholder="Name" /></h1> <h1 class="charname"><input name="name" type="text" value="{{name}}" placeholder="Name" /></h1>
</div> </div>
@@ -136,4 +136,4 @@
</div> </div>
</section> </section>
</form> </section>

View File

@@ -1,6 +1,6 @@
<form class="{{cssClass}}" autocomplete="off"> <section class="{{cssClass}}" autocomplete="off">
<header class="sheet-header"> <header class="sheet-header">
<img class="item-sheet-img" src="{{img}}" data-edit="img" title="{{name}}" /> <img class="item-sheet-img" src="{{img}}" data-action="editImage" title="{{name}}" />
<div class="header-fields"> <div class="header-fields">
<h1 class="charname"><input name="name" type="text" value="{{name}}" placeholder="Name" /></h1> <h1 class="charname"><input name="name" type="text" value="{{name}}" placeholder="Name" /></h1>
</div> </div>
@@ -75,4 +75,4 @@
</div> </div>
</section> </section>
</form> </section>

View File

@@ -1,6 +1,6 @@
<form class="{{cssClass}}" autocomplete="off"> <section class="{{cssClass}}" autocomplete="off">
<header class="sheet-header"> <header class="sheet-header">
<img class="item-sheet-img" src="{{img}}" data-edit="img" title="{{name}}" /> <img class="item-sheet-img" src="{{img}}" data-action="editImage" title="{{name}}" />
<div class="header-fields"> <div class="header-fields">
<h1 class="charname"><input name="name" type="text" value="{{name}}" placeholder="Name" /></h1> <h1 class="charname"><input name="name" type="text" value="{{name}}" placeholder="Name" /></h1>
</div> </div>
@@ -35,4 +35,4 @@
</div> </div>
</section> </section>
</form> </section>

View File

@@ -1,6 +1,6 @@
<form class="{{cssClass}}" autocomplete="off"> <section class="{{cssClass}}" autocomplete="off">
<header class="sheet-header"> <header class="sheet-header">
<img class="item-sheet-img" src="{{img}}" data-edit="img" title="{{name}}" /> <img class="item-sheet-img" src="{{img}}" data-action="editImage" title="{{name}}" />
<div class="header-fields"> <div class="header-fields">
<h1 class="charname"><input name="name" type="text" value="{{name}}" placeholder="Name" /></h1> <h1 class="charname"><input name="name" type="text" value="{{name}}" placeholder="Name" /></h1>
</div> </div>
@@ -41,4 +41,4 @@
</div> </div>
</section> </section>
</form> </section>

View File

@@ -1,6 +1,6 @@
<form class="{{cssClass}}" autocomplete="off"> <section class="{{cssClass}}" autocomplete="off">
<header class="sheet-header"> <header class="sheet-header">
<img class="item-sheet-img" src="{{img}}" data-edit="img" title="{{name}}" /> <img class="item-sheet-img" src="{{img}}" data-action="editImage" title="{{name}}" />
<div class="header-fields"> <div class="header-fields">
<h1 class="charname"><input name="name" type="text" value="{{name}}" placeholder="Name" /></h1> <h1 class="charname"><input name="name" type="text" value="{{name}}" placeholder="Name" /></h1>
</div> </div>
@@ -167,4 +167,4 @@
</div> </div>
</section> </section>
</form> </section>

View File

@@ -1,6 +1,6 @@
<form class="{{cssClass}}" autocomplete="off"> <section class="{{cssClass}}" autocomplete="off">
<header class="sheet-header"> <header class="sheet-header">
<img class="item-sheet-img" src="{{img}}" data-edit="img" title="{{name}}" /> <img class="item-sheet-img" src="{{img}}" data-action="editImage" title="{{name}}" />
<div class="header-fields"> <div class="header-fields">
<h1 class="charname"><input name="name" type="text" value="{{name}}" placeholder="Name" /></h1> <h1 class="charname"><input name="name" type="text" value="{{name}}" placeholder="Name" /></h1>
</div> </div>
@@ -34,4 +34,4 @@
</div> </div>
</section> </section>
</form> </section>

View File

@@ -1,6 +1,6 @@
<form class="{{cssClass}}" autocomplete="off"> <section class="{{cssClass}}" autocomplete="off">
<header class="sheet-header"> <header class="sheet-header">
<img class="item-sheet-img" src="{{img}}" data-edit="img" title="{{name}}" /> <img class="item-sheet-img" src="{{img}}" data-action="editImage" title="{{name}}" />
<div class="header-fields"> <div class="header-fields">
<h1 class="charname"><input name="name" type="text" value="{{name}}" placeholder="Name" /></h1> <h1 class="charname"><input name="name" type="text" value="{{name}}" placeholder="Name" /></h1>
</div> </div>
@@ -19,7 +19,9 @@
<strong>Effet</strong> : {{system.effet}} <strong>Effet</strong> : {{system.effet}}
</div> </div>
<hr> <hr>
{{editor description target="system.description" button=true owner=owner editable=editable}} <div class="form-group editor">
{{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}}
</div>
</div> </div>
<div class="tab details" data-group="primary" data-tab="details"> <div class="tab details" data-group="primary" data-tab="details">
@@ -39,4 +41,4 @@
</div> </div>
</section> </section>
</form> </section>

View File

@@ -1,6 +1,6 @@
<form class="{{cssClass}}" autocomplete="off"> <section class="{{cssClass}}" autocomplete="off">
<header class="sheet-header"> <header class="sheet-header">
<img class="item-sheet-img" src="{{img}}" data-edit="img" title="{{name}}" /> <img class="item-sheet-img" src="{{img}}" data-action="editImage" title="{{name}}" />
<div class="header-fields"> <div class="header-fields">
<h1 class="charname"><input name="name" type="text" value="{{name}}" placeholder="Name" /></h1> <h1 class="charname"><input name="name" type="text" value="{{name}}" placeholder="Name" /></h1>
</div> </div>
@@ -23,25 +23,27 @@
<strong>Complications</strong> : {{system.complications}} <strong>Complications</strong> : {{system.complications}}
</div> </div>
<hr> <hr>
{{editor description target="system.description" button=true owner=owner editable=editable}} <div class="form-group editor">
{{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}}
</div>
</div> </div>
<div class="tab details" data-group="primary" data-tab="details"> <div class="tab details" data-group="primary" data-tab="details">
<h4 class="item-name-label-long">Transmission</h4> <h4 class="item-name-label-long">Transmission</h4>
<textarea name="system.transmission" rows="6" data-dtype="String"> <div class="form-group editor">
{{{system.transmission}}} {{formInput systemFields.transmission enriched=enrichedTransmission value=system.transmission name="system.transmission" toggled=true}}
</textarea> </div>
<h4 class="item-name-label-long">Symptômes</h4> <h4 class="item-name-label-long">Symptômes</h4>
<textarea name="system.symptomes" rows="6" data-dtype="String"> <div class="form-group editor">
{{{system.symptomes}}} {{formInput systemFields.symptomes enriched=enrichedSymptomes value=system.symptomes name="system.symptomes" toggled=true}}
</textarea> </div>
<h4 class="item-name-label-long">Complications</h4> <h4 class="item-name-label-long">Complications</h4>
<textarea name="system.complications" rows="6" data-dtype="String"> <div class="form-group editor">
{{{system.complications}}} {{formInput systemFields.complications enriched=enrichedComplications value=system.complications name="system.complications" toggled=true}}
</textarea> </div>
<ul> <ul>
<li class="flexrow"> <li class="flexrow">
@@ -73,4 +75,4 @@
</div> </div>
</section> </section>
</form> </section>

View File

@@ -1,6 +1,6 @@
<form class="{{cssClass}}" autocomplete="off"> <section class="{{cssClass}}" autocomplete="off">
<header class="sheet-header"> <header class="sheet-header">
<img class="item-sheet-img" src="{{img}}" data-edit="img" title="{{name}}" /> <img class="item-sheet-img" src="{{img}}" data-action="editImage" title="{{name}}" />
<div class="header-fields"> <div class="header-fields">
<h1 class="charname"><input name="name" type="text" value="{{name}}" placeholder="Name" /></h1> <h1 class="charname"><input name="name" type="text" value="{{name}}" placeholder="Name" /></h1>
</div> </div>
@@ -46,4 +46,4 @@
</div> </div>
</section> </section>
</form> </section>

View File

@@ -0,0 +1,2 @@
{{!-- Wrapper dynamique : inclut le partial du bon type d'item --}}
{{> (lookup . 'itemPartialName')}}

View File

@@ -1,6 +1,6 @@
<form class="{{cssClass}}" autocomplete="off"> <section class="{{cssClass}}" autocomplete="off">
<header class="sheet-header"> <header class="sheet-header">
<img class="item-sheet-img" src="{{img}}" data-edit="img" title="{{name}}" /> <img class="item-sheet-img" src="{{img}}" data-action="editImage" title="{{name}}" />
<div class="header-fields"> <div class="header-fields">
<h1 class="charname"><input name="name" type="text" value="{{name}}" placeholder="Name" /></h1> <h1 class="charname"><input name="name" type="text" value="{{name}}" placeholder="Name" /></h1>
</div> </div>
@@ -20,20 +20,22 @@
<strong>Toxicité</strong> : {{system.toxicite}} <strong>Toxicité</strong> : {{system.toxicite}}
</div> </div>
<hr> <hr>
{{editor description target="system.description" button=true owner=owner editable=editable}} <div class="form-group editor">
{{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}}
</div>
</div> </div>
<div class="tab details" data-group="primary" data-tab="details"> <div class="tab details" data-group="primary" data-tab="details">
<h4 class="item-name-label-long">🌿 Vertus médicinales</h4> <h4 class="item-name-label-long">🌿 Vertus médicinales</h4>
<textarea name="system.vertus" rows="6" data-dtype="String"> <div class="form-group editor">
{{{system.vertus}}} {{formInput systemFields.vertus enriched=enrichedVertus value=system.vertus name="system.vertus" toggled=true}}
</textarea> </div>
<h4 class="item-name-label-long">☠️ Toxicité</h4> <h4 class="item-name-label-long">☠️ Toxicité</h4>
<textarea name="system.toxicite" rows="6" data-dtype="String"> <div class="form-group editor">
{{{system.toxicite}}} {{formInput systemFields.toxicite enriched=enrichedToxicite value=system.toxicite name="system.toxicite" toggled=true}}
</textarea> </div>
<ul> <ul>
<li class="flexrow"> <li class="flexrow">
@@ -68,4 +70,4 @@
</div> </div>
</section> </section>
</form> </section>

View File

@@ -1,3 +1,5 @@
<div class="tab description" data-group="primary" data-tab="description"> <div class="tab description" data-group="primary" data-tab="description">
{{editor description target="system.description" button=true owner=owner editable=editable}} <div class="form-group editor">
{{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}}
</div>
</div> </div>