Files
Foundry-VTT-Docker/resources/app/common/prosemirror/dom-parser.mjs
2025-01-04 00:34:03 +01:00

35 lines
1.1 KiB
JavaScript

import {DOMParser as BaseDOMParser} from "prosemirror-model";
export default class DOMParser extends BaseDOMParser {
/** @inheritdoc */
parse(dom, options) {
this.#unwrapImages(dom);
return super.parse(dom, options);
}
/* -------------------------------------------- */
/**
* Unwrap any image tags that may have been wrapped in <p></p> tags in earlier iterations of the schema.
* @param {HTMLElement} dom The root HTML element to parse.
*/
#unwrapImages(dom) {
dom.querySelectorAll("img").forEach(img => {
const paragraph = img.parentElement;
if ( paragraph?.tagName !== "P" ) return;
const parent = paragraph.parentElement || dom;
parent.insertBefore(img, paragraph);
// If the paragraph element was purely holding the image element and is now empty, we can remove it.
if ( !paragraph.childNodes.length ) paragraph.remove();
});
}
/* -------------------------------------------- */
/** @inheritdoc */
static fromSchema(schema) {
if ( schema.cached.domParser ) return schema.cached.domParser;
return schema.cached.domParser = new this(schema, this.schemaRules(schema));
}
}