From 97c3279c94bcd5162567c211e8ef062fe2b773b2 Mon Sep 17 00:00:00 2001 From: Adam Kostandy Date: Sun, 25 Aug 2024 05:29:22 -0400 Subject: [PATCH 1/7] Packs update. --- packs/agenda/{000049.log => 000053.log} | 0 packs/agenda/CURRENT | 2 +- packs/agenda/LOG | 6 +++--- packs/agenda/LOG.old | 16 ++++++++-------- .../agenda/{MANIFEST-000048 => MANIFEST-000052} | Bin 187 -> 187 bytes packs/blasphemy/{000049.log => 000053.log} | 0 packs/blasphemy/CURRENT | 2 +- packs/blasphemy/LOG | 6 +++--- packs/blasphemy/LOG.old | 16 ++++++++-------- .../{MANIFEST-000048 => MANIFEST-000052} | Bin 191 -> 191 bytes packs/items/{000050.log => 000054.log} | 0 packs/items/CURRENT | 2 +- packs/items/LOG | 6 +++--- packs/items/LOG.old | 16 ++++++++-------- .../items/{MANIFEST-000049 => MANIFEST-000053} | Bin 190 -> 190 bytes packs/tables/{000049.log => 000053.log} | 0 packs/tables/CURRENT | 2 +- packs/tables/LOG | 6 +++--- packs/tables/LOG.old | 16 ++++++++-------- .../tables/{MANIFEST-000048 => MANIFEST-000052} | Bin 267 -> 267 bytes 20 files changed, 48 insertions(+), 48 deletions(-) rename packs/agenda/{000049.log => 000053.log} (100%) rename packs/agenda/{MANIFEST-000048 => MANIFEST-000052} (68%) rename packs/blasphemy/{000049.log => 000053.log} (100%) rename packs/blasphemy/{MANIFEST-000048 => MANIFEST-000052} (67%) rename packs/items/{000050.log => 000054.log} (100%) rename packs/items/{MANIFEST-000049 => MANIFEST-000053} (67%) rename packs/tables/{000049.log => 000053.log} (100%) rename packs/tables/{MANIFEST-000048 => MANIFEST-000052} (71%) diff --git a/packs/agenda/000049.log b/packs/agenda/000053.log similarity index 100% rename from packs/agenda/000049.log rename to packs/agenda/000053.log diff --git a/packs/agenda/CURRENT b/packs/agenda/CURRENT index a9ebced..f774e85 100644 --- a/packs/agenda/CURRENT +++ b/packs/agenda/CURRENT @@ -1 +1 @@ -MANIFEST-000048 +MANIFEST-000052 diff --git a/packs/agenda/LOG b/packs/agenda/LOG index d23ba09..835bbb0 100644 --- a/packs/agenda/LOG +++ b/packs/agenda/LOG @@ -1,3 +1,3 @@ -2024/08/24-08:51:07.214048 ffff8dfbf120 Recovering log #46 -2024/08/24-08:51:07.243260 ffff8dfbf120 Delete type=3 #44 -2024/08/24-08:51:07.243610 ffff8dfbf120 Delete type=0 #46 +2024/08/24-20:05:21.813863 ffff8e7cf120 Recovering log #50 +2024/08/24-20:05:21.845439 ffff8e7cf120 Delete type=0 #50 +2024/08/24-20:05:21.845731 ffff8e7cf120 Delete type=3 #48 diff --git a/packs/agenda/LOG.old b/packs/agenda/LOG.old index ee4bcdb..fed2ad1 100644 --- a/packs/agenda/LOG.old +++ b/packs/agenda/LOG.old @@ -1,8 +1,8 @@ -2024/08/22-14:23:00.261627 ffff8efdf120 Recovering log #42 -2024/08/22-14:23:00.294353 ffff8efdf120 Delete type=3 #40 -2024/08/22-14:23:00.294705 ffff8efdf120 Delete type=0 #42 -2024/08/24-08:49:59.103616 ffff8d7af120 Level-0 table #47: started -2024/08/24-08:49:59.103749 ffff8d7af120 Level-0 table #47: 0 bytes OK -2024/08/24-08:49:59.114205 ffff8d7af120 Delete type=0 #45 -2024/08/24-08:49:59.141347 ffff8d7af120 Manual compaction at level-0 from '!items!1PnBSz1PZVcYKaWa' @ 72057594037927935 : 1 .. '!items!umnOFhEQgDzG2eaF' @ 0 : 0; will stop at (end) -2024/08/24-08:49:59.141675 ffff8d7af120 Manual compaction at level-1 from '!items!1PnBSz1PZVcYKaWa' @ 72057594037927935 : 1 .. '!items!umnOFhEQgDzG2eaF' @ 0 : 0; will stop at (end) +2024/08/24-08:51:07.214048 ffff8dfbf120 Recovering log #46 +2024/08/24-08:51:07.243260 ffff8dfbf120 Delete type=3 #44 +2024/08/24-08:51:07.243610 ffff8dfbf120 Delete type=0 #46 +2024/08/24-20:05:09.649973 ffff8d7af120 Level-0 table #51: started +2024/08/24-20:05:09.650178 ffff8d7af120 Level-0 table #51: 0 bytes OK +2024/08/24-20:05:09.659047 ffff8d7af120 Delete type=0 #49 +2024/08/24-20:05:09.668169 ffff8d7af120 Manual compaction at level-0 from '!items!1PnBSz1PZVcYKaWa' @ 72057594037927935 : 1 .. '!items!umnOFhEQgDzG2eaF' @ 0 : 0; will stop at (end) +2024/08/24-20:05:09.668430 ffff8d7af120 Manual compaction at level-1 from '!items!1PnBSz1PZVcYKaWa' @ 72057594037927935 : 1 .. '!items!umnOFhEQgDzG2eaF' @ 0 : 0; will stop at (end) diff --git a/packs/agenda/MANIFEST-000048 b/packs/agenda/MANIFEST-000052 similarity index 68% rename from packs/agenda/MANIFEST-000048 rename to packs/agenda/MANIFEST-000052 index 7103fb35f1781b0030df5b690df42f841f72bac0..70674bfd19c9e9a083ac6a9ffabd29efcc030133 100644 GIT binary patch delta 22 dcmdnZxSMgp8vgu})kirP7@15t8JNvj%m7z11=9ck delta 22 dcmdnZxSMgp8vett9Gf{97?}(?8JLY&%m7*N1?d0) diff --git a/packs/blasphemy/000049.log b/packs/blasphemy/000053.log similarity index 100% rename from packs/blasphemy/000049.log rename to packs/blasphemy/000053.log diff --git a/packs/blasphemy/CURRENT b/packs/blasphemy/CURRENT index a9ebced..f774e85 100644 --- a/packs/blasphemy/CURRENT +++ b/packs/blasphemy/CURRENT @@ -1 +1 @@ -MANIFEST-000048 +MANIFEST-000052 diff --git a/packs/blasphemy/LOG b/packs/blasphemy/LOG index da06369..1f16d6a 100644 --- a/packs/blasphemy/LOG +++ b/packs/blasphemy/LOG @@ -1,3 +1,3 @@ -2024/08/24-08:51:07.256959 ffff8e7cf120 Recovering log #46 -2024/08/24-08:51:07.291362 ffff8e7cf120 Delete type=3 #44 -2024/08/24-08:51:07.291701 ffff8e7cf120 Delete type=0 #46 +2024/08/24-20:05:21.858261 ffff8efdf120 Recovering log #50 +2024/08/24-20:05:21.890679 ffff8efdf120 Delete type=0 #50 +2024/08/24-20:05:21.890942 ffff8efdf120 Delete type=3 #48 diff --git a/packs/blasphemy/LOG.old b/packs/blasphemy/LOG.old index 94d53cb..650802a 100644 --- a/packs/blasphemy/LOG.old +++ b/packs/blasphemy/LOG.old @@ -1,8 +1,8 @@ -2024/08/22-14:23:00.310408 ffff8dfbf120 Recovering log #42 -2024/08/22-14:23:00.340930 ffff8dfbf120 Delete type=3 #40 -2024/08/22-14:23:00.341276 ffff8dfbf120 Delete type=0 #42 -2024/08/24-08:49:59.133212 ffff8d7af120 Level-0 table #47: started -2024/08/24-08:49:59.133408 ffff8d7af120 Level-0 table #47: 0 bytes OK -2024/08/24-08:49:59.141017 ffff8d7af120 Delete type=0 #45 -2024/08/24-08:49:59.141601 ffff8d7af120 Manual compaction at level-0 from '!folders!FWZZgy9tnHSHa9tk' @ 72057594037927935 : 1 .. '!items!yotw9uAVluGmTHO4' @ 0 : 0; will stop at (end) -2024/08/24-08:49:59.142358 ffff8d7af120 Manual compaction at level-1 from '!folders!FWZZgy9tnHSHa9tk' @ 72057594037927935 : 1 .. '!items!yotw9uAVluGmTHO4' @ 0 : 0; will stop at (end) +2024/08/24-08:51:07.256959 ffff8e7cf120 Recovering log #46 +2024/08/24-08:51:07.291362 ffff8e7cf120 Delete type=3 #44 +2024/08/24-08:51:07.291701 ffff8e7cf120 Delete type=0 #46 +2024/08/24-20:05:09.640438 ffff8d7af120 Level-0 table #51: started +2024/08/24-20:05:09.642670 ffff8d7af120 Level-0 table #51: 0 bytes OK +2024/08/24-20:05:09.649645 ffff8d7af120 Delete type=0 #49 +2024/08/24-20:05:09.668089 ffff8d7af120 Manual compaction at level-0 from '!folders!FWZZgy9tnHSHa9tk' @ 72057594037927935 : 1 .. '!items!yotw9uAVluGmTHO4' @ 0 : 0; will stop at (end) +2024/08/24-20:05:09.668366 ffff8d7af120 Manual compaction at level-1 from '!folders!FWZZgy9tnHSHa9tk' @ 72057594037927935 : 1 .. '!items!yotw9uAVluGmTHO4' @ 0 : 0; will stop at (end) diff --git a/packs/blasphemy/MANIFEST-000048 b/packs/blasphemy/MANIFEST-000052 similarity index 67% rename from packs/blasphemy/MANIFEST-000048 rename to packs/blasphemy/MANIFEST-000052 index 3968f13bed004010ae1a3334da6a120b7cbfe100..dbea2007044c277e6f36aa3105510404c26c9f1a 100644 GIT binary patch delta 23 ecmdnbxSw&tdV$4F&WfB2j7+AS49sRMe;5H(qXpdn delta 23 ecmdnbxSw&tdVwCk`aPTsj7)}{49rF>e;5H+UIrlm diff --git a/packs/items/000050.log b/packs/items/000054.log similarity index 100% rename from packs/items/000050.log rename to packs/items/000054.log diff --git a/packs/items/CURRENT b/packs/items/CURRENT index a980eef..774dcea 100644 --- a/packs/items/CURRENT +++ b/packs/items/CURRENT @@ -1 +1 @@ -MANIFEST-000049 +MANIFEST-000053 diff --git a/packs/items/LOG b/packs/items/LOG index ad297b8..9a2553f 100644 --- a/packs/items/LOG +++ b/packs/items/LOG @@ -1,3 +1,3 @@ -2024/08/24-08:51:07.171446 ffff8efdf120 Recovering log #47 -2024/08/24-08:51:07.201005 ffff8efdf120 Delete type=3 #45 -2024/08/24-08:51:07.201373 ffff8efdf120 Delete type=0 #47 +2024/08/24-20:05:21.765034 ffff8dfbf120 Recovering log #51 +2024/08/24-20:05:21.798715 ffff8dfbf120 Delete type=0 #51 +2024/08/24-20:05:21.799058 ffff8dfbf120 Delete type=3 #49 diff --git a/packs/items/LOG.old b/packs/items/LOG.old index e2e392e..59ce5c0 100644 --- a/packs/items/LOG.old +++ b/packs/items/LOG.old @@ -1,8 +1,8 @@ -2024/08/22-14:23:00.215323 ffff8e7cf120 Recovering log #43 -2024/08/22-14:23:00.246432 ffff8e7cf120 Delete type=0 #43 -2024/08/22-14:23:00.246745 ffff8e7cf120 Delete type=3 #41 -2024/08/24-08:49:59.114466 ffff8d7af120 Level-0 table #48: started -2024/08/24-08:49:59.114595 ffff8d7af120 Level-0 table #48: 0 bytes OK -2024/08/24-08:49:59.123410 ffff8d7af120 Delete type=0 #46 -2024/08/24-08:49:59.141442 ffff8d7af120 Manual compaction at level-0 from '!folders!DYa1yCl9CNfOahIN' @ 72057594037927935 : 1 .. '!items!zUOSvdFDFvXZqROE' @ 0 : 0; will stop at (end) -2024/08/24-08:49:59.141738 ffff8d7af120 Manual compaction at level-1 from '!folders!DYa1yCl9CNfOahIN' @ 72057594037927935 : 1 .. '!items!zUOSvdFDFvXZqROE' @ 0 : 0; will stop at (end) +2024/08/24-08:51:07.171446 ffff8efdf120 Recovering log #47 +2024/08/24-08:51:07.201005 ffff8efdf120 Delete type=3 #45 +2024/08/24-08:51:07.201373 ffff8efdf120 Delete type=0 #47 +2024/08/24-20:05:09.659356 ffff8d7af120 Level-0 table #52: started +2024/08/24-20:05:09.659560 ffff8d7af120 Level-0 table #52: 0 bytes OK +2024/08/24-20:05:09.667683 ffff8d7af120 Delete type=0 #50 +2024/08/24-20:05:09.668245 ffff8d7af120 Manual compaction at level-0 from '!folders!DYa1yCl9CNfOahIN' @ 72057594037927935 : 1 .. '!items!zUOSvdFDFvXZqROE' @ 0 : 0; will stop at (end) +2024/08/24-20:05:09.668503 ffff8d7af120 Manual compaction at level-1 from '!folders!DYa1yCl9CNfOahIN' @ 72057594037927935 : 1 .. '!items!zUOSvdFDFvXZqROE' @ 0 : 0; will stop at (end) diff --git a/packs/items/MANIFEST-000049 b/packs/items/MANIFEST-000053 similarity index 67% rename from packs/items/MANIFEST-000049 rename to packs/items/MANIFEST-000053 index ad7edcc642c5ad46c6fd94ad363c77eb5c817869..b5bc31695556783ca87b462f27a77e77ac4ef830 100644 GIT binary patch delta 23 fcmdnTxQ}tdI)Nn`n&&tf7@5pC8JNvkCNKg3R=@?S delta 23 ecmdnTxQ}tdI)UyI+4r0bj7&zH49vzX6Bq$nc?IeK diff --git a/packs/tables/000049.log b/packs/tables/000053.log similarity index 100% rename from packs/tables/000049.log rename to packs/tables/000053.log diff --git a/packs/tables/CURRENT b/packs/tables/CURRENT index a9ebced..f774e85 100644 --- a/packs/tables/CURRENT +++ b/packs/tables/CURRENT @@ -1 +1 @@ -MANIFEST-000048 +MANIFEST-000052 diff --git a/packs/tables/LOG b/packs/tables/LOG index a31a4e3..b529c03 100644 --- a/packs/tables/LOG +++ b/packs/tables/LOG @@ -1,3 +1,3 @@ -2024/08/24-08:51:07.306606 ffff8f7ef120 Recovering log #46 -2024/08/24-08:51:07.335868 ffff8f7ef120 Delete type=3 #44 -2024/08/24-08:51:07.336239 ffff8f7ef120 Delete type=0 #46 +2024/08/24-20:05:21.906434 ffff8f7ef120 Recovering log #50 +2024/08/24-20:05:21.940867 ffff8f7ef120 Delete type=0 #50 +2024/08/24-20:05:21.941181 ffff8f7ef120 Delete type=3 #48 diff --git a/packs/tables/LOG.old b/packs/tables/LOG.old index c3672e3..98a6907 100644 --- a/packs/tables/LOG.old +++ b/packs/tables/LOG.old @@ -1,8 +1,8 @@ -2024/08/22-14:23:00.355214 ffff8f7ef120 Recovering log #42 -2024/08/22-14:23:00.391396 ffff8f7ef120 Delete type=3 #40 -2024/08/22-14:23:00.391736 ffff8f7ef120 Delete type=0 #42 -2024/08/24-08:49:59.123767 ffff8d7af120 Level-0 table #47: started -2024/08/24-08:49:59.123992 ffff8d7af120 Level-0 table #47: 0 bytes OK -2024/08/24-08:49:59.132811 ffff8d7af120 Delete type=0 #45 -2024/08/24-08:49:59.141525 ffff8d7af120 Manual compaction at level-0 from '!tables!XY3o3oqawjUe6Wba' @ 72057594037927935 : 1 .. '!tables.results!z9VPZiT6MhJzjO6v.vwR7xQw1HrRWhrQn' @ 0 : 0; will stop at (end) -2024/08/24-08:49:59.141821 ffff8d7af120 Manual compaction at level-1 from '!tables!XY3o3oqawjUe6Wba' @ 72057594037927935 : 1 .. '!tables.results!z9VPZiT6MhJzjO6v.vwR7xQw1HrRWhrQn' @ 0 : 0; will stop at (end) +2024/08/24-08:51:07.306606 ffff8f7ef120 Recovering log #46 +2024/08/24-08:51:07.335868 ffff8f7ef120 Delete type=3 #44 +2024/08/24-08:51:07.336239 ffff8f7ef120 Delete type=0 #46 +2024/08/24-20:05:09.681259 ffff8d7af120 Level-0 table #51: started +2024/08/24-20:05:09.681470 ffff8d7af120 Level-0 table #51: 0 bytes OK +2024/08/24-20:05:09.689582 ffff8d7af120 Delete type=0 #49 +2024/08/24-20:05:09.716347 ffff8d7af120 Manual compaction at level-0 from '!tables!XY3o3oqawjUe6Wba' @ 72057594037927935 : 1 .. '!tables.results!z9VPZiT6MhJzjO6v.vwR7xQw1HrRWhrQn' @ 0 : 0; will stop at (end) +2024/08/24-20:05:09.717019 ffff8d7af120 Manual compaction at level-1 from '!tables!XY3o3oqawjUe6Wba' @ 72057594037927935 : 1 .. '!tables.results!z9VPZiT6MhJzjO6v.vwR7xQw1HrRWhrQn' @ 0 : 0; will stop at (end) diff --git a/packs/tables/MANIFEST-000048 b/packs/tables/MANIFEST-000052 similarity index 71% rename from packs/tables/MANIFEST-000048 rename to packs/tables/MANIFEST-000052 index eca17d4a9bd6f0cf330fddaee8513214d06a4277..df637cdb78bf4ceb168689c5323bc324cf54c75b 100644 GIT binary patch delta 23 ecmeBX>SmhoTj2KBYaW~oj7+AS49sRMOBn%W$p+B? delta 23 ecmeBX>SmhoTOefB>ts#_MkYf}24*9crHlYuNd_kX From 34940832c0aa8fa8134698e7cd41e6806e374f07 Mon Sep 17 00:00:00 2001 From: Adam Kostandy Date: Sun, 25 Aug 2024 06:25:09 -0400 Subject: [PATCH 2/7] Bolding and chat messages now work with agenda abilities and items, added in bolding to work correctly. --- module/data/actor-character.mjs | 41 +++- module/sheets/actor-sheet.mjs | 185 +++++++++++------- packs/agenda/{000053.log => 000057.log} | 0 packs/agenda/CURRENT | 2 +- packs/agenda/LOG | 6 +- packs/agenda/LOG.old | 16 +- .../{MANIFEST-000052 => MANIFEST-000056} | Bin 187 -> 187 bytes packs/blasphemy/{000053.log => 000057.log} | 0 packs/blasphemy/CURRENT | 2 +- packs/blasphemy/LOG | 6 +- packs/blasphemy/LOG.old | 16 +- .../{MANIFEST-000052 => MANIFEST-000056} | Bin 191 -> 191 bytes packs/items/{000054.log => 000058.log} | 0 packs/items/CURRENT | 2 +- packs/items/LOG | 6 +- packs/items/LOG.old | 16 +- .../{MANIFEST-000053 => MANIFEST-000057} | Bin 190 -> 190 bytes packs/tables/{000053.log => 000057.log} | 0 packs/tables/CURRENT | 2 +- packs/tables/LOG | 6 +- packs/tables/LOG.old | 16 +- .../{MANIFEST-000052 => MANIFEST-000056} | Bin 267 -> 267 bytes templates/actor/parts/actor-abilities.hbs | 98 +++++----- 23 files changed, 247 insertions(+), 173 deletions(-) rename packs/agenda/{000053.log => 000057.log} (100%) rename packs/agenda/{MANIFEST-000052 => MANIFEST-000056} (68%) rename packs/blasphemy/{000053.log => 000057.log} (100%) rename packs/blasphemy/{MANIFEST-000052 => MANIFEST-000056} (67%) rename packs/items/{000054.log => 000058.log} (100%) rename packs/items/{MANIFEST-000053 => MANIFEST-000057} (67%) rename packs/tables/{000053.log => 000057.log} (100%) rename packs/tables/{MANIFEST-000052 => MANIFEST-000056} (71%) diff --git a/module/data/actor-character.mjs b/module/data/actor-character.mjs index 3c7a123..de0c93f 100644 --- a/module/data/actor-character.mjs +++ b/module/data/actor-character.mjs @@ -115,8 +115,15 @@ export default class CainCharacter extends CainActorBase { schema.restDiceModifier = new fields.NumberField({ required: true, initial: 0, min: -3, max: 3 }); - schema.currentAgendaItems = new fields.ArrayField(new fields.StringField({ required: true, initial: " " }), { required: true, initial: [] }); - schema.currentAgendaAbilities = new fields.ArrayField(new fields.StringField({ required: true, initial: " " }), { required: true, initial: [] }); + schema.currentAgendaItems = new fields.ArrayField(new fields.SchemaField({ + text: new fields.StringField({ required: true, initial: " " }), + isBold: new fields.BooleanField({ required: true, initial: false }) + }), { required: true, initial: [] }); + + schema.currentAgendaAbilities = new fields.ArrayField(new fields.SchemaField({ + text: new fields.StringField({ required: true, initial: " " }), + isBold: new fields.BooleanField({ required: true, initial: false }) + }), { required: true, initial: [] }); return schema; } @@ -157,4 +164,34 @@ export default class CainCharacter extends CainActorBase { this.advancements += 1; } } + + // Migration function to convert old schema items to new format + static async migrateOldSchema(actor) { + const updateData = {}; + + // Convert old agenda items to new format + if (actor.system.agendaItems && Array.isArray(actor.system.agendaItems)) { + updateData['system.currentAgendaItems'] = actor.system.agendaItems.map(item => ({ + text: item, + isBold: false + })); + } + + // Convert old agenda abilities to new format + if (actor.system.agendaAbilities && Array.isArray(actor.system.agendaAbilities)) { + updateData['system.currentAgendaAbilities'] = actor.system.agendaAbilities.map(ability => ({ + text: ability, + isBold: false + })); + } + + // Update the actor with the new data + await actor.update(updateData); + } + + prepareData() { + super.prepareData(); + CainCharacter.migrateOldSchema(this); + } + } \ No newline at end of file diff --git a/module/sheets/actor-sheet.mjs b/module/sheets/actor-sheet.mjs index 4ca903c..3de194b 100644 --- a/module/sheets/actor-sheet.mjs +++ b/module/sheets/actor-sheet.mjs @@ -208,8 +208,12 @@ export class CainActorSheet extends ActorSheet { html.find('#editable-agenda-abilities').on('click', '.remove-ability-button', this._removeAbilityButton.bind(this)); html.find('#editable-agenda-items').on('change', '.editable-item-input', this._updateAgendaItem.bind(this)); html.find('#editable-agenda-abilities').on('change', '.editable-ability-input', this._updateAgendaAbility.bind(this)); - html.find('.bold-item-button').click(this._boldItem.bind(this)); - html.find('.agenda-to-chat').click(this._agendaToChat.bind(this)); + // Bind the bolding functions + html.find('.bold-item-button').click(this._boldAgendaItem.bind(this)); + html.find('.bold-ability-button').click(this._boldAgendaAbility.bind(this)); + // Bind the send to chat functions + html.find('.agenda-item-to-chat').click(this._sendAgendaItemMessage.bind(this)); + html.find('.agenda-ability-to-chat').click(this._sendAgendaAbilityMessage.bind(this)); /* NPC sheet specific listeners */ html.find('.attack-button').click(this._onNpcAttack.bind(this)); html.find('.severe-attack-button').click(this._onNpcSevereAttack.bind(this)); @@ -223,89 +227,122 @@ export class CainActorSheet extends ActorSheet { } -_boldItem(event) { - event.preventDefault(); - const index = event.currentTarget.getAttribute('data-index'); - const textarea = document.querySelector(`.editable-item-input[data-index="${index}"]`); - textarea.style.fontWeight = textarea.style.fontWeight === 'bold' ? 'normal' : 'bold'; -} - -_agendaToChat(event) { - event.preventDefault(); - const index = event.currentTarget.getAttribute('data-index'); - const itemText = document.querySelector(`.editable-item-input[data-index="${index}"]`).value; - const message = `

