@20minutes/draft-convert
Version:
Extensibly serialize & deserialize Draft.js ContentState
41 lines (40 loc) • 1.2 kB
JavaScript
import rangeSort from './util/rangeSort.mjs';
import updateMutation from './util/updateMutation.mjs';
const ENTITY_MAP = {
'&': '&',
'<': '<',
'>': '>',
'"': '"',
"'": ''',
'`': '`',
'\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
};
});