Skip to content

Commit

Permalink
Form: added Button element #1312
Browse files Browse the repository at this point in the history
  • Loading branch information
splitbrain committed Aug 18, 2015
1 parent 08099e4 commit 8f0df22
Show file tree
Hide file tree
Showing 3 changed files with 98 additions and 0 deletions.
40 changes: 40 additions & 0 deletions _test/tests/inc/form/buttonelement.test.php
@@ -0,0 +1,40 @@
<?php

use dokuwiki\Form;

class form_buttonelement_test extends DokuWikiTest {

function test_simple() {
$form = new Form\Form();
$form->addButton('foo', 'Hello <b>World</b>')->val('bam')->attr('type', 'submit');

$html = $form->toHTML();
$pq = phpQuery::newDocumentXHTML($html);

$input = $pq->find('button[name=foo]');
$this->assertTrue($input->length == 1);
$this->assertEquals('bam', $input->val());
$this->assertEquals('submit', $input->attr('type'));
$this->assertEquals('Hello <b>World</b>', $input->text()); // tags were escaped

$b = $input->find('b'); // no tags found
$this->assertTrue($b->length == 0);
}

function test_html() {
$form = new Form\Form();
$form->addButtonHTML('foo', 'Hello <b>World</b>')->val('bam')->attr('type', 'submit');

$html = $form->toHTML();
$pq = phpQuery::newDocumentXHTML($html);

$input = $pq->find('button[name=foo]');
$this->assertTrue($input->length == 1);
$this->assertEquals('bam', $input->val());
$this->assertEquals('submit', $input->attr('type'));
$this->assertEquals('Hello World', $input->text()); // tags are stripped here

$b = $input->find('b'); // tags found
$this->assertTrue($b->length == 1);
}
}
34 changes: 34 additions & 0 deletions inc/Form/ButtonElement.php
@@ -0,0 +1,34 @@
<?php
namespace dokuwiki\Form;

/**
* Class ButtonElement
*
* Represents a simple button
*
* @package dokuwiki\Form
*/
class ButtonElement extends Element {

/** @var string HTML content */
protected $content = '';

/**
* @param string $name
* @param string $content HTML content of the button. You have to escape it yourself.
*/
function __construct($name, $content = '') {
parent::__construct('button', array('name' => $name, 'value' => 1));
$this->content = $content;
}

/**
* The HTML representation of this element
*
* @return string
*/
public function toHTML() {
return '<button ' . buildAttributes($this->attrs()) . '>'.$this->content.'</button>';
}

}
24 changes: 24 additions & 0 deletions inc/Form/Form.php
Expand Up @@ -233,6 +233,30 @@ public function addTextarea($name, $label = '', $pos = -1) {
return $this->addElement(new TextareaElement($name, $label), $pos);
}

/**
* Adds a simple button, escapes the content for you
*
* @param string $name
* @param string $content
* @param int $pos
* @return Element
*/
public function addButton($name, $content, $pos = -1) {
return $this->addElement(new ButtonElement($name, hsc($content)), $pos);
}

/**
* Adds a simple button, allows HTML for content
*
* @param string $name
* @param string $html
* @param int $pos
* @return Element
*/
public function addButtonHTML($name, $html, $pos = -1) {
return $this->addElement(new ButtonElement($name, $html), $pos);
}

/**
* Add fixed HTML to the form
*
Expand Down

0 comments on commit 8f0df22

Please sign in to comment.