MediaWiki REL1_31
XmlSelect.php
Go to the documentation of this file.
1<?php
26class XmlSelect {
27 protected $options = [];
28 protected $default = false;
29 protected $tagName = 'select';
30 protected $attributes = [];
31
32 public function __construct( $name = false, $id = false, $default = false ) {
33 if ( $name ) {
34 $this->setAttribute( 'name', $name );
35 }
36
37 if ( $id ) {
38 $this->setAttribute( 'id', $id );
39 }
40
41 if ( $default !== false ) {
42 $this->default = $default;
43 }
44 }
45
49 public function setDefault( $default ) {
50 $this->default = $default;
51 }
52
56 public function setTagName( $tagName ) {
57 $this->tagName = $tagName;
58 }
59
64 public function setAttribute( $name, $value ) {
65 $this->attributes[$name] = $value;
66 }
67
72 public function getAttribute( $name ) {
73 if ( isset( $this->attributes[$name] ) ) {
74 return $this->attributes[$name];
75 } else {
76 return null;
77 }
78 }
79
84 public function addOption( $label, $value = false ) {
85 $value = $value !== false ? $value : $label;
86 $this->options[] = [ $label => $value ];
87 }
88
96 public function addOptions( $options ) {
97 $this->options[] = $options;
98 }
99
109 static function formatOptions( $options, $default = false ) {
110 $data = '';
111
112 foreach ( $options as $label => $value ) {
113 if ( is_array( $value ) ) {
114 $contents = self::formatOptions( $value, $default );
115 $data .= Html::rawElement( 'optgroup', [ 'label' => $label ], $contents ) . "\n";
116 } else {
117 // If $default is an array, then the <select> probably has the multiple attribute,
118 // so we should check if each $value is in $default, rather than checking if
119 // $value is equal to $default.
120 $selected = is_array( $default ) ? in_array( $value, $default ) : $value === $default;
121 $data .= Xml::option( $label, $value, $selected ) . "\n";
122 }
123 }
124
125 return $data;
126 }
127
131 public function getHTML() {
132 $contents = '';
133
134 foreach ( $this->options as $options ) {
135 $contents .= self::formatOptions( $options, $this->default );
136 }
137
138 return Html::rawElement( $this->tagName, $this->attributes, rtrim( $contents ) );
139 }
140}
Class for generating HTML <select> or <datalist> elements.
Definition XmlSelect.php:26
setTagName( $tagName)
Definition XmlSelect.php:56
getAttribute( $name)
Definition XmlSelect.php:72
setDefault( $default)
Definition XmlSelect.php:49
setAttribute( $name, $value)
Definition XmlSelect.php:64
__construct( $name=false, $id=false, $default=false)
Definition XmlSelect.php:32
static formatOptions( $options, $default=false)
This accepts an array of form: label => value label => ( label => value, label => value )
addOption( $label, $value=false)
Definition XmlSelect.php:84
addOptions( $options)
This accepts an array of form label => value label => ( label => value, label => value )
Definition XmlSelect.php:96
We ve cleaned up the code here by removing clumps of infrequently used code and moving them off somewhere else It s much easier for someone working with this code to see what s _really_ going and make changes or fix bugs In we can take all the code that deals with the little used title reversing options(say) and put it in one place. Instead of having little title-reversing if-blocks spread all over the codebase in showAnArticle
Allows to change the fields on the form that will be generated $name
Definition hooks.txt:302