Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 22
0.00% covered (danger)
0.00%
0 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 1
BehaviorSwitchHandler
0.00% covered (danger)
0.00%
0 / 22
0.00% covered (danger)
0.00%
0 / 3
56
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 onBehaviorSwitch
0.00% covered (danger)
0.00%
0 / 20
0.00% covered (danger)
0.00%
0 / 1
20
 onTag
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
6
1<?php
2declare( strict_types = 1 );
3
4namespace Wikimedia\Parsoid\Wt2Html\TT;
5
6use Wikimedia\Parsoid\Tokens\KV;
7use Wikimedia\Parsoid\Tokens\SelfclosingTagTk;
8use Wikimedia\Parsoid\Tokens\Token;
9use Wikimedia\Parsoid\Tokens\XMLTagTk;
10use Wikimedia\Parsoid\Wt2Html\TokenHandlerPipeline;
11
12/**
13 * Handler for behavior switches, like '__TOC__' and similar.
14 */
15class BehaviorSwitchHandler extends XMLTagBasedHandler {
16
17    public function __construct( TokenHandlerPipeline $manager, array $options ) {
18        parent::__construct( $manager, $options );
19    }
20
21    private const OUTPUT_FLAG_FROM_BEHAVIOR_SWITCH = [
22        // ParserOutputFlags::NO_GALLERY
23        'nogallery' => 'mw-NoGallery',
24
25        // ParserOutputFlags::NEW_SECTION
26        'newsectionlink' => 'mw-NewSection',
27
28        // ParserOutputFlags::HIDE_NEW_SECTION
29        'nonewsectionlink' => 'mw-HideNewSection',
30
31        // ParserOutputFlags::NO_SECTION_EDIT_LINKS
32        'noeditsection' => 'no-section-edit-links',
33    ];
34
35    /**
36     * Main handler.
37     * See {@link TokenHandlerPipeline#addTransform}'s transformation parameter.
38     *
39     * @return list<SelfclosingTagTk>
40     */
41    public function onBehaviorSwitch( Token $token ): array {
42        $env = $this->env;
43        $magicWord = $token->attribs[0]->v;
44        $env->setBehaviorSwitch( $magicWord, true );
45        if ( isset( self::OUTPUT_FLAG_FROM_BEHAVIOR_SWITCH[$magicWord] ) ) {
46            $env->getMetadata()->setOutputFlag(
47                self::OUTPUT_FLAG_FROM_BEHAVIOR_SWITCH[$magicWord], true
48            );
49        }
50        if (
51            $magicWord === 'hiddencat' &&
52            $env->getPageConfig()->getLinkTarget()->getNamespace() === 14 // NS_CATEGORY
53        ) {
54            $env->getDataAccess()->addTrackingCategory(
55                $env->getPageConfig(),
56                $env->getMetadata(),
57                'hidden-category-category'
58            );
59        }
60        $metaToken = new SelfclosingTagTk(
61            'meta',
62            [ new KV( 'property', 'mw:PageProp/' . $magicWord ) ],
63            clone $token->dataParsoid
64        );
65        return [ $metaToken ];
66    }
67
68    /**
69     * @inheritDoc
70     */
71    public function onTag( XMLTagTk $token ): ?array {
72        return $token->getName() === 'behavior-switch' ? $this->onBehaviorSwitch( $token ) : null;
73    }
74}