Merge "Revert "Load 'mediawiki.legacy.commonPrint' styles with a media type property""
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Thu, 10 Sep 2015 18:13:07 +0000 (18:13 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Thu, 10 Sep 2015 18:13:07 +0000 (18:13 +0000)
1  2 
includes/OutputPage.php
resources/Resources.php

diff --combined includes/OutputPage.php
@@@ -142,6 -142,9 +142,6 @@@ class OutputPage extends ContextSource 
        /** @var string Inline CSS styles. Use addInlineStyle() sparingly */
        protected $mInlineStyles = '';
  
 -      /** @todo Unused? */
 -      private $mLinkColours;
 -
        /**
         * @var string Used by skin template.
         * Example: $tpl->set( 'displaytitle', $out->mPageLinkTitle );
         * Add an HTTP header that will influence on the cache
         *
         * @param string $header Header name
 -       * @param array|null $option
 -       * @todo FIXME: Document the $option parameter; it appears to be for
 -       *        X-Vary-Options but what format is acceptable?
 +       * @param string[]|null $option Options for X-Vary-Options. Possible options are:
 +       *  - "string-contains=$XXX" varies on whether the header value as a string
 +       *    contains $XXX as a substring.
 +       *  - "list-contains=$XXX" varies on whether the header value as a
 +       *    comma-separated list contains $XXX as one of the list items.
         */
 -      public function addVaryHeader( $header, $option = null ) {
 +      public function addVaryHeader( $header, array $option = null ) {
                if ( !array_key_exists( $header, $this->mVaryHeader ) ) {
 -                      $this->mVaryHeader[$header] = (array)$option;
 -              } elseif ( is_array( $option ) ) {
 -                      if ( is_array( $this->mVaryHeader[$header] ) ) {
 -                              $this->mVaryHeader[$header] = array_merge( $this->mVaryHeader[$header], $option );
 -                      } else {
 -                              $this->mVaryHeader[$header] = $option;
 -                      }
 +                      $this->mVaryHeader[$header] = array();
 +              }
 +              if ( !is_array( $option ) ) {
 +                      $option = array();
                }
 -              $this->mVaryHeader[$header] = array_unique( (array)$this->mVaryHeader[$header] );
 +              $this->mVaryHeader[$header] = array_unique( array_merge( $this->mVaryHeader[$header], $option ) );
        }
  
        /**
                }
  
                $ret .= Html::element( 'title', null, $this->getHTMLTitle() ) . "\n";
 +              $ret .= $this->getInlineHeadScripts() . "\n";
 +              $ret .= $this->buildCssLinks() . "\n";
 +              $ret .= $this->getExternalHeadScripts() . "\n";
  
                foreach ( $this->getHeadLinksArray() as $item ) {
                        $ret .= $item . "\n";
                }
  
 -              $ret .= $this->buildCssLinks() . "\n";
 -              $ret .= $this->getHeadScripts() . "\n";
 -
                foreach ( $this->mHeadItems as $item ) {
                        $ret .= $item . "\n";
                }
  
                                // Inline private modules. These can't be loaded through load.php for security
                                // reasons, see bug 34907. Note that these modules should be loaded from
 -                              // getHeadScripts() before the first loader call. Otherwise other modules can't
 +                              // getExternalHeadScripts() before the first loader call. Otherwise other modules can't
                                // properly use them as dependencies (bug 30914)
                                if ( $group === 'private' ) {
                                        if ( $only == ResourceLoaderModule::TYPE_STYLES ) {
  
                                // Automatically select style/script elements
                                if ( $only === ResourceLoaderModule::TYPE_STYLES ) {
-                                       $media = $group === 'print' ? 'print' : 'all';
-                                       $link = Html::linkedStyle( $url, $media );
+                                       $link = Html::linkedStyle( $url );
                                } else {
                                        if ( $context->getRaw() || $isRaw ) {
                                                // Startup module can't load itself, needs to use <script> instead of mw.loader.load
         * @return string HTML fragment
         */
        function getHeadScripts() {
 +              return $this->getInlineHeadScripts() . "\n" . $this->getExternalHeadScripts();
 +      }
 +
 +      /**
 +       * <script src="..."> tags for "<head>". This is the startup module
 +       * and other modules marked with position 'top'.
 +       *
 +       * @return string HTML fragment
 +       */
 +      function getExternalHeadScripts() {
 +              $links = array();
 +
 +              // Startup - this provides the client with the module manifest and loads jquery and mediawiki base modules
 +              $links[] = $this->makeResourceLoaderLink( 'startup', ResourceLoaderModule::TYPE_SCRIPTS );
 +
 +              return self::getHtmlFromLoaderLinks( $links );
 +      }
 +
 +      /**
 +       * <script>...</script> tags to put in "<head>".
 +       *
 +       * @return string HTML fragment
 +       */
 +      function getInlineHeadScripts() {
                $links = array();
  
                // Client profile classes for <html>. Allows for easy hiding/showing of UI components.
                        . '.replace( /(^|\s)client-nojs(\s|$)/, "$1client-js$2" );'
                );
  
 -              // Startup - this provides the client with the module manifest and loads jquery and mediawiki base modules
 -              $links[] = $this->makeResourceLoaderLink( 'startup', ResourceLoaderModule::TYPE_SCRIPTS );
 -
                // Load config before anything else
                $links[] = ResourceLoader::makeInlineScript(
                        ResourceLoader::makeConfigSetScript( $this->getJSVars() )
                        ResourceLoaderModule::TYPE_SCRIPTS
                );
  
 -              if ( $this->getConfig()->get( 'ResourceLoaderExperimentalAsyncLoading' ) ) {
 -                      $links[] = $this->getScriptsForBottomQueue();
 -              }
 -
                return self::getHtmlFromLoaderLinks( $links );
        }
  
        /**
 -       * JS stuff to put at the 'bottom', which can either be the bottom of the
 -       * "<body>" or the bottom of the "<head>" depending on
 -       * $wgResourceLoaderExperimentalAsyncLoading: modules marked with position
 -       * 'bottom', legacy scripts ($this->mScripts), user preferences, site JS
 -       * and user JS.
 +       * JS stuff to put at the 'bottom', which goes at the bottom of the `<body>`.
 +       * These are modules marked with position 'bottom', legacy scripts ($this->mScripts),
 +       * site JS, and user JS.
         *
         * @param bool $unused Previously used to let this method change its output based
 -       *  on whether it was called by getHeadScripts() or getBottomScripts().
 +       *  on whether it was called by getExternalHeadScripts() or getBottomScripts().
         * @return string
         */
        function getScriptsForBottomQueue( $unused = null ) {
                // In case the skin wants to add bottom CSS
                $this->getSkin()->setupSkinUserCss( $this );
  
 -              if ( $this->getConfig()->get( 'ResourceLoaderExperimentalAsyncLoading' ) ) {
 -                      // Already handled by getHeadScripts()
 -                      return '';
 -              }
 -              return  $this->getScriptsForBottomQueue();
 +              return $this->getScriptsForBottomQueue();
        }
  
        /**
diff --combined resources/Resources.php
@@@ -827,6 -827,7 +827,6 @@@ return array
                        'resources/lib/phpjs-sha1/sha1.js',
                        'resources/src/mediawiki/mediawiki.js',
                        'resources/src/mediawiki/mediawiki.errorLogger.js',
 -                      'resources/src/mediawiki/mediawiki.startUp.js',
                ),
                'debugScripts' => 'resources/src/mediawiki/mediawiki.log.js',
                'targets' => array( 'desktop', 'mobile' ),
                        'resources/src/mediawiki/mediawiki.template.mustache.js',
                ),
                'targets' => array( 'desktop', 'mobile' ),
 +              'dependencies' => 'mediawiki.template',
 +      ),
 +      'mediawiki.template.regexp' => array(
 +              'scripts' => 'resources/src/mediawiki/mediawiki.template.regexp.js',
 +              'targets' => array( 'desktop', 'mobile' ),
 +              'dependencies' => 'mediawiki.template',
        ),
        'mediawiki.apipretty' => array(
                'styles' => 'resources/src/mediawiki/mediawiki.apipretty.css',
                        'feedback-useragent'
                ),
        ),
 -
 +      'mediawiki.feedlink' => array(
 +              'position' => 'top',
 +              'styles' => 'resources/src/mediawiki/mediawiki.feedlink.css',
 +      ),
        'mediawiki.filewarning' => array(
                'scripts' => 'resources/src/mediawiki/mediawiki.filewarning.js',
                'styles' => 'resources/src/mediawiki/mediawiki.filewarning.less',
                        'oojs-ui',
                ),
        ),
 -
 +      'mediawiki.ForeignApi' => array(
 +              'targets' => array( 'desktop', 'mobile' ),
 +              'class' => 'ResourceLoaderForeignApiModule',
 +              // Additional dependencies generated dynamically
 +              'dependencies' => 'mediawiki.ForeignApi.core',
 +      ),
 +      'mediawiki.ForeignApi.core' => array(
 +              'scripts' => 'resources/src/mediawiki.api/mediawiki.ForeignApi.js',
 +              'dependencies' => array(
 +                      'mediawiki.api',
 +                      'oojs',
 +              ),
 +              'targets' => array( 'desktop', 'mobile' ),
 +      ),
        'mediawiki.helplink' => array(
                'position' => 'top',
                'styles' => array(
                        'colon-separator',
                ),
        ),
 +      'mediawiki.htmlform.styles' => array(
 +              'styles' => 'resources/src/mediawiki/mediawiki.htmlform.css',
 +              'position' => 'top',
 +      ),
        'mediawiki.htmlform.ooui.styles' => array(
                'styles' => 'resources/src/mediawiki/mediawiki.htmlform.ooui.css',
                'position' => 'top',
                'styles' => 'resources/src/mediawiki/mediawiki.sectionAnchor.css',
                'targets' => array( 'desktop', 'mobile' ),
        ),
 +      'mediawiki.storage' => array(
 +              'scripts' => 'resources/src/mediawiki/mediawiki.storage.js',
 +              'targets' => array( 'desktop', 'mobile' ),
 +      ),
        'mediawiki.Title' => array(
                'scripts' => 'resources/src/mediawiki/mediawiki.Title.js',
                'dependencies' => array(
                        'mediawiki.api.upload',
                ),
        ),
 +      'mediawiki.ForeignUpload' => array(
 +              'scripts' => 'resources/src/mediawiki/mediawiki.ForeignUpload.js',
 +              'dependencies' => array(
 +                      'mediawiki.ForeignApi',
 +                      'mediawiki.Upload',
 +                      'oojs',
 +              ),
 +      ),
 +      'mediawiki.ForeignStructuredUpload' => array(
 +              'scripts' => 'resources/src/mediawiki/mediawiki.ForeignStructuredUpload.js',
 +              'dependencies' => array(
 +                      'mediawiki.ForeignUpload',
 +              ),
 +      ),
 +      'mediawiki.Upload.Dialog' => array(
 +              'scripts' => 'resources/src/mediawiki/mediawiki.Upload.Dialog.js',
 +              'dependencies' => array(
 +                      'oojs-ui',
 +                      'mediawiki.Upload',
 +              ),
 +              'messages' => array(
 +                      'upload-dialog-title',
 +                      'upload-dialog-error',
 +                      'upload-dialog-warning',
 +                      'upload-dialog-button-cancel',
 +                      'upload-dialog-button-done',
 +                      'upload-dialog-button-save',
 +                      'upload-dialog-button-upload',
 +                      'upload-dialog-label-select-file',
 +                      'upload-dialog-label-infoform-title',
 +                      'upload-dialog-label-infoform-name',
 +                      'upload-dialog-label-infoform-description',
 +                      'upload-dialog-label-usage-title',
 +                      'upload-dialog-label-usage-filename',
 +              ),
 +      ),
        'mediawiki.toc' => array(
                'scripts' => 'resources/src/mediawiki/mediawiki.toc.js',
                'dependencies' => 'mediawiki.cookie',
        ),
        'mediawiki.Uri' => array(
                'scripts' => 'resources/src/mediawiki/mediawiki.Uri.js',
 +              'templates' => array(
 +                      'strict.regexp' => 'resources/src/mediawiki/mediawiki.Uri.strict.regexp',
 +                      'loose.regexp' => 'resources/src/mediawiki/mediawiki.Uri.loose.regexp',
 +              ),
                'dependencies' => 'mediawiki.util',
                'targets' => array( 'desktop', 'mobile' ),
        ),
                'styles' => 'resources/src/mediawiki.toolbar/toolbar.less',
                'position' => 'top',
        ),
 +      'mediawiki.experiments' => array(
 +              'scripts' => 'resources/src/mediawiki/mediawiki.experiments.js',
 +              'targets' => array( 'desktop', 'mobile' ),
 +      ),
  
        /* MediaWiki Action */
  
                        'prefs-editing'
                ),
        ),
 +      'mediawiki.action.view.filepage' => array(
 +              'styles' => array(
 +                      'resources/src/mediawiki.action/mediawiki.action.view.filepage.print.css' => array( 'media' => 'print' ),
 +                      'resources/src/mediawiki.action/mediawiki.action.view.filepage.css',
 +              ),
 +              'position' => 'top',
 +      ),
  
        /* MediaWiki Language */
  
        'mediawiki.page.gallery' => array(
                'scripts' => 'resources/src/mediawiki.page/mediawiki.page.gallery.js',
                'dependencies' => array(
 +                      'mediawiki.page.gallery.styles',
                        'jquery.throttle-debounce',
                )
        ),
 +      'mediawiki.page.gallery.styles' => array(
 +              'styles' => array(
 +                      'resources/src/mediawiki.page/mediawiki.page.gallery.print.css' => array( 'media' => 'print' ),
 +                      'resources/src/mediawiki.page/mediawiki.page.gallery.css',
 +              ),
 +              'position' => 'top',
 +              'targets' => array( 'desktop', 'mobile' ),
 +      ),
        'mediawiki.page.ready' => array(
                'scripts' => 'resources/src/mediawiki.page/mediawiki.page.ready.js',
                'dependencies' => array(
                        'resources/src/mediawiki.special/mediawiki.special.userlogin.login.css',
                ),
        ),
 -      'mediawiki.special.userlogin.common.js' => array(
 -              'scripts' => array(
 -                      'resources/src/mediawiki.special/mediawiki.special.userlogin.common.js',
 -              ),
 -              'messages' => array(
 -                      'createacct-captcha',
 -                      'createacct-imgcaptcha-ph',
 -              ),
 -      ),
        'mediawiki.special.userlogin.signup.js' => array(
                'scripts' => 'resources/src/mediawiki.special/mediawiki.special.userlogin.signup.js',
                'messages' => array(
        'mediawiki.legacy.commonPrint' => array(
                'position' => 'top',
                'styles' => array(
 +                      // @todo: Remove mediawiki.page.gallery when cache has cleared
 +                      'resources/src/mediawiki.page/mediawiki.page.gallery.print.css' => array( 'media' => 'print' ),
 +                      // @todo: Remove mediawiki.action.view.filepage.print.css when cache has cleared
 +                      'resources/src/mediawiki.action/mediawiki.action.view.filepage.print.css' => array( 'media' => 'print' ),
                        'resources/src/mediawiki.legacy/commonPrint.css' => array( 'media' => 'print' )
                ),
-               'group' => 'print',
        ),
        'mediawiki.legacy.protect' => array(
                'scripts' => 'resources/src/mediawiki.legacy/protect.js',
        'mediawiki.legacy.shared' => array(
                'position' => 'top',
                'styles' => array(
 +                      // @todo: Remove when mediawiki.page.gallery in cached html.
 +                      'resources/src/mediawiki.page/mediawiki.page.gallery.css',
 +                      // @todo: Remove mediawiki.action.view.filepage.css
 +                      // and mediawiki.legacy/images/checker.png when cache has cleared
 +                      'resources/src/mediawiki.action/mediawiki.action.view.filepage.css',
                        'resources/src/mediawiki.legacy/shared.css' => array( 'media' => 'screen' )
                ),
        ),
                        'resources/src/mediawiki.widgets/mw.widgets.CalendarWidget.js',
                        'resources/src/mediawiki.widgets/mw.widgets.DateInputWidget.js',
                        'resources/src/mediawiki.widgets/mw.widgets.NamespaceInputWidget.js',
 +                      'resources/src/mediawiki.widgets/mw.widgets.ComplexNamespaceInputWidget.js',
                        'resources/src/mediawiki.widgets/mw.widgets.TitleInputWidget.js',
                        'resources/src/mediawiki.widgets/mw.widgets.TitleOptionWidget.js',
                        'resources/src/mediawiki.widgets/mw.widgets.UserInputWidget.js',
 +                      'resources/src/mediawiki.widgets/mw.widgets.CategorySelector.js',
                ),
                'skinStyles' => array(
                        'default' => array(
                        ),
                ),
                'dependencies' => array(
 +                      'oojs-ui',
                        'mediawiki.widgets.styles',
 -                      'jquery.autoEllipsis',
 +                      // DateInputWidget
 +                      'moment',
 +                      // TitleInputWidget
                        'mediawiki.Title',
                        'mediawiki.api',
 -                      'moment',
 -                      'oojs-ui',
 +                      'jquery.byteLimit',
 +                      // TitleOptionWidget
 +                      'jquery.autoEllipsis',
                ),
                'messages' => array(
 +                      // DateInputWidget
                        'mw-widgets-dateinput-no-date',
                        'mw-widgets-dateinput-placeholder-day',
                        'mw-widgets-dateinput-placeholder-month',
 +                      // NamespaceInputWidget
 +                      'blanknamespace',
 +                      'namespacesall',
 +                      // TitleInputWidget
                        'mw-widgets-titleinput-description-new-page',
                        'mw-widgets-titleinput-description-redirect',
                ),
        'mediawiki.widgets.styles' => array(
                'skinStyles' => array(
                        'default' => array(
 -                              'resources/src/mediawiki.widgets/mw.widgets.NamespaceInputWidget.base.css',
 +                              'resources/src/mediawiki.widgets/mw.widgets.ComplexNamespaceInputWidget.base.css',
                        ),
                ),
                'position' => 'top',