Plugin Directory

Changeset 516626


Ignore:
Timestamp:
03/09/2012 07:16:23 AM (14 years ago)
Author:
jazzigor
Message:

Updating trunk to v0.9.5

Location:
jazzy-forms/trunk
Files:
5 added
17 edited

Legend:

Unmodified
Added
Removed
  • jazzy-forms/trunk/back/ctrl-forms.php

    r508925 r516626  
    22
    33function jzzf_ctrl_forms() {
    4     if($_POST['delete']) {
     4    if($_GET['diagnostics']) {
     5        if($_POST['panic']) {
     6            jzzf_panic();
     7            return;
     8        } else {
     9            $db_version = jzzf_get_version();
     10            $version = JZZF_VERSION;
     11            $forms = jzzf_list_form();
     12            include('tpl-diagnostics.php');
     13            return;
     14        }
     15    } elseif($_POST['delete']) {
    516        if(jzzf_delete_form($_POST['delete'])) {
    617            $msg = "Form Deleted.";
  • jazzy-forms/trunk/back/elements.js

    r508925 r516626  
    3737                data.checked = (data.default == "1");
    3838            }
     39        }
     40        data.visible_always = (data.visible == 1);
     41        data.visible_never = (data.visible == 0);
     42        data.zeros_options = [];
     43        data.decimals_options = [];
     44        for(var i=0; i<=9; i++) {
     45            data.zeros_options.push({"value": i, "selected": (data.zeros == i)});
     46            data.decimals_options.push({"value": i, "selected": (data.decimals == i)});
     47        }
     48        for(var i=1; i<=4; i++) {
     49            data['divisions_' + i] = (data.divisions == i);
     50        }
     51        var separators = { "none": "", "comma": ",", "space": " ", "point": "." };
     52        for(var key in separators) {
     53            data['thousands_' + key] = (data.thousands === separators[key]);
     54            data['point_' + key] = (data.point == separators[key]);
    3955        }
    4056        return this.html(tmpl_name, data);
     
    92108   
    93109    this.data = function(li) {
    94         var result = {
    95             "id": li.find('.jzzf_element_id').val(),
    96             "type": li.find('.jzzf_element_type').val(),
    97             "title": li.find('.jzzf_element_title').val(),
    98             "name": li.find('.jzzf_element_name').val(),
    99             "value": li.find('.jzzf_element_value').val(),
    100             "default": li.find('.jzzf_element_default').val()
    101         };
    102         switch(li.find('.jzzf_element_type').val()) {
    103             case 'n':
    104                 result.value = li.find('.jzzf_element_value').val();
    105                 break;
    106             case 'c':
    107                 result.value = li.find('.jzzf_element_value').val();
    108                 result.value2 = li.find('.jzzf_element_value2').val();
    109                 result.default = li.find('.jzzf_element_checked').is(':checked') ? "1" : "0";
     110        var result = {};
     111        var simple = [
     112            'id',
     113            'type',
     114            'title',
     115            'name',
     116            'value',
     117            'value2',
     118            'visible',
     119            'prefix',
     120            'postfix',
     121            'zeros',
     122            'decimals',
     123            'fixed',
     124            'formula',
     125            'thousands',
     126            'point',
     127            'classes',
     128            'divisions',
     129        ];
     130        var checkboxes = [
     131            'fixed',
     132            'break'
     133        ];
     134
     135        var type = li.find('.jzzf_element_type').val();
     136        if(type == 'c') {
     137            result.default = li.find('.jzzf_element_checked').is(':checked') ? "1" : "0";
     138        } else {
     139            simple.push('default');
     140        }
     141
     142        switch(type) {
     143            case 'd':
    110144            case 'r':
    111             case 'd':
    112145                result.options = this.options_data(li);
    113146                break;
    114             case 'f':
    115                 result.formula = li.find('.jzzf_element_formula').val();
    116                 break;
    117147        };
     148
     149        for(var i=0; i<simple.length; i++) {
     150            result[simple[i]] = li.find('.jzzf_element_' + simple[i]).val();
     151        }
     152        for(var i=0; i<checkboxes.length; i++) {
     153            result[checkboxes[i]] = li.find('.jzzf_element_' + checkboxes[i]).is(':checked');
     154        }
    118155        return result;
    119156    }
  • jazzy-forms/trunk/back/gui.css

    r508925 r516626  
    4343#jzzf_main {
    4444    overflow: hidden;
     45    width: 1000px;
    4546    background-color: #fff;
    4647    margin: 0 10px 10px 0px;
     
    4849    border: 1px solid #ddd;
    4950    border-radius: 3px;
     51}
     52
     53.jzzf_section {
     54    width: 1000px;
    5055}
    5156
     
    146151.jzzf_element_body {
    147152    background: #fff;
    148     padding: 8px 12px;
     153    padding: 0;
    149154    border-bottom-left-radius: 3px;
    150155    border-bottom-right-radius: 3px;
     
    153158.jzzf_element_body li {
    154159    margin-bottom: 2px;
     160    height: 30px;
    155161}
    156162
     
    216222.jzzf_type_h { background-image: url('img/h.png'); }
    217223.jzzf_type_m { background-image: url('img/m.png'); }
     224
     225.jzzf_arrow {
     226    width: 32px;
     227    height: 16px;
     228    background: url('img/arrow.png') no-repeat center;
     229    margin: 4px auto;
     230}
     231
     232.jzzf_div_collapsable {
     233    border-top: 1px solid #ccc;
     234}
     235
     236.jzzf_div_collapsable > h3 {
     237    margin: 0;
     238    font-weight: normal;
     239    font-size: 12px;
     240}
     241
     242.jzzf_toggler {
     243    cursor: default;
     244}
     245
     246.jzzf_toggler div {
     247    float: left;
     248    width: 16px;
     249    height: 16px;
     250    background-image: url('img/expanded.png');
     251}
     252
     253.jzzf_div_collapsable {
     254    padding: 4px 12px 8px 12px;
     255}
     256
     257.jzzf_div_collapsable.jzzf_div_collapsed {
     258    padding-bottom: 4px;
     259}
     260
     261.jzzf_div_fixed {
     262    padding: 8px 12px;
     263}
     264
     265.jzzf_div_collapsed .jzzf_toggler div {
     266    background-image: url('img/collapsed.png');
     267}
     268
     269.jzzf_div_collapsed .jzzf_collapsable_body {
     270    display: none;
     271}
     272
     273.jzzf_div_collapsed > h3 {
     274    display: block;
     275}
     276
     277.jzzf_collapsable_body {
     278    margin: 10px 0 0 16px;
     279}
     280
     281.jzzf_collapsable_body label {
     282    width: 124px;
     283}
     284
     285.jzzf_element select {
     286    width: 160px;
     287}
  • jazzy-forms/trunk/back/gui.js

    r508925 r516626  
    1111        var title = id_helper.suggest_title('Element');
    1212        var name = id_helper.suggest_name(title);
    13         return obj = {'title': title, 'name': name, 'type': type};
     13        return obj = {
     14            'title': title,
     15            'name': name,
     16            'type': type,
     17            'decimals': 9,
     18            'point': '.',
     19            'visible': 1,
     20            'divisions': 1,
     21            'break': 1
     22        };
    1423    }
    1524   
     
    6271    function bind() {
    6372        $('#jzzf_main').delegate('input', 'change', mark_dirty);
     73       
     74        $('#jzzf_elements_list').delegate('.jzzf_toggler', 'click', function() {
     75            $(this).parent().toggleClass('jzzf_div_collapsed');
     76        });
    6477       
    6578        $('.jzzf_elements_toolbox_items li').click(function() {
  • jazzy-forms/trunk/back/tpl-forms.php

    r508925 r516626  
    1313<script id="jzzf_tmpl_common" type="text/html">
    1414{{>common_raw}}
    15         <fieldset>
     15        <fieldset class="jzzf_div_fixed">
    1616            <ul class="jzzf_element_parameters">
    1717                <li>
     
    2727</script>
    2828<script id="jzzf_tmpl_foot" type="text/html">
     29        <fieldset class="jzzf_div_collapsable jzzf_div_collapsed">
     30            <h3 class="jzzf_toggler"><div></div>Appearance</h3>
     31            <div class="jzzf_collapsable_body">
     32                <ul>
     33                    <li>
     34                        <label for="jzzf_element_{{counter}}_classes">Custom CSS classes</label>
     35                        <input type="text" id="jzzf_element_{{counter}}_classes" class="jzzf_element_classes" value="{{classes}}">
     36                    </li>
     37                    <li>
     38                        <label for="jzzf_element_{{counter}}_divisions">Width</label>
     39                        <select id="jzzf_element_{{counter}}_divisions" class="jzzf_element_divisions" value="{{classes}}">
     40                            <option value="1" {{#divisions_1}}selected="selected"{{/divisions_1}}>1/1 (Full)</option>
     41                            <option value="2" {{#divisions_2}}selected="selected"{{/divisions_2}}>1/2 (Half)</option>
     42                            <option value="3" {{#divisions_3}}selected="selected"{{/divisions_3}}>1/3 (Third)</option>
     43                            <option value="4" {{#divisions_4}}selected="selected"{{/divisions_4}}>1/4 (Quarter)</option>
     44                        </select>
     45                    </li>
     46                    <li>
     47                        <input type="checkbox" id="jzzf_element_{{counter}}_break" class="jzzf_element_break" {{#break}}checked="checked"{{/break}}>
     48                        <label for="jzzf_element_{{counter}}_break">Start new row</label>
     49                    </li>
     50                </ul>
     51            </div>
     52        </fieldset>
     53{{>visibility}}
    2954    </div>
    3055</li>
    3156</script>
     57<script id="jzzf_tmpl_visibility" type="text/html">
     58        <fieldset class="jzzf_div_collapsable jzzf_div_collapsed">
     59            <h3 class="jzzf_toggler"><div></div>Visibility</h3>
     60            <div class="jzzf_collapsable_body">
     61                <ul>
     62                    <li>
     63                        <label for="jzzf_element_{{counter}}_visible">Show element...</label>
     64                        <select id="jzzf_element_{{counter}}_visible" class="jzzf_element_visible">
     65                            <option value="1" {{#visible_always}}selected="selected"{{/visible_always}}>Always</option>
     66                            <option value="0" {{#visible_never}}selected="selected"{{/visible_never}}>Never</option>
     67                        </select>
     68                    </li>
     69                </ul>
     70            </div>
     71        </fieldset>
     72</script>
    3273<script id="jzzf_tmpl_n" type="text/html">
    3374{{>common}}
    34         <fieldset>
    35             <legend>Value</legend>
     75        <fieldset class="jzzf_div_collapsable">
     76            <h3 class="jzzf_toggler"><div></div>Value</h3>
     77            <div class="jzzf_collapsable_body">
     78                <ul>
     79                    <li>
     80                        <label for="jzzf_element_{{counter}}_value">Factor</label>
     81                        <input type="text" id="jzzf_element_{{counter}}_value" class="jzzf_element_value" value="{{value}}">
     82                    </li>
     83                    <li>
     84                        <label for="jzzf_element_{{id}}_default">Default</label>
     85                        <input type="text" id="jzzf_element_{{id}}_default" class="jzzf_element_default" value="{{default}}">
     86                    </li>
     87                </ul>
     88            </div>
     89        </fieldset>
     90{{>foot}}
     91</script>
     92<script id="jzzf_tmpl_d" type="text/html">
     93{{>common}}
     94{{>options}}
     95{{>foot}}
     96</script>
     97<script id="jzzf_tmpl_r" type="text/html">
     98{{>common}}
     99{{>options}}
     100{{>foot}}
     101</script>
     102<script id="jzzf_tmpl_c" type="text/html">
     103{{>common}}
     104    <fieldset class="jzzf_div_collapsable">
     105        <h3 class="jzzf_toggler"><div></div>Values</h3>
     106        <div class="jzzf_collapsable_body">
    36107            <ul>
    37108                <li>
    38                     <label for="jzzf_element_{{counter}}_value">Factor</label>
     109                    <label for="jzzf_element_{{counter}}_value">Value for checked</label>
    39110                    <input type="text" id="jzzf_element_{{counter}}_value" class="jzzf_element_value" value="{{value}}">
    40111                </li>
    41112                <li>
    42                     <label for="jzzf_element_{{id}}_default">Default</label>
    43                     <input type="text" id="jzzf_element_{{id}}_default" class="jzzf_element_default" value="{{default}}">
    44                 </li>
    45             </ul>               
    46         </fieldset>
    47 {{>foot}}
    48 </script>
    49 <script id="jzzf_tmpl_d" type="text/html">
    50 {{>common}}
    51 {{>options}}
    52 {{>foot}}
    53 </script>
    54 <script id="jzzf_tmpl_r" type="text/html">
    55 {{>common}}
    56 {{>options}}
    57 {{>foot}}
    58 </script>
    59 <script id="jzzf_tmpl_c" type="text/html">
    60 {{>common}}
    61     <fieldset>
    62         <legend>Values</legend>
    63         <ul>
    64             <li>
    65                 <label for="jzzf_element_{{counter}}_value">Value for checked</label>
    66                 <input type="text" id="jzzf_element_{{counter}}_value" class="jzzf_element_value" value="{{value}}">
    67             </li>
    68             <li>
    69                 <label for="jzzf_element_{{counter}}_value2">Value for unchecked</label>
    70                 <input type="text" id="jzzf_element_{{counter}}_value2" class="jzzf_element_value2" value="{{value2}}">
    71             </li>
    72             <li>
    73                 <input type="checkbox" id="jzzf_element_{{counter}}_checked" class="jzzf_element_checked"{{#checked}} checked="checked"{{/checked}}>
    74                 <label for="jzzf_element_{{counter}}_checked">Checked by default</label>
    75             </li>
    76         </ul>
     113                    <label for="jzzf_element_{{counter}}_value2">Value for unchecked</label>
     114                    <input type="text" id="jzzf_element_{{counter}}_value2" class="jzzf_element_value2" value="{{value2}}">
     115                </li>
     116                <li>
     117                    <input type="checkbox" id="jzzf_element_{{counter}}_checked" class="jzzf_element_checked"{{#checked}} checked="checked"{{/checked}}>
     118                    <label for="jzzf_element_{{counter}}_checked">Checked by default</label>
     119                </li>
     120            </ul>
     121        </div>
    77122    </fieldset>
    78123{{>foot}}
     
    80125<script id="jzzf_tmpl_f" type="text/html">
    81126{{>common}}
    82     <fieldset>
    83         <ul>
    84             <li>
    85                 <legend>Formula</legend>
    86                 <label for="jzzf_element_{{counter}}_formula">Formula</label>
    87                 <input type="text" id="jzzf_element_{{counter}}_formula" class="jzzf_element_formula" value="{{formula}}">
    88             </li>
    89         </ul>
    90     </fieldset>
     127    <fieldset class="jzzf_div_collapsable">
     128        <h3 class="jzzf_toggler"><div></div>Formula</h3>
     129        <div class="jzzf_collapsable_body">
     130            <ul>
     131                <li>
     132                    <label for="jzzf_element_{{counter}}_formula">Formula</label>
     133                    <input type="text" id="jzzf_element_{{counter}}_formula" class="jzzf_element_formula" value="{{formula}}">
     134                </li>
     135            </ul>
     136        </div>
     137    </fieldset>
     138        <fieldset class="jzzf_div_collapsable jzzf_div_collapsed">
     139            <h3 class="jzzf_toggler"><div></div>Number format</h3>
     140            <div class="jzzf_collapsable_body">
     141                <ul>
     142                    <li>
     143                        <label for="jzzf_element_{{counter}}_prefix">Unit before number</label>
     144                        <input type="text" id="jzzf_element_{{counter}}_prefix" class="jzzf_element_prefix" value="{{prefix}}">
     145                    </li>
     146                    <li>
     147                        <label for="jzzf_element_{{counter}}_postfix">Unit after number</label>
     148                        <input type="text" id="jzzf_element_{{counter}}_postfix" class="jzzf_element_postfix" value="{{postfix}}">
     149                    </li>
     150                    <li>
     151                        <label for="jzzf_element_{{id}}_zeros">Leading zeros</label>
     152                        <select id="jzzf_element_{{id}}_zeros" class="jzzf_element_zeros">
     153                        {{#zeros_options}}
     154                            <option value="{{value}}"{{#selected}} selected="selected"{{/selected}}>{{value}}</option>
     155                        {{/zeros_options}}
     156                        </select>
     157                    </li>
     158                    <li>
     159                        <label for="jzzf_element_{{id}}_decimals">Decimals</label>
     160                        <select id="jzzf_element_{{id}}_decimals" class="jzzf_element_decimals">
     161                        {{#decimals_options}}
     162                            <option value="{{value}}"{{#selected}} selected="selected"{{/selected}}>{{value}}</option>
     163                        {{/decimals_options}}
     164                        </select>
     165                    </li>
     166                    <li>
     167                        <input type="checkbox" id="jzzf_element_{{id}}_fixed" class="jzzf_element_fixed" value="1"{{#fixed}} checked="checked"{{/fixed}}>
     168                        <label for="jzzf_element_{{id}}_fixed">Fixed decimals</label>
     169                        </select>
     170                    </li>
     171                    <li>
     172                        <label for="jzzf_element_{{id}}_thousands">Thousands separator</label>
     173                        <select id="jzzf_element_{{id}}_thousands" class="jzzf_element_thousands">
     174                            <option value=""{{#thousands_none}} selected="selected"{{/thousands_none}}>None</option>
     175                            <option value=" "{{#thousands_space}} selected="selected"{{/thousands_space}}>White space ( )</option>
     176                            <option value=","{{#thousands_comma}} selected="selected"{{/thousands_comma}}>Comma (,)</option>
     177                            <option value="."{{#thousands_point}} selected="selected"{{/thousands_point}}>Point (.)</option>
     178                        </select>
     179                    </li>
     180                    <li>
     181                        <label for="jzzf_element_{{id}}_point">Decimal point</label>
     182                        <select id="jzzf_element_{{id}}_point" class="jzzf_element_point">
     183                            <option value="."{{#point_point}} selected="selected"{{/point_point}}>Point (.)</option>
     184                            <option value=","{{#point_comma}} selected="selected"{{/point_comma}}>Comma (,)</option>
     185                        </select>
     186                    </li>
     187                </ul>
     188            </div>
     189        </fieldset>
    91190{{>foot}}
    92191</script>
     
    97196<script id="jzzf_tmpl_t" type="text/html">
    98197{{>common_raw}}
    99     <fieldset>
     198    <fieldset class="jzzf_div_fixed">
    100199        <ul>
    101200            <li>
     
    109208<script id="jzzf_tmpl_h" type="text/html">
    110209{{>common_raw}}
    111     <fieldset>
     210    <fieldset class="jzzf_div_fixed">
    112211        <ul>
    113212            <li>
     
    121220<script id="jzzf_tmpl_m" type="text/html">
    122221{{>common_raw}}
    123     <fieldset>
     222    <fieldset class="jzzf_div_fixed">
    124223        <ul>
    125224            <li>
     
    133232
    134233<script id="jzzf_tmpl_options" type="text/html">
    135         <fieldset>
    136             <legend>Options</legend>
    137             <table class="jzzf_option_table">
    138             <thead><tr>
    139                 <th class="jzzf_column_drag"></th>
    140                 <th class="jzzf_column_default">Default</th>
    141                 <th class="jzzf_column_title">Title</th>
    142                 <th class="jzzf_column_value">Value</th>
    143                 <th></th>
    144             </tr></thead>
    145             <tbody>
    146             {{#options}}
    147                 {{>option}}
    148             {{/options}}
    149             </tbody>
    150             </table>
    151             <a href="" class="jzzf_option_add">Add</a>
     234        <fieldset class="jzzf_div_collapsable">
     235            <h3 class="jzzf_toggler"><div></div>Options</h3>
     236            <div class="jzzf_collapsable_body">
     237                <table class="jzzf_option_table">
     238                <thead><tr>
     239                    <th class="jzzf_column_drag"></th>
     240                    <th class="jzzf_column_default">Default</th>
     241                    <th class="jzzf_column_title">Title</th>
     242                    <th class="jzzf_column_value">Value</th>
     243                    <th></th>
     244                </tr></thead>
     245                <tbody>
     246                {{#options}}
     247                    {{>option}}
     248                {{/options}}
     249                </tbody>
     250                </table>
     251                <a href="" class="jzzf_option_add">Add</a>
     252            </div>
    152253        </fieldset>
    153254</script>
     
    167268<div id="jzzf_selection">
    168269    <form id="jzzf_delete_form" method="post" action="#">
    169     <label for="jzzf_selector">Form:</label>
     270    <h3 for="jzzf_selector">Form:</h3>
    170271    <select id="jzzf_selector">
    171272<?php $i=0; foreach($forms as $form) : ?>
     
    209310                </ul>
    210311            </div>
    211             <div id="jzzf_elements_push_for_action">Click or drag to add<br>&gt;&gt;</div>
     312            <div id="jzzf_elements_push_for_action">Click or drag to add<br><div class="jzzf_arrow"></div></div>
    212313            <div id="jzzf_elements">
    213314            <div class="jzzf_column_heading">Form elements</div>
  • jazzy-forms/trunk/core/Graph.php

    r502411 r516626  
    66    $dependencies = array();
    77    $formulas = array();
     8    $params = array();
     9   
     10    $param_keys = array_flip(array('prefix', 'postfix', 'fixed', 'decimals', "zeros", "thousands", "point"));
     11   
    812    foreach($elements as $elem) {
    913        $id = strtolower($elem->name);
     
    2428                }
    2529            }
     30            $params[$id] = array_intersect_key((array) $elem, $param_keys);
    2631        } elseif($values = jzzf_get_values($elem)) {
    2732            $data[$id] = $values;
    2833        }
    2934    }
    30     return compact('data', 'types', 'dependencies', 'formulas');
     35    return compact('data', 'types', 'dependencies', 'formulas', 'params');
    3136}
    3237
     
    3540    foreach($formula as $token) {
    3641        if($token[0] == 'v') {
    37             $deps[] = $token[1];
     42            $id = $token[1];
     43            if(!in_array($id, $deps)) {
     44                $deps[] = $id;
     45            }
    3846        }
    3947    }
  • jazzy-forms/trunk/front/ctrl-shortcode.php

    r508925 r516626  
    1515    }
    1616    return $output;
     17}
     18
     19function jzzf_get_classes($element, $ahead) {
     20    $classes = 'jzzf_element jzzf_element_' . $element->type . ' jzzf_ahead_' . $ahead->type;
     21    if($element->break) {
     22        $classes .= ' jzzf_break';
     23    } else {
     24        $classes .= ' jzzf_no_break';
     25    }
     26    switch($element->divisions) {
     27        case 1:
     28            $classes .= ' jzzf_full';
     29            break;
     30        case 2:
     31            $classes .= ' jzzf_half';
     32            break;
     33        case 3:
     34            $classes .= ' jzzf_third';
     35            break;
     36        case 4:
     37            $classes .= ' jzzf_quarter';
     38            break;
     39    }
     40    if($element->classes) {
     41        $classes .= ' ' . trim($element->classes);
     42    }
     43    return $classes;
    1744}
    1845
     
    3764            $ahead = null;
    3865        }
    39         $tpl->before($element, $ahead);
     66       
     67        $element->classes = jzzf_get_classes($element, $ahead);
     68        $tpl->before($element, $ahead, ($element->break || $idx==0));
    4069       
    4170        switch($element->type) {
     
    71100                break;
    72101        }
    73         $tpl->after($element);
     102        $tpl->after($element, ($ahead && $ahead->break) || ($idx==count($form->elements)-1));
    74103    }
    75104    $tpl->foot($form);
  • jazzy-forms/trunk/front/jazzy-forms.js

    r508925 r516626  
    1 function jazzy_forms($, form_id, jzzf_data, jzzf_types, jzzf_dependencies, jzzf_formulas, jzzf_params) {
     1/*
     2    This file is part of the WordPress plugin "Jazzy Forms"
     3    Copyright (C) 2012 by Igor Prochazka. www.jazzyforms.com
     4    Jazzy Forms is licensed under the GNU General Public License, version 3.
     5*/
     6
     7function jazzy_forms($, form_id, jzzf_data, jzzf_types, jzzf_dependencies, jzzf_formulas, jzzf_form, jzzf_params) {
     8   
     9    var all_ids = [];
     10    var cache = {};
    211   
    312    jzzf_precision = Math.pow(10,9);
     
    615    }
    716   
     17    function retrieve_all_ids() {
     18        for(id in jzzf_types) {
     19            all_ids.push(id);
     20        }
     21    }
    822   
    923    $(function() {
     24        retrieve_all_ids();
     25        update(all_ids);
    1026        bind();
    1127    });
     
    2339        var id;
    2440        for(id in jzzf_types) {
    25             update(id);
    26             if(jzzf_params.realtime) {
     41            if(jzzf_form.realtime) {
    2742                bind_realtime_update(id);
    2843            }
    2944            if(jzzf_types[id] == 'u') {
    3045                element(id).click(function() {
    31                     var id;
    32                     for(id in jzzf_types) {
    33                         update(id);
    34                     }
     46                    update(all_ids);
    3547                });
    3648            }
     
    4254        case 'r':
    4355            element(id).find('input:radio').bind('change ready', function() {
    44                 update(element_id($(this).parents('.jzzf_radio')));
     56                update([element_id($(this).parents('.jzzf_radio'))]);
    4557            });
    4658            break;
    4759        default:
    4860            element(id).bind('change ready', function() {
    49                 update(element_id($(this)));
     61                update([element_id($(this))]);
    5062            });
    5163        }
     
    5466    var just_updated;
    5567   
    56     function update(id) {
     68    function update(ids) {
    5769        just_updated = [];
    58         updating_worker(id);
    59     }
    60            
     70        for(var i=0; i<ids.length; i++) {
     71            var id = ids[i];
     72            delete cache[id]
     73            updating_worker(id);
     74        }
     75    }
     76   
     77    function sanitize_result(val, id) {
     78        var f = parseFloat(val);
     79        if(!isNaN(f)) {
     80            val = f;
     81        }
     82        switch(typeof val) {
     83            case 'undefined':
     84                val = 'Invalid formula';
     85                break;
     86            case 'number':
     87                if(!isNaN(val)) {
     88                    val = jzzf_format(val, jzzf_params[id]);
     89                }
     90                break;
     91            case 'boolean':
     92                val = val ? 1 : 0;
     93                break;
     94        }
     95        return val;
     96    }
     97   
    6198    function updating_worker(id) {
    6299        update_dependent(id);
     
    64101            return;
    65102        }
    66         element(id).val(Math.round(evaluate(id)*jzzf_precision)/jzzf_precision);
     103        element(id).val(sanitize_result(evaluate(id), id));
    67104        just_updated.push(id);       
    68105    }
     
    78115   
    79116    function evaluate(id) {
     117        var result;
     118        if(!(id in cache) || (jzzf_types[id] == 'f' && !(id in just_updated))) {
     119            result = evaluation_worker(id);
     120            cache[id] = result;
     121        } else {
     122            result = cache[id];
     123        }
     124        return result;
     125    }
     126   
     127    function evaluation_worker(id) {
    80128        switch(jzzf_types[id]) {
    81129            case 'n':
     
    106154        var stack = [];
    107155        var f = jzzf_formulas[id];
     156        if(!f) {
     157            return undefined;
     158        }
    108159        for(var i=0; i<f.length; i++) {
    109160            switch(f[i][0]) {
     
    246297    return (all[id])();       
    247298}
     299
     300function jzzf_format(input, args) {
     301   
     302    function get_sign() {
     303        if(parts[0].substr(0,1) == '-') {
     304            sign = '-';
     305            natural = parts[0].substr(1);
     306        } else {
     307            sign = '';
     308            natural = parts[0];
     309        }
     310    }
     311   
     312    function get_decimals() {
     313        if(parts.length > 1) {
     314            decimals = parts[1];
     315        } else {
     316            decimals = '';
     317        }
     318    }
     319
     320    function round() {
     321        var precision = Math.pow(10, args.decimals);
     322        input = Math.round(input*precision)/precision;
     323    }
     324   
     325    function leading_zeros() {
     326        if(args.fixed && args.decimals > decimals.length) {
     327            decimals += Array(args.decimals - decimals.length + 1).join("0");
     328        }
     329    }
     330   
     331    function trailing_zeros() {
     332        if(args.zeros > natural.length) {
     333            natural = Array(args.zeros - natural.length + 1).join("0") + natural;
     334        }
     335    }
     336   
     337    function thousands_separator() {
     338        if(args.thousands.length) {
     339            var len = natural.length;
     340            var result = natural.substr(0, len % 3);
     341            for(var i=len % 3; i<len; i+=3) {
     342                if(result.length) {
     343                    result += args.thousands;
     344                }
     345                result += natural.substr(i, 3);
     346            }
     347            natural = result;
     348        }
     349    }
     350   
     351    round();
     352   
     353    var str = "" + input;
     354    var parts = str.split('.');
     355    var sign;
     356    var natural;
     357    var decimals;
     358   
     359    get_sign();
     360    get_decimals();
     361    leading_zeros();
     362    trailing_zeros();
     363    thousands_separator();
     364
     365    return sign + args.prefix + natural + (decimals.length ? args.point + decimals + args.postfix : args.postfix);
     366}
  • jazzy-forms/trunk/front/themes/1.css

    r508925 r516626  
    1010    vertical-align: baseline;
    1111}
     12
     13.jzzf_form_elements {
     14    width: 420px;
     15}
     16
     17.jzzf_form input, .jzzf_form select {
     18    padding: 0;
     19    margin: 0;
     20}
     21
    1222.jzzf_form :focus {/* remember to define focus styles! */
    1323    outline: 0;
     
    4656}
    4757
    48 .jzzf_form input[type=text], .jzzf_form select {
    49     width: 200px;
     58.jzzf_form .jzzf_element {
     59    padding-right: 8px;
     60    display: block;
    5061}
     62
     63div.jzzf_full { width: 392px; }
     64div.jzzf_half { width: 192px; }
     65div.jzzf_third { width: 125px; }
     66div.jzzf_quarter { width: 92px; }
     67
     68.jzzf_row {
     69    margin: 0;
     70    padding: 0;
     71    overflow: hidden;
     72}
     73
     74.jzzf_form input[type=text], .jzzf_form select { width: 100%; }
     75
     76.jzzf_break {
     77    float: left;
     78    clear: left;
     79}
     80
     81.jzzf_no_break {
     82    float: left;
     83}
  • jazzy-forms/trunk/front/tmpl-list.php

    r508925 r516626  
    22
    33class Jzzf_List_Template {
     4   
    45    function __construct($form) {
    56        $this->form = $form;
     7        $first = true;
    68    }
    79
     
    3739        jzzf_formulas_<?php echo $form->id ?> = <?php echo json_encode($formulas) ?>;
    3840        jzzf_form_<?php echo $form->id ?> = <?php echo json_encode($form) ?>;
    39         jazzy_forms(jQuery, <?php echo $form->id ?>, jzzf_data_<?php echo $form->id ?>, jzzf_types_<?php echo $form->id ?>, jzzf_dependencies_<?php echo $form->id ?>, jzzf_formulas_<?php echo $form->id ?>, jzzf_form_<?php echo $form->id ?>);
     41        jzzf_params_<?php echo $form->id ?> = <?php echo json_encode($params) ?>;
     42        jazzy_forms(jQuery, <?php echo $form->id ?>, jzzf_data_<?php echo $form->id ?>, jzzf_types_<?php echo $form->id ?>, jzzf_dependencies_<?php echo $form->id ?>, jzzf_formulas_<?php echo $form->id ?>, jzzf_form_<?php echo $form->id ?>, jzzf_params_<?php echo $form->id ?>);
    4043    </script>
    4144<?php
     
    4447    function head($form) { ?>
    4548<div class="jzzf_form">
    46 <ul>
     49<ul class="jzzf_form_elements">
    4750<?php
    4851    }
    4952   
    50     function before($element, $ahead) { ?>
    51   <li class="jzzf_element jzzf_element_<?php echo $element->type ?> jzzf_ahead_<?php echo $ahead ? $ahead->type : "end" ?>">
     53    function before($element, $ahead, $first) { ?>
     54    <?php if($first) : ?>
     55  <li class="jzzf_row">
     56    <?php endif ?>
     57  <div class="<?php echo $element->classes ?>" "<?php if($element->visible===0): ?> style="display:none;"<?php endif ?>>
    5258<?php
    5359    }
    5460   
    55     function after($element) { ?>
     61    function after($element, $last) { ?>
     62  </div>
     63        <?php if($last) : ?>
     64  <div class="clear"></div>
    5665  </li>
     66        <?php endif ?>
    5767<?php
    5868    }
     
    6979    <?php $idx = 0; foreach($element->options as $option) { $idx++; ?>
    7080    <li>
    71         <input type="radio" name="<?php $this->id($element) ?>"<?php if($option->default): ?> checked="checked"<?php endif ?>>
    72         <label class="jzzf_radio_option_label"><?php esc_html_e($option->title) ?></label>
     81        <input type="radio" name="<?php $this->id($element) ?>" id="<?php echo $this->id($element) . '-' . $idx ?>"<?php if($option->default): ?> checked="checked"<?php endif ?>>
     82        <label class="jzzf_radio_option_label" for="<?php echo $this->id($element) . '-' . $idx ?>"><?php esc_html_e($option->title) ?></label>
    7383    </li>
    7484<?php
     
    8999    function checkbox($element) { ?>
    90100    <input type="checkbox" id="<?php $this->id($element) ?>"<?php if($element->default): ?> checked="checked"<?php endif ?>>
    91     <label class="jzzf_checkbox_label" for="<?php $this->id($element) ?>"><?php esc_html_e($element->title) ?>
     101    <label class="jzzf_checkbox_label" for="<?php $this->id($element) ?>"><?php esc_html_e($element->title) ?></label>
    92102<?php
    93103    }
  • jazzy-forms/trunk/generated/Basic_Model.php

    r508925 r516626  
    111111    $obj->order = intval($obj->order);
    112112    $obj->external = (bool) ($obj->external);
     113    $obj->visible = intval($obj->visible);
     114    $obj->zeros = intval($obj->zeros);
     115    $obj->decimals = intval($obj->decimals);
     116    $obj->fixed = (bool) ($obj->fixed);
     117    $obj->divisions = intval($obj->divisions);
     118    $obj->break = (bool) ($obj->break);
    113119            $obj->options = jzzf_list_option($obj->id);
    114120        }
     
    126132    $obj->order = intval($obj->order);
    127133    $obj->external = (bool) ($obj->external);
     134    $obj->visible = intval($obj->visible);
     135    $obj->zeros = intval($obj->zeros);
     136    $obj->decimals = intval($obj->decimals);
     137    $obj->fixed = (bool) ($obj->fixed);
     138    $obj->divisions = intval($obj->divisions);
     139    $obj->break = (bool) ($obj->break);
    128140        $obj->options = jzzf_list_option($obj->id);
    129141    }
     
    134146    global $wpdb;
    135147    if($obj->id) {
    136         $query = "UPDATE {$wpdb->prefix}jzzf_element SET `form`=%d,`order`=%d,`type`=%s,`title`=%s,`name`=%s,`formula`=%s,`value`=%s,`value2`=%s,`default`=%s,`external`=%d,`params`=%s WHERE id=%d";
    137         $sql = $wpdb->prepare($query, $obj->form,$obj->order,$obj->type,$obj->title,$obj->name,$obj->formula,$obj->value,$obj->value2,$obj->default,$obj->external,$obj->params, $obj->id);
     148        $query = "UPDATE {$wpdb->prefix}jzzf_element SET `form`=%d,`order`=%d,`type`=%s,`title`=%s,`name`=%s,`formula`=%s,`value`=%s,`value2`=%s,`default`=%s,`external`=%d,`params`=%s,`visible`=%d,`prefix`=%s,`postfix`=%s,`zeros`=%d,`decimals`=%d,`fixed`=%d,`thousands`=%s,`point`=%s,`classes`=%s,`divisions`=%d,`break`=%d WHERE id=%d";
     149        $sql = $wpdb->prepare($query, $obj->form,$obj->order,$obj->type,$obj->title,$obj->name,$obj->formula,$obj->value,$obj->value2,$obj->default,$obj->external,$obj->params,$obj->visible,$obj->prefix,$obj->postfix,$obj->zeros,$obj->decimals,$obj->fixed,$obj->thousands,$obj->point,$obj->classes,$obj->divisions,$obj->break, $obj->id);
    138150        $result = $wpdb->query($sql);
    139151        $id = $obj->id;
    140152    } else {
    141         $query = "INSERT INTO {$wpdb->prefix}jzzf_element (`form`,`order`,`type`,`title`,`name`,`formula`,`value`,`value2`,`default`,`external`,`params`) VALUES (%d,%d,%s,%s,%s,%s,%s,%s,%s,%d,%s)";
    142         $sql = $wpdb->prepare($query, $obj->form,$obj->order,$obj->type,$obj->title,$obj->name,$obj->formula,$obj->value,$obj->value2,$obj->default,$obj->external,$obj->params);
     153        $query = "INSERT INTO {$wpdb->prefix}jzzf_element (`form`,`order`,`type`,`title`,`name`,`formula`,`value`,`value2`,`default`,`external`,`params`,`visible`,`prefix`,`postfix`,`zeros`,`decimals`,`fixed`,`thousands`,`point`,`classes`,`divisions`,`break`) VALUES (%d,%d,%s,%s,%s,%s,%s,%s,%s,%d,%s,%d,%s,%s,%d,%d,%d,%s,%s,%s,%d,%d)";
     154        $sql = $wpdb->prepare($query, $obj->form,$obj->order,$obj->type,$obj->title,$obj->name,$obj->formula,$obj->value,$obj->value2,$obj->default,$obj->external,$obj->params,$obj->visible,$obj->prefix,$obj->postfix,$obj->zeros,$obj->decimals,$obj->fixed,$obj->thousands,$obj->point,$obj->classes,$obj->divisions,$obj->break);
    143155        $result = $wpdb->query($sql);
    144156        $id = $wpdb->insert_id;
  • jazzy-forms/trunk/generated/schema.sql

    r508925 r516626  
    1 CREATE TABLE IF NOT EXISTS {{prefix}}jzzf_form ( id bigint(20) AUTO_INCREMENT, `title` varchar(1024) NOT NULL, `name` varchar(1024) NOT NULL, `theme` int(12) NOT NULL, `css` varchar(1024) NOT NULL, `realtime` int(1) NOT NULL DEFAULT 1,  PRIMARY KEY (id) ) {{charset_collate}};
    2 CREATE TABLE IF NOT EXISTS {{prefix}}jzzf_element ( id bigint(20) AUTO_INCREMENT, `form` bigint(20) NOT NULL, `order` int(12) NOT NULL, `type` varchar(1024) NOT NULL, `title` varchar(1024) NOT NULL, `name` varchar(1024) NOT NULL, `formula` varchar(1024) NOT NULL, `value` varchar(1024) NOT NULL, `value2` varchar(1024) NOT NULL, `default` varchar(1024) NOT NULL, `external` int(1) NOT NULL, `params` varchar(2048) NOT NULL,  PRIMARY KEY (id) ) {{charset_collate}};
     1CREATE TABLE IF NOT EXISTS {{prefix}}jzzf_form ( id bigint(20) AUTO_INCREMENT, `title` TEXT NOT NULL, `name` varchar(1024) NOT NULL, `theme` int(12) NOT NULL, `css` LONGTEXT NOT NULL, `realtime` int(1) NOT NULL DEFAULT 1,  PRIMARY KEY (id) ) {{charset_collate}};
     2CREATE TABLE IF NOT EXISTS {{prefix}}jzzf_element ( id bigint(20) AUTO_INCREMENT, `form` bigint(20) NOT NULL, `order` int(12) NOT NULL, `type` varchar(1024) NOT NULL, `title` TEXT NOT NULL, `name` varchar(1024) NOT NULL, `formula` TEXT NOT NULL, `value` varchar(1024) NOT NULL, `value2` varchar(1024) NOT NULL, `default` varchar(1024) NOT NULL, `external` int(1) NOT NULL, `params` varchar(2048) NOT NULL, `visible` int(12) NOT NULL DEFAULT 1, `prefix` varchar(16) NOT NULL, `postfix` varchar(16) NOT NULL, `zeros` int(1) NOT NULL, `decimals` int(1) NOT NULL DEFAULT 9, `fixed` int(1) NOT NULL DEFAULT 0, `thousands` varchar(1) NOT NULL, `point` varchar(1) NOT NULL DEFAULT '.', `classes` varchar(1024) NOT NULL, `divisions` int(1) NOT NULL DEFAULT 1, `break` int(1) NOT NULL DEFAULT 1,  PRIMARY KEY (id) ) {{charset_collate}};
    33CREATE TABLE IF NOT EXISTS {{prefix}}jzzf_option ( id bigint(20) AUTO_INCREMENT, `order` int(12) NOT NULL, `element` bigint(20) NOT NULL, `default` int(1) NOT NULL, `title` varchar(1024) NOT NULL, `name` varchar(1024) NOT NULL, `value` varchar(1024) NOT NULL,  PRIMARY KEY (id) ) {{charset_collate}};
  • jazzy-forms/trunk/generated/update.sql

    r508925 r516626  
    11ALTER TABLE {{prefix}}jzzf_form ADD COLUMN `realtime` int(1) NOT NULL DEFAULT 1;
     2ALTER TABLE {{prefix}}jzzf_form CHANGE COLUMN css `css` LONGTEXT NOT NULL;
     3ALTER TABLE {{prefix}}jzzf_element ADD COLUMN `visible` int(12) NOT NULL DEFAULT 1;
     4ALTER TABLE {{prefix}}jzzf_element ADD COLUMN `prefix` varchar(16) NOT NULL;
     5ALTER TABLE {{prefix}}jzzf_element ADD COLUMN `postfix` varchar(16) NOT NULL;
     6ALTER TABLE {{prefix}}jzzf_element ADD COLUMN `zeros` int(1) NOT NULL;
     7ALTER TABLE {{prefix}}jzzf_element ADD COLUMN `decimals` int(1) NOT NULL DEFAULT 9;
     8ALTER TABLE {{prefix}}jzzf_element ADD COLUMN `fixed` int(1) NOT NULL DEFAULT 0;
     9ALTER TABLE {{prefix}}jzzf_element ADD COLUMN `thousands` varchar(1) NOT NULL;
     10ALTER TABLE {{prefix}}jzzf_element ADD COLUMN `point` varchar(1) NOT NULL DEFAULT '.';
     11ALTER TABLE {{prefix}}jzzf_element ADD COLUMN `classes` varchar(1024) NOT NULL;
     12ALTER TABLE {{prefix}}jzzf_element ADD COLUMN `divisions` int(1) NOT NULL DEFAULT 1;
     13ALTER TABLE {{prefix}}jzzf_element ADD COLUMN `break` int(1) NOT NULL DEFAULT 1;
     14ALTER TABLE {{prefix}}jzzf_element CHANGE COLUMN title `title` TEXT NOT NULL;
     15ALTER TABLE {{prefix}}jzzf_element CHANGE COLUMN formula `formula` TEXT NOT NULL;
  • jazzy-forms/trunk/jazzy-forms.php

    r508925 r516626  
    33Plugin Name: Jazzy Forms
    44Plugin URI: http://www.jazzyforms.com/
    5 Description: Online form builder
    6 Version: 0.9.4
     5Description: Online form builder with an emphasis on calculation
     6Version: 0.9.5
    77Author: Igor Prochazka
    88Author URI: http://www.l90r.com/
     
    2828*/
    2929
    30 define(JZZF_VERSION, 0.0904);
     30define(JZZF_VERSION, 0.0905);
     31define(JZZF_OPTION_VERSION, 'jzzf_version');
    3132
    3233define(JZZF_ROOT, WP_PLUGIN_DIR . '/jazzy-forms/');
     
    3536define(JZZF_BACK, JZZF_ROOT . 'back/');
    3637define(JZZF_FRONT, JZZF_ROOT . 'front/');
     38
     39function jzzf_get_version() {
     40    return get_option(JZZF_OPTION_VERSION, 0.0);
     41}
     42
     43function jzzf_set_version($float) {
     44    update_option(JZZF_OPTION_VERSION, JZZF_VERSION);
     45}
     46
     47function jzzf_delete_version() {
     48    delete_option(JZZF_OPTION_VERSION);
     49}
    3750
    3851function jzzf_head() {
     
    6578
    6679function jzzf_init() {
     80    jzzf_sanitize_db();
    6781}
    6882
     
    7084    global $wpdb;
    7185
    72     if(!empty($wpdb->charset)) {
    73         $charset_collate = "DEFAULT CHARACTER SET $wpdb->charset";
    74     }
    75    
    76     if(!empty($wpdb->collate)) {
    77         $charset_collate .= " COLLATE $wpdb->collate";
    78     }
    79    
    80     jzzf_create_tables($charset_collate);
    81     jzzf_update($charset_collate);
    82 }
    83 
    84 function jzzf_create_tables($charset_collate) {
    85     jzzf_execute_sql('schema.sql', $charset_collate);
    86 }
    87 
    88 function jzzf_execute_sql($filename, $charset_collate) {
     86    jzzf_create_tables();
     87    jzzf_update();
     88}
     89
     90function jzzf_create_tables() {
     91    jzzf_execute_sql('schema.sql');
     92}
     93
     94function jzzf_execute_sql($filename) {
    8995    global $wpdb;
     96   
     97    $charset_collate = jzzf_charset_collate();
    9098
    9199    $file = file( dirname(__FILE__) . '/generated/' . $filename );
     
    100108}
    101109
    102 function jzzf_update($charset_collate) {
    103     $previous = get_option('jzzf_version', 0.0);
    104     update_option('jzzf_version', JZZF_VERSION);
    105    
    106     jzzf_execute_sql('update.sql', $charset_collate);   
     110function jzzf_panic() {
     111    jzzf_execute_sql('drop.sql');
     112    jzzf_delete_version();
     113    deactivate_plugins(JZZF_ROOT . 'jazzy-forms.php');
     114}
     115
     116function jzzf_sanitize_db() {
     117    $current = jzzf_get_version();
     118    if($current < JZZF_VERSION) {
     119        jzzf_update();
     120    }
     121}
     122
     123function jzzf_charset_collate() {
     124    global $wpdb;
     125   
     126    $charset_collate = '';
     127   
     128    if(!empty($wpdb->charset)) {
     129        $charset_collate = "DEFAULT CHARACTER SET $wpdb->charset";
     130    }
     131   
     132    if(!empty($wpdb->collate)) {
     133        $charset_collate .= " COLLATE $wpdb->collate";
     134    }   
     135    return $charset_collate;
     136}
     137
     138
     139function jzzf_update() {   
     140    jzzf_execute_sql('update.sql');
     141    jzzf_set_version(JZZF_VERSION);
    107142}
    108143
  • jazzy-forms/trunk/readme.txt

    r508925 r516626  
    55Requires at least: 3.2.1
    66Tested up to: 3.3.1
    7 Stable tag: 0.9.4
     7Stable tag: 0.9.5
    88
    99Jazzy Forms is an online form generator that performs instant calculations. It's ideal for inter-active price calculators.
     
    1818* Easy form set-up with drag and drop
    1919* Real-time formula evaluation
     20* Hidden elements
     21* Rich number formatting
     22* Flexible (vertical or side-by-side) layout
    2023
    2124Form elements:
     
    106109== Changelog ==
    107110
     111= 0.9.5 =
     112* Fix updating procedure (support automatic updates)
     113* Improve performance
     114* Element visibility (hide/show elements)
     115* Support long titles, formulas and CSS definitions
     116* Number formatting
     117* Horizontal (side-by-side) layout
     118* Custom extra CSS/HTML classes for elements
     119
    108120= 0.9.4 =
    109121* Some GUI polishing
Note: See TracChangeset for help on using the changeset viewer.