X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FXml.php;h=40a5a3038f70c5a18cfd86975a2231ca2eae3bf1;hb=4a8df703620f599d543ea116a6df67ab76be42ed;hp=8a1ad27f6db8d7de1bed62b24ad4f2c9e39568b3;hpb=ff32fc15cfc5b08525e4a91faa5d12bf3d1735c6;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/Xml.php b/includes/Xml.php index 8a1ad27f6d..40a5a3038f 100644 --- a/includes/Xml.php +++ b/includes/Xml.php @@ -14,9 +14,10 @@ class Xml { * @param $element String: element name * @param $attribs Array: Name=>value pairs. Values will be escaped. * @param $contents String: NULL to make an open tag only; '' for a contentless closed tag (default) + * @param $allowShortTag Bool: whether '' in $contents will result in a contentless closed tag * @return string */ - public static function element( $element, $attribs = null, $contents = '') { + public static function element( $element, $attribs = null, $contents = '', $allowShortTag = true ) { $out = '<' . $element; if( !is_null( $attribs ) ) { $out .= self::expandAttributes( $attribs ); @@ -24,7 +25,7 @@ class Xml { if( is_null( $contents ) ) { $out .= '>'; } else { - if( $contents === '' ) { + if( $allowShortTag && $contents === '' ) { $out .= ' />'; } else { $out .= '>' . htmlspecialchars( $contents ) . ""; @@ -40,7 +41,7 @@ class Xml { * Return null if no attributes given. * @param $attribs Array of attributes for an XML element */ - private static function expandAttributes( $attribs ) { + public static function expandAttributes( $attribs ) { $out = ''; if( is_null( $attribs ) ) { return null; @@ -111,11 +112,11 @@ class Xml { * * @param $selected Mixed: Namespace which should be pre-selected * @param $all Mixed: Value of an item denoting all namespaces, or null to omit - * @param $hidden Mixed: Include hidden namespaces? [WTF? --RC] * @param $element_name String: value of the "name" attribute of the select tag + * @param $label String: optional label to add to the field * @return string */ - public static function namespaceSelector( $selected = '', $all = null, $hidden = false, $element_name = 'namespace' ) { + public static function namespaceSelector( $selected = '', $all = null, $element_name = 'namespace', $label = null ) { global $wgContLang; $namespaces = $wgContLang->getFormattedNamespaces(); $options = array(); @@ -138,12 +139,16 @@ class Xml { $options[] = self::option( $name, $index, $index === $selected ); } - return Xml::openElement( 'select', array( 'id' => 'namespace', 'name' => $element_name, + $ret = Xml::openElement( 'select', array( 'id' => 'namespace', 'name' => $element_name, 'class' => 'namespaceselector' ) ) . "\n" . implode( "\n", $options ) . "\n" . Xml::closeElement( 'select' ); + if ( !is_null( $label ) ) { + $ret = Xml::label( $label, $element_name ) . ' ' . $ret; + } + return $ret; } /** @@ -167,6 +172,36 @@ class Xml { . implode( "\n", $options ) . self::closeElement( 'select' ); } + + /** + * @param $year Integer + * @param $month Integer + * @return string Formatted HTML + */ + public static function dateMenu( $year, $month ) { + # Offset overrides year/month selection + if( $month && $month !== -1 ) { + $encMonth = intval( $month ); + } else { + $encMonth = ''; + } + if( $year ) { + $encYear = intval( $year ); + } else if( $encMonth ) { + $thisMonth = intval( gmdate( 'n' ) ); + $thisYear = intval( gmdate( 'Y' ) ); + if( intval($encMonth) > $thisMonth ) { + $thisYear--; + } + $encYear = $thisYear; + } else { + $encYear = ''; + } + return Xml::label( wfMsg( 'year' ), 'year' ) . ' '. + Xml::input( 'year', 4, $encYear, array('id' => 'year', 'maxlength' => 4) ) . ' '. + Xml::label( wfMsg( 'month' ), 'month' ) . ' '. + Xml::monthSelector( $encMonth, -1 ); + } /** * @@ -489,7 +524,7 @@ class Xml { 'cols' => $cols, 'rows' => $rows ) + $attribs, - $content ); + $content, false ); } /** @@ -639,18 +674,63 @@ class Xml { $form .= Xml::openElement( 'tr', array( 'id' => $id ) ); $form .= Xml::tags( 'td', array('class' => 'mw-label'), wfMsgExt( $labelmsg, array('parseinline') ) ); - $form .= Xml::openElement( 'td' ) . $input . Xml::closeElement( 'td' ); + $form .= Xml::openElement( 'td', array( 'class' => 'mw-input' ) ) . $input . Xml::closeElement( 'td' ); + $form .= Xml::closeElement( 'tr' ); + } + + if( $submitLabel ) { + $form .= Xml::openElement( 'tr', array( 'id' => $id ) ); + $form .= Xml::tags( 'td', array(), '' ); + $form .= Xml::openElement( 'td', array( 'class' => 'mw-submit' ) ) . Xml::submitButton( wfMsg( $submitLabel ) ) . Xml::closeElement( 'td' ); $form .= Xml::closeElement( 'tr' ); } $form .= ""; - - if ($submitLabel) { - $form .= Xml::submitButton( wfMsg($submitLabel) ); - } + return $form; } + + /** + * Build a table of data + * @param array $rows An array of arrays of strings, each to be a row in a table + * @param array $attribs Attributes to apply to the table tag [optional] + * @param array $headers An array of strings to use as table headers [optional] + * @return string + */ + public static function buildTable( $rows, $attribs = array(), $headers = null ) { + $s = Xml::openElement( 'table', $attribs ); + if ( is_array( $headers ) ) { + foreach( $headers as $id => $header ) { + $attribs = array(); + if ( is_string( $id ) ) $attribs['id'] = $id; + $s .= Xml::element( 'th', $attribs, $header ); + } + } + foreach( $rows as $id => $row ) { + $attribs = array(); + if ( is_string( $id ) ) $attribs['id'] = $id; + $s .= Xml::buildTableRow( $attribs, $row ); + } + $s .= Xml::closeElement( 'table' ); + return $s; + } + + /** + * Build a row for a table + * @param array $cells An array of strings to put in + * @return string + */ + public static function buildTableRow( $attribs, $cells ) { + $s = Xml::openElement( 'tr', $attribs ); + foreach( $cells as $id => $cell ) { + $attribs = array(); + if ( is_string( $id ) ) $attribs['id'] = $id; + $s .= Xml::element( 'td', $attribs, $cell ); + } + $s .= Xml::closeElement( 'tr' ); + return $s; + } } class XmlSelect { @@ -673,7 +753,8 @@ class XmlSelect { } public function addOption( $name, $value = false ) { - $value = $value ? $value : $name; + // Stab stab stab + $value = ($value !== false) ? $value : $name; $this->options[] = Xml::option( $name, $value, $value === $this->default ); } @@ -681,4 +762,4 @@ class XmlSelect { return Xml::tags( 'select', $this->attributes, implode( "\n", $this->options ) ); } -} \ No newline at end of file +}