From 716a02dbcc75c65b2add4198e08e52270664f092 Mon Sep 17 00:00:00 2001
From: Jason Woofenden
Date: Fri, 29 Oct 2010 20:49:22 -0400
Subject: [PATCH] metaform: added fieldset support
---
metaform.php | 34 +++++++++++++++++++++++++++-------
metaform/main.html | 12 ++++++++++--
metaform/style.css | 21 +++++++++------------
metaform/template.html | 4 +++-
4 files changed, 49 insertions(+), 22 deletions(-)
diff --git a/metaform.php b/metaform.php
index 1bdd940..274128f 100644
--- a/metaform.php
+++ b/metaform.php
@@ -52,7 +52,9 @@ $GLOBALS['types'] = array(
'image' => array('image', 'oneline', 'varchar(120)'),
'thumb' => array('image', 'oneline', 'varchar(240)'),
'file' => array('file', 'oneline', 'varchar(100)'),
- 'submit' => array('submit', 'oneline', 'n/a')
+ 'submit' => array('submit', 'n/a', 'n/a'),
+ '{' => array('fieldset', 'n/a', 'n/a'),
+ '}' => array('end_fieldset','n/a', 'n/a')
);
function list_available_types() {
@@ -159,14 +161,26 @@ function get_fields() {
$fields_str = rtrim($fields_str);
$fields = split("\n", $fields_str);
foreach($fields as $field) {
- list($name, $type, $options) = split(' *', $field);
- if($options) $options = split(',', $options);
- if(!$type) $type = $name;
+ $field = trim($field);
+ if(substr($field, -1) == '{') {
+ $name = trim(substr($field, 0, -1)); # FIXME: stop this from getting enc_caption()ed
+ $type = '{';
+ $options = null;
+ } elseif(substr($field, -1) == '{') {
+ $name = 'ignored';
+ $type = '}';
+ $options = null;
+ } else {
+ list($name, $type, $options) = split(' *', $field);
+ if($options) $options = split(',', $options);
+ if(!$type) $type = $name;
+ }
$input = field_input($type);
$format = field_format($type);
$sql = field_sql($type);
$GLOBALS['gotten_fields'][] = array($name, $type, $input, $format, $sql, $options);
}
+
return $GLOBALS['gotten_fields'];
}
@@ -271,8 +285,10 @@ function make_html($whole_file = true) {
default:
$display_type = 'short';
}
- $display_fields[] = array($display_type => array(
- 'name' => $name, 'caption' => format_caption($name)));
+ if($format != 'n/a') {
+ $display_fields[] = array($display_type => array(
+ 'name' => $name, 'caption' => format_caption($name)));
+ }
if(show_in_listing($type, $input, $format, $sql)) {
$listing_headers[] = array('caption' => format_caption($name));
@@ -337,6 +353,8 @@ function show_in_listing($type, $input, $format, $sql) {
case 'password':
case 'textarea':
case 'html':
+ case 'fieldset':
+ case 'end_fieldset':
return false;
}
if($type == 'image') {
@@ -385,7 +403,9 @@ function make_php() {
$tem->show('pulldowns');
$tem->show('pulldown_format_extra');
}
- $tem->show('formats');
+ if($format != 'n/a') {
+ $tem->show('formats');
+ }
}
}
diff --git a/metaform/main.html b/metaform/main.html
index f15b49e..c7e02bc 100644
--- a/metaform/main.html
+++ b/metaform/main.html
@@ -33,11 +33,19 @@
Password protect this form.
Below, specify the fields you'd like in your form, one field per line. After each field name, put at least one space, then the field type. The following field types are available: , ~type html~.
- Example:
+
+ You can start a labeled fieldset by putting a {
at the end of a lite with the caption. Then end the fieldset with a }
on a line by itself
+
+ Example:
+email textbox
+contact info {
name textbox
phone phone
+}
comments textarea
-agree yesno
+agree yesno
+
+
Fields:
diff --git a/metaform/style.css b/metaform/style.css
index 247cb41..ded770c 100644
--- a/metaform/style.css
+++ b/metaform/style.css
@@ -1,24 +1,21 @@
-div.caption {
+.caption {
+ margin-top: 15px;
font-weight: bold;
}
-div.field {
+.field {
margin-bottom: 15px;
}
div.field_notes {
font-size: 12px;
line-height: 16px;
}
-div.form_section {
+fieldset {
border: 1px dotted black;
- padding: 23px 15px 15px 15px;
- margin: 40px 0;
+ padding: 0 15px 15px 15px;
+ margin: 15px 0;
position: relative;
}
-div.form_section_header {
- position: absolute;
- left: 42px;
- top: -9px;
- background: white;
+legend {
padding: 0 6px;
font-weight: bold;
}
@@ -29,11 +26,11 @@ div.error {
background: #fdd;
}
-.first {
+:first-child, .first {
padding-top: 0px;
margin-top: 0px;
}
-.last {
+:last-child, .last {
padding-bottom: 0px;
margin-bottom: 0px;
}
diff --git a/metaform/template.html b/metaform/template.html
index ded1b41..4e94d4a 100644
--- a/metaform/template.html
+++ b/metaform/template.html
@@ -68,7 +68,9 @@