X-Git-Url: https://scripts.mit.edu/gitweb/autoinstallsdev/mediawiki.git/blobdiff_plain/19e297c21b10b1b8a3acad5e73fc71dcb35db44a..6932310fd58ebef145fa01eb76edf7150284d8ea:/vendor/wikimedia/css-sanitizer/src/Sanitizer/MediaAtRuleSanitizer.php diff --git a/vendor/wikimedia/css-sanitizer/src/Sanitizer/MediaAtRuleSanitizer.php b/vendor/wikimedia/css-sanitizer/src/Sanitizer/MediaAtRuleSanitizer.php new file mode 100644 index 00000000..ba9fb11d --- /dev/null +++ b/vendor/wikimedia/css-sanitizer/src/Sanitizer/MediaAtRuleSanitizer.php @@ -0,0 +1,84 @@ +mediaQueryListMatcher = $mediaQueryListMatcher; + } + + /** + * Access the list of rule sanitizers + * @return RuleSanitizer[] + */ + public function getRuleSanitizers() { + return $this->ruleSanitizers; + } + + /** + * Set the list of rule sanitizers + * @param RuleSanitizer[] $ruleSanitizers + */ + public function setRuleSanitizers( array $ruleSanitizers ) { + Util::assertAllInstanceOf( $ruleSanitizers, RuleSanitizer::class, '$ruleSanitizers' ); + $this->ruleSanitizers = $ruleSanitizers; + } + + public function handlesRule( Rule $rule ) { + return $rule instanceof AtRule && !strcasecmp( $rule->getName(), 'media' ); + } + + protected function doSanitize( CSSObject $object ) { + if ( !$object instanceof Rule || !$this->handlesRule( $object ) ) { + $this->sanitizationError( 'expected-at-rule', $object, [ 'media' ] ); + return null; + } + + if ( $object->getBlock() === null ) { + $this->sanitizationError( 'at-rule-block-required', $object, [ 'media' ] ); + return null; + } + + // Test the media query + $match = $this->mediaQueryListMatcher->match( + $object->getPrelude(), [ 'mark-significance' => true ] + ); + if ( !$match ) { + $cv = Util::findFirstNonWhitespace( $object->getPrelude() ) ?: $object->getPrelude(); + $this->sanitizationError( 'invalid-media-query', $cv ); + return null; + } + + $ret = clone( $object ); + $this->fixPreludeWhitespace( $ret, false ); + $this->sanitizeRuleBlock( $ret->getBlock(), $this->ruleSanitizers ); + + return $ret; + } +}