Formidable Forms – Form Builder for WordPress - Version 5.0.06

Version Description

  • New: Added new frm_export_csv_headings filter to make it easier to add and remove exported CSV headings.
  • New: When clicking an inactive action that requires pro, the required pro license will be properly shown in the popup.
  • New: Added new frm_fields_to_validate, frm_submit_button_html, and frm_fields_for_csv_export filters.
  • Fix: Improved the accessibility of field group dropdowns and field group row layout pop ups.
  • Fix: The caret icon on the dropdown was not positioned properly for the Formidable Gutenberg block.
  • Fix: When clicking the Formidable media button in Elementor, the pop up was appearing as empty with no content.
  • Fix: Required radio, checkbox, and name fields were not including the aria-required="true" attribute or the aria-invalid attribute when JavaScript validation was enabled.
  • Fix: Required name fields were not showing error messages when JavaScript validation was enabled.
Download this release

Release Info

Developer formidableforms
Plugin Icon 128x128 Formidable Forms – Form Builder for WordPress
Version 5.0.06
Comparing to
See all releases

Code changes from version 5.0.05 to 5.0.06

classes/controllers/FrmElementorController.php ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if ( ! defined( 'ABSPATH' ) ) {
3
+ die( 'You are not allowed to call this page directly.' );
4
+ }
5
+
6
+ /**
7
+ * @since 5.0.06
8
+ */
9
+ class FrmElementorController {
10
+
11
+ public static function register_elementor_hooks() {
12
+ require_once FrmAppHelper::plugin_path() . '/classes/widgets/FrmElementorWidget.php';
13
+ \Elementor\Plugin::instance()->widgets_manager->register_widget_type( new \FrmElementorWidget() );
14
+
15
+ if ( is_admin() ) {
16
+ add_action(
17
+ 'elementor/editor/after_enqueue_styles',
18
+ function() {
19
+ wp_enqueue_style( 'font_icons', FrmAppHelper::plugin_url() . '/css/font_icons.css', array(), FrmAppHelper::plugin_version() );
20
+ }
21
+ );
22
+ }
23
+ }
24
+
25
+ public static function admin_init() {
26
+ FrmAppController::load_wp_admin_style();
27
+ FrmFormsController::insert_form_popup();
28
+ }
29
+ }
classes/controllers/FrmFieldsController.php CHANGED
@@ -764,7 +764,7 @@ class FrmFieldsController {
764
  }
765
 
766
  /**
767
- * If 'required' is added to a conditionall hidden field, the form won't
768
  * submit in many browsers. Check to make sure the javascript to conditionally
769
  * remove it is present if needed.
770
  *
@@ -773,7 +773,7 @@ class FrmFieldsController {
773
  * @param array $add_html
774
  */
775
  private static function maybe_add_html_required( $field, array &$add_html ) {
776
- if ( in_array( $field['type'], array( 'radio', 'checkbox', 'file', 'data', 'lookup' ) ) ) {
777
  return;
778
  }
779
 
764
  }
765
 
766
  /**
767
+ * If 'required' is added to a conditionally hidden field, the form won't
768
  * submit in many browsers. Check to make sure the javascript to conditionally
769
  * remove it is present if needed.
770
  *
773
  * @param array $add_html
774
  */
775
  private static function maybe_add_html_required( $field, array &$add_html ) {
776
+ if ( in_array( $field['type'], array( 'file', 'data', 'lookup' ), true ) ) {
777
  return;
778
  }
779
 
classes/controllers/FrmFormActionsController.php CHANGED
@@ -224,6 +224,11 @@ class FrmFormActionsController {
224
  if ( isset( $upgrading['url'] ) ) {
225
  $data['data-oneclick'] = json_encode( $upgrading );
226
  }
 
 
 
 
 
227
  }
228
 
229
  // HTML to include on the icon.
@@ -234,7 +239,30 @@ class FrmFormActionsController {
234
  );
235
  }
236
 
237
- include( FrmAppHelper::plugin_path() . '/classes/views/frm-form-actions/_action_icon.php' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
238
  }
239
 
240
  public static function get_form_actions( $action = 'all' ) {
224
  if ( isset( $upgrading['url'] ) ) {
225
  $data['data-oneclick'] = json_encode( $upgrading );
226
  }
227
+
228
+ $requires = self::action_requires( $upgrading );
229
+ if ( $requires ) {
230
+ $data['data-requires'] = $requires;
231
+ }
232
  }
233
 
234
  // HTML to include on the icon.
239
  );
240
  }
241
 
242
+ include FrmAppHelper::plugin_path() . '/classes/views/frm-form-actions/_action_icon.php';
243
+ }
244
+
245
+ /**
246
+ * @since 5.0.06
247
+ *
248
+ * @param array $upgrading
249
+ * @return string|false
250
+ */
251
+ private static function action_requires( $upgrading ) {
252
+ if ( ! isset( $upgrading['categories'] ) || ! is_array( $upgrading['categories'] ) ) {
253
+ return false;
254
+ }
255
+ $plans = array( 'Business', 'Elite', 'Basic' );
256
+ $plus_plans = array( 'Creator', 'Personal', 'Plus' );
257
+ foreach ( $upgrading['categories'] as $category ) {
258
+ if ( in_array( $category, $plans, true ) ) {
259
+ return $category;
260
+ }
261
+ if ( in_array( $category, $plus_plans, true ) ) {
262
+ return 'Plus';
263
+ }
264
+ }
265
+ return false;
266
  }
267
 
268
  public static function get_form_actions( $action = 'all' ) {
classes/controllers/FrmHooksController.php CHANGED
@@ -93,7 +93,8 @@ class FrmHooksController {
93
  */
94
  add_filter( 'frm_keep_name_value_array', '__return_true' );
95
 
96
- add_action( 'elementor/widgets/widgets_registered', 'FrmHooksController::register_elementor_hooks' );
 
97
  }
98
 
99
  public static function load_admin_hooks() {
@@ -131,6 +132,10 @@ class FrmHooksController {
131
 
132
  add_filter( 'set-screen-option', 'FrmFormsController::save_per_page', 10, 3 );
133
  add_action( 'admin_footer', 'FrmFormsController::insert_form_popup' );
 
 
 
 
134
  add_action( 'media_buttons', 'FrmFormsController::insert_form_button' );
135
  add_action( 'et_pb_admin_excluded_shortcodes', 'FrmFormsController::prevent_divi_conflict' );
136
 
@@ -248,17 +253,11 @@ class FrmHooksController {
248
  add_filter( 'wpmu_drop_tables', 'FrmAppController::drop_tables' );
249
  }
250
 
 
 
 
251
  public static function register_elementor_hooks() {
252
- require_once FrmAppHelper::plugin_path() . '/classes/widgets/FrmElementorWidget.php';
253
- \Elementor\Plugin::instance()->widgets_manager->register_widget_type( new \FrmElementorWidget() );
254
-
255
- if ( is_admin() ) {
256
- add_action(
257
- 'elementor/editor/after_enqueue_styles',
258
- function() {
259
- wp_enqueue_style( 'font_icons', FrmAppHelper::plugin_url() . '/css/font_icons.css', array(), FrmAppHelper::plugin_version() );
260
- }
261
- );
262
- }
263
  }
264
  }
93
  */
94
  add_filter( 'frm_keep_name_value_array', '__return_true' );
95
 
96
+ // Elementor.
97
+ add_action( 'elementor/widgets/widgets_registered', 'FrmElementorController::register_elementor_hooks' );
98
  }
99
 
100
  public static function load_admin_hooks() {
132
 
133
  add_filter( 'set-screen-option', 'FrmFormsController::save_per_page', 10, 3 );
134
  add_action( 'admin_footer', 'FrmFormsController::insert_form_popup' );
135
+
136
+ // Elementor.
137
+ add_action( 'elementor/editor/footer', 'FrmElementorController::admin_init' );
138
+
139
  add_action( 'media_buttons', 'FrmFormsController::insert_form_button' );
140
  add_action( 'et_pb_admin_excluded_shortcodes', 'FrmFormsController::prevent_divi_conflict' );
141
 
253
  add_filter( 'wpmu_drop_tables', 'FrmAppController::drop_tables' );
254
  }
255
 
256
+ /**
257
+ * @deprecated 5.0.06 use FrmElementorController::register_elementor_hooks directly.
258
+ */
259
  public static function register_elementor_hooks() {
260
+ _deprecated_function( __FUNCTION__, '5.0.06', 'FrmElementorController::register_elementor_hooks' );
261
+ FrmElementorController::register_elementor_hooks();
 
 
 
 
 
 
 
 
 
262
  }
263
  }
classes/controllers/FrmXMLController.php CHANGED
@@ -623,7 +623,7 @@ class FrmXMLController {
623
  }
624
  }
625
 
626
- return $csv_fields;
627
  }
628
 
629
  public static function allow_mime( $mimes ) {
623
  }
624
  }
625
 
626
+ return apply_filters( 'frm_fields_for_csv_export', $csv_fields, compact( 'form' ) );
627
  }
