75 $this->contextFactory = $context_factory;
76 $this->dataCompiler = $data_compiler;
82 public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
84 $container->get(
'paragraphs_editor.field_value.manager'),
85 $container->get(
'paragraphs_editor.command.context_factory'),
86 $container->get(
'paragraphs_editor.widget_binder.data_compiler')
93 public function process(SemanticDataInterface $data, DomProcessorResultInterface $result) {
94 if ($data->has(
'preparer.ready')) {
95 if ($data->is($this->getSelector(
'widget'))) {
96 $paragraph = $data->get(
'paragraph.entity');
97 $field_context_id = $data->get(
'field.context_id');
98 $this->
expandParagraph($data, $data->node(), $paragraph, $field_context_id);
101 elseif ($data->isRoot()) {
105 elseif ($data->isRoot()) {
123 protected function generateOwnerInfo(SemanticDataInterface $data, DomProcessorResultInterface $result) {
124 $data = $data->tag(
'preparer', [
128 $field_value_wrapper = $data->get(
'field.wrapper');
129 $data = $data->tag(
'filter_format', $field_value_wrapper->getFormat());
132 $field_definition = $data->get(
'field.items')->getFieldDefinition();
133 $owner_entity = $data->get(
'owner.entity');
134 $settings = $data->get(
'settings');
135 $context = $this->contextFactory->create($field_definition->id(), $owner_entity->id(), $settings);
138 $widget_data->addModel(
'context', $context->getContextString(), [
139 'id' => $context->getContextString(),
140 'schemaId' => $field_definition->id(),
141 'settings' => $settings,
144 $widget_data->addModel(
'schema', $field_definition->id(), [
145 'id' => $field_definition->id(),
147 'paragraphs_editor_text' => TRUE,
151 $this->widgetData = $widget_data;
152 $data = $data->tag(
'field', [
153 'context_id' => $context->getContextString(),
155 $data = $data->tag(
'root_context', $context->getContextString());
157 return $result->reprocess($data);
177 protected function expandParagraph(SemanticDataInterface $data, \DOMElement $paragraph_node, ParagraphInterface $entity, $field_context_id = NULL) {
179 if (!empty($field_context_id)) {
180 $this->
setAttribute($paragraph_node,
'widget',
'<context>', $field_context_id);
182 $prerender_count = $data->get(
'settings.prerender_count');
183 if ($prerender_count > -1 && $this->count < $prerender_count) {
188 foreach ($entity->getFields() as $items) {
189 $field_definition = $items->getFieldDefinition();
191 if ($this->fieldValueManager->isParagraphsField($field_definition)) {
195 $field_node = $this->
createElement($paragraph_node->ownerDocument,
'field', [
196 '<name>' => $field_definition->getName(),
199 if ($this->fieldValueManager->isParagraphsEditorField($field_definition)) {
201 $context_id = $this->widgetData->getContextId($entity->uuid(), $field_definition->id());
206 $this->
setAttribute($field_node,
'field',
'<editable>',
'true');
207 $this->
setAttribute($field_node,
'field',
'<context>', $context_id);
209 $referenced_entities = $this->fieldValueManager->wrapItems($items)->getReferencedEntities();
212 $referenced_entities = $this->fieldValueManager->getReferencedEntities($items);
215 foreach ($referenced_entities as $child_entity) {
216 $child_paragraph_node = $this->
createElement($field_node->ownerDocument,
'widget', [
217 '<uuid>' => $child_entity->uuid(),
220 $field_node->appendChild($child_paragraph_node);
222 $paragraph_node->appendChild($field_node);
237 protected function compileParagraph(SemanticDataInterface $data, ParagraphInterface $entity, $field_context_id) {
238 $context = $this->contextFactory->get($field_context_id);
239 $context->addAdditionalContext(
'editorContext', $data->get(
'root_context'));
240 $item = $context->getEditBuffer()->createItem($entity);
241 $view_mode = $data->get(
'settings.view_mode');
242 $langcode = $data->get(
'langcode');
243 $this->widgetData = $this->widgetData->merge($this->dataCompiler->compile($context, $item, $view_mode, $langcode));
259 protected function finishResult(SemanticDataInterface $data, DomProcessorResultInterface $result) {
260 $field_value_wrapper = $data->get(
'field.wrapper');
263 $result = $result->merge([
265 'paragraphs_editor/core',
270 $result = $result->merge([
273 'class' =>
'paragraphs-editor',
275 $this->fieldValueManager->getAttributeName(
'field',
'<context>') => $data->get(
'field.context_id'),
279 $result = $result->merge([
280 'context_id' => $data->get(
'field.context_id'),
283 $result = $result->merge([
284 'drupalSettings' => [
285 'paragraphs_editor' => $this->widgetData->toArray(),
289 $result = $result->merge([
290 'filter_format' => $field_value_wrapper->getFormat(),
static ensureEntityReferenceRevisions(FieldItemListInterface $items)
static create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition)
process(SemanticDataInterface $data, DomProcessorResultInterface $result)
setAttribute(\DOMNode $node, $element_name, $attribute_name, $value)
compileParagraph(SemanticDataInterface $data, ParagraphInterface $entity, $field_context_id)
expandParagraph(SemanticDataInterface $data,\DOMElement $paragraph_node, ParagraphInterface $entity, $field_context_id=NULL)
generateOwnerInfo(SemanticDataInterface $data, DomProcessorResultInterface $result)
trait ParagraphsEditorElementTrait
static ensureFieldConfig(FieldDefinitionInterface $field_definition=NULL)
__construct(FieldValueManagerInterface $field_value_manager, CommandContextFactoryInterface $context_factory, WidgetBinderDataCompilerInterface $data_compiler)
finishResult(SemanticDataInterface $data, DomProcessorResultInterface $result)
initializeParagraphsEditorElementTrait(FieldValueManagerInterface $field_value_manager)
createElement(\DOMDocument $document, $element_name, array $attributes=[])