Initial
This commit is contained in:
65
resources/app/common/prosemirror/schema/link-mark.mjs
Normal file
65
resources/app/common/prosemirror/schema/link-mark.mjs
Normal file
@@ -0,0 +1,65 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user