UNPKG

@20minutes/draft-convert

Version:

Extensibly serialize & deserialize Draft.js ContentState

41 lines (40 loc) 1.2 kB
import rangeSort from './util/rangeSort.mjs'; import updateMutation from './util/updateMutation.mjs'; const ENTITY_MAP = { '&': '&amp;', '<': '&lt;', '>': '&gt;', '"': '&quot;', "'": '&#x27;', '`': '&#x60;', '\n': '<br/>' }; export default ((block)=>{ const blockText = [ ...block.text ]; let entities = block.entityRanges.sort(rangeSort); let styles = block.inlineStyleRanges.sort(rangeSort); let resultText = ''; for(let index = 0; index < blockText.length; index += 1){ const char = blockText[index]; if (ENTITY_MAP[char] !== undefined) { const encoded = ENTITY_MAP[char]; const resultIndex = [ ...resultText ].length; resultText += encoded; const updateForChar = (mutation)=>updateMutation(mutation, resultIndex, char.length, encoded.length, 0, 0); entities = entities.map(updateForChar); styles = styles.map(updateForChar); } else { resultText += char; } } return { ...block, text: resultText, inlineStyleRanges: styles, entityRanges: entities }; });