628
 
629
  public static function allow_mime( $mimes ) {
classes/helpers/FrmAppHelper.php CHANGED
@@ -11,7 +11,7 @@ class FrmAppHelper {
11
  /**
12
  * @since 2.0
13
  */
14
- public static $plug_version = '5.0.05';
15
 
16
  /**
17
  * @since 1.07.02
11
  /**
12
  * @since 2.0
13
  */
14
+ public static $plug_version = '5.0.06';
15
 
16
  /**
17
  * @since 1.07.02
classes/helpers/FrmCSVExportHelper.php CHANGED
@@ -128,7 +128,7 @@ class FrmCSVExportHelper {
128
 
129
  $field_headings = array();
130
  $separate_values = array( 'user_id', 'file', 'data', 'date' );
131
- if ( isset( $col->field_options['separate_value'] ) && $col->field_options['separate_value'] && ! in_array( $col->type, $separate_values, true ) ) {
132
  $field_headings[ $col->id . '_label' ] = strip_tags( $col->name . ' ' . __( '(label)', 'formidable' ) );
133
  }
134
 
@@ -231,6 +231,8 @@ class FrmCSVExportHelper {
231
  if ( self::has_parent_id() ) {
232
  $headings['parent_id'] = __( 'Parent ID', 'formidable' );
233
  }
 
 
234
  }
235
 
236
  /**
@@ -391,21 +393,16 @@ class FrmCSVExportHelper {
391
  );
392
 
393
  if ( ! empty( $col->field_options['separate_value'] ) ) {
394
- $sep_value = FrmEntriesHelper::display_value(
395
- $field_value,
396
- $col,
397
- array(
398
- 'type' => $col->type,
399
- 'post_id' => self::$entry->post_id,
400
- 'show_icon' => false,
401
- 'entry_id' => self::$entry->id,
402
- 'sep' => self::$separator,
403
- 'embedded_field_id' => ( isset( self::$entry->embedded_fields ) && isset( self::$entry->embedded_fields[ self::$entry->id ] ) ) ? 'form' . self::$entry->embedded_fields[ self::$entry->id ] : 0,
404
- )
405
- );
406
-
407
- $row[ $col->id . '_label' ] = $sep_value;
408
- unset( $sep_value );
409
  }
410
 
411
  $row[ $col->id ] = $field_value;
@@ -414,6 +411,28 @@ class FrmCSVExportHelper {
414
  }
415
  }
416
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
417
  /**
418
  * @since 2.0.23
419
  */
128
 
129
  $field_headings = array();
130
  $separate_values = array( 'user_id', 'file', 'data', 'date' );
131
+ if ( ! empty( $col->field_options['separate_value'] ) && ! in_array( $col->type, $separate_values, true ) ) {
132
  $field_headings[ $col->id . '_label' ] = strip_tags( $col->name . ' ' . __( '(label)', 'formidable' ) );
133
  }
134
 
231
  if ( self::has_parent_id() ) {
232
  $headings['parent_id'] = __( 'Parent ID', 'formidable' );
233
  }
234
+
235
+ $headings = apply_filters( 'frm_export_csv_headings', $headings );
236
  }
237
 
238
  /**
393
  );
394
 
395
  if ( ! empty( $col->field_options['separate_value'] ) ) {
396
+ $label_key = $col->id . '_label';
397
+ if ( self::is_the_child_of_a_repeater( $col ) ) {
398
+ $row[ $label_key ] = array();
399
+ foreach ( $field_value as $value ) {
400
+ $row[ $label_key ][] = self::get_separate_value_label( $value, $col );
401
+ }
402
+ } else {
403
+ $row[ $label_key ] = self::get_separate_value_label( $field_value, $col );
404
+ }
405
+ unset( $label_key );
 
 
 
 
 
406
  }
407
 
408
  $row[ $col->id ] = $field_value;
411
  }
412
  }
413
 
414
+ /**
415
+ * @since 5.0.06
416
+ *
417
+ * @param mixed $field_value
418
+ * @param stdClass $field
419
+ * @return string
420
+ */
421
+ private static function get_separate_value_label( $field_value, $field ) {
422
+ return FrmEntriesHelper::display_value(
423
+ $field_value,
424
+ $field,
425
+ array(
426
+ 'type' => $field->type,
427
+ 'post_id' => self::$entry->post_id,
428
+ 'show_icon' => false,
429
+ 'entry_id' => self::$entry->id,
430
+ 'sep' => self::$separator,
431
+ 'embedded_field_id' => ( isset( self::$entry->embedded_fields ) && isset( self::$entry->embedded_fields[ self::$entry->id ] ) ) ? 'form' . self::$entry->embedded_fields[ self::$entry->id ] : 0,
432
+ )
433
+ );
434
+ }
435
+
436
  /**
437
  * @since 2.0.23
438
  */
classes/helpers/FrmFormsHelper.php CHANGED
@@ -432,6 +432,10 @@ BEFORE_HTML;
432
  return;
433
  }
434
 
 
 
 
 
435
  $button_parts = explode( '[button_action]', $button );
436
 
437
  $classes = apply_filters( 'frm_submit_button_class', array(), $form );
432
  return;
433
  }
434
 
435
+ /**
436
+ * @since 5.0.06
437
+ */
438
+ $button = apply_filters( 'frm_submit_button_html', $button, compact( 'form' ) );
439
  $button_parts = explode( '[button_action]', $button );
440
 
441
  $classes = apply_filters( 'frm_submit_button_class', array(), $form );
classes/models/FrmEntry.php CHANGED
@@ -69,6 +69,9 @@ class FrmEntry {
69
  return false;
70
  }
71
 
 
 
 
72
  $is_duplicate = false;
73
  foreach ( $entry_exists as $entry_exist ) {
74
  $is_duplicate = true;
@@ -116,6 +119,8 @@ class FrmEntry {
116
  }
117
  }
118
 
 
 
119
  return $is_duplicate;
120
  }
121
 
69
  return false;
70
  }
71
 
72
+ global $frm_vars;
73
+ $frm_vars['checking_duplicates'] = true;
74
+
75
  $is_duplicate = false;
76
  foreach ( $entry_exists as $entry_exist ) {
77
  $is_duplicate = true;
119
  }
120
  }
121
 
122
+ $frm_vars['checking_duplicates'] = false;
123
+
124
  return $is_duplicate;
125
  }
126
 
classes/models/FrmEntryValidate.php CHANGED
@@ -67,7 +67,17 @@ class FrmEntryValidate {
67
  $where['fi.type not'] = $exclude;
68
  }
69
 
70
- return FrmField::getAll( $where, 'field_order' );
 
 
 
 
 
 
 
 
 
 
71
  }
72
 
73
  public static function validate_field( $posted_field, &$errors, $values, $args = array() ) {
67
  $where['fi.type not'] = $exclude;
68
  }
69
 
70
+ $fields = FrmField::getAll( $where, 'field_order' );
71
+
72
+ /**
73
+ * Allows modifying fields to validate.
74
+ *
75
+ * @since 5.0.06
76
+ *
77
+ * @param array $fields List of fields.
78
+ * @param array $args Includes `values`, `exclude`, `where`.
79
+ */
80
+ return apply_filters( 'frm_fields_to_validate', $fields, compact( 'values', 'exclude', 'where' ) );
81
  }
82
 
