mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/TemplateStyles
synced 2024-12-01 03:16:45 +00:00
3b337af58d
Change-Id: I7f64539f1c9c4c03088e28e99f77a9acc503f627
45 lines
1.3 KiB
PHP
45 lines
1.3 KiB
PHP
<?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() );
|
|
}
|
|
}
|