UNPKG

@zodiac-ui/editor

Version:

A rich text editor for Angular based on `@atlaskit/editor-core`.

50 lines 7.73 kB
function isContentSupported(nodes, contentKey) { const nodeKeys = Object.keys(nodes); // content is with valid node if (nodeKeys.indexOf(contentKey) > -1) { return true; } // content is with valid group // tslint:disable-next-line for (const supportedKey in nodes) { const nodeSpec = nodes[supportedKey]; if (nodeSpec && nodeSpec.group === contentKey) { return true; } } return false; } function sanitizedContent(content, invalidContent) { if (!invalidContent.length) { return content || ''; } if (!content || !content.match(/\w/)) { return ''; } const newContent = content .replace(new RegExp(`(${invalidContent}((\\s)*\\|)+)|((\\|(\\s)*)+${invalidContent})|(${invalidContent}$)`, 'g'), '') .replace(' ', ' ') .trim(); return newContent; } export function sanitizeNodes(nodes, supportedMarks) { const nodeNames = Object.keys(nodes); nodeNames.forEach(nodeKey => { const nodeSpec = Object.assign({}, nodes[nodeKey]); if (nodeSpec.marks && nodeSpec.marks !== '_') { nodeSpec.marks = nodeSpec.marks .split(' ') .filter(mark => !!supportedMarks[mark]) .join(' '); } if (nodeSpec.content) { const content = nodeSpec.content.replace(/\W/g, ' '); const contentKeys = content.split(' '); const unsupportedContentKeys = contentKeys.filter(contentKey => !isContentSupported(nodes, contentKey)); nodeSpec.content = unsupportedContentKeys.reduce((newContent, nodeName) => sanitizedContent(newContent, nodeName), nodeSpec.content); } nodes[nodeKey] = nodeSpec; }); return nodes; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FuaXRpemUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Aem9kaWFjLXVpL2VkaXRvci8iLCJzb3VyY2VzIjpbImxpYi91dGlscy9zYW5pdGl6ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxTQUFTLGtCQUFrQixDQUN2QixLQUFrQyxFQUNsQyxVQUFrQjtJQUVsQixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXBDLDZCQUE2QjtJQUM3QixJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7UUFDbkMsT0FBTyxJQUFJLENBQUM7S0FDZjtJQUVELDhCQUE4QjtJQUM5QiwyQkFBMkI7SUFDM0IsS0FBSyxNQUFNLFlBQVksSUFBSSxLQUFLLEVBQUU7UUFDOUIsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3JDLElBQUksUUFBUSxJQUFJLFFBQVEsQ0FBQyxLQUFLLEtBQUssVUFBVSxFQUFFO1lBQzNDLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7S0FDSjtJQUVELE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUM7QUFFRCxTQUFTLGdCQUFnQixDQUNyQixPQUEyQixFQUMzQixjQUFzQjtJQUV0QixJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRTtRQUN4QixPQUFPLE9BQU8sSUFBSSxFQUFFLENBQUM7S0FDeEI7SUFFRCxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUNsQyxPQUFPLEVBQUUsQ0FBQztLQUNiO0lBRUQsTUFBTSxVQUFVLEdBQUcsT0FBTztTQUNyQixPQUFPLENBQ0osSUFBSSxNQUFNLENBQ04sSUFBSSxjQUFjLDhCQUE4QixjQUFjLE1BQU0sY0FBYyxJQUFJLEVBQ3RGLEdBQUcsQ0FDTixFQUNELEVBQUUsQ0FDTDtTQUNBLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDO1NBQ2xCLElBQUksRUFBRSxDQUFDO0lBRVosT0FBTyxVQUFVLENBQUM7QUFDdEIsQ0FBQztBQUVELE1BQU0sVUFBVSxhQUFhLENBQ3pCLEtBQWtDLEVBQ2xDLGNBQTJDO0lBRTNDLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDckMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUN4QixNQUFNLFFBQVEscUJBQVEsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFFLENBQUM7UUFDdkMsSUFBSSxRQUFRLENBQUMsS0FBSyxJQUFJLFFBQVEsQ0FBQyxLQUFLLEtBQUssR0FBRyxFQUFFO1lBQzFDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUs7aUJBQzFCLEtBQUssQ0FBQyxHQUFHLENBQUM7aUJBQ1YsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDdEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ2xCO1FBQ0QsSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFO1lBQ2xCLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNyRCxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZDLE1BQU0sc0JBQXNCLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FDN0MsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FDdkQsQ0FBQztZQUNGLFFBQVEsQ0FBQyxPQUFPLEdBQUcsc0JBQXNCLENBQUMsTUFBTSxDQUM1QyxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFDaEUsUUFBUSxDQUFDLE9BQU8sQ0FDbkIsQ0FBQztTQUNMO1FBQ0QsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLFFBQVEsQ0FBQztJQUM5QixDQUFDLENBQUMsQ0FBQztJQUNILE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNYXJrU3BlYywgTm9kZVNwZWMgfSBmcm9tIFwicHJvc2VtaXJyb3ItbW9kZWxcIlxyXG5cclxuZnVuY3Rpb24gaXNDb250ZW50U3VwcG9ydGVkKFxyXG4gICAgbm9kZXM6IHsgW2tleTogc3RyaW5nXTogTm9kZVNwZWMgfSxcclxuICAgIGNvbnRlbnRLZXk6IHN0cmluZyxcclxuKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBub2RlS2V5cyA9IE9iamVjdC5rZXlzKG5vZGVzKTtcclxuXHJcbiAgICAvLyBjb250ZW50IGlzIHdpdGggdmFsaWQgbm9kZVxyXG4gICAgaWYgKG5vZGVLZXlzLmluZGV4T2YoY29udGVudEtleSkgPiAtMSkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGNvbnRlbnQgaXMgd2l0aCB2YWxpZCBncm91cFxyXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lXHJcbiAgICBmb3IgKGNvbnN0IHN1cHBvcnRlZEtleSBpbiBub2Rlcykge1xyXG4gICAgICAgIGNvbnN0IG5vZGVTcGVjID0gbm9kZXNbc3VwcG9ydGVkS2V5XTtcclxuICAgICAgICBpZiAobm9kZVNwZWMgJiYgbm9kZVNwZWMuZ3JvdXAgPT09IGNvbnRlbnRLZXkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxufVxyXG5cclxuZnVuY3Rpb24gc2FuaXRpemVkQ29udGVudChcclxuICAgIGNvbnRlbnQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcclxuICAgIGludmFsaWRDb250ZW50OiBzdHJpbmcsXHJcbik6IHN0cmluZyB7XHJcbiAgICBpZiAoIWludmFsaWRDb250ZW50Lmxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybiBjb250ZW50IHx8ICcnO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghY29udGVudCB8fCAhY29udGVudC5tYXRjaCgvXFx3LykpIHtcclxuICAgICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbmV3Q29udGVudCA9IGNvbnRlbnRcclxuICAgICAgICAucmVwbGFjZShcclxuICAgICAgICAgICAgbmV3IFJlZ0V4cChcclxuICAgICAgICAgICAgICAgIGAoJHtpbnZhbGlkQ29udGVudH0oKFxcXFxzKSpcXFxcfCkrKXwoKFxcXFx8KFxcXFxzKSopKyR7aW52YWxpZENvbnRlbnR9KXwoJHtpbnZhbGlkQ29udGVudH0kKWAsXHJcbiAgICAgICAgICAgICAgICAnZycsXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICcnLFxyXG4gICAgICAgIClcclxuICAgICAgICAucmVwbGFjZSgnICAnLCAnICcpXHJcbiAgICAgICAgLnRyaW0oKTtcclxuXHJcbiAgICByZXR1cm4gbmV3Q29udGVudDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNhbml0aXplTm9kZXMoXHJcbiAgICBub2RlczogeyBba2V5OiBzdHJpbmddOiBOb2RlU3BlYyB9LFxyXG4gICAgc3VwcG9ydGVkTWFya3M6IHsgW2tleTogc3RyaW5nXTogTWFya1NwZWMgfSxcclxuKTogeyBba2V5OiBzdHJpbmddOiBOb2RlU3BlYyB9IHtcclxuICAgIGNvbnN0IG5vZGVOYW1lcyA9IE9iamVjdC5rZXlzKG5vZGVzKTtcclxuICAgIG5vZGVOYW1lcy5mb3JFYWNoKG5vZGVLZXkgPT4ge1xyXG4gICAgICAgIGNvbnN0IG5vZGVTcGVjID0geyAuLi5ub2Rlc1tub2RlS2V5XSB9O1xyXG4gICAgICAgIGlmIChub2RlU3BlYy5tYXJrcyAmJiBub2RlU3BlYy5tYXJrcyAhPT0gJ18nKSB7XHJcbiAgICAgICAgICAgIG5vZGVTcGVjLm1hcmtzID0gbm9kZVNwZWMubWFya3NcclxuICAgICAgICAgICAgICAgIC5zcGxpdCgnICcpXHJcbiAgICAgICAgICAgICAgICAuZmlsdGVyKG1hcmsgPT4gISFzdXBwb3J0ZWRNYXJrc1ttYXJrXSlcclxuICAgICAgICAgICAgICAgIC5qb2luKCcgJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChub2RlU3BlYy5jb250ZW50KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSBub2RlU3BlYy5jb250ZW50LnJlcGxhY2UoL1xcVy9nLCAnICcpO1xyXG4gICAgICAgICAgICBjb25zdCBjb250ZW50S2V5cyA9IGNvbnRlbnQuc3BsaXQoJyAnKTtcclxuICAgICAgICAgICAgY29uc3QgdW5zdXBwb3J0ZWRDb250ZW50S2V5cyA9IGNvbnRlbnRLZXlzLmZpbHRlcihcclxuICAgICAgICAgICAgICAgIGNvbnRlbnRLZXkgPT4gIWlzQ29udGVudFN1cHBvcnRlZChub2RlcywgY29udGVudEtleSksXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIG5vZGVTcGVjLmNvbnRlbnQgPSB1bnN1cHBvcnRlZENvbnRlbnRLZXlzLnJlZHVjZShcclxuICAgICAgICAgICAgICAgIChuZXdDb250ZW50LCBub2RlTmFtZSkgPT4gc2FuaXRpemVkQ29udGVudChuZXdDb250ZW50LCBub2RlTmFtZSksXHJcbiAgICAgICAgICAgICAgICBub2RlU3BlYy5jb250ZW50LFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBub2Rlc1tub2RlS2V5XSA9IG5vZGVTcGVjO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gbm9kZXM7XHJcbn1cclxuIl19