83
  public static function validate_field( $posted_field, &$errors, $values, $args = array() ) {
classes/models/fields/FrmFieldCombo.php CHANGED
@@ -360,9 +360,13 @@ class FrmFieldCombo extends FrmFieldType {
360
  }
361
 
362
  if ( $classes ) {
363
- $atts[] = 'class="' . esc_attr( $classes ) . '"';
364
  }
365
 
 
 
 
 
366
  // Print custom attributes.
367
  if ( ! empty( $sub_field['atts'] ) && is_array( $sub_field['atts'] ) ) {
368
  foreach ( $sub_field['atts'] as $att_name => $att_value ) {
360
  }
361
 
362
  if ( $classes ) {
363
+ $field['input_class'] = esc_attr( $classes );
364
  }
365
 
366
+ $field['default_value'] = ''; // fake it to avoid printing frm-val attribute.
367
+
368
+ do_action( 'frm_field_input_html', $field );
369
+
370
  // Print custom attributes.
371
  if ( ! empty( $sub_field['atts'] ) && is_array( $sub_field['atts'] ) ) {
372
  foreach ( $sub_field['atts'] as $att_name => $att_value ) {
classes/views/frm-forms/add_field.php CHANGED
@@ -21,7 +21,7 @@ if ( ! defined( 'ABSPATH' ) ) {
21
  <a href="#" class="frm-collapse-section frm-hover-icon frm_icon_font frm_arrowdown6_icon" title="<?php esc_attr_e( 'Expand/Collapse Section', 'formidable' ); ?>"></a>
22
  <?php } ?>
23
 
24
- <a href="#" class="frm_bstooltip frm-move frm-hover-icon" title="<?php esc_attr_e( 'Move Field', 'formidable' ); ?>" data-container="body">
25
  <?php FrmAppHelper::icon_by_class( 'frm_icon_font frm_thick_move_icon' ); ?>
26
  </a>
27
 
21
  <a href="#" class="frm-collapse-section frm-hover-icon frm_icon_font frm_arrowdown6_icon" title="<?php esc_attr_e( 'Expand/Collapse Section', 'formidable' ); ?>"></a>
22
  <?php } ?>
23
 
24
+ <a href="#" class="frm_bstooltip frm-move frm-hover-icon" title="<?php esc_attr_e( 'Move Field', 'formidable' ); ?>" data-container="body" aria-label="<?php esc_attr_e( 'Move Field', 'formidable' ); ?>">
25
  <?php FrmAppHelper::icon_by_class( 'frm_icon_font frm_thick_move_icon' ); ?>
26
  </a>
27
 
css/frm_admin.css CHANGED
@@ -6762,23 +6762,35 @@ ul .frm_col_two {
6762
  font-size: 15px;
6763
  }
6764
 
6765
- #frm_field_group_controls .frm-dropdown-menu .frm_dropdown_li,
6766
- .frm-field-action-icons .frm-dropdown-menu .frm_dropdown_li {
6767
- padding: 5px 10px;
 
 
 
 
 
6768
  color: rgba(40, 47, 54, 0.85);
6769
  cursor: pointer;
 
 
6770
  }
6771
 
6772
- .frm-field-action-icons .frm-dropdown-menu .frm_dropdown_li .frmsvg {
6773
  color: rgba(40, 47, 54, 0.85) !important;
6774
  }
6775
 
6776
- .frm-field-action-icons .frm-dropdown-menu .frm_dropdown_li a {
6777
- padding: 3px 0;
 
 
 
 
 
 
6778
  }
6779
 
6780
- #frm_field_group_controls .frm-dropdown-menu .frm_dropdown_li:hover,
6781
- .frm-field-action-icons .frm-dropdown-menu .frm_dropdown_li:hover {
6782
  background: #F6F7FB;
6783
  }
6784
 
6762
  font-size: 15px;
6763
  }
6764
 
6765
+ #frm_field_group_controls .frm-dropdown-menu,
6766
+ .frm-field-action-icons .frm-dropdown-menu {
6767
+ padding: 0;
6768
+ margin: 0;
6769
+ }
6770
+
6771
+ #frm_builder_page .frm-dropdown-menu .frm_dropdown_li.frm_more_options_li {
6772
+ padding: 0;
6773
  color: rgba(40, 47, 54, 0.85);
6774
  cursor: pointer;
6775
+ position: relative;
6776
+ height: 32px;
6777
  }
6778
 
6779
+ #frm_builder_page .frm-dropdown-menu .frm_dropdown_li.frm_more_options_li .frmsvg {
6780
  color: rgba(40, 47, 54, 0.85) !important;
6781
  }
6782
 
6783
+ #frm_builder_page .frm-dropdown-menu .frm_dropdown_li.frm_more_options_li a {
6784
+ padding: 6px 10px;
6785
+ position: absolute;
6786
+ top: 0;
6787
+ left: 0;
6788
+ bottom: 0;
6789
+ width: 100%;
6790
+ box-sizing: border-box;
6791
  }
6792
 
6793
+ #frm_builder_page .frm-dropdown-menu .frm_dropdown_li.frm_more_options_li:hover {
 
6794
  background: #F6F7FB;
6795
  }
6796
 
css/frm_blocks.css CHANGED
@@ -28,6 +28,10 @@
28
  color: #4d4d4d;
29
  }
30
 
 
 
 
 
31
  .editor-styles-wrapper h2.frm-block-title {
32
  color: #4d4d4d;
33
  font-weight: 500;
28
  color: #4d4d4d;
29
  }
30
 
31
+ .frm-block-intro-content select + span svg {
32
+ margin: unset;
33
+ }
34
+
35
  .editor-styles-wrapper h2.frm-block-title {
36
  color: #4d4d4d;
37
  font-weight: 500;
formidable.php CHANGED
@@ -2,7 +2,7 @@
2
  /*
3
  Plugin Name: Formidable Forms
4
  Description: Quickly and easily create drag-and-drop forms
5
- Version: 5.0.05
6
  Plugin URI: https://formidableforms.com/
7
  Author URI: https://formidableforms.com/
8
  Author: Strategy11
2
  /*
3
  Plugin Name: Formidable Forms
4
  Description: Quickly and easily create drag-and-drop forms
5
+ Version: 5.0.06
6
  Plugin URI: https://formidableforms.com/
7
  Author URI: https://formidableforms.com/
8
  Author: Strategy11
js/formidable_admin.js CHANGED
@@ -588,6 +588,14 @@ function frmAdminBuildJS() {
588
  });
589
  }
590
 
 
 
 
 
 
 
 
 
591
  function removeThisTag() {
592
  /*jshint validthis:true */
593
  var show, hide, removeMore,
@@ -1174,6 +1182,8 @@ function frmAdminBuildJS() {
1174
 
1175
  controls = div();
1176
  controls.id = 'frm_field_group_controls';
 
 
1177
  setFieldControlsHtml( controls );
1178
  document.getElementById( 'frm_builder_page' ).appendChild( controls );
1179
  }
@@ -1183,11 +1193,40 @@ function frmAdminBuildJS() {
1183
  }
1184
 
1185
  function setFieldControlsHtml( controls ) {
1186
- controls.innerHTML = '<span><svg class="frmsvg"><use xlink:href="#frm_field_group_layout_icon"></use></svg></span>';
1187
- controls.innerHTML += '<span class="frm-move"><svg class="frmsvg"><use xlink:href="#frm_thick_move_icon"></use></svg></span>';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1188
  controls.appendChild( getFieldControlsDropdown() );
1189
  }
1190
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1191
  function getFieldControlsDropdown() {
1192
  var dropdown, trigger, ul;
1193
 
@@ -1199,6 +1238,7 @@ function frmAdminBuildJS() {
1199
  trigger.setAttribute( 'title', __( 'More Options', 'formidable' ) );
1200
  trigger.setAttribute( 'data-toggle', 'dropdown' );
1201
  trigger.setAttribute( 'data-container', 'body' );
 
1202
  trigger.innerHTML = '<span><svg class="frmsvg"><use xlink:href="#frm_thick_more_vert_icon"></use></svg></span>';
1203
  dropdown.appendChild( trigger );
1204
 
@@ -1964,6 +2004,10 @@ function frmAdminBuildJS() {
1964
  if ( $ul.offset().left > jQuery( window ).width() - $ul.outerWidth() ) {
1965
  ul.style.left = ( -$ul.outerWidth() ) + 'px';
1966
  }
 
 
 
 
1967
  },
1968
  0
1969
  );
@@ -1986,11 +2030,12 @@ function frmAdminBuildJS() {
1986
  function( option ) {
1987
  var li, anchor, span;
1988
  li = document.createElement( 'li' );
1989
- li.classList.add( 'frm_dropdown_li' );
1990
 
1991
  anchor = document.createElement( 'a' );
1992
  anchor.classList.add( option.class + classSuffix );
1993
  anchor.setAttribute( 'href', '#' );
 
1994
 
1995
  span = document.createElement( 'span' );
1996
  span.textContent = option.label;
@@ -3251,6 +3296,11 @@ function frmAdminBuildJS() {
3251
  popupWrapper.style.position = 'relative';
3252
  popupWrapper.appendChild( getFieldGroupPopup( sizeOfFieldGroup, this ) );
3253
  this.parentNode.appendChild( popupWrapper );
 
 
 
 
 
3254
  }
3255
 
3256
  function destroyFieldGroupPopupOnOutsideClick( event ) {
@@ -3327,9 +3377,18 @@ function frmAdminBuildJS() {
3327
  option.textContent = __( 'Custom layout', 'formidable' );
3328
  jQuery( option ).prepend( getIconClone( 'frm_gear_svg' ) );
3329
  option.classList.add( 'frm-custom-field-group-layout' );
 
3330
  return option;
3331
  }
3332
 
 
 
 
 
 
 
 
 
3333
  function getIconClone( iconId ) {
3334
  var clone = document.getElementById( iconId ).cloneNode( true );
3335
  clone.id = '';
@@ -3341,6 +3400,7 @@ function frmAdminBuildJS() {
3341
  option.textContent = __( 'Break into rows', 'formidable' );
3342
  jQuery( option ).prepend( getIconClone( 'frm_break_field_group_svg' ) );
3343
  option.classList.add( 'frm-break-field-group' );
 
3344
  return option;
3345
  }
3346
 
@@ -3379,6 +3439,7 @@ function frmAdminBuildJS() {
3379
 
3380
  option = div();
3381
  option.classList.add( 'frm-row-layout-option' );
 
3382
 
3383
  switch ( size ) {
3384
  case 6:
@@ -3630,6 +3691,16 @@ function frmAdminBuildJS() {
3630
  wrapper.appendChild( buttonsWrapper );
3631
 
3632
  popup.appendChild( wrapper );
 
 
 
 
 
 
 
 
 
 
3633
  }
3634
 
3635
  function customFieldGroupLayoutInsideMergeClick() {
@@ -4112,6 +4183,9 @@ function frmAdminBuildJS() {
4112
  } else {
4113
  $liWrapper.remove();
4114
  }
 
 
 
4115
  });
4116
  }
4117
  });
588
  });
589
  }
590
 
591
+ function deleteTooltips() {
592
+ document.querySelectorAll( '.tooltip' ).forEach(
593
+ function( tooltip ) {
594
+ tooltip.remove();
595
+ }
596
+ );
597
+ }
598
+
599
  function removeThisTag() {
600
  /*jshint validthis:true */
601
  var show, hide, removeMore,
1182
 
1183
  controls = div();
1184
  controls.id = 'frm_field_group_controls';
1185
+ controls.setAttribute( 'role', 'group' );
1186
+ controls.setAttribute( 'tabindex', 0 );
1187
  setFieldControlsHtml( controls );
1188
  document.getElementById( 'frm_builder_page' ).appendChild( controls );
1189
  }
1193
  }
