diff options
Diffstat (limited to 'includes/Xml.php')
-rw-r--r-- | includes/Xml.php | 202 |
1 files changed, 97 insertions, 105 deletions
diff --git a/includes/Xml.php b/includes/Xml.php index 120312dd..57a4fcf6 100644 --- a/includes/Xml.php +++ b/includes/Xml.php @@ -30,16 +30,16 @@ class Xml { * Strings are assumed to not contain XML-illegal characters; special * characters (<, >, &) are escaped but illegals are not touched. * - * @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 + * @param string $element element name + * @param array $attribs Name=>value pairs. Values will be escaped. + * @param string $contents NULL to make an open tag only; '' for a contentless closed tag (default) + * @param bool $allowShortTag whether '' in $contents will result in a contentless closed tag * @return string */ public static function element( $element, $attribs = null, $contents = '', $allowShortTag = true ) { $out = '<' . $element; if( !is_null( $attribs ) ) { - $out .= self::expandAttributes( $attribs ); + $out .= self::expandAttributes( $attribs ); } if( is_null( $contents ) ) { $out .= '>'; @@ -58,7 +58,8 @@ class Xml { * to set the XML attributes : attributename="value". * The values are passed to Sanitizer::encodeAttribute. * Return null if no attributes given. - * @param $attribs Array of attributes for an XML element + * @param array $attribs of attributes for an XML element + * @throws MWException * @return null|string */ public static function expandAttributes( $attribs ) { @@ -81,11 +82,11 @@ class Xml { * is passed. * * @param $element String: - * @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 array $attribs Name=>value pairs. Values will be escaped. + * @param string $contents NULL to make an open tag only; '' for a contentless closed tag (default) * @return string */ - public static function elementClean( $element, $attribs = array(), $contents = '') { + public static function elementClean( $element, $attribs = array(), $contents = '' ) { global $wgContLang; if( $attribs ) { $attribs = array_map( array( 'UtfNormal', 'cleanUp' ), $attribs ); @@ -101,8 +102,8 @@ class Xml { /** * This opens an XML element * - * @param $element String name of the element - * @param $attribs array of attributes, see Xml::expandAttributes() + * @param string $element name of the element + * @param array $attribs of attributes, see Xml::expandAttributes() * @return string */ public static function openElement( $element, $attribs = null ) { @@ -111,7 +112,7 @@ class Xml { /** * Shortcut to close an XML element - * @param $element String element name + * @param string $element element name * @return string */ public static function closeElement( $element ) { return "</$element>"; } @@ -120,9 +121,9 @@ class Xml { * Same as Xml::element(), but does not escape contents. Handy when the * content you have is already valid xml. * - * @param $element String element name - * @param $attribs array of attributes - * @param $contents String content of the element + * @param string $element element name + * @param array $attribs of attributes + * @param string $contents content of the element * @return string */ public static function tags( $element, $attribs = null, $contents ) { @@ -135,7 +136,7 @@ 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 $element_name String: value of the "name" attribute of the select tag - * @param $label String: optional label to add to the field + * @param string $label optional label to add to the field * @return string * @deprecated since 1.19 */ @@ -156,8 +157,8 @@ class Xml { * Create a date selector * * @param $selected Mixed: the month which should be selected, default '' - * @param $allmonths String: value of a special item denoting all month. Null to not include (default) - * @param $id String: Element identifier + * @param string $allmonths value of a special item denoting all month. Null to not include (default) + * @param string $id Element identifier * @return String: Html string containing the month selector */ public static function monthSelector( $selected = '', $allmonths = null, $id = 'month' ) { @@ -191,22 +192,23 @@ class Xml { } elseif( $encMonth ) { $thisMonth = intval( gmdate( 'n' ) ); $thisYear = intval( gmdate( 'Y' ) ); - if( intval($encMonth) > $thisMonth ) { + if( intval( $encMonth ) > $thisMonth ) { $thisYear--; } $encYear = $thisYear; } else { $encYear = ''; } - return Xml::label( wfMessage( 'year' )->text(), 'year' ) . ' '. - Xml::input( 'year', 4, $encYear, array('id' => 'year', 'maxlength' => 4) ) . ' '. - Xml::label( wfMessage( 'month' )->text(), 'month' ) . ' '. - Xml::monthSelector( $encMonth, -1 ); + $inputAttribs = array( 'id' => 'year', 'maxlength' => 4, 'size' => 7 ); + return self::label( wfMessage( 'year' )->text(), 'year' ) . ' '. + Html::input( 'year', $encYear, 'number', $inputAttribs ) . ' '. + self::label( wfMessage( 'month' )->text(), 'month' ) . ' '. + self::monthSelector( $encMonth, -1 ); } /** * Construct a language selector appropriate for use in a form or preferences - * + * * @param string $selected The language code of the selected language * @param boolean $customisedOnly If true only languages which have some content are listed * @param string $inLanguage The ISO code of the language to display the select list in (optional) @@ -254,9 +256,9 @@ class Xml { /** * Shortcut to make a span element - * @param $text String content of the element, will be escaped - * @param $class String class name of the span element - * @param $attribs array other attributes + * @param string $text content of the element, will be escaped + * @param string $class class name of the span element + * @param array $attribs other attributes * @return string */ public static function span( $text, $class, $attribs = array() ) { @@ -265,10 +267,10 @@ class Xml { /** * Shortcut to make a specific element with a class attribute - * @param $text string content of the element, will be escaped - * @param $class string class name of the span element - * @param $tag string element name - * @param $attribs array other attributes + * @param string $text content of the element, will be escaped + * @param string $class class name of the span element + * @param string $tag element name + * @param array $attribs other attributes * @return string */ public static function wrapClass( $text, $class, $tag = 'span', $attribs = array() ) { @@ -277,10 +279,10 @@ class Xml { /** * Convenience function to build an HTML text input field - * @param $name String value of the name attribute - * @param $size int value of the size attribute + * @param string $name value of the name attribute + * @param int $size value of the size attribute * @param $value mixed value of the value attribute - * @param $attribs array other attributes + * @param array $attribs other attributes * @return string HTML */ public static function input( $name, $size = false, $value = false, $attribs = array() ) { @@ -299,10 +301,10 @@ class Xml { /** * Convenience function to build an HTML password input field - * @param $name string value of the name attribute - * @param $size int value of the size attribute + * @param string $name value of the name attribute + * @param int $size value of the size attribute * @param $value mixed value of the value attribute - * @param $attribs array other attributes + * @param array $attribs other attributes * @return string HTML */ public static function password( $name, $size = false, $value = false, $attribs = array() ) { @@ -323,9 +325,9 @@ class Xml { /** * Convenience function to build an HTML checkbox - * @param $name String value of the name attribute - * @param $checked Bool Whether the checkbox is checked or not - * @param $attribs Array other attributes + * @param string $name value of the name attribute + * @param bool $checked Whether the checkbox is checked or not + * @param array $attribs other attributes * @return string HTML */ public static function check( $name, $checked = false, $attribs=array() ) { @@ -340,10 +342,10 @@ class Xml { /** * Convenience function to build an HTML radio button - * @param $name String value of the name attribute - * @param $value String value of the value attribute - * @param $checked Bool Whether the checkbox is checked or not - * @param $attribs Array other attributes + * @param string $name value of the name attribute + * @param string $value value of the value attribute + * @param bool $checked Whether the checkbox is checked or not + * @param array $attribs other attributes * @return string HTML */ public static function radio( $name, $value, $checked = false, $attribs = array() ) { @@ -355,9 +357,9 @@ class Xml { /** * Convenience function to build an HTML form label - * @param $label String text of the label + * @param string $label text of the label * @param $id - * @param $attribs Array an attribute array. This will usuall be + * @param array $attribs an attribute array. This will usually be * the same array as is passed to the corresponding input element, * so this function will cherry-pick appropriate attributes to * apply to the label as well; only class and title are applied. @@ -367,10 +369,10 @@ class Xml { $a = array( 'for' => $id ); # FIXME avoid copy pasting below: - if( isset( $attribs['class'] ) ){ + if( isset( $attribs['class'] ) ) { $a['class'] = $attribs['class']; } - if( isset( $attribs['title'] ) ){ + if( isset( $attribs['title'] ) ) { $a['title'] = $attribs['title']; } @@ -379,12 +381,12 @@ class Xml { /** * Convenience function to build an HTML text input field with a label - * @param $label String text of the label - * @param $name String value of the name attribute - * @param $id String id of the input - * @param $size Int|Bool value of the size attribute - * @param $value String|Bool value of the value attribute - * @param $attribs array other attributes + * @param string $label text of the label + * @param string $name value of the name attribute + * @param string $id id of the input + * @param int|Bool $size value of the size attribute + * @param string|Bool $value value of the value attribute + * @param array $attribs other attributes * @return string HTML */ public static function inputLabel( $label, $name, $id, $size=false, $value=false, $attribs = array() ) { @@ -448,8 +450,8 @@ class Xml { /** * Convenience function to build an HTML submit button - * @param $value String: label text for the button - * @param $attribs Array: optional custom attributes + * @param string $value label text for the button + * @param array $attribs optional custom attributes * @return string HTML */ public static function submitButton( $value, $attribs = array() ) { @@ -458,10 +460,10 @@ class Xml { /** * Convenience function to build an HTML drop-down list item. - * @param $text String: text for this item - * @param $value String: form submission value; if empty, use text + * @param string $text text for this item + * @param string $value form submission value; if empty, use text * @param $selected boolean: if true, will be the default selected item - * @param $attribs array: optional additional HTML attributes + * @param array $attribs optional additional HTML attributes * @return string HTML */ public static function option( $text, $value=null, $selected = false, @@ -498,7 +500,7 @@ class Xml { } elseif ( substr( $value, 0, 1) == '*' && substr( $value, 1, 1) != '*' ) { // A new group is starting ... $value = trim( substr( $value, 1 ) ); - if( $optgroup ) $options .= self::closeElement('optgroup'); + if( $optgroup ) $options .= self::closeElement( 'optgroup' ); $options .= self::openElement( 'optgroup', array( 'label' => $value ) ); $optgroup = true; } elseif ( substr( $value, 0, 2) == '**' ) { @@ -507,13 +509,13 @@ class Xml { $options .= self::option( $value, $value, $selected === $value ); } else { // groupless reason list - if( $optgroup ) $options .= self::closeElement('optgroup'); + if( $optgroup ) $options .= self::closeElement( 'optgroup' ); $options .= self::option( $value, $value, $selected === $value ); $optgroup = false; } } - if( $optgroup ) $options .= self::closeElement('optgroup'); + if( $optgroup ) $options .= self::closeElement( 'optgroup' ); $attribs = array(); @@ -540,9 +542,9 @@ class Xml { /** * Shortcut for creating fieldsets. * - * @param $legend string|bool Legend of the fieldset. If evaluates to false, legend is not added. - * @param $content string Pre-escaped content for the fieldset. If false, only open fieldset is returned. - * @param $attribs array Any attributes to fieldset-element. + * @param string|bool $legend Legend of the fieldset. If evaluates to false, legend is not added. + * @param string $content Pre-escaped content for the fieldset. If false, only open fieldset is returned. + * @param array $attribs Any attributes to fieldset-element. * * @return string */ @@ -564,17 +566,18 @@ class Xml { /** * Shortcut for creating textareas. * - * @param $name string The 'name' for the textarea - * @param $content string Content for the textarea - * @param $cols int The number of columns for the textarea - * @param $rows int The number of rows for the textarea - * @param $attribs array Any other attributes for the textarea + * @param string $name The 'name' for the textarea + * @param string $content Content for the textarea + * @param int $cols The number of columns for the textarea + * @param int $rows The number of rows for the textarea + * @param array $attribs Any other attributes for the textarea * * @return string */ public static function textarea( $name, $content, $cols = 40, $rows = 5, $attribs = array() ) { return self::element( 'textarea', - array( 'name' => $name, + array( + 'name' => $name, 'id' => $name, 'cols' => $cols, 'rows' => $rows @@ -587,7 +590,7 @@ class Xml { * for JavaScript source code. * Illegal control characters are assumed not to be present. * - * @param $string String to escape + * @param string $string to escape * @return String */ public static function escapeJsString( $string ) { @@ -633,10 +636,10 @@ class Xml { } elseif ( is_null( $value ) ) { $s = 'null'; } elseif ( is_int( $value ) || is_float( $value ) ) { - $s = strval($value); + $s = strval( $value ); } elseif ( is_array( $value ) && // Make sure it's not associative. - array_keys($value) === range( 0, count($value) - 1 ) || - count($value) == 0 + array_keys( $value ) === range( 0, count( $value ) - 1 ) || + count( $value ) == 0 ) { $s = '['; foreach ( $value as $elt ) { @@ -670,38 +673,27 @@ class Xml { * Create a call to a JavaScript function. The supplied arguments will be * encoded using Xml::encodeJsVar(). * - * @param $name String The name of the function to call, or a JavaScript expression + * @param string $name The name of the function to call, or a JavaScript expression * which evaluates to a function object which is called. - * @param $args Array of arguments to pass to the function. + * @param array $args of arguments to pass to the function. * * @since 1.17 * * @return string */ public static function encodeJsCall( $name, $args ) { - $s = "$name("; - $first = true; - - foreach ( $args as $arg ) { - if ( $first ) { - $first = false; - } else { - $s .= ', '; - } - - $s .= Xml::encodeJsVar( $arg ); + foreach ( $args as &$arg ) { + $arg = Xml::encodeJsVar( $arg ); } - $s .= ");\n"; - - return $s; + return "$name(" . implode( ', ', $args ) . ");\n"; } /** * Check if a string is well-formed XML. * Must include the surrounding tag. * - * @param $text String: string to test. + * @param string $text string to test. * @return bool * * @todo Error position reporting return @@ -748,7 +740,7 @@ class Xml { * Replace " > and < with their respective HTML entities ( ", * >, <) * - * @param $in String: text that might contain HTML tags. + * @param string $in text that might contain HTML tags. * @return string Escaped string */ public static function escapeTagsOnly( $in ) { @@ -759,12 +751,12 @@ class Xml { } /** - * Generate a form (without the opening form element). - * Output optionally includes a submit button. - * @param $fields Array Associative array, key is message corresponding to a description for the field (colon is in the message), value is appropriate input. - * @param $submitLabel String A message containing a label for the submit button. - * @return string HTML form. - */ + * Generate a form (without the opening form element). + * Output optionally includes a submit button. + * @param array $fields Associative array, key is message corresponding to a description for the field (colon is in the message), value is appropriate input. + * @param string $submitLabel A message containing a label for the submit button. + * @return string HTML form. + */ public static function buildForm( $fields, $submitLabel = null ) { $form = ''; $form .= "<table><tbody>"; @@ -772,7 +764,7 @@ 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'), wfMessage( $labelmsg )->parse() ); + $form .= Xml::tags( 'td', array( 'class' => 'mw-label' ), wfMessage( $labelmsg )->parse() ); $form .= Xml::openElement( 'td', array( 'class' => 'mw-input' ) ) . $input . Xml::closeElement( 'td' ); $form .= Xml::closeElement( 'tr' ); } @@ -791,9 +783,9 @@ class Xml { /** * Build a table of data - * @param $rows array An array of arrays of strings, each to be a row in a table - * @param $attribs array An array of attributes to apply to the table tag [optional] - * @param $headers array An array of strings to use as table headers [optional] + * @param array $rows An array of arrays of strings, each to be a row in a table + * @param array $attribs An array of 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 ) { @@ -831,8 +823,8 @@ class Xml { /** * Build a row for a table - * @param $attribs array An array of attributes to apply to the tr tag - * @param $cells array An array of strings to put in <td> + * @param array $attribs An array of attributes to apply to the tr tag + * @param array $cells An array of strings to put in <td> * @return string */ public static function buildTableRow( $attribs, $cells ) { |