Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

node.tsx 1.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import type { EditorConfig, SerializedTextNode } from 'lexical'
  2. import { $createTextNode, TextNode } from 'lexical'
  3. export class CustomTextNode extends TextNode {
  4. static getType() {
  5. return 'custom-text'
  6. }
  7. static clone(node: CustomTextNode) {
  8. return new CustomTextNode(node.__text, node.__key)
  9. }
  10. // constructor(text: string, key?: NodeKey) {
  11. // super(text, key)
  12. // }
  13. createDOM(config: EditorConfig) {
  14. const dom = super.createDOM(config)
  15. return dom
  16. }
  17. static importJSON(serializedNode: SerializedTextNode): TextNode {
  18. const node = $createTextNode(serializedNode.text)
  19. node.setFormat(serializedNode.format)
  20. node.setDetail(serializedNode.detail)
  21. node.setMode(serializedNode.mode)
  22. node.setStyle(serializedNode.style)
  23. return node
  24. }
  25. exportJSON(): SerializedTextNode {
  26. return {
  27. detail: this.getDetail(),
  28. format: this.getFormat(),
  29. mode: this.getMode(),
  30. style: this.getStyle(),
  31. text: this.getTextContent(),
  32. type: 'custom-text',
  33. version: 1,
  34. }
  35. }
  36. isSimpleText() {
  37. return (
  38. (this.__type === 'text' || this.__type === 'custom-text') && this.__mode === 0)
  39. }
  40. }
  41. export function $createCustomTextNode(text: string): CustomTextNode {
  42. return new CustomTextNode(text)
  43. }