diff options
-rw-r--r-- | inc/Form/Form.php | 35 | ||||
-rw-r--r-- | inc/Form/InputElement.php | 8 | ||||
-rw-r--r-- | inc/Form/LabelElement.php (renamed from inc/Form/Label.php) | 6 |
3 files changed, 42 insertions, 7 deletions
diff --git a/inc/Form/Form.php b/inc/Form/Form.php index 738f2bcf8..73b5b9cb3 100644 --- a/inc/Form/Form.php +++ b/inc/Form/Form.php @@ -258,6 +258,41 @@ class Form extends Element { } /** + * Adds a label referencing another input element, escapes the label for you + * + * @param $label + * @param string $for + * @param int $pos + * @return Element + */ + public function addLabel($label, $for='', $pos = -1) { + return $this->addLabelHTML(hsc($label), $for, $pos); + } + + /** + * Adds a label referencing another input element, allows HTML for content + * + * @param string $content + * @param string|Element $for + * @param int $pos + * @return Element + */ + public function addLabelHTML($content, $for='', $pos = -1) { + $element = new LabelElement(hsc($content)); + + if(is_a($for, '\dokuwiki\Form\Element')) { + /** @var Element $for */ + $for = $for->id(); + } + $for = (string) $for; + if($for !== '') { + $element->attr('for', $for); + } + + return $this->addElement($element, $pos); + } + + /** * Add fixed HTML to the form * * @param $html diff --git a/inc/Form/InputElement.php b/inc/Form/InputElement.php index 693eeffc5..694dd0848 100644 --- a/inc/Form/InputElement.php +++ b/inc/Form/InputElement.php @@ -12,7 +12,7 @@ namespace dokuwiki\Form; */ class InputElement extends Element { /** - * @var Label + * @var LabelElement */ protected $label = null; @@ -24,19 +24,19 @@ class InputElement extends Element { /** * @param string $type The type of this element * @param string $name The name of this form element - * @param string $label The label text for this element + * @param string $label The label text for this element (will be autoescaped) */ public function __construct($type, $name, $label = '') { parent::__construct($type, array('name' => $name)); $this->attr('name', $name); $this->attr('type', $type); - if($label) $this->label = new Label($label); + if($label) $this->label = new LabelElement($label); } /** * Returns the label element if there's one set * - * @return Label|null + * @return LabelElement|null */ public function getLabel() { return $this->label; diff --git a/inc/Form/Label.php b/inc/Form/LabelElement.php index 8dcd7cd5f..9c8d54277 100644 --- a/inc/Form/Label.php +++ b/inc/Form/LabelElement.php @@ -5,12 +5,12 @@ namespace dokuwiki\Form; * Class Label * @package dokuwiki\Form */ -class Label extends ValueElement { +class LabelElement extends ValueElement { /** * Creates a new Label * - * @param string $label + * @param string $label This is is raw HTML and will not be escaped */ public function __construct($label) { parent::__construct('label', $label); @@ -22,6 +22,6 @@ class Label extends ValueElement { * @return string */ public function toHTML() { - return '<label ' . buildAttributes($this->attrs()) . '>' . hsc($this->val()) . '</label>'; + return '<label ' . buildAttributes($this->attrs()) . '>' . $this->val() . '</label>'; } } |