public static function convertFromRaw(array $rawState) { $fromStorageToLocal = []; if (isset($rawState['entityMap'])) { foreach ($rawState['entityMap'] as $storageKey => $encodedEntity) { $newKey = DraftEntity::create($encodedEntity['type'], $encodedEntity['mutability'], isset($encodedEntity['data']) ? $encodedEntity['data'] : null); $fromStorageToLocal[$storageKey] = $newKey; } } return array_map(function ($block) use($fromStorageToLocal) { $key = isset($block['key']) ? $block['key'] : Keys::generateRandomKey(); $depth = isset($block['depth']) ? $block['depth'] : 0; $inlineStyleRanges = isset($block['inlineStyleRanges']) ? $block['inlineStyleRanges'] : []; $entityRanges = isset($block['entityRanges']) ? $block['entityRanges'] : []; $inlineStyles = Encoding::decodeInlineStyleRanges($block['text'], $inlineStyleRanges); $filteredEntityRanges = array_map(function ($entityRange) use($fromStorageToLocal) { return array_merge($entityRange, ['key' => $fromStorageToLocal[$entityRange['key']]]); }, array_filter($entityRanges, function ($entityRange) use($fromStorageToLocal) { return isset($fromStorageToLocal[$entityRange['key']]); })); $entities = Encoding::decodeEntityRanges($block['text'], $filteredEntityRanges); $characterList = Encoding::createCharacterList($inlineStyles, $entities); return new ContentBlock($key, $block['type'], $block['text'], $characterList, $depth); }, $rawState['blocks']); }
/** * @param string $text * @param string $delimiter * * @return self */ public static function createFromText($text, $delimiter = '/\\r\\n?|\\n/') { $blocks = []; $characterMetadata = new CharacterMetadata(); foreach (preg_split($delimiter, $text) as $string) { $blockKey = Keys::generateRandomKey(); $blocks[$blockKey] = new ContentBlock($blockKey, 'unstyled', $string, array_fill(0, count($blocks), $characterMetadata)); } return self::createFromBlockArray($blocks); }