Loading config/schema/custom_elements.schema.yml 0 → 100644 +34 −0 Original line number Diff line number Diff line core.entity_view_display.*.*.*.third_party_settings.custom_elements: type: mapping label: 'Per-view-mode Custom elements settings' mapping: enabled: type: boolean label: 'Whether the custom elements rendering is enabled for view display mode' custom_element_name: type: string label: 'Custom element name' custom_element_fields: type: sequence sequence: type: custom_elements.field custom_elements.field: type: mapping label: 'Custom element field ' mapping: label: type: string label: 'Custom element name' is_slot: type: bool label: 'is Slot' type: type: string label: 'Custom element renderer' weight: type: integer label: 'Weight' region: type: string label: 'Region' custom_elements.module +1 −1 Original line number Diff line number Diff line Loading @@ -183,7 +183,7 @@ function custom_elements_module_implements_alter(&$implementations, $hook) { function custom_elements_entity_view_display_alter(EntityViewDisplayInterface $display, array $context) { // Enable for all view-modes named appropriately by default. if (strpos($context['view_mode'], 'custom_elements') === 0) { $display->setThirdPartySetting('custom_elements', 'enabled', 1); $display->setThirdPartySetting('custom_elements', 'enabled', TRUE); } } Loading modules/custom_elements_everywhere/custom_elements_everywhere.module +1 −1 Original line number Diff line number Diff line Loading @@ -16,7 +16,7 @@ function custom_elements_everywhere_entity_prepare_view($entity_type_id, array $ // such that custom elements processor may use it to render // individual fields. foreach ($displays as $display) { $display->setThirdPartySetting('custom_elements', 'enabled', 1); $display->setThirdPartySetting('custom_elements', 'enabled', TRUE); } } } modules/custom_elements_ui/custom_elements_ui.info.yml 0 → 100644 +7 −0 Original line number Diff line number Diff line name: Custom Elements UI description: 'Provides a user interface for the Custom Elements module.' package: Other type: module core_version_requirement: ^9 dependencies: - custom_elements:custom_elements modules/custom_elements_ui/custom_elements_ui.module 0 → 100644 +86 −0 Original line number Diff line number Diff line <?php /** * @file * Provides hook implementations for Custom Elements UI. */ use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Url; use Drupal\custom_elements_ui\Form\EntityCustomElementsDisplayForm; use Drupal\field_ui\FieldUI; /** * Implements hook_entity_type_alter(). */ function custom_elements_ui_entity_type_alter(array &$entity_types) { /** @var \Drupal\Core\Entity\EntityTypeInterface[] $entity_types */ $entity_types['entity_view_display'] ->setFormClass('custom_elements_builder', EntityCustomElementsDisplayForm::class); } /** * Implements hook_form_FORM_ID_alter() for \Drupal\field_ui\Form\EntityViewDisplayEditForm. */ function custom_elements_ui_form_entity_view_display_edit_form_alter(&$form, FormStateInterface $form_state) { /** @var \Drupal\Core\Entity\EntityFormInterface $display_form */ $display_form = $form_state->getFormObject(); /** @var \Drupal\Core\Entity\Entity\EntityViewDisplay $display_entity */ $display_entity = $display_form->getEntity(); $is_enabled = $display_entity->getThirdPartySetting('custom_elements', 'enabled', FALSE); // Hide the table of fields custom_elements display is activated. if ($is_enabled) { $form['fields']['#access'] = FALSE; $form['#fields'] = []; $form['#extra'] = []; } $entity_type = \Drupal::entityTypeManager()->getDefinition($display_entity->getTargetEntityTypeId()); $route_parameters = FieldUI::getRouteBundleParameter($entity_type, $display_entity->getTargetBundle()); $route_parameters['view_mode_name'] = $display_entity->getMode(); $mode = $display_entity->getMode(); $mode_component = ($mode === 'default') ? $mode : 'view_mode'; $route_name = "entity.entity_ce_display.{$display_entity->getTargetEntityTypeId()}.{$mode_component}"; $ce_builder_url = Url::fromRoute($route_name, $route_parameters); $form['manage_custom_element'] = [ '#type' => 'link', '#title' => t('Manage custom element'), '#weight' => -10, '#attributes' => ['class' => ['button']], '#url' => $ce_builder_url, '#access' => $is_enabled, ]; $form['custom_elements'] = [ '#type' => 'details', '#open' => TRUE, '#title' => t('Custom Element'), '#tree' => TRUE, ]; $form['custom_elements']['enabled'] = [ '#type' => 'checkbox', '#title' => t('Use Custom Element Display'), '#default_value' => $is_enabled, ]; $form['actions']['submit']['#submit'][] = '_custom_elements_ui_entity_view_display_edit_form_submit'; } /** * Form submission handler for entity_view_display_edit_form. * * @see custom_elements_ui_form_entity_view_display_edit_form_alter() */ function _custom_elements_ui_entity_view_display_edit_form_submit($form, FormStateInterface $form_state) { $enabled = (bool) $form_state->getValue(['custom_elements', 'enabled'], FALSE); /** @var \Drupal\Core\Entity\EntityFormInterface $display_form */ $display_form = $form_state->getFormObject(); /** @var \Drupal\Core\Entity\Entity\EntityViewDisplay $display_entity */ $display_entity = $display_form->getEntity(); $display_entity->setThirdPartySetting('custom_elements', 'enabled', $enabled); // @todo Autogenerate fields and names from view display entity? $display_entity->save(); } Loading
config/schema/custom_elements.schema.yml 0 → 100644 +34 −0 Original line number Diff line number Diff line core.entity_view_display.*.*.*.third_party_settings.custom_elements: type: mapping label: 'Per-view-mode Custom elements settings' mapping: enabled: type: boolean label: 'Whether the custom elements rendering is enabled for view display mode' custom_element_name: type: string label: 'Custom element name' custom_element_fields: type: sequence sequence: type: custom_elements.field custom_elements.field: type: mapping label: 'Custom element field ' mapping: label: type: string label: 'Custom element name' is_slot: type: bool label: 'is Slot' type: type: string label: 'Custom element renderer' weight: type: integer label: 'Weight' region: type: string label: 'Region'
custom_elements.module +1 −1 Original line number Diff line number Diff line Loading @@ -183,7 +183,7 @@ function custom_elements_module_implements_alter(&$implementations, $hook) { function custom_elements_entity_view_display_alter(EntityViewDisplayInterface $display, array $context) { // Enable for all view-modes named appropriately by default. if (strpos($context['view_mode'], 'custom_elements') === 0) { $display->setThirdPartySetting('custom_elements', 'enabled', 1); $display->setThirdPartySetting('custom_elements', 'enabled', TRUE); } } Loading
modules/custom_elements_everywhere/custom_elements_everywhere.module +1 −1 Original line number Diff line number Diff line Loading @@ -16,7 +16,7 @@ function custom_elements_everywhere_entity_prepare_view($entity_type_id, array $ // such that custom elements processor may use it to render // individual fields. foreach ($displays as $display) { $display->setThirdPartySetting('custom_elements', 'enabled', 1); $display->setThirdPartySetting('custom_elements', 'enabled', TRUE); } } }
modules/custom_elements_ui/custom_elements_ui.info.yml 0 → 100644 +7 −0 Original line number Diff line number Diff line name: Custom Elements UI description: 'Provides a user interface for the Custom Elements module.' package: Other type: module core_version_requirement: ^9 dependencies: - custom_elements:custom_elements
modules/custom_elements_ui/custom_elements_ui.module 0 → 100644 +86 −0 Original line number Diff line number Diff line <?php /** * @file * Provides hook implementations for Custom Elements UI. */ use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Url; use Drupal\custom_elements_ui\Form\EntityCustomElementsDisplayForm; use Drupal\field_ui\FieldUI; /** * Implements hook_entity_type_alter(). */ function custom_elements_ui_entity_type_alter(array &$entity_types) { /** @var \Drupal\Core\Entity\EntityTypeInterface[] $entity_types */ $entity_types['entity_view_display'] ->setFormClass('custom_elements_builder', EntityCustomElementsDisplayForm::class); } /** * Implements hook_form_FORM_ID_alter() for \Drupal\field_ui\Form\EntityViewDisplayEditForm. */ function custom_elements_ui_form_entity_view_display_edit_form_alter(&$form, FormStateInterface $form_state) { /** @var \Drupal\Core\Entity\EntityFormInterface $display_form */ $display_form = $form_state->getFormObject(); /** @var \Drupal\Core\Entity\Entity\EntityViewDisplay $display_entity */ $display_entity = $display_form->getEntity(); $is_enabled = $display_entity->getThirdPartySetting('custom_elements', 'enabled', FALSE); // Hide the table of fields custom_elements display is activated. if ($is_enabled) { $form['fields']['#access'] = FALSE; $form['#fields'] = []; $form['#extra'] = []; } $entity_type = \Drupal::entityTypeManager()->getDefinition($display_entity->getTargetEntityTypeId()); $route_parameters = FieldUI::getRouteBundleParameter($entity_type, $display_entity->getTargetBundle()); $route_parameters['view_mode_name'] = $display_entity->getMode(); $mode = $display_entity->getMode(); $mode_component = ($mode === 'default') ? $mode : 'view_mode'; $route_name = "entity.entity_ce_display.{$display_entity->getTargetEntityTypeId()}.{$mode_component}"; $ce_builder_url = Url::fromRoute($route_name, $route_parameters); $form['manage_custom_element'] = [ '#type' => 'link', '#title' => t('Manage custom element'), '#weight' => -10, '#attributes' => ['class' => ['button']], '#url' => $ce_builder_url, '#access' => $is_enabled, ]; $form['custom_elements'] = [ '#type' => 'details', '#open' => TRUE, '#title' => t('Custom Element'), '#tree' => TRUE, ]; $form['custom_elements']['enabled'] = [ '#type' => 'checkbox', '#title' => t('Use Custom Element Display'), '#default_value' => $is_enabled, ]; $form['actions']['submit']['#submit'][] = '_custom_elements_ui_entity_view_display_edit_form_submit'; } /** * Form submission handler for entity_view_display_edit_form. * * @see custom_elements_ui_form_entity_view_display_edit_form_alter() */ function _custom_elements_ui_entity_view_display_edit_form_submit($form, FormStateInterface $form_state) { $enabled = (bool) $form_state->getValue(['custom_elements', 'enabled'], FALSE); /** @var \Drupal\Core\Entity\EntityFormInterface $display_form */ $display_form = $form_state->getFormObject(); /** @var \Drupal\Core\Entity\Entity\EntityViewDisplay $display_entity */ $display_entity = $display_form->getEntity(); $display_entity->setThirdPartySetting('custom_elements', 'enabled', $enabled); // @todo Autogenerate fields and names from view display entity? $display_entity->save(); }