Calculated Fields Form - Version 1.0.336

Version Description

  • Modifies the code of the plugin for allowing the compatibility with outdated versions of PHP.
Download this release

Release Info

Developer codepeople
Plugin Icon 128x128 Calculated Fields Form
Version 1.0.336
Comparing to
See all releases

Code changes from version 1.0.318 to 1.0.336

README.txt CHANGED
@@ -56,6 +56,7 @@ The "Calculated Fields Form" plugin allows the specific integration with the fol
56
* Page Builder by SiteOrigin.
57
* Beaver Builder.
58
* Visual Composer.
59
* For other editors, the shortcodes should be inserted using other controls of general purpose, like the controls for inserting HTML or shortcodes.
60
61
= Latest Features Added =
@@ -94,6 +95,7 @@ The plugin has two additional (commercial) versions: **Premium** and **Developer
94
* Submits the form data, and stores the data on database, for future review
95
* Allows send notification emails with the data submitted, to the form editor and users
96
* Allows charge the calculated field directly through PayPal
97
* Allows export and import your forms between different WordPress
98
* Allows to display the submitted data in the thanks page
99
* Includes a dashboard widget to display the submissions of the last week
@@ -132,6 +134,7 @@ The plugin has two additional (commercial) versions: **Premium** and **Developer
132
* Includes the "WebMerge" add-on to integrate the forms with the WebMerge Service, and generate PDF and Office documents at runtime with the information collected by the forms.
133
* Includes the "PrintFriendly" add-on to integrate the forms with the PrintFriendly API for generating PDF files after forms submissions, and attach the resulting files to the notification emails.
134
* Includes the "MailChimp" add-on to add new members to the MailChimp Service using the data collected by the form.
135
* Includes the "Emma" add-on to add new members to the Emma Service using the data collected by the form.
136
* Includes the "Twilio" add-on for sending notification messages (SMS) when the forms are submitted.
137
* Includes the "MailPoet" add-on to add new subscribers to the MailPoet's Mailing Lists.
@@ -424,6 +427,12 @@ Includes the "MailChimp" add-on to integrate the forms with the MailChimp Servic
424
425
[CLICK HERE for additional information ](http://cff.dwbooster.com/documentation#mailchimp-addon "MailChimp add-on")
426
427
= Emma add-on - Only available in the Platinum version of the plugin =
428
429
Includes the "Emma" add-on to integrate the forms with the Emma Service to add new members to the Emma groups.
@@ -919,64 +928,51 @@ This way the special characters should show correctly.
919
920
== Changelog ==
921
922
- = 1.0.318 =
923
924
- * Modifies the Advanced Equations module.
925
- * Improves the performance of DS fields (Developer and Platinum versions of the plugin).
926
- * Modifies the WooCommerce add-on to include the form in the products' pages, even if the products' prices were left in blank in the WooCommerce settings (Developer and Platinum versions of the plugin).
927
- * Modifies the RedSys add-on to prevent the payments fail if the "Product name" attribute was left in blank in the form's settings (Platinum version of the plugin).
928
929
- = 1.0.317 =
930
931
- * Modifies the Upload File field.
932
- * Modifies the Users Permissions add-on to prevent the files uploaded previously being lost when the uses edit their submissions.
933
934
- = 1.0.316 =
935
936
- * Fixes a conflict with other plugins that use the forms builder.
937
- * Fixes an issue between the module that pre-fills the form's fields and the dependencies.
938
- * Includes the "callback" attribute in the fields tags, allowing to apply escape functions before the tags' replacement (Professional, Developer and Platinum versions of the plugin).
939
- * Implements the "STRAIGHT" mode in the "DISTANCE" operation to determine the straight line distance between addresses (Developer and Platinum versions of the plugin).
940
- * Implements the attribute: events_per_page into the [CP_CALCULATED_FIELDS_RESULT_LIST] shortcode to allow paginate the submissions lists (Professional, Developer and Platinum versions of the plugin).
941
- * Implements the attribute: events_per_page into the [CP_CALCULATED_FIELDS_USER_SUBMISSIONS_LIST] shortcode of the Users Permissions add-on for controlling the number of items per page (Developer and Platinum versions of the plugin).
942
- * Allows to insert the [CP_CALCULATED_FIELDS_USER_SUBMISSIONS_LIST] shortcode with the format: [CP_CALCULATED_FIELDS_USER_SUBMISSIONS_LIST] content [/CP_CALCULATED_FIELDS_USER_SUBMISSIONS_LIST]. In this way the content takes precedence over the "Summary" attribute in the form's settings (Developer and Platinum versions of the plugin).
943
944
- = 1.0.315 =
945
946
- * Fixes some minor issues.
947
- * Implements a specific element to insert the forms using Visual Composer.
948
949
- = 1.0.314 =
950
951
- * Fixes an issue with the tooltips in multi-pages forms.
952
- * Fixes an issue assigning the default values in the Date/Time fields, specifically populating the time component.
953
954
- = 1.0.313 =
955
956
- * Improves the integration with the different pages builders: Gutenberg, SiteOrigin, Beaver Page Builder, Elementor.
957
- * Includes a new module in the Beaver Page Builder for generating the javascript variables.
958
- * Fixes an issue in the PrintFriendly add-on when there are multiple notification emails (Platinum version of the plugin).
959
960
- = 1.0.312 =
961
962
- * Modifies the module that generates the Captcha.
963
964
- = 1.0.311 =
965
966
- * Improves the generated form reducing its code.
967
- * Fixes an common issue caused by the users that enter comma signs as separator of class names in the 'Add Custom Coding Keywords' attributes of fields settings.
968
- * Fixes an issue in the signature add-on. It was hiding the signature when the submission is being edited by the 'Users Permissions' add-on.
969
970
- = 1.0.310 =
971
972
- * Fixes a conflict between the Forms Preview module and some popular themes.
973
974
- = 1.0.309 =
975
976
- * Modifies the number and slider controls to allow entering the blank character as the thousands separator.
977
978
== Upgrade Notice ==
979
980
- = 1.0.318 =
981
982
Important note: If you are using the Professional version don't update via the WP dashboard but using your personal update link. Contact us if you need further information: http://cff.dwbooster.com/contact-us
56
* Page Builder by SiteOrigin.
57
* Beaver Builder.
58
* Visual Composer.
59
+ * DIVI Builder.
60
* For other editors, the shortcodes should be inserted using other controls of general purpose, like the controls for inserting HTML or shortcodes.
61
62
= Latest Features Added =
95
* Submits the form data, and stores the data on database, for future review
96
* Allows send notification emails with the data submitted, to the form editor and users
97
* Allows charge the calculated field directly through PayPal
98
+ * Payments are SCA ready (Strong Customer Authentication), compatible with the new Payment services (PSD 2) - Directive (EU)
99
* Allows export and import your forms between different WordPress
100
* Allows to display the submitted data in the thanks page
101
* Includes a dashboard widget to display the submissions of the last week
134
* Includes the "WebMerge" add-on to integrate the forms with the WebMerge Service, and generate PDF and Office documents at runtime with the information collected by the forms.
135
* Includes the "PrintFriendly" add-on to integrate the forms with the PrintFriendly API for generating PDF files after forms submissions, and attach the resulting files to the notification emails.
136
* Includes the "MailChimp" add-on to add new members to the MailChimp Service using the data collected by the form.
137
+ * Includes the "Mautic" add-on to add new contacts (or update the existent ones) into the Mautic Service, using the information collected by the form.
138
* Includes the "Emma" add-on to add new members to the Emma Service using the data collected by the form.
139
* Includes the "Twilio" add-on for sending notification messages (SMS) when the forms are submitted.
140
* Includes the "MailPoet" add-on to add new subscribers to the MailPoet's Mailing Lists.
427
428
[CLICK HERE for additional information ](http://cff.dwbooster.com/documentation#mailchimp-addon "MailChimp add-on")
429
430
+ = Mautic add-on - Only available in the Platinum version of the plugin =
431
+
432
+ Includes the "Mautic" add-on to integrate the forms with the Mautic Service. This add-on creates new contacts, or update the existent ones, in the Mautic service.
433
+
434
+ [CLICK HERE for additional information ](http://cff.dwbooster.com/documentation#mautic-addon "Mautic add-on")
435
+
436
= Emma add-on - Only available in the Platinum version of the plugin =
437
438
Includes the "Emma" add-on to integrate the forms with the Emma Service to add new members to the Emma groups.
928
929
== Changelog ==
930
931
+ = 1.0.336 =
932
933
+ * Modifies the code of the plugin for allowing the compatibility with outdated versions of PHP.
934
935
+ = 1.0.335 =
936
937
+ * Fixes an issue in forms when the calculated fields are evaluated the first time.
938
939
+ = 1.0.334 =
940
941
+ * Modifies the dependencies in the calculated fields to allow the use of value and value|r (for raw values) in the manual definition of dependency rules.
942
943
+ = 1.0.333 =
944
945
+ * Includes specific buttons in the Logical Operations module to for the operators: equal, not equal, less than, less than or equal to, greater than, greater than or equal.
946
947
+ = 1.0.332 =
948
949
+ * Includes a specific DIVI module to allow the insertion of the form's shortcode from the DIVI Builder.
950
951
+ = 1.0.331 =
952
953
+ * Modifies the module that evaluate all equations, and the dependencies, improving the forms performance.
954
955
+ = 1.0.330 =
956
957
+ * Modifies the 'Equal To' attribute in the controls: Single Line Text, Email and Password for all versions of the plugin, and the controls: Line Text DS, Email DS in the Developer and Platinum versions.
958
959
+ = 1.0.329 =
960
961
+ * Modifies the CSS editor.
962
+ * Includes the new filter: cpcff_price that allows modify the calculated price. This filter receives two parameters: the calcualted price, and an array with the list of fields and their values (Professional, Developer and Platinum versions of the plugin).
963
+ * Modifies the SERVER-SIDE EQUATIONS add-on. The new version includes a new section in the forms' settings to allow calculate the final price through a server side equation after the form be submitted (Developer and Platinum versions of the plugin).
964
965
+ = 1.0.328 =
966
967
+ * Replaces the 'Customize Form Design' attribute in the 'Form Settings' tab by a real CSS editor, with auto-completing, syntax highlighting, and error checking.
968
969
+ = 1.0.327 =
970
971
+ * Improves the definition of the dependencies in the Radio Buttons, Checkbox and DropDown fields.
972
+ * Modifies the script blocks to prevent that some optimization plugins affect the forms.
973
974
== Upgrade Notice ==
975
976
+ = 1.0.336 =
977
978
Important note: If you are using the Professional version don't update via the WP dashboard but using your personal update link. Contact us if you need further information: http://cff.dwbooster.com/contact-us
changelog.txt CHANGED
@@ -1,5 +1,83 @@
1
== Changelog ==
2
3
= 1.0.318 =
4
5
* Modifies the Advanced Equations module.
1
== Changelog ==
2
3
+ = 1.0.336 =
4
+
5
+ * Modifies the code of the plugin for allowing the compatibility with outdated versions of PHP.
6
+
7
+ = 1.0.335 =
8
+
9
+ * Fixes an issue in forms when the calculated fields are evaluated the first time.
10
+
11
+ = 1.0.334 =
12
+
13
+ * Modifies the dependencies in the calculated fields to allow the use of value and value|r (for raw values) in the manual definition of dependency rules.
14
+
15
+ = 1.0.333 =
16
+
17
+ * Includes specific buttons in the Logical Operations module to for the operators: equal, not equal, less than, less than or equal to, greater than, greater than or equal.
18
+
19
+ = 1.0.332 =
20
+
21
+ * Includes a specific DIVI module to allow the insertion of the form's shortcode from the DIVI Builder.
22
+
23
+ = 1.0.331 =
24
+
25
+ * Modifies the module that evaluate all equations, and the dependencies, improving the forms performance.
26
+
27
+ = 1.0.330 =
28
+
29
+ * Modifies the 'Equal To' attribute in the controls: Single Line Text, Email and Password for all versions of the plugin, and the controls: Line Text DS, Email DS in the Developer and Platinum versions.
30
+
31
+ = 1.0.329 =
32
+
33
+ * Modifies the CSS editor.
34
+ * Includes the new filter: cpcff_price that allows modify the calculated price. This filter receives two parameters: the calcualted price, and an array with the list of fields and their values (Professional, Developer and Platinum versions of the plugin).
35
+ * Modifies the SERVER-SIDE EQUATIONS add-on. The new version includes a new section in the forms' settings to allow calculate the final price through a server side equation after the form be submitted (Developer and Platinum versions of the plugin).
36
+
37
+ = 1.0.328 =
38
+
39
+ * Replaces the 'Customize Form Design' attribute in the 'Form Settings' tab by a real CSS editor, with auto-completing, syntax highlighting, and error checking.
40
+
41
+ = 1.0.327 =
42
+
43
+ * Improves the definition of the dependencies in the Radio Buttons, Checkbox and DropDown fields.
44
+ * Modifies the script blocks to prevent that some optimization plugins affect the forms.
45
+
46
+ = 1.0.326 =
47
+
48
+ * Modifies the forms' validations module to restrict the error messages to the form's scope, and not to the page's scope. At the page's scope the error messages defined by the last form in the page, affect to the other forms in the same page.
49
+
50
+ = 1.0.325 =
51
+
52
+ * Modifies the way the plugin manages the session variables.
53
+ * Allows to includes results shortcodes for multiple forms in the thank you page. Furthermore, includes the if_latest attribute in the results shortcode (Professional, Developer and Platinum versions of the plugin).
54
+
55
+ = 1.0.324 =
56
+
57
+ * Modifies the number control. Includes the percent option as the field's formats. The numbers configured as percent should not be divide by 100 in the equations.
58
+
59
+ = 1.0.323 =
60
+
61
+ * Modifies the controls: checkbox and radio buttons to prevent a conflict with those themes that manipulate the DOM of pages at runtime to customize the appearance of these fields.
62
+
63
+ = 1.0.322 =
64
+
65
+ * Modifies the module that manage the browser's history. Now if there is a multi-pages form, and the browser's persistence is enabled on it, if the user refreshes the browser when he/she is populating the fields of page X, the plugin will pre-fill the form's fields, and will jump to the page X automatically.
66
+
67
+ = 1.0.321 =
68
+
69
+ * Fixes some notices related with the servers' settings.
70
+
71
+ = 1.0.320 =
72
+
73
+ * Modifies the Radio Buttons, Checkbox and DropDown controls. Implements in them the setChoices method to replace their choices programmatically.
74
+ * Modifies the Calculated fields to improve the process that evaluates the equations.
75
+ * Modifies the module that check the dependencies.
76
+
77
+ = 1.0.319 =
78
+
79
+ * Fixes an issue in the integration with Visual Composer.
80
+
81
= 1.0.318 =
82
83
* Modifies the Advanced Equations module.
config/cpcff_config.cfg.php CHANGED
@@ -133,9 +133,8 @@ if(!function_exists('cpcff_init_constants'))
133
if(!defined('CP_CALCULATEDFIELDSF_DEFAULT_fp_from_email'))
134
{
135
$user_email = get_the_author_meta('user_email', get_current_user_id());
136
- $host = $_SERVER['HTTP_HOST'];
137
- preg_match("/[^\.\/]+(\.[^\.\/]+)?#x2F;", $host, $matches);
138
- $domain = $matches[0];
139
$pos = strpos($user_email, $domain);
140
if ($pos === false) define('CP_CALCULATEDFIELDSF_DEFAULT_fp_from_email', 'admin@'.$domain );
141
else define('CP_CALCULATEDFIELDSF_DEFAULT_fp_from_email', $user_email );
133
if(!defined('CP_CALCULATEDFIELDSF_DEFAULT_fp_from_email'))
134
{
135
$user_email = get_the_author_meta('user_email', get_current_user_id());
136
+ $host = isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : '';
137
+ $domain = preg_match("/[^\.\/]+(\.[^\.\/]+)?#x2F;", $host, $matches) ? $matches[0] : $user_email;
138
$pos = strpos($user_email, $domain);
139
if ($pos === false) define('CP_CALCULATEDFIELDSF_DEFAULT_fp_from_email', 'admin@'.$domain );
140
else define('CP_CALCULATEDFIELDSF_DEFAULT_fp_from_email', $user_email );
cp_calculatedfieldsf_free.php CHANGED
@@ -3,7 +3,7 @@
3
Plugin Name: Calculated Fields Form
4
Plugin URI: https://cff.dwbooster.com
5
Description: Create forms with field values calculated based in other form field values.
6
- Version: 1.0.318
7
Text Domain: calculated-fields-form
8
Author: CodePeople
9
Author URI: https://cff.dwbooster.com
@@ -16,7 +16,7 @@ if(!defined('WP_DEBUG') || true != WP_DEBUG)
16
}
17
18
// Defining main constants
19
- define('CP_CALCULATEDFIELDSF_VERSION', '1.0.318' );
20
define('CP_CALCULATEDFIELDSF_MAIN_FILE_PATH', __FILE__ );
21
define('CP_CALCULATEDFIELDSF_BASE_PATH', dirname( CP_CALCULATEDFIELDSF_MAIN_FILE_PATH ) );
22
define('CP_CALCULATEDFIELDSF_BASE_NAME', plugin_basename( CP_CALCULATEDFIELDSF_MAIN_FILE_PATH ) );
3
Plugin Name: Calculated Fields Form
4
Plugin URI: https://cff.dwbooster.com
5
Description: Create forms with field values calculated based in other form field values.
6
+ Version: 1.0.336
7
Text Domain: calculated-fields-form
8
Author: CodePeople
9
Author URI: https://cff.dwbooster.com
16
}
17
18
// Defining main constants
19
+ define('CP_CALCULATEDFIELDSF_VERSION', '1.0.336' );
20
define('CP_CALCULATEDFIELDSF_MAIN_FILE_PATH', __FILE__ );
21
define('CP_CALCULATEDFIELDSF_BASE_PATH', dirname( CP_CALCULATEDFIELDSF_MAIN_FILE_PATH ) );
22
define('CP_CALCULATEDFIELDSF_BASE_NAME', plugin_basename( CP_CALCULATEDFIELDSF_MAIN_FILE_PATH ) );
inc/cpcff_admin_int.inc.php CHANGED
@@ -11,6 +11,7 @@ require_once CP_CALCULATEDFIELDSF_BASE_PATH.'/inc/cpcff_templates.inc.php';
11
12
check_admin_referer( 'cff-form-settings', '_cpcff_nonce' );
13
wp_enqueue_media();
14
15
if (!defined('CP_CALCULATEDFIELDSF_ID'))
16
define ('CP_CALCULATEDFIELDSF_ID',intval($_GET["cal"]));
11
12
check_admin_referer( 'cff-form-settings', '_cpcff_nonce' );
13
wp_enqueue_media();
14
+ if(function_exists('wp_enqueue_code_editor')) wp_enqueue_code_editor( array( 'type' => 'text/html' ) );
15
16
if (!defined('CP_CALCULATEDFIELDSF_ID'))
17
define ('CP_CALCULATEDFIELDSF_ID',intval($_GET["cal"]));
inc/cpcff_main.inc.php CHANGED
@@ -379,6 +379,7 @@ if(!class_exists('CPCFF_MAIN'))
379
{
380
if(isset($atts['shortcode_atts']))
381
{
382
global $wp_styles, $wp_scripts;
383
if(!empty($wp_scripts)) $wp_scripts->reset();
384
$message = $this->public_form($atts['shortcode_atts']);
@@ -819,13 +820,13 @@ if(!class_exists('CPCFF_MAIN'))
819
<?php
820
}
821
?>
822
- <script type='text/javascript'>
823
/* <![CDATA[ */
824
<?php
825
print 'var cp_calculatedfieldsf_fbuilder_config_'.self::$form_counter.'={"obj":'.$config_json.'};';
826
?>
827
/* ]]> */
828
- </script>
829
<?php
830
}
831
} // End _public_resources
379
{
380
if(isset($atts['shortcode_atts']))
381
{
382
+ error_reporting(E_ERROR|E_PARSE);
383
global $wp_styles, $wp_scripts;
384
if(!empty($wp_scripts)) $wp_scripts->reset();
385
$message = $this->public_form($atts['shortcode_atts']);
820
<?php
821
}
822
?>
823
+ <pre style="display:none !important;"><script type='text/javascript'>
824
/* <![CDATA[ */
825
<?php
826
print 'var cp_calculatedfieldsf_fbuilder_config_'.self::$form_counter.'={"obj":'.$config_json.'};';
827
?>
828
/* ]]> */
829
+ </script></pre>
830
<?php
831
}
832
} // End _public_resources
inc/cpcff_page_builders.inc.php CHANGED
@@ -43,6 +43,9 @@ if(!class_exists('CPCFF_PAGE_BUILDERS'))
43
include_once CP_CALCULATEDFIELDSF_BASE_PATH.'/pagebuilders/beaverbuilder/cffvar/cffvar.inc.php';
44
}
45
46
} // End init
47
48
public function after_setup_theme()
@@ -57,6 +60,16 @@ if(!class_exists('CPCFF_PAGE_BUILDERS'))
57
add_action('vcv:api', array($instance, 'visualcomposer_editor'));
58
} // End after_setup_theme
59
60
/**************************** GUTENBERG ****************************/
61
62
/**
@@ -148,7 +161,7 @@ if(!class_exists('CPCFF_PAGE_BUILDERS'))
148
149
public function visualcomposer_editor($api)
150
{
151
- $elementsToRegister = [ 'CFFForm', ];
152
$pluginBaseUrl = rtrim(plugins_url('/pagebuilders/visualcomposer/', CP_CALCULATEDFIELDSF_MAIN_FILE_PATH), '\\/');
153
$elementsApi = $api->elements;
154
foreach ($elementsToRegister as $tag)
43
include_once CP_CALCULATEDFIELDSF_BASE_PATH.'/pagebuilders/beaverbuilder/cffvar/cffvar.inc.php';
44
}
45
46
+ // DIVI
47
+ add_action( 'et_builder_ready', array($instance, 'divi_editor') );
48
+
49
} // End init
50
51
public function after_setup_theme()
60
add_action('vcv:api', array($instance, 'visualcomposer_editor'));
61
} // End after_setup_theme
62
63
+ /**************************** DIVI ****************************/
64
+
65
+ public function divi_editor()
66
+ {
67
+ if(class_exists('ET_Builder_Module'))
68
+ {
69
+ require_once CP_CALCULATEDFIELDSF_BASE_PATH.'/pagebuilders/divi/cff.pb.php';
70
+ }
71
+ } // End divi_editor
72
+
73
/**************************** GUTENBERG ****************************/
74
75
/**
161
162
public function visualcomposer_editor($api)
163
{
164
+ $elementsToRegister = array('CFFForm');
165
$pluginBaseUrl = rtrim(plugins_url('/pagebuilders/visualcomposer/', CP_CALCULATEDFIELDSF_MAIN_FILE_PATH), '\\/');
166
$elementsApi = $api->elements;
167
foreach ($elementsToRegister as $tag)
inc/cpcff_public_int.inc.php CHANGED
@@ -50,7 +50,7 @@ if( !empty( $form_data ) )
50
<form name="<?php echo $form_data[ 1 ][ 'formid' ]; ?>" id="<?php echo $form_data[ 1 ][ 'formid' ]; ?>" action="?" method="post" enctype="multipart/form-data" class="<?php
51
if(!empty($form_data[1][0]) && !empty($form_data[1][0]->persistence)) echo ' persist-form';
52
if(!empty($atts) && !empty($atts['class'])) echo ' '.esc_attr($atts['class']);
53
- ?>"><input type="hidden" name="cp_calculatedfieldsf_id" value="<?php echo $id; ?>" /><pre style="display:none;"><!--noptimize--><script>form_structure_<?php echo CPCFF_MAIN::$form_counter; ?>=<?php print str_replace( array( "\n", "\r" ), " ", ((version_compare(CP_CFF_PHPVERSION,"5.3.0")>=0)?json_encode($form_data, JSON_HEX_QUOT|JSON_HEX_TAG):json_encode($form_data)) ); ?>;</script><!--/noptimize--></pre>
54
<div id="fbuilder">
55
<div id="fbuilder_<?php echo CPCFF_MAIN::$form_counter; ?>">
56
<div id="formheader_<?php echo CPCFF_MAIN::$form_counter; ?>"></div>
50
<form name="<?php echo $form_data[ 1 ][ 'formid' ]; ?>" id="<?php echo $form_data[ 1 ][ 'formid' ]; ?>" action="?" method="post" enctype="multipart/form-data" class="<?php
51
if(!empty($form_data[1][0]) && !empty($form_data[1][0]->persistence)) echo ' persist-form';
52
if(!empty($atts) && !empty($atts['class'])) echo ' '.esc_attr($atts['class']);
53
+ ?>"><input type="hidden" name="cp_calculatedfieldsf_id" value="<?php echo $id; ?>" /><pre style="display:none !important;"><!--noptimize--><script>form_structure_<?php echo CPCFF_MAIN::$form_counter; ?>=<?php print str_replace( array( "\n", "\r" ), " ", ((version_compare(CP_CFF_PHPVERSION,"5.3.0")>=0)?json_encode($form_data, JSON_HEX_QUOT|JSON_HEX_TAG):json_encode($form_data)) ); ?>;</script><!--/noptimize--></pre>
54
<div id="fbuilder">
55
<div id="fbuilder_<?php echo CPCFF_MAIN::$form_counter; ?>">
56
<div id="formheader_<?php echo CPCFF_MAIN::$form_counter; ?>"></div>
inc/cpcff_session.inc.php CHANGED
@@ -174,6 +174,22 @@ if( !class_exists( 'CP_SESSION' ) )
174
$instance->_unset_var( $name );
175
}
176
177
} // End clss
178
}
179
?>
174
$instance->_unset_var( $name );
175
}
176
177
+ // Special methods for registering and recovering the forms submissions
178
+ public static function register_event($eventid, $formid)
179
+ {
180
+ $cp_cff_form_data = self::get_var('cp_cff_form_data');
181
+ if(empty($cp_cff_form_data)) $cp_cff_form_data = array();
182
+
183
+ $cp_cff_form_data[$formid] = $eventid;
184
+ $cp_cff_form_data['latest'] = $formid;
185
+
186
+ self::set_var('cp_cff_form_data', $cp_cff_form_data);
187
+ }
188
+
189
+ public static function registered_events()
190
+ {
191
+ return self::get_var('cp_cff_form_data');
192
+ }
193
} // End clss
194
}
195
?>
js/fbuilder-loader-public.php CHANGED
@@ -74,24 +74,7 @@ fbuilderjQuery.fbuilderjQueryGenerator = function(){
74
try {
75
var cp_calculatedfieldsf_fbuilder_config = window["cp_calculatedfieldsf_fbuilder_config"+fnum];
76
var f = $("#fbuilder"+fnum).fbuilder(( typeof cp_calculatedfieldsf_fbuilder_config.obj == 'string' ) ? $.parseJSON(cp_calculatedfieldsf_fbuilder_config.obj) : cp_calculatedfieldsf_fbuilder_config.obj );
77
- $("#cp_calculatedfieldsf_pform"+fnum).validate({
78
- ignore:".ignore,.ignorepb",
79
- errorElement: "div",
80
- errorPlacement: function(e, element)
81
- {
82
- var _parent = element.closest( '.dfield' ),
83
- _uh = _parent.find( 'span.uh:visible' );
84
-
85
- if( _uh.length )
86
- e.appendTo( _uh );
87
- else
88
- e.insertAfter( _parent );
89
-
90
- e.addClass( 'message' )
91
- .css( 'position', 'absolute' );
92
- }
93
- });
94
- f.fBuild.loadData("form_structure"+fnum);
95
} catch (e) {}
96
fcount++;
97
fnum = "_"+fcount;
74
try {
75
var cp_calculatedfieldsf_fbuilder_config = window["cp_calculatedfieldsf_fbuilder_config"+fnum];
76
var f = $("#fbuilder"+fnum).fbuilder(( typeof cp_calculatedfieldsf_fbuilder_config.obj == 'string' ) ? $.parseJSON(cp_calculatedfieldsf_fbuilder_config.obj) : cp_calculatedfieldsf_fbuilder_config.obj );
77
+ f.fBuild.loadData("form_structure"+fnum);
78
} catch (e) {}
79
fcount++;
80
fnum = "_"+fcount;
js/fbuilder-pro-admin.jquery.js CHANGED
@@ -268,6 +268,24 @@
268
theForm.customstyles = $(this).val();
269
$.fbuilder.reloadItems({'form':1});
270
});
271
};
272
273
$.fbuilder[ 'defineGeneralEvents' ] = function()
268
theForm.customstyles = $(this).val();
269
$.fbuilder.reloadItems({'form':1});
270
});
271
+
272
+ // CSS Editor
273
+ if( 'codeEditor' in wp)
274
+ {
275
+ var cssEditorSettings = wp.codeEditor.defaultSettings ? _.clone( wp.codeEditor.defaultSettings ) : {},
276
+ editor;
277
+ cssEditorSettings.codemirror = _.extend(
278
+ {},
279
+ cssEditorSettings.codemirror,
280
+ {
281
+ indentUnit: 2,
282
+ tabSize: 2,
283
+ mode: 'css'
284
+ }
285
+ );
286
+ editor = wp.codeEditor.initialize( $('#fCustomStyles'), cssEditorSettings );
287
+ editor.codemirror.on('change', function(cm){ $('#fCustomStyles').val(cm.getValue()).change();});
288
+ }
289
};
290
291
$.fbuilder[ 'defineGeneralEvents' ] = function()
js/fbuilder-pro-public.jquery.js CHANGED
@@ -76,19 +76,39 @@
76
dateddmmyyyy: "Please enter a valid date with this format(dd/mm/yyyy)",
77
number: "Please enter a valid number.",
78
digits: "Please enter only digits.",
79
- maxlength: $.validator.format("Please enter no more than {0} characters."),
80
- minlength: $.validator.format("Please enter at least {0} characters."),
81
equalTo: "Please enter the same value again.",
82
- max: $.validator.format("Please enter a value less than or equal to {0}."),
83
- min: $.validator.format("Please enter a value greater than or equal to {0}."),
84
currency: "Please enter a valid currency value."
85
},opt.messages);
86
87
opt.messages.max = $.validator.format(opt.messages.max);
88
opt.messages.min = $.validator.format(opt.messages.min);
89
90
$.extend($.validator.messages, opt.messages);
91
92
var items = [],
93
reloadItemsPublic = function()
94
{
@@ -229,23 +249,27 @@
229
items[i].after_show();
230
}
231
232
- $.fbuilder.showHideDep(
233
- {
234
- 'formIdentifier' : opt.identifier,
235
- 'throwEvent' : true
236
- }
237
- );
238
-
239
- $( '#fieldlist'+opt.identifier).find(".depItemSel,.depItem").bind("change", { 'identifier' : opt.identifier }, function( evt )
240
{
241
$.fbuilder.showHideDep(
242
{
243
'formIdentifier' : evt.data.identifier,
244
- 'fieldItentifier': evt.target.id,
245
- 'throwEvent' : true
246
}
247
);
248
- });
249
try
250
{
251
$.widget.bridge('uitooltip', $.ui.tooltip);
@@ -439,10 +463,7 @@
439
$.fbuilder[ 'manageHistory' ] = function(state)
440
{
441
var bookmark = (document.URL.split('#').length > 1) ? document.URL.split('#')[1] : null,
442
- _match, _form, _to, setHistoryEntry = false,
443
- _goToPage = function(config){
444
-
445
- };
446
447
if(bookmark)
448
{
@@ -450,9 +471,12 @@
450
{
451
_form = '_'+_match[1];
452
_to = _match[2]*1;
453
if(
454
- !(_form in $.fbuilder.forms) || // Form exists
455
- !('currentPage' in $.fbuilder.forms[_form]) || // Next/Prev buttons has been pressed previously
456
_to != $.fbuilder['goToPage'](
457
{
458
'formIdentifier' : _form,
@@ -461,7 +485,6 @@
461
}
462
)
463
) setHistoryEntry = true;
464
- bookmark = bookmark.replace(_match[0],'');
465
}
466
}
467
else
@@ -578,11 +601,7 @@
578
items = (typeof configObj[ 'fieldItentifier' ] != 'undefined' ) ? [ $.fbuilder[ 'forms' ][ identifier ].getItem(configObj[ 'fieldItentifier' ].replace(/_[cr]b\d+#x2F;i, '')) ] : $.fbuilder[ 'forms' ][ identifier ].getItems();
579
580
process_items( items );
581
-
582
- if( typeof configObj[ 'throwEvent' ] == 'undefined' || configObj[ 'throwEvent' ] )
583
- {
584
- $( document ).trigger( 'showHideDepEvent', $.fbuilder[ 'forms' ][ identifier ][ 'formId' ] );
585
- }
586
}
587
}
588
}; // End showHideDep
@@ -614,8 +633,7 @@
614
615
$.fbuilder.showHideDep(
616
{
617
- 'formIdentifier' : o.identifier,
618
- 'throwEvent' : true
619
}
620
);
621
}
76
dateddmmyyyy: "Please enter a valid date with this format(dd/mm/yyyy)",
77
number: "Please enter a valid number.",
78
digits: "Please enter only digits.",
79
+ maxlength: "Please enter no more than {0} characters.",
80
+ minlength: "Please enter at least {0} characters.",
81
equalTo: "Please enter the same value again.",
82
+ max: "Please enter a value less than or equal to {0}.",
83
+ min: "Please enter a value greater than or equal to {0}.",
84
currency: "Please enter a valid currency value."
85
},opt.messages);
86
87
opt.messages.max = $.validator.format(opt.messages.max);
88
opt.messages.min = $.validator.format(opt.messages.min);
89
+ opt.messages.maxlength = $.validator.format(opt.messages.maxlength);
90
+ opt.messages.minlength = $.validator.format(opt.messages.minlength);
91
92
$.extend($.validator.messages, opt.messages);
93
94
+ $("#cp_calculatedfieldsf_pform"+fnum).validate({
95
+ ignore:".ignore,.ignorepb",
96
+ errorElement: "div",
97
+ errorPlacement: function(e, element)
98
+ {
99
+ var _parent = element.closest( '.dfield' ),
100
+ _uh = _parent.find( 'span.uh:visible' );
101
+
102
+ if( _uh.length )
103
+ e.appendTo( _uh );
104
+ else
105
+ e.insertAfter( _parent );
106
+
107
+ e.addClass( 'message' )
108
+ .css( 'position', 'absolute' );
109
+ }
110
+ }).messages = opt.messages;
111
+
112
var items = [],
113
reloadItemsPublic = function()
114
{
249
items[i].after_show();
250
}
251
252
+ $(document).on(
253
+ 'change',
254
+ '#fieldlist'+opt.identifier+' .depItemSel,'+'#fieldlist'+opt.identifier+' .depItem',
255
+ { 'identifier' : opt.identifier },
256
+ function( evt )
257
{
258
$.fbuilder.showHideDep(
259
{
260
'formIdentifier' : evt.data.identifier,
261
+ 'fieldItentifier': evt.target.id
262
}
263
);
264
+ }
265
+ );
266
+
267
+ $.fbuilder.showHideDep(
268
+ {
269
+ 'formIdentifier' : opt.identifier
270
+ }
271
+ );
272
+
273
try
274
{
275
$.widget.bridge('uitooltip', $.ui.tooltip);
463
$.fbuilder[ 'manageHistory' ] = function(state)
464
{
465
var bookmark = (document.URL.split('#').length > 1) ? document.URL.split('#')[1] : null,
466
+ _match, _form, _to, setHistoryEntry = false;
467
468
if(bookmark)
469
{
471
{
472
_form = '_'+_match[1];
473
_to = _match[2]*1;
474
+ bookmark = bookmark.replace(_match[0],'');
475
+
476
+ if(!(_form in $.fbuilder.forms)){setHistoryEntry = true; continue;}
477
+ if('currentPage' in $.fbuilder.forms[_form]) continue;
478
if(
479
+ !$('#'+$.fbuilder.forms[_form].formId).hasClass('persist-form') ||
480
_to != $.fbuilder['goToPage'](
481
{
482
'formIdentifier' : _form,
485
}
486
)
487
) setHistoryEntry = true;
488
}
489
}
490
else
601
items = (typeof configObj[ 'fieldItentifier' ] != 'undefined' ) ? [ $.fbuilder[ 'forms' ][ identifier ].getItem(configObj[ 'fieldItentifier' ].replace(/_[cr]b\d+#x2F;i, '')) ] : $.fbuilder[ 'forms' ][ identifier ].getItems();
602
603
process_items( items );
604
+ $( document ).trigger( 'showHideDepEvent', $.fbuilder[ 'forms' ][ identifier ][ 'formId' ] );
605
}
606
}
607
}; // End showHideDep
633
634
$.fbuilder.showHideDep(
635
{
636
+ 'formIdentifier' : o.identifier
637
}
638
);
639
}
js/fields-admin/01_fbuilder.ftext.js CHANGED
@@ -41,7 +41,10 @@
41
var str = '<option value="" '+(("" == $(this).attr("dvalue"))?"selected":"")+'></option>';
42
for (var i=0;i<items.length;i++)
43
{
44
- if ((items[i].ftype=="ftext" || items[i].ftype=="femail" || items[i].ftype=="fpassword") && (items[i].name != $(this).attr("dname")))
45
{
46
str += '<option value="'+$.fbuilder.htmlEncode(items[i].name)+'" '+((items[i].name == $(this).attr("dvalue"))?"selected":"")+'>'+(items[i].title)+'</option>';
47
}
41
var str = '<option value="" '+(("" == $(this).attr("dvalue"))?"selected":"")+'></option>';
42
for (var i=0;i<items.length;i++)
43
{
44
+ if (
45
+ $.inArray(items[i].ftype, ['ftext', 'femail', 'fpassword', 'ftextds', 'femailds']) != -1 &&
46
+ items[i].name != $(this).attr("dname")
47
+ )
48
{
49
str += '<option value="'+$.fbuilder.htmlEncode(items[i].name)+'" '+((items[i].name == $(this).attr("dvalue"))?"selected":"")+'>'+(items[i].title)+'</option>';
50
}
js/fields-admin/02_fbuilder.fnumber.js CHANGED
@@ -23,7 +23,7 @@
23
max:"",
24
formatDynamically:false,
25
dformat:"digits",
26
- formats:new Array("digits","number"),
27
display:function()
28
{
29
return '<div class="fields '+this.name+'" id="field'+this.form_identifier+'-'+this.index+'" title="'+this.name+'"><div class="arrow ui-icon ui-icon-play "></div><div title="Delete" class="remove ui-icon ui-icon-trash "></div><div title="Duplicate" class="copy ui-icon ui-icon-copy "></div><label>'+this.title+''+((this.required)?"*":"")+'</label><div class="dfield"><input class="field disabled '+this.size+'" type="text" value="'+$.fbuilder.htmlEncode(this.predefined)+'"/><span class="uh">'+this.userhelp+'</span></div><div class="clearer"></div></div>';
23
max:"",
24
formatDynamically:false,
25
dformat:"digits",
26
+ formats:new Array("digits","number", "percent"),
27
display:function()
28
{
29
return '<div class="fields '+this.name+'" id="field'+this.form_identifier+'-'+this.index+'" title="'+this.name+'"><div class="arrow ui-icon ui-icon-play "></div><div title="Delete" class="remove ui-icon ui-icon-trash "></div><div title="Duplicate" class="copy ui-icon ui-icon-copy "></div><label>'+this.title+''+((this.required)?"*":"")+'</label><div class="dfield"><input class="field disabled '+this.size+'" type="text" value="'+$.fbuilder.htmlEncode(this.predefined)+'"/><span class="uh">'+this.userhelp+'</span></div><div class="clearer"></div></div>';
js/fields-admin/03_fbuilder.femail.js CHANGED
@@ -34,16 +34,19 @@
34
var str = '<option value="" '+(("" == $(this).attr("dvalue"))?"selected":"")+'></option>';
35
for (var i=0;i<items.length;i++)
36
{
37
- if ((items[i].ftype=="ftext" || items[i].ftype=="femail" || items[i].ftype=="fpassword") && (items[i].name != $(this).attr("dname")))
38
{
39
str += '<option value="'+items[i].name+'" '+((items[i].name == $(this).attr("dvalue"))?"selected":"")+'>'+(items[i].title)+'</option>';
40
- }
41
- }
42
$(this).html(str);
43
});
44
$.fbuilder.controls[ 'ffields' ].prototype.editItemEvents.call(this, evt);
45
},
46
- showSpecialDataInstance: function()
47
{
48
var str = "";
49
return str;
34
var str = '<option value="" '+(("" == $(this).attr("dvalue"))?"selected":"")+'></option>';
35
for (var i=0;i<items.length;i++)
36
{
37
+ if (
38
+ $.inArray(items[i].ftype, ['ftext', 'femail', 'fpassword', 'ftextds', 'femailds']) != -1 &&
39
+ items[i].name != $(this).attr("dname")
40
+ )
41
{
42
str += '<option value="'+items[i].name+'" '+((items[i].name == $(this).attr("dvalue"))?"selected":"")+'>'+(items[i].title)+'</option>';
43
+ }
44
+ }
45
$(this).html(str);
46
});
47
$.fbuilder.controls[ 'ffields' ].prototype.editItemEvents.call(this, evt);
48
},
49
+ showSpecialDataInstance: function()
50
{
51
var str = "";
52
return str;
js/fields-admin/06_fbuilder.fcheck.js CHANGED
@@ -215,9 +215,11 @@
215
showChoiceIntance: function()
216
{
217
this.choicesVal = ((typeof(this.choicesVal) != "undefined" && this.choicesVal !== null)?this.choicesVal:this.choices.slice(0));
218
- var l = this.choices;
219
- var lv = this.choicesVal;
220
- var v = this.choiceSelected;
221
if (!(typeof(this.choicesDep) != "undefined" && this.choicesDep !== null))
222
{
223
this.choicesDep = new Array();
@@ -226,20 +228,28 @@
226
this.choicesDep[i] = new Array();
227
}
228
}
229
- var d = this.choicesDep,
230
- str = "";
231
for (var i=0;i<l.length;i++)
232
{
233
str += '<div class="choicesEdit"><input class="choice_check" i="'+i+'" type="checkbox" '+((this.choiceSelected[i])?"checked":"")+'/><input class="choice_text" i="'+i+'" type="text" name="sChoice'+this.name+'" id="sChoice'+this.name+'" value="'+$.fbuilder.htmlEncode($.fbuilder.htmlDecode(l[i]))+'"/><input class="choice_value" i="'+i+'" type="text" name="sChoice'+this.name+'V'+i+'" id="sChoice'+this.name+'V'+i+'" value="'+$.fbuilder.htmlEncode($.fbuilder.htmlDecode(lv[i]))+'"/><div class="choice-ctrls"><a class="choice_down ui-icon ui-icon-arrowthick-1-s" i="'+i+'" n="'+(l.length-1)+'" title="Down"></a><a class="choice_up ui-icon ui-icon-arrowthick-1-n" i="'+i+'" title="Up"></a><a class="choice_add ui-icon ui-icon-circle-plus" i="'+i+'" title="Add another choice."></a><a class="choice_remove ui-icon ui-icon-circle-minus" i="'+i+'" title="Delete this choice."></a></div></div>';
234
- for (var j=0;j<d[i].length;j++)
235
{
236
- str += '<div class="choicesEditDep"><span>If selected show:</span> <select class="dependencies" i="'+i+'" j="'+j+'" dname="'+this.name+'" dvalue="'+d[i][j]+'" ></select><div class="choice-ctrls"><a class="choice_addDep ui-icon ui-icon-circle-plus" i="'+i+'" j="'+j+'" title="Add another dependency."></a><a class="choice_removeDep ui-icon ui-icon-circle-minus" i="'+i+'" j="'+j+'" title="Delete this dependency."></a></div></div>';
237
}
238
- if (d[i].length==0)
239
{
240
- str += '<div class="choicesEditDep"><span>If selected show:</span> <select class="dependencies" i="'+i+'" j="'+d[i].length+'" dname="'+this.name+'" dvalue="" ></select><div class="choice-ctrls"><a class="choice_addDep ui-icon ui-icon-circle-plus" i="'+i+'" j="'+d[i].length+'" title="Add another dependency."></a><a class="choice_removeDep ui-icon ui-icon-circle-minus" i="'+i+'" j="'+d[i].length+'" title="Delete this dependency."></a></div></div>';
241
}
242
}
243
return '<div class="choicesSet '+((this.showDep)?"show":"hide")+'"><label>Choices</label> <a class="helpfbuilder dep" text="Dependencies are used to show/hide other fields depending of the option selected in this field.">help?</a> <a href="" class="showHideDependencies">'+((this.showDep)?"Hide":"Show")+' Dependencies</a><div><div class="t">Text</div><div class="t">Value</div><div class="clearer"></div></div>'+str+this.mergeValues()+this.attributeToSubmit()+this.maxChoices()+'</div>';
244
}
245
});
215
showChoiceIntance: function()
216
{
217
this.choicesVal = ((typeof(this.choicesVal) != "undefined" && this.choicesVal !== null)?this.choicesVal:this.choices.slice(0));
218
+ var l = this.choices,
219
+ lv = this.choicesVal,
220
+ v = this.choiceSelected,
221
+ str = '', str1, j,
222
+ reloadRequired = false;
223
if (!(typeof(this.choicesDep) != "undefined" && this.choicesDep !== null))
224
{
225
this.choicesDep = new Array();
228
this.choicesDep[i] = new Array();
229
}
230
}
231
+ var d = this.choicesDep;
232
for (var i=0;i<l.length;i++)
233
{
234
+ str1 = '';
235
str += '<div class="choicesEdit"><input class="choice_check" i="'+i+'" type="checkbox" '+((this.choiceSelected[i])?"checked":"")+'/><input class="choice_text" i="'+i+'" type="text" name="sChoice'+this.name+'" id="sChoice'+this.name+'" value="'+$.fbuilder.htmlEncode($.fbuilder.htmlDecode(l[i]))+'"/><input class="choice_value" i="'+i+'" type="text" name="sChoice'+this.name+'V'+i+'" id="sChoice'+this.name+'V'+i+'" value="'+$.fbuilder.htmlEncode($.fbuilder.htmlDecode(lv[i]))+'"/><div class="choice-ctrls"><a class="choice_down ui-icon ui-icon-arrowthick-1-s" i="'+i+'" n="'+(l.length-1)+'" title="Down"></a><a class="choice_up ui-icon ui-icon-arrowthick-1-n" i="'+i+'" title="Up"></a><a class="choice_add ui-icon ui-icon-circle-plus" i="'+i+'" title="Add another choice."></a><a class="choice_remove ui-icon ui-icon-circle-minus" i="'+i+'" title="Delete this choice."></a></div></div>';
236
+ j = d[i].length;
237
+ if(j)
238
{
239
+ while(j--)
240
+ {
241
+ if(d[i][j].length && $('.'+d[i][j]).length == 0){ reloadRequired = true; d[i].splice(j,1); continue;}
242
+ str1 = '<div class="choicesEditDep"><span>If selected show:</span> <select class="dependencies" i="'+i+'" j="'+j+'" dname="'+this.name+'" dvalue="'+d[i][j]+'" ></select><div class="choice-ctrls"><a class="choice_addDep ui-icon ui-icon-circle-plus" i="'+i+'" j="'+j+'" title="Add another dependency."></a><a class="choice_removeDep ui-icon ui-icon-circle-minus" i="'+i+'" j="'+j+'" title="Delete this dependency."></a></div></div>'+str1;
243
+ }
244
+ str += str1;
245
}
246
+ j = d[i].length;
247
+ if(!j)
248
{
249
+ str += '<div class="choicesEditDep"><span>If selected show:</span> <select class="dependencies" i="'+i+'" j="'+j+'" dname="'+this.name+'" dvalue="" ></select><div class="choice-ctrls"><a class="choice_addDep ui-icon ui-icon-circle-plus" i="'+i+'" j="'+j+'" title="Add another dependency."></a><a class="choice_removeDep ui-icon ui-icon-circle-minus" i="'+i+'" j="'+j+'" title="Delete this dependency."></a></div></div>';
250
}
251
}
252
+ if(reloadRequired) $.fbuilder.reloadItems({'field':this});
253
return '<div class="choicesSet '+((this.showDep)?"show":"hide")+'"><label>Choices</label> <a class="helpfbuilder dep" text="Dependencies are used to show/hide other fields depending of the option selected in this field.">help?</a> <a href="" class="showHideDependencies">'+((this.showDep)?"Hide":"Show")+' Dependencies</a><div><div class="t">Text</div><div class="t">Value</div><div class="clearer"></div></div>'+str+this.mergeValues()+this.attributeToSubmit()+this.maxChoices()+'</div>';
254
}
255
});
js/fields-admin/07_fbuilder.fradio.js CHANGED
@@ -1,225 +1,235 @@
1
- $.fbuilder.typeList.push(
2
- {
3
- id:"fradio",
4
- name:"Radio Buttons",
5
- control_category:1
6
- }
7
- );
8
- $.fbuilder.controls[ 'fradio' ] = function(){};
9
- $.extend(
10
- $.fbuilder.controls[ 'fradio' ].prototype,
11
- $.fbuilder.controls[ 'ffields' ].prototype,
12
- {
13
- title:"Select a Choice",
14
- ftype:"fradio",
15
- layout:"one_column",
16
- required:false,
17
- toSubmit:'text',
18
- choiceSelected:"",
19
- showDep:false,
20
- untickAccepted:true,
21
- init:function()
22
{
23
- this.choices = new Array("First Choice","Second Choice","Third Choice");
24
- this.choicesVal = new Array("First Choice","Second Choice","Third Choice");
25
- this.choicesDep = new Array(new Array(),new Array(),new Array());
26
- },
27
- display:function()
28
- {
29
- this.choicesVal = ((typeof(this.choicesVal) != "undefined" && this.choicesVal !== null)?this.choicesVal:this.choices.slice(0));
30
- var str = "";
31
- for (var i=0;i<this.choices.length;i++)
32
{
33
- str += '<div class="'+this.layout+'"><input class="field" disabled="true" type="radio" i="'+i+'" '+(( this.choices[i]+' - '+this.choicesVal[i]==this.choiceSelected)?"checked":"")+'/> '+$.fbuilder.htmlDecode( this.choices[i] )+'</div>';
34
- }
35
- return '<div class="fields '+this.name+'" id="field'+this.form_identifier+'-'+this.index+'" title="'+this.name+'"><div class="arrow ui-icon ui-icon-play "></div><div title="Delete" class="remove ui-icon ui-icon-trash "></div><div title="Duplicate" class="copy ui-icon ui-icon-copy "></div><label>'+this.title+''+((this.required)?"*":"")+'</label><div class="dfield">'+str+'<span class="uh">'+this.userhelp+'</span></div><div class="clearer"></div></div>';
36
- },
37
- editItemEvents:function()
38
- {
39
- $(".choice_text").bind("change keyup", {obj: this}, function(e)
40
- {
41
- if (e.data.obj.choices[$(this).attr("i")] == e.data.obj.choicesVal[$(this).attr("i")])
42
- {
43
- $("#"+$(this).attr("id")+"V"+$(this).attr("i")).val($(this).val());
44
- e.data.obj.choicesVal[$(this).attr("i")]= $(this).val();
45
- }
46
- e.data.obj.choices[$(this).attr("i")]= $(this).val();
47
- $.fbuilder.reloadItems({'field':e.data.obj});
48
- });
49
- $(".choice_value").bind("change keyup", {obj: this}, function(e)
50
{
51
e.data.obj.choicesVal[$(this).attr("i")]= $(this).val();
52
- $.fbuilder.reloadItems({'field':e.data.obj});
53
- });
54
- $(".choice_radio").bind("mousedown", function(){$(this).data('previous-status', $(this).is(':checked'));});
55
- $(".choice_radio").bind("click", {obj: this}, function(e)
56
- {
57
- var el = $(this),
58
- i = el.attr("i");
59
60
- el.prop('checked', !el.data('previous-status'));
61
- e.data.obj.choiceSelected = (el.is(':checked')) ? e.data.obj.choices[i] + ' - ' + e.data.obj.choicesVal[i] : "";
62
- $.fbuilder.reloadItems({'field':e.data.obj});
63
- });
64
- $("#sLayout").bind("change", {obj: this}, function(e)
65
- {
66
- e.data.obj.layout = $(this).val();
67
- $.fbuilder.reloadItems({'field':e.data.obj});
68
- });
69
- $(".choice_up").bind("click", {obj: this}, function(e)
70
- {
71
- var i = $(this).attr("i")*1;
72
- if (i!=0)
73
- {
74
- e.data.obj.choices.splice(i-1, 0, e.data.obj.choices.splice(i, 1)[0]);
75
- e.data.obj.choicesVal.splice(i-1, 0, e.data.obj.choicesVal.splice(i, 1)[0]);
76
- e.data.obj.choicesDep.splice(i-1, 0, e.data.obj.choicesDep.splice(i, 1)[0]);
77
- }
78
- $.fbuilder.editItem(e.data.obj.index);
79
- $.fbuilder.reloadItems({'field':e.data.obj});
80
- });
81
- $(".choice_down").bind("click", {obj: this}, function(e)
82
{
83
- var i = $(this).attr("i")*1;
84
- var n = $(this).attr("n")*1;
85
- if (i!=n)
86
- {
87
- e.data.obj.choices.splice(i, 0, e.data.obj.choices.splice(i+1, 1)[0]);
88
- e.data.obj.choicesVal.splice(i, 0, e.data.obj.choicesVal.splice(i+1, 1)[0]);
89
- e.data.obj.choicesDep.splice(i, 0, e.data.obj.choicesDep.splice(i+1, 1)[0]);
90
- }
91
- $.fbuilder.editItem(e.data.obj.index);
92
- $.fbuilder.reloadItems({'field':e.data.obj});
93
- });
94
- $(".choice_removeDep").bind("click", {obj: this}, function(e)
95
{
96
- if (e.data.obj.choices.length==1)
97
- {
98
- e.data.obj.choicesDep[$(this).attr("i")][0]="";
99
- }
100
- else
101
- {
102
- e.data.obj.choicesDep[$(this).attr("i")].splice($(this).attr("j"),1);
103
- }
104
- $.fbuilder.editItem(e.data.obj.index);
105
- $.fbuilder.reloadItems({'field':e.data.obj});
106
- });
107
- $(".choice_addDep").bind("click", {obj: this}, function(e)
108
{
109
- e.data.obj.choicesDep[$(this).attr("i")].splice($(this).attr("j")*1+1,0,"");
110
- $.fbuilder.editItem(e.data.obj.index);
111
- $.fbuilder.reloadItems({'field':e.data.obj});
112
- });
113
- $(".choice_remove").bind("click", {obj: this}, function(e)
114
{
115
- var i = $(this).attr("i");
116
117
- if( e.data.obj.choices[ i ] + ' - ' + e.data.obj.choicesVal[ i ] == e.data.obj.choiceSelected )
118
- {
119
- e.data.obj.choiceSelected = "";
120
- }
121
122
- if (e.data.obj.choices.length==1)
123
- {
124
- e.data.obj.choices[0]="";
125
- e.data.obj.choicesVal[0]="";
126
- e.data.obj.choicesDep[0]=new Array();
127
- }
128
- else
129
- {
130
- e.data.obj.choices.splice(i,1);
131
- e.data.obj.choicesVal.splice(i,1);
132
- e.data.obj.choicesDep.splice(i,1);
133
- }
134
- $.fbuilder.editItem(e.data.obj.index);
135
- $.fbuilder.reloadItems({'field':e.data.obj});
136
- });
137
- $(".choice_add").bind("click", {obj: this}, function(e)
138
{
139
- var i = $(this).attr("i")*1+1;
140
141
- e.data.obj.choices.splice(i,0,"");
142
- e.data.obj.choicesVal.splice(i,0,"");
143
- e.data.obj.choicesDep.splice(i,0,new Array());
144
- $.fbuilder.editItem(e.data.obj.index);
145
- $.fbuilder.reloadItems({'field':e.data.obj});
146
- });
147
- $(".showHideDependencies").bind("click", {obj: this}, function(e)
148
{
149
- if (e.data.obj.showDep)
150
- {
151
- $(this).parent().removeClass("show");
152
- $(this).parent().addClass("hide");
153
- $(this).html("Show Dependencies");
154
- e.data.obj.showDep = false;
155
- }
156
- else
157
- {
158
- $(this).parent().addClass("show");
159
- $(this).parent().removeClass("hide");
160
- $(this).html("Hide Dependencies");
161
- e.data.obj.showDep = true;
162
- }
163
- return false;
164
- });
165
- $('.dependencies').bind("change", {obj: this}, function(e)
166
{
167
- e.data.obj.choicesDep[$(this).attr("i")][$(this).attr("j")] = $(this).val();
168
- $.fbuilder.reloadItems({'field':e.data.obj});
169
- });
170
- var me = this,
171
- items = me.fBuild.getItems(),
172
- evt = [{s:'[name="sToSubmit"]', e:"click", l:"toSubmit"},
173
- {s:'[name="sUntickAccepted"]',e:"click", l:"untickAccepted",f:function(el){return el.is(':checked');}}];
174
- $('.dependencies').each(function()
175
{
176
- var str = '<option value="" '+(("" == $(this).attr("dvalue"))?"selected":"")+'></option>';
177
- for (var i=0;i<items.length;i++)
178
{
179
- if (items[i].name != me.name && items[i].ftype != 'fPageBreak')
180
- {
181
- str += '<option value="'+items[i].name+'" '+((items[i].name == $(this).attr("dvalue"))?"selected":"")+'>'+(items[i].name)+ ( ( typeof items[i].title != 'undefined' ) ? ' (' + items[i].title + ')' : '' ) + ' </option>';
182
- }
183
}
184
- $(this).html(str);
185
- });
186
- $.fbuilder.controls[ 'ffields' ].prototype.editItemEvents.call(this,evt);
187
- },
188
- attributeToSubmit: function()
189
- {
190
- return '<div class="choicesSet"><label>Value to Submit</label><br /><div class="column width50"><label><input type="radio" name="sToSubmit" value="text" '+((this.toSubmit == 'text') ? ' CHECKED ' : '')+'/> Choice Text</label></div><div class="column width50"><label><input type="radio" name="sToSubmit" value="value" '+((this.toSubmit == 'value') ? ' CHECKED ' : '')+'/> Choice Value</label></div><div class="clearer"></div></div>';
191
- },
192
- allowUntick: function()
193
{
194
- return '<div><label><input type="checkbox" name="sUntickAccepted" '+((this.untickAccepted) ? ' CHECKED ' : '')+'/> Allow Untick Choices</label></div>';
195
- },
196
- showChoiceIntance: function()
197
{
198
- this.choicesVal = ((typeof(this.choicesVal) != "undefined" && this.choicesVal !== null)?this.choicesVal:this.choices.slice(0));
199
- var l = this.choices;
200
- var lv = this.choicesVal;
201
- if (!(typeof(this.choicesDep) != "undefined" && this.choicesDep !== null))
202
{
203
- this.choicesDep = new Array();
204
- for (var i=0;i<l.length;i++)
205
{
206
- this.choicesDep[i] = new Array();
207
}
208
}
209
- var d = this.choicesDep;
210
- var str = "";
211
- for (var i=0;i<l.length;i++)
212
{
213
- str += '<div class="choicesEdit"><input class="choice_radio" i="'+i+'" type="radio" '+((this.choiceSelected==l[i]+' - '+lv[i])?"checked":"")+' name="choice_radio" /><input class="choice_text" i="'+i+'" type="text" name="sChoice'+this.name+'" id="sChoice'+this.name+'" value="'+$.fbuilder.htmlEncode($.fbuilder.htmlDecode(l[i]))+'"/><input class="choice_value" i="'+i+'" type="text" name="sChoice'+this.name+'V'+i+'" id="sChoice'+this.name+'V'+i+'" value="'+$.fbuilder.htmlEncode($.fbuilder.htmlDecode(lv[i]))+'"/><div class="choice-ctrls"><a class="choice_down ui-icon ui-icon-arrowthick-1-s" i="'+i+'" n="'+(l.length-1)+'" title="Down"></a><a class="choice_up ui-icon ui-icon-arrowthick-1-n" i="'+i+'" title="Up"></a><a class="choice_add ui-icon ui-icon-circle-plus" i="'+i+'" title="Add another choice."></a><a class="choice_remove ui-icon ui-icon-circle-minus" i="'+i+'" title="Delete this choice."></a></div></div>';
214
- for (var j=0;j<d[i].length;j++)
215
- {
216
- str += '<div class="choicesEditDep"><span>If selected show:</span> <select class="dependencies" i="'+i+'" j="'+j+'" dname="'+this.name+'" dvalue="'+d[i][j]+'" ></select><div class="choice-ctrls"><a class="choice_addDep ui-icon ui-icon-circle-plus" i="'+i+'" j="'+j+'" title="Add another dependency."></a><a class="choice_removeDep ui-icon ui-icon-circle-minus" i="'+i+'" j="'+j+'" title="Delete this dependency."></a></div></div>';
217
- }
218
- if (d[i].length==0)
219
- {
220
- str += '<div class="choicesEditDep"><span>If selected show:</span> <select class="dependencies" i="'+i+'" j="'+d[i].length+'" dname="'+this.name+'" dvalue="" ></select><div class="choice-ctrls"><a class="choice_addDep ui-icon ui-icon-circle-plus" i="'+i+'" j="'+d[i].length+'" title="Add another dependency."></a><a class="choice_removeDep ui-icon ui-icon-circle-minus" i="'+i+'" j="'+d[i].length+'" title="Delete this dependency."></a></div></div>';
221
- }
222
}
223
- return '<div class="choicesSet '+((this.showDep)?"show":"hide")+'"><label>Choices</label> <a class="helpfbuilder dep" text="Dependencies are used to show/hide other fields depending of the option selected in this field.">help?</a> <a href="" class="showHideDependencies">'+((this.showDep)?"Hide":"Show")+' Dependencies</a><div><div class="t">Text</div><div class="t">Value</div><div class="clearer"></div></div>'+str+this.attributeToSubmit()+this.allowUntick()+'</div>';
224
}
225
- });
1
+ $.fbuilder.typeList.push(
2
+ {
3
+ id:"fradio",
4
+ name:"Radio Buttons",
5
+ control_category:1
6
+ }
7
+ );
8
+ $.fbuilder.controls[ 'fradio' ] = function(){};
9
+ $.extend(
10
+ $.fbuilder.controls[ 'fradio' ].prototype,
11
+ $.fbuilder.controls[ 'ffields' ].prototype,
12
+ {
13
+ title:"Select a Choice",
14
+ ftype:"fradio",
15
+ layout:"one_column",
16
+ required:false,
17
+ toSubmit:'text',
18
+ choiceSelected:"",
19
+ showDep:false,
20
+ untickAccepted:true,
21
+ init:function()
22
+ {
23
+ this.choices = new Array("First Choice","Second Choice","Third Choice");
24
+ this.choicesVal = new Array("First Choice","Second Choice","Third Choice");
25
+ this.choicesDep = new Array(new Array(),new Array(),new Array());
26
+ },
27
+ display:function()
28
+ {
29
+ this.choicesVal = ((typeof(this.choicesVal) != "undefined" && this.choicesVal !== null)?this.choicesVal:this.choices.slice(0));
30
+ var str = "";
31
+ for (var i=0;i<this.choices.length;i++)
32
{
33
+ str += '<div class="'+this.layout+'"><input class="field" disabled="true" type="radio" i="'+i+'" '+(( this.choices[i]+' - '+this.choicesVal[i]==this.choiceSelected)?"checked":"")+'/> '+$.fbuilder.htmlDecode( this.choices[i] )+'</div>';
34
+ }
35
+ return '<div class="fields '+this.name+'" id="field'+this.form_identifier+'-'+this.index+'" title="'+this.name+'"><div class="arrow ui-icon ui-icon-play "></div><div title="Delete" class="remove ui-icon ui-icon-trash "></div><div title="Duplicate" class="copy ui-icon ui-icon-copy "></div><label>'+this.title+''+((this.required)?"*":"")+'</label><div class="dfield">'+str+'<span class="uh">'+this.userhelp+'</span></div><div class="clearer"></div></div>';
36
+ },
37
+ editItemEvents:function()
38
+ {
39
+ $(".choice_text").bind("change keyup", {obj: this}, function(e)
40
{
41
+ if (e.data.obj.choices[$(this).attr("i")] == e.data.obj.choicesVal[$(this).attr("i")])
42
{
43
+ $("#"+$(this).attr("id")+"V"+$(this).attr("i")).val($(this).val());
44
e.data.obj.choicesVal[$(this).attr("i")]= $(this).val();
45
+ }
46
+ e.data.obj.choices[$(this).attr("i")]= $(this).val();
47
+ $.fbuilder.reloadItems({'field':e.data.obj});
48
+ });
49
+ $(".choice_value").bind("change keyup", {obj: this}, function(e)
50
+ {
51
+ e.data.obj.choicesVal[$(this).attr("i")]= $(this).val();
52
+ $.fbuilder.reloadItems({'field':e.data.obj});
53
+ });
54
+ $(".choice_radio").bind("mousedown", function(){$(this).data('previous-status', $(this).is(':checked'));});
55
+ $(".choice_radio").bind("click", {obj: this}, function(e)
56
+ {
57
+ var el = $(this),
58
+ i = el.attr("i");
59
60
+ el.prop('checked', !el.data('previous-status'));
61
+ e.data.obj.choiceSelected = (el.is(':checked')) ? e.data.obj.choices[i] + ' - ' + e.data.obj.choicesVal[i] : "";
62
+ $.fbuilder.reloadItems({'field':e.data.obj});
63
+ });
64
+ $("#sLayout").bind("change", {obj: this}, function(e)
65
+ {
66
+ e.data.obj.layout = $(this).val();
67
+ $.fbuilder.reloadItems({'field':e.data.obj});
68
+ });
69
+ $(".choice_up").bind("click", {obj: this}, function(e)
70
+ {
71
+ var i = $(this).attr("i")*1;
72
+ if (i!=0)
73
{
74
+ e.data.obj.choices.splice(i-1, 0, e.data.obj.choices.splice(i, 1)[0]);
75
+ e.data.obj.choicesVal.splice(i-1, 0, e.data.obj.choicesVal.splice(i, 1)[0]);
76
+ e.data.obj.choicesDep.splice(i-1, 0, e.data.obj.choicesDep.splice(i, 1)[0]);
77
+ }
78
+ $.fbuilder.editItem(e.data.obj.index);
79
+ $.fbuilder.reloadItems({'field':e.data.obj});
80
+ });
81
+ $(".choice_down").bind("click", {obj: this}, function(e)
82
+ {
83
+ var i = $(this).attr("i")*1;
84
+ var n = $(this).attr("n")*1;
85
+ if (i!=n)
86
{
87
+ e.data.obj.choices.splice(i, 0, e.data.obj.choices.splice(i+1, 1)[0]);
88
+ e.data.obj.choicesVal.splice(i, 0, e.data.obj.choicesVal.splice(i+1, 1)[0]);
89
+ e.data.obj.choicesDep.splice(i, 0, e.data.obj.choicesDep.splice(i+1, 1)[0]);
90
+ }
91
+ $.fbuilder.editItem(e.data.obj.index);
92
+ $.fbuilder.reloadItems({'field':e.data.obj});
93
+ });
94
+ $(".choice_removeDep").bind("click", {obj: this}, function(e)
95
+ {
96
+ if (e.data.obj.choices.length==1)
97
{
98
+ e.data.obj.choicesDep[$(this).attr("i")][0]="";
99
+ }
100
+ else
101
{
102
+ e.data.obj.choicesDep[$(this).attr("i")].splice($(this).attr("j"),1);
103
+ }
104
+ $.fbuilder.editItem(e.data.obj.index);
105
+ $.fbuilder.reloadItems({'field':e.data.obj});
106
+ });
107
+ $(".choice_addDep").bind("click", {obj: this}, function(e)
108
+ {
109
+ e.data.obj.choicesDep[$(this).attr("i")].splice($(this).attr("j")*1+1,0,"");
110
+ $.fbuilder.editItem(e.data.obj.index);
111
+ $.fbuilder.reloadItems({'field':e.data.obj});
112
+ });
113
+ $(".choice_remove").bind("click", {obj: this}, function(e)
114
+ {
115
+ var i = $(this).attr("i");
116
117
+ if( e.data.obj.choices[ i ] + ' - ' + e.data.obj.choicesVal[ i ] == e.data.obj.choiceSelected )
118
+ {
119
+ e.data.obj.choiceSelected = "";
120
+ }
121
122
+ if (e.data.obj.choices.length==1)
123
+ {
124
+ e.data.obj.choices[0]="";
125
+ e.data.obj.choicesVal[0]="";
126
+ e.data.obj.choicesDep[0]=new Array();
127
+ }
128
+ else
129
{
130
+ e.data.obj.choices.splice(i,1);
131
+ e.data.obj.choicesVal.splice(i,1);
132
+ e.data.obj.choicesDep.splice(i,1);
133
+ }
134
+ $.fbuilder.editItem(e.data.obj.index);
135
+ $.fbuilder.reloadItems({'field':e.data.obj});
136
+ });
137
+ $(".choice_add").bind("click", {obj: this}, function(e)
138
+ {
139
+ var i = $(this).attr("i")*1+1;
140
141
+ e.data.obj.choices.splice(i,0,"");
142
+ e.data.obj.choicesVal.splice(i,0,"");
143
+ e.data.obj.choicesDep.splice(i,0,new Array());
144
+ $.fbuilder.editItem(e.data.obj.index);
145
+ $.fbuilder.reloadItems({'field':e.data.obj});
146
+ });
147
+ $(".showHideDependencies").bind("click", {obj: this}, function(e)
148
+ {
149
+ if (e.data.obj.showDep)
150
{
151
+ $(this).parent().removeClass("show");
152
+ $(this).parent().addClass("hide");
153
+ $(this).html("Show Dependencies");
154
+ e.data.obj.showDep = false;
155
+ }
156
+ else
157
{
158
+ $(this).parent().addClass("show");
159
+ $(this).parent().removeClass("hide");
160
+ $(this).html("Hide Dependencies");
161
+ e.data.obj.showDep = true;
162
+ }
163
+ return false;
164
+ });
165
+ $('.dependencies').bind("change", {obj: this}, function(e)
166
+ {
167
+ e.data.obj.choicesDep[$(this).attr("i")][$(this).attr("j")] = $(this).val();
168
+ $.fbuilder.reloadItems({'field':e.data.obj});
169
+ });
170
+ var me = this,
171
+ items = me.fBuild.getItems(),
172
+ evt = [{s:'[name="sToSubmit"]', e:"click", l:"toSubmit"},
173
+ {s:'[name="sUntickAccepted"]',e:"click", l:"untickAccepted",f:function(el){return el.is(':checked');}}];
174
+ $('.dependencies').each(function()
175
+ {
176
+ var str = '<option value="" '+(("" == $(this).attr("dvalue"))?"selected":"")+'></option>';
177
+ for (var i=0;i<items.length;i++)
178
{
179
+ if (items[i].name != me.name && items[i].ftype != 'fPageBreak')
180
{
181
+ str += '<option value="'+items[i].name+'" '+((items[i].name == $(this).attr("dvalue"))?"selected":"")+'>'+(items[i].name)+ ( ( typeof items[i].title != 'undefined' ) ? ' (' + items[i].title + ')' : '' ) + ' </option>';
182
}
183
+ }
184
+ $(this).html(str);
185
+ });
186
+ $.fbuilder.controls[ 'ffields' ].prototype.editItemEvents.call(this,evt);
187
+ },
188
+ attributeToSubmit: function()
189
+ {
190
+ return '<div class="choicesSet"><label>Value to Submit</label><br /><div class="column width50"><label><input type="radio" name="sToSubmit" value="text" '+((this.toSubmit == 'text') ? ' CHECKED ' : '')+'/> Choice Text</label></div><div class="column width50"><label><input type="radio" name="sToSubmit" value="value" '+((this.toSubmit == 'value') ? ' CHECKED ' : '')+'/> Choice Value</label></div><div class="clearer"></div></div>';
191
+ },
192
+ allowUntick: function()
193
+ {
194
+ return '<div><label><input type="checkbox" name="sUntickAccepted" '+((this.untickAccepted) ? ' CHECKED ' : '')+'/> Allow Untick Choices</label></div>';
195
+ },
196
+ showChoiceIntance: function()
197
+ {
198
+ this.choicesVal = ((typeof(this.choicesVal) != "undefined" && this.choicesVal !== null)?this.choicesVal:this.choices.slice(0));
199
+ var l = this.choices,
200
+ lv = this.choicesVal,
201
+ str = '', str1, j,
202
+ reloadRequired = false;
203
+ if (!(typeof(this.choicesDep) != "undefined" && this.choicesDep !== null))
204
{
205
+ this.choicesDep = new Array();
206
+ for (var i=0;i<l.length;i++)
207
+ {
208
+ this.choicesDep[i] = new Array();
209
+ }
210
+ }
211
+ var d = this.choicesDep;
212
+ for (var i=0;i<l.length;i++)
213
{
214
+ str1 = '';
215
+ str += '<div class="choicesEdit"><input class="choice_radio" i="'+i+'" type="radio" '+((this.choiceSelected==l[i]+' - '+lv[i])?"checked":"")+' name="choice_radio" /><input class="choice_text" i="'+i+'" type="text" name="sChoice'+this.name+'" id="sChoice'+this.name+'" value="'+$.fbuilder.htmlEncode($.fbuilder.htmlDecode(l[i]))+'"/><input class="choice_value" i="'+i+'" type="text" name="sChoice'+this.name+'V'+i+'" id="sChoice'+this.name+'V'+i+'" value="'+$.fbuilder.htmlEncode($.fbuilder.htmlDecode(lv[i]))+'"/><div class="choice-ctrls"><a class="choice_down ui-icon ui-icon-arrowthick-1-s" i="'+i+'" n="'+(l.length-1)+'" title="Down"></a><a class="choice_up ui-icon ui-icon-arrowthick-1-n" i="'+i+'" title="Up"></a><a class="choice_add ui-icon ui-icon-circle-plus" i="'+i+'" title="Add another choice."></a><a class="choice_remove ui-icon ui-icon-circle-minus" i="'+i+'" title="Delete this choice."></a></div></div>';
216
+ j = d[i].length;
217
+ if(j)
218
{
219
+ while(j--)
220
{
221
+ if(d[i][j].length && $('.'+d[i][j]).length == 0){ reloadRequired = true; d[i].splice(j,1); continue;}
222
+ str1 = '<div class="choicesEditDep"><span>If selected show:</span> <select class="dependencies" i="'+i+'" j="'+j+'" dname="'+this.name+'" dvalue="'+d[i][j]+'" ></select><div class="choice-ctrls"><a class="choice_addDep ui-icon ui-icon-circle-plus" i="'+i+'" j="'+j+'" title="Add another dependency."></a><a class="choice_removeDep ui-icon ui-icon-circle-minus" i="'+i+'" j="'+j+'" title="Delete this dependency."></a></div></div>'+str1;
223
}
224
+ str += str1;
225
}
226
+ j = d[i].length;
227
+ if(!j)
228
{
229
+ str += '<div class="choicesEditDep"><span>If selected show:</span> <select class="dependencies" i="'+i+'" j="'+j+'" dname="'+this.name+'" dvalue="" ></select><div class="choice-ctrls"><a class="choice_addDep ui-icon ui-icon-circle-plus" i="'+i+'" j="'+j+'" title="Add another dependency."></a><a class="choice_removeDep ui-icon ui-icon-circle-minus" i="'+i+'" j="'+j+'" title="Delete this dependency."></a></div></div>';
230
}
231
}
232
+ if(reloadRequired) $.fbuilder.reloadItems({'field':this});
233
+ return '<div class="choicesSet '+((this.showDep)?"show":"hide")+'"><label>Choices</label> <a class="helpfbuilder dep" text="Dependencies are used to show/hide other fields depending of the option selected in this field.">help?</a> <a href="" class="showHideDependencies">'+((this.showDep)?"Hide":"Show")+' Dependencies</a><div><div class="t">Text</div><div class="t">Value</div><div class="clearer"></div></div>'+str+this.attributeToSubmit()+this.allowUntick()+'</div>';
234
+ }
235
+ });
js/fields-admin/08_fbuilder.fdropdown.js CHANGED
@@ -221,7 +221,9 @@
221
222
var l = this.choices,
223
lv = this.choicesVal,
224
- og = this.optgroup;
225
226
if (!(typeof(this.choicesDep) != "undefined" && this.choicesDep !== null))
227
{
@@ -232,22 +234,30 @@
232
}
233
}
234
var d = this.choicesDep;
235
- var str = "";
236
for (var i=0;i<l.length;i++)
237
{
238
if(typeof og[i] == 'undefined') og[i] = false;
239
240
str += '<div class="choicesEdit"><input class="choice_select" i="'+i+'" type="radio" '+((this.choiceSelected==l[i]+' - '+lv[i])?"checked":"")+' name="choice_select" /><input class="choice_text" i="'+i+'" type="text" name="sChoice'+this.name+'" id="sChoice'+this.name+'" value="'+$.fbuilder.htmlEncode(l[i])+'"/><input class="choice_value" i="'+i+'" type="text" name="sChoice'+this.name+'V'+i+'" id="sChoice'+this.name+'V'+i+'" value="'+$.fbuilder.htmlEncode(lv[i])+'"/><input type="checkbox" name="optgroup" i="'+i+'" '+((og[i]) ? ' CHECKED ' : '' )+' class="choice_optgroup" /><div class="choice-ctrls"><a class="choice_down ui-icon ui-icon-arrowthick-1-s" i="'+i+'" n="'+(l.length-1)+'" title="Down"></a><a class="choice_up ui-icon ui-icon-arrowthick-1-n" i="'+i+'" title="Up"></a><a class="choice_add ui-icon ui-icon-circle-plus" i="'+i+'" title="Add another choice."></a><a class="choice_remove ui-icon ui-icon-circle-minus" i="'+i+'" title="Delete this choice."></a></div></div>';
241
242
- for (var j=0;j<d[i].length;j++)
243
{
244
- str += '<div class="choicesEditDep"><span>If selected show:</span> <select class="dependencies" i="'+i+'" j="'+j+'" dname="'+this.name+'" dvalue="'+d[i][j]+'" ></select><div class="choice-ctrls"><a class="choice_addDep ui-icon ui-icon-circle-plus" i="'+i+'" j="'+j+'" title="Add another dependency."></a><a class="choice_removeDep ui-icon ui-icon-circle-minus" i="'+i+'" j="'+j+'" title="Delete this dependency."></a></div></div>';
245
}
246
- if (d[i].length==0)
247
{
248
- str += '<div class="choicesEditDep"><span>If selected show:</span> <select class="dependencies" i="'+i+'" j="'+d[i].length+'" dname="'+this.name+'" dvalue="" ></select><div class="choice-ctrls"><a class="choice_addDep ui-icon ui-icon-circle-plus" i="'+i+'" j="'+d[i].length+'" title="Add another dependency."></a><a class="choice_removeDep ui-icon ui-icon-circle-minus" i="'+i+'" j="'+d[i].length+'" title="Delete this dependency."></a></div></div>';
249
}
250
}
251
return '<div class="choicesSet '+((this.showDep)?"show":"hide")+'"><label>Choices</label> <a class="helpfbuilder dep" text="Dependencies are used to show/hide other fields depending of the option selected in this field.">help?</a> <a href="" class="showHideDependencies">'+((this.showDep)?"Hide":"Show")+' Dependencies</a><div><div class="t">Text</div><div class="t">Value</div><div>optgroup</div><div class="clearer"></div></div>'+str+this.mergeValues()+this.attributeToSubmit()+this.multipleSelection()+'</div>';
252
}
253
});
221
222
var l = this.choices,
223
lv = this.choicesVal,
224
+ og = this.optgroup,
225
+ str = '', str1, j,
226
+ reloadRequired = false;
227
228
if (!(typeof(this.choicesDep) != "undefined" && this.choicesDep !== null))
229
{
234
}
235
}
236
var d = this.choicesDep;
237
for (var i=0;i<l.length;i++)
238
{
239
+ str1 = '';
240
if(typeof og[i] == 'undefined') og[i] = false;
241
242
str += '<div class="choicesEdit"><input class="choice_select" i="'+i+'" type="radio" '+((this.choiceSelected==l[i]+' - '+lv[i])?"checked":"")+' name="choice_select" /><input class="choice_text" i="'+i+'" type="text" name="sChoice'+this.name+'" id="sChoice'+this.name+'" value="'+$.fbuilder.htmlEncode(l[i])+'"/><input class="choice_value" i="'+i+'" type="text" name="sChoice'+this.name+'V'+i+'" id="sChoice'+this.name+'V'+i+'" value="'+$.fbuilder.htmlEncode(lv[i])+'"/><input type="checkbox" name="optgroup" i="'+i+'" '+((og[i]) ? ' CHECKED ' : '' )+' class="choice_optgroup" /><div class="choice-ctrls"><a class="choice_down ui-icon ui-icon-arrowthick-1-s" i="'+i+'" n="'+(l.length-1)+'" title="Down"></a><a class="choice_up ui-icon ui-icon-arrowthick-1-n" i="'+i+'" title="Up"></a><a class="choice_add ui-icon ui-icon-circle-plus" i="'+i+'" title="Add another choice."></a><a class="choice_remove ui-icon ui-icon-circle-minus" i="'+i+'" title="Delete this choice."></a></div></div>';
243
244
+ j = d[i].length;
245
+ if(j)
246
{
247
+ while(j--)
248
+ {
249
+ if(d[i][j].length && $('.'+d[i][j]).length == 0){ reloadRequired = true; d[i].splice(j,1); continue;}
250
+ str1 = '<div class="choicesEditDep"><span>If selected show:</span> <select class="dependencies" i="'+i+'" j="'+j+'" dname="'+this.name+'" dvalue="'+d[i][j]+'" ></select><div class="choice-ctrls"><a class="choice_addDep ui-icon ui-icon-circle-plus" i="'+i+'" j="'+j+'" title="Add another dependency."></a><a class="choice_removeDep ui-icon ui-icon-circle-minus" i="'+i+'" j="'+j+'" title="Delete this dependency."></a></div></div>'+str1;
251
+ }
252
+ str += str1;
253
}
254
+ j = d[i].length;
255
+ if(!j)
256
{
257
+ str += '<div class="choicesEditDep"><span>If selected show:</span> <select class="dependencies" i="'+i+'" j="'+j+'" dname="'+this.name+'" dvalue="" ></select><div class="choice-ctrls"><a class="choice_addDep ui-icon ui-icon-circle-plus" i="'+i+'" j="'+j+'" title="Add another dependency."></a><a class="choice_removeDep ui-icon ui-icon-circle-minus" i="'+i+'" j="'+j+'" title="Delete this dependency."></a></div></div>';
258
}
259
}
260
+ if(reloadRequired) $.fbuilder.reloadItems({'field':this});
261
return '<div class="choicesSet '+((this.showDep)?"show":"hide")+'"><label>Choices</label> <a class="helpfbuilder dep" text="Dependencies are used to show/hide other fields depending of the option selected in this field.">help?</a> <a href="" class="showHideDependencies">'+((this.showDep)?"Hide":"Show")+' Dependencies</a><div><div class="t">Text</div><div class="t">Value</div><div>optgroup</div><div class="clearer"></div></div>'+str+this.mergeValues()+this.attributeToSubmit()+this.multipleSelection()+'</div>';
262
}
263
});
js/fields-admin/10_fbuilder.fpassword.js CHANGED
@@ -37,16 +37,19 @@
37
var str = '<option value="" '+(("" == $(this).attr("dvalue"))?"selected":"")+'></option>';
38
for (var i=0;i<items.length;i++)
39
{
40
- if ((items[i].ftype=="ftext" || items[i].ftype=="femail" || items[i].ftype=="fpassword") && (items[i].name != $(this).attr("dname")))
41
{
42
str += '<option value="'+items[i].name+'" '+((items[i].name == $(this).attr("dvalue"))?"selected":"")+'>'+(items[i].title)+'</option>';
43
}
44
- }
45
$(this).html(str);
46
- });
47
$.fbuilder.controls[ 'ffields' ].prototype.editItemEvents.call(this,evt);
48
},
49
- showSpecialDataInstance: function()
50
{
51
return '<div class="column"><label>Min length/characters</label><br /><input name="sMinlength" id="sMinlength" value="'+$.fbuilder.htmlEncode(this.minlength)+'"></div><div class="column"><label>Max length/characters</label><br /><input name="sMaxlength" id="sMaxlength" value="'+$.fbuilder.htmlEncode(this.maxlength)+'"></div><div class="clearer"></div>';
52
}
37
var str = '<option value="" '+(("" == $(this).attr("dvalue"))?"selected":"")+'></option>';
38
for (var i=0;i<items.length;i++)
39
{
40
+ if (
41
+ $.inArray(items[i].ftype, ['ftext', 'femail', 'fpassword', 'ftextds', 'femailds']) != -1 &&
42
+ items[i].name != $(this).attr("dname")
43
+ )
44
{
45
str += '<option value="'+items[i].name+'" '+((items[i].name == $(this).attr("dvalue"))?"selected":"")+'>'+(items[i].title)+'</option>';
46
}
47
+ }
48
$(this).html(str);
49
+ });
50
$.fbuilder.controls[ 'ffields' ].prototype.editItemEvents.call(this,evt);
51
},
52
+ showSpecialDataInstance: function()
53
{
54
return '<div class="column"><label>Min length/characters</label><br /><input name="sMinlength" id="sMinlength" value="'+$.fbuilder.htmlEncode(this.minlength)+'"></div><div class="column"><label>Max length/characters</label><br /><input name="sMaxlength" id="sMaxlength" value="'+$.fbuilder.htmlEncode(this.maxlength)+'"></div><div class="clearer"></div>';
55
}
js/fields-public/02_fbuilder.fnumber.js CHANGED
@@ -55,7 +55,7 @@
55
56
}
57
parts[0] = str;
58
- return s+parts.join(ds);
59
}
60
else
61
{
@@ -69,14 +69,15 @@
69
},
70
show:function()
71
{
72
- var _type = ( this.dformat == 'digits' || ( /^#x2F;.test( this.thousandSeparator ) && /^\s*(\.\s*)?#x2F;.test( this.decimalSymbol ) ) ) ? 'number' : 'text';
73
74
- return '<div class="fields '+this.csslayout+' '+this.name+' cff-number-field" id="field'+this.form_identifier+'-'+this.index+'"><label for="'+this.name+'">'+this.title+''+((this.required)?"<span class='r'>*</span>":"")+'</label><div class="dfield"><input id="'+this.name+'" name="'+this.name+'" '+( ( !/^\s*#x2F;.test( this.min) ) ? 'min="'+$.fbuilder.parseVal( this._getAttr('min'), this.thousandSeparator, this.decimalSymbol )+'" ' : '' )+( ( !/^\s*#x2F;.test(this.max) ) ? ' max="'+$.fbuilder.parseVal( this._getAttr('max'), this.thousandSeparator, this.decimalSymbol )+'" ' : '' )+' class="field '+this.dformat+' '+this.size+((this.required)?" required":"")+'" type="'+_type+'" value="'+$.fbuilder.htmlEncode((this.formatDynamically) ? this.getFormattedValue(this.predefined) : this.predefined)+'" '+((this.readonly)?'readonly':'')+' /><span class="uh">'+this.userhelp+'</span></div><div class="clearer"></div></div>';
75
},
76
after_show:function()
77
{
78
var me = this;
79
- if( this.formatDynamically && this.dformat != 'digits' )
80
{
81
$( document ).on( 'change', '[name="' + me.name + '"]', function(){
82
this.value = me.getFormattedValue( this.value );
@@ -85,7 +86,6 @@
85
86
if( typeof $[ 'validator' ] != 'undefined' )
87
{
88
-
89
$.validator.methods.number = function(v, el)
90
{
91
var f = el.id.match(/_\d+#x2F;),
@@ -95,8 +95,7 @@
95
if(f) e = $.fbuilder['forms'][f[0]].getItem(el.name);
96
if(!e) e = {thousandSeparator: ',', decimalSymbol: '.'};
97
98
- r = new RegExp('^\\s*\\-?\\d+('+esc(e.thousandSeparator)+'\\d{3})*('+esc(e.decimalSymbol)+'\\d+)?\\s*#x27;,'i');
99
-
100
return this.optional(el) || r.test(v) || $.isNumeric(v);
101
};
102
$.validator.methods.min = function(v, el, p)
@@ -126,7 +125,8 @@
126
{
127
var v = $.trim( e.val() );
128
if(raw) return ($.isNumeric(v) && this.thousandSeparator != '.') ? v : $.fbuilder.parseValStr(v, raw);
129
- return $.fbuilder.parseVal(v, this.thousandSeparator, this.decimalSymbol);
130
}
131
return 0;
132
}
55
56
}
57
parts[0] = str;
58
+ return s+parts.join(ds)+((this.dformat == 'percent') ? '%':'');
59
}
60
else
61
{
69
},
70
show:function()
71
{
72
+ var _type = ( this.dformat == 'digits' || ( this.dformat != 'percent' && /^#x2F;.test( this.thousandSeparator ) && /^\s*(\.\s*)?#x2F;.test( this.decimalSymbol ) ) ) ? 'number' : 'text';
73
74
+ return '<div class="fields '+this.csslayout+' '+this.name+' cff-number-field" id="field'+this.form_identifier+'-'+this.index+'"><label for="'+this.name+'">'+this.title+''+((this.required)?"<span class='r'>*</span>":"")+'</label><div class="dfield"><input id="'+this.name+'" name="'+this.name+'" '+( ( !/^\s*#x2F;.test( this.min) ) ? 'min="'+$.fbuilder.parseVal( this._getAttr('min'), this.thousandSeparator, this.decimalSymbol )+'" ' : '' )+( ( !/^\s*#x2F;.test(this.max) ) ? ' max="'+$.fbuilder.parseVal( this._getAttr('max'), this.thousandSeparator, this.decimalSymbol )+'" ' : '' )+' class="field '+this.dformat+((this.dformat == 'percent') ? ' number' : '')+' '+this.size+((this.required)?" required":"")+'" type="'+_type+'" value="'+$.fbuilder.htmlEncode((this.formatDynamically) ? this.getFormattedValue(this.predefined) : this.predefined)+'" '+((this.readonly)?'readonly':'')+' /><span class="uh">'+this.userhelp+'</span></div><div class="clearer"></div></div>';
75
},
76
after_show:function()
77
{
78
var me = this;
79
+
80
+ if( (me.formatDynamically && me.dformat != 'digits') || me.dformat == 'percent')
81
{
82
$( document ).on( 'change', '[name="' + me.name + '"]', function(){
83
this.value = me.getFormattedValue( this.value );
86
87
if( typeof $[ 'validator' ] != 'undefined' )
88
{
89
$.validator.methods.number = function(v, el)
90
{
91
var f = el.id.match(/_\d+#x2F;),
95
if(f) e = $.fbuilder['forms'][f[0]].getItem(el.name);
96
if(!e) e = {thousandSeparator: ',', decimalSymbol: '.'};
97
98
+ r = new RegExp('^\\s*\\-?\\d+('+esc(e.thousandSeparator)+'\\d{3})*('+esc(e.decimalSymbol)+'\\d+)?\\s*\\%?\\s*#x27;,'i');
99
return this.optional(el) || r.test(v) || $.isNumeric(v);
100
};
101
$.validator.methods.min = function(v, el, p)
125
{
126
var v = $.trim( e.val() );
127
if(raw) return ($.isNumeric(v) && this.thousandSeparator != '.') ? v : $.fbuilder.parseValStr(v, raw);
128
+ v = $.fbuilder.parseVal(v, this.thousandSeparator, this.decimalSymbol);
129
+ return (this.dformat == 'percent') ? v/100 : v;
130
}
131
return 0;
132
}
js/fields-public/06_fbuilder.fcheck.js CHANGED
@@ -52,7 +52,7 @@
52
showHideDep:function( toShow, toHide, hiddenByContainer )
53
{
54
var me = this,
55
- item = $( '[id*="'+me.name+'"]' ),
56
form_identifier = me.form_identifier,
57
isHidden = (typeof toHide[ me.name ] != 'undefined' || typeof hiddenByContainer[ me.name ] != 'undefined' ),
58
result = [];
@@ -132,6 +132,19 @@
132
$( '[id*="'+n+'"][vt="'+t+'"],[id*="'+n+'"][value="'+t+'"]' ).prop( 'checked', true );
133
}
134
$( '[id*="'+n+'"]' ).change();
135
}
136
}
137
);
52
showHideDep:function( toShow, toHide, hiddenByContainer )
53
{
54
var me = this,
55
+ item = $( 'input[id*="'+me.name+'"]' ),
56
form_identifier = me.form_identifier,
57
isHidden = (typeof toHide[ me.name ] != 'undefined' || typeof hiddenByContainer[ me.name ] != 'undefined' ),
58
result = [];
132
$( '[id*="'+n+'"][vt="'+t+'"],[id*="'+n+'"][value="'+t+'"]' ).prop( 'checked', true );
133
}
134
$( '[id*="'+n+'"]' ).change();
135
+ },
136
+ setChoices:function(choices)
137
+ {
138
+ if($.isPlainObject(choices))
139
+ {
140
+ var bk = this.val(true);
141
+ if('texts' in choices && $.isArray(choices.texts)) this.choices = choices.texts;
142
+ if('values' in choices && $.isArray(choices.values)) this.choicesVal = choices.values;
143
+ if('dependencies' in choices && $.isArray(choices.dependencies)) this.choicesDep = choices.dependencies;
144
+ var html = this.show(),
145
+ field = $('.'+this.name).replaceWith(html);
146
+ this.setVal(bk);
147
+ }
148
}
149
}
150
);
js/fields-public/07_fbuilder.fradio.js CHANGED
@@ -59,7 +59,7 @@
59
showHideDep:function( toShow, toHide, hiddenByContainer )
60
{
61
var me = this,
62
- item = $( '[id*="'+me.name+'"]' ),
63
form_identifier = me.form_identifier,
64
isHidden = ( typeof toHide[ me.name ] != 'undefined' || typeof hiddenByContainer[ me.name ] != 'undefined' ),
65
result = [];
@@ -123,6 +123,19 @@
123
$( '[id*="'+n+'"]' ).prop( 'checked', false );
124
$( '[id*="'+n+'"][vt="'+t+'"],[id*="'+n+'"][value="'+t+'"]' ).prop( 'checked', true );
125
$( '[id*="'+n+'"]' ).change();
126
}
127
}
128
);
59
showHideDep:function( toShow, toHide, hiddenByContainer )
60
{
61
var me = this,
62
+ item = $( 'input[id*="'+me.name+'"]' ),
63
form_identifier = me.form_identifier,
64
isHidden = ( typeof toHide[ me.name ] != 'undefined' || typeof hiddenByContainer[ me.name ] != 'undefined' ),
65
result = [];
123
$( '[id*="'+n+'"]' ).prop( 'checked', false );
124
$( '[id*="'+n+'"][vt="'+t+'"],[id*="'+n+'"][value="'+t+'"]' ).prop( 'checked', true );
125
$( '[id*="'+n+'"]' ).change();
126
+ },
127
+ setChoices:function(choices)
128
+ {
129
+ if($.isPlainObject(choices))
130
+ {
131
+ var bk = this.val(true);
132
+ if('texts' in choices && $.isArray(choices.texts)) this.choices = choices.texts;
133
+ if('values' in choices && $.isArray(choices.values)) this.choicesVal = choices.values;
134
+ if('dependencies' in choices && $.isArray(choices.dependencies)) this.choicesDep = choices.dependencies;
135
+ var html = this.show(),
136
+ field = $('.'+this.name).replaceWith(html);
137
+ this.setVal(bk);
138
+ }
139
}
140
}
141
);
js/fields-public/08_fbuilder.fdropdown.js CHANGED
@@ -147,6 +147,20 @@
147
148
}
149
$( '[id="'+n+'"]' ).change();
150
}
151
}
152
);
147
148
}
149
$( '[id="'+n+'"]' ).change();
150
+ },
151
+ setChoices:function(choices)
152
+ {
153
+ if($.isPlainObject(choices))
154
+ {
155
+ var bk = this.val(true);
156
+ if('texts' in choices && $.isArray(choices.texts)) this.choices = choices.texts;
157
+ if('values' in choices && $.isArray(choices.values)) this.choicesVal = choices.values;
158
+ if('dependencies' in choices && $.isArray(choices.dependencies)) this.choicesDep = choices.dependencies;
159
+ if('optgroup' in choices && $.isArray(choices.optgroup)) this.optgroup = choices.optgroup;
160
+ var html = this.show(),
161
+ field = $('.'+this.name).replaceWith(html);
162
+ this.setVal(bk);
163
+ }
164
}
165
}
166
);
js/fields-public/32_fbuilder.fbutton.js CHANGED
@@ -37,7 +37,7 @@
37
var suffix = e.attr( 'id' ).match(/_\d+#x2F;)[0],
38
items = $.fbuilder[ 'forms' ][ suffix ].getItems();
39
40
- $.fbuilder[ 'calculator' ].defaultCalc( '#'+e.closest( 'form' ).attr( 'id' ) );
41
for(var i = 0, h = items.length; i < h; i++ )
42
{
43
if(items[i].ftype == 'fsummary')
37
var suffix = e.attr( 'id' ).match(/_\d+#x2F;)[0],
38
items = $.fbuilder[ 'forms' ][ suffix ].getItems();
39
40
+ $.fbuilder[ 'calculator' ].defaultCalc( '#'+e.closest( 'form' ).attr( 'id' ), false );
41
for(var i = 0, h = items.length; i < h; i++ )
42
{
43
if(items[i].ftype == 'fsummary')
js/fields-public/fbuilder.fcalculated.js CHANGED
@@ -61,13 +61,12 @@
61
'calcualtedfield_changed',
62
{obj: me},
63
function( evt ){
64
- if( $.fbuilder[ 'calculator' ].getDepList( evt.data.obj.name, evt.data.obj.val(), evt.data.obj.dependencies ) )
65
{
66
$.fbuilder.showHideDep(
67
{
68
'formIdentifier' : evt.data.obj.form_identifier,
69
- 'fieldIdentifier': evt.data.obj.name,
70
- 'throwEvent' : false
71
}
72
);
73
}
@@ -79,7 +78,7 @@
79
var me = this,
80
result = [];
81
82
- if($.fbuilder[ 'calculator' ].getDepList(me.name, me.val(), me.dependencies))
83
{
84
var item = $( '#'+me.name ),
85
identifier = me.form_identifier,
@@ -348,20 +347,20 @@
348
}
349
}
350
},
351
- getDepList : function( calculated_field, value, dependencies ) // Get the list of dependent fields
352
{
353
var list = [], // Fields that comply the rules
354
list_h = []; // Fields that don't comply the rules
355
356
// The value is correct and the field has dependencies
357
- if( value !== false && dependencies.length )
358
{
359
for( var i = 0, h = dependencies.length; i < h; i++ )
360
{
361
try
362
{
363
// Get the rule and evaluate
364
- var rule = eval(dependencies[i].rule.replace( /value/gi, value ));
365
$.each( dependencies[i].fields, function( j, e )
366
{
367
if( e != '' )
@@ -391,7 +390,7 @@
391
return list.length || list_h.length;
392
},
393
394
- defaultCalc : function( form_identifier, recalculate ) // Evaluate all equations in form
395
{
396
var form = $( form_identifier ),
397
fSec = form_identifier.match( /_\d+#x2F; )[0],
@@ -400,7 +399,11 @@
400
// The form exists and has equations
401
if( form.length )
402
{
403
- if( typeof form[0].equations != 'undefined' )
404
{
405
this.queued_equations[ fSec ] = form[0].equations.slice( 0 );
406
this.processQueue( fSec );
@@ -568,7 +571,16 @@
568
}
569
else
570
{
571
- if( t.hasClass( 'depItem' ) || ( t.prop( 'tagName' ) == 'INPUT' && t.attr( 'type' ).toLowerCase() == 'text' && evt.type != 'change' ) )
572
{
573
return;
574
}
@@ -577,16 +589,23 @@
577
});
578
579
//Associate an event to the document waiting for the showHideDepEvent and recalculate all equations
580
- $(document).bind( 'showHideDepEvent', function( evt, form_identifier )
581
{
582
- // If evalequations = 0 the equations shouldn't be evaluated dynamically
583
- var f, evalequations;
584
if(form_identifier) f = $('#'+form_identifier);
585
else f = $('[id*="cp_calculatedfieldsf_pform_"]:eq(0)');
586
if(f.length)
587
{
588
evalequations = f.data( 'evalequations' );
589
- if( typeof evalequations == 'undefined' || evalequations*1 == 1 ) obj.defaultCalc( '#'+f.attr('id') );
590
}
591
});
592
return obj; // Return the public object
61
'calcualtedfield_changed',
62
{obj: me},
63
function( evt ){
64
+ if( $.fbuilder[ 'calculator' ].getDepList( evt.data.obj.name, {value: evt.data.obj.val(), raw: evt.data.obj.val(true)}, evt.data.obj.dependencies ) )
65
{
66
$.fbuilder.showHideDep(
67
{
68
'formIdentifier' : evt.data.obj.form_identifier,
69
+ 'fieldIdentifier': evt.data.obj.name
70
}
71
);
72
}
78
var me = this,
79
result = [];
80
81
+ if($.fbuilder[ 'calculator' ].getDepList(me.name, {value: me.val(), raw: me.val(true)}, me.dependencies))
82
{
83
var item = $( '#'+me.name ),
84
identifier = me.form_identifier,
347
}
348
}
349
},
350
+ getDepList : function( calculated_field, values, dependencies ) // Get the list of dependent fields
351
{
352
var list = [], // Fields that comply the rules
353
list_h = []; // Fields that don't comply the rules
354
355
// The value is correct and the field has dependencies
356
+ if( values.value !== false && dependencies.length )
357
{
358
for( var i = 0, h = dependencies.length; i < h; i++ )
359
{
360
try
361
{
362
// Get the rule and evaluate
363
+ var rule = eval(dependencies[i].rule.replace(/value\|r/gi, values.raw).replace(/value/gi, values.value));
364
$.each( dependencies[i].fields, function( j, e )
365
{
366
if( e != '' )
390
return list.length || list_h.length;
391
},
392
393
+ defaultCalc : function( form_identifier, enqueued ) // Evaluate all equations in form
394
{
395
var form = $( form_identifier ),
396
fSec = form_identifier.match( /_\d+#x2F; )[0],
399
// The form exists and has equations
400
if( form.length )
401
{
402
+ if(enqueued)
403
+ {
404
+ this.processQueue( fSec );
405
+ }
406
+ else if( typeof form[0].equations != 'undefined' )
407
{
408
this.queued_equations[ fSec ] = form[0].equations.slice( 0 );
409
this.processQueue( fSec );
571
}
572
else
573
{
574
+ if( /*t.hasClass( 'depItem' ) ||*/
575
+ (
576
+ (
577
+ t.prop( 'tagName' ) == 'INPUT' &&
578
+ /(text|number|email|password)/.test(t.attr( 'type' ).toLowerCase()) ||
579
+ t.prop( 'tagName' ) == 'TEXTAREA'
580
+ ) &&
581
+ evt.type != 'change'
582
+ )
583
+ )
584
{
585
return;
586
}
589
});
590
591
//Associate an event to the document waiting for the showHideDepEvent and recalculate all equations
592
+ $(document).on( 'showHideDepEvent', function( evt, form_identifier )
593
{
594
+ // If evalequations = 0 the equations shouldn't be evaluated dynamically
595
+ var f, evalequations, first_time;
596
if(form_identifier) f = $('#'+form_identifier);
597
else f = $('[id*="cp_calculatedfieldsf_pform_"]:eq(0)');
598
+
599
if(f.length)
600
{
601
+ first_time = (typeof f.data('first_time') == 'undefined');
602
+ f.data('first_time', 0);
603
evalequations = f.data( 'evalequations' );
604
+ if( typeof evalequations == 'undefined' || evalequations*1 == 1 )
605
+ {
606
+ if(first_time) obj.defaultCalc( '#'+f.attr('id') );
607
+ else obj.defaultCalc( '#'+f.attr('id'), true );
608
+ }
609
}
610
});
611
return obj; // Return the public object
js/jquery.validate.js CHANGED
@@ -1,9 +1,13 @@
1
/*!
2
* jQuery Validation Plugin v1.17.0
3
*
4
* https://jqueryvalidation.org/
5
*
6
* Copyright (c) 2017 Jörn Zaefferer
7
* Released under the MIT license
8
*/
9
- fbuilderjQuery=(typeof fbuilderjQuery!='undefined')?fbuilderjQuery:jQuery;(function(factory){if(typeof define==="function"&&define.amd){define(["fbuilderjQuery"],factory);}else if(typeof module==="object"&&module.exports){module.exports=factory(require("fbuilderjQuery"));}else{factory(fbuilderjQuery);}}(function($){$.extend($.fn,{validate:function(options){if(!this.length){if(options&&options.debug&&window.console){console.warn("Nothing selected, can't validate, returning nothing.");} return;} var validator=$.data(this[0],"validator");if(validator){return validator;} this.attr("novalidate","novalidate");validator=new $.validator(options,this[0]);$.data(this[0],"validator",validator);if(validator.settings.onsubmit){this.on("click.validate",":submit",function(event){validator.submitButton=event.currentTarget;if($(this).hasClass("cancel")){validator.cancelSubmit=true;} if($(this).attr("formnovalidate")!==undefined){validator.cancelSubmit=true;}});this.on("submit.validate",function(event){if(validator.settings.debug){event.preventDefault();} function handle(){var hidden,result;if(validator.submitButton&&(validator.settings.submitHandler||validator.formSubmitted)){hidden=$("<input type='hidden'/>").attr("name",validator.submitButton.name).val($(validator.submitButton).val()).appendTo(validator.currentForm);} if(validator.settings.submitHandler){result=validator.settings.submitHandler.call(validator,validator.currentForm,event);if(hidden){hidden.remove();} if(result!==undefined){return result;} return false;} return true;} if(validator.cancelSubmit){validator.cancelSubmit=false;return handle();} if(validator.form()){if(validator.pendingRequest){validator.formSubmitted=true;return false;} return handle();}else{validator.focusInvalid();return false;}});} return validator;},valid:function(){var valid,validator,errorList;if($(this[0]).is("form")){valid=this.validate().form();}else{errorList=[];valid=true;validator=$(this[0].form).validate();this.each(function(){valid=validator.element(this)&&valid;if(!valid){errorList=errorList.concat(validator.errorList);}});validator.errorList=errorList;} return valid;},rules:function(command,argument){var element=this[0],settings,staticRules,existingRules,data,param,filtered;if(element==null){return;} if(!element.form&&element.hasAttribute("contenteditable")){element.form=this.closest("form")[0];element.name=this.attr("name");} if(element.form==null){return;} if(command){settings=$.data(element.form,"validator").settings;staticRules=settings.rules;existingRules=$.validator.staticRules(element);switch(command){case"add":$.extend(existingRules,$.validator.normalizeRule(argument));delete existingRules.messages;staticRules[element.name]=existingRules;if(argument.messages){settings.messages[element.name]=$.extend(settings.messages[element.name],argument.messages);} break;case"remove":if(!argument){delete staticRules[element.name];return existingRules;} filtered={};$.each(argument.split(/\s/),function(index,method){filtered[method]=existingRules[method];delete existingRules[method];});return filtered;}} data=$.validator.normalizeRules($.extend({},$.validator.classRules(element),$.validator.attributeRules(element),$.validator.dataRules(element),$.validator.staticRules(element)),element);if(data.required){param=data.required;delete data.required;data=$.extend({required:param},data);} if(data.remote){param=data.remote;delete data.remote;data=$.extend(data,{remote:param});} return data;}});$.extend($.expr.pseudos||$.expr[":"],{blank:function(a){return!$.trim(""+$(a).val());},filled:function(a){var val=$(a).val();return val!==null&&!!$.trim(""+val);},unchecked:function(a){return!$(a).prop("checked");}});$.validator=function(options,form){this.settings=$.extend(true,{},$.validator.defaults,options);this.currentForm=form;this.init();};$.validator.format=function(source,params){if(arguments.length===1){return function(){var args=$.makeArray(arguments);args.unshift(source);return $.validator.format.apply(this,args);};} if(params===undefined){return source;} if(arguments.length>2&&params.constructor!==Array){params=$.makeArray(arguments).slice(1);} if(params.constructor!==Array){params=[params];} $.each(params,function(i,n){source=source.replace(new RegExp("\\{"+i+"\\}","g"),function(){return n;});});return source;};$.extend($.validator,{defaults:{messages:{},groups:{},rules:{},errorClass:"cpefb_error",pendingClass:"pending",validClass:"valid",errorElement:"label",focusCleanup:false,focusInvalid:true,errorContainer:$([]),errorLabelContainer:$([]),onsubmit:true,ignore:":hidden",ignoreTitle:false,onfocusin:function(element){this.lastActive=element;if(this.settings.focusCleanup){if(this.settings.unhighlight){this.settings.unhighlight.call(this,element,this.settings.errorClass,this.settings.validClass);} this.hideThese(this.errorsFor(element));}},onfocusout:function(element){if(!this.checkable(element)&&(element.name in this.submitted||!this.optional(element))){this.element(element);}},onkeyup:function(element,event){var excludedKeys=[16,17,18,20,35,36,37,38,39,40,45,144,225];if(event.which===9&&this.elementValue(element)===""||$.inArray(event.keyCode,excludedKeys)!==-1){return;}else if(element.name in this.submitted||element.name in this.invalid){this.element(element);}},onclick:function(element){if(element.name in this.submitted){this.element(element);}else if(element.parentNode.name in this.submitted){this.element(element.parentNode);}},highlight:function(element,errorClass,validClass){if(element.type==="radio"){this.findByName(element.name).addClass(errorClass).removeClass(validClass);}else{$(element).addClass(errorClass).removeClass(validClass);}},unhighlight:function(element,errorClass,validClass){if(element.type==="radio"){this.findByName(element.name).removeClass(errorClass).addClass(validClass);}else{$(element).removeClass(errorClass).addClass(validClass);}}},setDefaults:function(settings){$.extend($.validator.defaults,settings);},messages:{required:"This field is required.",remote:"Please fix this field.",email:"Please enter a valid email address.",url:"Please enter a valid URL.",date:"Please enter a valid date.",dateISO:"Please enter a valid date (ISO).",number:"Please enter a valid number.",digits:"Please enter only digits.",equalTo:"Please enter the same value again.",maxlength:$.validator.format("Please enter no more than {0} characters."),minlength:$.validator.format("Please enter at least {0} characters."),rangelength:$.validator.format("Please enter a value between {0} and {1} characters long."),range:$.validator.format("Please enter a value between {0} and {1}."),max:$.validator.format("Please enter a value less than or equal to {0}."),min:$.validator.format("Please enter a value greater than or equal to {0}."),step:$.validator.format("Please enter a multiple of {0}.")},autoCreateRanges:false,prototype:{init:function(){this.labelContainer=$(this.settings.errorLabelContainer);this.errorContext=this.labelContainer.length&&this.labelContainer||$(this.currentForm);this.containers=$(this.settings.errorContainer).add(this.settings.errorLabelContainer);this.submitted={};this.valueCache={};this.pendingRequest=0;this.pending={};this.invalid={};this.reset();var groups=(this.groups={}),rules;$.each(this.settings.groups,function(key,value){if(typeof value==="string"){value=value.split(/\s/);} $.each(value,function(index,name){groups[name]=key;});});rules=this.settings.rules;$.each(rules,function(key,value){rules[key]=$.validator.normalizeRule(value);});function delegate(event){if(!this.form&&this.hasAttribute("contenteditable")){this.form=$(this).closest("form")[0];this.name=$(this).attr("name");} var validator=$.data(this.form,"validator"),eventType="on"+event.type.replace(/^validate/,""),settings=validator.settings;if(settings[eventType]&&!$(this).is(settings.ignore)){settings[eventType].call(validator,this,event);}} $(this.currentForm).on("focusin.validate focusout.validate keyup.validate",":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'], "+"[type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], "+"[type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'], "+"[type='radio'], [type='checkbox'], [contenteditable], [type='button']",delegate).on("click.validate","select, option, [type='radio'], [type='checkbox']",delegate);if(this.settings.invalidHandler){$(this.currentForm).on("invalid-form.validate",this.settings.invalidHandler);}},form:function(){this.checkForm();$.extend(this.submitted,this.errorMap);this.invalid=$.extend({},this.errorMap);if(!this.valid()){$(this.currentForm).triggerHandler("invalid-form",[this]);} this.showErrors();return this.valid();},checkForm:function(){this.prepareForm();for(var i=0,elements=(this.currentElements=this.elements());elements[i];i++){this.check(elements[i]);} return this.valid();},element:function(element){var cleanElement=this.clean(element),checkElement=this.validationTargetFor(cleanElement),v=this,result=true,rs,group;if(checkElement===undefined){delete this.invalid[cleanElement.name];}else{this.prepareElement(checkElement);this.currentElements=$(checkElement);group=this.groups[checkElement.name];if(group){$.each(this.groups,function(name,testgroup){if(testgroup===group&&name!==checkElement.name){cleanElement=v.validationTargetFor(v.clean(v.findByName(name)));if(cleanElement&&cleanElement.name in v.invalid){v.currentElements.push(cleanElement);result=v.check(cleanElement)&&result;}}});} rs=this.check(checkElement)!==false;result=result&&rs;if(rs){this.invalid[checkElement.name]=false;}else{this.invalid[checkElement.name]=true;} if(!this.numberOfInvalids()){this.toHide=this.toHide.add(this.containers);} this.showErrors();$(element).attr("aria-invalid",!rs);} return result;},showErrors:function(errors){if(errors){var validator=this;$.extend(this.errorMap,errors);this.errorList=$.map(this.errorMap,function(message,name){return{message:message,element:validator.findByName(name)[0]};});this.successList=$.grep(this.successList,function(element){return!(element.name in errors);});} if(this.settings.showErrors){this.settings.showErrors.call(this,this.errorMap,this.errorList);}else{this.defaultShowErrors();}},resetForm:function(){if($.fn.resetForm){$(this.currentForm).resetForm();} this.invalid={};this.submitted={};this.prepareForm();this.hideErrors();var elements=this.elements().removeData("previousValue").removeAttr("aria-invalid");this.resetElements(elements);},resetElements:function(elements){var i;if(this.settings.unhighlight){for(i=0;elements[i];i++){this.settings.unhighlight.call(this,elements[i],this.settings.errorClass,"");this.findByName(elements[i].name).removeClass(this.settings.validClass);}}else{elements.removeClass(this.settings.errorClass).removeClass(this.settings.validClass);}},numberOfInvalids:function(){return this.objectLength(this.invalid);},objectLength:function(obj){var count=0,i;for(i in obj){if(obj[i]!==undefined&&obj[i]!==null&&obj[i]!==false){count++;}} return count;},hideErrors:function(){this.hideThese(this.toHide);},hideThese:function(errors){errors.not(this.containers).text("");this.addWrapper(errors).hide();},valid:function(){return this.size()===0;},size:function(){return this.errorList.length;},focusInvalid:function(){if(this.settings.focusInvalid){try{$(this.findLastActive()||this.errorList.length&&this.errorList[0].element||[]).filter(":visible").focus().trigger("focusin");}catch(e){}}},findLastActive:function(){var lastActive=this.lastActive;return lastActive&&$.grep(this.errorList,function(n){return n.element.name===lastActive.name;}).length===1&&lastActive;},elements:function(){var validator=this,rulesCache={};return $(this.currentForm).find("input, select, textarea, [contenteditable]").not(":submit, :reset, :image, :disabled").not(this.settings.ignore).filter(function(){var name=this.name||$(this).attr("name");if(!name&&validator.settings.debug&&window.console){console.error("%o has no name assigned",this);} if(this.hasAttribute("contenteditable")){this.form=$(this).closest("form")[0];this.name=name;} if(name in rulesCache||!validator.objectLength($(this).rules())){return false;} rulesCache[name]=true;return true;});},clean:function(selector){return $(selector)[0];},errors:function(){var errorClass=this.settings.errorClass.split(" ").join(".");return $(this.settings.errorElement+"."+errorClass,this.errorContext);},resetInternals:function(){this.successList=[];this.errorList=[];this.errorMap={};this.toShow=$([]);this.toHide=$([]);},reset:function(){this.resetInternals();this.currentElements=$([]);},prepareForm:function(){this.reset();this.toHide=this.errors().add(this.containers);},prepareElement:function(element){this.reset();this.toHide=this.errorsFor(element);},elementValue:function(element){var $element=$(element),type=element.type,val,idx;if(type==="radio"||type==="checkbox"){return this.findByName(element.name).filter(":checked").val();}else if(type==="number"&&typeof element.validity!=="undefined"){return element.validity.badInput?"NaN":$element.val();} if(element.hasAttribute("contenteditable")){val=$element.text();}else{val=$element.val();} if(type==="file"){if(val.substr(0,12)==="C:\\fakepath\\"){return val.substr(12);} idx=val.lastIndexOf("/");if(idx>=0){return val.substr(idx+1);} idx=val.lastIndexOf("\\");if(idx>=0){return val.substr(idx+1);} return val;} if(typeof val==="string"){return val.replace(/\r/g,"");} return val;},check:function(element){element=this.validationTargetFor(this.clean(element));var rules=$(element).rules(),rulesCount=$.map(rules,function(n,i){return i;}).length,dependencyMismatch=false,val=this.elementValue(element),result,method,rule,normalizer;if(typeof rules.normalizer==="function"){normalizer=rules.normalizer;}else if(typeof this.settings.normalizer==="function"){normalizer=this.settings.normalizer;} if(normalizer){val=normalizer.call(element,val);if(typeof val!=="string"){throw new TypeError("The normalizer should return a string value.");} delete rules.normalizer;} for(method in rules){rule={method:method,parameters:rules[method]};try{result=$.validator.methods[method].call(this,val,element,rule.parameters);if(result==="dependency-mismatch"&&rulesCount===1){dependencyMismatch=true;continue;} dependencyMismatch=false;if(result==="pending"){this.toHide=this.toHide.not(this.errorsFor(element));return;} if(!result){this.formatAndAdd(element,rule);return false;}}catch(e){if(this.settings.debug&&window.console){console.log("Exception occurred when checking element "+element.id+", check the '"+rule.method+"' method.",e);} if(e instanceof TypeError){e.message+=". Exception occurred when checking element "+element.id+", check the '"+rule.method+"' method.";} throw e;}} if(dependencyMismatch){return;} if(this.objectLength(rules)){this.successList.push(element);} return true;},customDataMessage:function(element,method){return $(element).data("msg"+method.charAt(0).toUpperCase()+ method.substring(1).toLowerCase())||$(element).data("msg");},customMessage:function(name,method){var m=this.settings.messages[name];return m&&(m.constructor===String?m:m[method]);},findDefined:function(){for(var i=0;i<arguments.length;i++){if(arguments[i]!==undefined){return arguments[i];}} return undefined;},defaultMessage:function(element,rule){if(typeof rule==="string"){rule={method:rule};} var message=this.findDefined(this.customMessage(element.name,rule.method),this.customDataMessage(element,rule.method),!this.settings.ignoreTitle&&element.title||undefined,$.validator.messages[rule.method],"<strong>Warning: No message defined for "+element.name+"</strong>"),theregex=/\$?\{(\d+)\}/g;if(typeof message==="function"){message=message.call(this,rule.parameters,element);}else if(theregex.test(message)){message=$.validator.format(message.replace(theregex,"{$1}"),rule.parameters);} return message;},formatAndAdd:function(element,rule){var message=this.defaultMessage(element,rule);this.errorList.push({message:message,element:element,method:rule.method});this.errorMap[element.name]=message;this.submitted[element.name]=message;},addWrapper:function(toToggle){if(this.settings.wrapper){toToggle=toToggle.add(toToggle.parent(this.settings.wrapper));} return toToggle;},defaultShowErrors:function(){var i,elements,error;for(i=0;this.errorList[i];i++){error=this.errorList[i];if(this.settings.highlight){this.settings.highlight.call(this,error.element,this.settings.errorClass,this.settings.validClass);} this.showLabel(error.element,error.message);} if(this.errorList.length){this.toShow=this.toShow.add(this.containers);} if(this.settings.success){for(i=0;this.successList[i];i++){this.showLabel(this.successList[i]);}} if(this.settings.unhighlight){for(i=0,elements=this.validElements();elements[i];i++){this.settings.unhighlight.call(this,elements[i],this.settings.errorClass,this.settings.validClass);}} this.toHide=this.toHide.not(this.toShow);this.hideErrors();this.addWrapper(this.toShow).show();},validElements:function(){return this.currentElements.not(this.invalidElements());},invalidElements:function(){return $(this.errorList).map(function(){return this.element;});},showLabel:function(element,message){var place,group,errorID,v,error=this.errorsFor(element),elementID=this.idOrName(element),describedBy=$(element).attr("aria-describedby");if(error.length){error.removeClass(this.settings.validClass).addClass(this.settings.errorClass);error.html(message);}else{error=$("<"+this.settings.errorElement+">").attr("id",elementID+"-error").addClass(this.settings.errorClass).html(message||"");place=error;if(this.settings.wrapper){place=error.hide().show().wrap("<"+this.settings.wrapper+"/>").parent();} if(this.labelContainer.length){this.labelContainer.append(place);}else if(this.settings.errorPlacement){this.settings.errorPlacement.call(this,place,$(element));}else{place.insertAfter(element);} if(error.is("label")){error.attr("for",elementID);}else if(error.parents("label[for='"+this.escapeCssMeta(elementID)+"']").length===0){errorID=error.attr("id");if(!describedBy){describedBy=errorID;}else if(!describedBy.match(new RegExp("\\b"+this.escapeCssMeta(errorID)+"\\b"))){describedBy+=" "+errorID;} $(element).attr("aria-describedby",describedBy);group=this.groups[element.name];if(group){v=this;$.each(v.groups,function(name,testgroup){if(testgroup===group){$("[name='"+v.escapeCssMeta(name)+"']",v.currentForm).attr("aria-describedby",error.attr("id"));}});}}} if(!message&&this.settings.success){error.text("");if(typeof this.settings.success==="string"){error.addClass(this.settings.success);}else{this.settings.success(error,element);}} this.toShow=this.toShow.add(error);},errorsFor:function(element){var name=this.escapeCssMeta(this.idOrName(element)),describer=$(element).attr("aria-describedby"),selector="label[for='"+name+"'], label[for='"+name+"'] *";if(describer){selector=selector+", #"+this.escapeCssMeta(describer).replace(/\s+/g,", #");} return this.errors().filter(selector);},escapeCssMeta:function(string){return string.replace(/([\\!"#$%&'()*+,./:;<=>?@\[\]^`{|}~])/g,"\\$1");},idOrName:function(element){return this.groups[element.name]||(this.checkable(element)?element.name:element.id||element.name);},validationTargetFor:function(element){if(this.checkable(element)){element=this.findByName(element.name);} return $(element).not(this.settings.ignore)[0];},checkable:function(element){return(/radio|checkbox/i).test(element.type);},findByName:function(name){return $(this.currentForm).find("[name='"+this.escapeCssMeta(name)+"']");},getLength:function(value,element){switch(element.nodeName.toLowerCase()){case"select":return $("option:selected",element).length;case"input":if(this.checkable(element)){return this.findByName(element.name).filter(":checked").length;}} return value.length;},depend:function(param,element){return this.dependTypes[typeof param]?this.dependTypes[typeof param](param,element):true;},dependTypes:{"boolean":function(param){return param;},"string":function(param,element){return!!$(param,element.form).length;},"function":function(param,element){return param(element);}},optional:function(element){var val=this.elementValue(element);return!$.validator.methods.required.call(this,val,element)&&"dependency-mismatch";},startRequest:function(element){if(!this.pending[element.name]){this.pendingRequest++;$(element).addClass(this.settings.pendingClass);this.pending[element.name]=true;}},stopRequest:function(element,valid){this.pendingRequest--;if(this.pendingRequest<0){this.pendingRequest=0;} delete this.pending[element.name];$(element).removeClass(this.settings.pendingClass);if(valid&&this.pendingRequest===0&&this.formSubmitted&&this.form()){$(this.currentForm).submit();if(this.submitButton){$("input:hidden[name='"+this.submitButton.name+"']",this.currentForm).remove();} this.formSubmitted=false;}else if(!valid&&this.pendingRequest===0&&this.formSubmitted){$(this.currentForm).triggerHandler("invalid-form",[this]);this.formSubmitted=false;}},previousValue:function(element,method){method=typeof method==="string"&&method||"remote";return $.data(element,"previousValue")||$.data(element,"previousValue",{old:null,valid:true,message:this.defaultMessage(element,{method:method})});},destroy:function(){this.resetForm();$(this.currentForm).off(".validate").removeData("validator").find(".validate-equalTo-blur").off(".validate-equalTo").removeClass("validate-equalTo-blur");}},classRuleSettings:{required:{required:true},email:{email:true},url:{url:true},date:{date:true},dateISO:{dateISO:true},number:{number:true},digits:{digits:true},creditcard:{creditcard:true}},addClassRules:function(className,rules){if(className.constructor===String){this.classRuleSettings[className]=rules;}else{$.extend(this.classRuleSettings,className);}},classRules:function(element){var rules={},classes=$(element).attr("class");if(classes){$.each(classes.split(" "),function(){if(this in $.validator.classRuleSettings){$.extend(rules,$.validator.classRuleSettings[this]);}});} return rules;},normalizeAttributeRule:function(rules,type,method,value){if(/min|max|step/.test(method)&&(type===null||/number|range|text/.test(type))){if(!/^\s*#x2F;.test(value))value=Number(value);if(isNaN(value)){value=undefined;}} if(value||value===0){rules[method]=value;}else if(type===method&&type!=="range"){rules[method]=true;}},attributeRules:function(element){var rules={},$element=$(element),type=element.getAttribute("type"),method,value;for(method in $.validator.methods){if(method==="required"){value=element.getAttribute(method);if(value===""){value=true;} value=!!value;}else{value=$element.attr(method);} this.normalizeAttributeRule(rules,type,method,value);} if(rules.maxlength&&/-1|2147483647|524288/.test(rules.maxlength)){delete rules.maxlength;} return rules;},dataRules:function(element){var rules={},$element=$(element),type=element.getAttribute("type"),method,value;for(method in $.validator.methods){value=$element.data("rule"+method.charAt(0).toUpperCase()+method.substring(1).toLowerCase());this.normalizeAttributeRule(rules,type,method,value);} return rules;},staticRules:function(element){var rules={},validator=$.data(element.form,"validator");if(validator.settings.rules){rules=$.validator.normalizeRule(validator.settings.rules[element.name])||{};} return rules;},normalizeRules:function(rules,element){$.each(rules,function(prop,val){if(val===false){delete rules[prop];return;} if(val.param||val.depends){var keepRule=true;switch(typeof val.depends){case"string":keepRule=!!$(val.depends,element.form).length;break;case"function":keepRule=val.depends.call(element,element);break;} if(keepRule){rules[prop]=val.param!==undefined?val.param:true;}else{$.data(element.form,"validator").resetElements($(element));delete rules[prop];}}});$.each(rules,function(rule,parameter){rules[rule]=$.isFunction(parameter)&&rule!=="normalizer"?parameter(element):parameter;});$.each(["minlength","maxlength"],function(){if(rules[this]){rules[this]=Number(rules[this]);}});$.each(["rangelength","range"],function(){var parts;if(rules[this]){if($.isArray(rules[this])){rules[this]=[Number(rules[this][0]),Number(rules[this][1])];}else if(typeof rules[this]==="string"){parts=rules[this].replace(/[\[\]]/g,"").split(/[\s,]+/);rules[this]=[Number(parts[0]),Number(parts[1])];}}});if($.validator.autoCreateRanges){if(rules.min!=null&&rules.max!=null){rules.range=[rules.min,rules.max];delete rules.min;delete rules.max;} if(rules.minlength!=null&&rules.maxlength!=null){rules.rangelength=[rules.minlength,rules.maxlength];delete rules.minlength;delete rules.maxlength;}} return rules;},normalizeRule:function(data){if(typeof data==="string"){var transformed={};$.each(data.split(/\s/),function(){transformed[this]=true;});data=transformed;} return data;},addMethod:function(name,method,message){$.validator.methods[name]=method;$.validator.messages[name]=message!==undefined?message:$.validator.messages[name];if(method.length<3){$.validator.addClassRules(name,$.validator.normalizeRule(name));}},methods:{required:function(value,element,param){if(!this.depend(param,element)){return"dependency-mismatch";} if(element.nodeName.toLowerCase()==="select"){var val=$(element).val();return val&&val.length>0;} if(this.checkable(element)){return this.getLength(value,element)>0;} return value.length>0;},email:function(value,element){return this.optional(element)||/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*#x2F;.test(value);},url:function(value,element){return this.optional(element)||/^(?:(?:(?:https?|ftp):)?\/\/)(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})).?)(?::\d{2,5})?(?:[/?#]\S*)?#x2F;i.test(value);},date:function(value,element){return this.optional(element)||!/Invalid|NaN/.test(new Date(value).toString());},dateISO:function(value,element){return this.optional(element)||/^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])#x2F;.test(value);},number:function(value,element){return this.optional(element)||/^(?:-?\d+|-?\d{1,3}(?:,\d{3})+)?(?:\.\d+)?#x2F;.test(value);},digits:function(value,element){return this.optional(element)||/^\d+#x2F;.test(value);},minlength:function(value,element,param){var length=$.isArray(value)?value.length:this.getLength(value,element);return this.optional(element)||length>=param;},maxlength:function(value,element,param){var length=$.isArray(value)?value.length:this.getLength(value,element);return this.optional(element)||length<=param;},rangelength:function(value,element,param){var length=$.isArray(value)?value.length:this.getLength(value,element);return this.optional(element)||(length>=param[0]&&length<=param[1]);},min:function(value,element,param){return this.optional(element)||value>=param;},max:function(value,element,param){return this.optional(element)||value<=param;},range:function(value,element,param){return this.optional(element)||(value>=param[0]&&value<=param[1]);},step:function(value,element,param){var type=$(element).attr("type"),errorMessage="Step attribute on input type "+type+" is not supported.",supportedTypes=["text","number","range"],re=new RegExp("\\b"+type+"\\b"),notSupported=type&&!re.test(supportedTypes.join()),decimalPlaces=function(num){var match=(""+num).match(/(?:\.(\d+))?#x2F;);if(!match){return 0;} return match[1]?match[1].length:0;},toInt=function(num){return Math.round(num*Math.pow(10,decimals));},valid=true,decimals;if(notSupported){throw new Error(errorMessage);} decimals=decimalPlaces(param);if(decimalPlaces(value)>decimals||toInt(value)%toInt(param)!==0){valid=false;} return this.optional(element)||valid;},equalTo:function(value,element,param){var target=$(param);if(this.settings.onfocusout&&target.not(".validate-equalTo-blur").length){target.addClass("validate-equalTo-blur").on("blur.validate-equalTo",function(){$(element).valid();});} return value===target.val();},remote:function(value,element,param,method){if(this.optional(element)){return"dependency-mismatch";} method=typeof method==="string"&&method||"remote";var previous=this.previousValue(element,method),validator,data,optionDataString;if(!this.settings.messages[element.name]){this.settings.messages[element.name]={};} previous.originalMessage=previous.originalMessage||this.settings.messages[element.name][method];this.settings.messages[element.name][method]=previous.message;param=typeof param==="string"&&{url:param}||param;optionDataString=$.param($.extend({data:value},param.data));if(previous.old===optionDataString){return previous.valid;} previous.old=optionDataString;validator=this;this.startRequest(element);data={};data[element.name]=value;$.ajax($.extend(true,{mode:"abort",port:"validate"+element.name,dataType:"json",data:data,context:validator.currentForm,success:function(response){var valid=response===true||response==="true",errors,message,submitted;validator.settings.messages[element.name][method]=previous.originalMessage;if(valid){submitted=validator.formSubmitted;validator.resetInternals();validator.toHide=validator.errorsFor(element);validator.formSubmitted=submitted;validator.successList.push(element);validator.invalid[element.name]=false;validator.showErrors();}else{errors={};message=response||validator.defaultMessage(element,{method:method,parameters:value});errors[element.name]=previous.message=message;validator.invalid[element.name]=true;validator.showErrors(errors);} previous.valid=valid;validator.stopRequest(element,valid);}},param));return"pending";}}});var pendingRequests={},ajax;if($.ajaxPrefilter){$.ajaxPrefilter(function(settings,_,xhr){var port=settings.port;if(settings.mode==="abort"){if(pendingRequests[port]){pendingRequests[port].abort();} pendingRequests[port]=xhr;}});}else{ajax=$.ajax;$.ajax=function(settings){var mode=("mode"in settings?settings:$.ajaxSettings).mode,port=("port"in settings?settings:$.ajaxSettings).port;if(mode==="abort"){if(pendingRequests[port]){pendingRequests[port].abort();} pendingRequests[port]=ajax.apply(this,arguments);return pendingRequests[port];} return ajax.apply(this,arguments);};} return $;}));
1
/*!
2
* jQuery Validation Plugin v1.17.0
3
*
4
+ * Modified by CodePeople on 2019/09/10, as follows:
5
+ * Original code: ,$.validator.messages[rule.method]
6
+ * Modification: ,this.messages&&this.messages[rule.method]||undefined,$.validator.messages[rule.method]
7
+ *
8
* https://jqueryvalidation.org/
9
*
10
* Copyright (c) 2017 Jörn Zaefferer
11
* Released under the MIT license
12
*/
13
+ fbuilderjQuery=(typeof fbuilderjQuery!='undefined')?fbuilderjQuery:jQuery;(function(factory){if(typeof define==="function"&&define.amd){define(["fbuilderjQuery"],factory);}else if(typeof module==="object"&&module.exports){module.exports=factory(require("fbuilderjQuery"));}else{factory(fbuilderjQuery);}}(function($){$.extend($.fn,{validate:function(options){if(!this.length){if(options&&options.debug&&window.console){console.warn("Nothing selected, can't validate, returning nothing.");} return;} var validator=$.data(this[0],"validator");if(validator){return validator;} this.attr("novalidate","novalidate");validator=new $.validator(options,this[0]);$.data(this[0],"validator",validator);if(validator.settings.onsubmit){this.on("click.validate",":submit",function(event){validator.submitButton=event.currentTarget;if($(this).hasClass("cancel")){validator.cancelSubmit=true;} if($(this).attr("formnovalidate")!==undefined){validator.cancelSubmit=true;}});this.on("submit.validate",function(event){if(validator.settings.debug){event.preventDefault();} function handle(){var hidden,result;if(validator.submitButton&&(validator.settings.submitHandler||validator.formSubmitted)){hidden=$("<input type='hidden'/>").attr("name",validator.submitButton.name).val($(validator.submitButton).val()).appendTo(validator.currentForm);} if(validator.settings.submitHandler){result=validator.settings.submitHandler.call(validator,validator.currentForm,event);if(hidden){hidden.remove();} if(result!==undefined){return result;} return false;} return true;} if(validator.cancelSubmit){validator.cancelSubmit=false;return handle();} if(validator.form()){if(validator.pendingRequest){validator.formSubmitted=true;return false;} return handle();}else{validator.focusInvalid();return false;}});} return validator;},valid:function(){var valid,validator,errorList;if($(this[0]).is("form")){valid=this.validate().form();}else{errorList=[];valid=true;validator=$(this[0].form).validate();this.each(function(){valid=validator.element(this)&&valid;if(!valid){errorList=errorList.concat(validator.errorList);}});validator.errorList=errorList;} return valid;},rules:function(command,argument){var element=this[0],settings,staticRules,existingRules,data,param,filtered;if(element==null){return;} if(!element.form&&element.hasAttribute("contenteditable")){element.form=this.closest("form")[0];element.name=this.attr("name");} if(element.form==null){return;} if(command){settings=$.data(element.form,"validator").settings;staticRules=settings.rules;existingRules=$.validator.staticRules(element);switch(command){case"add":$.extend(existingRules,$.validator.normalizeRule(argument));delete existingRules.messages;staticRules[element.name]=existingRules;if(argument.messages){settings.messages[element.name]=$.extend(settings.messages[element.name],argument.messages);} break;case"remove":if(!argument){delete staticRules[element.name];return existingRules;} filtered={};$.each(argument.split(/\s/),function(index,method){filtered[method]=existingRules[method];delete existingRules[method];});return filtered;}} data=$.validator.normalizeRules($.extend({},$.validator.classRules(element),$.validator.attributeRules(element),$.validator.dataRules(element),$.validator.staticRules(element)),element);if(data.required){param=data.required;delete data.required;data=$.extend({required:param},data);} if(data.remote){param=data.remote;delete data.remote;data=$.extend(data,{remote:param});} return data;}});$.extend($.expr.pseudos||$.expr[":"],{blank:function(a){return!$.trim(""+$(a).val());},filled:function(a){var val=$(a).val();return val!==null&&!!$.trim(""+val);},unchecked:function(a){return!$(a).prop("checked");}});$.validator=function(options,form){this.settings=$.extend(true,{},$.validator.defaults,options);this.currentForm=form;this.init();};$.validator.format=function(source,params){if(arguments.length===1){return function(){var args=$.makeArray(arguments);args.unshift(source);return $.validator.format.apply(this,args);};} if(params===undefined){return source;} if(arguments.length>2&&params.constructor!==Array){params=$.makeArray(arguments).slice(1);} if(params.constructor!==Array){params=[params];} $.each(params,function(i,n){source=source.replace(new RegExp("\\{"+i+"\\}","g"),function(){return n;});});return source;};$.extend($.validator,{defaults:{messages:{},groups:{},rules:{},errorClass:"cpefb_error",pendingClass:"pending",validClass:"valid",errorElement:"label",focusCleanup:false,focusInvalid:true,errorContainer:$([]),errorLabelContainer:$([]),onsubmit:true,ignore:":hidden",ignoreTitle:false,onfocusin:function(element){this.lastActive=element;if(this.settings.focusCleanup){if(this.settings.unhighlight){this.settings.unhighlight.call(this,element,this.settings.errorClass,this.settings.validClass);} this.hideThese(this.errorsFor(element));}},onfocusout:function(element){if(!this.checkable(element)&&(element.name in this.submitted||!this.optional(element))){this.element(element);}},onkeyup:function(element,event){var excludedKeys=[16,17,18,20,35,36,37,38,39,40,45,144,225];if(event.which===9&&this.elementValue(element)===""||$.inArray(event.keyCode,excludedKeys)!==-1){return;}else if(element.name in this.submitted||element.name in this.invalid){this.element(element);}},onclick:function(element){if(element.name in this.submitted){this.element(element);}else if(element.parentNode.name in this.submitted){this.element(element.parentNode);}},highlight:function(element,errorClass,validClass){if(element.type==="radio"){this.findByName(element.name).addClass(errorClass).removeClass(validClass);}else{$(element).addClass(errorClass).removeClass(validClass);}},unhighlight:function(element,errorClass,validClass){if(element.type==="radio"){this.findByName(element.name).removeClass(errorClass).addClass(validClass);}else{$(element).removeClass(errorClass).addClass(validClass);}}},setDefaults:function(settings){$.extend($.validator.defaults,settings);},messages:{required:"This field is required.",remote:"Please fix this field.",email:"Please enter a valid email address.",url:"Please enter a valid URL.",date:"Please enter a valid date.",dateISO:"Please enter a valid date (ISO).",number:"Please enter a valid number.",digits:"Please enter only digits.",equalTo:"Please enter the same value again.",maxlength:$.validator.format("Please enter no more than {0} characters."),minlength:$.validator.format("Please enter at least {0} characters."),rangelength:$.validator.format("Please enter a value between {0} and {1} characters long."),range:$.validator.format("Please enter a value between {0} and {1}."),max:$.validator.format("Please enter a value less than or equal to {0}."),min:$.validator.format("Please enter a value greater than or equal to {0}."),step:$.validator.format("Please enter a multiple of {0}.")},autoCreateRanges:false,prototype:{init:function(){this.labelContainer=$(this.settings.errorLabelContainer);this.errorContext=this.labelContainer.length&&this.labelContainer||$(this.currentForm);this.containers=$(this.settings.errorContainer).add(this.settings.errorLabelContainer);this.submitted={};this.valueCache={};this.pendingRequest=0;this.pending={};this.invalid={};this.reset();var groups=(this.groups={}),rules;$.each(this.settings.groups,function(key,value){if(typeof value==="string"){value=value.split(/\s/);} $.each(value,function(index,name){groups[name]=key;});});rules=this.settings.rules;$.each(rules,function(key,value){rules[key]=$.validator.normalizeRule(value);});function delegate(event){if(!this.form&&this.hasAttribute("contenteditable")){this.form=$(this).closest("form")[0];this.name=$(this).attr("name");} var validator=$.data(this.form,"validator"),eventType="on"+event.type.replace(/^validate/,""),settings=validator.settings;if(settings[eventType]&&!$(this).is(settings.ignore)){settings[eventType].call(validator,this,event);}} $(this.currentForm).on("focusin.validate focusout.validate keyup.validate",":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'], "+"[type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], "+"[type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'], "+"[type='radio'], [type='checkbox'], [contenteditable], [type='button']",delegate).on("click.validate","select, option, [type='radio'], [type='checkbox']",delegate);if(this.settings.invalidHandler){$(this.currentForm).on("invalid-form.validate",this.settings.invalidHandler);}},form:function(){this.checkForm();$.extend(this.submitted,this.errorMap);this.invalid=$.extend({},this.errorMap);if(!this.valid()){$(this.currentForm).triggerHandler("invalid-form",[this]);} this.showErrors();return this.valid();},checkForm:function(){this.prepareForm();for(var i=0,elements=(this.currentElements=this.elements());elements[i];i++){this.check(elements[i]);} return this.valid();},element:function(element){var cleanElement=this.clean(element),checkElement=this.validationTargetFor(cleanElement),v=this,result=true,rs,group;if(checkElement===undefined){delete this.invalid[cleanElement.name];}else{this.prepareElement(checkElement);this.currentElements=$(checkElement);group=this.groups[checkElement.name];if(group){$.each(this.groups,function(name,testgroup){if(testgroup===group&&name!==checkElement.name){cleanElement=v.validationTargetFor(v.clean(v.findByName(name)));if(cleanElement&&cleanElement.name in v.invalid){v.currentElements.push(cleanElement);result=v.check(cleanElement)&&result;}}});} rs=this.check(checkElement)!==false;result=result&&rs;if(rs){this.invalid[checkElement.name]=false;}else{this.invalid[checkElement.name]=true;} if(!this.numberOfInvalids()){this.toHide=this.toHide.add(this.containers);} this.showErrors();$(element).attr("aria-invalid",!rs);} return result;},showErrors:function(errors){if(errors){var validator=this;$.extend(this.errorMap,errors);this.errorList=$.map(this.errorMap,function(message,name){return{message:message,element:validator.findByName(name)[0]};});this.successList=$.grep(this.successList,function(element){return!(element.name in errors);});} if(this.settings.showErrors){this.settings.showErrors.call(this,this.errorMap,this.errorList);}else{this.defaultShowErrors();}},resetForm:function(){if($.fn.resetForm){$(this.currentForm).resetForm();} this.invalid={};this.submitted={};this.prepareForm();this.hideErrors();var elements=this.elements().removeData("previousValue").removeAttr("aria-invalid");this.resetElements(elements);},resetElements:function(elements){var i;if(this.settings.unhighlight){for(i=0;elements[i];i++){this.settings.unhighlight.call(this,elements[i],this.settings.errorClass,"");this.findByName(elements[i].name).removeClass(this.settings.validClass);}}else{elements.removeClass(this.settings.errorClass).removeClass(this.settings.validClass);}},numberOfInvalids:function(){return this.objectLength(this.invalid);},objectLength:function(obj){var count=0,i;for(i in obj){if(obj[i]!==undefined&&obj[i]!==null&&obj[i]!==false){count++;}} return count;},hideErrors:function(){this.hideThese(this.toHide);},hideThese:function(errors){errors.not(this.containers).text("");this.addWrapper(errors).hide();},valid:function(){return this.size()===0;},size:function(){return this.errorList.length;},focusInvalid:function(){if(this.settings.focusInvalid){try{$(this.findLastActive()||this.errorList.length&&this.errorList[0].element||[]).filter(":visible").focus().trigger("focusin");}catch(e){}}},findLastActive:function(){var lastActive=this.lastActive;return lastActive&&$.grep(this.errorList,function(n){return n.element.name===lastActive.name;}).length===1&&lastActive;},elements:function(){var validator=this,rulesCache={};return $(this.currentForm).find("input, select, textarea, [contenteditable]").not(":submit, :reset, :image, :disabled").not(this.settings.ignore).filter(function(){var name=this.name||$(this).attr("name");if(!name&&validator.settings.debug&&window.console){console.error("%o has no name assigned",this);} if(this.hasAttribute("contenteditable")){this.form=$(this).closest("form")[0];this.name=name;} if(name in rulesCache||!validator.objectLength($(this).rules())){return false;} rulesCache[name]=true;return true;});},clean:function(selector){return $(selector)[0];},errors:function(){var errorClass=this.settings.errorClass.split(" ").join(".");return $(this.settings.errorElement+"."+errorClass,this.errorContext);},resetInternals:function(){this.successList=[];this.errorList=[];this.errorMap={};this.toShow=$([]);this.toHide=$([]);},reset:function(){this.resetInternals();this.currentElements=$([]);},prepareForm:function(){this.reset();this.toHide=this.errors().add(this.containers);},prepareElement:function(element){this.reset();this.toHide=this.errorsFor(element);},elementValue:function(element){var $element=$(element),type=element.type,val,idx;if(type==="radio"||type==="checkbox"){return this.findByName(element.name).filter(":checked").val();}else if(type==="number"&&typeof element.validity!=="undefined"){return element.validity.badInput?"NaN":$element.val();} if(element.hasAttribute("contenteditable")){val=$element.text();}else{val=$element.val();} if(type==="file"){if(val.substr(0,12)==="C:\\fakepath\\"){return val.substr(12);} idx=val.lastIndexOf("/");if(idx>=0){return val.substr(idx+1);} idx=val.lastIndexOf("\\");if(idx>=0){return val.substr(idx+1);} return val;} if(typeof val==="string"){return val.replace(/\r/g,"");} return val;},check:function(element){element=this.validationTargetFor(this.clean(element));var rules=$(element).rules(),rulesCount=$.map(rules,function(n,i){return i;}).length,dependencyMismatch=false,val=this.elementValue(element),result,method,rule,normalizer;if(typeof rules.normalizer==="function"){normalizer=rules.normalizer;}else if(typeof this.settings.normalizer==="function"){normalizer=this.settings.normalizer;} if(normalizer){val=normalizer.call(element,val);if(typeof val!=="string"){throw new TypeError("The normalizer should return a string value.");} delete rules.normalizer;} for(method in rules){rule={method:method,parameters:rules[method]};try{result=$.validator.methods[method].call(this,val,element,rule.parameters);if(result==="dependency-mismatch"&&rulesCount===1){dependencyMismatch=true;continue;} dependencyMismatch=false;if(result==="pending"){this.toHide=this.toHide.not(this.errorsFor(element));return;} if(!result){this.formatAndAdd(element,rule);return false;}}catch(e){if(this.settings.debug&&window.console){console.log("Exception occurred when checking element "+element.id+", check the '"+rule.method+"' method.",e);} if(e instanceof TypeError){e.message+=". Exception occurred when checking element "+element.id+", check the '"+rule.method+"' method.";} throw e;}} if(dependencyMismatch){return;} if(this.objectLength(rules)){this.successList.push(element);} return true;},customDataMessage:function(element,method){return $(element).data("msg"+method.charAt(0).toUpperCase()+ method.substring(1).toLowerCase())||$(element).data("msg");},customMessage:function(name,method){var m=this.settings.messages[name];return m&&(m.constructor===String?m:m[method]);},findDefined:function(){for(var i=0;i<arguments.length;i++){if(arguments[i]!==undefined){return arguments[i];}} return undefined;},defaultMessage:function(element,rule){if(typeof rule==="string"){rule={method:rule};} var message=this.findDefined(this.customMessage(element.name,rule.method),this.customDataMessage(element,rule.method),!this.settings.ignoreTitle&&element.title||undefined,this.messages&&this.messages[rule.method]||undefined,$.validator.messages[rule.method],"<strong>Warning: No message defined for "+element.name+"</strong>"),theregex=/\$?\{(\d+)\}/g;if(typeof message==="function"){message=message.call(this,rule.parameters,element);}else if(theregex.test(message)){message=$.validator.format(message.replace(theregex,"{$1}"),rule.parameters);} return message;},formatAndAdd:function(element,rule){var message=this.defaultMessage(element,rule);this.errorList.push({message:message,element:element,method:rule.method});this.errorMap[element.name]=message;this.submitted[element.name]=message;},addWrapper:function(toToggle){if(this.settings.wrapper){toToggle=toToggle.add(toToggle.parent(this.settings.wrapper));} return toToggle;},defaultShowErrors:function(){var i,elements,error;for(i=0;this.errorList[i];i++){error=this.errorList[i];if(this.settings.highlight){this.settings.highlight.call(this,error.element,this.settings.errorClass,this.settings.validClass);} this.showLabel(error.element,error.message);} if(this.errorList.length){this.toShow=this.toShow.add(this.containers);} if(this.settings.success){for(i=0;this.successList[i];i++){this.showLabel(this.successList[i]);}} if(this.settings.unhighlight){for(i=0,elements=this.validElements();elements[i];i++){this.settings.unhighlight.call(this,elements[i],this.settings.errorClass,this.settings.validClass);}} this.toHide=this.toHide.not(this.toShow);this.hideErrors();this.addWrapper(this.toShow).show();},validElements:function(){return this.currentElements.not(this.invalidElements());},invalidElements:function(){return $(this.errorList).map(function(){return this.element;});},showLabel:function(element,message){var place,group,errorID,v,error=this.errorsFor(element),elementID=this.idOrName(element),describedBy=$(element).attr("aria-describedby");if(error.length){error.removeClass(this.settings.validClass).addClass(this.settings.errorClass);error.html(message);}else{error=$("<"+this.settings.errorElement+">").attr("id",elementID+"-error").addClass(this.settings.errorClass).html(message||"");place=error;if(this.settings.wrapper){place=error.hide().show().wrap("<"+this.settings.wrapper+"/>").parent();} if(this.labelContainer.length){this.labelContainer.append(place);}else if(this.settings.errorPlacement){this.settings.errorPlacement.call(this,place,$(element));}else{place.insertAfter(element);} if(error.is("label")){error.attr("for",elementID);}else if(error.parents("label[for='"+this.escapeCssMeta(elementID)+"']").length===0){errorID=error.attr("id");if(!describedBy){describedBy=errorID;}else if(!describedBy.match(new RegExp("\\b"+this.escapeCssMeta(errorID)+"\\b"))){describedBy+=" "+errorID;} $(element).attr("aria-describedby",describedBy);group=this.groups[element.name];if(group){v=this;$.each(v.groups,function(name,testgroup){if(testgroup===group){$("[name='"+v.escapeCssMeta(name)+"']",v.currentForm).attr("aria-describedby",error.attr("id"));}});}}} if(!message&&this.settings.success){error.text("");if(typeof this.settings.success==="string"){error.addClass(this.settings.success);}else{this.settings.success(error,element);}} this.toShow=this.toShow.add(error);},errorsFor:function(element){var name=this.escapeCssMeta(this.idOrName(element)),describer=$(element).attr("aria-describedby"),selector="label[for='"+name+"'], label[for='"+name+"'] *";if(describer){selector=selector+", #"+this.escapeCssMeta(describer).replace(/\s+/g,", #");} return this.errors().filter(selector);},escapeCssMeta:function(string){return string.replace(/([\\!"#$%&'()*+,./:;<=>?@\[\]^`{|}~])/g,"\\$1");},idOrName:function(element){return this.groups[element.name]||(this.checkable(element)?element.name:element.id||element.name);},validationTargetFor:function(element){if(this.checkable(element)){element=this.findByName(element.name);} return $(element).not(this.settings.ignore)[0];},checkable:function(element){return(/radio|checkbox/i).test(element.type);},findByName:function(name){return $(this.currentForm).find("[name='"+this.escapeCssMeta(name)+"']");},getLength:function(value,element){switch(element.nodeName.toLowerCase()){case"select":return $("option:selected",element).length;case"input":if(this.checkable(element)){return this.findByName(element.name).filter(":checked").length;}} return value.length;},depend:function(param,element){return this.dependTypes[typeof param]?this.dependTypes[typeof param](param,element):true;},dependTypes:{"boolean":function(param){return param;},"string":function(param,element){return!!$(param,element.form).length;},"function":function(param,element){return param(element);}},optional:function(element){var val=this.elementValue(element);return!$.validator.methods.required.call(this,val,element)&&"dependency-mismatch";},startRequest:function(element){if(!this.pending[element.name]){this.pendingRequest++;$(element).addClass(this.settings.pendingClass);this.pending[element.name]=true;}},stopRequest:function(element,valid){this.pendingRequest--;if(this.pendingRequest<0){this.pendingRequest=0;} delete this.pending[element.name];$(element).removeClass(this.settings.pendingClass);if(valid&&this.pendingRequest===0&&this.formSubmitted&&this.form()){$(this.currentForm).submit();if(this.submitButton){$("input:hidden[name='"+this.submitButton.name+"']",this.currentForm).remove();} this.formSubmitted=false;}else if(!valid&&this.pendingRequest===0&&this.formSubmitted){$(this.currentForm).triggerHandler("invalid-form",[this]);this.formSubmitted=false;}},previousValue:function(element,method){method=typeof method==="string"&&method||"remote";return $.data(element,"previousValue")||$.data(element,"previousValue",{old:null,valid:true,message:this.defaultMessage(element,{method:method})});},destroy:function(){this.resetForm();$(this.currentForm).off(".validate").removeData("validator").find(".validate-equalTo-blur").off(".validate-equalTo").removeClass("validate-equalTo-blur");}},classRuleSettings:{required:{required:true},email:{email:true},url:{url:true},date:{date:true},dateISO:{dateISO:true},number:{number:true},digits:{digits:true},creditcard:{creditcard:true}},addClassRules:function(className,rules){if(className.constructor===String){this.classRuleSettings[className]=rules;}else{$.extend(this.classRuleSettings,className);}},classRules:function(element){var rules={},classes=$(element).attr("class");if(classes){$.each(classes.split(" "),function(){if(this in $.validator.classRuleSettings){$.extend(rules,$.validator.classRuleSettings[this]);}});} return rules;},normalizeAttributeRule:function(rules,type,method,value){if(/min|max|step/.test(method)&&(type===null||/number|range|text/.test(type))){if(!/^\s*#x2F;.test(value))value=Number(value);if(isNaN(value)){value=undefined;}} if(value||value===0){rules[method]=value;}else if(type===method&&type!=="range"){rules[method]=true;}},attributeRules:function(element){var rules={},$element=$(element),type=element.getAttribute("type"),method,value;for(method in $.validator.methods){if(method==="required"){value=element.getAttribute(method);if(value===""){value=true;} value=!!value;}else{value=$element.attr(method);} this.normalizeAttributeRule(rules,type,method,value);} if(rules.maxlength&&/-1|2147483647|524288/.test(rules.maxlength)){delete rules.maxlength;} return rules;},dataRules:function(element){var rules={},$element=$(element),type=element.getAttribute("type"),method,value;for(method in $.validator.methods){value=$element.data("rule"+method.charAt(0).toUpperCase()+method.substring(1).toLowerCase());this.normalizeAttributeRule(rules,type,method,value);} return rules;},staticRules:function(element){var rules={},validator=$.data(element.form,"validator");if(validator.settings.rules){rules=$.validator.normalizeRule(validator.settings.rules[element.name])||{};} return rules;},normalizeRules:function(rules,element){$.each(rules,function(prop,val){if(val===false){delete rules[prop];return;} if(val.param||val.depends){var keepRule=true;switch(typeof val.depends){case"string":keepRule=!!$(val.depends,element.form).length;break;case"function":keepRule=val.depends.call(element,element);break;} if(keepRule){rules[prop]=val.param!==undefined?val.param:true;}else{$.data(element.form,"validator").resetElements($(element));delete rules[prop];}}});$.each(rules,function(rule,parameter){rules[rule]=$.isFunction(parameter)&&rule!=="normalizer"?parameter(element):parameter;});$.each(["minlength","maxlength"],function(){if(rules[this]){rules[this]=Number(rules[this]);}});$.each(["rangelength","range"],function(){var parts;if(rules[this]){if($.isArray(rules[this])){rules[this]=[Number(rules[this][0]),Number(rules[this][1])];}else if(typeof rules[this]==="string"){parts=rules[this].replace(/[\[\]]/g,"").split(/[\s,]+/);rules[this]=[Number(parts[0]),Number(parts[1])];}}});if($.validator.autoCreateRanges){if(rules.min!=null&&rules.max!=null){rules.range=[rules.min,rules.max];delete rules.min;delete rules.max;} if(rules.minlength!=null&&rules.maxlength!=null){rules.rangelength=[rules.minlength,rules.maxlength];delete rules.minlength;delete rules.maxlength;}} return rules;},normalizeRule:function(data){if(typeof data==="string"){var transformed={};$.each(data.split(/\s/),function(){transformed[this]=true;});data=transformed;} return data;},addMethod:function(name,method,message){$.validator.methods[name]=method;$.validator.messages[name]=message!==undefined?message:$.validator.messages[name];if(method.length<3){$.validator.addClassRules(name,$.validator.normalizeRule(name));}},methods:{required:function(value,element,param){if(!this.depend(param,element)){return"dependency-mismatch";} if(element.nodeName.toLowerCase()==="select"){var val=$(element).val();return val&&val.length>0;} if(this.checkable(element)){return this.getLength(value,element)>0;} return value.length>0;},email:function(value,element){return this.optional(element)||/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*#x2F;.test(value);},url:function(value,element){return this.optional(element)||/^(?:(?:(?:https?|ftp):)?\/\/)(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})).?)(?::\d{2,5})?(?:[/?#]\S*)?#x2F;i.test(value);},date:function(value,element){return this.optional(element)||!/Invalid|NaN/.test(new Date(value).toString());},dateISO:function(value,element){return this.optional(element)||/^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])#x2F;.test(value);},number:function(value,element){return this.optional(element)||/^(?:-?\d+|-?\d{1,3}(?:,\d{3})+)?(?:\.\d+)?#x2F;.test(value);},digits:function(value,element){return this.optional(element)||/^\d+#x2F;.test(value);},minlength:function(value,element,param){var length=$.isArray(value)?value.length:this.getLength(value,element);return this.optional(element)||length>=param;},maxlength:function(value,element,param){var length=$.isArray(value)?value.length:this.getLength(value,element);return this.optional(element)||length<=param;},rangelength:function(value,element,param){var length=$.isArray(value)?value.length:this.getLength(value,element);return this.optional(element)||(length>=param[0]&&length<=param[1]);},min:function(value,element,param){return this.optional(element)||value>=param;},max:function(value,element,param){return this.optional(element)||value<=param;},range:function(value,element,param){return this.optional(element)||(value>=param[0]&&value<=param[1]);},step:function(value,element,param){var type=$(element).attr("type"),errorMessage="Step attribute on input type "+type+" is not supported.",supportedTypes=["text","number","range"],re=new RegExp("\\b"+type+"\\b"),notSupported=type&&!re.test(supportedTypes.join()),decimalPlaces=function(num){var match=(""+num).match(/(?:\.(\d+))?#x2F;);if(!match){return 0;} return match[1]?match[1].length:0;},toInt=function(num){return Math.round(num*Math.pow(10,decimals));},valid=true,decimals;if(notSupported){throw new Error(errorMessage);} decimals=decimalPlaces(param);if(decimalPlaces(value)>decimals||toInt(value)%toInt(param)!==0){valid=false;} return this.optional(element)||valid;},equalTo:function(value,element,param){var target=$(param);if(this.settings.onfocusout&&target.not(".validate-equalTo-blur").length){target.addClass("validate-equalTo-blur").on("blur.validate-equalTo",function(){$(element).valid();});} return value===target.val();},remote:function(value,element,param,method){if(this.optional(element)){return"dependency-mismatch";} method=typeof method==="string"&&method||"remote";var previous=this.previousValue(element,method),validator,data,optionDataString;if(!this.settings.messages[element.name]){this.settings.messages[element.name]={};} previous.originalMessage=previous.originalMessage||this.settings.messages[element.name][method];this.settings.messages[element.name][method]=previous.message;param=typeof param==="string"&&{url:param}||param;optionDataString=$.param($.extend({data:value},param.data));if(previous.old===optionDataString){return previous.valid;} previous.old=optionDataString;validator=this;this.startRequest(element);data={};data[element.name]=value;$.ajax($.extend(true,{mode:"abort",port:"validate"+element.name,dataType:"json",data:data,context:validator.currentForm,success:function(response){var valid=response===true||response==="true",errors,message,submitted;validator.settings.messages[element.name][method]=previous.originalMessage;if(valid){submitted=validator.formSubmitted;validator.resetInternals();validator.toHide=validator.errorsFor(element);validator.formSubmitted=submitted;validator.successList.push(element);validator.invalid[element.name]=false;validator.showErrors();}else{errors={};message=response||validator.defaultMessage(element,{method:method,parameters:value});errors[element.name]=previous.message=message;validator.invalid[element.name]=true;validator.showErrors(errors);} previous.valid=valid;validator.stopRequest(element,valid);}},param));return"pending";}}});var pendingRequests={},ajax;if($.ajaxPrefilter){$.ajaxPrefilter(function(settings,_,xhr){var port=settings.port;if(settings.mode==="abort"){if(pendingRequests[port]){pendingRequests[port].abort();} pendingRequests[port]=xhr;}});}else{ajax=$.ajax;$.ajax=function(settings){var mode=("mode"in settings?settings:$.ajaxSettings).mode,port=("port"in settings?settings:$.ajaxSettings).port;if(mode==="abort"){if(pendingRequests[port]){pendingRequests[port].abort();} pendingRequests[port]=ajax.apply(this,arguments);return pendingRequests[port];} return ajax.apply(this,arguments);};} return $;}));
js/modules/01_mathematical_logical/admin/module_admin.js CHANGED
@@ -44,6 +44,12 @@ fbuilderjQuery[ 'fbuilder' ][ 'modules' ][ 'default' ] = {
44
'logical' : {
45
'label' : "Logical Operators",
46
'buttons' : [
47
{ "value" : "IF", "code" : "IF(", "tip" : "Checks whether a condition is met, and returns one value if true, and another if false. <strong>IF(logical_test, value_if_true, value_if_false)</strong>" },
48
{ "value" : "AND", "code" : "AND(", "tip" : "Checks whether all arguments are true, and return true if all values are true. <strong>AND(logical1,logical2,...)</strong>" },
49
{ "value" : "OR", "code" : "OR(", "tip" : "Checks whether any of arguments are true. Returns false only if all arguments are false. <strong>OR(logical1,logical2,...)</strong>" },
44
'logical' : {
45
'label' : "Logical Operators",
46
'buttons' : [
47
+ { "value" : "==", "code" : "==", "tip" : "Equality operator. <strong>fieldname1 == fieldname2</strong>" },
48
+ { "value" : "!=", "code" : "!=", "tip" : "Not equal operator. <strong>fieldname1 != fieldname2</strong>" },
49
+ { "value" : "<", "code" : "<", "tip" : "Less than operator. <strong>fieldname1 &lt; fieldname2</strong>" },
50
+ { "value" : "<=", "code" : "<=", "tip" : "Less than or equal to operator. <strong>fieldname1 &lt;= fieldname2</strong>" },
51
+ { "value" : ">", "code" : ">", "tip" : "Greater than operator. <strong>fieldname1 &gt; fieldname2</strong>" },
52
+ { "value" : ">=", "code" : ">=", "tip" : "Greater than or equal to operator. <strong>fieldname1 &gt;= fieldname2</strong>" },
53
{ "value" : "IF", "code" : "IF(", "tip" : "Checks whether a condition is met, and returns one value if true, and another if false. <strong>IF(logical_test, value_if_true, value_if_false)</strong>" },
54
{ "value" : "AND", "code" : "AND(", "tip" : "Checks whether all arguments are true, and return true if all values are true. <strong>AND(logical1,logical2,...)</strong>" },
55
{ "value" : "OR", "code" : "OR(", "tip" : "Checks whether any of arguments are true. Returns false only if all arguments are false. <strong>OR(logical1,logical2,...)</strong>" },
pagebuilders/divi/cff.pb.php ADDED
@@ -0,0 +1,78 @@
1
+ <?php
2
+ class CFF_DIVI extends ET_Builder_Module
3
+ {
4
+
5
+ public $slug = 'et_pb_cff_divi_module';
6
+ public $vb_support = 'partial';
7
+
8
+ public function init()
9
+ {
10
+ $this->name = esc_html__('Calculated Fields Form', 'calculated-fields-form');
11
+ $this->settings_modal_toggles = array(
12
+ 'general' => array(
13
+ 'toggles' => array(
14
+ 'main_content' => esc_html__( 'Form', 'calculated-fields-form' ),
15
+ ),
16
+ ),
17
+ );
18
+ }
19
+
20
+ public function get_fields()
21
+ {
22
+ global $wpdb;
23
+ $options = array();
24
+ $default = '';
25
+
26
+ $rows = $wpdb->get_results( "SELECT id, form_name FROM ".$wpdb->prefix.CP_CALCULATEDFIELDSF_FORMS_TABLE );
27
+ foreach ($rows as $item)
28
+ {
29
+ $options[$item->id] = $item->form_name;
30
+ if(empty($default)) $default = $item->id;
31
+ }
32
+
33
+ return array(
34
+ 'form_id' => array(
35
+ 'label' => esc_html__( 'Select form', 'calculated-fields-form' ),
36
+ 'type' => 'select',
37
+ 'options' => $options,
38
+ 'default' => $default,
39
+ 'option_category' => 'basic_option',
40
+ 'description' => esc_html__( 'Select the form.', 'calculated-fields-form' ),
41
+ 'toggle_slug' => 'main_content',
42
+ ),
43
+ 'class_name' => array(
44
+ 'label' => esc_html__( 'Class name', 'calculated-fields-form' ),
45
+ 'type' => 'text',
46
+ 'option_category' => 'basic_option',
47
+ 'toggle_slug' => 'main_content',
48
+ ),
49
+ 'attributes' => array(
50
+ 'label' => esc_html__( 'Additional attributes', 'calculated-fields-form' ),
51
+ 'type' => 'text',
52
+ 'option_category' => 'basic_option',
53
+ 'description' => 'attr1="value attr1" attr1="value attr1"',
54
+ 'toggle_slug' => 'main_content',
55
+ ),
56
+ );
57
+ }
58
+
59
+ public function render($unprocessed_props, $content = null, $render_slug)
60
+ {
61
+ $output = '';
62
+ $form = @intval($this->props['form_id']);
63
+ if(!empty($form))
64
+ {
65
+ $output = '[CP_CALCULATED_FIELDS id="'.$form.'"';
66
+ $class_name = sanitize_text_field($this->props['class_name']);
67
+ if(!empty($class_name)) $output .= ' class="'.esc_attr($class_name).'"';
68
+
69
+ $attributes = sanitize_text_field($this->props['attributes']);
70
+ if(!empty($attributes)) $output .= ' '.$attributes;
71
+
72
+ $output .= ']';
73
+ }
74
+ return do_shortcode($output);
75
+ }
76
+ }
77
+
78
+ new CFF_DIVI;
pagebuilders/visualcomposer/CFFForm/public/dist/element.bundle.js CHANGED
@@ -8,7 +8,7 @@
8
/***/ (function(module, exports, __webpack_require__) {
9
10
"use strict";
11
- eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ \"./node_modules/babel-runtime/helpers/extends.js\");\n\nvar _extends3 = _interopRequireDefault(_extends2);\n\nvar _getPrototypeOf = __webpack_require__(/*! babel-runtime/core-js/object/get-prototype-of */ \"./node_modules/babel-runtime/core-js/object/get-prototype-of.js\");\n\nvar _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);\n\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ \"./node_modules/babel-runtime/helpers/classCallCheck.js\");\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = __webpack_require__(/*! babel-runtime/helpers/createClass */ \"./node_modules/babel-runtime/helpers/createClass.js\");\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ \"./node_modules/babel-runtime/helpers/possibleConstructorReturn.js\");\n\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\n\nvar _get2 = __webpack_require__(/*! babel-runtime/helpers/get */ \"./node_modules/babel-runtime/helpers/get.js\");\n\nvar _get3 = _interopRequireDefault(_get2);\n\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ \"./node_modules/babel-runtime/helpers/inherits.js\");\n\nvar _inherits3 = _interopRequireDefault(_inherits2);\n\nvar _react = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _vcCake = __webpack_require__(/*! vc-cake */ \"./node_modules/vc-cake/index.js\");\n\nvar _vcCake2 = _interopRequireDefault(_vcCake);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar vcvAPI = _vcCake2.default.getService('api');\n\nvar CFFFormElement = function (_vcvAPI$elementCompon) {\n\t(0, _inherits3.default)(CFFFormElement, _vcvAPI$elementCompon);\n\n\tfunction CFFFormElement() {\n\t\t(0, _classCallCheck3.default)(this, CFFFormElement);\n\t\treturn (0, _possibleConstructorReturn3.default)(this, (CFFFormElement.__proto__ || (0, _getPrototypeOf2.default)(CFFFormElement)).apply(this, arguments));\n\t}\n\n\t(0, _createClass3.default)(CFFFormElement, [{\n\t\tkey: 'sanitize',\n\t\tvalue: function sanitize(str, args) {\n\t\t\tif (typeof args == 'undefined') args = {};\n\t\t\tif (!('quotes' in args)) args['quotes'] = false;\n\t\t\tif (!('spaces' in args)) args['spaces'] = false;\n\n\t\t\tstr = str.replace(/[^a-zA-Z0-9\\.\\-_\\s\"']/g, '');\n\t\t\tif (!args.quotes) str = str.replace(/'\"/g, '');\n\t\t\tif (!args.spaces) str = str.replace(/\\s/g, '');\n\n\t\t\treturn str;\n\t\t}\n\t}, {\n\t\tkey: 'getTheShortcode',\n\t\tvalue: function getTheShortcode(atts) {\n\t\t\t// Generates the form's shortcode\n\t\t\tvar _atts$fId = atts.fId,\n\t\t\t fId = _atts$fId === undefined ? \"\" : _atts$fId,\n\t\t\t _atts$clssName = atts.clssName,\n\t\t\t clssName = _atts$clssName === undefined ? \"\" : _atts$clssName,\n\t\t\t _atts$attrs = atts.attrs,\n\t\t\t attrs = _atts$attrs === undefined ? \"\" : _atts$attrs;\n\n\t\t\tif (fId == '') return '';\n\t\t\tvar shortcode = '[CP_CALCULATED_FIELDS id=\"' + this.sanitize(fId) + '\"';\n\t\t\tif (clssName != '') shortcode += ' class=\"' + this.sanitize(clssName, { spaces: true }) + '\"';\n\t\t\tif (attrs != '') shortcode += ' ' + this.sanitize(attrs, { quotes: true, spaces: true });\n\t\t\tshortcode += ']';\n\n\t\t\treturn shortcode;\n\t\t}\n\t}, {\n\t\tkey: 'addFormGeneratorForVSEditor',\n\t\tvalue: function addFormGeneratorForVSEditor(base) {\n\t\t\treturn base != '' ? base + '<script>delete fbuilderjQuery.fbuilderGeneratorFlag; if(\"fbuilderjQuery\" in window && \"fbuilderjQueryGenerator\" in fbuilderjQuery) fbuilderjQuery.fbuilderjQueryGenerator();</script>' : base;\n\t\t}\n\t}, {\n\t\tkey: 'componentDidMount',\n\t\tvalue: function componentDidMount() {\n\n\t\t\tvar shortcode = this.addFormGeneratorForVSEditor(this.getTheShortcode(this.props.atts));\n\t\t\t(0, _get3.default)(CFFFormElement.prototype.__proto__ || (0, _getPrototypeOf2.default)(CFFFormElement.prototype), 'updateShortcodeToHtml', this).call(this, shortcode, this.refs.vcvhelper);\n\t\t\tif (!window.wp || !window.wp.shortcode || !window.VCV_API_WPBAKERY_WPB_MAP) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.multipleShortcodesRegex = window.wp.shortcode.regexp(window.VCV_API_WPBAKERY_WPB_MAP().join('|'));\n\t\t\tthis.localShortcodesRegex = new RegExp(this.multipleShortcodesRegex.source);\n\t\t}\n\t}, {\n\t\tkey: 'componentDidUpdate',\n\t\tvalue: function componentDidUpdate(props) {\n\n\t\t\tvar shortcode = this.addFormGeneratorForVSEditor(this.getTheShortcode(this.props.atts));\n\t\t\tvar shortcodeCmp = this.getTheShortcode(props.atts);\n\t\t\t// update only if shortcode changed\n\t\t\tif (shortcode !== shortcodeCmp) {\n\t\t\t\t(0, _get3.default)(CFFFormElement.prototype.__proto__ || (0, _getPrototypeOf2.default)(CFFFormElement.prototype), 'updateShortcodeToHtml', this).call(this, shortcode, this.refs.vcvhelper);\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'render',\n\t\tvalue: function render() {\n\t\t\tvar _props = this.props,\n\t\t\t id = _props.id,\n\t\t\t atts = _props.atts,\n\t\t\t editor = _props.editor;\n\n\n\t\t\tvar shortcode = this.getTheShortcode(atts);\n\t\t\tvar elementClasses = 'vce-cff-form';\n\t\t\tvar wrapperClasses = 'vce-cff-form-wrapper vce';\n\t\t\tvar customProps = {};\n\n\t\t\tvar doAll = this.applyDO('all');\n\n\t\t\treturn _react2.default.createElement(\n\t\t\t\t'div',\n\t\t\t\t(0, _extends3.default)({ className: elementClasses }, editor, customProps),\n\t\t\t\t_react2.default.createElement(\n\t\t\t\t\t'div',\n\t\t\t\t\t(0, _extends3.default)({ className: wrapperClasses, id: 'el-' + id }, doAll),\n\t\t\t\t\t_react2.default.createElement('style', { className: 'vcvhelper', ref: 'style' }),\n\t\t\t\t\t_react2.default.createElement('div', { className: 'vcvhelper', ref: 'vcvhelper', 'data-vcvs-html': shortcode })\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t}]);\n\treturn CFFFormElement;\n}(vcvAPI.elementComponent);\n\nexports.default = CFFFormElement;\n\n//# sourceURL=webpack:///./CFFForm/component.js?");
12
13
/***/ }),
14
8
/***/ (function(module, exports, __webpack_require__) {
9
10
"use strict";
11
+ eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ \"./node_modules/babel-runtime/helpers/extends.js\");\n\nvar _extends3 = _interopRequireDefault(_extends2);\n\nvar _getPrototypeOf = __webpack_require__(/*! babel-runtime/core-js/object/get-prototype-of */ \"./node_modules/babel-runtime/core-js/object/get-prototype-of.js\");\n\nvar _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);\n\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ \"./node_modules/babel-runtime/helpers/classCallCheck.js\");\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = __webpack_require__(/*! babel-runtime/helpers/createClass */ \"./node_modules/babel-runtime/helpers/createClass.js\");\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ \"./node_modules/babel-runtime/helpers/possibleConstructorReturn.js\");\n\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\n\nvar _get2 = __webpack_require__(/*! babel-runtime/helpers/get */ \"./node_modules/babel-runtime/helpers/get.js\");\n\nvar _get3 = _interopRequireDefault(_get2);\n\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ \"./node_modules/babel-runtime/helpers/inherits.js\");\n\nvar _inherits3 = _interopRequireDefault(_inherits2);\n\nvar _react = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _vcCake = __webpack_require__(/*! vc-cake */ \"./node_modules/vc-cake/index.js\");\n\nvar _vcCake2 = _interopRequireDefault(_vcCake);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar vcvAPI = _vcCake2.default.getService('api');\n\nvar CFFFormElement = function (_vcvAPI$elementCompon) {\n\t(0, _inherits3.default)(CFFFormElement, _vcvAPI$elementCompon);\n\n\tfunction CFFFormElement() {\n\t\t(0, _classCallCheck3.default)(this, CFFFormElement);\n\t\treturn (0, _possibleConstructorReturn3.default)(this, (CFFFormElement.__proto__ || (0, _getPrototypeOf2.default)(CFFFormElement)).apply(this, arguments));\n\t}\n\n\t(0, _createClass3.default)(CFFFormElement, [{\n\t\tkey: 'sanitize',\n\t\tvalue: function sanitize(str, args) {\n\t\t\tif (typeof args == 'undefined') args = {};\n\t\t\tif (!('quotes' in args)) args['quotes'] = false;\n\t\t\tif (!('spaces' in args)) args['spaces'] = false;\n\n\t\t\tstr = str.replace(/[^a-zA-Z0-9\\.\\-_\\s\"'=]/g, '');\n\t\t\tif (!args.quotes) str = str.replace(/'\"/g, '');\n\t\t\tif (!args.spaces) str = str.replace(/\\s/g, '');\n\n\t\t\treturn str;\n\t\t}\n\t}, {\n\t\tkey: 'getTheShortcode',\n\t\tvalue: function getTheShortcode(atts) {\n\t\t\t// Generates the form's shortcode\n\t\t\tvar _atts$fId = atts.fId,\n\t\t\t fId = _atts$fId === undefined ? \"\" : _atts$fId,\n\t\t\t _atts$clssName = atts.clssName,\n\t\t\t clssName = _atts$clssName === undefined ? \"\" : _atts$clssName,\n\t\t\t _atts$attrs = atts.attrs,\n\t\t\t attrs = _atts$attrs === undefined ? \"\" : _atts$attrs;\n\n\t\t\tif (fId == '') return '';\n\t\t\tvar shortcode = '[CP_CALCULATED_FIELDS id=\"' + this.sanitize(fId) + '\"';\n\t\t\tif (clssName != '') shortcode += ' class=\"' + this.sanitize(clssName, { spaces: true }) + '\"';\n\t\t\tif (attrs != '') shortcode += ' ' + this.sanitize(attrs, { quotes: true, spaces: true });\n\t\t\tshortcode += ']';\n\n\t\t\treturn shortcode;\n\t\t}\n\t}, {\n\t\tkey: 'addFormGeneratorForVSEditor',\n\t\tvalue: function addFormGeneratorForVSEditor(base) {\n\t\t\treturn base != '' ? base + '<script>delete fbuilderjQuery.fbuilderGeneratorFlag; if(\"fbuilderjQuery\" in window && \"fbuilderjQueryGenerator\" in fbuilderjQuery) fbuilderjQuery.fbuilderjQueryGenerator();</script>' : base;\n\t\t}\n\t}, {\n\t\tkey: 'componentDidMount',\n\t\tvalue: function componentDidMount() {\n\n\t\t\tvar shortcode = this.addFormGeneratorForVSEditor(this.getTheShortcode(this.props.atts));\n\t\t\t(0, _get3.default)(CFFFormElement.prototype.__proto__ || (0, _getPrototypeOf2.default)(CFFFormElement.prototype), 'updateShortcodeToHtml', this).call(this, shortcode, this.refs.vcvhelper);\n\t\t\tif (!window.wp || !window.wp.shortcode || !window.VCV_API_WPBAKERY_WPB_MAP) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.multipleShortcodesRegex = window.wp.shortcode.regexp(window.VCV_API_WPBAKERY_WPB_MAP().join('|'));\n\t\t\tthis.localShortcodesRegex = new RegExp(this.multipleShortcodesRegex.source);\n\t\t}\n\t}, {\n\t\tkey: 'componentDidUpdate',\n\t\tvalue: function componentDidUpdate(props) {\n\n\t\t\tvar shortcode = this.addFormGeneratorForVSEditor(this.getTheShortcode(this.props.atts));\n\t\t\tvar shortcodeCmp = this.getTheShortcode(props.atts);\n\t\t\t// update only if shortcode changed\n\t\t\tif (shortcode !== shortcodeCmp) {\n\t\t\t\t(0, _get3.default)(CFFFormElement.prototype.__proto__ || (0, _getPrototypeOf2.default)(CFFFormElement.prototype), 'updateShortcodeToHtml', this).call(this, shortcode, this.refs.vcvhelper);\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'render',\n\t\tvalue: function render() {\n\t\t\tvar _props = this.props,\n\t\t\t id = _props.id,\n\t\t\t atts = _props.atts,\n\t\t\t editor = _props.editor;\n\n\n\t\t\tvar shortcode = this.getTheShortcode(atts);\n\t\t\tvar elementClasses = 'vce-cff-form';\n\t\t\tvar wrapperClasses = 'vce-cff-form-wrapper vce';\n\t\t\tvar customProps = {};\n\n\t\t\tvar doAll = this.applyDO('all');\n\n\t\t\treturn _react2.default.createElement(\n\t\t\t\t'div',\n\t\t\t\t(0, _extends3.default)({ className: elementClasses }, editor, customProps),\n\t\t\t\t_react2.default.createElement(\n\t\t\t\t\t'div',\n\t\t\t\t\t(0, _extends3.default)({ className: wrapperClasses, id: 'el-' + id }, doAll),\n\t\t\t\t\t_react2.default.createElement('style', { className: 'vcvhelper', ref: 'style' }),\n\t\t\t\t\t_react2.default.createElement('div', { className: 'vcvhelper', ref: 'vcvhelper', 'data-vcvs-html': shortcode })\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t}]);\n\treturn CFFFormElement;\n}(vcvAPI.elementComponent);\n\nexports.default = CFFFormElement;\n\n//# sourceURL=webpack:///./CFFForm/component.js?");
12
13
/***/ }),
14