Skip to content
Snippets Groups Projects
Verified Commit 6ac42007 authored by Théodore Biadala's avatar Théodore Biadala
Browse files

Issue #3421843 by scott_euser, smustgrave, Wim Leers, catch: filter_autop...

Issue #3421843 by scott_euser, smustgrave, Wim Leers, catch: filter_autop should ignore twig.config debug html comments
parent 01575cf9
Branches
Tags
28 merge requests!11131[10.4.x-only-DO-NOT-MERGE]: Issue ##2842525 Ajax attached to Views exposed filter form does not trigger callbacks,!9470[10.3.x-only-DO-NOT-MERGE]: #3331771 Fix file_get_contents(): Passing null to parameter,!8540Issue #3457061: Bootstrap Modal dialog Not closing after 10.3.0 Update,!8528Issue #3456871 by Tim Bozeman: Support NULL services,!8373Issue #3427374 by danflanagan8, Vighneshh: taxonomy_tid ViewsArgumentDefault...,!7526Expose roles in response,!3878Removed unused condition head title for views,!3818Issue #2140179: $entity->original gets stale between updates,!3742Issue #3328429: Create item list field formatter for displaying ordered and unordered lists,!3731Claro: role=button on status report items,!3651Issue #3347736: Create new SDC component for Olivero (header-search),!3531Issue #3336994: StringFormatter always displays links to entity even if the user in context does not have access,!3355Issue #3209129: Scrolling problems when adding a block via layout builder,!3154Fixes #2987987 - CSRF token validation broken on routes with optional parameters.,!3133core/modules/system/css/components/hidden.module.css,!2964Issue #2865710 : Dependencies from only one instance of a widget are used in display modes,!2812Issue #3312049: [Followup] Fix Drupal.Commenting.FunctionComment.MissingReturnType returns for NULL,!2794Issue #3100732: Allow specifying `meta` data on JSON:API objects,!2378Issue #2875033: Optimize joins and table selection in SQL entity query implementation,!2062Issue #3246454: Add weekly granularity to views date sort,!1105Issue #3025039: New non translatable field on translatable content throws error,!1073issue #3191727: Focus states on mobile second level navigation items fixed,!10223132456: Fix issue where views instances are emptied before an ajax request is complete,!877Issue #2708101: Default value for link text is not saved,!617Issue #3043725: Provide a Entity Handler for user cancelation,!579Issue #2230909: Simple decimals fail to pass validation,!560Move callback classRemove outside of the loop,!555Issue #3202493
Pipeline #139605 canceled
Pipeline: drupal

#139606

    ......@@ -734,6 +734,27 @@ function _filter_autop($text) {
    }
    }
    elseif (!$ignore) {
    // Skip if the next chunk starts with Twig theme debug.
    // @see twig_render_template()
    if (isset($chunks[$i + 1]) && $chunks[$i + 1] === '<!-- THEME DEBUG -->') {
    $chunk = rtrim($chunk, "\n");
    $output .= $chunk;
    continue;
    }
    // Skip if the preceding chunk was the end of a Twig theme debug.
    // @see twig_render_template()
    if (isset($chunks[$i - 1])) {
    if (
    str_starts_with($chunks[$i - 1], '<!-- BEGIN OUTPUT from ')
    || str_starts_with($chunks[$i - 1], '<!-- 💡 BEGIN CUSTOM TEMPLATE OUTPUT from ')
    ) {
    $chunk = ltrim($chunk, "\n");
    $output .= $chunk;
    continue;
    }
    }
    // just to make things a little easier, pad the end
    $chunk = preg_replace('|\n*$|', '', $chunk) . "\n\n";
    $chunk = preg_replace('|<br />\s*<br />|', "\n\n", $chunk);
    ......
    ......@@ -437,6 +437,20 @@ public function testLineBreakFilter() {
    '<!-- comment -->' => TRUE,
    "<!--\nThree.\n-->" => TRUE,
    ],
    // Do not add paragraph tags around Twig theme debugging.
    "<p>Text here\n<!-- THEME DEBUG -->\n<!-- THEME HOOK: 'html' -->\n<!-- FILE NAME SUGGESTIONS:\n* html--node.html.twig\nx html.html.twig\n-->\n<!-- BEGIN OUTPUT from 'core/themes/olivero/templates/layout/html.html.twig' -->\n<span>Test</span></p>" => [
    "<p>Text here" => TRUE,
    "<p>Text here</p>" => FALSE,
    "<span>Test</span></p>" => TRUE,
    "<p><span>Test</span></p>" => FALSE,
    ],
    // Do not add paragraph tags around custom template Twig theme debugging.
    "<p>Text here\n<!-- THEME DEBUG -->\n<!-- THEME HOOK: 'html' -->\n<!-- FILE NAME SUGGESTIONS:\n* html--node.html.twig\nx html.html.twig\n-->\n<!-- 💡 BEGIN CUSTOM TEMPLATE OUTPUT from 'custom/themes/custom-theme/templates/layout/html.html.twig' -->\n<span>Test</span></p>" => [
    "<p>Text here" => TRUE,
    "<p>Text here</p>" => FALSE,
    "<span>Test</span></p>" => TRUE,
    "<p><span>Test</span></p>" => FALSE,
    ],
    // Resulting HTML should produce matching paragraph tags.
    '<p><div> </div></p>' => [
    "<p>\n<div> </div>\n</p>" => TRUE,
    ......@@ -481,6 +495,44 @@ public function testLineBreakFilter() {
    $this->assertEquals($result, '<p>' . $source . "</p>\n", 'Line break filter can process very long strings.');
    }
    /**
    * Tests that the line break filter does not apply to twig debug.
    */
    public function testLineBreakFilterTwigDebug(): void {
    // Enable twig theme debug to ensure that any
    // changes to theme debugging format force checking
    // that the auto paragraph filter continues to be applied
    // correctly.
    $twig = \Drupal::service('twig');
    $twig->enableDebug();
    // Manually render a template in its simplest form.
    $variables = [
    'theme_hook_original' => 'container',
    'directory' => '',
    'children' => 'Test two',
    ];
    include_once $this->root . '/core/themes/engines/twig/twig.engine';
    $render = twig_render_template('container.html.twig', $variables);
    $render = trim($render);
    // Render text before applying the auto paragraph filter.
    $this->assertSame("<!-- THEME DEBUG -->
    <!-- THEME HOOK: 'container' -->
    <!-- 💡 BEGIN CUSTOM TEMPLATE OUTPUT from 'container.html.twig' -->
    <div>Test two</div>
    <!-- END CUSTOM TEMPLATE OUTPUT from 'container.html.twig' -->", $render);
    $result = _filter_autop($render);
    // After auto-p is applied, the theme debug should no longer have
    // line breaks but the true line breaks should still.
    $this->assertSame("<!-- THEME DEBUG --><!-- THEME HOOK: 'container' --><!-- 💡 BEGIN CUSTOM TEMPLATE OUTPUT from 'container.html.twig' --><div>Test two</div>
    <!-- END CUSTOM TEMPLATE OUTPUT from 'container.html.twig' -->", $result);
    }
    /**
    * Tests filter settings, defaults, access restrictions and similar.
    *
    ......
    0% Loading or .
    You are about to add 0 people to the discussion. Proceed with caution.
    Please register or to comment