mirror of
https://github.com/Foundryborne/daggerheart.git
synced 2026-04-21 23:13:39 +02:00
Merged main
This commit is contained in:
commit
b87e630a0a
84 changed files with 2046 additions and 452 deletions
|
|
@ -68,8 +68,11 @@ export default class DhpChatMessage extends foundry.documents.ChatMessage {
|
|||
document = fromUuidSync(uuid);
|
||||
if (!document) return;
|
||||
|
||||
e.setAttribute('data-view-perm', document.testUserPermission(game.user, 'OBSERVER'));
|
||||
e.setAttribute('data-use-perm', document.testUserPermission(game.user, 'OWNER'));
|
||||
|
||||
const settings = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.Metagaming);
|
||||
if (settings.hideObserverPermissionInChat)
|
||||
e.setAttribute('data-view-perm', document.testUserPermission(game.user, 'OBSERVER'));
|
||||
});
|
||||
|
||||
if (this.isContentVisible) {
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ import { AdversaryBPPerEncounter, BaseBPPerEncounter } from '../config/encounter
|
|||
export default class DhTooltipManager extends foundry.helpers.interaction.TooltipManager {
|
||||
#wide = false;
|
||||
#bordered = false;
|
||||
#active = false;
|
||||
|
||||
async activate(element, options = {}) {
|
||||
const { TextEditor } = foundry.applications.ux;
|
||||
|
|
@ -168,7 +169,100 @@ export default class DhTooltipManager extends foundry.helpers.interaction.Toolti
|
|||
}
|
||||
}
|
||||
|
||||
super.activate(element, { ...options, html: html });
|
||||
this.baseActivate(element, { ...options, html: html });
|
||||
}
|
||||
|
||||
/* Need to pass more options to _setAnchor, so have to copy whole foundry method >_< */
|
||||
async baseActivate(element, options) {
|
||||
let { text, direction, cssClass, locked = false, html, content } = options;
|
||||
if (content && !html) {
|
||||
foundry.utils.logCompatibilityWarning(
|
||||
'The content option has been deprecated in favor of the html option',
|
||||
{ since: 13, until: 15, once: true }
|
||||
);
|
||||
html = content;
|
||||
}
|
||||
if (text && html) throw new Error('Cannot provide both text and html options to TooltipManager#activate.');
|
||||
// Deactivate currently active element
|
||||
this.deactivate();
|
||||
// Check if the element still exists in the DOM.
|
||||
if (!document.body.contains(element)) return;
|
||||
// Mark the new element as active
|
||||
this.#active = true;
|
||||
this.element = element;
|
||||
element.setAttribute('aria-describedby', 'tooltip');
|
||||
html ||= element.dataset.tooltipHtml;
|
||||
if (html) {
|
||||
if (typeof html === 'string') this.tooltip.innerHTML = foundry.utils.cleanHTML(html);
|
||||
else {
|
||||
this.tooltip.innerHTML = ''; // Clear existing HTML
|
||||
this.tooltip.appendChild(html);
|
||||
}
|
||||
} else {
|
||||
text ||= element.dataset.tooltipText;
|
||||
if (text) this.tooltip.textContent = text;
|
||||
else {
|
||||
text = element.dataset.tooltip;
|
||||
// Localized message should be safe
|
||||
if (game.i18n.has(text)) this.tooltip.innerHTML = game.i18n.localize(text);
|
||||
else this.tooltip.innerHTML = foundry.utils.cleanHTML(text);
|
||||
}
|
||||
}
|
||||
|
||||
// Activate display of the tooltip
|
||||
this.tooltip.removeAttribute('class');
|
||||
this.tooltip.classList.add('active', 'themed', 'theme-dark');
|
||||
this.tooltip.showPopover();
|
||||
cssClass ??= element.closest('[data-tooltip-class]')?.dataset.tooltipClass;
|
||||
if (cssClass) this.tooltip.classList.add(...cssClass.split(' '));
|
||||
|
||||
// Set tooltip position
|
||||
direction ??= element.closest('[data-tooltip-direction]')?.dataset.tooltipDirection;
|
||||
if (!direction) direction = this._determineDirection();
|
||||
this._setAnchor(direction, options);
|
||||
|
||||
if (locked || element.dataset.hasOwnProperty('locked')) this.lockTooltip();
|
||||
}
|
||||
|
||||
_setAnchor(direction, options) {
|
||||
const directions = this.constructor.TOOLTIP_DIRECTIONS;
|
||||
const pad = this.constructor.TOOLTIP_MARGIN_PX;
|
||||
const pos = this.element.getBoundingClientRect();
|
||||
|
||||
const { innerHeight, innerWidth } = this.tooltip.ownerDocument.defaultView;
|
||||
const tooltipPadding = 16;
|
||||
const horizontalOffset = options.noOffset ? tooltipPadding : this.tooltip.offsetWidth / 2 - pos.width / 2;
|
||||
const verticalOffset = options.noOffset ? tooltipPadding : this.tooltip.offsetHeight / 2 - pos.height / 2;
|
||||
|
||||
const style = {};
|
||||
switch (direction) {
|
||||
case directions.DOWN:
|
||||
style.textAlign = 'center';
|
||||
style.left = pos.left - horizontalOffset;
|
||||
style.top = pos.bottom + pad;
|
||||
break;
|
||||
case directions.LEFT:
|
||||
style.textAlign = 'left';
|
||||
style.right = innerWidth - pos.left + pad;
|
||||
style.top = pos.top - verticalOffset;
|
||||
break;
|
||||
case directions.RIGHT:
|
||||
style.textAlign = 'right';
|
||||
style.left = pos.right + pad;
|
||||
style.top = pos.top - verticalOffset;
|
||||
break;
|
||||
case directions.UP:
|
||||
style.textAlign = 'center';
|
||||
style.left = pos.left - horizontalOffset;
|
||||
style.bottom = innerHeight - pos.top + pad;
|
||||
break;
|
||||
case directions.CENTER:
|
||||
style.textAlign = 'center';
|
||||
style.left = pos.left - horizontalOffset;
|
||||
style.top = pos.top - verticalOffset;
|
||||
break;
|
||||
}
|
||||
return this._setStyle(style);
|
||||
}
|
||||
|
||||
_determineItemTooltipDirection(element, prefered = this.constructor.TOOLTIP_DIRECTIONS.LEFT) {
|
||||
|
|
@ -270,6 +364,12 @@ export default class DhTooltipManager extends foundry.helpers.interaction.Toolti
|
|||
return clone;
|
||||
}
|
||||
|
||||
/**@inheritdoc */
|
||||
dismissLockedTooltips() {
|
||||
super.dismissLockedTooltips();
|
||||
Hooks.callAll(CONFIG.DH.HOOKS.hooksConfig.lockedTooltipDismissed);
|
||||
}
|
||||
|
||||
/** Get HTML for Battlepoints tooltip */
|
||||
async getBattlepointHTML(combatId) {
|
||||
const combat = game.combats.get(combatId);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue