Merge "Return HTTP 500 not 200 from thumb.php when streaming fails"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Fri, 13 Mar 2015 08:44:02 +0000 (08:44 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Fri, 13 Mar 2015 08:44:02 +0000 (08:44 +0000)
35 files changed:
includes/DefaultSettings.php
includes/TemplateParser.php
includes/Title.php
includes/content/AbstractContent.php
includes/content/Content.php
includes/diff/TableDiffFormatter.php
includes/filerepo/file/File.php
includes/jobqueue/JobQueueFederated.php
includes/media/ExifBitmap.php
includes/media/GIF.php
includes/media/MediaHandler.php
includes/media/PNG.php
includes/media/SVG.php
includes/page/ImagePage.php
includes/page/WikiPage.php
includes/resourceloader/ResourceLoaderSkinModule.php
resources/lib/oojs-ui/oojs-ui-mediawiki-icons-alerts.css
resources/lib/oojs-ui/oojs-ui-mediawiki-icons-content.css
resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-advanced.css
resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-core.css
resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-list.css
resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-styling.css
resources/lib/oojs-ui/oojs-ui-mediawiki-icons-interactions.css
resources/lib/oojs-ui/oojs-ui-mediawiki-icons-layout.css
resources/lib/oojs-ui/oojs-ui-mediawiki-icons-location.css
resources/lib/oojs-ui/oojs-ui-mediawiki-icons-media.css
resources/lib/oojs-ui/oojs-ui-mediawiki-icons-moderation.css
resources/lib/oojs-ui/oojs-ui-mediawiki-icons-movement.css
resources/lib/oojs-ui/oojs-ui-mediawiki-icons-user.css
resources/lib/oojs-ui/oojs-ui-mediawiki-icons-wikimedia.css
resources/lib/oojs-ui/oojs-ui-mediawiki.css
resources/lib/oojs-ui/oojs-ui-mediawiki.js
resources/lib/oojs-ui/oojs-ui.js
tests/qunit/suites/resources/jquery/jquery.byteLimit.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.test.js

index 52c0eab..8a4769d 100644 (file)
@@ -257,6 +257,23 @@ $wgFileCacheDirectory = false;
  */
 $wgLogo = false;
 
+/**
+ * Array with URL paths to HD versions of the wiki logo. The scaled logo size
+ * should be under 135x155 pixels.
+ * Only 1.5x and 2x versions are supported.
+ *
+ * @par Example:
+ * @code
+ * $wgLogoHD = array(
+ *     "1.5x" => "path/to/1.5x_version.png",
+ *     "2x" => "path/to/2x_version.png"
+ * );
+ * @endcode
+ *
+ * @since 1.25
+ */
+$wgLogoHD = false;
+
 /**
  * The URL path of the shortcut icon.
  * @since 1.6
index 0dbf2c7..a22f280 100644 (file)
@@ -49,7 +49,7 @@ class TemplateParser {
         * Constructs the location of the the source Mustache template
         * @param string $templateName The name of the template
         * @return string
-        * @throws Exception Disallows upwards directory traversal via $templateName
+        * @throws UnexpectedValueException Disallows upwards directory traversal via $templateName
         */
        public function getTemplateFilename( $templateName ) {
                // Prevent upwards directory traversal using same methods as Title::secureAndSplit
@@ -65,7 +65,7 @@ class TemplateParser {
                                substr( $templateName, -3 ) === '/..'
                        )
                ) {
-                       throw new Exception( "Malformed \$templateName: $templateName" );
+                       throw new UnexpectedValueException( "Malformed \$templateName: $templateName" );
                }
 
                return "{$this->templateDir}/{$templateName}.mustache";
@@ -75,7 +75,7 @@ class TemplateParser {
         * Returns a given template function if found, otherwise throws an exception.
         * @param string $templateName The name of the template (without file suffix)
         * @return Function
-        * @throws Exception
+        * @throws RuntimeException
         */
        public function getTemplate( $templateName ) {
                // If a renderer has already been defined for this template, reuse it
@@ -86,7 +86,7 @@ class TemplateParser {
                $filename = $this->getTemplateFilename( $templateName );
 
                if ( !file_exists( $filename ) ) {
-                       throw new Exception( "Could not locate template: {$filename}" );
+                       throw new RuntimeException( "Could not locate template: {$filename}" );
                }
 
                // Read the template file
@@ -143,14 +143,14 @@ class TemplateParser {
         * @param string $fileContents Mustache code
         * @param string $filename Name of the template
         * @return string PHP code (without '<?php')
-        * @throws Exception
+        * @throws RuntimeException
         */
        public function compileForEval( $fileContents, $filename ) {
                // Compile the template into PHP code
                $code = self::compile( $fileContents );
 
                if ( !$code ) {
-                       throw new Exception( "Could not compile template: {$filename}" );
+                       throw new RuntimeException( "Could not compile template: {$filename}" );
                }
 
                // Strip the "<?php" added by lightncandy so that it can be eval()ed
@@ -165,11 +165,11 @@ class TemplateParser {
         * Compile the Mustache code into PHP code using LightnCandy
         * @param string $code Mustache code
         * @return string PHP code (with '<?php')
-        * @throws Exception
+        * @throws RuntimeException
         */
        public static function compile( $code ) {
                if ( !class_exists( 'LightnCandy' ) ) {
-                       throw new Exception( 'LightnCandy class not defined' );
+                       throw new RuntimeException( 'LightnCandy class not defined' );
                }
                return LightnCandy::compile(
                        $code,
index 36237ed..f47300c 100644 (file)
@@ -4680,34 +4680,64 @@ class Title {
        public function getEditNotices( $oldid = 0 ) {
                $notices = array();
 
-               # Optional notices on a per-namespace and per-page basis
+               // Optional notice for the entire namespace
                $editnotice_ns = 'editnotice-' . $this->getNamespace();
-               $editnotice_ns_message = wfMessage( $editnotice_ns );
-               if ( $editnotice_ns_message->exists() ) {
-                       $notices[$editnotice_ns] = '<div class="mw-editnotice mw-editnotice-namespace ' .
-                               Sanitizer::escapeClass( "mw-$editnotice_ns" ) . '">' .
-                               $editnotice_ns_message->parseAsBlock() . '</div>';
+               $msg = wfMessage( $editnotice_ns );
+               if ( $msg->exists() ) {
+                       $html = $msg->parseAsBlock();
+                       // Edit notices may have complex logic, but output nothing (T91715)
+                       if ( trim( $html ) !== '' ) {
+                               $notices[$editnotice_ns] = Html::rawElement(
+                                       'div',
+                                       array( 'class' => array(
+                                               'mw-editnotice',
+                                               'mw-editnotice-namespace',
+                                               Sanitizer::escapeClass( "mw-$editnotice_ns" )
+                                       ) ),
+                                       $html
+                               );
+                       }
                }
+
                if ( MWNamespace::hasSubpages( $this->getNamespace() ) ) {
+                       // Optional notice for page itself and any parent page
                        $parts = explode( '/', $this->getDBkey() );
                        $editnotice_base = $editnotice_ns;
                        while ( count( $parts ) > 0 ) {
                                $editnotice_base .= '-' . array_shift( $parts );
-                               $editnotice_base_msg = wfMessage( $editnotice_base );
-                               if ( $editnotice_base_msg->exists() ) {
-                                       $notices[$editnotice_base] = '<div class="mw-editnotice mw-editnotice-base ' .
-                                               Sanitizer::escapeClass( "mw-$editnotice_base" ) . '">' .
-                                               $editnotice_base_msg->parseAsBlock() . '</div>';
+                               $msg = wfMessage( $editnotice_base );
+                               if ( $msg->exists() ) {
+                                       $html = $msg->parseAsBlock();
+                                       if ( trim( $html ) !== '' ) {
+                                               $notices[$editnotice_base] = Html::rawElement(
+                                                       'div',
+                                                       array( 'class' => array(
+                                                               'mw-editnotice',
+                                                               'mw-editnotice-base',
+                                                               Sanitizer::escapeClass( "mw-$editnotice_base" )
+                                                       ) ),
+                                                       $html
+                                               );
+                                       }
                                }
                        }
                } else {
-                       # Even if there are no subpages in namespace, we still don't want / in MW ns.
+                       // Even if there are no subpages in namespace, we still don't want "/" in MediaWiki message keys
                        $editnoticeText = $editnotice_ns . '-' . str_replace( '/', '-', $this->getDBkey() );
-                       $editnoticeMsg = wfMessage( $editnoticeText );
-                       if ( $editnoticeMsg->exists() ) {
-                               $notices[$editnoticeText] = '<div class="mw-editnotice mw-editnotice-page ' .
-                                       Sanitizer::escapeClass( "mw-$editnoticeText" ) . '">' .
-                                       $editnoticeMsg->parseAsBlock() . '</div>';
+                       $msg = wfMessage( $editnoticeText );
+                       if ( $msg->exists() ) {
+                               $html = $msg->parseAsBlock();
+                               if ( trim( $html ) !== '' ) {
+                                       $notices[$editnoticeText] = Html::rawElement(
+                                               'div',
+                                               array( 'class' => array(
+                                                       'mw-editnotice',
+                                                       'mw-editnotice-page',
+                                                       Sanitizer::escapeClass( "mw-$editnoticeText" )
+                                               ) ),
+                                               $html
+                                       );
+                               }
                        }
                }
 
index d8fca4d..6542d7d 100644 (file)
@@ -393,7 +393,7 @@ abstract class AbstractContent implements Content {
         *
         * @see Content::prepareSave
         */
-       public function prepareSave( WikiPage $page, $flags, $baseRevId, User $user ) {
+       public function prepareSave( WikiPage $page, $flags, $parentRevId, User $user ) {
                if ( $this->isValid() ) {
                        return Status::newGood();
                } else {
index 5823a9a..8ed761f 100644 (file)
@@ -464,7 +464,7 @@ interface Content {
         *
         * @param WikiPage $page The page to be saved.
         * @param int $flags Bitfield for use with EDIT_XXX constants, see WikiPage::doEditContent()
-        * @param int $baseRevId The ID of the current revision
+        * @param int $parentRevId The ID of the current revision
         * @param User $user
         *
         * @return Status A status object indicating whether the content was
@@ -473,7 +473,7 @@ interface Content {
         *
         * @see WikiPage::doEditContent()
         */
-       public function prepareSave( WikiPage $page, $flags, $baseRevId, User $user );
+       public function prepareSave( WikiPage $page, $flags, $parentRevId, User $user );
 
        /**
         * Returns a list of updates to perform when this content is deleted.
index e5155bf..5d0183f 100644 (file)
@@ -62,7 +62,7 @@ class TableDiffFormatter extends DiffFormatter {
        protected function blockHeader( $xbeg, $xlen, $ybeg, $ylen ) {
                // '<!--LINE \d+ -->' get replaced by a localised line number
                // in DifferenceEngine::localiseLineNumbers
-               $r = '<tr><td colspan="2" class="diff-lineno"><!--LINE ' . $xbeg . "--></td>\n" .
+               $r = '<tr><td colspan="2" class="diff-lineno" id="L' . $xbeg . '" ><!--LINE ' . $xbeg . "--></td>\n" .
                        '<td colspan="2" class="diff-lineno"><!--LINE ' . $ybeg . "--></td></tr>\n";
 
                return $r;
index 4fd332b..6edd6fc 100644 (file)
@@ -1777,14 +1777,15 @@ abstract class File implements IDBAccessObject {
        }
 
        /**
+        * @param bool|IContextSource $context Context to use (optional)
         * @return bool
         */
-       function formatMetadata() {
+       function formatMetadata( $context = false ) {
                if ( !$this->getHandler() ) {
                        return false;
                }
 
-               return $this->getHandler()->formatMetadata( $this, $this->getMetadata() );
+               return $this->getHandler()->formatMetadata( $this, $context );
        }
 
        /**
index a0a4b7b..66bbb9c 100644 (file)
@@ -132,7 +132,13 @@ class JobQueueFederated extends JobQueue {
        }
 
        protected function supportsDelayedJobs() {
-               return true; // defer checks to the partitions
+               foreach ( $this->partitionQueues as $queue ) {
+                       if ( !$queue->supportsDelayedJobs() ) {
+                               return false;
+                       }
+               }
+
+               return true;
        }
 
        protected function doIsEmpty() {
index b7657cb..f56a947 100644 (file)
@@ -125,15 +125,16 @@ class ExifBitmapHandler extends BitmapHandler {
 
        /**
         * @param File $image
+        * @param bool|IContextSource $context Context to use (optional)
         * @return array|bool
         */
-       function formatMetadata( $image ) {
+       function formatMetadata( $image, $context = false ) {
                $meta = $this->getCommonMetaArray( $image );
                if ( count( $meta ) === 0 ) {
                        return false;
                }
 
-               return $this->formatMetadataHelper( $meta );
+               return $this->formatMetadataHelper( $meta, $context );
        }
 
        public function getCommonMetaArray( File $file ) {
index 5992be1..e3621fb 100644 (file)
@@ -44,15 +44,16 @@ class GIFHandler extends BitmapHandler {
 
        /**
         * @param File $image
+        * @param bool|IContextSource $context Context to use (optional)
         * @return array|bool
         */
-       function formatMetadata( $image ) {
+       function formatMetadata( $image, $context = false ) {
                $meta = $this->getCommonMetaArray( $image );
                if ( count( $meta ) === 0 ) {
                        return false;
                }
 
-               return $this->formatMetadataHelper( $meta );
+               return $this->formatMetadataHelper( $meta, $context );
        }
 
        /**
index b88a1b1..0103946 100644 (file)
@@ -507,9 +507,10 @@ abstract class MediaHandler {
         * to some standard. That makes it possible to do things like visual
         * indication of grouped and chained streams in ogg container files.
         * @param File $image
+        * @param bool|IContextSource $context Context to use (optional)
         * @return array|bool
         */
-       function formatMetadata( $image ) {
+       function formatMetadata( $image, $context = false ) {
                return false;
        }
 
@@ -520,15 +521,16 @@ abstract class MediaHandler {
         * This is used by the media handlers that use the FormatMetadata class
         *
         * @param array $metadataArray Metadata array
+        * @param bool|IContextSource $context Context to use (optional)
         * @return array Array for use displaying metadata.
         */
-       function formatMetadataHelper( $metadataArray ) {
+       function formatMetadataHelper( $metadataArray, $context = false ) {
                $result = array(
                        'visible' => array(),
                        'collapsed' => array()
                );
 
-               $formatted = FormatMetadata::getFormattedData( $metadataArray );
+               $formatted = FormatMetadata::getFormattedData( $metadataArray, $context );
                // Sort fields into visible and collapsed
                $visibleFields = $this->visibleMetadataFields();
                foreach ( $formatted as $name => $value ) {
index 3cf8488..5f1aca5 100644 (file)
@@ -49,15 +49,16 @@ class PNGHandler extends BitmapHandler {
 
        /**
         * @param File $image
+        * @param bool|IContextSource $context Context to use (optional)
         * @return array|bool
         */
-       function formatMetadata( $image ) {
+       function formatMetadata( $image, $context = false ) {
                $meta = $this->getCommonMetaArray( $image );
                if ( count( $meta ) === 0 ) {
                        return false;
                }
 
-               return $this->formatMetadataHelper( $meta );
+               return $this->formatMetadataHelper( $meta, $context );
        }
 
        /**
index 53abfef..0618f7e 100644 (file)
@@ -410,9 +410,10 @@ class SvgHandler extends ImageHandler {
 
        /**
         * @param File $file
+        * @param bool|IContextSource $context Context to use (optional)
         * @return array|bool
         */
-       function formatMetadata( $file ) {
+       function formatMetadata( $file, $context = false ) {
                $result = array(
                        'visible' => array(),
                        'collapsed' => array()
index 855f233..504fa74 100644 (file)
@@ -140,7 +140,7 @@ class ImagePage extends Article {
 
                if ( $wgShowEXIF && $this->displayImg->exists() ) {
                        // @todo FIXME: Bad interface, see note on MediaHandler::formatMetadata().
-                       $formattedMetadata = $this->displayImg->formatMetadata();
+                       $formattedMetadata = $this->displayImg->formatMetadata( $this->getContext() );
                        $showmeta = $formattedMetadata !== false;
                } else {
                        $showmeta = false;
index b1e4f2d..285611d 100644 (file)
@@ -1608,7 +1608,9 @@ class WikiPage implements Page, IDBAccessObject {
         * error will be returned. These two conditions are also possible with
         * auto-detection due to MediaWiki's performance-optimised locking strategy.
         *
-        * @param bool|int $baseRevId The revision ID this edit was based off, if any
+        * @param bool|int $baseRevId The revision ID this edit was based off, if any.
+        *   This is not the parent revision ID, rather the revision ID for older
+        *   content used as the source for a rollback, for example.
         * @param User $user The user doing the edit
         *
         * @throws MWException
@@ -1668,7 +1670,9 @@ class WikiPage implements Page, IDBAccessObject {
         * error will be returned. These two conditions are also possible with
         * auto-detection due to MediaWiki's performance-optimised locking strategy.
         *
-        * @param bool|int $baseRevId The revision ID this edit was based off, if any
+        * @param bool|int $baseRevId The revision ID this edit was based off, if any.
+        *   This is not the parent revision ID, rather the revision ID for older
+        *   content used as the source for a rollback, for example.
         * @param User $user The user doing the edit
         * @param string $serialFormat Format for storing the content in the
         *   database.
@@ -1802,7 +1806,7 @@ class WikiPage implements Page, IDBAccessObject {
                                $dbw->begin( __METHOD__ );
                                try {
 
-                                       $prepStatus = $content->prepareSave( $this, $flags, $baseRevId, $user );
+                                       $prepStatus = $content->prepareSave( $this, $flags, $oldid, $user );
                                        $status->merge( $prepStatus );
 
                                        if ( !$status->isOK() ) {
@@ -1881,7 +1885,7 @@ class WikiPage implements Page, IDBAccessObject {
                        $dbw->begin( __METHOD__ );
                        try {
 
-                               $prepStatus = $content->prepareSave( $this, $flags, $baseRevId, $user );
+                               $prepStatus = $content->prepareSave( $this, $flags, $oldid, $user );
                                $status->merge( $prepStatus );
 
                                if ( !$status->isOK() ) {
@@ -3061,7 +3065,7 @@ class WikiPage implements Page, IDBAccessObject {
                }
 
                // Generate the edit summary if necessary
-               $target = Revision::newFromId( $s->rev_id );
+               $target = Revision::newFromId( $s->rev_id, Revision::READ_LATEST );
                if ( empty( $summary ) ) {
                        if ( $from == '' ) { // no public user name
                                $summary = wfMessage( 'revertpage-nouser' );
index 9835932..3ba63e6 100644 (file)
@@ -31,11 +31,33 @@ class ResourceLoaderSkinModule extends ResourceLoaderFileModule {
         */
        public function getStyles( ResourceLoaderContext $context ) {
                $logo = $this->getConfig()->get( 'Logo' );
+               $logoHD = $this->getConfig()->get( 'LogoHD' );
                $styles = parent::getStyles( $context );
                $styles['all'][] = '.mw-wiki-logo { background-image: ' .
                        CSSMin::buildUrlValue( $logo ) .
                        '; }';
-
+               if ( $logoHD ) {
+                       if ( isset( $logoHD['1.5x'] ) ) {
+                               $styles[
+                                       '(-webkit-min-device-pixel-ratio: 1.5), ' .
+                                       '(min--moz-device-pixel-ratio: 1.5), ' .
+                                       '(min-resolution: 1.5dppx), ' .
+                                       '(min-resolution: 144dpi)'
+                               ][] = '.mw-wiki-logo { background-image: ' .
+                               CSSMin::buildUrlValue( $logoHD['1.5x'] ) .';' .
+                               'background-size: 135px auto; }';
+                       }
+                       if ( isset( $logoHD['2x'] ) ) {
+                               $styles[
+                                       '(-webkit-min-device-pixel-ratio: 2), ' .
+                                       '(min--moz-device-pixel-ratio: 2),'.
+                                       '(min-resolution: 2dppx), ' .
+                                       '(min-resolution: 192dpi)'
+                               ][] = '.mw-wiki-logo { background-image: ' .
+                               CSSMin::buildUrlValue( $logoHD['2x'] ) . ';' .
+                               'background-size: 135px auto; }';
+                       }
+               }
                return $styles;
        }
 
@@ -64,6 +86,7 @@ class ResourceLoaderSkinModule extends ResourceLoaderFileModule {
         */
        public function getModifiedHash( ResourceLoaderContext $context ) {
                $logo = $this->getConfig()->get( 'Logo' );
-               return md5( parent::getModifiedHash( $context ) . $logo );
+               $logoHD = $this->getConfig()->get( 'LogoHD' );
+               return md5( parent::getModifiedHash( $context ) . $logo . json_encode( $logoHD ) );
        }
 }
index 16b56f8..cdf7721 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.9.1
+ * OOjs UI v0.9.2
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2015 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2015-03-12T19:09:07Z
+ * Date: 2015-03-12T23:44:05Z
  */
 .oo-ui-icon-bell {
        background-image: url("themes/mediawiki/images/icons/bell.png");
index c245572..f919ec4 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.9.1
+ * OOjs UI v0.9.2
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2015 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2015-03-12T19:09:07Z
+ * Date: 2015-03-12T23:44:05Z
  */
 .oo-ui-icon-article {
        background-image: url("themes/mediawiki/images/icons/article-ltr.png");
index 6a21ffa..6c866ab 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.9.1
+ * OOjs UI v0.9.2
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2015 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2015-03-12T19:09:07Z
+ * Date: 2015-03-12T23:44:05Z
  */
 .oo-ui-icon-table {
        background-image: url("themes/mediawiki/images/icons/table.png");
index 295ee84..37a8562 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.9.1
+ * OOjs UI v0.9.2
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2015 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2015-03-12T19:09:07Z
+ * Date: 2015-03-12T23:44:05Z
  */
 .oo-ui-icon-edit {
        background-image: url("themes/mediawiki/images/icons/edit-ltr.png");
index 1b97103..8bebff8 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.9.1
+ * OOjs UI v0.9.2
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2015 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2015-03-12T19:09:07Z
+ * Date: 2015-03-12T23:44:05Z
  */
 .oo-ui-icon-indent {
        background-image: url("themes/mediawiki/images/icons/indent-ltr.png");
index e15f42f..fdda7c0 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.9.1
+ * OOjs UI v0.9.2
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2015 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2015-03-12T19:09:07Z
+ * Date: 2015-03-12T23:44:05Z
  */
 .oo-ui-icon-bigger {
        background-image: url("themes/mediawiki/images/icons/bigger-ltr.png");
index d7a4437..e13873f 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.9.1
+ * OOjs UI v0.9.2
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2015 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2015-03-12T19:09:07Z
+ * Date: 2015-03-12T23:44:05Z
  */
 .oo-ui-icon-beta {
        background-image: url("themes/mediawiki/images/icons/beta.png");
index 4d4a530..b23bdea 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.9.1
+ * OOjs UI v0.9.2
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2015 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2015-03-12T19:09:07Z
+ * Date: 2015-03-12T23:44:05Z
  */
 .oo-ui-icon-stripeFlow {
        background-image: url("themes/mediawiki/images/icons/stripeFlow-ltr.png");
index 1445b0c..d200ef2 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.9.1
+ * OOjs UI v0.9.2
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2015 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2015-03-12T19:09:07Z
+ * Date: 2015-03-12T23:44:05Z
  */
 .oo-ui-icon-map {
        background-image: url("themes/mediawiki/images/icons/map-ltr.png");
index 250aa47..babb93f 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.9.1
+ * OOjs UI v0.9.2
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2015 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2015-03-12T19:09:07Z
+ * Date: 2015-03-12T23:44:05Z
  */
 .oo-ui-icon-image {
        background-image: url("themes/mediawiki/images/icons/image-ltr.png");
index 21b8777..4de7472 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.9.1
+ * OOjs UI v0.9.2
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2015 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2015-03-12T19:09:07Z
+ * Date: 2015-03-12T23:44:05Z
  */
 .oo-ui-icon-block {
        background-image: url("themes/mediawiki/images/icons/block.png");
index 9d3e077..b54c204 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.9.1
+ * OOjs UI v0.9.2
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2015 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2015-03-12T19:09:07Z
+ * Date: 2015-03-12T23:44:05Z
  */
 .oo-ui-icon-arrowNext {
        background-image: url("themes/mediawiki/images/icons/arrow-ltr.png");
index bb8aec8..30b4b33 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.9.1
+ * OOjs UI v0.9.2
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2015 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2015-03-12T19:09:07Z
+ * Date: 2015-03-12T23:44:05Z
  */
 .oo-ui-icon-userActive {
        background-image: url("themes/mediawiki/images/icons/userActive-ltr.png");
index 5c76560..b03fd4d 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.9.1
+ * OOjs UI v0.9.2
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2015 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2015-03-12T19:09:07Z
+ * Date: 2015-03-12T23:44:05Z
  */
 .oo-ui-icon-logoCC {
        background-image: url("themes/mediawiki/images/icons/logo-cc.png");
index 0a9c457..8b82ca2 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.9.1
+ * OOjs UI v0.9.2
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2015 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2015-03-12T19:09:07Z
+ * Date: 2015-03-12T23:44:05Z
  */
 .oo-ui-progressBarWidget-slide-frames from {
        margin-left: -40%;
 .oo-ui-toolbar-narrow .oo-ui-toolbar-tools {
        white-space: normal;
 }
+.oo-ui-toolbar-tools .oo-ui-tool {
+       white-space: normal;
+}
 .oo-ui-toolbar-tools,
 .oo-ui-toolbar-actions,
 .oo-ui-toolbar-shadow {
             -o-transform: scale(1);
                transform: scale(1);
 }
-.oo-ui-windowManager-fullscreen.oo-ui-windowManager-modal > .oo-ui-dialog > .oo-ui-window-frame {
-       border: 0;
-       border-radius: 0;
-       box-shadow: none;
+.oo-ui-windowManager-modal.oo-ui-windowManager-floating > .oo-ui-dialog > .oo-ui-window-frame {
+       border: 1px solid #aaaaaa;
+       border-radius: 0.2em;
+       box-shadow: inset 0 -0.2em 0 0 rgba(0, 0, 0, 0.2);
 }
 
 .oo-ui-icon-add {
index 4dfc0fb..889b4e1 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.9.1
+ * OOjs UI v0.9.2
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2015 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2015-03-12T19:08:47Z
+ * Date: 2015-03-12T23:43:45Z
  */
 /**
  * @class
index 065edfc..b570130 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.9.1
+ * OOjs UI v0.9.2
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2015 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2015-03-12T19:08:47Z
+ * Date: 2015-03-12T23:43:45Z
  */
 ( function ( OO ) {
 
@@ -1756,11 +1756,7 @@ OO.ui.Window = function OoUiWindow( config ) {
        // Properties
        this.manager = null;
        this.size = config.size || this.constructor.static.size;
-       this.frame = new OO.ui.PanelLayout( {
-               expanded: false,
-               framed: true
-       } );
-       this.$frame = this.frame.$element;
+       this.$frame = $( '<div>' );
        this.$overlay = $( '<div>' );
        this.$content = $( '<div>' );
 
index 22d2af1..0cb9cc8 100644 (file)
@@ -60,7 +60,7 @@
                                );
 
                                QUnit.start();
-                       }, 10 );
+                       } );
                } );
        }
 
index 4a5705a..18db7f1 100644 (file)
                                return;
                        }
                        // Otherwise, keep polling
-                       setTimeout( styleTestLoop, 150 );
+                       setTimeout( styleTestLoop );
                }
 
                // Start the loop