MediaWiki REL1_32
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 return $this->attributes[$name] ?? null;
74 }
75
80 public function addOption( $label, $value = false ) {
81 $value = $value !== false ? $value : $label;
82 $this->options[] = [ $label => $value ];
83 }
84
92 public function addOptions( $options ) {
93 $this->options[] = $options;
94 }
95
105 static function formatOptions( $options, $default = false ) {
106 $data = '';
107
108 foreach ( $options as $label => $value ) {
109 if ( is_array( $value ) ) {
110 $contents = self::formatOptions( $value, $default );
111 $data .= Html::rawElement( 'optgroup', [ 'label' => $label ], $contents ) . "\n";
112 } else {
113 // If $default is an array, then the <select> probably has the multiple attribute,
114 // so we should check if each $value is in $default, rather than checking if
115 // $value is equal to $default.
116 $selected = is_array( $default ) ? in_array( $value, $default ) : $value === $default;
117 $data .= Xml::option( $label, $value, $selected ) . "\n";
118 }
119 }
120
121 return $data;
122 }
123
127 public function getHTML() {
128 $contents = '';
129
130 foreach ( $this->options as $options ) {
131 $contents .= self::formatOptions( $options, $this->default );
132 }
133
134 return Html::rawElement( $this->tagName, $this->attributes, rtrim( $contents ) );
135 }
136}
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:80
addOptions( $options)
This accepts an array of form label => value label => ( label => value, label => value )
Definition XmlSelect.php:92
Using a hook running we can avoid having all this option specific stuff in our mainline code Using the function 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