angular-rich-text-editor
Version:
A lightweight, configurable rich-text editor component for Angular applications.
33 lines • 4.62 kB
JavaScript
export function hasRequiredValidator(control) {
if (!control || !control.validator)
return false;
const result = control.validator({ value: null });
return !!(result && result['required']);
}
/**
* Enhanced empty check that considers images and media as content
*/
export function isTrulyEmpty(html) {
if (!html || html.trim() === '')
return true;
const div = document.createElement('div');
div.innerHTML = html;
const hasImages = div.querySelectorAll('img').length > 0;
if (hasImages)
return false;
const hasVideos = div.querySelectorAll('video, iframe').length > 0;
if (hasVideos)
return false;
const hasEmbeds = div.querySelectorAll('embed, object, audio').length > 0;
if (hasEmbeds)
return false;
const text = div.textContent?.replace(/\u00A0/g, '').trim() || '';
const cleaned = div.innerHTML
.replace(/<br\s*\/?>/gi, '')
.replace(/<div>(\s| )*<\/div>/gi, '')
.replace(/<p>(\s| )*<\/p>/gi, '')
.replace(/ /gi, '')
.trim();
return !text && cleaned.length === 0;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JpY2gtdGV4dC1lZGl0b3Ivc3JjL2xpYi91dGlscy92YWxpZGF0aW9uLXV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxPQUErQjtJQUNsRSxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVM7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUNqRCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBcUIsQ0FBQyxDQUFDO0lBQ3JFLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0FBQzFDLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQUMsSUFBWTtJQUN2QyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFFN0MsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQyxHQUFHLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztJQUVyQixNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUN6RCxJQUFJLFNBQVM7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUU1QixNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNuRSxJQUFJLFNBQVM7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUU1QixNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQzFFLElBQUksU0FBUztRQUFFLE9BQU8sS0FBSyxDQUFDO0lBRTVCLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFFbEUsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLFNBQVM7U0FDMUIsT0FBTyxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUM7U0FDM0IsT0FBTyxDQUFDLDRCQUE0QixFQUFFLEVBQUUsQ0FBQztTQUN6QyxPQUFPLENBQUMsd0JBQXdCLEVBQUUsRUFBRSxDQUFDO1NBQ3JDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO1NBQ3ZCLElBQUksRUFBRSxDQUFDO0lBRVYsT0FBTyxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztBQUN2QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gaGFzUmVxdWlyZWRWYWxpZGF0b3IoY29udHJvbDogQWJzdHJhY3RDb250cm9sIHwgbnVsbCk6IGJvb2xlYW4ge1xuICBpZiAoIWNvbnRyb2wgfHwgIWNvbnRyb2wudmFsaWRhdG9yKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IHJlc3VsdCA9IGNvbnRyb2wudmFsaWRhdG9yKHsgdmFsdWU6IG51bGwgfSBhcyBBYnN0cmFjdENvbnRyb2wpO1xuICByZXR1cm4gISEocmVzdWx0ICYmIHJlc3VsdFsncmVxdWlyZWQnXSk7XG59XG5cbi8qKlxuICogRW5oYW5jZWQgZW1wdHkgY2hlY2sgdGhhdCBjb25zaWRlcnMgaW1hZ2VzIGFuZCBtZWRpYSBhcyBjb250ZW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1RydWx5RW1wdHkoaHRtbDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGlmICghaHRtbCB8fCBodG1sLnRyaW0oKSA9PT0gJycpIHJldHVybiB0cnVlO1xuXG4gIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBkaXYuaW5uZXJIVE1MID0gaHRtbDtcblxuICBjb25zdCBoYXNJbWFnZXMgPSBkaXYucXVlcnlTZWxlY3RvckFsbCgnaW1nJykubGVuZ3RoID4gMDtcbiAgaWYgKGhhc0ltYWdlcykgcmV0dXJuIGZhbHNlO1xuXG4gIGNvbnN0IGhhc1ZpZGVvcyA9IGRpdi5xdWVyeVNlbGVjdG9yQWxsKCd2aWRlbywgaWZyYW1lJykubGVuZ3RoID4gMDtcbiAgaWYgKGhhc1ZpZGVvcykgcmV0dXJuIGZhbHNlO1xuXG4gIGNvbnN0IGhhc0VtYmVkcyA9IGRpdi5xdWVyeVNlbGVjdG9yQWxsKCdlbWJlZCwgb2JqZWN0LCBhdWRpbycpLmxlbmd0aCA+IDA7XG4gIGlmIChoYXNFbWJlZHMpIHJldHVybiBmYWxzZTtcblxuICBjb25zdCB0ZXh0ID0gZGl2LnRleHRDb250ZW50Py5yZXBsYWNlKC9cXHUwMEEwL2csICcnKS50cmltKCkgfHwgJyc7XG5cbiAgY29uc3QgY2xlYW5lZCA9IGRpdi5pbm5lckhUTUxcbiAgICAucmVwbGFjZSgvPGJyXFxzKlxcLz8+L2dpLCAnJylcbiAgICAucmVwbGFjZSgvPGRpdj4oXFxzfCZuYnNwOykqPFxcL2Rpdj4vZ2ksICcnKVxuICAgIC5yZXBsYWNlKC88cD4oXFxzfCZuYnNwOykqPFxcL3A+L2dpLCAnJylcbiAgICAucmVwbGFjZSgvJm5ic3A7L2dpLCAnJylcbiAgICAudHJpbSgpO1xuXG4gIHJldHVybiAhdGV4dCAmJiBjbGVhbmVkLmxlbmd0aCA9PT0gMDtcbn1cbiJdfQ==