&.mw-halign-center {
margin: 0 auto 0.5em auto;
display: table;
+ border-collapse: collapse;
clear: none;
float: none;
}
+ /* Hide the caption for frameless and plain floated images */
> figcaption {
- display: table-caption;
- caption-side: bottom;
- /* In mw-core the font-size is duplicated, 94% in thumbiner
- * and again 94% in thumbcaption. 88.4% for font size of the
- * caption results in the same behavior. */
- font-size: 88.4%;
- line-height: 1.4em;
- text-align: left;
-
- border: 1px solid #c8ccd1;
- border-top: 0;
-
- /* taken from .thumbcaption, plus .thumbinner */
- padding: 0 6px 6px 6px;
- background-color: #f8f9fa;
-
- table {
- /* reset caption side for tables inside figcaptions */
- caption-side: top;
- }
+ display: none;
}
}
figure[typeof~='mw:Video/Frame'],
figure[typeof~='mw:Audio/Frame'] {
display: table;
- overflow: auto;
text-align: center;
border: 1px solid #c8ccd1;
- border-bottom: 0; // No border to caption
- border-collapse: collapse;
+ border-collapse: separate;
+ border-spacing: 3px;
background-color: #f8f9fa;
+ width: 1px; // From https://stackoverflow.com/a/6536025
+
+ // Avoid !important
+ &.mw-halign-center {
+ border-collapse: separate;
+ }
+
// Default to right alignment. This is needed since Parsoid only specifies the
// alignment class when the alignment is explicitly set.
margin: 0.5em 0 1.3em 1.4em;
> img,
> video {
border: 1px solid #c8ccd1;
- margin: 3px;
background: #fff;
}
}
+
+ > figcaption {
+ display: block;
+
+ /* In mw-core the font-size is duplicated, 94% in thumbiner
+ * and again 94% in thumbcaption. 88.4% for font size of the
+ * caption results in the same behavior. */
+ font-size: 88.4%;
+ line-height: 1.4em;
+ text-align: left;
+
+ /* taken from .thumbcaption, plus .thumbinner */
+ padding: 3px;
+ }
+}
+
+figure[typeof*='mw:Image/Thumb'],
+figure[typeof*='mw:Video/Thumb'],
+figure[typeof*='mw:Audio/Thumb'] {
+ > a:after {
+ content: '';
+ width: 15px;
+ height: 11px;
+ margin: 3px;
+ margin-bottom: 0;
+
+ .mw-content-ltr & {
+ /* @noflip */
+ float: right;
+ /* @noflip */
+ background-image: url( images/magnify-clip-ltr.png );
+ /* @noflip */
+ background-image: linear-gradient( transparent, transparent ), url( images/magnify-clip-ltr.svg );
+ }
+
+ .mw-content-rtl & {
+ /* @noflip */
+ float: left;
+ /* @noflip */
+ background-image: url( images/magnify-clip-rtl.png );
+ /* @noflip */
+ background-image: linear-gradient( transparent, transparent ), url( images/magnify-clip-rtl.svg );
+ }
+ }
}
/* Same as img.thumbborder in content.css */
border: 1px solid #eaecf0;
}
}
-
-/* Hide the caption for frameless and plain floated images */
-figure[typeof~='mw:Image/Frameless'],
-figure[typeof~='mw:Video/Frameless'],
-figure[typeof~='mw:Audio/Frameless'],
-figure[typeof~='mw:Image'],
-figure[typeof~='mw:Video'],
-figure[typeof~='mw:Audio'] {
- > figcaption {
- display: none;
- }
-}
<?php
+/*
+ * @group Media
+ * @covers MimeAnalyzer
+ */
class MimeMagicTest extends PHPUnit_Framework_TestCase {
/** @var MimeAnalyzer */
private $mimeAnalyzer;
parent::setUp();
}
+ function doGuessMimeType( array $parameters = [] ) {
+ $class = new ReflectionClass( get_class( $this->mimeAnalyzer ) );
+ $method = $class->getMethod( 'doGuessMimeType' );
+ $method->setAccessible( true );
+ return $method->invokeArgs( $this->mimeAnalyzer, $parameters );
+ }
+
/**
* @dataProvider providerImproveTypeFromExtension
* @param string $ext File extension (no leading dot)
$actualType = $this->mimeAnalyzer->getMediaType( $oggFile, 'application/ogg' );
$this->assertEquals( MEDIATYPE_AUDIO, $actualType );
}
+
+ /**
+ * Test to make sure that mp3 files are detected as audio type
+ */
+ function testMP3AsAudio() {
+ $file = __DIR__ . '/../../../data/media/say-test-with-id3.mp3';
+ $actualType = $this->mimeAnalyzer->getMediaType( $file );
+ $this->assertEquals( MEDIATYPE_AUDIO, $actualType );
+ }
+
+ /**
+ * Test to make sure that MP3 with id3 tag is recognized
+ */
+ function testMP3WithID3Recognize() {
+ $file = __DIR__ . '/../../../data/media/say-test-with-id3.mp3';
+ $actualType = $this->doGuessMimeType( [ $file, 'mp3' ] );
+ $this->assertEquals( 'audio/mpeg', $actualType );
+ }
+
+ /**
+ * Test to make sure that MP3 without id3 tag is recognized (MPEG-1 sample rates)
+ */
+ function testMP3NoID3RecognizeMPEG1() {
+ $file = __DIR__ . '/../../../data/media/say-test-mpeg1.mp3';
+ $actualType = $this->doGuessMimeType( [ $file, 'mp3' ] );
+ $this->assertEquals( 'audio/mpeg', $actualType );
+ }
+
+ /**
+ * Test to make sure that MP3 without id3 tag is recognized (MPEG-2 sample rates)
+ */
+ function testMP3NoID3RecognizeMPEG2() {
+ $file = __DIR__ . '/../../../data/media/say-test-mpeg2.mp3';
+ $actualType = $this->doGuessMimeType( [ $file, 'mp3' ] );
+ $this->assertEquals( 'audio/mpeg', $actualType );
+ }
+
+ /**
+ * Test to make sure that MP3 without id3 tag is recognized (MPEG-2.5 sample rates)
+ */
+ function testMP3NoID3RecognizeMPEG2_5() {
+ $file = __DIR__ . '/../../../data/media/say-test-mpeg2.5.mp3';
+ $actualType = $this->doGuessMimeType( [ $file, 'mp3' ] );
+ $this->assertEquals( 'audio/mpeg', $actualType );
+ }
}