JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
metaform: added fieldset support
authorJason Woofenden <jason@jasonwoof.com>
Sat, 30 Oct 2010 00:49:22 +0000 (20:49 -0400)
committerJason Woofenden <jason@jasonwoof.com>
Sat, 30 Oct 2010 05:00:33 +0000 (01:00 -0400)
metaform.php
metaform/main.html
metaform/style.css
metaform/template.html

index 1bdd940..274128f 100644 (file)
@@ -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');
+                               }
                        }
                }
 
index f15b49e..c7e02bc 100644 (file)
     <p><input type="checkbox" name="opt_pass~opt_pass checked~" value="Yes"> Password protect this form.</p>
 
        <p>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: <!--~types {~--><!--~types_sep {~-->, <!--~}~-->~type html~<!--~}~-->.</p>
-       <p>Example:<br><pre>
+
+       <p>You can start a labeled fieldset by putting a <code>{</code> at the end of a lite with the caption. Then end the fieldset with a <code>}</code> on a line by itself</p>
+
+       <p>Example:<br><code><pre>
+email     textbox
+contact info {
 name      textbox
 phone     phone
+}
 comments  textarea
-agree     yesno</pre></p>
+agree     yesno
+</pre></code></p>
+
     <p>Fields: 
     <textarea rows="10" cols="40" name="fields">~fields html~</textarea></p>
 
index 247cb41..ded770c 100644 (file)
@@ -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;
 }
index ded1b41..4e94d4a 100644 (file)
@@ -68,7 +68,9 @@
 
                <form action="~file_name~" method="post~enctype_attr~"><!--~opt_db {~--><!--~~editing {~~--><div style="display: none"><input type="hidden" name="~file_name~_edit_id" value="~~~file_name~_edit_id attr~~"></div><!--~~}~~--><!--~}~--><!--~uploads {~--><input type="hidden" name="MAX_FILE_SIZE" value="~~upload_max_filesize~~"><!--~}~--><!--~hidden_fields {~--><!--~ first {~-->
                        <div style="display: none"><!--~}~--><input type="hidden" name="~name~" value="~~~name~ attr~~"><!--~ last {~--></div><!--~}~--><!--~}~-->
-<!--~visible_fields {~--><!--~image {~-->
+<!--~visible_fields {~--><!--~fieldset {~-->
+                       <fieldset><legend>~caption html~</legend><!--~}~--><!--~end_fieldset {~-->
+                       </fieldset><!--~}~--><!--~image {~-->
                        <div class="caption">~caption html~</div>
                        <div class="field"><input type="file" name="~name~"><input type="hidden" name="old_~name~" value="~~~name~ attr~~"></div><!--~}~--><!--~file {~-->
                        <div class="caption">~caption html~</div>