Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
CRAP
100.00% covered (success)
100.00%
11 / 11
TemplateStylesFontFaceAtRuleSanitizer
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
11 / 11
 __construct
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
11 / 11
<?php
namespace MediaWiki\Extension\TemplateStyles;
/**
 * @file
 * @license GPL-2.0-or-later
 */
use Wikimedia\CSS\Grammar\Alternative;
use Wikimedia\CSS\Grammar\Juxtaposition;
use Wikimedia\CSS\Grammar\MatcherFactory;
use Wikimedia\CSS\Grammar\Quantifier;
use Wikimedia\CSS\Grammar\TokenMatcher;
use Wikimedia\CSS\Objects\Token;
use Wikimedia\CSS\Sanitizer\FontFaceAtRuleSanitizer;
/**
 * Extend the standard `@font-face` matcher to require a prefix on families.
 */
class TemplateStylesFontFaceAtRuleSanitizer extends FontFaceAtRuleSanitizer {
    /**
     * @param MatcherFactory $matcherFactory
     */
    public function __construct( MatcherFactory $matcherFactory ) {
        parent::__construct( $matcherFactory );
        // Only allow the font-family if it begins with "TemplateStyles"
        $this->propertySanitizer->setKnownProperties( [
            'font-family' => new Alternative( [
                new TokenMatcher( Token::T_STRING, static function ( Token $t ) {
                    return substr( $t->value(), 0, 14 ) === 'TemplateStyles';
                } ),
                new Juxtaposition( [
                    new TokenMatcher( Token::T_IDENT, static function ( Token $t ) {
                        return substr( $t->value(), 0, 14 ) === 'TemplateStyles';
                    } ),
                    Quantifier::star( $matcherFactory->ident() ),
                ] ),
            ] ),
        ] + $this->propertySanitizer->getKnownProperties() );
    }
}