Files
Foundry-VTT-Docker/resources/app/common/prosemirror/schema/link-mark.mjs

66 lines
1.9 KiB
JavaScript
Raw Normal View History

2025-01-04 00:34:03 +01:00
import SchemaDefinition from "./schema-definition.mjs";
import {mergeObject} from "../../utils/helpers.mjs";
/**
* A class responsible for encapsulating logic around link marks in the ProseMirror schema.
* @extends {SchemaDefinition}
*/
export default class LinkMark extends SchemaDefinition {
/** @override */
static tag = "a";
/* -------------------------------------------- */
/** @override */
static get attrs() {
return {
href: { default: null },
title: { default: null }
}
}
/* -------------------------------------------- */
/** @override */
static getAttrs(el) {
if ( (el.children.length === 1) && (el.children[0]?.tagName === "IMG") ) return false;
return { href: el.href, title: el.title };
}
/* -------------------------------------------- */
/** @override */
static toDOM(node) {
const { href, title } = node.attrs;
const attrs = {};
if ( href ) attrs.href = href;
if ( title ) attrs.title = title;
return ["a", attrs];
}
/* -------------------------------------------- */
/** @inheritdoc */
static make() {
return mergeObject(super.make(), {
inclusive: false
});
}
/* -------------------------------------------- */
/**
* Handle clicks on link marks while editing.
* @param {EditorView} view The ProseMirror editor view.
* @param {number} pos The position in the ProseMirror document that the click occurred at.
* @param {PointerEvent} event The click event.
* @param {Mark} mark The Mark instance.
* @returns {boolean|void} Returns true to indicate the click was handled here and should not be propagated to
* other plugins.
*/
static onClick(view, pos, event, mark) {
if ( (event.ctrlKey || event.metaKey) && mark.attrs.href ) window.open(mark.attrs.href, "_blank");
return true;
}
}