Skip to content

Commit 1ad0500

Browse files
committed
feat: inline effect clear on ctrl+click
1 parent 9815e76 commit 1ad0500

File tree

1 file changed

+28
-10
lines changed

1 file changed

+28
-10
lines changed

module/helpers/inline-effects.mjs

Lines changed: 28 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -110,22 +110,21 @@ function activateListeners(document, html) {
110110
}
111111

112112
html.find('a.inline.inline-effect[draggable]')
113-
.on('click', async function () {
113+
.on('click', async function (event) {
114114
const source = determineSource(document, this);
115115
const effectData = fromBase64(this.dataset.effect);
116116
const status = this.dataset.status;
117-
let targets = await targetHandler();
118-
if (targets.length > 0) {
117+
const isCtrlClick = event.ctrlKey;
118+
119+
const targets = await targetHandler();
120+
if (!targets.length) return;
121+
targets.forEach((actor) => {
119122
if (effectData) {
120-
targets.forEach((actor) => onApplyEffectToActor(actor, source, effectData));
123+
isCtrlClick ? onRemoveEffectFromActor(actor, source, effectData) : onApplyEffectToActor(actor, source, effectData);
121124
} else if (status) {
122-
targets.forEach((actor) => {
123-
if (!actor.statuses.has(status)) {
124-
toggleStatusEffect(actor, status, source);
125-
}
126-
});
125+
isCtrlClick ? toggleStatusEffect(actor, status, source, { disable: true }) : !actor.statuses.has(status) && toggleStatusEffect(actor, status, source);
127126
}
128-
}
127+
});
129128
})
130129
.on('dragstart', function (event) {
131130
/** @type DragEvent */
@@ -175,6 +174,25 @@ function activateListeners(document, html) {
175174
});
176175
}
177176

177+
function onRemoveEffectFromActor(actor, source, effect) {
178+
if (!actor) return;
179+
180+
const existingEffect = actor.effects.find(
181+
(e) =>
182+
e.getFlag(SYSTEM, FUActiveEffect.TEMPORARY_FLAG) &&
183+
e.origin === source &&
184+
e.changes.length === effect.changes.length &&
185+
e.changes.every((change, index) => change.key === effect.changes[index].key && change.mode === effect.changes[index].mode && change.value === effect.changes[index].value),
186+
);
187+
188+
if (existingEffect) {
189+
console.log(`Removing effect: ${existingEffect.name}`);
190+
existingEffect.delete();
191+
} else {
192+
console.log('No matching effect found to remove.');
193+
}
194+
}
195+
178196
function onApplyEffectToActor(actor, source, effect) {
179197
if (actor) {
180198
ActiveEffect.create(

0 commit comments

Comments
 (0)