1194
 
1195
  function setFieldControlsHtml( controls ) {
1196
+ var layoutOption, moveOption;
1197
+
1198
+ layoutOption = document.createElement( 'span' );
1199
+ layoutOption.innerHTML = '<svg class="frmsvg"><use xlink:href="#frm_field_group_layout_icon"></use></svg>';
1200
+ const layoutOptionLabel = __( 'Set Row Layout', 'formidable' );
1201
+ addTooltip( layoutOption, layoutOptionLabel );
1202
+ makeTabbable( layoutOption, layoutOptionLabel );
1203
+
1204
+ moveOption = document.createElement( 'span' );
1205
+ moveOption.innerHTML = '<svg class="frmsvg"><use xlink:href="#frm_thick_move_icon"></use></svg>';
1206
+ const moveOptionLabel = __( 'Move Field Group', 'formidable' );
1207
+ addTooltip( moveOption, moveOptionLabel );
1208
+ makeTabbable( moveOption, moveOptionLabel );
1209
+
1210
+ controls.innerHTML = '';
1211
+ controls.appendChild( layoutOption );
1212
+ controls.appendChild( moveOption );
1213
  controls.appendChild( getFieldControlsDropdown() );
1214
  }
1215
 
1216
+ function addTooltip( element, title ) {
1217
+ element.setAttribute( 'data-toggle', 'tooltip' );
1218
+ element.setAttribute( 'data-container', 'body' );
1219
+ element.setAttribute( 'title', title );
1220
+ element.addEventListener(
1221
+ 'mouseover',
1222
+ function() {
1223
+ if ( null === element.getAttribute( 'data-original-title' ) ) {
1224
+ jQuery( element ).tooltip();
1225
+ }
1226
+ }
1227
+ );
1228
+ }
1229
+
1230
  function getFieldControlsDropdown() {
1231
  var dropdown, trigger, ul;
1232
 
1238
  trigger.setAttribute( 'title', __( 'More Options', 'formidable' ) );
1239
  trigger.setAttribute( 'data-toggle', 'dropdown' );
1240
  trigger.setAttribute( 'data-container', 'body' );
1241
+ makeTabbable( trigger, __( 'More Options', 'formidable' ) );
1242
  trigger.innerHTML = '<span><svg class="frmsvg"><use xlink:href="#frm_thick_more_vert_icon"></use></svg></span>';
1243
  dropdown.appendChild( trigger );
1244
 
2004
  if ( $ul.offset().left > jQuery( window ).width() - $ul.outerWidth() ) {
2005
  ul.style.left = ( -$ul.outerWidth() ) + 'px';
2006
  }
2007
+ const firstAnchor = ul.firstElementChild.querySelector( 'a' );
2008
+ if ( firstAnchor ) {
2009
+ firstAnchor.focus();
2010
+ }
2011
  },
2012
  0
2013
  );
2030
  function( option ) {
2031
  var li, anchor, span;
2032
  li = document.createElement( 'li' );
2033
+ li.classList.add( 'frm_dropdown_li', 'frm_more_options_li' );
2034
 
2035
  anchor = document.createElement( 'a' );
2036
  anchor.classList.add( option.class + classSuffix );
2037
  anchor.setAttribute( 'href', '#' );
2038
+ makeTabbable( anchor );
2039
 
2040
  span = document.createElement( 'span' );
2041
  span.textContent = option.label;
3296
  popupWrapper.style.position = 'relative';
3297
  popupWrapper.appendChild( getFieldGroupPopup( sizeOfFieldGroup, this ) );
3298
  this.parentNode.appendChild( popupWrapper );
3299
+
3300
+ const firstLayoutOption = popupWrapper.querySelector( '.frm-row-layout-option' );
3301
+ if ( firstLayoutOption ) {
3302
+ firstLayoutOption.focus();
3303
+ }
3304
  }
3305
 
3306
  function destroyFieldGroupPopupOnOutsideClick( event ) {
3377
  option.textContent = __( 'Custom layout', 'formidable' );
3378
  jQuery( option ).prepend( getIconClone( 'frm_gear_svg' ) );
3379
  option.classList.add( 'frm-custom-field-group-layout' );
3380
+ makeTabbable( option );
3381
  return option;
3382
  }
3383
 
3384
+ function makeTabbable( element, ariaLabel ) {
3385
+ element.setAttribute( 'tabindex', 0 );
3386
+ element.setAttribute( 'role', 'button' );
3387
+ if ( 'undefined' !== typeof ariaLabel ) {
3388
+ element.setAttribute( 'aria-label', ariaLabel );
3389
+ }
3390
+ }
3391
+
3392
  function getIconClone( iconId ) {
3393
  var clone = document.getElementById( iconId ).cloneNode( true );
3394
  clone.id = '';
3400
  option.textContent = __( 'Break into rows', 'formidable' );
3401
  jQuery( option ).prepend( getIconClone( 'frm_break_field_group_svg' ) );
3402
  option.classList.add( 'frm-break-field-group' );
3403
+ makeTabbable( option );
3404
  return option;
3405
  }
3406
 
3439
 
3440
  option = div();
3441
  option.classList.add( 'frm-row-layout-option' );
3442
+ makeTabbable( option, type );
3443
 
3444
  switch ( size ) {
3445
  case 6:
3691
  wrapper.appendChild( buttonsWrapper );
3692
 
3693
  popup.appendChild( wrapper );
3694
+
3695
+ setTimeout(
3696
+ function() {
3697
+ const firstInput = popup.querySelector( 'input.frm-custom-grid-size-input' ).focus();
3698
+ if ( firstInput ) {
3699
+ firstInput.focus();
3700
+ }
3701
+ },
3702
+ 0
3703
+ );
3704
  }
3705
 
3706
  function customFieldGroupLayoutInsideMergeClick() {
4183
  } else {
4184
  $liWrapper.remove();
4185
  }
4186
+
4187
+ // prevent "More Options" tooltips from staying around after their target field is deleted.
4188
+ deleteTooltips();
4189
  });
4190
  }
4191
  });
languages/formidable.pot CHANGED
@@ -2,14 +2,14 @@
2
  # This file is distributed under the same license as the Formidable Forms plugin.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: Formidable Forms 5.0.05\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/formidable\n"
7
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
8
  "Language-Team: LANGUAGE <LL@li.org>\n"
9
  "MIME-Version: 1.0\n"
10
  "Content-Type: text/plain; charset=UTF-8\n"
11
  "Content-Transfer-Encoding: 8bit\n"
12
- "POT-Creation-Date: 2021-09-20T16:50:03+00:00\n"
13
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
14
  "X-Generator: WP-CLI 2.4.0\n"
15
  "X-Domain: formidable\n"
@@ -137,7 +137,7 @@ msgstr ""
137
 
138
  #: classes/controllers/FrmAddonsController.php:21
139
  #: classes/controllers/FrmAddonsController.php:22
140
- #: classes/helpers/FrmFormsHelper.php:1311
141
  #: classes/views/frm-fields/back-end/smart-values.php:16
142
  #: classes/views/shared/admin-header.php:33
143
  msgid "Upgrade"
@@ -315,7 +315,7 @@ msgstr ""
315
  msgid "%s form actions"
316
  msgstr ""
317
 
318
- #: classes/controllers/FrmFormActionsController.php:391
319
  #: classes/models/FrmEntryValidate.php:18
320
  #: classes/models/FrmSettings.php:110
321
  msgid "You do not have permission to do that"
@@ -465,7 +465,7 @@ msgid "Date"
465
  msgstr ""
466
 
467
  #: classes/controllers/FrmFormsController.php:897
468
- #: classes/helpers/FrmFormsHelper.php:1254
469
  msgid "My Templates"
470
  msgstr ""
471
 
@@ -636,7 +636,7 @@ msgstr ""
636
  #: classes/helpers/FrmFormsHelper.php:57
