lsx.ts 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. import { RemarkGrowiPluginType } from '@growi/remark-growi-plugin';
  2. import { Schema as SanitizeOption } from 'hast-util-sanitize';
  3. import { Plugin } from 'unified';
  4. import { visit } from 'unist-util-visit';
  5. const NODE_NAME_PATTERN = new RegExp(/ls|lsx/);
  6. type DirectiveAttributes = Record<string, string>
  7. export const remarkPlugin: Plugin = function() {
  8. return (tree) => {
  9. visit(tree, (node) => {
  10. if (node.type === RemarkGrowiPluginType.Text || node.type === RemarkGrowiPluginType.Leaf) {
  11. if (typeof node.name !== 'string') {
  12. return;
  13. }
  14. if (!NODE_NAME_PATTERN.test(node.name)) {
  15. return;
  16. }
  17. const data = node.data ?? (node.data = {});
  18. const attributes = node.attributes as DirectiveAttributes || {};
  19. data.hName = 'lsx';
  20. data.hProperties = attributes;
  21. }
  22. });
  23. };
  24. };
  25. export const sanitizeOption: SanitizeOption = {
  26. tagNames: ['lsx'],
  27. attributes: {
  28. lsx: ['prefix', 'num', 'depth', 'sort', 'reverse', 'filter'],
  29. },
  30. };