${itemText}

`; - ChatMessage.create({ - content: message, - speaker: ChatMessage.getSpeaker({ actor: this.actor }), - }); + _boldAgendaItem(event) { + event.preventDefault(); + const index = event.currentTarget.getAttribute('data-index'); + const textarea = document.querySelector(`.editable-item-input[data-index="${index}"]`); + const list = this.actor.system.currentAgendaItems; + + list[index].isBold = !list[index].isBold; + textarea.style.fontWeight = list[index].isBold ? 'bold' : 'normal'; + event.currentTarget.querySelector('i').classList.toggle('active', list[index].isBold); + + console.log(`Bolding item at index ${index}: ${list[index].isBold}`); + + this.actor.update({ 'system.currentAgendaItems': list }); + } -} + _boldAgendaAbility(event) { + event.preventDefault(); + const index = event.currentTarget.getAttribute('data-index'); + const textarea = document.querySelector(`.editable-ability-input[data-index="${index}"]`); + const list = this.actor.system.currentAgendaAbilities; + + list[index].isBold = !list[index].isBold; + textarea.style.fontWeight = list[index].isBold ? 'bold' : 'normal'; + event.currentTarget.querySelector('i').classList.toggle('active', list[index].isBold); + + console.log(`Bolding ability at index ${index}: ${list[index].isBold}`); + + this.actor.update({ 'system.currentAgendaAbilities': list }); + } + _sendAgendaItemMessage(event) { + event.preventDefault(); + const index = event.currentTarget.getAttribute('data-index'); + const textarea = document.querySelector(`.editable-item-input[data-index="${index}"]`); + const itemText = textarea.value; + const message = `