637
  #: classes/helpers/FrmFormsHelper.php:112
638
  #: classes/helpers/FrmFormsHelper.php:166
639
- #: classes/helpers/FrmFormsHelper.php:1026
640
  #: classes/helpers/FrmFormsListHelper.php:315
641
  #: classes/views/frm-forms/create-template-from-an-existing-form.php:25
642
  #: classes/views/styles/manage.php:59
@@ -920,7 +920,7 @@ msgid "Your form styles have been saved."
920
  msgstr ""
921
 
922
  #: classes/controllers/FrmStylesController.php:395
923
- #: classes/helpers/FrmFormsHelper.php:511
924
  #: classes/views/frm-forms/new-form-overlay.php:53
925
  #: classes/views/frm-forms/new-form-overlay.php:54
926
  #: classes/views/frm-forms/settings-advanced.php:27
@@ -932,7 +932,7 @@ msgid "Field Labels"
932
  msgstr ""
933
 
934
  #: classes/controllers/FrmStylesController.php:397
935
- #: classes/helpers/FrmFormsHelper.php:471
936
  #: classes/views/frm-fields/back-end/field-description.php:8
937
  msgid "Field Description"
938
  msgstr ""
@@ -1220,7 +1220,7 @@ msgstr ""
1220
  #: classes/views/frm-forms/new-form-overlay.php:139
1221
  #: classes/views/shared/admin-header.php:64
1222
  #: classes/views/shared/confirm-overlay.php:19
1223
- #: js/formidable_admin.js:3619
1224
  msgid "Cancel"
1225
  msgstr ""
1226
 
@@ -1247,7 +1247,7 @@ msgstr ""
1247
 
1248
  #: classes/helpers/FrmAppHelper.php:2514
1249
  #: classes/helpers/FrmListHelper.php:405
1250
- #: js/formidable_admin.js:4001
1251
  msgid "Heads up"
1252
  msgstr ""
1253
 
@@ -1348,7 +1348,7 @@ msgid "The parameter \"%s\" is reserved by WordPress. This may cause problems wh
1348
  msgstr ""
1349
 
1350
  #: classes/helpers/FrmAppHelper.php:2544
1351
- #: classes/helpers/FrmFormsHelper.php:1485
1352
  msgid "See the list of reserved words in WordPress."
1353
  msgstr ""
1354
 
@@ -1666,7 +1666,7 @@ msgid "Updated By"
1666
  msgstr ""
1667
 
1668
  #: classes/helpers/FrmCSVExportHelper.php:227
1669
- #: classes/helpers/FrmFormsHelper.php:1212
1670
  #: classes/helpers/FrmFormsListHelper.php:342
1671
  msgid "Draft"
1672
  msgstr ""
@@ -1752,10 +1752,10 @@ msgid "Permanently delete this entry?"
1752
  msgstr ""
1753
 
1754
  #: classes/helpers/FrmEntriesListHelper.php:309
1755
- #: classes/helpers/FrmFormsHelper.php:1134
1756
  #: classes/helpers/FrmFormsListHelper.php:133
1757
  #: classes/views/frm-form-actions/form_action.php:25
1758
- #: js/formidable_admin.js:2009
1759
  msgid "Delete"
1760
  msgstr ""
1761
 
@@ -3018,221 +3018,221 @@ msgstr ""
3018
  msgid "(ID %d)"
3019
  msgstr ""
3020
 
3021
- #: classes/helpers/FrmFormsHelper.php:459
3022
  msgid "Field ID"
3023
  msgstr ""
3024
 
3025
- #: classes/helpers/FrmFormsHelper.php:463
3026
  #: classes/views/frm-fields/back-end/settings.php:304
3027
  msgid "Field Key"
3028
  msgstr ""
3029
 
3030
- #: classes/helpers/FrmFormsHelper.php:467
3031
  msgid "Field Name"
3032
  msgstr ""
3033
 
3034
- #: classes/helpers/FrmFormsHelper.php:475
3035
  #: classes/views/frm-fields/back-end/settings.php:277
3036
  msgid "Label Position"
3037
  msgstr ""
3038
 
3039
- #: classes/helpers/FrmFormsHelper.php:479
3040
  msgid "Required Label"
3041
  msgstr ""
3042
 
3043
- #: classes/helpers/FrmFormsHelper.php:483
3044
  msgid "Input Field"
3045
  msgstr ""
3046
 
3047
- #: classes/helpers/FrmFormsHelper.php:487
3048
  msgid "Single Option"
3049
  msgstr ""
3050
 
3051
- #: classes/helpers/FrmFormsHelper.php:488
3052
  msgid "Show a single radio or checkbox option by replacing 1 with the order of the option"
3053
  msgstr ""
3054
 
3055
- #: classes/helpers/FrmFormsHelper.php:492
3056
  msgid "Hide Option Label"
3057
  msgstr ""
3058
 
3059
- #: classes/helpers/FrmFormsHelper.php:496
3060
  msgid "Required Class"
3061
  msgstr ""
3062
 
3063
- #: classes/helpers/FrmFormsHelper.php:497
3064
  msgid "Add class name if field is required"
3065
  msgstr ""
3066
 
3067
- #: classes/helpers/FrmFormsHelper.php:501
3068
  msgid "Error Class"
3069
  msgstr ""
3070
 
3071
- #: classes/helpers/FrmFormsHelper.php:502
3072
  msgid "Add class name if field has an error on form submit"
3073
  msgstr ""
3074
 
3075
- #: classes/helpers/FrmFormsHelper.php:507
3076
  #: classes/views/frm-forms/new-form-overlay.php:46
3077
  #: classes/views/frm-forms/new-form-overlay.php:47
3078
  msgid "Form Name"
3079
  msgstr ""
3080
 
3081
- #: classes/helpers/FrmFormsHelper.php:515
3082
  #: classes/views/frm-forms/settings-advanced.php:20
3083
  msgid "Form Key"
3084
  msgstr ""
3085
 
3086
- #: classes/helpers/FrmFormsHelper.php:519
3087
  msgid "Delete Entry Link"
3088
  msgstr ""
3089
 
3090
- #: classes/helpers/FrmFormsHelper.php:524
3091
  msgid "Button Label"
3092
  msgstr ""
3093
 
3094
- #: classes/helpers/FrmFormsHelper.php:528
3095
  msgid "Button Hook"
3096
  msgstr ""
3097
 
3098
- #: classes/helpers/FrmFormsHelper.php:994
3099
  msgid "Create Form from Template"
3100
  msgstr ""
3101
 
3102
- #: classes/helpers/FrmFormsHelper.php:1000
3103
  msgid "Duplicate Form"
3104
  msgstr ""
3105
 
3106
- #: classes/helpers/FrmFormsHelper.php:1121
3107
  msgid "Restore from Trash"
3108
  msgstr ""
3109
 
3110
- #: classes/helpers/FrmFormsHelper.php:1122
3111
  #: classes/helpers/FrmFormsListHelper.php:124
3112
  msgid "Restore"
3113
  msgstr ""
3114
 
3115
- #: classes/helpers/FrmFormsHelper.php:1126
3116
  msgid "Move Form to Trash"
3117
  msgstr ""
3118
 
3119
- #: classes/helpers/FrmFormsHelper.php:1127
3120
- #: classes/helpers/FrmFormsHelper.php:1213
3121
  #: classes/helpers/FrmFormsListHelper.php:158
3122
  msgid "Trash"
3123
  msgstr ""
3124
 
3125
- #: classes/helpers/FrmFormsHelper.php:1130
3126
  msgid "Do you want to move this form to the trash?"
3127
  msgstr ""
3128
 
3129
- #: classes/helpers/FrmFormsHelper.php:1133
3130
  #: classes/helpers/FrmFormsListHelper.php:128
3131
  msgid "Delete Permanently"
3132
  msgstr ""
3133
 
3134
- #: classes/helpers/FrmFormsHelper.php:1136
3135
  msgid "Are you sure you want to delete this form and all its entries?"
3136
  msgstr ""
3137
 
3138
- #: classes/helpers/FrmFormsHelper.php:1138
3139
  msgid "This will permanently delete the form and all its entries. This is irreversible. Are you sure you want to continue?"
3140
  msgstr ""
3141
 
3142
- #: classes/helpers/FrmFormsHelper.php:1149
3143
  #: classes/models/FrmField.php:203
3144
  msgid "Total"
3145
  msgstr ""
3146
 
3147
- #: classes/helpers/FrmFormsHelper.php:1150
3148
  msgid "Add this to a read-only field to display the text in bold without a border or background."
3149
  msgstr ""
3150
 
3151
- #: classes/helpers/FrmFormsHelper.php:1153
3152
  msgid "Big Total"
3153
  msgstr ""
3154
 
3155
- #: classes/helpers/FrmFormsHelper.php:1154
3156
  msgid "Add this to a read-only field to display the text in large, bold text without a border or background."
3157
  msgstr ""
3158
 
3159
- #: classes/helpers/FrmFormsHelper.php:1157
3160
  msgid "Scroll Box"
