Make $wgDebugRawPage=false also ignore load.php, so that debug logs can be readable...
[lhc/web/wiklou.git] / includes / Html.php
index fea5fb7..ce90a44 100644 (file)
@@ -1,21 +1,27 @@
 <?php
-# Copyright © 2009 Aryeh Gregor
-# http://www.mediawiki.org/
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with this program; if not, write to the Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-# http://www.gnu.org/copyleft/gpl.html
+/**
+ * Collection of methods to generate HTML content
+ *
+ * Copyright © 2009 Aryeh Gregor
+ * http://www.mediawiki.org/
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
 
 /**
  * This class is a collection of static functions that serve two purposes:
@@ -101,8 +107,8 @@ class Html {
         * features might be added, like allowing arrays for the values of
         * attributes like class= and media=.
         *
-        * @param $element  string The element's name, e.g., 'a'
-        * @param $attribs  array  Associative array of attributes, e.g., array(
+        * @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
         *   further documentation.
         * @param $contents string The raw HTML contents of the element: *not*
@@ -126,6 +132,12 @@ class Html {
        /**
         * Identical to rawElement(), but HTML-escapes $contents (like
         * Xml::element()).
+        *
+        * @param $element string
+        * @param $attribs array
+        * @param $contents string
+        *
+        * @return string
         */
        public static function element( $element, $attribs = array(), $contents = '' ) {
                return self::rawElement( $element, $attribs, strtr( $contents, array(
@@ -139,6 +151,11 @@ class Html {
        /**
         * Identical to rawElement(), but has no third parameter and omits the end
         * tag (and the self-closing '/' in XML mode for empty elements).
+        *
+        * @param $element string
+        * @param $attribs array
+        *
+        * @return string
         */
        public static function openElement( $element, $attribs = array() ) {
                global $wgHtml5, $wgWellFormedXml;
@@ -195,6 +212,7 @@ class Html {
         * Returns "</$element>", except if $wgWellFormedXml is off, in which case
         * it returns the empty string when that's guaranteed to be safe.
         *
+        * @since 1.17
         * @param $element string Name of the element, e.g., 'a'
         * @return string A closing tag, if required
         */
@@ -345,7 +363,7 @@ class Html {
                $ret = '';
                $attribs = (array)$attribs;
                foreach ( $attribs as $key => $value ) {
-                       if ( $value === false ) {
+                       if ( $value === false || is_null( $value ) ) {
                                continue;
                        }
 
@@ -419,7 +437,8 @@ class Html {
                                # Apparently we need to entity-encode \n, \r, \t, although the
                                # spec doesn't mention that.  Since we're doing strtr() anyway,
                                # and we don't need <> escaped here, we may as well not call
-                               # htmlspecialchars().  FIXME: verify that we actually need to
+                               # htmlspecialchars().
+                               # @todo FIXME: Verify that we actually need to
                                # escape \n\r\t here, and explain why, exactly.
                                #
                                # We could call Sanitizer::encodeAttribute() for this, but we
@@ -434,8 +453,8 @@ class Html {
                                );
                                if ( $wgWellFormedXml ) {
                                        # This is allowed per spec: <http://www.w3.org/TR/xml/#NT-AttValue>
-                                       # But reportedly it breaks some XML tools?  FIXME: is this
-                                       # really true?
+                                       # But reportedly it breaks some XML tools?
+                                       # @todo FIXME: Is this really true?
                                        $map['<'] = '&lt;';
                                }
                                $ret .= " $key=$quote" . strtr( $value, $map ) . $quote;
@@ -541,8 +560,7 @@ class Html {
        }
 
        /**
-        * Convenience function to produce an input element with type=hidden, like
-        * Xml::hidden.
+        * Convenience function to produce an input element with type=hidden
         *
         * @param $name    string name attribute
         * @param $value   string value attribute
@@ -571,10 +589,12 @@ class Html {
                global $wgHtml5;
                $attribs['name'] = $name;
                if ( !$wgHtml5 ) {
-                       if ( !isset( $attribs['cols'] ) )
+                       if ( !isset( $attribs['cols'] ) ) {
                                $attribs['cols'] = "";
-                       if ( !isset( $attribs['rows'] ) )
+                       }
+                       if ( !isset( $attribs['rows'] ) ) {
                                $attribs['rows'] = "";
+                       }
                }
                return self::element( 'textarea', $attribs, $value );
        }
@@ -590,12 +610,12 @@ class Html {
        public static function htmlHeader( $attribs = array() ) {
                $ret = '';
 
-               global $wgMimeType, $wgOutputEncoding;
+               global $wgMimeType;
                if ( self::isXmlMimeType( $wgMimeType ) ) {
-                       $ret .= "<?xml version=\"1.0\" encoding=\"$wgOutputEncoding\" ?" . ">\n";
+                       $ret .= "<?xml version=\"1.0\" encoding=\"UTF-8\" ?" . ">\n";
                }
 
-               global $wgHtml5, $wgHtml5Version, $wgWellFormedXml, $wgDocType, $wgDTD;
+               global $wgHtml5, $wgHtml5Version, $wgDocType, $wgDTD;
                global $wgXhtmlNamespaces, $wgXhtmlDefaultNamespace;
                if ( $wgHtml5 ) {
                        $ret .= "<!DOCTYPE html>\n";
@@ -609,7 +629,12 @@ class Html {
                                $attribs["xmlns:$tag"] = $ns;
                        }
                }
-               return $ret . Html::openElement( 'html', $attribs ) . "\n";
+               $html = Html::openElement( 'html', $attribs );
+               if ( $html ) {
+                       $html .= "\n";
+               }
+               $ret .= $html;
+               return $ret;
        }
 
        /**
@@ -620,12 +645,12 @@ class Html {
         */
        public static function isXmlMimeType( $mimetype ) {
                switch ( $mimetype ) {
-               case 'text/xml':
-               case 'application/xhtml+xml':
-               case 'application/xml':
-                       return true;
-               default:
-                       return false;
+                       case 'text/xml':
+                       case 'application/xhtml+xml':
+                       case 'application/xml':
+                               return true;
+                       default:
+                               return false;
                }
        }
 }