$namespace = $request->getInt( 'namespace' );
$hideredirects = $request->getBool( 'hideredirects', false );
- $namespaces = $this->getContext()->getLanguage()->getNamespaces();
+ $namespaces = $this->getLanguage()->getNamespaces();
$out->setPageTitle(
( $namespace > 0 && array_key_exists( $namespace, $namespaces ) ) ?
}
/**
- * HTML for the top form
+ * Outputs the HTMLForm used on this page
*
* @param int $namespace A namespace constant (default NS_MAIN).
* @param string $from DbKey we are starting listing at.
* @param string $to DbKey we are ending listing at.
- * @param bool $hideredirects Dont show redirects (default false)
- * @return string
+ * @param bool $hideRedirects Dont show redirects (default false)
*/
- function namespaceForm( $namespace = NS_MAIN, $from = '', $to = '', $hideredirects = false ) {
- $t = $this->getPageTitle();
-
- $out = Xml::openElement( 'div', array( 'class' => 'namespaceoptions' ) );
- $out .= Xml::openElement(
- 'form',
- array( 'method' => 'get', 'action' => $this->getConfig()->get( 'Script' ) )
+ protected function outputHTMLForm( $namespace = NS_MAIN,
+ $from = '', $to = '', $hideRedirects = false
+ ) {
+ $fields = array(
+ 'from' => array(
+ 'type' => 'text',
+ 'name' => 'from',
+ 'id' => 'nsfrom',
+ 'size' => 30,
+ 'label-message' => 'allpagesfrom',
+ 'default' => str_replace( '_', ' ', $from ),
+ ),
+ 'to' => array(
+ 'type' => 'text',
+ 'name' => 'to',
+ 'id' => 'nsto',
+ 'size' => 30,
+ 'label-message' => 'allpagesto',
+ 'default' => str_replace( '_', ' ', $to ),
+ ),
+ 'namespace' => array(
+ 'type' => 'namespaceselect',
+ 'name' => 'namespace',
+ 'id' => 'namespace',
+ 'label-message' => 'namespace',
+ 'all' => null,
+ 'value' => $namespace,
+ ),
+ 'hideredirects' => array(
+ 'type' => 'check',
+ 'name' => 'hideredirects',
+ 'id' => 'hidredirects',
+ 'label-message' => 'allpages-hide-redirects',
+ 'value' => $hideRedirects,
+ ),
);
- $out .= Html::hidden( 'title', $t->getPrefixedText() );
- $out .= Xml::openElement( 'fieldset' );
- $out .= Xml::element( 'legend', null, $this->msg( 'allpages' )->text() );
- $out .= Xml::openElement( 'table', array( 'id' => 'nsselect', 'class' => 'allpages' ) );
- $out .= "<tr>
- <td class='mw-label'>" .
- Xml::label( $this->msg( 'allpagesfrom' )->text(), 'nsfrom' ) .
- " </td>
- <td class='mw-input'>" .
- Xml::input( 'from', 30, str_replace( '_', ' ', $from ), array( 'id' => 'nsfrom' ) ) .
- " </td>
-</tr>
-<tr>
- <td class='mw-label'>" .
- Xml::label( $this->msg( 'allpagesto' )->text(), 'nsto' ) .
- " </td>
- <td class='mw-input'>" .
- Xml::input( 'to', 30, str_replace( '_', ' ', $to ), array( 'id' => 'nsto' ) ) .
- " </td>
-</tr>
-<tr>
- <td class='mw-label'>" .
- Xml::label( $this->msg( 'namespace' )->text(), 'namespace' ) .
- " </td>
- <td class='mw-input'>" .
- Html::namespaceSelector(
- array( 'selected' => $namespace ),
- array( 'name' => 'namespace', 'id' => 'namespace' )
- ) . ' ' .
- Xml::checkLabel(
- $this->msg( 'allpages-hide-redirects' )->text(),
- 'hideredirects',
- 'hideredirects',
- $hideredirects
- ) . ' ' .
- Xml::submitButton( $this->msg( 'allpagessubmit' )->text() ) .
- " </td>
-</tr>";
- $out .= Xml::closeElement( 'table' );
- $out .= Xml::closeElement( 'fieldset' );
- $out .= Xml::closeElement( 'form' );
- $out .= Xml::closeElement( 'div' );
-
- return $out;
+ $form = HTMLForm::factory( 'table', $fields, $this->getContext() );
+ $form->setMethod( 'get' )
+ ->setWrapperLegendMsg( 'allpages' )
+ ->setSubmitTextMsg( 'allpagessubmit' )
+ ->prepareForm()
+ ->displayForm( false );
}
/**
);
if ( $res->numRows() > 0 ) {
- $out = Html::openElement( 'div', array( 'class' => 'mw-allpages-body' ) );
- $out .= Html::openElement( 'ul', array( 'class' => 'mw-allpages-chunk' ) );
+ $out = Html::openElement( 'ul', array( 'class' => 'mw-allpages-chunk' ) );
while ( ( $n < $this->maxPerPage ) && ( $s = $res->fetchObject() ) ) {
$t = Title::newFromRow( $s );
$n++;
}
$out .= Html::closeElement( 'ul' );
- $out .= Html::closeElement( 'div' );
+
+ if ( $res->numRows() > 2 ) {
+ // Only apply CSS column styles if there's more than 2 entries.
+ // Otherwise, rendering is broken as "mw-allpages-body"'s CSS column count is 3.
+ $out = Html::rawElement( 'div', array( 'class' => 'mw-allpages-body' ), $out );
+ }
} else {
$out = '';
}
return;
}
+ $navLinks = array();
$self = $this->getPageTitle();
- $topLinks = array(
- Linker::link( $self, $this->msg( 'allpages' )->escaped() )
- );
- $bottomLinks = array();
-
- # Do we put a previous link ?
+ // Generate a "previous page" link if needed
if ( $prevTitle ) {
$query = array( 'from' => $prevTitle->getText() );
$query['hideredirects'] = $hideredirects;
}
- $prevLink = Linker::linkKnown(
+ $navLinks[] = Linker::linkKnown(
$self,
$this->msg( 'prevpage', $prevTitle->getText() )->escaped(),
array(),
$query
);
- $topLinks[] = $prevLink;
- $bottomLinks[] = $prevLink;
+
}
+ // Generate a "next page" link if needed
if ( $n == $this->maxPerPage && $s = $res->fetchObject() ) {
# $s is the first link of the next chunk
$t = Title::makeTitle( $namespace, $s->page_title );
$query['hideredirects'] = $hideredirects;
}
- $nextLink = Linker::linkKnown(
+ $navLinks[] = Linker::linkKnown(
$self,
$this->msg( 'nextpage', $t->getText() )->escaped(),
array(),
$query
);
- $topLinks[] = $nextLink;
- $bottomLinks[] = $nextLink;
}
- $nsForm = $this->namespaceForm( $namespace, $from, $to, $hideredirects );
- $out2 = Xml::openElement( 'table', array( 'class' => 'mw-allpages-table-form' ) ) .
- '<tr>
- <td>' .
- $nsForm .
- '</td>
- <td class="mw-allpages-nav">' .
- $this->getLanguage()->pipeList( $topLinks ) .
- '</td></tr></table>';
-
- $output->addHTML( $out2 . $out );
-
- if ( count( $bottomLinks ) ) {
- $output->addHTML(
- Html::element( 'hr' ) .
- Html::rawElement( 'div', array( 'class' => 'mw-allpages-nav' ),
- $this->getLanguage()->pipeList( $bottomLinks )
- )
+ $this->outputHTMLForm( $namespace, $from, $to, $hideredirects );
+
+ if ( count( $navLinks ) ) {
+ // Add pagination links
+ $pagination = Html::rawElement( 'div',
+ array( 'class' => 'mw-allpages-nav' ),
+ $this->getLanguage()->pipeList( $navLinks )
);
+
+ $output->addHTML( $pagination );
+ $out .= Html::element( 'hr' ) . $pagination; // Footer
}
+
+ $output->addHTML( $out );
}
/**