3161
  msgstr ""
3162
 
3163
- #: classes/helpers/FrmFormsHelper.php:1158
3164
  msgid "If you have many checkbox or radio button options, you may add this class to allow your user to easily scroll through the options. Or add a scrolling area around content in an HTML field."
3165
  msgstr ""
3166
 
3167
- #: classes/helpers/FrmFormsHelper.php:1161
3168
  #: classes/models/fields/FrmFieldName.php:36
3169
  msgid "First"
3170
  msgstr ""
3171
 
3172
- #: classes/helpers/FrmFormsHelper.php:1162
3173
  msgid "Add this to the first field in each row along with a width. ie frm_first frm4"
3174
  msgstr ""
3175
 
3176
- #: classes/helpers/FrmFormsHelper.php:1164
3177
  #: classes/helpers/FrmStylesHelper.php:113
3178
  msgid "Right"
3179
  msgstr ""
3180
 
3181
- #: classes/helpers/FrmFormsHelper.php:1165
3182
  msgid "First Grid Row"
3183
  msgstr ""
3184
 
3185
- #: classes/helpers/FrmFormsHelper.php:1166
3186
  msgid "Even Grid Row"
3187
  msgstr ""
3188
 
3189
- #: classes/helpers/FrmFormsHelper.php:1167
3190
  msgid "Odd Grid Row"
3191
  msgstr ""
3192
 
3193
- #: classes/helpers/FrmFormsHelper.php:1169
3194
  msgid "Color Block"
3195
  msgstr ""
3196
 
3197
- #: classes/helpers/FrmFormsHelper.php:1170
3198
  msgid "Add a background color to the field or section."
3199
  msgstr ""
3200
 
3201
- #: classes/helpers/FrmFormsHelper.php:1173
3202
  msgid "Capitalize"
3203
  msgstr ""
3204
 
3205
- #: classes/helpers/FrmFormsHelper.php:1174
3206
  msgid "Automatically capitalize the first letter in each word."
3207
  msgstr ""
3208
 
3209
- #: classes/helpers/FrmFormsHelper.php:1214
3210
  msgid "Published"
3211
  msgstr ""
3212
 
3213
- #: classes/helpers/FrmFormsHelper.php:1298
3214
  msgid "Create Form"
3215
  msgstr ""
3216
 
3217
- #: classes/helpers/FrmFormsHelper.php:1306
3218
  msgid "Renew"
3219
  msgstr ""
3220
 
3221
- #: classes/helpers/FrmFormsHelper.php:1370
3222
  msgid "License plan required:"
3223
  msgstr ""
3224
 
3225
- #: classes/helpers/FrmFormsHelper.php:1484
3226
  msgid "Is this intentional?"
3227
  msgstr ""
3228
 
3229
  #. translators: %s: the name of a single parameter in the redirect URL
3230
- #: classes/helpers/FrmFormsHelper.php:1494
3231
  msgid "The redirect URL is using the parameter \"%s\", which is reserved by WordPress. "
3232
  msgstr ""
3233
 
3234
  #. translators: %s: the names of two or more parameters in the redirect URL, separated by commas
3235
- #: classes/helpers/FrmFormsHelper.php:1500
3236
  msgid "The redirect URL is using the parameters \"%s\", which are reserved by WordPress. "
3237
  msgstr ""
3238
 
@@ -3892,12 +3892,12 @@ msgstr ""
3892
  msgid "There was a problem with your submission. Please try again."
3893
  msgstr ""
3894
 
3895
- #: classes/models/FrmEntryValidate.php:245
3896
- #: classes/models/FrmEntryValidate.php:249
3897
  msgid "Your entry appears to be spam!"
3898
  msgstr ""
3899
 
3900
- #: classes/models/FrmEntryValidate.php:247
3901
  msgid "Your entry appears to be blocked spam!"
3902
  msgstr ""
3903
 
@@ -4484,7 +4484,7 @@ msgstr ""
4484
  #: classes/views/frm-fields/back-end/inline-modal.php:7
4485
  #: classes/views/frm-fields/back-end/inline-modal.php:8
4486
  #: classes/views/shared/admin-header.php:19
4487
- #: js/formidable_admin.js:7567
4488
  msgid "Close"
4489
  msgstr ""
4490
 
@@ -4768,7 +4768,7 @@ msgid "Conditional emails"
4768
  msgstr ""
4769
 
4770
  #: classes/views/frm-form-actions/form_action.php:21
4771
- #: js/formidable_admin.js:2015
4772
  msgid "Duplicate"
4773
  msgstr ""
4774
 
@@ -4893,8 +4893,9 @@ msgid "Move Field"
4893
  msgstr ""
4894
 
4895
  #: classes/views/frm-forms/add_field.php:29
4896
- #: js/formidable_admin.js:1199
4897
- #: js/formidable_admin.js:1958
 
4898
  msgid "More Options"
4899
  msgstr ""
4900
 
@@ -6263,51 +6264,59 @@ msgstr ""
6263
  msgid "Error"
6264
  msgstr ""
6265
 
6266
- #: js/formidable_admin.js:1982
 
 
 
 
 
 
 
 
6267
  msgid "Field settings"
6268
  msgstr ""
6269
 
6270
- #: js/formidable_admin.js:2009
6271
  msgid "Delete Group"
6272
  msgstr ""
6273
 
6274
- #: js/formidable_admin.js:2015
6275
  msgid "Duplicate Group"
6276
  msgstr ""
6277
 
6278
- #: js/formidable_admin.js:3327
6279
  msgid "Custom layout"
6280
  msgstr ""
6281
 
6282
- #: js/formidable_admin.js:3341
6283
  msgid "Break into rows"
6284
  msgstr ""
6285
 
6286
- #: js/formidable_admin.js:3350
6287
  msgid "Row Layout"
6288
  msgstr ""
6289
 
6290
- #: js/formidable_admin.js:3604
6291
  msgid "Enter number of columns for each field"
6292
  msgstr ""
6293
 
6294
- #: js/formidable_admin.js:3608
6295
  msgid "Layouts are based on a 12-column grid system"
6296
  msgstr ""
6297
 
6298
- #: js/formidable_admin.js:3624
6299
  msgid "Save"
6300
  msgstr ""
6301
 
6302
- #: js/formidable_admin.js:3915
6303
  msgid "Merge into row"
6304
  msgstr ""
6305
 
6306
  #. translators: %1$s: Number of fields that are selected to be deleted.
6307
- #: js/formidable_admin.js:4003
6308
  msgid "Are you sure you want to delete these %1$s selected fields?"
6309
  msgstr ""
6310
 
6311
- #: js/formidable_admin.js:7559
6312
  msgid "Save and Reload"
6313
  msgstr ""
2
  # This file is distributed under the same license as the Formidable Forms plugin.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Formidable Forms 5.0.06\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/formidable\n"
7
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
8
  "Language-Team: LANGUAGE <LL@li.org>\n"
9
  "MIME-Version: 1.0\n"
10
  "Content-Type: text/plain; charset=UTF-8\n"
11
  "Content-Transfer-Encoding: 8bit\n"
12
+ "POT-Creation-Date: 2021-09-27T16:06:56+00:00\n"
13
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
14
  "X-Generator: WP-CLI 2.4.0\n"
15
  "X-Domain: formidable\n"
137
 
138
  #: classes/controllers/FrmAddonsController.php:21
139
  #: classes/controllers/FrmAddonsController.php:22
140
+ #: classes/helpers/FrmFormsHelper.php:1315
141
  #: classes/views/frm-fields/back-end/smart-values.php:16
142
  #: classes/views/shared/admin-header.php:33
143
  msgid "Upgrade"
315
  msgid "%s form actions"
316
  msgstr ""
317
 
318
+ #: classes/controllers/FrmFormActionsController.php:419
319
  #: classes/models/FrmEntryValidate.php:18
320
  #: classes/models/FrmSettings.php:110
321
  msgid "You do not have permission to do that"
465
  msgstr ""
466
 
467
  #: classes/controllers/FrmFormsController.php:897
468
+ #: classes/helpers/FrmFormsHelper.php:1258
469
  msgid "My Templates"
470
  msgstr ""
471
 
636
  #: classes/helpers/FrmFormsHelper.php:57
637
  #: classes/helpers/FrmFormsHelper.php:112
638
  #: classes/helpers/FrmFormsHelper.php:166
639
+ #: classes/helpers/FrmFormsHelper.php:1030
640
  #: classes/helpers/FrmFormsListHelper.php:315
641
  #: classes/views/frm-forms/create-template-from-an-existing-form.php:25
642
  #: classes/views/styles/manage.php:59
920
  msgstr ""
921
 
922
  #: classes/controllers/FrmStylesController.php:395
923
+ #: classes/helpers/FrmFormsHelper.php:515
924
  #: classes/views/frm-forms/new-form-overlay.php:53
925
  #: classes/views/frm-forms/new-form-overlay.php:54
926
  #: classes/views/frm-forms/settings-advanced.php:27
