Pmiazga has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/403161 )

Change subject: Hygiene: Improve infobox detection in MoveLeadParagraphTransform
......................................................................

Hygiene: Improve infobox detection in MoveLeadParagraphTransform

Changes:
 - introduced new function matchElement() to match DOM elements by
 tagname and classname
 - YAGNI: instead of regex use simple text comparision, for now it
 should fullfil all our requirements
 - added missing DOMDocument import (for PHPDoc blocks)

Bug: T170006
Change-Id: I2457c5b2eff992810cdfaa1b6bbb201bd659409c
---
M includes/transforms/MoveLeadParagraphTransform.php
1 file changed, 18 insertions(+), 8 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/MobileFrontend 
refs/changes/61/403161/1

diff --git a/includes/transforms/MoveLeadParagraphTransform.php 
b/includes/transforms/MoveLeadParagraphTransform.php
index b2b1159..94f493c 100644
--- a/includes/transforms/MoveLeadParagraphTransform.php
+++ b/includes/transforms/MoveLeadParagraphTransform.php
@@ -5,6 +5,7 @@
 use DOMXPath;
 use MobileContext;
 use DOMElement;
+use DOMDocument;
 
 class MoveLeadParagraphTransform implements IMobileTransform {
        /**
@@ -26,22 +27,31 @@
        }
 
        /**
+        * Helper function to verify that passed $node matched nodename and has 
set required classname
+        * @param DOMElement $node Node to verify
+        * @param string $requiredNodeName Required tag name
+        * @param string $requiredClass Required class name
+        * @return bool
+        */
+       private static function matchElement( DOMElement $node, 
$requiredNodeName, $requiredClass ) {
+               $classes = explode( ' ', $node->getAttribute( 'class' ) );
+               return strtolower( $node->nodeName ) === strtolower( 
$requiredNodeName )
+                       && in_array( $requiredClass, $classes );
+       }
+
+       /**
         * Works out if the infobox is wrapped
         * @param DomElement $node of infobox
-        * @param string $wrapperClasses (optional) regular expression for 
matching potential classes
+        * @param string $wrapperClass (optional) a required classname for 
wrapper
         * @return DomElement representing an unwrapped infobox or an element 
that wraps the infobox
         */
-       public static function getInfoboxContainer( $node, $wrapperClasses = 
'/mw-stack/' ) {
+       public static function getInfoboxContainer( $node, $wrapperClass = 
'mw-stack' ) {
                $infobox = false;
 
                // iterate to the top.
                while ( $node->parentNode ) {
-                       $className = $node->getAttribute( 'class' );
-                       preg_match( $wrapperClasses, $className, $matches );
-                       if (
-                               strpos( $className, 'infobox' ) !== false ||
-                               !empty( $matches )
-                       ) {
+                       if ( self::matchElement( $node, 'table', 'infobox' ) ||
+                               self::matchElement( $node, 'div', $wrapperClass 
) ) {
                                $infobox = $node;
                        }
                        $node = $node->parentNode;

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I2457c5b2eff992810cdfaa1b6bbb201bd659409c
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/MobileFrontend
Gerrit-Branch: master
Gerrit-Owner: Pmiazga <pmia...@wikimedia.org>

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

Reply via email to