X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FXml.php;h=9466e08e287235081315f845a2dd73798555dcd6;hb=1d471caa467a23b7b8f4335d3f8e0a21297ef824;hp=f7e4d57ae94c2ebc2c536a8c3d273e1640834a34;hpb=f7df81b59fbbcdc698df6e706b8741cd4ed2c6d8;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/Xml.php b/includes/Xml.php index f7e4d57ae9..9466e08e28 100644 --- a/includes/Xml.php +++ b/includes/Xml.php @@ -112,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(); @@ -139,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; } /** @@ -168,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 ); + } /** * @@ -364,17 +398,10 @@ class Xml { } /** - * Convenience function to build an HTML hidden form field. - * @param $name String: name attribute for the field - * @param $value String: value for the hidden field - * @param $attribs Array: optional custom attributes - * @return string HTML + * @deprecated Synonymous to Html::hidden() */ - public static function hidden( $name, $value, $attribs=array() ) { - return self::element( 'input', array( - 'name' => $name, - 'type' => 'hidden', - 'value' => $value ) + $attribs ); + public static function hidden( $name, $value, $attribs = array() ) { + return Html::hidden( $name, $value, $attribs ); } /** @@ -540,7 +567,10 @@ class Xml { $s = 'null'; } elseif ( is_int( $value ) ) { $s = $value; - } elseif ( is_array( $value ) ) { + } elseif ( is_array( $value ) && // Make sure it's not associative. + array_keys($value) === range( 0, count($value) - 1 ) || + count($value) == 0 + ) { $s = '['; foreach ( $value as $elt ) { if ( $s != '[' ) { @@ -549,7 +579,8 @@ class Xml { $s .= self::encodeJsVar( $elt ); } $s .= ']'; - } elseif ( is_object( $value ) ) { + } elseif ( is_object( $value ) || is_array( $value ) ) { + // Objects and associative arrays $s = '{'; foreach ( (array)$value as $name => $elt ) { if ( $s != '{' ) { @@ -637,7 +668,6 @@ class Xml { foreach( $fields as $labelmsg => $input ) { $id = "mw-$labelmsg"; - $form .= Xml::openElement( 'tr', array( 'id' => $id ) ); $form .= Xml::tags( 'td', array('class' => 'mw-label'), wfMsgExt( $labelmsg, array('parseinline') ) ); $form .= Xml::openElement( 'td', array( 'class' => 'mw-input' ) ) . $input . Xml::closeElement( 'td' ); @@ -645,9 +675,9 @@ class Xml { } if( $submitLabel ) { - $form .= Xml::openElement( 'tr', array( 'id' => $id ) ); + $form .= Xml::openElement( 'tr' ); $form .= Xml::tags( 'td', array(), '' ); - $form .= Xml::openElement( 'td', array( 'class' => 'mw-input' ) ) . Xml::submitButton( wfMsg( $submitLabel ) ) . Xml::closeElement( 'td' ); + $form .= Xml::openElement( 'td', array( 'class' => 'mw-submit' ) ) . Xml::submitButton( wfMsg( $submitLabel ) ) . Xml::closeElement( 'td' ); $form .= Xml::closeElement( 'tr' ); } @@ -656,6 +686,48 @@ class Xml { return $form; } + + /** + * Build a table of data + * @param $rows An array of arrays of strings, each to be a row in a table + * @param $attribs An array of attributes to apply to the table tag [optional] + * @param $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 $attribs An array of attributes to apply to the tr tag + * @param $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 { @@ -677,11 +749,43 @@ class XmlSelect { $this->attributes[$name] = $value; } + public function getAttribute( $name ) { + if ( isset($this->attributes[$name]) ) { + return $this->attributes[$name]; + } else { + return null; + } + } + public function addOption( $name, $value = false ) { // Stab stab stab $value = ($value !== false) ? $value : $name; $this->options[] = Xml::option( $name, $value, $value === $this->default ); } + + // This accepts an array of form + // label => value + // label => ( label => value, label => value ) + public function addOptions( $options ) { + $this->options[] = trim(self::formatOptions( $options, $this->default )); + } + + // This accepts an array of form + // label => value + // label => ( label => value, label => value ) + static function formatOptions( $options, $default = false ) { + $data = ''; + foreach( $options as $label => $value ) { + if ( is_array( $value ) ) { + $contents = self::formatOptions( $value, $default ); + $data .= Xml::tags( 'optgroup', array( 'label' => $label ), $contents ) . "\n"; + } else { + $data .= Xml::option( $label, $value, $value === $default ) . "\n"; + } + } + + return $data; + } public function getHTML() { return Xml::tags( 'select', $this->attributes, implode( "\n", $this->options ) );