${itemText}

`; + ChatMessage.create({ + content: message, + speaker: ChatMessage.getSpeaker({ actor: this.actor }), + }); + } + _sendAgendaAbilityMessage(event) { + event.preventDefault(); + const index = event.currentTarget.getAttribute('data-index'); + const textarea = document.querySelector(`.editable-ability-input[data-index="${index}"]`); + const abilityText = textarea.value; + const message = `

${abilityText}

`; + ChatMessage.create({ + content: message, + speaker: ChatMessage.getSpeaker({ actor: this.actor }), + }); + } -_addAgendaItemButton(event) { - event.preventDefault(); - const agendaItems = this.actor.system.currentAgendaItems || []; - agendaItems.push('New Agenda Item'); - this.actor.update({ 'system.currentAgendaItems': agendaItems }).then(() => { - this.render(false); // Re-render the sheet to reflect changes - }); -} + _addAgendaItemButton(event) { + event.preventDefault(); + const agendaItems = this.actor.system.currentAgendaItems || []; + agendaItems.push({ text: 'New Agenda Item', isBold: false }); + this.actor.update({ 'system.currentAgendaItems': agendaItems }).then(() => { + this.render(false); // Re-render the sheet to reflect changes + }); + } -_addAgendaAbilityButton(event) { - event.preventDefault(); - const agendaAbilities = this.actor.system.currentAgendaAbilities || []; - agendaAbilities.push('New Agenda Ability'); - this.actor.update({ 'system.currentAgendaAbilities': agendaAbilities }).then(() => { - this.render(false); // Re-render the sheet to reflect changes - }); -} + _addAgendaAbilityButton(event) { + event.preventDefault(); + const agendaAbilities = this.actor.system.currentAgendaAbilities || []; + agendaAbilities.push({ text: 'New Agenda Ability', isBold: false }); + this.actor.update({ 'system.currentAgendaAbilities': agendaAbilities }).then(() => { + this.render(false); // Re-render the sheet to reflect changes + }); + } -_removeItemButton(event) { - event.preventDefault(); - const index = event.currentTarget.dataset.index; - const agendaItems = this.actor.system.currentAgendaItems || []; - agendaItems.splice(index, 1); - this.actor.update({ 'system.currentAgendaItems': agendaItems }).then(() => { - this.render(false); // Re-render the sheet to reflect changes - }); -} + _removeItemButton(event) { + event.preventDefault(); + const index = event.currentTarget.dataset.index; + const agendaItems = this.actor.system.currentAgendaItems || []; + agendaItems.splice(index, 1); + this.actor.update({ 'system.currentAgendaItems': agendaItems }).then(() => { + this.render(false); // Re-render the sheet to reflect changes + }); + } -_removeAbilityButton(event) { - event.preventDefault(); - const index = event.currentTarget.dataset.index; - const agendaAbilities = this.actor.system.currentAgendaAbilities || []; - agendaAbilities.splice(index, 1); - this.actor.update({ 'system.currentAgendaAbilities': agendaAbilities }).then(() => { - this.render(false); // Re-render the sheet to reflect changes - }); -} + _removeAbilityButton(event) { + event.preventDefault(); + const index = event.currentTarget.dataset.index; + const agendaAbilities = this.actor.system.currentAgendaAbilities || []; + agendaAbilities.splice(index, 1); + this.actor.update({ 'system.currentAgendaAbilities': agendaAbilities }).then(() => { + this.render(false); // Re-render the sheet to reflect changes + }); + } -_updateAgendaItem(event) { - const index = event.target.dataset.index; - const agendaItems = this.actor.system.currentAgendaItems || []; - agendaItems[index] = event.target.value; - this.actor.update({ 'system.currentAgendaItems': agendaItems }); -} + _updateAgendaItem(event) { + const index = event.target.dataset.index; + const agendaItems = this.actor.system.currentAgendaItems || []; + agendaItems[index].text = event.target.value; + this.actor.update({ 'system.currentAgendaItems': agendaItems }); + } + _toggleCollapseButton(event) { + event.preventDefault(); // Prevent default button behavior + const button = event.currentTarget; + const content = button.nextElementSibling; + console.log(this); + console.log('Button clicked:', button); + console.log('Content to toggle:', content); + content.classList.toggle('collapsed'); + } -_toggleCollapseButton(event) { - event.preventDefault(); // Prevent default button behavior - const button = event.currentTarget; - const content = button.nextElementSibling; - console.log(this); - console.log('Button clicked:', button); - console.log('Content to toggle:', content); - content.classList.toggle('collapsed'); -} + _updateAgendaAbility(event) { + const index = event.target.dataset.index; + const agendaAbilities = this.actor.system.currentAgendaAbilities || []; + agendaAbilities[index].text = event.target.value; + this.actor.update({ 'system.currentAgendaAbilities': agendaAbilities }); + } -_updateAgendaAbility(event) { - const index = event.target.dataset.index; - const agendaAbilities = this.actor.system.currentAgendaAbilities || []; - agendaAbilities[index] = event.target.value; - this.actor.update({ 'system.currentAgendaAbilities': agendaAbilities }); -} _onInputChange(event) { const index = event.currentTarget.dataset.index; diff --git a/packs/agenda/000053.log b/packs/agenda/000057.log similarity index 100% rename from packs/agenda/000053.log rename to packs/agenda/000057.log diff --git a/packs/agenda/CURRENT b/packs/agenda/CURRENT index f774e85..80d9de0 100644 --- a/packs/agenda/CURRENT +++ b/packs/agenda/CURRENT @@ -1 +1 @@ -MANIFEST-000052 +MANIFEST-000056 diff --git a/packs/agenda/LOG b/packs/agenda/LOG index 835bbb0..d7b3b3f 100644 --- a/packs/agenda/LOG +++ b/packs/agenda/LOG @@ -1,3 +1,3 @@ -2024/08/24-20:05:21.813863 ffff8e7cf120 Recovering log #50 -2024/08/24-20:05:21.845439 ffff8e7cf120 Delete type=0 #50 -2024/08/24-20:05:21.845731 ffff8e7cf120 Delete type=3 #48 +2024/08/25-05:39:35.236025 ffff8dfbf120 Recovering log #54 +2024/08/25-05:39:35.264440 ffff8dfbf120 Delete type=3 #52 +2024/08/25-05:39:35.264804 ffff8dfbf120 Delete type=0 #54 diff --git a/packs/agenda/LOG.old b/packs/agenda/LOG.old index fed2ad1..1c85550 100644 --- a/packs/agenda/LOG.old +++ b/packs/agenda/LOG.old @@ -1,8 +1,8 @@ -2024/08/24-08:51:07.214048 ffff8dfbf120 Recovering log #46 -2024/08/24-08:51:07.243260 ffff8dfbf120 Delete type=3 #44 -2024/08/24-08:51:07.243610 ffff8dfbf120 Delete type=0 #46 -2024/08/24-20:05:09.649973 ffff8d7af120 Level-0 table #51: started -2024/08/24-20:05:09.650178 ffff8d7af120 Level-0 table #51: 0 bytes OK -2024/08/24-20:05:09.659047 ffff8d7af120 Delete type=0 #49 -2024/08/24-20:05:09.668169 ffff8d7af120 Manual compaction at level-0 from '!items!1PnBSz1PZVcYKaWa' @ 72057594037927935 : 1 .. '!items!umnOFhEQgDzG2eaF' @ 0 : 0; will stop at (end) -2024/08/24-20:05:09.668430 ffff8d7af120 Manual compaction at level-1 from '!items!1PnBSz1PZVcYKaWa' @ 72057594037927935 : 1 .. '!items!umnOFhEQgDzG2eaF' @ 0 : 0; will stop at (end) +2024/08/24-20:05:21.813863 ffff8e7cf120 Recovering log #50 +2024/08/24-20:05:21.845439 ffff8e7cf120 Delete type=0 #50 +2024/08/24-20:05:21.845731 ffff8e7cf120 Delete type=3 #48 +2024/08/25-05:39:28.842552 ffff8d7af120 Level-0 table #55: started +2024/08/25-05:39:28.842742 ffff8d7af120 Level-0 table #55: 0 bytes OK +2024/08/25-05:39:28.872796 ffff8d7af120 Delete type=0 #53 +2024/08/25-05:39:28.902798 ffff8d7af120 Manual compaction at level-0 from '!items!1PnBSz1PZVcYKaWa' @ 72057594037927935 : 1 .. '!items!umnOFhEQgDzG2eaF' @ 0 : 0; will stop at (end) +2024/08/25-05:39:28.903133 ffff8d7af120 Manual compaction at level-1 from '!items!1PnBSz1PZVcYKaWa' @ 72057594037927935 : 1 .. '!items!umnOFhEQgDzG2eaF' @ 0 : 0; will stop at (end) diff --git a/packs/agenda/MANIFEST-000052 b/packs/agenda/MANIFEST-000056 similarity index 68% rename from packs/agenda/MANIFEST-000052 rename to packs/agenda/MANIFEST-000056 index 70674bfd19c9e9a083ac6a9ffabd29efcc030133..379ec84063737ae1a402c521736e3a9a77bb6f0f 100644 GIT binary patch delta 22 dcmdnZxSMgp8va**MYuQ^7?~_N8JMkD%m7uM1&sgz delta 22 dcmdnZxSMgp8vgu})kirP7@15t8JNvj%m7z11=9ck diff --git a/packs/blasphemy/000053.log b/packs/blasphemy/000057.log similarity index 100% rename from packs/blasphemy/000053.log rename to packs/blasphemy/000057.log diff --git a/packs/blasphemy/CURRENT b/packs/blasphemy/CURRENT index f774e85..80d9de0 100644 --- a/packs/blasphemy/CURRENT +++ b/packs/blasphemy/CURRENT @@ -1 +1 @@ -MANIFEST-000052 +MANIFEST-000056 diff --git a/packs/blasphemy/LOG b/packs/blasphemy/LOG index 1f16d6a..473ba38 100644 --- a/packs/blasphemy/LOG +++ b/packs/blasphemy/LOG @@ -1,3 +1,3 @@ -2024/08/24-20:05:21.858261 ffff8efdf120 Recovering log #50 -2024/08/24-20:05:21.890679 ffff8efdf120 Delete type=0 #50 -2024/08/24-20:05:21.890942 ffff8efdf120 Delete type=3 #48 +2024/08/25-05:39:35.278005 ffff8e7cf120 Recovering log #54 +2024/08/25-05:39:35.311838 ffff8e7cf120 Delete type=3 #52 +2024/08/25-05:39:35.312174 ffff8e7cf120 Delete type=0 #54 diff --git a/packs/blasphemy/LOG.old b/packs/blasphemy/LOG.old index 650802a..f878c3e 100644 --- a/packs/blasphemy/LOG.old +++ b/packs/blasphemy/LOG.old @@ -1,8 +1,8 @@ -2024/08/24-08:51:07.256959 ffff8e7cf120 Recovering log #46 -2024/08/24-08:51:07.291362 ffff8e7cf120 Delete type=3 #44 -2024/08/24-08:51:07.291701 ffff8e7cf120 Delete type=0 #46 -2024/08/24-20:05:09.640438 ffff8d7af120 Level-0 table #51: started -2024/08/24-20:05:09.642670 ffff8d7af120 Level-0 table #51: 0 bytes OK -2024/08/24-20:05:09.649645 ffff8d7af120 Delete type=0 #49 -2024/08/24-20:05:09.668089 ffff8d7af120 Manual compaction at level-0 from '!folders!FWZZgy9tnHSHa9tk' @ 72057594037927935 : 1 .. '!items!yotw9uAVluGmTHO4' @ 0 : 0; will stop at (end) -2024/08/24-20:05:09.668366 ffff8d7af120 Manual compaction at level-1 from '!folders!FWZZgy9tnHSHa9tk' @ 72057594037927935 : 1 .. '!items!yotw9uAVluGmTHO4' @ 0 : 0; will stop at (end) +2024/08/24-20:05:21.858261 ffff8efdf120 Recovering log #50 +2024/08/24-20:05:21.890679 ffff8efdf120 Delete type=0 #50 +2024/08/24-20:05:21.890942 ffff8efdf120 Delete type=3 #48 +2024/08/25-05:39:28.791218 ffff8d7af120 Level-0 table #55: started +2024/08/25-05:39:28.791524 ffff8d7af120 Level-0 table #55: 0 bytes OK +2024/08/25-05:39:28.842234 ffff8d7af120 Delete type=0 #53 +2024/08/25-05:39:28.902690 ffff8d7af120 Manual compaction at level-0 from '!folders!FWZZgy9tnHSHa9tk' @ 72057594037927935 : 1 .. '!items!yotw9uAVluGmTHO4' @ 0 : 0; will stop at (end) +2024/08/25-05:39:28.903052 ffff8d7af120 Manual compaction at level-1 from '!folders!FWZZgy9tnHSHa9tk' @ 72057594037927935 : 1 .. '!items!yotw9uAVluGmTHO4' @ 0 : 0; will stop at (end) diff --git a/packs/blasphemy/MANIFEST-000052 b/packs/blasphemy/MANIFEST-000056 similarity index 67% rename from packs/blasphemy/MANIFEST-000052 rename to packs/blasphemy/MANIFEST-000056 index dbea2007044c277e6f36aa3105510404c26c9f1a..17cc61027c6e87b7716002a377a911ea51bd1165 100644 GIT binary patch delta 23 ecmdnbxSw&tdI2Rfjw((DMkY&624*XkKa2oMnguoh delta 23 ecmdnbxSw&tdV$4F&WfB2j7+AS49sRMe;5H(qXpdn diff --git a/packs/items/000054.log b/packs/items/000058.log similarity index 100% rename from packs/items/000054.log rename to packs/items/000058.log diff --git a/packs/items/CURRENT b/packs/items/CURRENT index 774dcea..ac18047 100644 --- a/packs/items/CURRENT +++ b/packs/items/CURRENT @@ -1 +1 @@ -MANIFEST-000053 +MANIFEST-000057 diff --git a/packs/items/LOG b/packs/items/LOG index 9a2553f..529bd3d 100644 --- a/packs/items/LOG +++ b/packs/items/LOG @@ -1,3 +1,3 @@ -2024/08/24-20:05:21.765034 ffff8dfbf120 Recovering log #51 -2024/08/24-20:05:21.798715 ffff8dfbf120 Delete type=0 #51 -2024/08/24-20:05:21.799058 ffff8dfbf120 Delete type=3 #49 +2024/08/25-05:39:35.194578 ffff8efdf120 Recovering log #55 +2024/08/25-05:39:35.222310 ffff8efdf120 Delete type=3 #53 +2024/08/25-05:39:35.222703 ffff8efdf120 Delete type=0 #55 diff --git a/packs/items/LOG.old b/packs/items/LOG.old index 59ce5c0..2040090 100644 --- a/packs/items/LOG.old +++ b/packs/items/LOG.old @@ -1,8 +1,8 @@ -2024/08/24-08:51:07.171446 ffff8efdf120 Recovering log #47 -2024/08/24-08:51:07.201005 ffff8efdf120 Delete type=3 #45 -2024/08/24-08:51:07.201373 ffff8efdf120 Delete type=0 #47 -2024/08/24-20:05:09.659356 ffff8d7af120 Level-0 table #52: started -2024/08/24-20:05:09.659560 ffff8d7af120 Level-0 table #52: 0 bytes OK -2024/08/24-20:05:09.667683 ffff8d7af120 Delete type=0 #50 -2024/08/24-20:05:09.668245 ffff8d7af120 Manual compaction at level-0 from '!folders!DYa1yCl9CNfOahIN' @ 72057594037927935 : 1 .. '!items!zUOSvdFDFvXZqROE' @ 0 : 0; will stop at (end) -2024/08/24-20:05:09.668503 ffff8d7af120 Manual compaction at level-1 from '!folders!DYa1yCl9CNfOahIN' @ 72057594037927935 : 1 .. '!items!zUOSvdFDFvXZqROE' @ 0 : 0; will stop at (end) +2024/08/24-20:05:21.765034 ffff8dfbf120 Recovering log #51 +2024/08/24-20:05:21.798715 ffff8dfbf120 Delete type=0 #51 +2024/08/24-20:05:21.799058 ffff8dfbf120 Delete type=3 #49 +2024/08/25-05:39:28.873233 ffff8d7af120 Level-0 table #56: started +2024/08/25-05:39:28.873462 ffff8d7af120 Level-0 table #56: 0 bytes OK +2024/08/25-05:39:28.902247 ffff8d7af120 Delete type=0 #54 +2024/08/25-05:39:28.902900 ffff8d7af120 Manual compaction at level-0 from '!folders!DYa1yCl9CNfOahIN' @ 72057594037927935 : 1 .. '!items!zUOSvdFDFvXZqROE' @ 0 : 0; will stop at (end) +2024/08/25-05:39:28.903231 ffff8d7af120 Manual compaction at level-1 from '!folders!DYa1yCl9CNfOahIN' @ 72057594037927935 : 1 .. '!items!zUOSvdFDFvXZqROE' @ 0 : 0; will stop at (end) diff --git a/packs/items/MANIFEST-000053 b/packs/items/MANIFEST-000057 similarity index 67% rename from packs/items/MANIFEST-000053 rename to packs/items/MANIFEST-000057 index b5bc31695556783ca87b462f27a77e77ac4ef830..efd07bff77088b5d73705beac15995b2e646fe78 100644 GIT binary patch delta 23 ecmdnTxQ}tdIsw%)X{wwIj7(OX49wOn6Bq$gT?K0Z delta 23 fcmdnTxQ}tdI)Nn`n&&tf7@5pC8JNvkCNKg3R=@?S diff --git a/packs/tables/000053.log b/packs/tables/000057.log similarity index 100% rename from packs/tables/000053.log rename to packs/tables/000057.log diff --git a/packs/tables/CURRENT b/packs/tables/CURRENT index f774e85..80d9de0 100644 --- a/packs/tables/CURRENT +++ b/packs/tables/CURRENT @@ -1 +1 @@ -MANIFEST-000052 +MANIFEST-000056 diff --git a/packs/tables/LOG b/packs/tables/LOG index b529c03..bada782 100644 --- a/packs/tables/LOG +++ b/packs/tables/LOG @@ -1,3 +1,3 @@ -2024/08/24-20:05:21.906434 ffff8f7ef120 Recovering log #50 -2024/08/24-20:05:21.940867 ffff8f7ef120 Delete type=0 #50 -2024/08/24-20:05:21.941181 ffff8f7ef120 Delete type=3 #48 +2024/08/25-05:39:35.327081 ffff8f7ef120 Recovering log #54 +2024/08/25-05:39:35.353747 ffff8f7ef120 Delete type=3 #52 +2024/08/25-05:39:35.353947 ffff8f7ef120 Delete type=0 #54 diff --git a/packs/tables/LOG.old b/packs/tables/LOG.old index 98a6907..bec3a5b 100644 --- a/packs/tables/LOG.old +++ b/packs/tables/LOG.old @@ -1,8 +1,8 @@ -2024/08/24-08:51:07.306606 ffff8f7ef120 Recovering log #46 -2024/08/24-08:51:07.335868 ffff8f7ef120 Delete type=3 #44 -2024/08/24-08:51:07.336239 ffff8f7ef120 Delete type=0 #46 -2024/08/24-20:05:09.681259 ffff8d7af120 Level-0 table #51: started -2024/08/24-20:05:09.681470 ffff8d7af120 Level-0 table #51: 0 bytes OK -2024/08/24-20:05:09.689582 ffff8d7af120 Delete type=0 #49 -2024/08/24-20:05:09.716347 ffff8d7af120 Manual compaction at level-0 from '!tables!XY3o3oqawjUe6Wba' @ 72057594037927935 : 1 .. '!tables.results!z9VPZiT6MhJzjO6v.vwR7xQw1HrRWhrQn' @ 0 : 0; will stop at (end) -2024/08/24-20:05:09.717019 ffff8d7af120 Manual compaction at level-1 from '!tables!XY3o3oqawjUe6Wba' @ 72057594037927935 : 1 .. '!tables.results!z9VPZiT6MhJzjO6v.vwR7xQw1HrRWhrQn' @ 0 : 0; will stop at (end) +2024/08/24-20:05:21.906434 ffff8f7ef120 Recovering log #50 +2024/08/24-20:05:21.940867 ffff8f7ef120 Delete type=0 #50 +2024/08/24-20:05:21.941181 ffff8f7ef120 Delete type=3 #48 +2024/08/25-05:39:28.933545 ffff8d7af120 Level-0 table #55: started +2024/08/25-05:39:28.933759 ffff8d7af120 Level-0 table #55: 0 bytes OK +2024/08/25-05:39:28.965190 ffff8d7af120 Delete type=0 #53 +2024/08/25-05:39:29.032325 ffff8d7af120 Manual compaction at level-0 from '!tables!XY3o3oqawjUe6Wba' @ 72057594037927935 : 1 .. '!tables.results!z9VPZiT6MhJzjO6v.vwR7xQw1HrRWhrQn' @ 0 : 0; will stop at (end) +2024/08/25-05:39:29.033457 ffff8d7af120 Manual compaction at level-1 from '!tables!XY3o3oqawjUe6Wba' @ 72057594037927935 : 1 .. '!tables.results!z9VPZiT6MhJzjO6v.vwR7xQw1HrRWhrQn' @ 0 : 0; will stop at (end) diff --git a/packs/tables/MANIFEST-000052 b/packs/tables/MANIFEST-000056 similarity index 71% rename from packs/tables/MANIFEST-000052 rename to packs/tables/MANIFEST-000056 index df637cdb78bf4ceb168689c5323bc324cf54c75b..886924c4eb18d7673694921594d2720e7521f6e9 100644 GIT binary patch delta 23 ecmeBX>SmhoTOjJtl#QGWj7*lC49r$6OBn%Nr3Op@ delta 23 ecmeBX>SmhoTj2KBYaW~oj7+AS49sRMOBn%W$p+B? diff --git a/templates/actor/parts/actor-abilities.hbs b/templates/actor/parts/actor-abilities.hbs index 7bc6ada..4db0cad 100644 --- a/templates/actor/parts/actor-abilities.hbs +++ b/templates/actor/parts/actor-abilities.hbs @@ -32,59 +32,59 @@ - + -
-

