Localisation updates from https://translatewiki.net.
[lhc/web/wiklou.git] / includes / Html.php
index effc488..235096d 100644 (file)
@@ -104,27 +104,26 @@ class Html {
        /**
         * Modifies a set of attributes meant for button elements
         * and apply a set of default attributes when $wgUseMediaWikiUIEverywhere enabled.
-        * @param array $attrs
-        * @param string[] $modifiers to add to the button
+        * @param array $attrs HTML attributes in an associative array
+        * @param string[] $modifiers classes to add to the button
         * @see https://tools.wmflabs.org/styleguide/desktop/index.html for guidance on available modifiers
         * @return array $attrs A modified attribute array
         */
-       public static function buttonAttributes( $attrs, $modifiers = array() ) {
+       public static function buttonAttributes( array $attrs, array $modifiers = array() ) {
                global $wgUseMediaWikiUIEverywhere;
                if ( $wgUseMediaWikiUIEverywhere ) {
                        if ( isset( $attrs['class'] ) ) {
                                if ( is_array( $attrs['class'] ) ) {
                                        $attrs['class'][] = 'mw-ui-button';
-                                       $attrs = array_merge( $attrs, $modifiers );
+                                       $attrs['class'] = array_merge( $attrs['class'], $modifiers );
                                        // ensure compatibility with Xml
                                        $attrs['class'] = implode( ' ', $attrs['class'] );
                                } else {
                                        $attrs['class'] .= ' mw-ui-button ' . implode( ' ', $modifiers );
                                }
                        } else {
-                               $attrs['class'] = array( 'mw-ui-button' );
                                // ensure compatibility with Xml
-                               $attrs['class'] = implode( ' ', array_merge( $attrs['class'], $modifiers ) );
+                               $attrs['class'] = 'mw-ui-button ' . implode( ' ', $modifiers );
                        }
                }
                return $attrs;
@@ -137,11 +136,8 @@ class Html {
         * @param array $attrs An attribute array.
         * @return array $attrs A modified attribute array
         */
-       public static function getTextInputAttributes( $attrs ) {
+       public static function getTextInputAttributes( array $attrs ) {
                global $wgUseMediaWikiUIEverywhere;
-               if ( !$attrs ) {
-                       $attrs = array();
-               }
                if ( $wgUseMediaWikiUIEverywhere ) {
                        if ( isset( $attrs['class'] ) ) {
                                if ( is_array( $attrs['class'] ) ) {
@@ -165,11 +161,11 @@ class Html {
         * @param array $attrs Associative array of attributes, e.g., array(
         *   'href' => 'http://www.mediawiki.org/' ). See expandAttributes() for
         *   further documentation.
-        * @param string[] $modifiers to add to the button
+        * @param string[] $modifiers classes to add to the button
         * @see http://tools.wmflabs.org/styleguide/desktop/index.html for guidance on available modifiers
         * @return string Raw HTML
         */
-       public static function linkButton( $contents, $attrs, $modifiers = array() ) {
+       public static function linkButton( $contents, array $attrs, array $modifiers = array() ) {
                return self::element( 'a',
                        self::buttonAttributes( $attrs, $modifiers ),
                        $contents
@@ -185,11 +181,11 @@ class Html {
         * @param array $attrs Associative array of attributes, e.g., array(
         *   'href' => 'http://www.mediawiki.org/' ). See expandAttributes() for
         *   further documentation.
-        * @param string[] $modifiers to add to the button
+        * @param string[] $modifiers classes to add to the button
         * @see http://tools.wmflabs.org/styleguide/desktop/index.html for guidance on available modifiers
         * @return string Raw HTML
         */
-       public static function submitButton( $contents, $attrs, $modifiers = array() ) {
+       public static function submitButton( $contents, array $attrs, array $modifiers = array() ) {
                $attrs['type'] = 'submit';
                $attrs['value'] = $contents;
                return self::element( 'input', self::buttonAttributes( $attrs, $modifiers ) );
@@ -337,8 +333,7 @@ class Html {
         *   further documentation.
         * @return array An array of attributes functionally identical to $attribs
         */
-       private static function dropDefaults( $element, $attribs ) {
-
+       private static function dropDefaults( $element, array $attribs ) {
                // Whenever altering this array, please provide a covering test case
                // in HtmlTest::provideElementsWithAttributesHavingDefaultValues
                static $attribDefaults = array(
@@ -485,11 +480,10 @@ class Html {
         * @return string HTML fragment that goes between element name and '>'
         *   (starting with a space if at least one attribute is output)
         */
-       public static function expandAttributes( $attribs ) {
+       public static function expandAttributes( array $attribs ) {
                global $wgWellFormedXml;
 
                $ret = '';
-               $attribs = (array)$attribs;
                foreach ( $attribs as $key => $value ) {
                        // Support intuitive array( 'checked' => true/false ) form
                        if ( $value === false || is_null( $value ) ) {
@@ -714,13 +708,16 @@ class Html {
         *   attributes, passed to Html::element()
         * @return string Raw HTML
         */
-       public static function input( $name, $value = '', $type = 'text', $attribs = array() ) {
+       public static function input( $name, $value = '', $type = 'text', array $attribs = array() ) {
                $attribs['type'] = $type;
                $attribs['value'] = $value;
                $attribs['name'] = $name;
                if ( in_array( $type, array( 'text', 'search', 'email', 'password', 'number' ) ) ) {
                        $attribs = self::getTextInputAttributes( $attribs );
                }
+               if ( in_array( $type, array( 'button', 'reset', 'submit' ) ) ) {
+                       $attribs = self::buttonAttributes( $attribs );
+               }
                return self::element( 'input', $attribs );
        }
 
@@ -794,7 +791,7 @@ class Html {
         *   attributes, passed to Html::element()
         * @return string Raw HTML
         */
-       public static function hidden( $name, $value, $attribs = array() ) {
+       public static function hidden( $name, $value, array $attribs = array() ) {
                return self::input( $name, $value, 'hidden', $attribs );
        }
 
@@ -810,7 +807,7 @@ class Html {
         *   attributes, passed to Html::element()
         * @return string Raw HTML
         */
-       public static function textarea( $name, $value = '', $attribs = array() ) {
+       public static function textarea( $name, $value = '', array $attribs = array() ) {
                $attribs['name'] = $name;
 
                if ( substr( $value, 0, 1 ) == "\n" ) {
@@ -937,7 +934,7 @@ class Html {
         *   attributes, passed to Html::element() of html tag.
         * @return string Raw HTML
         */
-       public static function htmlHeader( $attribs = array() ) {
+       public static function htmlHeader( array $attribs = array() ) {
                $ret = '';
 
                global $wgHtml5Version, $wgMimeType, $wgXhtmlNamespaces;
@@ -1025,19 +1022,33 @@ class Html {
        }
 
        /**
-        * Generate a srcset attribute value from an array mapping pixel densities
-        * to URLs. Note that srcset supports width and height values as well, which
-        * are not used here.
+        * Generate a srcset attribute value.
+        *
+        * Generates a srcset attribute value from an array mapping pixel densities
+        * to URLs. A trailing 'x' in pixel density values is optional.
+        *
+        * @note srcset width and height values are not supported.
+        *
+        * @see http://www.whatwg.org/html/embedded-content-1.html#attr-img-srcset
+        *
+        * @par Example:
+        * @code
+        *     Html::srcSet( array(
+        *         '1x'   => 'standard.jpeg',
+        *         '1.5x' => 'large.jpeg',
+        *         '3x'   => 'extra-large.jpeg',
+        *     ) );
+        *     // gives 'standard.jpeg 1x, large.jpeg 1.5x, extra-large.jpeg 2x'
+        * @endcode
         *
         * @param string[] $urls
         * @return string
         */
-       static function srcSet( $urls ) {
+       static function srcSet( array $urls ) {
                $candidates = array();
                foreach ( $urls as $density => $url ) {
-                       // Image candidate syntax per current whatwg live spec, 2012-09-23:
-                       // http://www.whatwg.org/html/embedded-content-1.html#attr-img-srcset
-                       $candidates[] = "{$url} {$density}x";
+                       // Cast density to float to strip 'x'.
+                       $candidates[] = $url . ' ' . (float)$density . 'x';
                }
                return implode( ", ", $candidates );
        }