diff --git a/changelog.md b/changelog.md index 9afc63cb..555c4221 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,10 @@ # Item Piles Changelog +## Version 1.3.1 +- Fixed `ItemPiles.API.turnTokensIntoItemPiles` failing to turn tokens into item piles +- Fixed module throwing errors in v8 regarding the actor sidebar +- Fixed some Item Pile interfaces lacking styling elements in v8 + ## Version 1.3.0 - Added item pile currency and/or item splitting capabilities - Added chat message when currency and/or items are split between players diff --git a/scripts/api.js b/scripts/api.js index c69a93eb..e4056849 100644 --- a/scripts/api.js +++ b/scripts/api.js @@ -186,6 +186,7 @@ export default class API { static async _turnTokensIntoItemPiles(targetUuids, pileSettings = {}, tokenSettings = {}) { const tokenUpdateGroups = {}; + const actorUpdateGroups = {}; const defaults = foundry.utils.duplicate(CONSTANTS.PILE_DEFAULTS); for(const targetUuid of targetUuids) { @@ -196,8 +197,8 @@ export default class API { pileSettings = foundry.utils.mergeObject(existingPileSettings, pileSettings); pileSettings.enabled = true; - const targetItems = lib.getActorItems(target, pileSettings); - const targetCurrencies = lib.getActorCurrencies(target, pileSettings); + const targetItems = lib.getActorItems(target, pileSettings.overrideItemFilters); + const targetCurrencies = lib.getActorCurrencies(target, pileSettings.overrideCurrencies); const data = { data: pileSettings, items: targetItems, currencies: targetCurrencies }; @@ -221,8 +222,17 @@ export default class API { [`actorData.flags.${CONSTANTS.MODULE_NAME}.${CONSTANTS.PILE_DATA}`]: pileSettings }); + if(target.isLinked){ + if(actorUpdateGroups[target.actor.id]) continue; + actorUpdateGroups[target.actor.id] = { + "_id": target.actor.id, + [`flags.${CONSTANTS.MODULE_NAME}.${CONSTANTS.PILE_DATA}`]: pileSettings + } + } } + await Actor.updateDocuments(Object.values(actorUpdateGroups)); + for(const [sceneId, updateData] of Object.entries(tokenUpdateGroups)){ const scene = game.scenes.get(sceneId); await scene.updateEmbeddedDocuments("Token", updateData); @@ -267,6 +277,7 @@ export default class API { */ static async _revertTokensFromItemPiles(targetUuids, tokenSettings) { + const actorUpdateGroups = {}; const tokenUpdateGroups = {}; const defaults = foundry.utils.duplicate(CONSTANTS.PILE_DEFAULTS); @@ -291,8 +302,18 @@ export default class API { [`actorData.flags.${CONSTANTS.MODULE_NAME}.${CONSTANTS.PILE_DATA}`]: pileSettings }); + if(target.isLinked){ + if(actorUpdateGroups[target.actor.id]) continue; + actorUpdateGroups[target.actor.id] = { + "_id": target.actor.id, + [`flags.${CONSTANTS.MODULE_NAME}.${CONSTANTS.PILE_DATA}`]: pileSettings + } + } + } + await Actor.updateDocuments(Object.values(actorUpdateGroups)); + for(const [sceneId, updateData] of Object.entries(tokenUpdateGroups)){ const scene = game.scenes.get(sceneId); await scene.updateEmbeddedDocuments("Token", updateData); diff --git a/scripts/lib/lib.js b/scripts/lib/lib.js index 9385a2fa..5870382f 100644 --- a/scripts/lib/lib.js +++ b/scripts/lib/lib.js @@ -430,9 +430,7 @@ export async function updateItemPileData(target, flagData, tokenData){ return documentActor.update({ [`flags.${CONSTANTS.MODULE_NAME}.${CONSTANTS.PILE_DATA}`]: flagData, - "token": { - [`flags.${CONSTANTS.MODULE_NAME}.${CONSTANTS.PILE_DATA}`]: flagData, - } + [`token.flags.${CONSTANTS.MODULE_NAME}.${CONSTANTS.PILE_DATA}`]: flagData }); } diff --git a/scripts/libwrapper.js b/scripts/libwrapper.js index 5743506d..b32c6ce5 100644 --- a/scripts/libwrapper.js +++ b/scripts/libwrapper.js @@ -2,6 +2,7 @@ import API from "./api.js"; import CONSTANTS from "./constants.js"; import { hotkeyActionState } from "./hotkeys.js"; import { ItemPileInventory } from "./formapplications/itemPileInventory.js"; +import * as lib from "./lib/lib.js"; export function registerLibwrappers() { @@ -12,7 +13,9 @@ export function registerLibwrappers() { return wrapped(...args); }); - libWrapper.register(CONSTANTS.MODULE_NAME, 'SidebarDirectory.prototype._onClickDocumentName', function (wrapped, event) { + const actorSidebarMethodName = lib.isVersion9() ? "_onClickDocumentName" : "_onClickEntityName"; + + libWrapper.register(CONSTANTS.MODULE_NAME, `SidebarDirectory.prototype.${actorSidebarMethodName}`, function (wrapped, event) { event.preventDefault(); const element = event.currentTarget; diff --git a/styles/module.css b/styles/module.css index 57d4aeac..d9d215ea 100644 --- a/styles/module.css +++ b/styles/module.css @@ -14,7 +14,7 @@ cursor: move; } .item-piles-highlight { - color: var(--color-text-hyperlink); + color: var(--color-text-hyperlink, #ff6400); text-decoration: underline; } .item-piles-grow { @@ -50,7 +50,7 @@ transform: scale(1.125, 1.125); } .item-piles-odd-color:nth-child(even) { - background-color: var(--color-text-light-highlight); + background-color: var(--color-text-light-highlight, #f0f0e0); } .item-piles-bottom-divider { border-bottom: 1px solid rgba(0, 0, 0, 0.35); @@ -58,7 +58,7 @@ padding-bottom: 0.5rem; } .item-piles-disabled { - background-color: var(--color-bg-btn-minor-inactive); + background-color: var(--color-bg-btn-minor-inactive, #c9c7b8); } .item-piles-slider-group { @@ -98,10 +98,10 @@ border-radius: 4px; } .item-piles-inventory-sheet .item-piles-items .item-piles-item-row:nth-child(even):not(.item-piles-disabled) { - background-color: var(--color-text-light-highlight); + background-color: var(--color-text-light-highlight, #f0f0e0); } .item-piles-inventory-sheet .item-piles-items .item-piles-item-row .item-piles-disabled { - background-color: var(--color-bg-btn-minor-inactive); + background-color: var(--color-bg-btn-minor-inactive, #c9c7b8); } .item-piles-inventory-sheet .item-piles-items .item-piles-item-row div { display: inline-flex; @@ -165,7 +165,7 @@ .item-piles-config .item-piles-config-container .sheet-navigation { margin-bottom: 0.5rem; padding-bottom: 0.5rem; - border-bottom: 1px solid var(--color-border-light-primary); + border-bottom: 1px solid var(--color-border-light-primary, #b5b3a4); } .item-piles-config .item-piles-config-container .item-piles-sections { padding: 0.25rem; @@ -179,12 +179,12 @@ color: var(--color-text-dark-secondary); padding-right: 1rem; margin-top: 0; - overflow-y: scroll; + overflow-y: hidden; } .item-piles-config .item-piles-config-container .item-piles-collapsible:not(:last-child) { margin-bottom: 0.75rem; padding-bottom: 0.75rem; - border-bottom: 1px solid var(--color-border-light-primary); + border-bottom: 1px solid var(--color-border-light-primary, #b5b3a4); } .item-piles-config .item-piles-config-container .item-piles-collapsible > summary { display: block; @@ -208,7 +208,7 @@ .item-piles-config .item-piles-config-container footer { margin-top: 0.5rem; padding-top: 0.5rem; - border-top: 1px solid var(--color-border-light-primary); + border-top: 1px solid var(--color-border-light-primary, #b5b3a4); } /* ---------------------- CHAT CARDS ---------------------- */ @@ -244,7 +244,7 @@ align-items: center; } .item-piles-chat-card li:nth-child(odd) { - background-color: var(--color-text-light-highlight); + background-color: var(--color-text-light-highlight, #f0f0e0); } .item-piles-chat-card li img { margin-right: 5px; diff --git a/styles/module.scss b/styles/module.scss index 3e6bc282..24bd4b40 100644 --- a/styles/module.scss +++ b/styles/module.scss @@ -21,7 +21,7 @@ } &-highlight { - color: var(--color-text-hyperlink); + color: var(--color-text-hyperlink, #ff6400); text-decoration: underline; } @@ -68,7 +68,7 @@ } &-odd-color:nth-child(even) { - background-color: var(--color-text-light-highlight); + background-color: var(--color-text-light-highlight, #f0f0e0); } &-bottom-divider{ @@ -78,7 +78,7 @@ } &-disabled { - background-color: var(--color-bg-btn-minor-inactive) + background-color: var(--color-bg-btn-minor-inactive, #c9c7b8) } } @@ -127,11 +127,11 @@ border-radius: 4px; &:nth-child(even):not(.item-piles-disabled) { - background-color: var(--color-text-light-highlight); + background-color: var(--color-text-light-highlight, #f0f0e0); } .item-piles-disabled { - background-color: var(--color-bg-btn-minor-inactive) + background-color: var(--color-bg-btn-minor-inactive, #c9c7b8) } div { @@ -211,7 +211,7 @@ .sheet-navigation { margin-bottom: 0.5rem; padding-bottom: 0.5rem; - border-bottom: 1px solid var(--color-border-light-primary); + border-bottom: 1px solid var(--color-border-light-primary, #b5b3a4); } .item-piles-sections { @@ -227,7 +227,7 @@ color: var(--color-text-dark-secondary); padding-right: 1rem; margin-top: 0; - overflow-y: scroll; + overflow-y: hidden; } .item-piles-collapsible { @@ -235,7 +235,7 @@ &:not(:last-child) { margin-bottom: 0.75rem; padding-bottom: 0.75rem; - border-bottom: 1px solid var(--color-border-light-primary); + border-bottom: 1px solid var(--color-border-light-primary, #b5b3a4); } & > summary { @@ -265,7 +265,7 @@ footer { margin-top: 0.5rem; padding-top: 0.5rem; - border-top: 1px solid var(--color-border-light-primary); + border-top: 1px solid var(--color-border-light-primary, #b5b3a4); } } @@ -312,7 +312,7 @@ align-items: center; &:nth-child(odd) { - background-color: var(--color-text-light-highlight); + background-color: var(--color-text-light-highlight, #f0f0e0); } img {