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