jenkins-bot has submitted this change and it was merged.

Change subject: Move fancy image removal from HtmlFormatter to MobileFormatter
......................................................................


Move fancy image removal from HtmlFormatter to MobileFormatter

Change-Id: I8dd2cd8ba3bff895447946294ce8a3291bc2ce1b
---
M includes/formatters/ExtractFormatter.php
M includes/formatters/HtmlFormatter.php
M includes/formatters/MobileFormatter.php
M tests/HtmlFormatterTest.php
M tests/MobileFormatterTest.php
5 files changed, 86 insertions(+), 81 deletions(-)

Approvals:
  Jdlrobson: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/includes/formatters/ExtractFormatter.php 
b/includes/formatters/ExtractFormatter.php
index 89c62d3..e08fe12 100644
--- a/includes/formatters/ExtractFormatter.php
+++ b/includes/formatters/ExtractFormatter.php
@@ -21,7 +21,6 @@
                $this->plainText = $plainText;
 
                $this->removeImages();
-               $this->useImgAlt( false );
                $this->remove( $wgMFRemovableClasses['base'] );
                $this->remove( $wgMFRemovableClasses['extracts'] );
                $this->remove( array( 'table', 'div', '.editsection', 
'.mw-editsection', 'sup.reference', 'span.coordinates',
diff --git a/includes/formatters/HtmlFormatter.php 
b/includes/formatters/HtmlFormatter.php
index bbc9749..7ae2432 100644
--- a/includes/formatters/HtmlFormatter.php
+++ b/includes/formatters/HtmlFormatter.php
@@ -12,8 +12,7 @@
        private $html;
        private $itemsToRemove = array();
        private $elementsToFlatten = array();
-       private $removeImages = false;
-       private $imgAlt = true;
+       protected $removeImages = false;
 
        /**
         * Constructor
@@ -94,13 +93,6 @@
        }
 
        /**
-        * @param bool $value
-        */
-       public function useImgAlt( $value ) {
-               $this->imgAlt = $value;
-       }
-
-       /**
         * Removes content inappropriate for mobile devices
         */
        public function filterContent() {
@@ -122,31 +114,13 @@
                // For example:
 
                $domElemsToRemove = array();
-               $domElemsToReplace = array();
                foreach ( $removals['TAG'] as $tagToRemove ) {
                        $tagToRemoveNodes = $doc->getElementsByTagName( 
$tagToRemove );
                        foreach ( $tagToRemoveNodes as $tagToRemoveNode ) {
                                if ( $tagToRemoveNode ) {
-                                       if ( $this->imgAlt && 
$tagToRemoveNode->nodeName == 'img' ) {
-                                               $domElemsToReplace[] = 
$tagToRemoveNode;
-                                       } else {
-                                               $domElemsToRemove[] = 
$tagToRemoveNode;
-                                       }
+                                       $domElemsToRemove[] = $tagToRemoveNode;
                                }
                        }
-               }
-
-               /** @var $domElement DOMElement */
-               foreach ( $domElemsToReplace as $domElement ) {
-                       $alt = $domElement->getAttribute( 'alt' );
-                       if ( $alt === '' ) {
-                               $alt = '[' . wfMessage( 
'mobile-frontend-missing-image' )->inContentLanguage() . ']';
-                       } else {
-                               $alt = '[' . $alt . ']';
-                       }
-                       $replacement = $doc->createElement( 'span', 
htmlspecialchars( $alt ) );
-                       $replacement->setAttribute( 'class', 
'mw-mf-image-replacement' );
-                       $domElement->parentNode->replaceChild( $replacement, 
$domElement );
                }
 
                $this->removeElements( $domElemsToRemove );
diff --git a/includes/formatters/MobileFormatter.php 
b/includes/formatters/MobileFormatter.php
index 3693ad5..db72b91 100644
--- a/includes/formatters/MobileFormatter.php
+++ b/includes/formatters/MobileFormatter.php
@@ -111,29 +111,63 @@
                        $this->remove( $wgMFRemovableClasses['base'] );
                        $this->remove( 
$wgMFRemovableClasses[$this->getFormat()] );
                }
+
+               if ( $this->removeImages ) {
+                       $this->doRemoveImages();
+               }
                parent::filterContent();
 
                // Handle red links with action equal to edit
                if ( $this->flattenRedLinks ) {
-                       $doc = $this->getDoc();
-                       $xpath = new DOMXpath( $doc );
-                       $redLinks = $xpath->query( '//a[@class="new"]' );
-                       /** @var $redLink DOMElement */
-                       foreach ( $redLinks as $redLink ) {
-                               // PHP Bug #36795 — Inappropriate "unterminated 
entity reference"
-                               $spanNode = $doc->createElement( "span", 
str_replace( "&", "&", $redLink->nodeValue ) );
+                       $this->doFlattenRedLinks();
+               }
+       }
 
-                               if ( $redLink->hasAttributes() ) {
-                                       $attributes = $redLink->attributes;
-                                       foreach ( $attributes as $attribute ) {
-                                               if ( $attribute->name != 'href' 
) {
-                                                       
$spanNode->setAttribute( $attribute->name, $attribute->value );
-                                               }
+       /**
+        * Replaces images with [annotations from alt]
+        */
+       private function doRemoveImages() {
+               $doc = $this->getDoc();
+               $domElemsToReplace = array();
+               foreach( $doc->getElementsByTagName( 'img' ) as $element ) {
+                       $domElemsToReplace[] = $element;
+               }
+               /** @var $element DOMElement */
+               foreach ( $domElemsToReplace as $element ) {
+                       $alt = $element->getAttribute( 'alt' );
+                       if ( $alt === '' ) {
+                               $alt = '[' . wfMessage( 
'mobile-frontend-missing-image' )->inContentLanguage() . ']';
+                       } else {
+                               $alt = '[' . $alt . ']';
+                       }
+                       $replacement = $doc->createElement( 'span', 
htmlspecialchars( $alt ) );
+                       $replacement->setAttribute( 'class', 
'mw-mf-image-replacement' );
+                       $element->parentNode->replaceChild( $replacement, 
$element );
+               }
+       }
+
+       /**
+        * Replaces red links with plain text
+        */
+       private function doFlattenRedLinks() {
+               $doc = $this->getDoc();
+               $xpath = new DOMXpath( $doc );
+               $redLinks = $xpath->query( '//a[@class="new"]' );
+               /** @var $redLink DOMElement */
+               foreach ( $redLinks as $redLink ) {
+                       // PHP Bug #36795 — Inappropriate "unterminated entity 
reference"
+                       $spanNode = $doc->createElement( "span", str_replace( 
"&", "&", $redLink->nodeValue ) );
+
+                       if ( $redLink->hasAttributes() ) {
+                               $attributes = $redLink->attributes;
+                               foreach ( $attributes as $attribute ) {
+                                       if ( $attribute->name != 'href' ) {
+                                               $spanNode->setAttribute( 
$attribute->name, $attribute->value );
                                        }
                                }
-
-                               $redLink->parentNode->replaceChild( $spanNode, 
$redLink );
                        }
+
+                       $redLink->parentNode->replaceChild( $spanNode, $redLink 
);
                }
        }
 
diff --git a/tests/HtmlFormatterTest.php b/tests/HtmlFormatterTest.php
index 93d2c54..246641b 100644
--- a/tests/HtmlFormatterTest.php
+++ b/tests/HtmlFormatterTest.php
@@ -28,10 +28,6 @@
                $removeImages = function( HtmlFormatter $f ) {
                        $f->removeImages();
                };
-               $fullyRemoveImages = function( HtmlFormatter $f ) {
-                       $f->removeImages();
-                       $f->useImgAlt( false );
-               };
                $removeTags = function( HtmlFormatter $f ) {
                        $f->remove( array( 'table', '.foo', '#bar', 'div.baz' ) 
);
                };
@@ -44,19 +40,9 @@
                return array(
                        // remove images if asked
                        array(
-                               '<img src="/foo/bar.jpg">Blah</img>',
-                               '<span class="mw-mf-image-replacement">['. 
wfMessage( 'mobile-frontend-missing-image' ) .']</span>Blah',
-                               $removeImages,
-                       ),
-                       array(
-                               '<img src="/foo/bar.jpg" alt="Blah"/>',
-                               '<span 
class="mw-mf-image-replacement">[Blah]</span>',
-                               $removeImages,
-                       ),
-                       array(
                                '<img src="/foo/bar.jpg" alt="Blah"/>',
                                '',
-                               $fullyRemoveImages,
+                               $removeImages,
                        ),
                        // basic tag removal
                        array(
@@ -84,27 +70,6 @@
                        array(
                                '<span title="&quot; \' 
&amp;">&lt;Тест!&gt;</span> &amp;&lt;&#38;&#0038;&#x26;&#x026;',
                                '<span title="&quot; \' 
&amp;">&lt;Тест!&gt;</span> &amp;&lt;&amp;&amp;&amp;&amp;',
-                       ),
-                       array(
-                               '<img alt="picture of kitty" src="kitty.jpg">',
-                               '<span class="mw-mf-image-replacement">[picture 
of kitty]</span>',
-                               $removeImages,
-                       ),
-                       array(
-                               '<img src="kitty.jpg">',
-                               '<span class="mw-mf-image-replacement">[' . 
wfMessage( 'mobile-frontend-missing-image' ) . ']</span>',
-                               $removeImages,
-                       ),
-                       array(
-                               '<img alt src="kitty.jpg">',
-                               '<span class="mw-mf-image-replacement">[' . 
wfMessage( 'mobile-frontend-missing-image' ) . ']</span>',
-                               $removeImages,
-                       ),
-                       array(
-                               '<img alt src="kitty.jpg">look at the cute 
kitty!<img alt="picture of angry dog" src="dog.jpg">',
-                               '<span class="mw-mf-image-replacement">[' . 
wfMessage( 'mobile-frontend-missing-image' ) . ']</span>look at the cute 
kitty!'.
-                                       '<span 
class="mw-mf-image-replacement">[picture of angry dog]</span>',
-                               $removeImages,
                        ),
                        // https://bugzilla.wikimedia.org/show_bug.cgi?id=53086
                        array(
diff --git a/tests/MobileFormatterTest.php b/tests/MobileFormatterTest.php
index 3048846..571fd5b 100644
--- a/tests/MobileFormatterTest.php
+++ b/tests/MobileFormatterTest.php
@@ -26,9 +26,21 @@
                $longLine = "\n" . str_repeat( 'A', 5000 );
                $summarySection = '<div id="content_0" class="content_block 
openSection"></div>';
                $anchor = '<a id="anchor_1" href="#section_1" 
class="section_anchors">&#8593;Jump back a section</a>';
+               $removeImages = function( MobileFormatter $f ) {
+                       $f->removeImages();
+               };
 
                return array(
-                       // remove magnifying glass
+                       array(
+                               '<img src="/foo/bar.jpg">Blah</img>',
+                               '<span class="mw-mf-image-replacement">['. 
wfMessage( 'mobile-frontend-missing-image' ) .']</span>Blah',
+                               $removeImages,
+                       ),
+                       array(
+                               '<img src="/foo/bar.jpg" alt="Blah"/>',
+                               '<span 
class="mw-mf-image-replacement">[Blah]</span>',
+                               $removeImages,
+                       ),                      // remove magnifying glass
                        array(
                                '<div class="thumb tright"><div 
class="thumbinner" style="width:222px;"><a href="/wiki/File:Foo.jpg" 
class="image">
 <img alt="" src="/foo.jpg" width="220" height="165" 
class="thumbimage"/></a><div class="thumbcaption">
@@ -65,6 +77,27 @@
                                        . '</div>',
                                $enableSections
                        ),
+                       array(
+                               '<img alt="picture of kitty" src="kitty.jpg">',
+                               '<span class="mw-mf-image-replacement">[picture 
of kitty]</span>',
+                               $removeImages,
+                       ),
+                       array(
+                               '<img src="kitty.jpg">',
+                               '<span class="mw-mf-image-replacement">[' . 
wfMessage( 'mobile-frontend-missing-image' ) . ']</span>',
+                               $removeImages,
+                       ),
+                       array(
+                               '<img alt src="kitty.jpg">',
+                               '<span class="mw-mf-image-replacement">[' . 
wfMessage( 'mobile-frontend-missing-image' ) . ']</span>',
+                               $removeImages,
+                       ),
+                       array(
+                               '<img alt src="kitty.jpg">look at the cute 
kitty!<img alt="picture of angry dog" src="dog.jpg">',
+                               '<span class="mw-mf-image-replacement">[' . 
wfMessage( 'mobile-frontend-missing-image' ) . ']</span>look at the cute 
kitty!'.
+                                       '<span 
class="mw-mf-image-replacement">[picture of angry dog]</span>',
+                               $removeImages,
+                       ),
                );
        }
 }

-- 
To view, visit https://gerrit.wikimedia.org/r/83760
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I8dd2cd8ba3bff895447946294ce8a3291bc2ce1b
Gerrit-PatchSet: 2
Gerrit-Project: mediawiki/extensions/MobileFrontend
Gerrit-Branch: master
Gerrit-Owner: MaxSem <maxsem.w...@gmail.com>
Gerrit-Reviewer: Jdlrobson <jrob...@wikimedia.org>
Gerrit-Reviewer: MaxSem <maxsem.w...@gmail.com>
Gerrit-Reviewer: jenkins-bot

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to