Jeroen De Dauw has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/240768

Change subject: Split method in HtmlTableBuilder
......................................................................

Split method in HtmlTableBuilder

Also swap out imperative programming for a more functional approach

Change-Id: Ic92adce1fe84bd96d2f576d47159a83d739ca9cd
---
A includes/Html/HtmlSerializable.php
M includes/Html/HtmlTableBuilder.php
M includes/Html/HtmlTableCellBuilder.php
M includes/Html/HtmlTableHeaderBuilder.php
4 files changed, 56 insertions(+), 27 deletions(-)


  git pull 
ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/WikibaseQuality 
refs/changes/68/240768/1

diff --git a/includes/Html/HtmlSerializable.php 
b/includes/Html/HtmlSerializable.php
new file mode 100644
index 0000000..2cbac28
--- /dev/null
+++ b/includes/Html/HtmlSerializable.php
@@ -0,0 +1,16 @@
+<?php
+
+namespace WikibaseQuality\Html;
+
+/**
+ * @licence GNU GPL v2+
+ * @author Jeroen De Dauw < jeroended...@gmail.com >
+ */
+interface HtmlSerializable {
+
+       /**
+        * @return string
+        */
+       public function toHtml();
+
+}
\ No newline at end of file
diff --git a/includes/Html/HtmlTableBuilder.php 
b/includes/Html/HtmlTableBuilder.php
index 2123a33..5315cec 100755
--- a/includes/Html/HtmlTableBuilder.php
+++ b/includes/Html/HtmlTableBuilder.php
@@ -119,42 +119,55 @@
         * @return string
         */
        public function toHtml() {
-               // Open table
+               return $this->getTableOpeningHtml()
+                       . $this->getTableHeaderHtml()
+                       . $this->getTableRowHtml()
+                       . Html::closeElement( 'table' );
+       }
+
+       private function getTableOpeningHtml() {
                $tableClasses = 'wikitable';
+
                if ( $this->isSortable ) {
                        $tableClasses .= ' sortable jquery-tablesort';
                }
-               $html = Html::openElement(
+
+               return Html::openElement(
                        'table',
                        array(
                                'class' => $tableClasses
                        )
                );
+       }
 
-               // Write headers
-               $html .= Html::openElement( 'tr' );
-               foreach ( $this->headers as $header ) {
-                       $html .= $header->toHtml();
-               }
-               $html .= Html::closeElement( 'tr' );
+       private function getTableHeaderHtml() {
+               return $this->getHtmlSerializablesInRow( $this->headers );
+       }
 
-               // Write rows
-               foreach ( $this->rows as $row ) {
-                       $html .= Html::openElement( 'tr' );
+       /**
+        * @param HtmlSerializable[] $serializables
+        * @return string
+        */
+       private function getHtmlSerializablesInRow( array $serializables ) {
+               return Html::rawElement(
+                       'tr',
+                       array(),
+                       implode( '', array_map(
+                               function( HtmlSerializable $header ) {
+                                       return $header->toHtml();
+                               },
+                               $serializables
+                       ) )
+               );
+       }
 
-                       /**
-                        * @var HtmlTableCellBuilder $cell
-                        */
-                       foreach ( $row as $cell ) {
-                               $html .= $cell->toHtml();
-                       }
-
-                       $html .= Html::closeElement( 'tr' );
-               }
-
-               // Close table
-               $html .= Html::closeElement( 'table' );
-
-               return $html;
+       private function getTableRowHtml() {
+               $self = $this;
+               return implode( '', array_map(
+                       function( array $row ) use ( $self ) {
+                               return $self->getHtmlSerializablesInRow( $row );
+                       },
+                       $this->rows
+               ) );
        }
 }
\ No newline at end of file
diff --git a/includes/Html/HtmlTableCellBuilder.php 
b/includes/Html/HtmlTableCellBuilder.php
index c840949..fe0b715 100755
--- a/includes/Html/HtmlTableCellBuilder.php
+++ b/includes/Html/HtmlTableCellBuilder.php
@@ -10,7 +10,7 @@
  * @author BP2014N1
  * @license GNU GPL v2+
  */
-class HtmlTableCellBuilder {
+class HtmlTableCellBuilder implements HtmlSerializable {
 
        /**
         * Html content of the cell.
diff --git a/includes/Html/HtmlTableHeaderBuilder.php 
b/includes/Html/HtmlTableHeaderBuilder.php
index 6814278..aa97dd9 100755
--- a/includes/Html/HtmlTableHeaderBuilder.php
+++ b/includes/Html/HtmlTableHeaderBuilder.php
@@ -10,7 +10,7 @@
  * @author BP2014N1
  * @license GNU GPL v2+
  */
-class HtmlTableHeaderBuilder {
+class HtmlTableHeaderBuilder implements HtmlSerializable {
 
        /**
         * Html content of the header

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ic92adce1fe84bd96d2f576d47159a83d739ca9cd
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/WikibaseQuality
Gerrit-Branch: master
Gerrit-Owner: Jeroen De Dauw <jeroended...@gmail.com>

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

Reply via email to