Article: Don't hardcode <img> tags on redirect page
authorBartosz Dziewoński <matma.rex@gmail.com>
Fri, 5 Sep 2014 14:12:04 +0000 (16:12 +0200)
committerBartosz Dziewoński <matma.rex@gmail.com>
Fri, 5 Sep 2014 20:00:57 +0000 (22:00 +0200)
* Created a ResourceLoader module for redirect page styling.
* Fixed a couple of bugs in Article code.

Keeping two of the old files for a while because they might still be
referenced by something (bug 69277 comment 11).

Bug: 69277
Change-Id: I8fa565833545e41d0232101566da8c5ffa850e36

includes/content/WikitextContent.php
includes/page/Article.php
resources/Resources.php
resources/src/mediawiki.action/images/nextredirect-ltr.png [new file with mode: 0644]
resources/src/mediawiki.action/images/nextredirect-rtl.png [new file with mode: 0644]
resources/src/mediawiki.action/images/redirect-ltr.png [new file with mode: 0644]
resources/src/mediawiki.action/images/redirect-rtl.png [new file with mode: 0644]
resources/src/mediawiki.action/mediawiki.action.view.redirectPage.css [new file with mode: 0644]
resources/src/mediawiki.legacy/oldshared.css
skins/common/images/nextredirectltr.png [deleted file]
skins/common/images/nextredirectrtl.png [deleted file]

index d23f925..3ab6a6d 100644 (file)
@@ -336,6 +336,7 @@ class WikitextContent extends TextContent {
                                        Article::getRedirectHeaderHtml( $title->getPageLanguage(), $chain, false ) .
                                        $output->getText()
                                );
+                               $output->addModuleStyles( 'mediawiki.action.view.redirectPage' );
                        }
                }
        }
