aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTim Starling <tstarling@wikimedia.org>2023-07-25 10:47:29 +1000
committerTim Starling <tstarling@wikimedia.org>2023-07-26 05:16:55 +0000
commit8d69f99a1afa709096c9a4addc14a42d6abacc6b (patch)
tree1e9ca9dc70273b70389a5d6a1debbf9975819b31
parent2b608a35ede101dbfe4c1195bd8776475fee722f (diff)
downloadmediawikicore-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.php3
-rw-r--r--includes/diff/DifferenceEngine.php6
-rw-r--r--includes/diff/TextSlotDiffRenderer.php19
-rw-r--r--includes/page/Article.php3
-rw-r--r--tests/phpunit/includes/diff/TextSlotDiffRendererTest.php1
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' );