932
  msgstr ""
933
 
934
  #: classes/controllers/FrmStylesController.php:397
935
+ #: classes/helpers/FrmFormsHelper.php:475
936
  #: classes/views/frm-fields/back-end/field-description.php:8
937
  msgid "Field Description"
938
  msgstr ""
1220
  #: classes/views/frm-forms/new-form-overlay.php:139
1221
  #: classes/views/shared/admin-header.php:64
1222
  #: classes/views/shared/confirm-overlay.php:19
1223
+ #: js/formidable_admin.js:3680
1224
  msgid "Cancel"
1225
  msgstr ""
1226
 
1247
 
1248
  #: classes/helpers/FrmAppHelper.php:2514
1249
  #: classes/helpers/FrmListHelper.php:405
1250
+ #: js/formidable_admin.js:4072
1251
  msgid "Heads up"
1252
  msgstr ""
1253
 
1348
  msgstr ""
1349
 
1350
  #: classes/helpers/FrmAppHelper.php:2544
1351
+ #: classes/helpers/FrmFormsHelper.php:1489
1352
  msgid "See the list of reserved words in WordPress."
1353
  msgstr ""
1354
 
1666
  msgstr ""
1667
 
1668
  #: classes/helpers/FrmCSVExportHelper.php:227
1669
+ #: classes/helpers/FrmFormsHelper.php:1216
1670
  #: classes/helpers/FrmFormsListHelper.php:342
1671
  msgid "Draft"
1672
  msgstr ""
1752
  msgstr ""
1753
 
1754
  #: classes/helpers/FrmEntriesListHelper.php:309
1755
+ #: classes/helpers/FrmFormsHelper.php:1138
1756
  #: classes/helpers/FrmFormsListHelper.php:133
1757
  #: classes/views/frm-form-actions/form_action.php:25
1758
+ #: js/formidable_admin.js:2054
1759
  msgid "Delete"
1760
  msgstr ""
1761
 
3018
  msgid "(ID %d)"
3019
  msgstr ""
3020
 
3021
+ #: classes/helpers/FrmFormsHelper.php:463
3022
  msgid "Field ID"
3023
  msgstr ""
3024
 
3025
+ #: classes/helpers/FrmFormsHelper.php:467
3026
  #: classes/views/frm-fields/back-end/settings.php:304
3027
  msgid "Field Key"
3028
  msgstr ""
3029
 
3030
+ #: classes/helpers/FrmFormsHelper.php:471
3031
  msgid "Field Name"
3032
  msgstr ""
3033
 
3034
+ #: classes/helpers/FrmFormsHelper.php:479
3035
  #: classes/views/frm-fields/back-end/settings.php:277
3036
  msgid "Label Position"
3037
  msgstr ""
3038
 
3039
+ #: classes/helpers/FrmFormsHelper.php:483
3040
  msgid "Required Label"
3041
  msgstr ""
3042
 
3043
+ #: classes/helpers/FrmFormsHelper.php:487
3044
  msgid "Input Field"
3045
  msgstr ""
3046
 
3047
+ #: classes/helpers/FrmFormsHelper.php:491
3048
  msgid "Single Option"
3049
  msgstr ""
3050
 
3051
+ #: classes/helpers/FrmFormsHelper.php:492
3052
  msgid "Show a single radio or checkbox option by replacing 1 with the order of the option"
3053
  msgstr ""
3054
 
3055
+ #: classes/helpers/FrmFormsHelper.php:496
3056
  msgid "Hide Option Label"
3057
  msgstr ""
3058
 
3059
+ #: classes/helpers/FrmFormsHelper.php:500
3060
  msgid "Required Class"
3061
  msgstr ""
3062
 
3063
+ #: classes/helpers/FrmFormsHelper.php:501
3064
  msgid "Add class name if field is required"
3065
  msgstr ""
3066
 
3067
+ #: classes/helpers/FrmFormsHelper.php:505
3068
  msgid "Error Class"
3069
  msgstr ""
3070
 
3071
+ #: classes/helpers/FrmFormsHelper.php:506
3072
  msgid "Add class name if field has an error on form submit"
3073
  msgstr ""
3074
 
3075
+ #: classes/helpers/FrmFormsHelper.php:511
3076
  #: classes/views/frm-forms/new-form-overlay.php:46
3077
  #: classes/views/frm-forms/new-form-overlay.php:47
3078
  msgid "Form Name"
3079
  msgstr ""
3080
 
3081
+ #: classes/helpers/FrmFormsHelper.php:519
3082
  #: classes/views/frm-forms/settings-advanced.php:20
3083
  msgid "Form Key"
3084
  msgstr ""
3085
 
3086
+ #: classes/helpers/FrmFormsHelper.php:523
3087
  msgid "Delete Entry Link"
3088
  msgstr ""
3089
 
3090
+ #: classes/helpers/FrmFormsHelper.php:528
3091
  msgid "Button Label"
3092
  msgstr ""
3093
 
3094
+ #: classes/helpers/FrmFormsHelper.php:532
3095
  msgid "Button Hook"
3096
  msgstr ""
3097
 
3098
+ #: classes/helpers/FrmFormsHelper.php:998
3099
  msgid "Create Form from Template"
3100
  msgstr ""
3101
 
3102
+ #: classes/helpers/FrmFormsHelper.php:1004
3103
  msgid "Duplicate Form"
3104
  msgstr ""
3105
 
3106
+ #: classes/helpers/FrmFormsHelper.php:1125
3107
  msgid "Restore from Trash"
3108
  msgstr ""
3109
 
3110
+ #: classes/helpers/FrmFormsHelper.php:1126
3111
  #: classes/helpers/FrmFormsListHelper.php:124
3112
  msgid "Restore"
3113
  msgstr ""
3114
 
3115
+ #: classes/helpers/FrmFormsHelper.php:1130
3116
  msgid "Move Form to Trash"
3117
  msgstr ""
3118
 
3119
+ #: classes/helpers/FrmFormsHelper.php:1131
3120
+ #: classes/helpers/FrmFormsHelper.php:1217
3121
  #: classes/helpers/FrmFormsListHelper.php:158
3122
  msgid "Trash"
3123
  msgstr ""
3124
 
3125
+ #: classes/helpers/FrmFormsHelper.php:1134
3126
  msgid "Do you want to move this form to the trash?"
3127
  msgstr ""
3128
 
3129
+ #: classes/helpers/FrmFormsHelper.php:1137
3130
  #: classes/helpers/FrmFormsListHelper.php:128
3131
  msgid "Delete Permanently"
3132
  msgstr ""
3133
 
3134
+ #: classes/helpers/FrmFormsHelper.php:1140
3135
  msgid "Are you sure you want to delete this form and all its entries?"
3136
  msgstr ""
3137
 
3138
+ #: classes/helpers/FrmFormsHelper.php:1142
3139
  msgid "This will permanently delete the form and all its entries. This is irreversible. Are you sure you want to continue?"
3140
  msgstr ""
3141
 
3142
+ #: classes/helpers/FrmFormsHelper.php:1153
3143
  #: classes/models/FrmField.php:203
3144
  msgid "Total"
3145
  msgstr ""
3146
 
3147
+ #: classes/helpers/FrmFormsHelper.php:1154
3148
  msgid "Add this to a read-only field to display the text in bold without a border or background."
3149
  msgstr ""
3150
 
3151
+ #: classes/helpers/FrmFormsHelper.php:1157
3152
  msgid "Big Total"
3153
  msgstr ""
3154
 
3155
+ #: classes/helpers/FrmFormsHelper.php:1158
3156
  msgid "Add this to a read-only field to display the text in large, bold text without a border or background."
3157
  msgstr ""
3158
 
3159
+ #: classes/helpers/FrmFormsHelper.php:1161
3160
  msgid "Scroll Box"
3161
  msgstr ""
3162
 
3163
+ #: classes/helpers/FrmFormsHelper.php:1162
3164
  msgid "If you have many checkbox or radio button options, you may add this class to allow your user to easily scroll through the options. Or add a scrolling area around content in an HTML field."
3165
  msgstr ""
3166
 
3167
+ #: classes/helpers/FrmFormsHelper.php:1165
3168
  #: classes/models/fields/FrmFieldName.php:36
3169
  msgid "First"
3170
  msgstr ""
3171
 
3172
+ #: classes/helpers/FrmFormsHelper.php:1166
3173
  msgid "Add this to the first field in each row along with a width. ie frm_first frm4"
3174
  msgstr ""
3175
 
3176
+ #: classes/helpers/FrmFormsHelper.php:1168
3177
  #: classes/helpers/FrmStylesHelper.php:113
3178
  msgid "Right"
3179
  msgstr ""
3180
 
3181
+ #: classes/helpers/FrmFormsHelper.php:1169
3182
  msgid "First Grid Row"
3183
  msgstr ""
3184
 
3185
+ #: classes/helpers/FrmFormsHelper.php:1170
3186
  msgid "Even Grid Row"
3187
  msgstr ""
3188
 
