summaryrefslogtreecommitdiff
path: root/inc/Form/Form.php
diff options
context:
space:
mode:
authorAndreas Gohr <andi@splitbrain.org>2015-05-11 20:31:16 +0200
committerAndreas Gohr <andi@splitbrain.org>2015-05-11 20:31:16 +0200
commit1f5d8b65a983fe0914971ee0bb4e5e58cbf8c8a7 (patch)
tree4413a5f46730fb951305a9dd214c696f13acf406 /inc/Form/Form.php
parent370c645068595c6750cee2b38eb96aeaac3a9dbb (diff)
downloadrpg-1f5d8b65a983fe0914971ee0bb4e5e58cbf8c8a7.tar.gz
rpg-1f5d8b65a983fe0914971ee0bb4e5e58cbf8c8a7.tar.bz2
balance fieldsets
Diffstat (limited to 'inc/Form/Form.php')
-rw-r--r--inc/Form/Form.php39
1 files changed, 36 insertions, 3 deletions
diff --git a/inc/Form/Form.php b/inc/Form/Form.php
index 420399fb1..30e16615c 100644
--- a/inc/Form/Form.php
+++ b/inc/Form/Form.php
@@ -194,7 +194,6 @@ class Form extends Element {
return $this->addElement(new TagCloseElement($tag), $pos);
}
-
/**
* Open a Fieldset
*
@@ -202,7 +201,7 @@ class Form extends Element {
* @param int $pos
* @return FieldsetOpenElement
*/
- public function addFieldsetOpen($legend='', $pos = -1) {
+ public function addFieldsetOpen($legend = '', $pos = -1) {
return $this->addElement(new FieldsetOpenElement($legend), $pos);
}
@@ -218,8 +217,42 @@ class Form extends Element {
#endregion
+ /**
+ * Adjust the elements so that fieldset open and closes are matching
+ */
protected function balanceFieldsets() {
- //todo implement!
+ $lastclose = 0;
+ $isopen = false;
+ $len = count($this->elements);
+
+ for($pos = 0; $pos < $len; $pos++) {
+ $type = $this->elements[$pos]->getType();
+ if($type == 'fieldsetopen') {
+ if($isopen) {
+ //close previous feldset
+ $this->addFieldsetClose($pos);
+ $lastclose = $pos + 1;
+ $pos++;
+ $len++;
+ }
+ $isopen = true;
+ } else if($type == 'fieldsetclose') {
+ if(!$isopen) {
+ // make sure there was a fieldsetopen
+ // either right after the last close or at the begining
+ $this->addFieldsetOpen('', $lastclose);
+ $len++;
+ $pos++;
+ }
+ $lastclose = $pos;
+ $isopen = false;
+ }
+ }
+
+ // close open fieldset at the end
+ if($isopen) {
+ $this->addFieldsetClose();
+ }
}
/**