diff -u b/panelizer.module b/panelizer.module --- b/panelizer.module +++ b/panelizer.module @@ -214,32 +214,75 @@ /** @var \Drupal\panelizer\PanelizerInterface $panelizer */ $panelizer = \Drupal::service('panelizer'); - if ($panelizer_manager->hasDefinition($display->getTargetEntityTypeId())) { - $settings = $panelizer->getPanelizerSettings($display->getTargetEntityTypeId(), $display->getTargetBundle(), $display->getMode(), $display); + $entity_type_id = $display->getTargetEntityTypeId(); + $bundle = $display->getTargetBundle(); + $mode = $display->getMode(); + + if ($panelizer_manager->hasDefinition($entity_type_id)) { + $settings = $panelizer->getPanelizerSettings($entity_type_id, $bundle, $mode, $display); + + // Always put the field table below the Panelizer options. + $form['fields']['#weight'] = 10; $form['panelizer'] = [ '#tree' => TRUE, ]; + $form['panelizer']['enable'] = [ + '#type' => 'checkbox', + '#title' => t('Panelize this view mode'), + '#default_value' => isset($settings['enable']) ? $settings['enable'] : FALSE, + ]; + + $entity_type = \Drupal::entityTypeManager()->getDefinition($entity_type_id); + + $form['panelizer']['options'] = [ + '#type' => 'details', + '#open' => TRUE, + '#title' => t('Panelizer options'), + '#states' => [ + 'visible' => [ + '#edit-panelizer-enable' => ['checked' => TRUE], + ], + ], + '#parents' => ['panelizer'], + ]; + + $form['panelizer']['options']['custom'] = [ + '#type' => 'checkbox', + '#title' => t('Allow custom layouts for individual @entities', [ + '@entities' => $entity_type->getPluralLabel(), + ]), + '#default_value' => isset($settings['custom']) ? $settings['custom'] : FALSE, + ]; + $form['panelizer']['options']['allow'] = [ + '#type' => 'checkbox', + '#title' => t('Allow users to select which layout to use'), + '#description' => t('When multiple defaults for a view mode are available it can be useful to allow content creators to choose which layout to use for a given @entity.', [ + '@entity' => $entity_type->getSingularLabel(), + ]), + '#default_value' => isset($settings['allow']) ? $settings['allow'] : FALSE, + ]; + // If this display mode is panelized, then show a link to its settings. if (!empty($settings['enable'])) { - $form['#cache']['tags'][] = "panelizer_default:{$display->getTargetEntityTypeId()}:{$display->getTargetBundle()}:{$display->getMode()}"; + $form['#cache']['tags'][] = "panelizer_default:$entity_type_id:$bundle:$mode"; $form['panelizer']['displays'] = [ '#type' => 'table', '#caption' => t('Panelized Displays'), - '#header' => [t('Label'), t('Default'), t('Operations')], + '#header' => [t('Name'), t('Use as default'), t('Operations')], ]; foreach ($display->getThirdPartySetting('panelizer', 'displays', []) as $machine_name => $panels_display) { // Reset operations when in the foreach loop. $operations = []; $display_name = $machine_name; - $machine_name ="{$display->getTargetEntityTypeId()}__{$display->getTargetBundle()}__{$display->getMode()}__$machine_name"; + $machine_name ="{$entity_type_id}__{$bundle}__{$mode}__$machine_name"; $operations['edit'] = [ 'title' => t('Edit'), 'url' => Url::fromRoute('panelizer.wizard.edit', ['machine_name' => $machine_name]), ]; if ($settings['default'] != $display_name) { $operations['set_default'] = [ - 'title' => t('Set default'), + 'title' => t('Use as default'), 'url' => Url::fromRoute('panelizer.default.select', ['machine_name' => $machine_name]), ]; $operations['delete'] = [ @@ -249,7 +292,7 @@ } $form['panelizer']['displays'][$machine_name] = [ 'label' => ['#markup' => $panels_display['label']], - 'default' => ['#markup' => $settings['default'] == $display_name ? 'TRUE' : 'FALSE'], + 'default' => ['#markup' => $settings['default'] == $display_name ? '✓' : ''], 'operations' => [ 'data' => [ '#type' => 'operations', @@ -260,33 +303,6 @@ } $form['fields']['#access'] = FALSE; } - $form['panelizer']['enable'] = [ - '#type' => 'checkbox', - '#title' => t('Panelize this view mode'), - '#default_value' => isset($settings['enable']) ? $settings['enable'] : FALSE, - ]; - - $form['panelizer']['custom'] = [ - '#type' => 'checkbox', - '#title' => t('Allow custom overrides of each entity'), - '#default_value' => isset($settings['custom']) ? $settings['custom'] : FALSE, - '#states' => [ - 'visible' => [ - '#edit-panelizer-enable' => ['checked' => TRUE], - ], - ], - ]; - $form['panelizer']['allow'] = [ - '#type' => 'checkbox', - '#title' => t('Allow panelizer default choice'), - '#description' => t('When multiple defaults for a view mode are available it can be useful to allow content creators to choose which default to use for a given node.'), - '#default_value' => isset($settings['allow']) ? $settings['allow'] : FALSE, - '#states' => [ - 'visible' => [ - '#edit-panelizer-enable' => ['checked' => TRUE], - ], - ], - ]; $form['#attached']['library'][] = 'panelizer/panelizer_default_form'; $form['actions']['submit']['#submit'][] = 'panelizer_form_entity_view_display_edit_submit'; only in patch2: unchanged: --- a/js/panelizer-default-form.js +++ b/js/panelizer-default-form.js @@ -10,10 +10,10 @@ function update_form() { var $core_form = $('#field-display-overview-wrapper'); if ($panelizer_checkbox.is(':checked')) { - $core_form.hide(); + $core_form.fadeOut(); } else { - $core_form.show(); + $core_form.fadeIn(); } }