3189
+ #: classes/helpers/FrmFormsHelper.php:1171
3190
  msgid "Odd Grid Row"
3191
  msgstr ""
3192
 
3193
+ #: classes/helpers/FrmFormsHelper.php:1173
3194
  msgid "Color Block"
3195
  msgstr ""
3196
 
3197
+ #: classes/helpers/FrmFormsHelper.php:1174
3198
  msgid "Add a background color to the field or section."
3199
  msgstr ""
3200
 
3201
+ #: classes/helpers/FrmFormsHelper.php:1177
3202
  msgid "Capitalize"
3203
  msgstr ""
3204
 
3205
+ #: classes/helpers/FrmFormsHelper.php:1178
3206
  msgid "Automatically capitalize the first letter in each word."
3207
  msgstr ""
3208
 
3209
+ #: classes/helpers/FrmFormsHelper.php:1218
3210
  msgid "Published"
3211
  msgstr ""
3212
 
3213
+ #: classes/helpers/FrmFormsHelper.php:1302
3214
  msgid "Create Form"
3215
  msgstr ""
3216
 
3217
+ #: classes/helpers/FrmFormsHelper.php:1310
3218
  msgid "Renew"
3219
  msgstr ""
3220
 
3221
+ #: classes/helpers/FrmFormsHelper.php:1374
3222
  msgid "License plan required:"
3223
  msgstr ""
3224
 
3225
+ #: classes/helpers/FrmFormsHelper.php:1488
3226
  msgid "Is this intentional?"
3227
  msgstr ""
3228
 
3229
  #. translators: %s: the name of a single parameter in the redirect URL
3230
+ #: classes/helpers/FrmFormsHelper.php:1498
3231
  msgid "The redirect URL is using the parameter \"%s\", which is reserved by WordPress. "
3232
  msgstr ""
3233
 
3234
  #. translators: %s: the names of two or more parameters in the redirect URL, separated by commas
3235
+ #: classes/helpers/FrmFormsHelper.php:1504
3236
  msgid "The redirect URL is using the parameters \"%s\", which are reserved by WordPress. "
3237
  msgstr ""
3238
 
3892
  msgid "There was a problem with your submission. Please try again."
3893
  msgstr ""
3894
 
3895
+ #: classes/models/FrmEntryValidate.php:255
3896
+ #: classes/models/FrmEntryValidate.php:259
3897
  msgid "Your entry appears to be spam!"
3898
  msgstr ""
3899
 
3900
+ #: classes/models/FrmEntryValidate.php:257
3901
  msgid "Your entry appears to be blocked spam!"
3902
  msgstr ""
3903
 
4484
  #: classes/views/frm-fields/back-end/inline-modal.php:7
4485
  #: classes/views/frm-fields/back-end/inline-modal.php:8
4486
  #: classes/views/shared/admin-header.php:19
4487
+ #: js/formidable_admin.js:7641
4488
  msgid "Close"
4489
  msgstr ""
4490
 
4768
  msgstr ""
4769
 
4770
  #: classes/views/frm-form-actions/form_action.php:21
4771
+ #: js/formidable_admin.js:2060
4772
  msgid "Duplicate"
4773
  msgstr ""
4774
 
4893
  msgstr ""
4894
 
4895
  #: classes/views/frm-forms/add_field.php:29
4896
+ #: js/formidable_admin.js:1238
4897
+ #: js/formidable_admin.js:1241
4898
+ #: js/formidable_admin.js:1998
4899
  msgid "More Options"
4900
  msgstr ""
4901
 
6264
  msgid "Error"
6265
  msgstr ""
6266
 
6267
+ #: js/formidable_admin.js:1200
6268
+ msgid "Set Row Layout"
6269
+ msgstr ""
6270
+
6271
+ #: js/formidable_admin.js:1206
6272
+ msgid "Move Field Group"
6273
+ msgstr ""
6274
+
6275
+ #: js/formidable_admin.js:2026
6276
  msgid "Field settings"
6277
  msgstr ""
6278
 
6279
+ #: js/formidable_admin.js:2054
6280
  msgid "Delete Group"
6281
  msgstr ""
6282
 
6283
+ #: js/formidable_admin.js:2060
6284
  msgid "Duplicate Group"
6285
  msgstr ""
6286
 
6287
+ #: js/formidable_admin.js:3377
6288
  msgid "Custom layout"
6289
  msgstr ""
6290
 
6291
+ #: js/formidable_admin.js:3400
6292
  msgid "Break into rows"
6293
  msgstr ""
6294
 
6295
+ #: js/formidable_admin.js:3410
6296
  msgid "Row Layout"
6297
  msgstr ""
6298
 
6299
+ #: js/formidable_admin.js:3665
6300
  msgid "Enter number of columns for each field"
6301
  msgstr ""
6302
 
6303
+ #: js/formidable_admin.js:3669
6304
  msgid "Layouts are based on a 12-column grid system"
6305
  msgstr ""
6306
 
6307
+ #: js/formidable_admin.js:3685
6308
  msgid "Save"
6309
  msgstr ""
6310
 
6311
+ #: js/formidable_admin.js:3986
6312
  msgid "Merge into row"
6313
  msgstr ""
6314
 
6315
  #. translators: %1$s: Number of fields that are selected to be deleted.
6316
+ #: js/formidable_admin.js:4074
6317
  msgid "Are you sure you want to delete these %1$s selected fields?"
6318
  msgstr ""
6319
 
6320
+ #: js/formidable_admin.js:7633
6321
  msgid "Save and Reload"
6322
  msgstr ""
readme.txt CHANGED
@@ -5,7 +5,7 @@ Tags: forms, contact form, form builder, survey, form maker, form creator, paypa
5
  Requires at least: 5.0
6
  Tested up to: 5.8.1
7
  Requires PHP: 5.6
8
- Stable tag: 5.0.05
9
 
10
  The most advanced WordPress forms plugin. Go beyond contact forms with our drag & drop form builder for surveys, quizzes, and more.
11
 
@@ -440,6 +440,16 @@ Using our Zapier integration, you can easily connect Formidable with over 1000+
440
  See all <a href="https://zapier.com/apps/formidable/integrations">Formidable Zapier Integrations</a>.
441
 
442
  == Changelog ==
 
 
 
 
 
 
 
 
 
 
443
  = 5.0.05 =
444
  * Deprecated the option to disable CSS Grids in form layouts.
445
  * Fix: JavaScript validation was failing to validate for many fields with custom patterns because extra conflicting HTML was sometimes being added to the check.
@@ -479,8 +489,4 @@ See all <a href="https://zapier.com/apps/formidable/integrations">Formidable Zap
479
  * Fix: The confirmation pop up title was displaying as inline when trying to delete a section.
480
  * Fix: Updated styling for new fields that are about to be dropped into a form.
481
 
482
- = 4.11.05 =
483
- * New: Improved support for importing grid and table view content.
484
- * Fix: The update and preview buttons in the form builder would wrap to two lines for some longer translations including German and Dutch.
485
-
486
  <a href="https://raw.githubusercontent.com/Strategy11/formidable-forms/master/changelog.txt">See changelog for all versions</a>
5
  Requires at least: 5.0
6
  Tested up to: 5.8.1
7
  Requires PHP: 5.6
8
+ Stable tag: 5.0.06
9
 
10
  The most advanced WordPress forms plugin. Go beyond contact forms with our drag & drop form builder for surveys, quizzes, and more.
11
 
440
  See all <a href="https://zapier.com/apps/formidable/integrations">Formidable Zapier Integrations</a>.
441
 
442
  == Changelog ==
443
+ = 5.0.06 =
444
+ - New: Added new frm_export_csv_headings filter to make it easier to add and remove exported CSV headings.
445
+ - New: When clicking an inactive action that requires pro, the required pro license will be properly shown in the popup.
446
+ - New: Added new frm_fields_to_validate, frm_submit_button_html, and frm_fields_for_csv_export filters.
447
+ - Fix: Improved the accessibility of field group dropdowns and field group row layout pop ups.
448
+ - Fix: The caret icon on the dropdown was not positioned properly for the Formidable Gutenberg block.
449
+ - Fix: When clicking the Formidable media button in Elementor, the pop up was appearing as empty with no content.
450
+ - Fix: Required radio, checkbox, and name fields were not including the aria-required="true" attribute or the aria-invalid attribute when JavaScript validation was enabled.
451
+ - Fix: Required name fields were not showing error messages when JavaScript validation was enabled.
452
+
453
  = 5.0.05 =
454
  * Deprecated the option to disable CSS Grids in form layouts.
455
  * Fix: JavaScript validation was failing to validate for many fields with custom patterns because extra conflicting HTML was sometimes being added to the check.
489
  * Fix: The confirmation pop up title was displaying as inline when trying to delete a section.
490
  * Fix: Updated styling for new fields that are about to be dropped into a form.
491
 
 
 
 
 
492
  <a href="https://raw.githubusercontent.com/Strategy11/formidable-forms/master/changelog.txt">See changelog for all versions</a>