index 71350ac..9772d4f 100644 (file)
@@ -1466,10 +1466,11 @@ class Article implements Page {
         */
        public function viewRedirect( $target, $appendSubtitle = true, $forceKnown = false ) {
                $lang = $this->getTitle()->getPageLanguage();
+               $out = $this->getContext()->getOutput();
                if ( $appendSubtitle ) {
-                       $out = $this->getContext()->getOutput();
                        $out->addSubtitle( wfMessage( 'redirectpagesub' )->parse() );
                }
+               $out->addModuleStyles( 'mediawiki.action.view.redirectPage' );
                return static::getRedirectHeaderHtml( $lang, $target, $forceKnown );
        }
 
@@ -1486,57 +1487,30 @@ class Article implements Page {
         * @return string Containing HTML with redirect link
         */
        public static function getRedirectHeaderHtml( Language $lang, $target, $forceKnown = false ) {
-               global $wgStylePath;
-
                if ( !is_array( $target ) ) {
                        $target = array( $target );
                }
 
-               $imageDir = $lang->getDir();
-
-               // the loop prepends the arrow image before the link, so the first case needs to be outside
-
-               /** @var $title Title */
-               $title = array_shift( $target );
-
-               if ( $forceKnown ) {
-                       $link = Linker::linkKnown( $title, htmlspecialchars( $title->getFullText() ) );
-               } else {
-                       $link = Linker::link( $title, htmlspecialchars( $title->getFullText() ) );
-               }
-
-               $nextRedirect = $wgStylePath . '/common/images/nextredirect' . $imageDir . '.png';
-               $alt = $lang->isRTL() ? '←' : '→';
-
-               // Automatically append redirect=no to each link, since most of them are
-               // redirect pages themselves.
-               /** @var Title $rt */
-               foreach ( $target as $rt ) {
-                       $link .= Html::element( 'img', array( 'src' => $nextRedirect, 'alt' => $alt ) );
-                       if ( $forceKnown ) {
-                               $link .= Linker::linkKnown(
-                                       $rt,
-                                       htmlspecialchars( $rt->getFullText(),
-                                       array(),
-                                       array( 'redirect' => 'no' )
-                               )
-                               );
-                       } else {
-                               $link .= Linker::link(
-                                       $rt,
-                                       htmlspecialchars( $rt->getFullText() ),
-                                       array(),
-                                       array( 'redirect' => 'no' )
-                               );
-                       }
+               $html = '<ul class="redirectText">';
+               /** @var Title $title */
+               foreach ( $target as $title ) {
+                       $html .= '<li>' . Linker::link(
+                               $title,
+                               htmlspecialchars( $title->getFullText() ),
+                               array(),
+                               // Automatically append redirect=no to each link, since most of them are
+                               // redirect pages themselves.
+                               array( 'redirect' => 'no' ),
+                               ( $forceKnown ? array( 'known', 'noclasses' ) : array() )
+                       ) . '</li>';
                }
 
                $redirectToText = wfMessage( 'redirectto' )->inLanguage( $lang )->text();
 
-               $imageUrl = $wgStylePath . '/common/images/redirect' . $imageDir . '.png';
                return '<div class="redirectMsg">' .
-                       Html::element( 'img', array( 'src' => $imageUrl, 'alt' => $redirectToText ) ) .
-                       '<span class="redirectText">' . $link . '</span></div>';
+                       '<p>' . $redirectToText . '</p>' .
+                       $html .
+                       '</div>';
        }
 
        /**
index 946f3c9..07f3cf9 100644 (file)
@@ -1062,6 +1062,10 @@ return array(
                'dependencies' => 'mediawiki.action.view.redirect',
                'position' => 'top',
        ),
+       'mediawiki.action.view.redirectPage' => array(
+               'styles' => 'resources/src/mediawiki.action/mediawiki.action.view.redirectPage.css',
+               'position' => 'top',
+       ),
        'mediawiki.action.view.rightClickEdit' => array(
                'scripts' => 'resources/src/mediawiki.action/mediawiki.action.view.rightClickEdit.js',
        ),
diff --git a/resources/src/mediawiki.action/images/nextredirect-ltr.png b/resources/src/mediawiki.action/images/nextredirect-ltr.png
new file mode 100644 (file)
index 0000000..cd657c3
Binary files /dev/null and b/resources/src/mediawiki.action/images/nextredirect-ltr.png differ
diff --git a/resources/src/mediawiki.action/images/nextredirect-rtl.png b/resources/src/mediawiki.action/images/nextredirect-rtl.png
new file mode 100644 (file)
index 0000000..b788f33
Binary files /dev/null and b/resources/src/mediawiki.action/images/nextredirect-rtl.png differ
diff --git a/resources/src/mediawiki.action/images/redirect-ltr.png b/resources/src/mediawiki.action/images/redirect-ltr.png
new file mode 100644 (file)
index 0000000..695f2a1
Binary files /dev/null and b/resources/src/mediawiki.action/images/redirect-ltr.png differ
diff --git a/resources/src/mediawiki.action/images/redirect-rtl.png b/resources/src/mediawiki.action/images/redirect-rtl.png
new file mode 100644 (file)
index 0000000..c954a2a
Binary files /dev/null and b/resources/src/mediawiki.action/images/redirect-rtl.png differ
diff --git a/resources/src/mediawiki.action/mediawiki.action.view.redirectPage.css b/resources/src/mediawiki.action/mediawiki.action.view.redirectPage.css
new file mode 100644 (file)
index 0000000..8feca4a
--- /dev/null
@@ -0,0 +1,53 @@
+/*!
+ * Display neat icons on redirect pages.
+ */
+
+/* Hide, but keep accessible for screen-readers. */
+.redirectTo {
+       overflow: hidden;
+       height: 0;
+       zoom: 1;
+}
+
+.redirectText {
+       list-style: none none;
+       display: inline;
+       /* shared.css has some very weird directionality-specific rules for 'ul' we need to override,
+          search for "Correct directionality when page dir is different from site/user dir" */
+       margin: 0 !important;
+       padding: 0 !important;
+}
+
+/* @noflip */
+.mw-content-ltr .redirectText li {
+       display: inline;
+       margin: 0;
+       padding: 0;
+       padding-left: 42px;
+       /* @embed */
+       background: url(images/nextredirect-ltr.png) bottom left no-repeat;
+}
+
+/* @noflip */
+.mw-content-ltr .redirectText li:first-child {
+       padding-left: 47px;
+       /* @embed */
+       background: url(images/redirect-ltr.png) bottom left no-repeat;
+}
+
+/* @noflip */
+.mw-content-rtl .redirectText li {
+       display: inline;
+       margin: 0;
+       padding: 0;
+       padding-right: 42px;
+       /* @embed */
+       background: url(images/nextredirect-rtl.png) bottom right no-repeat;
+}
+
+/* @noflip */
+.mw-content-rtl .redirectText li:first-child {
+       padding-right: 47px;
+       /* @embed */
+       background: url(images/redirect-rtl.png) bottom right no-repeat;
+}
index 4741074..4424fbd 100644 (file)
@@ -300,11 +300,6 @@ table.small {
        padding-right: 0.5em;
 }
 
-.redirectText {
-       font-size: 150%;
-       margin: 5px;
-}
-
 .sharedUploadNotice {
        font-style: italic;
 }
diff --git a/skins/common/images/nextredirectltr.png b/skins/common/images/nextredirectltr.png
deleted file mode 100644 (file)
index cd657c3..0000000
Binary files a/skins/common/images/nextredirectltr.png and /dev/null differ
diff --git a/skins/common/images/nextredirectrtl.png b/skins/common/images/nextredirectrtl.png
deleted file mode 100644 (file)
index b788f33..0000000
Binary files a/skins/common/images/nextredirectrtl.png and /dev/null differ