My Agenda

-
-
-

Agenda Items

-
    - {{#each actor.system.currentAgendaItems as |item index|}} -
  • - - -
  • - {{/each}} -
- -
+ +
+

My Agenda

+
+
+

Agenda Items

+
    + {{#each actor.system.currentAgendaItems as |item index|}} +
  • + + +
  • + {{/each}} +
+ +
-
-

Agenda Abilities

-
    - {{#each actor.system.currentAgendaAbilities as |ability index|}} -
  • - - -
  • - {{/each}} -
- +
+

Agenda Abilities

+
    + {{#each actor.system.currentAgendaAbilities as |ability index|}} +
  • + + +
  • + {{/each}} +
+ +
-
-
From ca8ee16150da1c007bbbb0886815580f45abdd50 Mon Sep 17 00:00:00 2001 From: Adam Kostandy Date: Sun, 25 Aug 2024 06:27:43 -0400 Subject: [PATCH 3/7] Updated system to next version. --- system.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/system.json b/system.json index 6e2c943..d9d6171 100644 --- a/system.json +++ b/system.json @@ -20,7 +20,7 @@ "thumbnail": "systems/cain/assets/cain.png" } ], - "version": "1.0.15", + "version": "1.0.16", "compatibility": { "minimum": 11, "verified": "12" From 040ee318e4d066579918297c219395095bc932cd Mon Sep 17 00:00:00 2001 From: Adam Kostandy Date: Sun, 25 Aug 2024 07:01:14 -0400 Subject: [PATCH 4/7] Added in base for actor character party overvoew --- module/cain.mjs | 23 +++++++++++++++++-- module/data/actor-character.mjs | 9 +------- module/documents/player-overview.mjs | 33 ++++++++++++++++++++++++++++ module/helpers/templates.mjs | 2 ++ 4 files changed, 57 insertions(+), 10 deletions(-) create mode 100644 module/documents/player-overview.mjs diff --git a/module/cain.mjs b/module/cain.mjs index df82baa..c17e8e1 100644 --- a/module/cain.mjs +++ b/module/cain.mjs @@ -8,6 +8,8 @@ import { CainItemSheet } from './sheets/item-sheet.mjs'; // Import helper/utility classes and constants. import { preloadHandlebarsTemplates } from './helpers/templates.mjs'; import { CAIN } from './helpers/config.mjs'; +import { PlayerOverview } from './documents/player-overview.mjs'; + // Import DataModel classes import * as models from './data/_module.mjs'; @@ -84,7 +86,7 @@ Hooks.once('init', function () { imagePath: 'systems/cain/assets/Talismans/Talisman-A-0.png', currMarkAmount: 0, minMarkAmount: 0, - maxMarkAmount: 6, + maxMarkAmount: 2, isHidden: false, }, ], @@ -130,6 +132,23 @@ Handlebars.registerHelper('set', function(context, key, value, options) { Hooks.once('ready', function () { // Function to create and insert the Talisman button + + function addPlayerOverviewButton() { + const button = $(''); + button.on('click', () => { + new PlayerOverview().render(true); + }); + + const aside = $('').append(button); + const actionBar = $('#action-bar'); + if (actionBar.length) { + actionBar.append(aside); + console.log('Player Overview button inserted successfully.'); + } else { + console.error('Action bar not found.'); + } + } + function addTalismanButton() { // Create the button element with the talisman icon const button = $(''); @@ -188,7 +207,7 @@ Hooks.once('ready', function () { // Add the Talisman button when the action bar is first ready addTalismanButton(); - + addPlayerOverviewButton(); // Add the Risk Roll and Fate Roll buttons when the action bar is first ready addRiskRollButton(); addFateRollButton(); diff --git a/module/data/actor-character.mjs b/module/data/actor-character.mjs index de0c93f..44d8b6c 100644 --- a/module/data/actor-character.mjs +++ b/module/data/actor-character.mjs @@ -13,13 +13,6 @@ export default class CainCharacter extends CainActorBase { }), }); - // Iterate over ability names and create a new SchemaField for each. - schema.abilities = new fields.SchemaField(Object.keys(CONFIG.CAIN.abilities).reduce((obj, ability) => { - obj[ability] = new fields.SchemaField({ - value: new fields.NumberField({ ...requiredInteger, initial: 10, min: 0 }), - }); - return obj; - }, {})); schema.skills = new fields.SchemaField(Object.keys(CONFIG.CAIN.skills).reduce((obj, skill) => { obj[skill] = new fields.SchemaField({ @@ -193,5 +186,5 @@ export default class CainCharacter extends CainActorBase { super.prepareData(); CainCharacter.migrateOldSchema(this); } - + } \ No newline at end of file diff --git a/module/documents/player-overview.mjs b/module/documents/player-overview.mjs new file mode 100644 index 0000000..7b73f73 --- /dev/null +++ b/module/documents/player-overview.mjs @@ -0,0 +1,33 @@ +// player-overview.js +export class PlayerOverview extends Application { + static get defaultOptions() { + return mergeObject(super.defaultOptions, { + id: "player-overview", + template: "systems/cain/templates/player-overview.hbs", + width: 600, + height: "auto", + title: "Player Overview", + resizable: true, + }); + } + + getData() { + // Fetch all players + const players = game.users.filter(user => !user.isGM); + const playerData = players.map(player => { + const actor = player.character; + return { + name: player.name, + actor: actor ? actor : null, + message: actor ? null : "No actor assigned. Please assign an actor for player overview." + }; + }); + console.log(playerData); + return { playerData }; + } + + activateListeners(html) { + super.activateListeners(html); + // Add any event listeners if needed + } + } \ No newline at end of file diff --git a/module/helpers/templates.mjs b/module/helpers/templates.mjs index 2abe4db..881f44a 100644 --- a/module/helpers/templates.mjs +++ b/module/helpers/templates.mjs @@ -7,6 +7,8 @@ export const preloadHandlebarsTemplates = async function () { return loadTemplates([ // Talismans 'systems/cain/templates/talisman-window.hbs', + // Player Overview + 'systems/cain/templates/player-overview.hbs', // Actor partials. 'systems/cain/templates/actor/parts/actor-features.hbs', 'systems/cain/templates/actor/parts/actor-items.hbs', From 8af2881403eea894d81502eab5f74babd248f98d Mon Sep 17 00:00:00 2001 From: Adam Kostandy Date: Sun, 25 Aug 2024 07:01:37 -0400 Subject: [PATCH 5/7] Changes to pages --- templates/player-overview.hbs | 39 +++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 templates/player-overview.hbs diff --git a/templates/player-overview.hbs b/templates/player-overview.hbs new file mode 100644 index 0000000..20f4a20 --- /dev/null +++ b/templates/player-overview.hbs @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + {{#each playerData}} + + + {{#if actor}} + + + + + + + {{else}} + + {{/if}} + + {{/each}} + +
Player NameCharacter NameLevelAbilitiesSkillsXPAdvancements
{{name}}{{actor.name}}{{actor.system.attributes.level.value}} + {{#each actor.system.abilities}} +
{{@key}}: {{this.value}}
+ {{/each}} +
+ {{#each actor.system.skills}} +
{{@key}}: {{this.value}}
+ {{/each}} +
{{actor.system.xp.value}}{{actor.system.advancements.value}}{{message}}
\ No newline at end of file From ed2989f562cededf3fa5ae9224a4a5b344d6e305 Mon Sep 17 00:00:00 2001 From: Adam Kostandy Date: Sun, 25 Aug 2024 07:51:46 -0400 Subject: [PATCH 6/7] Added in base for palyer overview section --- module/documents/player-overview.mjs | 2 +- module/helpers/templates.mjs | 4 + templates/player-overview.hbs | 139 +++++++++++++++++------- templates/player-overview/overview.hbs | 121 +++++++++++++++++++++ templates/player-overview/skills.hbs | 16 +++ templates/player-overview/talismans.hbs | 22 ++++ templates/player-overview/xp.hbs | 16 +++ 7 files changed, 280 insertions(+), 40 deletions(-) create mode 100644 templates/player-overview/overview.hbs create mode 100644 templates/player-overview/skills.hbs create mode 100644 templates/player-overview/talismans.hbs create mode 100644 templates/player-overview/xp.hbs diff --git a/module/documents/player-overview.mjs b/module/documents/player-overview.mjs index 7b73f73..e8ae19e 100644 --- a/module/documents/player-overview.mjs +++ b/module/documents/player-overview.mjs @@ -5,7 +5,7 @@ export class PlayerOverview extends Application { id: "player-overview", template: "systems/cain/templates/player-overview.hbs", width: 600, - height: "auto", + height: 600, title: "Player Overview", resizable: true, }); diff --git a/module/helpers/templates.mjs b/module/helpers/templates.mjs index 881f44a..4de7adc 100644 --- a/module/helpers/templates.mjs +++ b/module/helpers/templates.mjs @@ -9,6 +9,10 @@ export const preloadHandlebarsTemplates = async function () { 'systems/cain/templates/talisman-window.hbs', // Player Overview 'systems/cain/templates/player-overview.hbs', + 'systems/cain/templates/player-overview/overview.hbs', + 'systems/cain/templates/player-overview/skills.hbs', + 'systems/cain/templates/player-overview/xp.hbs', + 'systems/cain/templates/player-overview/talismans.hbs', // Actor partials. 'systems/cain/templates/actor/parts/actor-features.hbs', 'systems/cain/templates/actor/parts/actor-items.hbs', diff --git a/templates/player-overview.hbs b/templates/player-overview.hbs index 20f4a20..234adda 100644 --- a/templates/player-overview.hbs +++ b/templates/player-overview.hbs @@ -1,39 +1,100 @@ - - - - - - - - - - - - - - - {{#each playerData}} - - - {{#if actor}} - - - - - - - {{else}} - - {{/if}} - - {{/each}} - -
Player NameCharacter NameLevelAbilitiesSkillsXPAdvancements
{{name}}{{actor.name}}{{actor.system.attributes.level.value}} - {{#each actor.system.abilities}} -
{{@key}}: {{this.value}}
- {{/each}} -
- {{#each actor.system.skills}} -
{{@key}}: {{this.value}}
- {{/each}} -
{{actor.system.xp.value}}{{actor.system.advancements.value}}{{message}}
\ No newline at end of file +
+ {{!-- Sheet Tab Navigation --}} + + + {{!-- Sheet Body --}} +
+
+ {{> "systems/cain/templates/player-overview/overview.hbs" }} +
+
+ {{> "systems/cain/templates/player-overview/skills.hbs" }} +
+
+ {{> "systems/cain/templates/player-overview/xp.hbs" }} +
+
+ {{> "systems/cain/templates/player-overview/talismans.hbs" }} +
+
+ + + + +
\ No newline at end of file diff --git a/templates/player-overview/overview.hbs b/templates/player-overview/overview.hbs new file mode 100644 index 0000000..346d5ef --- /dev/null +++ b/templates/player-overview/overview.hbs @@ -0,0 +1,121 @@ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + {{#each playerData}} + + + {{#if actor}} + + + + + + + + + + + + + + + + + {{else}} + + {{/if}} + + {{/each}} + +
NameActorProfile ImageCAT LevelSexHeightWeightHairEyesAgendaBlasphemyXIDScripDivine AgonyInjuriesStressExtra Dice
{{name}}{{actor.name}}Profile Image{{actor.system.CATLEVEL.value}}{{actor.system.sex}}{{actor.system.height}}{{actor.system.weight}}{{actor.system.hair}}{{actor.system.eyes}}{{actor.system.agenda}}{{actor.system.blasphemy}}{{actor.system.XID}}{{actor.system.scrip}}{{actor.system.divineAgony.value}}{{actor.system.injuries.value}}{{actor.system.stress.value}}{{actor.system.extraDice.value}}{{message}}
+
+ +
+ {{#each playerData}} + {{#if actor}} +
+

{{actor.name}}'s Afflictions

+
    + {{#if actor.system.afflictions.affliction1}}
  • {{actor.system.afflictions.affliction1}}
  • {{/if}} + {{#if actor.system.afflictions.affliction2}}
  • {{actor.system.afflictions.affliction2}}
  • {{/if}} + {{#if actor.system.afflictions.affliction3}}
  • {{actor.system.afflictions.affliction3}}
  • {{/if}} + {{#if actor.system.afflictions.affliction4}}
  • {{actor.system.afflictions.affliction4}}
  • {{/if}} + {{#if actor.system.afflictions.affliction5}}
  • {{actor.system.afflictions.affliction5}}
  • {{/if}} + {{#unless (or actor.system.afflictions.affliction1 actor.system.afflictions.affliction2 actor.system.afflictions.affliction3 actor.system.afflictions.affliction4 actor.system.afflictions.affliction5)}} +
  • No afflictions
  • + {{/unless}} +
+
+ {{/if}} + {{/each}} +
+
+ + \ No newline at end of file diff --git a/templates/player-overview/skills.hbs b/templates/player-overview/skills.hbs new file mode 100644 index 0000000..2fd9c67 --- /dev/null +++ b/templates/player-overview/skills.hbs @@ -0,0 +1,16 @@ +
+ + {{#each playerData}} + + {{name}} + {{#if actor}} + {{actor.name}} + Profile Image + {{actor.system.attributes.level.value}} + {{else}} + {{message}} + {{/if}} + + {{/each}} + +
\ No newline at end of file diff --git a/templates/player-overview/talismans.hbs b/templates/player-overview/talismans.hbs new file mode 100644 index 0000000..b69df60 --- /dev/null +++ b/templates/player-overview/talismans.hbs @@ -0,0 +1,22 @@ +
+ + {{#each playerData}} + + {{name}} + {{#if actor}} + {{actor.name}} + + {{#each actor.system.talismans}} +
+ {{this.name}} +
{{this.name}}: {{this.currMarkAmount}} / {{this.maxMarkAmount}}
+
+ {{/each}} + + {{else}} + {{message}} + {{/if}} + + {{/each}} + +
\ No newline at end of file diff --git a/templates/player-overview/xp.hbs b/templates/player-overview/xp.hbs new file mode 100644 index 0000000..ab2b004 --- /dev/null +++ b/templates/player-overview/xp.hbs @@ -0,0 +1,16 @@ +
+ + {{#each playerData}} + + {{name}} + {{#if actor}} + {{actor.name}} + {{actor.system.xp.value}} + {{actor.system.advancements.value}} + {{else}} + {{message}} + {{/if}} + + {{/each}} + +
\ No newline at end of file From ff8b2dc7cb4a5025f3d09af128a224a8edd2b2a5 Mon Sep 17 00:00:00 2001 From: Adam Kostandy Date: Sun, 25 Aug 2024 09:10:24 -0400 Subject: [PATCH 7/7] Added in player overview into system, as well as fixed several issues in agenda ability code. --- assets/player-overview.png | Bin 0 -> 85543 bytes css/cain.css | 8 +- module/cain.mjs | 8 +- module/data/actor-character.mjs | 2 +- module/documents/player-overview.mjs | 87 +++++++++---- templates/player-overview.hbs | 40 ++++-- templates/player-overview/overview.hbs | 37 ++++-- templates/player-overview/skills.hbs | 108 ++++++++++++++-- templates/player-overview/talismans.hbs | 107 +++++++++++++--- templates/player-overview/xp.hbs | 164 ++++++++++++++++++++++-- 10 files changed, 459 insertions(+), 102 deletions(-) create mode 100644 assets/player-overview.png diff --git a/assets/player-overview.png b/assets/player-overview.png new file mode 100644 index 0000000000000000000000000000000000000000..5d769d2a52eec510e9bcc1c7a8a68fc671846bf5 GIT binary patch literal 85543 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 literal 0 HcmV?d00001 diff --git a/css/cain.css b/css/cain.css index 0a5301d..8395239 100644 --- a/css/cain.css +++ b/css/cain.css @@ -1245,7 +1245,7 @@ position: relative; } -.talisman-button, .risk-roll-button, .fate-roll-button { +.talisman-button, .risk-roll-button, .fate-roll-button, .player-overview-button { background: none; border: none; padding: 0; @@ -1257,17 +1257,17 @@ vertical-align: middle; } -.talisman-button img, .risk-roll-button img, .fate-roll-button img { +.talisman-button img, .risk-roll-button img, .fate-roll-button img, .player-overview-button img { border: none; width: 100%; height: auto; transition: filter 0.3s ease; } -.talisman-button img:hover, .risk-roll-button img:hover, .fate-roll-button img:hover { +.talisman-button img:hover, .risk-roll-button img:hover, .fate-roll-button img:hover, .player-overview-button img:hover { filter: brightness(1.2); /* Adjust the brightness to highlight the icon */ } -.talisman-button.clicked img, .risk-roll-button.clicked img, .fate-roll-button.clicked img { +.talisman-button.clicked img, .risk-roll-button.clicked img, .fate-roll-button.clicked img, .player-overview-button.clicked img { filter: brightness(0.8); /* Adjust the brightness to indicate the button has been clicked */ } \ No newline at end of file diff --git a/module/cain.mjs b/module/cain.mjs index c17e8e1..49676b0 100644 --- a/module/cain.mjs +++ b/module/cain.mjs @@ -126,6 +126,10 @@ Handlebars.registerHelper('set', function(context, key, value, options) { context[key] = value; }); +Handlebars.registerHelper('calcPercentage', function(curr, max) { + return (curr / max) * 100; +}); + /* -------------------------------------------- */ /* Ready Hook */ /* -------------------------------------------- */ @@ -134,7 +138,9 @@ Hooks.once('ready', function () { // Function to create and insert the Talisman button function addPlayerOverviewButton() { - const button = $(''); + if(!game.user.isGM) return; + + const button = $(''); button.on('click', () => { new PlayerOverview().render(true); }); diff --git a/module/data/actor-character.mjs b/module/data/actor-character.mjs index 44d8b6c..0c62e2b 100644 --- a/module/data/actor-character.mjs +++ b/module/data/actor-character.mjs @@ -40,7 +40,7 @@ export default class CainCharacter extends CainActorBase { schema.advancements = new fields.SchemaField({ value: new fields.NumberField({ required: true, initial: 0, max: 4 }), - max: new fields.NumberField({ required: true, initial: 0, max: 4 }), + max: new fields.NumberField({ required: true, initial: 4, max: 4 }), }); schema.scrip = new fields.NumberField({ required: true, initial: 0, min: 0, max: 1000 }); diff --git a/module/documents/player-overview.mjs b/module/documents/player-overview.mjs index e8ae19e..f3beb75 100644 --- a/module/documents/player-overview.mjs +++ b/module/documents/player-overview.mjs @@ -1,33 +1,70 @@ // player-overview.js export class PlayerOverview extends Application { static get defaultOptions() { - return mergeObject(super.defaultOptions, { - id: "player-overview", - template: "systems/cain/templates/player-overview.hbs", - width: 600, - height: 600, - title: "Player Overview", - resizable: true, - }); + return mergeObject(super.defaultOptions, { + id: "player-overview", + template: "systems/cain/templates/player-overview.hbs", + width: 800, + height: 700, + title: "Player Overview", + resizable: true, + }); } - + getData() { - // Fetch all players - const players = game.users.filter(user => !user.isGM); - const playerData = players.map(player => { - const actor = player.character; - return { - name: player.name, - actor: actor ? actor : null, - message: actor ? null : "No actor assigned. Please assign an actor for player overview." - }; - }); - console.log(playerData); - return { playerData }; + // Fetch all players + const players = game.users.filter(user => !user.isGM); + const playerData = players.map(player => { + const actor = player.character; + return { + name: player.name, + actor: actor ? actor : null, + message: actor ? null : "No actor assigned. Please assign an actor for player overview." + }; + }); + console.log(playerData); + return { playerData }; } - + activateListeners(html) { - super.activateListeners(html); - // Add any event listeners if needed + super.activateListeners(html); + // Add any event listeners if needed } - } \ No newline at end of file + + // Add a method to re-render the application + static refresh() { + const app = Object.values(ui.windows).find(w => w instanceof PlayerOverview); + if (app) { + console.log("Found PlayerOverview instance:", app); + + // Save current scroll position and active tab + const scrollPosition = app.element.scrollTop(); + const activeTab = app.element.find('.tab.active').attr('data-tab'); + console.log("Saved scroll position:", scrollPosition); + console.log("Saved active tab:", activeTab); + + // Re-render the application + app.render(true); + + // Restore scroll position and active tab after rendering + Hooks.once('renderPlayerOverview', () => { + console.log("Restoring scroll position and active tab..."); + app.element.scrollTop(scrollPosition); + app.element.find('.tab').removeClass('active'); + app.element.find('.item').removeClass('active'); + app.element.find(`.tab[data-tab="${activeTab}"]`).addClass('active'); + app.element.find(`.item[data-tab="${activeTab}"]`).addClass('active'); + console.log("Restored scroll position:", app.element.scrollTop()); + console.log("Restored active tab:", app.element.find('.tab.active').attr('data-tab')); + }); + } else { + console.log("PlayerOverview instance not found."); + } + } +} + +// Hook to listen for actor updates and refresh the PlayerOverview +Hooks.on("updateActor", () => { + console.log("updateActor hook triggered."); + PlayerOverview.refresh(); +}); \ No newline at end of file diff --git a/templates/player-overview.hbs b/templates/player-overview.hbs index 234adda..ce0c0e7 100644 --- a/templates/player-overview.hbs +++ b/templates/player-overview.hbs @@ -2,25 +2,31 @@ {{!-- Sheet Tab Navigation --}}

{{!-- Sheet Body --}}
-
- {{> "systems/cain/templates/player-overview/overview.hbs" }} -
-
- {{> "systems/cain/templates/player-overview/skills.hbs" }} -
-
- {{> "systems/cain/templates/player-overview/xp.hbs" }} -
-
- {{> "systems/cain/templates/player-overview/talismans.hbs" }} -
+ {{#if playerData.length}} +
+ {{> "systems/cain/templates/player-overview/overview.hbs" }} +
+
+ {{> "systems/cain/templates/player-overview/skills.hbs" }} +
+
+ {{> "systems/cain/templates/player-overview/xp.hbs" }} +
+
+ {{> "systems/cain/templates/player-overview/talismans.hbs" }} +
+ {{else}} +
+

🚀 Please add players and then add exorcist sheets to those players to view their stats. 📜

+
+ {{/if}}
+ + \ No newline at end of file