diff options
author | Tim Starling <tstarling@wikimedia.org> | 2023-07-25 10:47:29 +1000 |
---|---|---|
committer | Tim Starling <tstarling@wikimedia.org> | 2023-07-26 05:16:55 +0000 |
commit | 8d69f99a1afa709096c9a4addc14a42d6abacc6b (patch) | |
tree | 1e9ca9dc70273b70389a5d6a1debbf9975819b31 | |
parent | 2b608a35ede101dbfe4c1195bd8776475fee722f (diff) | |
download | mediawikicore-8d69f99a1afa709096c9a4addc14a42d6abacc6b.tar.gz mediawikicore-8d69f99a1afa709096c9a4addc14a42d6abacc6b.zip |
Don't show the inline toggle selector on Special:MobileDiff
Have Article opt in to inline toggle switch display, so that random
callers of DifferenceEngine::showDiffPage() do not receive a
non-functional format selector.
Bug: T342158
Change-Id: Id4e38c2a20b5381e5f70b1244304da2895eaf8e7
-rw-r--r-- | includes/content/ContentHandler.php | 3 | ||||
-rw-r--r-- | includes/diff/DifferenceEngine.php | 6 | ||||
-rw-r--r-- | includes/diff/TextSlotDiffRenderer.php | 19 | ||||
-rw-r--r-- | includes/page/Article.php | 3 | ||||
-rw-r--r-- | tests/phpunit/includes/diff/TextSlotDiffRendererTest.php | 1 |
5 files changed, 29 insertions, 3 deletions
diff --git a/includes/content/ContentHandler.php b/includes/content/ContentHandler.php index 3d4b60fce347..1de61d4d37e2 100644 --- a/includes/content/ContentHandler.php +++ b/includes/content/ContentHandler.php @@ -723,6 +723,9 @@ abstract class ContentHandler { } $slotDiffRenderer->setFormat( $format ); $slotDiffRenderer->setTextDiffer( $textDiffer ); + if ( $options['inline-toggle'] ?? false ) { + $slotDiffRenderer->setInlineToggleEnabled(); + } return $slotDiffRenderer; } diff --git a/includes/diff/DifferenceEngine.php b/includes/diff/DifferenceEngine.php index 102efcd9bc5f..317ccaa38620 100644 --- a/includes/diff/DifferenceEngine.php +++ b/includes/diff/DifferenceEngine.php @@ -1499,6 +1499,9 @@ class DifferenceEngine extends ContextSource { * the site default format (table) will be used. * - expand-url: If true, put full URLs in href attributes (for action=render) * FIXME: expand-url is not a slot diff option, it is a DifferenceEngine option. + * - inline-toggle: If true, and the inline format is supported and + * $wgShowDiffToggleSwitch is true, a format selector toggle switch + * will be shown. */ public function setSlotDiffOptions( $options ) { $validatedOptions = []; @@ -1510,6 +1513,9 @@ class DifferenceEngine extends ContextSource { if ( !empty( $options['expand-url'] ) ) { $validatedOptions['expand-url'] = true; } + if ( !empty( $options['inline-toggle'] ) ) { + $validatedOptions['inline-toggle'] = true; + } $this->slotDiffOptions = $validatedOptions; } diff --git a/includes/diff/TextSlotDiffRenderer.php b/includes/diff/TextSlotDiffRenderer.php index 8387e45933a3..f839ff4c122d 100644 --- a/includes/diff/TextSlotDiffRenderer.php +++ b/includes/diff/TextSlotDiffRenderer.php @@ -75,6 +75,9 @@ class TextSlotDiffRenderer extends SlotDiffRenderer { /** @var TextDiffer|null */ private $textDiffer; + /** @var bool */ + private $inlineToggleEnabled = false; + /** @inheritDoc */ public function getExtraCacheKeys() { return $this->textDiffer->getCacheKeys( [ $this->format ] ); @@ -201,6 +204,16 @@ class TextSlotDiffRenderer extends SlotDiffRenderer { } /** + * Set a flag indicating whether the inline toggle switch is shown. + * + * @since 1.41 + * @param bool $enabled + */ + public function setInlineToggleEnabled( $enabled = true ) { + $this->inlineToggleEnabled = $enabled; + } + + /** * Get the content model ID that this renderer acts on * * @since 1.41 @@ -230,9 +243,11 @@ class TextSlotDiffRenderer extends SlotDiffRenderer { public function getTablePrefix( IContextSource $context, Title $newTitle ): array { $parts = $this->getTextDiffer()->getTablePrefixes( $this->format ); - $showDiffToggleSwitch = $context->getConfig()->get( MainConfigNames::ShowDiffToggleSwitch ); + $showDiffToggleSwitch = $this->inlineToggleEnabled + && $context->getConfig()->get( MainConfigNames::ShowDiffToggleSwitch ) + && $this->getTextDiffer()->hasFormat( 'inline' ); // If we support the inline type, add a toggle switch - if ( $showDiffToggleSwitch && $this->getTextDiffer()->hasFormat( 'inline' ) ) { + if ( $showDiffToggleSwitch ) { $values = $context->getRequest()->getValues(); $isInlineDiffType = $this->format === 'inline'; unset( $values[ 'diff-type' ] ); diff --git a/includes/page/Article.php b/includes/page/Article.php index ec61e3933138..7ca0de3eab83 100644 --- a/includes/page/Article.php +++ b/includes/page/Article.php @@ -964,7 +964,8 @@ class Article implements Page { $de->setSlotDiffOptions( [ 'diff-type' => $diffType, - 'expand-url' => $this->viewIsRenderAction + 'expand-url' => $this->viewIsRenderAction, + 'inline-toggle' => true, ] ); $de->showDiffPage( $this->isDiffOnlyView() ); diff --git a/tests/phpunit/includes/diff/TextSlotDiffRendererTest.php b/tests/phpunit/includes/diff/TextSlotDiffRendererTest.php index 357ea76d6b89..25726dc9b216 100644 --- a/tests/phpunit/includes/diff/TextSlotDiffRendererTest.php +++ b/tests/phpunit/includes/diff/TextSlotDiffRendererTest.php @@ -200,6 +200,7 @@ class TextSlotDiffRendererTest extends MediaWikiIntegrationTestCase { $slotDiffRenderer = $this->getTextSlotDiffRenderer( 'qqx' ); $slotDiffRenderer->setHookContainer( $this->createHookContainer() ); $slotDiffRenderer->setEngine( $engine ); + $slotDiffRenderer->setInlineToggleEnabled(); $context = new RequestContext; $context->setLanguage( 'qqx' ); |