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