Verified Commit f2ba76f1 authored by Théodore Biadala's avatar Théodore Biadala
Browse files

Issue #3420709 by gorkagr, ressa, Ruturaj Chaubey, larowlan, alexpott: Make it...

Issue #3420709 by gorkagr, ressa, Ruturaj Chaubey, larowlan, alexpott: Make it more obvious that a Twig template is overridden
parent 6923b1a6
Loading
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -55,18 +55,18 @@ public function testTwigDebugMarkup() {
    $output = (string) $renderer->renderRoot($build);
    $this->assertStringContainsString('<!-- THEME DEBUG -->', $output, 'Twig debug markup found in theme output when debug is enabled.');
    $this->assertStringContainsString("THEME HOOK: 'node'", $output, 'Theme call information found.');
    $this->assertStringContainsString('* node--1--full' . $extension . PHP_EOL . '   x node--1' . $extension . PHP_EOL . '   * node--page--full' . $extension . PHP_EOL . '   * node--page' . $extension . PHP_EOL . '   * node--full' . $extension . PHP_EOL . '   * node' . $extension, $output, 'Suggested template files found in order and node ID specific template shown as current template.');
    $this->assertStringContainsString('▪️ node--1--full' . $extension . PHP_EOL . '    node--1' . $extension . PHP_EOL . '   ▪️ node--page--full' . $extension . PHP_EOL . '   ▪️ node--page' . $extension . PHP_EOL . '   ▪️ node--full' . $extension . PHP_EOL . '   ▪️ node' . $extension, $output, 'Suggested template files found in order and node ID specific template shown as current template.');
    $this->assertStringContainsString(Html::escape('node--<script type="text/javascript">alert(\'yo\');</script>'), (string) $output);
    $this->assertStringContainsString('<!-- INVALID FILE NAME SUGGESTIONS:' . PHP_EOL . '   See https://api.drupal.org/api/drupal/core!lib!Drupal!Core!Render!theme.api.php/function/hook_theme_suggestions_alter' . PHP_EOL . '   invalid_theme_suggestions' . PHP_EOL . '-->', $output, 'Twig debug markup found invalid suggestions.');
    $template_filename = $templates['node__1']['path'] . '/' . $templates['node__1']['template'] . $extension;
    $this->assertStringContainsString("BEGIN OUTPUT from '$template_filename'", $output, 'Full path to current template file found.');
    $this->assertStringContainsString("💡 BEGIN CUSTOM TEMPLATE OUTPUT from '$template_filename'", $output, 'Full path to current template file found.');

    // Create another node and make sure the template suggestions shown in the
    // debug markup are correct.
    $node2 = $this->drupalCreateNode();
    $build = $builder->view($node2);
    $output = (string) $renderer->renderRoot($build);
    $this->assertStringContainsString('* node--2--full' . $extension . PHP_EOL . '   * node--2' . $extension . PHP_EOL . '   * node--page--full' . $extension . PHP_EOL . '   * node--page' . $extension . PHP_EOL . '   * node--full' . $extension . PHP_EOL . '   x node' . $extension, $output, 'Suggested template files found in order and base template shown as current template.');
    $this->assertStringContainsString('▪️ node--2--full' . $extension . PHP_EOL . '   ▪️ node--2' . $extension . PHP_EOL . '   ▪️ node--page--full' . $extension . PHP_EOL . '   ▪️ node--page' . $extension . PHP_EOL . '   ▪️ node--full' . $extension . PHP_EOL . '    node' . $extension, $output, 'Suggested template files found in order and base template shown as current template.');

    // Create another node and make sure the template suggestions shown in the
    // debug markup are correct.
@@ -75,7 +75,7 @@ public function testTwigDebugMarkup() {
    $build += $builder->view($node3);
    $output = (string) $renderer->renderRoot($build);
    $this->assertStringContainsString("THEME HOOK: 'node__foo__bar'", $output, 'Theme call information found.');
    $this->assertStringContainsString('* node--foo--bar' . $extension . PHP_EOL . '   * node--foo' . $extension . PHP_EOL . '   * node--&lt;script type=&quot;text/javascript&quot;&gt;alert(&#039;yo&#039;);&lt;/script&gt;' . $extension . PHP_EOL . '   * node--3--full' . $extension . PHP_EOL . '   * node--3' . $extension . PHP_EOL . '   * node--page--full' . $extension . PHP_EOL . '   * node--page' . $extension . PHP_EOL . '   * node--full' . $extension . PHP_EOL . '   x node' . $extension, $output, 'Suggested template files found in order and base template shown as current template.');
    $this->assertStringContainsString('▪️ node--foo--bar' . $extension . PHP_EOL . '   ▪️ node--foo' . $extension . PHP_EOL . '   ▪️ node--&lt;script type=&quot;text/javascript&quot;&gt;alert(&#039;yo&#039;);&lt;/script&gt;' . $extension . PHP_EOL . '   ▪️ node--3--full' . $extension . PHP_EOL . '   ▪️ node--3' . $extension . PHP_EOL . '   ▪️ node--page--full' . $extension . PHP_EOL . '   ▪️ node--page' . $extension . PHP_EOL . '   ▪️ node--full' . $extension . PHP_EOL . '    node' . $extension, $output, 'Suggested template files found in order and base template shown as current template.');

    // Disable debug, rebuild the service container, and clear all caches.
    $parameters = $this->container->getParameter('twig.config');
+5 −5
Original line number Diff line number Diff line
@@ -57,11 +57,11 @@ public function testThemeSuggestionsContainerAlter() {
    $output = $this->render($build);
    $extension = '.html.twig';
    $expected = '<!-- FILE NAME SUGGESTIONS:' . PHP_EOL
      . '   * container--more-link--test-page-display--default' . $extension . PHP_EOL
      . '   * container--more-link--default' . $extension . PHP_EOL
      . '   * container--more-link--test-page-display' . $extension . PHP_EOL
      . '   * container--more-link' . $extension . PHP_EOL
      . '   x container' . $extension . PHP_EOL
      . '   ▪️ container--more-link--test-page-display--default' . $extension . PHP_EOL
      . '   ▪️ container--more-link--default' . $extension . PHP_EOL
      . '   ▪️ container--more-link--test-page-display' . $extension . PHP_EOL
      . '   ▪️ container--more-link' . $extension . PHP_EOL
      . '    container' . $extension . PHP_EOL
      . '-->' . PHP_EOL;
    $this->assertStringContainsString($expected, $output, 'Views more link container suggestions found in Twig debug output');
  }
+10 −3
Original line number Diff line number Diff line
@@ -89,7 +89,7 @@ function twig_render_template($template_file, array $variables) {
          continue;
        }
        $template = strtr($suggestion, '_', '-') . $extension;
        $prefix = ($template == $current_template) ? 'x' : '*';
        $prefix = ($template == $current_template) ? '' : '▪️';
        $suggestion = $prefix . ' ' . $template;
      }
      $output['debug_info'] .= "\n<!-- FILE NAME SUGGESTIONS:\n   " . Html::escape(implode("\n   ", $suggestions)) . "\n-->";
@@ -101,8 +101,15 @@ function twig_render_template($template_file, array $variables) {
        $output['debug_info'] .= "\n-->";
      }
    }
    $output['debug_info']   .= "\n<!-- BEGIN OUTPUT from '" . Html::escape($template_file) . "' -->\n";
    $output['debug_suffix'] .= "\n<!-- END OUTPUT from '" . Html::escape($template_file) . "' -->\n\n";
    // Check if the template_file belongs to a custom theme
    $template_override_status_output = "BEGIN OUTPUT";
    $template_override_suffix_output = "END OUTPUT";
    if (str_starts_with($template_file, $variables['directory'])) {
      $template_override_status_output = "💡 BEGIN CUSTOM TEMPLATE OUTPUT";
      $template_override_suffix_output = "END CUSTOM TEMPLATE OUTPUT";
    }
    $output['debug_info']   .= "\n<!-- " . $template_override_status_output . " from '" . Html::escape($template_file) . "' -->\n";
    $output['debug_suffix'] .= "\n<!-- " . $template_override_suffix_output . " from '" . Html::escape($template_file) . "' -->\n\n";
  }
  // This output has already been rendered and is therefore considered safe.
  return Markup::create(implode('', $output));