-
-
Notifications
You must be signed in to change notification settings - Fork 9.6k
[DomCrawler] Fix getting text after a child node with Crawler::innerText() #48684
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
otsch
commented
Dec 16, 2022
•
edited by nicolas-grekas
Loading
edited by nicolas-grekas
Q | A |
---|---|
Branch? | 6.3 |
Bug fix? | yes |
New feature? | no |
Deprecations? | no |
Tickets | Fix #48682 |
License | MIT |
… (BrandonlinU) This PR was squashed before being merged into the 6.2 branch. Discussion ---------- [DependencyInjection] Fix bug when tag name is a text node | Q | A | ------------- | --- | Branch? | 6.2 | Bug fix? | yes | New feature? | no | Deprecations? | no | Tickets | Fix #48445 | License | MIT Following the discussion in the ticket, I added a test for a tag without name attribute and content inside the tag for the name. I use `$tag->childElementCount !== 0` instead of `$tag->hasChildNode()` to detect if a `<attribute>` tag is present in the tag definition, or is only the name of the tag. Commits ------- b9337f1 [DependencyInjection] Fix bug when tag name is a text node
… message (Titouan Galopin) This PR was merged into the 6.2 branch. Discussion ---------- [Console] Fix missing command not matching namespace error message | Q | A | ------------- | --- | Branch? | 6.2 | Bug fix? | yes | New feature? | no | Deprecations? | no | Tickets | Fix for #47750 | License | MIT | Doc PR | - Following #47750, running a command with an exception not related to the console (for instance fatal error) could end up in a situation where the error handling code doesn't stop the execution flow and result in: ``` In Application.php line 307: [ErrorException] Warning: Undefined variable $command ``` This fixes this behavior by throwing the original exception when no other error handling cases could handle the problem. Commits ------- 1e7202d Fix missing command not matching namespace error message
This PR was merged into the 6.2 branch. Discussion ---------- [TwigBundle] Alias BodyRendererInterface | Q | A | ------------- | --- | Branch? | 6.2 | Bug fix? | yes | New feature? | no | Deprecations? | no | Tickets | | License | MIT | Doc PR | In the [Sending Messages Async](https://symfony.com/doc/current/mailer.html#sending-messages-async) ( symfony/symfony-docs@4fbbc16 ) docs the BodyRenderer is mentioned and used in the example. But there's no alias yet, not sure if this was intentional `@fabpot`? But it would be nice if it works right away without the need to add the alias manually. Commits ------- 248e792 [TwigBundle] Alias BodyRendererInterface
…urity::login()` (chalasr) This PR was merged into the 6.2 branch. Discussion ---------- [SecurityBundle] Fix authenticator existence check in `Security::login()` | Q | A | ------------- | --- | Branch? | 6.2 | Bug fix? | yes | New feature? | no | Deprecations? | no | Tickets | Fix #48595 | License | MIT | Doc PR | - Commits ------- 97fe54d [SecurityBundle] Fix authenticator existence check in `Security::login()`
…ceholder parameters (Kocal) This PR was merged into the 6.2 branch. Discussion ---------- [Translation] Fix extraction when dealing with VariadicPlaceholder parameters | Q | A | ------------- | --- | Branch? | 6.2 | Bug fix? | yes | New feature? | no <!-- please update src/**/CHANGELOG.md files --> | Deprecations? | no <!-- please update UPGRADE-*.md and src/**/CHANGELOG.md files --> | Tickets | Fix #48422 <!-- prefix each issue number with "Fix #", no need to create an issue if none exists, explain below instead --> | License | MIT | Doc PR | symfony/symfony-docs#... <!-- required for new features --> I don't have the time for now to check if the command has tests or not, but dealing with raw args with + filtering for `Node\Arg` instance make the `extract` command working again. The issue is "caused by" https://github.com/symfony/symfony/blob/6.3/src/Symfony/Bridge/Twig/Extension/TranslationExtension.php#L71, the extract command is not able to deal with VariadicPlaceholder node. Changing to `[$this, 'trans']` works, but this is not the wanted solution. **Before:** ``` symfony console translation:extract fr --force -vvv Translation Messages Extractor and Dumper ========================================= // Generating "fr" translation files for "default directory" // Parsing templates... In CallLike.php line 36: [AssertionError (1)] assert(!$this->isFirstClassCallable()) Exception trace: at /Users/kocal/workspace/chronos/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/CallLike.php:36 assert() at /Users/kocal/workspace/chronos/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/CallLike.php:36 PhpParser\Node\Expr\CallLike->getArgs() at /Users/kocal/workspace/chronos/vendor/symfony/translation/Extractor/Visitor/AbstractVisitor.php:66 Symfony\Component\Translation\Extractor\Visitor\AbstractVisitor->hasNodeNamedArguments() at /Users/kocal/workspace/chronos/vendor/symfony/translation/Extractor/Visitor/TransMethodVisitor.php:40 Symfony\Component\Translation\Extractor\Visitor\TransMethodVisitor->enterNode() at /Users/kocal/workspace/chronos/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:123 PhpParser\NodeTraverser->traverseNode() at /Users/kocal/workspace/chronos/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:223 PhpParser\NodeTraverser->traverseArray() at /Users/kocal/workspace/chronos/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:114 PhpParser\NodeTraverser->traverseNode() at /Users/kocal/workspace/chronos/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:146 PhpParser\NodeTraverser->traverseNode() at /Users/kocal/workspace/chronos/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:223 PhpParser\NodeTraverser->traverseArray() at /Users/kocal/workspace/chronos/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:114 PhpParser\NodeTraverser->traverseNode() at /Users/kocal/workspace/chronos/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:146 PhpParser\NodeTraverser->traverseNode() at /Users/kocal/workspace/chronos/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:223 PhpParser\NodeTraverser->traverseArray() at /Users/kocal/workspace/chronos/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:114 PhpParser\NodeTraverser->traverseNode() at /Users/kocal/workspace/chronos/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:223 PhpParser\NodeTraverser->traverseArray() at /Users/kocal/workspace/chronos/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:114 PhpParser\NodeTraverser->traverseNode() at /Users/kocal/workspace/chronos/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:223 PhpParser\NodeTraverser->traverseArray() at /Users/kocal/workspace/chronos/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:114 PhpParser\NodeTraverser->traverseNode() at /Users/kocal/workspace/chronos/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:223 PhpParser\NodeTraverser->traverseArray() at /Users/kocal/workspace/chronos/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:91 PhpParser\NodeTraverser->traverse() at /Users/kocal/workspace/chronos/vendor/symfony/translation/Extractor/PhpAstExtractor.php:56 Symfony\Component\Translation\Extractor\PhpAstExtractor->extract() at /Users/kocal/workspace/chronos/vendor/symfony/translation/Extractor/ChainExtractor.php:48 Symfony\Component\Translation\Extractor\ChainExtractor->extract() at /Users/kocal/workspace/chronos/vendor/symfony/framework-bundle/Command/TranslationUpdateCommand.php:395 Symfony\Bundle\FrameworkBundle\Command\TranslationUpdateCommand->extractMessages() at /Users/kocal/workspace/chronos/vendor/symfony/framework-bundle/Command/TranslationUpdateCommand.php:200 Symfony\Bundle\FrameworkBundle\Command\TranslationUpdateCommand->execute() at /Users/kocal/workspace/chronos/vendor/symfony/console/Command/Command.php:312 Symfony\Component\Console\Command\Command->run() at /Users/kocal/workspace/chronos/vendor/symfony/console/Application.php:1038 Symfony\Component\Console\Application->doRunCommand() at /Users/kocal/workspace/chronos/vendor/symfony/framework-bundle/Console/Application.php:88 Symfony\Bundle\FrameworkBundle\Console\Application->doRunCommand() at /Users/kocal/workspace/chronos/vendor/symfony/console/Application.php:312 Symfony\Component\Console\Application->doRun() at /Users/kocal/workspace/chronos/vendor/symfony/framework-bundle/Console/Application.php:77 Symfony\Bundle\FrameworkBundle\Console\Application->doRun() at /Users/kocal/workspace/chronos/vendor/symfony/console/Application.php:168 Symfony\Component\Console\Application->run() at /Users/kocal/workspace/chronos/vendor/symfony/runtime/Runner/Symfony/ConsoleApplicationRunner.php:54 Symfony\Component\Runtime\Runner\Symfony\ConsoleApplicationRunner->run() at /Users/kocal/workspace/chronos/vendor/autoload_runtime.php:29 ``` **After:** ``` symfony console translation:extract fr --force -vvv Translation Messages Extractor and Dumper ========================================= // Generating "fr" translation files for "default directory" // Parsing templates... // Loading translation files... // Writing files... [OK] Translation files were successfully updated. ``` Commits ------- 2030c26 [Translation] Fix extraction when dealing with VariadicPlaceholder parameters
This PR was merged into the 6.2 branch. Discussion ---------- [HttpKernel] Fix `CacheAttributeListener` priority | Q | A | ------------- | --- | Branch? | 6.2 | Bug fix? | yes | New feature? | no | Deprecations? | no | Tickets | - | License | MIT | Doc PR | - Currently the `CacheAttributeListener` & the `IsGrantedAttributeListener` have the same priority: ``` Registered Listeners for "kernel.controller_arguments" Event ============================================================ ------- --------------------------------------------------------------------------------------------------------- ---------- Order Callable Priority ------- --------------------------------------------------------------------------------------------------------- ---------- #1 Symfony\Component\HttpKernel\EventListener\CacheAttributeListener::onKernelControllerArguments() 10 #2 Symfony\Component\Security\Http\EventListener\IsGrantedAttributeListener::onKernelControllerArguments() 10 #3 Symfony\Component\HttpKernel\EventListener\ErrorListener::onControllerArguments() 0 ------- --------------------------------------------------------------------------------------------------------- ---------- ``` Since the `CacheAttributeListener` is alphabetically first, it's first to get triggered. This can cause an unauthenticated user to receive a 304 Not modified instead of a 302 Redirect, resulting in the user seeing some stale content from when they were authenticated instead of getting redirected to the login page. This PR changes the priority of the `CacheAttributeListener` to be lower than that of the `IsGrantedAttributeListener`. Commits ------- 90eb89f [HttpKernel] Fix CacheAttributeListener priority
…aining GetAttrNode
…ession containing GetAttrNode (fancyweb) This PR was merged into the 6.2 branch. Discussion ---------- [ExpressionLanguage] Fix BC of cached SerializedParsedExpression containing GetAttrNode | Q | A | ------------- | --- | Branch? | 6.2 | Bug fix? | yes | New feature? | no | Deprecations? | no | Tickets | #48543 | License | MIT | Doc PR | - Ref #47058 `GetAttrNode` can be serialized and cached through `SerializedParsedExpression`. `@fsevestre` Can you try this small patch plz? Commits ------- 6c33582 [ExpressionLanguage] Fix BC of cached SerializedParsedExpression containing GetAttrNode
* 6.2: [ExpressionLanguage] Fix BC of cached SerializedParsedExpression containing GetAttrNode [HttpKernel] Fix CacheAttributeListener priority [DependencyInjection] Fix bug when tag name is a text node [VarExporter] Fix adding a key to an uninitialized array Fix missing command not matching namespace error message [SecurityBundle] Fix authenticator existence check in `Security::login()` [TwigBundle] Alias BodyRendererInterface Point `Security::*` constants to `SecurityRequestAttributes::*` ones [Translation] Fix extraction when dealing with VariadicPlaceholder parameters
…havior for allowed schemes (Titouan Galopin) This PR was merged into the 6.1 branch. Discussion ---------- [HtmlSanitizer] Fix HtmlSanitizer default configuration behavior for allowed schemes | Q | A | ------------- | --- | Branch? | 6.1 | Bug fix? | yes | New feature? | no | Deprecations? | no | Tickets | Fix #48556 | License | MIT | Doc PR | - This issue happened not in the component but in the default configuration behavior (array was passed instead of null). Commits ------- 93e5160 Fix HtmlSanitizer default configuration behavior for allowed schemes
…ers) This PR was merged into the 6.1 branch. Discussion ---------- [Console] Fix clear line with question in section | Q | A | ------------- | --- | Branch? | 6.1 | Bug fix? | yes | New feature? | no | Deprecations? | no | Tickets | Fix #47411 | License | MIT | Doc PR | - In the issue #47411 is the current behavior described (with videos). The problem is in a section using a question and a clear. Then one line is not cleared because of the `return` so submit the input. NOTICE: This bug might be as well in the versions 4.4+, but in the versions < 6.1 it would be more complicated to fix, because the `SymfonyStyle` does not have the property `$output` in this versions. Commits ------- fe1ddd3 [Console] Fix clear line with question in section
…lidation::createValidatorBuilder()
…for excluded services (apfelbox) This PR was merged into the 6.2 branch. Discussion ---------- [FrameworkBundle] container:debug CLI output improvements for excluded services | Q | A | ------------- | --- | Branch? | 6.3 | Bug fix? | no | New feature? | yes (not sure) | Deprecations? | no | Tickets | — | License | MIT | Doc PR | — <!-- Replace this notice by a short README for your feature/bugfix. This will help reviewers and should be a good start for the documentation. Additionally (see https://symfony.com/releases): - Always add tests and ensure they pass. - Bug fixes must be submitted against the lowest maintained branch where they apply (lowest branches are regularly merged to upper ones so they get the fixes too). - Features and deprecations must be submitted against the latest branch. - For new features, provide some code snippets to help understand usage. - Changelog entry should follow https://symfony.com/doc/current/contributing/code/conventions.html#writing-a-changelog-entry - Never break backward compatibility (see https://symfony.com/bc). --> Normally I test whether the exclusion rules from the service container of my bundles work correctly by just using the `debug:container` command and looking whether my excluded services occur in the last. However, due to the latest changes in #46279 all services (excluded or not) are always in this list. You need to open the definition to see if it was excluded:  This PR proposes two things: 1. add a more prominent warning to the service definition details screen that the service is excluded  (wording tbd) 2. mark the services as excluded in the list (right now by graying them out):  If this looks like something you want to include, I will add the "graying out" part to the table view as well. wdyt? Commits ------- 9d2f10f Hide excluded services from container debug list
…en using Validation::createValidatorBuilder() (nicolas-grekas) This PR was merged into the 6.2 branch. Discussion ---------- [Validator] Allow opt-out of EmailValidator deprecation when using Validation::createValidatorBuilder() | Q | A | ------------- | --- | Branch? | 6.2 | Bug fix? | yes | New feature? | yes | Deprecations? | yes | Tickets | Fix #48541 | License | MIT | Doc PR | - As described in the linked issue, there is currently no way to opt out from a deprecation triggered by a validator when using the component standalone. The example at hand presently is "The "loose" mode is deprecated. The default mode will be changed to "html5" in 7.0" as triggered by EmailValidator. There could be others in the future. This PR provides a way around: ```php $builder = Validation::createValidatorBuilder() ->setConstraintValidatorFactory(new ConstraintValidatorFactory([EmailValidator::class => new EmailValidator(Email::VALIDATION_MODE_HTML5)])); ``` That's a bit verbose, but that does the job in a future-proof way. Commits ------- bb7ea3c [Validator] Allow opt-out of EmailValidator deprecation when using Validation::createValidatorBuilder()
* 5.4: [Mailer] Include all transports' debug messages in RoundRobin transport exception [FrameworkBundle] fix: fix help message Use relative timestamps [Cache] Fix dealing with ext-redis' multi/exec returning a bool [Messenger][Amqp] Added missing rpc_timeout option [Serializer] Prevent GetSetMethodNormalizer from creating invalid magic method call [HttpFoundation] Fix dumping array cookies [WebProfilerBundle] Fix dump header not being displayed TraceableHttpClient: increase decorator's priority Use static methods inside data providers [FrameworkBundle] Allow configuring `framework.exceptions` with a config builder bug #48313 [Mime] Fix MessagePart serialization [ErrorHandler][DebugClassLoader] Fix some new return types support Fix getting the name of closures on PHP 8.1.11+ [Translator] Fix typo "internal" / "interval" fix dumping top-level tagged values
* 6.0: [Mailer] Include all transports' debug messages in RoundRobin transport exception [FrameworkBundle] fix: fix help message Use relative timestamps [Cache] Fix dealing with ext-redis' multi/exec returning a bool [Messenger][Amqp] Added missing rpc_timeout option [Serializer] Prevent GetSetMethodNormalizer from creating invalid magic method call [HttpFoundation] Fix dumping array cookies [WebProfilerBundle] Fix dump header not being displayed TraceableHttpClient: increase decorator's priority Use static methods inside data providers [FrameworkBundle] Allow configuring `framework.exceptions` with a config builder bug #48313 [Mime] Fix MessagePart serialization [ErrorHandler][DebugClassLoader] Fix some new return types support Fix getting the name of closures on PHP 8.1.11+ [Translator] Fix typo "internal" / "interval" fix dumping top-level tagged values
* 6.1: [Mailer] Include all transports' debug messages in RoundRobin transport exception [FrameworkBundle] fix: fix help message Fix HtmlSanitizer default configuration behavior for allowed schemes Use relative timestamps [Cache] Fix dealing with ext-redis' multi/exec returning a bool [Messenger][Amqp] Added missing rpc_timeout option [Serializer] Prevent GetSetMethodNormalizer from creating invalid magic method call [HttpFoundation] Fix dumping array cookies [WebProfilerBundle] Fix dump header not being displayed TraceableHttpClient: increase decorator's priority Use static methods inside data providers [FrameworkBundle] Allow configuring `framework.exceptions` with a config builder bug #48313 [Mime] Fix MessagePart serialization [HttpKernel][ErrorHandler] Fix reading the SYMFONY_IDE env var [ErrorHandler][DebugClassLoader] Fix some new return types support Fix getting the name of closures on PHP 8.1.11+ [Translator] Fix typo "internal" / "interval" fix dumping top-level tagged values [Console] Fix clear line with question in section
* 6.2: (22 commits) [Mailer] Include all transports' debug messages in RoundRobin transport exception [FrameworkBundle] fix: fix help message Hide excluded services from container debug list [Validator] Allow opt-out of EmailValidator deprecation when using Validation::createValidatorBuilder() Fix HtmlSanitizer default configuration behavior for allowed schemes Use relative timestamps [Translation] add tests + fix [Cache] Fix dealing with ext-redis' multi/exec returning a bool [Messenger][Amqp] Added missing rpc_timeout option [Serializer] Prevent GetSetMethodNormalizer from creating invalid magic method call [HttpFoundation] Fix dumping array cookies [WebProfilerBundle] Fix dump header not being displayed TraceableHttpClient: increase decorator's priority Use static methods inside data providers [FrameworkBundle] Allow configuring `framework.exceptions` with a config builder bug #48313 [Mime] Fix MessagePart serialization [HttpKernel][ErrorHandler] Fix reading the SYMFONY_IDE env var [ErrorHandler][DebugClassLoader] Fix some new return types support Fix getting the name of closures on PHP 8.1.11+ [Translator] Fix typo "internal" / "interval" ...
* 6.0: Fix merge
* 6.1: Fix merge
* 6.2: Fix merge
* 5.4: [Notifier] composer.json cleanup [HttpKernel] AbstractSessionListener should not override the cache lifetime for private responses [DependencyInjection] Shared private services becomes public after a public service is accessed [DI] Fix undefined class in test
* 6.0: [Notifier] composer.json cleanup [HttpKernel] AbstractSessionListener should not override the cache lifetime for private responses [DependencyInjection] Shared private services becomes public after a public service is accessed [DI] Fix undefined class in test
…fig for additional debugging information (alexandre-daubois) This PR was merged into the 6.3 branch. Discussion ---------- [DependencyInjection] Add message to install symfony/config for additional debugging information | Q | A | ------------- | --- | Branch? | 6.3 | Bug fix? | no | New feature? | yes | Deprecations? | no <!-- please update UPGRADE-*.md and src/**/CHANGELOG.md files --> | Tickets | Fix #48905 | License | MIT | Doc PR | _NA_ As stated in the ticket, `symfony/config` is a dev dependency for DI component. This PR aims to improve a bit the DX when an error occurred during autowiring and when `ClassExistenceResource` is not available. Commits ------- 34ddeb6 [DependencyInjection][DX] Add message to install symfony/config for additional debugging information
This PR was merged into the 6.3 branch. Discussion ---------- Allow Usage of ContentId in html Detect usage of Content-Id in html and mark part as related, just as it would happen with a `cid:<name>` reference. | Q | A | ------------- | --- | Branch? | 6.3 <!-- see below --> | Bug fix? | no | New feature? | yes | Deprecations? | no | Tickets | | License | MIT | Doc PR | - <!-- Replace this notice by a short README for your feature/bugfix. This will help reviewers and should be a good start for the documentation. Additionally (see https://symfony.com/releases): - Always add tests and ensure they pass. - Bug fixes must be submitted against the lowest maintained branch where they apply (lowest branches are regularly merged to upper ones so they get the fixes too). - Features and deprecations must be submitted against the latest branch. - For new features, provide some code snippets to help understand usage. - Changelog entry should follow https://symfony.com/doc/current/contributing/code/conventions.html#writing-a-changelog-entry - Never break backward compatibility (see https://symfony.com/bc). --> Assumed you have a defined `Content-Id` for your attachment, as you modify and forward an id. The HTML part will already contain the reference to that id in the `cid:` reference. Which means the name is no longer part of the html body. In this case it is currently not detected that the parts are related to each other. This will be improved with this PR. I do not consider it a bug fix. The feature has a very special use case. If you consider otherwise, let me know and I will create a PR against the maintenance branch. (I already have one prepared: https://github.com/m42e/symfony/tree/allow-usage-of-content-id-in-html-5.4 Which means the feature/fix would reach more people. Please let me know what you think.) Commits ------- a5e4fc2 Allow Usage of ContentId in html
…daubois) This PR was merged into the 6.3 branch. Discussion ---------- [PhpUnitBridge] Fix `enum_exists` mock tests | Q | A | ------------- | --- | Branch? | 6.3 | Bug fix? | yes | New feature? | no <!-- please update src/**/CHANGELOG.md files --> | Deprecations? | no <!-- please update UPGRADE-*.md and src/**/CHANGELOG.md files --> | Tickets | _NA_ | License | MIT | Doc PR | _NA_ This fixes some tests broken by #48516. It seems that PHP needs the file to be required to be fully aware of the enum. Otherwise, even `\class_exists` and `\enum_exists` are returning false on `ExistingEnumReal::class`. Commits ------- 693ade3 [PhpUnitBridge] Fix `enum_exists` mock tests
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
As this is a new behavior, this PR should target 6.3 instead of 5.4.
@fabpot Is this meant independently of your comment about the new |
Closing in favor of #48940 |
@fabpot @nicolas-grekas I've created a new PR with target branch 6.3 as requested: #48940 |
@xabbuh Oh, looks like I'm blind 😂🙈 |
…rawler::innerText()` and make it return the first non-empty text (otsch) This PR was merged into the 6.3 branch. Discussion ---------- [DomCrawler] Add argument `$normalizeWhitespace` to `Crawler::innerText()` and make it return the first non-empty text This is a new PR instead of #48684 with target branch 6.3 as requested. | Q | A | ------------- | --- | Branch? | 6.3 | Bug fix? | yes | New feature? | no | Deprecations? | no | Tickets | Fix #48682 | License | MIT Commits ------- bb0c214 [DomCrawler] Add argument `$normalizeWhitespace` to `Crawler::innerText()` and make it return the first non-empty text