X-Git-Url: http://git.cyclocoop.org/?a=blobdiff_plain;f=includes%2FHtml.php;h=3986a7b100c05bca66f0d697e695bb8dc6e46eba;hb=bbffc62c58972a34ee617ce135e37ec936272341;hp=a43e572a7f7e83898dae651ab6fa7db2ba32cf83;hpb=cebad72f95013c2cd726ce738624a798aa0c11ce;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/Html.php b/includes/Html.php index a43e572a7f..3986a7b100 100644 --- a/includes/Html.php +++ b/includes/Html.php @@ -101,11 +101,24 @@ class Html { 'itemscope', ); + private static $HTMLFiveOnlyAttribs = array( + 'autocomplete', + 'autofocus', + 'max', + 'min', + 'multiple', + 'pattern', + 'placeholder', + 'required', + 'step', + 'spellcheck', + ); + /** * Returns an HTML element in a string. The major advantage here over * manually typing out the HTML is that it will escape all attribute * values. If you're hardcoding all the attributes, or there are none, you - * should probably type out the string yourself. + * should probably just type out the html element yourself. * * This is quite similar to Xml::tags(), but it implements some useful * HTML-specific logic. For instance, there is no $allowShortTag @@ -115,7 +128,7 @@ class Html { * * @param $element string The element's name, e.g., 'a' * @param $attribs array Associative array of attributes, e.g., array( - * 'href' => 'http://www.mediawiki.org/' ). See expandAttributes() for + * 'href' => 'http://www.mediawiki.org/' ). See expandAttributes() for * further documentation. * @param $contents string The raw HTML contents of the element: *not* * escaped! @@ -358,6 +371,28 @@ class Html { * For instance, it will omit quotation marks if $wgWellFormedXml is false, * and will treat boolean attributes specially. * + * Attributes that should contain space-separated lists (such as 'class') array + * values are allowed as well, which will automagically be normalized + * and converted to a space-separated string. In addition to a numerical + * array, the attribute value may also be an associative array. See the + * example below for how that works. + * + * @par Numerical array + * @code + * Html::element( 'em', array( + * 'class' => array( 'foo', 'bar' ) + * ) ); + * // gives '' + * @endcode + * + * @par Associative array + * @code + * Html::element( 'em', array( + * 'class' => array( 'foo', 'bar', 'foo' => false, 'quux' => true ) + * ) ); + * // gives '' + * @endcode + * * @param $attribs array Associative array of attributes, e.g., array( * 'href' => 'http://www.mediawiki.org/' ). Values will be HTML-escaped. * A value of false means to omit the attribute. For boolean attributes, @@ -388,18 +423,8 @@ class Html { $key = strtolower( $key ); # Here we're blacklisting some HTML5-only attributes... - if ( !$wgHtml5 && in_array( $key, array( - 'autocomplete', - 'autofocus', - 'max', - 'min', - 'multiple', - 'pattern', - 'placeholder', - 'required', - 'step', - 'spellcheck', - ) ) ) { + if ( !$wgHtml5 && in_array( $key, self::$HTMLFiveOnlyAttribs ) + ) { continue; } @@ -515,6 +540,7 @@ class Html { # @todo FIXME: Is this really true? $map['<'] = '<'; } + $ret .= " $key=$quote" . strtr( $value, $map ) . $quote; } } @@ -664,7 +690,105 @@ class Html { } } - return self::element( 'textarea', $attribs, $value ); + if (substr($value, 0, 1) == "\n") { + // Workaround for bug 12130: browsers eat the initial newline + // assuming that it's just for show, but they do keep the later + // newlines, which we may want to preserve during editing. + // Prepending a single newline + $spacedValue = "\n" . $value; + } else { + $spacedValue = $value; + } + return self::element( 'textarea', $attribs, $spacedValue ); + } + /** + * Build a drop-down box for selecting a namespace + * + * @param $params array: + * - selected: [optional] Id of namespace which should be pre-selected + * - all: [optional] Value of item for "all namespaces". If null or unset, no