X-Git-Url: https://git.heureux-cyclage.org/?p=lhc%2Fweb%2Fwiklou.git;a=blobdiff_plain;f=includes%2FXmlJsCode.php;h=a7960309af0f174cf93d52478af549e42cfb6992;hp=1b90a1f20d7df1bbd71fc701632e7ac9511d1764;hb=ae031e237eab8e2023d0fe128f9749a8a43ea439;hpb=0cd28e19cb0f9385a2a1cc11a4d8c9c21ff0b830 diff --git a/includes/XmlJsCode.php b/includes/XmlJsCode.php index 1b90a1f20d..a7960309af 100644 --- a/includes/XmlJsCode.php +++ b/includes/XmlJsCode.php @@ -32,7 +32,8 @@ * * @note As of 1.21, XmlJsCode objects cannot be nested inside objects or arrays. The sole * exception is the $args argument to Xml::encodeJsCall() because Xml::encodeJsVar() is - * called for each individual element in that array. + * called for each individual element in that array. If you need to encode an object or array + * containing XmlJsCode objects, use XmlJsCode::encodeObject() to re-encode it first. * * @since 1.17 */ @@ -42,4 +43,33 @@ class XmlJsCode { function __construct( $value ) { $this->value = $value; } + + /** + * Encode an object containing XmlJsCode objects. + * + * This takes an object or associative array where (some of) the values are XmlJsCode objects, + * and re-encodes it as a single XmlJsCode object. + * + * @since 1.33 + * @param object|array $obj Object or associative array to encode + * @param bool $pretty If true, add non-significant whitespace to improve readability. + * @return XmlJsCode + */ + public static function encodeObject( $obj, $pretty = false ) { + $parts = []; + foreach ( $obj as $key => $value ) { + $parts[] = + ( $pretty ? ' ' : '' ) . + Xml::encodeJsVar( $key, $pretty ) . + ( $pretty ? ': ' : ':' ) . + Xml::encodeJsVar( $value, $pretty ); + } + return new self( + '{' . + ( $pretty ? "\n" : '' ) . + implode( $pretty ? ",\n" : ',', $parts ) . + ( $pretty ? "\n" : '' ) . + '}' + ); + } }