diff --git a/_test/tests/inc/form/buttonelement.test.php b/_test/tests/inc/form/buttonelement.test.php
new file mode 100644
index 0000000000..8e1a7e1e29
--- /dev/null
+++ b/_test/tests/inc/form/buttonelement.test.php
@@ -0,0 +1,40 @@
+addButton('foo', 'Hello World')->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 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 World')->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);
+ }
+}
diff --git a/inc/Form/ButtonElement.php b/inc/Form/ButtonElement.php
new file mode 100644
index 0000000000..77c30ed4ff
--- /dev/null
+++ b/inc/Form/ButtonElement.php
@@ -0,0 +1,34 @@
+ $name, 'value' => 1));
+ $this->content = $content;
+ }
+
+ /**
+ * The HTML representation of this element
+ *
+ * @return string
+ */
+ public function toHTML() {
+ return '';
+ }
+
+}
diff --git a/inc/Form/Form.php b/inc/Form/Form.php
index 625557fa19..738f2bcf89 100644
--- a/inc/Form/Form.php
+++ b/inc/Form/Form.php
@@ -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
*