angular-rich-text-editor
Version:
A lightweight, configurable rich-text editor component for Angular applications.
67 lines • 6.82 kB
JavaScript
export function safeCleanupFloatingPanels() {
try {
const selectors = [
'rte-floatpanel',
'.rte-floatpanel',
'.rte-floatpanel-paragraphop',
'[class*="rte-float"]',
'[class*="rte-popup"]',
'.rte-toolbar-float',
'.rte-dropdown-panel',
];
selectors.forEach((selector) => {
const elements = document.querySelectorAll(selector);
elements.forEach((element) => {
try {
if (element &&
element.parentNode &&
document.body.contains(element)) {
element.parentNode.removeChild(element);
}
}
catch (e) {
if (element instanceof HTMLElement) {
element.style.display = 'none';
element.style.visibility = 'hidden';
}
}
});
});
cleanupOrphanedElements();
}
catch (error) {
// Silent fail
}
}
export function cleanupOrphanedElements() {
try {
const rteElements = document.querySelectorAll('[id*="rte_"], [class*="rte_"]');
rteElements.forEach((element) => {
try {
if (!document.body.contains(element)) {
element.remove();
}
}
catch (e) {
// Ignore
}
});
}
catch (e) {
// Silent fail
}
}
/**
* Monkey patch Node.prototype.removeChild to avoid NotFoundError
* when removing already-detached DOM elements.
*/
export function patchRemoveChildIfDetached() {
const originalRemoveChild = Node.prototype.removeChild;
Node.prototype.removeChild = function (child) {
if (child && child.parentNode === this) {
return originalRemoveChild.call(this, child);
}
return child;
};
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tLWNsZWFudXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaWNoLXRleHQtZWRpdG9yL3NyYy9saWIvdXRpbHMvZG9tLWNsZWFudXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxVQUFVLHlCQUF5QjtJQUN2QyxJQUFJLENBQUM7UUFDSCxNQUFNLFNBQVMsR0FBRztZQUNoQixnQkFBZ0I7WUFDaEIsaUJBQWlCO1lBQ2pCLDZCQUE2QjtZQUM3QixzQkFBc0I7WUFDdEIsc0JBQXNCO1lBQ3RCLG9CQUFvQjtZQUNwQixxQkFBcUI7U0FDdEIsQ0FBQztRQUVGLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUM3QixNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDckQsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUMzQixJQUFJLENBQUM7b0JBQ0gsSUFDRSxPQUFPO3dCQUNQLE9BQU8sQ0FBQyxVQUFVO3dCQUNsQixRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFDL0IsQ0FBQzt3QkFDRCxPQUFPLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDMUMsQ0FBQztnQkFDSCxDQUFDO2dCQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7b0JBQ1gsSUFBSSxPQUFPLFlBQVksV0FBVyxFQUFFLENBQUM7d0JBQ25DLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQzt3QkFDL0IsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDO29CQUN0QyxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsdUJBQXVCLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLGNBQWM7SUFDaEIsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsdUJBQXVCO0lBQ3JDLElBQUksQ0FBQztRQUNILE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FDM0MsK0JBQStCLENBQ2hDLENBQUM7UUFFRixXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDOUIsSUFBSSxDQUFDO2dCQUNILElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO29CQUNyQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ25CLENBQUM7WUFDSCxDQUFDO1lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDWCxTQUFTO1lBQ1gsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDWCxjQUFjO0lBQ2hCLENBQUM7QUFDSCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLDBCQUEwQjtJQUN4QyxNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDO0lBRXZELElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxHQUFHLFVBQXNCLEtBQVc7UUFDNUQsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLFVBQVUsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUN2QyxPQUFPLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDL0MsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBc0MsQ0FBQztBQUN6QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIHNhZmVDbGVhbnVwRmxvYXRpbmdQYW5lbHMoKTogdm9pZCB7XG4gIHRyeSB7XG4gICAgY29uc3Qgc2VsZWN0b3JzID0gW1xuICAgICAgJ3J0ZS1mbG9hdHBhbmVsJyxcbiAgICAgICcucnRlLWZsb2F0cGFuZWwnLFxuICAgICAgJy5ydGUtZmxvYXRwYW5lbC1wYXJhZ3JhcGhvcCcsXG4gICAgICAnW2NsYXNzKj1cInJ0ZS1mbG9hdFwiXScsXG4gICAgICAnW2NsYXNzKj1cInJ0ZS1wb3B1cFwiXScsXG4gICAgICAnLnJ0ZS10b29sYmFyLWZsb2F0JyxcbiAgICAgICcucnRlLWRyb3Bkb3duLXBhbmVsJyxcbiAgICBdO1xuXG4gICAgc2VsZWN0b3JzLmZvckVhY2goKHNlbGVjdG9yKSA9PiB7XG4gICAgICBjb25zdCBlbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xuICAgICAgZWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGVsZW1lbnQgJiZcbiAgICAgICAgICAgIGVsZW1lbnQucGFyZW50Tm9kZSAmJlxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5jb250YWlucyhlbGVtZW50KVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgZWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsZW1lbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgICAgIGVsZW1lbnQuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBjbGVhbnVwT3JwaGFuZWRFbGVtZW50cygpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIC8vIFNpbGVudCBmYWlsXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFudXBPcnBoYW5lZEVsZW1lbnRzKCk6IHZvaWQge1xuICB0cnkge1xuICAgIGNvbnN0IHJ0ZUVsZW1lbnRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICdbaWQqPVwicnRlX1wiXSwgW2NsYXNzKj1cInJ0ZV9cIl0nXG4gICAgKTtcblxuICAgIHJ0ZUVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghZG9jdW1lbnQuYm9keS5jb250YWlucyhlbGVtZW50KSkge1xuICAgICAgICAgIGVsZW1lbnQucmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gSWdub3JlXG4gICAgICB9XG4gICAgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBTaWxlbnQgZmFpbFxuICB9XG59XG5cbi8qKlxuICogTW9ua2V5IHBhdGNoIE5vZGUucHJvdG90eXBlLnJlbW92ZUNoaWxkIHRvIGF2b2lkIE5vdEZvdW5kRXJyb3JcbiAqIHdoZW4gcmVtb3ZpbmcgYWxyZWFkeS1kZXRhY2hlZCBET00gZWxlbWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXRjaFJlbW92ZUNoaWxkSWZEZXRhY2hlZCgpOiB2b2lkIHtcbiAgY29uc3Qgb3JpZ2luYWxSZW1vdmVDaGlsZCA9IE5vZGUucHJvdG90eXBlLnJlbW92ZUNoaWxkO1xuXG4gIE5vZGUucHJvdG90eXBlLnJlbW92ZUNoaWxkID0gZnVuY3Rpb24gKHRoaXM6IE5vZGUsIGNoaWxkOiBOb2RlKTogTm9kZSB7XG4gICAgaWYgKGNoaWxkICYmIGNoaWxkLnBhcmVudE5vZGUgPT09IHRoaXMpIHtcbiAgICAgIHJldHVybiBvcmlnaW5hbFJlbW92ZUNoaWxkLmNhbGwodGhpcywgY2hpbGQpO1xuICAgIH1cbiAgICByZXR1cm4gY2hpbGQ7XG4gIH0gYXMgdHlwZW9mIE5vZGUucHJvdG90eXBlLnJlbW92ZUNoaWxkO1xufVxuIl19