Skip to content

Skip source-view modal in default template when include-source is disabled#4119

Merged
jaapio merged 1 commit into
phpDocumentor:masterfrom
lacatoire:fix/source-modal-respect-include-source
May 10, 2026
Merged

Skip source-view modal in default template when include-source is disabled#4119
jaapio merged 1 commit into
phpDocumentor:masterfrom
lacatoire:fix/source-modal-respect-include-source

Conversation

@lacatoire
Copy link
Copy Markdown
Contributor

@lacatoire lacatoire commented Apr 20, 2026

Fixes #4024.

Bug observé

Le template default injecte inconditionnellement la modal source-view (<div class="phpdocumentor-modal" id="source-view">) et son loader script sur chaque page class/interface/trait/enum/file/namespace/package. Quand include-source est à false (défaut selon data/xsd/phpdoc.xsd), aucun .txt source n'est écrit par Transformer/Writer/Sourcecode.php, et la modal pointe dans le vide.

Bug latent découvert en cours de fix

ProjectDescriptor::Settings::includeSource() / excludeSource() existent mais ne sont jamais appelés depuis src/ en production. Seule la branche tests/ les utilise. Résultat : project.settings.shouldIncludeSource renvoyait toujours false quel que soit le contenu de phpdoc.xml. Le template clean utilise déjà ce guard (data/templates/clean/class.html.twig:20), donc le source viewer de clean ne s'appliquait lui aussi plus en 3.x.

Fix complet

  1. ParseFiles::__invoke() (src/phpDocumentor/Pipeline/Stage/Parser/ParseFiles.php) : propage maintenant include-source de l'ApiSpecification vers ProjectDescriptor::Settings via le builder, en miroir du setVisibility existant.
  2. ProjectDescriptorBuilder::setIncludeSource(bool) (nouvelle méthode) : appelle Settings::includeSource() / excludeSource() selon la valeur booléenne propagée.
  3. data/templates/default/components/source-modal.html.twig : wrap les deux blocs (sourceview_modal et modals_script) dans {% if project.settings.shouldIncludeSource %}...{% endif %}. Rien n'est émis quand la config ne demande pas le source viewer.

Conséquence : avec include-source: true, la modal est rendue et fonctionne. Avec include-source: false ou absent, la modal (et son JS) ne partent pas dans la sortie HTML.

Tests

  • Nouveau test ProjectDescriptorBuilderTest::testSetIncludeSourceTogglesTheProjectSetting : vérifie que setIncludeSource(true|false) flippe correctement Settings::shouldIncludeSource().
  • Les 337 tests existants de tests/unit/phpDocumentor/Descriptor/ et tests/unit/phpDocumentor/Pipeline/ passent.

@lacatoire lacatoire force-pushed the fix/source-modal-respect-include-source branch from 9459af4 to 94cab2b Compare April 20, 2026 16:03
@jaapio jaapio merged commit ecc7730 into phpDocumentor:master May 10, 2026
116 checks passed
@jaapio
Copy link
Copy Markdown
Member

jaapio commented May 10, 2026

Thank you for this fix!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

A link to intern text file is added

2 participants