Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 9
0.00% covered (danger)
0.00%
0 / 1
CRAP
0.00% covered (danger)
0.00%
0 / 1
ZObjectContentDifferenceEngine
0.00% covered (danger)
0.00%
0 / 9
0.00% covered (danger)
0.00%
0 / 1
12
0.00% covered (danger)
0.00%
0 / 1
 generateContentDiffBody
0.00% covered (danger)
0.00%
0 / 9
0.00% covered (danger)
0.00%
0 / 1
12
1<?php
2/**
3 * WikiLambda ZObjectContentDifferenceEngine
4 *
5 * @file
6 * @ingroup Extensions
7 * @copyright 2020– Abstract Wikipedia team; see AUTHORS.txt
8 * @license MIT
9 */
10
11namespace MediaWiki\Extension\WikiLambda\ZObjectContent;
12
13use MediaWiki\Content\Content;
14use MediaWiki\Diff\DifferenceEngine;
15use MediaWiki\Diff\TextSlotDiffRenderer;
16
17class ZObjectContentDifferenceEngine extends DifferenceEngine {
18
19    /**
20     * @inheritDoc
21     */
22    public function generateContentDiffBody( Content $oldContent, Content $newContent ) {
23        if ( !( $oldContent instanceof ZObjectContent && $newContent instanceof ZObjectContent ) ) {
24            $this->getOutput()->showErrorPage( 'errorpagetitle', 'wikilambda-diff-incompatible' );
25            return '';
26        }
27
28        // TODO (T284473): Instead of this text diff, generate and return html body of the diff page
29        // $slotRenderer = new ZObjectSlotDiffRenderer();
30        // $diffObject = $slotRenderer->getDiff( $oldContent, $newContent );
31
32        // HACK (T339348): For now, provide users with the raw JSON diff
33        $oldText = $oldContent->getText();
34        $newText = $newContent->getText();
35
36        $zObjectContentHandler = $newContent->getContentHandler();
37        '@phan-var ZObjectContentHandler $zObjectContentHandler';
38
39        $slotDiffRenderer = $zObjectContentHandler
40            ->getSlotDiffRendererWithOptions( $this->getContext() );
41        '@phan-var TextSlotDiffRenderer $slotDiffRenderer';
42
43        return $slotDiffRenderer->getTextDiff( $oldText, $newText );
44    }
45}