Formidable Forms – Form Builder for WordPress - Version 5.0.02

Version Description

  • New: Field groups can now be duplicated and deleted.
Download this release

Release Info

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

Code changes from version 5.0.01 to 5.0.02

Files changed (62) hide show
  1. classes/controllers/FrmFormActionsController.php +0 -0
  2. classes/controllers/FrmHooksController.php +0 -0
  3. classes/controllers/FrmStylesController.php +0 -0
  4. classes/helpers/FrmAppHelper.php +1 -1
  5. classes/helpers/FrmEntriesListHelper.php +0 -0
  6. classes/helpers/FrmFormActionsHelper.php +0 -0
  7. classes/helpers/FrmFormsListHelper.php +0 -0
  8. classes/helpers/FrmStylesHelper.php +0 -0
  9. classes/models/FrmFormAction.php +0 -0
  10. classes/models/FrmStyle.php +0 -0
  11. classes/views/frm-entries/_sidebar-shared-pub.php +0 -0
  12. classes/views/frm-entries/show.php +0 -0
  13. classes/views/frm-entries/sidebar-shared.php +0 -0
  14. classes/views/frm-entries/sidebar-show.php +0 -0
  15. classes/views/frm-fields/show-build.php +0 -0
  16. classes/views/frm-form-actions/_action_inside.php +0 -0
  17. classes/views/frm-form-actions/_email_settings.php +0 -0
  18. classes/views/frm-form-actions/default_actions.php +0 -0
  19. classes/views/frm-form-actions/email_action.php +0 -0
  20. classes/views/frm-form-actions/form_action.php +0 -0
  21. classes/views/frm-forms/_publish_box.php +0 -0
  22. classes/views/frm-forms/add_field.php +4 -15
  23. classes/views/frm-forms/shortcode_opts.php +0 -0
  24. classes/views/shared/mb_adv_info.php +0 -0
  25. classes/views/styles/_buttons.php +0 -0
  26. classes/views/styles/_check-box-radio-fields.php +0 -0
  27. classes/views/styles/_field-colors.php +0 -0
  28. classes/views/styles/_field-description.php +0 -0
  29. classes/views/styles/_field-labels.php +0 -0
  30. classes/views/styles/_field-sizes.php +0 -0
  31. classes/views/styles/_form-messages.php +0 -0
  32. classes/views/styles/_general.php +0 -0
  33. classes/views/styles/_sample_form.php +0 -0
  34. classes/views/styles/custom_css.php +0 -0
  35. classes/views/styles/manage.php +0 -0
  36. classes/views/styles/show.php +0 -0
  37. classes/views/xml/posts_xml.php +0 -0
  38. css/_single_theme.css.php +0 -0
  39. css/codemirror.css +0 -0
  40. css/custom_theme.css.php +0 -0
  41. css/font_icons.css +0 -0
  42. css/frm_admin.css +2 -0
  43. formidable.php +1 -1
  44. js/codemirror/codemirror.js +0 -0
  45. js/codemirror/css.js +0 -0
  46. js/formidable_admin.js +200 -9
  47. js/formidable_admin_global.js +0 -0
  48. languages/formidable-az_AZ.mo +0 -0
  49. languages/formidable-az_AZ.po +0 -0
  50. languages/formidable-hu_HU.mo +0 -0
  51. languages/formidable-hu_HU.po +0 -0
  52. languages/formidable-it_IT.po +0 -0
  53. languages/formidable-ja.mo +0 -0
  54. languages/formidable-ja.po +0 -0
  55. languages/formidable-js-strings.php +0 -59
  56. languages/formidable-nb_NO.mo +0 -0
  57. languages/formidable-nb_NO.po +0 -0
  58. languages/formidable-pl_PL.po +0 -0
  59. languages/formidable-ro_RO.mo +0 -0
  60. languages/formidable-ro_RO.po +0 -0
  61. languages/formidable.pot +29 -20
  62. readme.txt +4 -6
classes/controllers/FrmFormActionsController.php CHANGED
File without changes
classes/controllers/FrmHooksController.php CHANGED
File without changes
classes/controllers/FrmStylesController.php CHANGED
File without changes
classes/helpers/FrmAppHelper.php CHANGED
@@ -11,7 +11,7 @@ class FrmAppHelper {
11
  /**
12
  * @since 2.0
13
  */
14
- public static $plug_version = '5.0.01';
15
 
16
  /**
17
  * @since 1.07.02
11
  /**
12
  * @since 2.0
13
  */
14
+ public static $plug_version = '5.0.02';
15
 
16
  /**
17
  * @since 1.07.02
classes/helpers/FrmEntriesListHelper.php CHANGED
File without changes
classes/helpers/FrmFormActionsHelper.php CHANGED
File without changes
classes/helpers/FrmFormsListHelper.php CHANGED
File without changes
classes/helpers/FrmStylesHelper.php CHANGED
File without changes
classes/models/FrmFormAction.php CHANGED
File without changes
classes/models/FrmStyle.php CHANGED
File without changes
classes/views/frm-entries/_sidebar-shared-pub.php CHANGED
File without changes
classes/views/frm-entries/show.php CHANGED
File without changes
classes/views/frm-entries/sidebar-shared.php CHANGED
File without changes
classes/views/frm-entries/sidebar-show.php CHANGED
File without changes
classes/views/frm-fields/show-build.php CHANGED
File without changes
classes/views/frm-form-actions/_action_inside.php CHANGED
File without changes
classes/views/frm-form-actions/_email_settings.php CHANGED
File without changes
classes/views/frm-form-actions/default_actions.php CHANGED
File without changes
classes/views/frm-form-actions/email_action.php CHANGED
File without changes
classes/views/frm-form-actions/form_action.php CHANGED
File without changes
classes/views/frm-forms/_publish_box.php CHANGED
File without changes
classes/views/frm-forms/add_field.php CHANGED
@@ -3,8 +3,8 @@ if ( ! defined( 'ABSPATH' ) ) {
3
  die( 'You are not allowed to call this page directly.' );
4
  }
5
  ?>
6
- <li id="frm_field_id_<?php echo esc_attr( $field['id'] ); ?>" class="<?php echo esc_attr( $li_classes ); ?>" data-fid="<?php echo esc_attr( $field['id'] ); ?>" data-formid="<?php echo esc_attr( 'divider' == $field['type'] ? $field['form_select'] : $field['form_id'] ); ?>" data-ftype="<?php echo esc_attr( $display['type'] ); ?>" data-type="<?php echo esc_attr( $field['type'] ); ?>">
7
- <?php if ( $field['type'] == 'divider' ) { ?>
8
  <div class="divider_section_only">
9
  <?php } ?>
10
 
@@ -29,18 +29,7 @@ if ( ! defined( 'ABSPATH' ) ) {
29
  <a href="#" class="frm_bstooltip frm-hover-icon frm-dropdown-toggle dropdown-toggle" title="<?php esc_attr_e( 'More Options', 'formidable' ); ?>" data-toggle="dropdown" data-container="body">
30
  <?php FrmAppHelper::icon_by_class( 'frm_icon_font frm_thick_more_vert_icon' ); ?>
31
  </a>
32
- <ul class="frm-dropdown-menu" role="menu">
33
- <li class="frm_dropdown_li frm_delete_field" href="#">
34
- <?php FrmAppHelper::icon_by_class( 'frm_icon_font frm_delete_icon' ); ?> <?php esc_html_e( 'Delete', 'formidable' ); ?>
35
- </li>
36
- <li class="frm_dropdown_li frm_clone_field" href="#">
37
- <?php FrmAppHelper::icon_by_class( 'frm_icon_font frm_clone_icon' ); ?> <?php esc_html_e( 'Duplicate', 'formidable' ); ?>
38
- </li>
39
- <hr>
40
- <li class="frm_dropdown_li frm_select_field">
41
- <?php FrmAppHelper::icon_by_class( 'frm_icon_font frm_settings_icon' ); ?> <?php esc_html_e( 'Field settings', 'formidable' ); ?>
42
- </li>
43
- </ul>
44
  </div>
45
 
46
  </div>
@@ -59,7 +48,7 @@ if ( ! defined( 'ABSPATH' ) ) {
59
  <?php $field_obj->show_on_form_builder(); ?>
60
  <div class="clear"></div>
61
  </div>
62
- <?php if ( $display['description'] || in_array( $field['type'], array( 'address', 'credit_card' ) ) ) { ?>
63
  <div class="frm_description" id="field_description_<?php echo esc_attr( $field['id'] ); ?>">
64
  <?php echo FrmAppHelper::kses( force_balance_tags( $field['description'] ), 'all' ); // WPCS: XSS ok. ?>
65
  </div>
3
  die( 'You are not allowed to call this page directly.' );
4
  }
5
  ?>
6
+ <li id="frm_field_id_<?php echo esc_attr( $field['id'] ); ?>" class="<?php echo esc_attr( $li_classes ); ?>" data-fid="<?php echo esc_attr( $field['id'] ); ?>" data-formid="<?php echo esc_attr( 'divider' === $field['type'] ? $field['form_select'] : $field['form_id'] ); ?>" data-ftype="<?php echo esc_attr( $display['type'] ); ?>" data-type="<?php echo esc_attr( $field['type'] ); ?>">
7
+ <?php if ( $field['type'] === 'divider' ) { ?>
8
  <div class="divider_section_only">
9
  <?php } ?>
10
 
29
  <a href="#" class="frm_bstooltip frm-hover-icon frm-dropdown-toggle dropdown-toggle" title="<?php esc_attr_e( 'More Options', 'formidable' ); ?>" data-toggle="dropdown" data-container="body">
30
  <?php FrmAppHelper::icon_by_class( 'frm_icon_font frm_thick_more_vert_icon' ); ?>
31
  </a>
32
+ <ul class="frm-dropdown-menu" role="menu"></ul>
 
 
 
 
 
 
 
 
 
 
 
33
  </div>
34
 
35
  </div>
48
  <?php $field_obj->show_on_form_builder(); ?>
49
  <div class="clear"></div>
50
  </div>
51
+ <?php if ( $display['description'] || in_array( $field['type'], array( 'address', 'credit_card' ), true ) ) { ?>
52
  <div class="frm_description" id="field_description_<?php echo esc_attr( $field['id'] ); ?>">
53
  <?php echo FrmAppHelper::kses( force_balance_tags( $field['description'] ), 'all' ); // WPCS: XSS ok. ?>
54
  </div>
classes/views/frm-forms/shortcode_opts.php CHANGED
File without changes
classes/views/shared/mb_adv_info.php CHANGED
File without changes
classes/views/styles/_buttons.php CHANGED
File without changes
classes/views/styles/_check-box-radio-fields.php CHANGED
File without changes
classes/views/styles/_field-colors.php CHANGED
File without changes
classes/views/styles/_field-description.php CHANGED
File without changes
classes/views/styles/_field-labels.php CHANGED
File without changes
classes/views/styles/_field-sizes.php CHANGED
File without changes
classes/views/styles/_form-messages.php CHANGED
File without changes
classes/views/styles/_general.php CHANGED
File without changes
classes/views/styles/_sample_form.php CHANGED
File without changes
classes/views/styles/custom_css.php CHANGED
File without changes
classes/views/styles/manage.php CHANGED
File without changes
classes/views/styles/show.php CHANGED
File without changes
classes/views/xml/posts_xml.php CHANGED
File without changes
css/_single_theme.css.php CHANGED
File without changes
css/codemirror.css CHANGED
File without changes
css/custom_theme.css.php CHANGED
File without changes
css/font_icons.css CHANGED
File without changes
css/frm_admin.css CHANGED
@@ -6745,12 +6745,14 @@ ul .frm_col_two {
6745
  font-size: 15px;
6746
  }
6747
 
 
6748
  .frm-field-action-icons .frm-dropdown-menu .frm_dropdown_li {
6749
  padding: 5px 10px;
6750
  color: rgba(40, 47, 54, 0.85);
6751
  cursor: pointer;
6752
  }
6753
 
 
6754
  .frm-field-action-icons .frm-dropdown-menu .frm_dropdown_li:hover {
6755
  background: #F6F7FB;
6756
  }
6745
  font-size: 15px;
6746
  }
6747
 
6748
+ #frm_field_group_controls .frm-dropdown-menu .frm_dropdown_li,
6749
  .frm-field-action-icons .frm-dropdown-menu .frm_dropdown_li {
6750
  padding: 5px 10px;
6751
  color: rgba(40, 47, 54, 0.85);
6752
  cursor: pointer;
6753
  }
6754
 
6755
+ #frm_field_group_controls .frm-dropdown-menu .frm_dropdown_li:hover,
6756
  .frm-field-action-icons .frm-dropdown-menu .frm_dropdown_li:hover {
6757
  background: #F6F7FB;
6758
  }
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.01
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.02
6
  Plugin URI: https://formidableforms.com/
7
  Author URI: https://formidableforms.com/
8
  Author: Strategy11
js/codemirror/codemirror.js CHANGED
File without changes
js/codemirror/css.js CHANGED
File without changes
js/formidable_admin.js CHANGED
@@ -1160,10 +1160,7 @@ function frmAdminBuildJS() {
1160
 
1161
  controls = div();
1162
  controls.id = 'frm_field_group_controls';
1163
- controls.innerHTML = ''.concat(
1164
- '<span><svg class="frmsvg"><use xlink:href="#frm_field_group_layout_icon"></use></svg></span>',
1165
- '<span class="frm-move"><svg class="frmsvg"><use xlink:href="#frm_thick_move_icon"></use></svg></span>'
1166
- );
1167
  document.getElementById( 'frm_builder_page' ).appendChild( controls );
1168
  }
1169
 
@@ -1171,6 +1168,34 @@ function frmAdminBuildJS() {
1171
  controls.style.display = shouldShowControls ? 'block' : 'none';
1172
  }
1173
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1174
  function getSyncLayoutClass( layoutClasses, classToAdd ) {
1175
  return function( itemIndex ) {
1176
  var currentClassToAdd, length, layoutClassIndex, currentClass, activeLayoutClass, fieldId, layoutClassesInput;
@@ -1679,7 +1704,7 @@ function frmAdminBuildJS() {
1679
  }
1680
 
1681
  function duplicateField() {
1682
- var $field, fieldId, children;
1683
 
1684
  $field = jQuery( this ).closest( 'li.form-field' );
1685
 
@@ -1691,6 +1716,11 @@ function frmAdminBuildJS() {
1691
 
1692
  fieldId = $field.data( 'fid' );
1693
  children = fieldsInSection( fieldId );
 
 
 
 
 
1694
 
1695
  jQuery.ajax({
1696
  type: 'POST',
@@ -1703,12 +1733,28 @@ function frmAdminBuildJS() {
1703
  nonce: frmGlobal.nonce
1704
  },
1705
  success: function( msg ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1706
  if ( $field.siblings( 'li.form-field' ).length ) {
1707
  $field.after( msg );
1708
  syncLayoutClasses( $field );
1709
  } else {
1710
  $field.parent().parent().after( wrapFieldLi( msg ) );
1711
  }
 
1712
  updateFieldOrder();
1713
  afterAddField( msg, false );
1714
  }
@@ -1793,7 +1839,7 @@ function frmAdminBuildJS() {
1793
  maybeRemoveGroupHoverTarget();
1794
  }
1795
 
1796
- function onFieldActionDropdownShow() {
1797
  unselectFieldGroups();
1798
  // maybe offset the dropdown if it goes off of the right of the screen.
1799
  setTimeout(
@@ -1803,6 +1849,9 @@ function frmAdminBuildJS() {
1803
  if ( null === ul ) {
1804
  return;
1805
  }
 
 
 
1806
  $ul = jQuery( ul );
1807
  if ( $ul.offset().left > jQuery( window ).width() - $ul.outerWidth() ) {
1808
  ul.style.left = ( -$ul.outerWidth() ) + 'px';
@@ -1812,6 +1861,50 @@ function frmAdminBuildJS() {
1812
  );
1813
  }
1814
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1815
  function wrapFieldLi( li ) {
1816
  return jQuery( '<li>' )
1817
  .addClass( 'frm_field_box' )
@@ -2876,6 +2969,89 @@ function frmAdminBuildJS() {
2876
  this.closest( 'li.form-field' ).click();
2877
  }
2878
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2879
  function clickFieldGroupLayout() {
2880
  var hoverTarget, sizeOfFieldGroup, popupWrapper;
2881
 
@@ -3476,6 +3652,7 @@ function frmAdminBuildJS() {
3476
  } else {
3477
  // not multi-selecting
3478
  unselectFieldGroups();
 
3479
  }
3480
 
3481
  hoverTarget.classList.add( 'frm-selected-field-group' );
@@ -3487,7 +3664,7 @@ function frmAdminBuildJS() {
3487
 
3488
  function syncAfterMultiSelect( numberOfSelectedGroups ) {
3489
  clearSettingsBox( true ); // unselect any fields if one is selected.
3490
- if ( numberOfSelectedGroups >= 2 ) {
3491
  addFieldMultiselectPopup();
3492
  } else {
3493
  maybeRemoveMultiselectPopup();
@@ -3495,6 +3672,10 @@ function frmAdminBuildJS() {
3495
  maybeRemoveGroupHoverTarget();
3496
  }
3497
 
 
 
 
 
3498
  function unselectFieldGroups( event ) {
3499
  if ( 'undefined' !== typeof event ) {
3500
  if ( null !== event.originalEvent.target.closest( '#frm-show-fields' ) ) {
@@ -3577,6 +3758,9 @@ function frmAdminBuildJS() {
3577
  var selectedFieldGroups, totalFieldCount, length, index, fieldGroup;
3578
  selectedFieldGroups = document.querySelectorAll( '.frm-selected-field-group' );
3579
  length = selectedFieldGroups.length;
 
 
 
3580
  totalFieldCount = 0;
3581
  for ( index = 0; index < length; ++index ) {
3582
  fieldGroup = selectedFieldGroups[ index ];
@@ -3620,11 +3804,15 @@ function frmAdminBuildJS() {
3620
  }
3621
 
3622
  function deleteFieldGroupsClick() {
3623
- var fieldIdsToDelete, deleteOnConfirm;
3624
 
3625
  fieldIdsToDelete = getSelectedFieldIds();
3626
  deleteOnConfirm = getDeleteSelectedFieldGroupsOnConfirmFunction( fieldIdsToDelete );
3627
- document.getElementById( 'frm_field_multiselect_popup' ).remove();
 
 
 
 
3628
 
3629
  this.setAttribute( 'data-frmcaution', __( 'Heads up', 'formidable' ) );
3630
  /* translators: %1$s: Number of fields that are selected to be deleted. */
@@ -8376,6 +8564,8 @@ function frmAdminBuildJS() {
8376
  $newFields.on( 'click', 'input[type=radio], input[type=checkbox]', stopFieldFocus );
8377
  $newFields.on( 'click', '.frm_delete_field', clickDeleteField );
8378
  $newFields.on( 'click', '.frm_select_field', clickSelectField );
 
 
8379
  jQuery( document ).on( 'click', '#frm_field_group_controls > span:first-child', clickFieldGroupLayout );
8380
  jQuery( document ).on( 'click', '.frm-row-layout-option', handleFieldGroupLayoutOptionClick );
8381
  jQuery( document ).on( 'click', '.frm-merge-fields-into-row .frm-row-layout-option', handleFieldGroupLayoutOptionInsideMergeClick );
@@ -8394,6 +8584,7 @@ function frmAdminBuildJS() {
8394
  });
8395
  $newFields.on( 'mousemove', 'ul.frm_sorting', checkForMultiselectKeysOnMouseMove );
8396
  $newFields.on( 'show.bs.dropdown', '.frm-field-action-icons', onFieldActionDropdownShow );
 
8397
  $builderForm.on( 'click', '.frm_single_option a[data-removeid]', deleteFieldOption );
8398
  $builderForm.on( 'mousedown', '.frm_single_option input[type=radio]', maybeUncheckRadio );
8399
  $builderForm.on( 'focusin', '.frm_single_option input[type=text]', maybeClearOptText );
1160
 
1161
  controls = div();
1162
  controls.id = 'frm_field_group_controls';
1163
+ setFieldControlsHtml( controls );
 
 
 
1164
  document.getElementById( 'frm_builder_page' ).appendChild( controls );
1165
  }
1166
 
1168
  controls.style.display = shouldShowControls ? 'block' : 'none';
1169
  }
1170
 
1171
+ function setFieldControlsHtml( controls ) {
1172
+ controls.innerHTML = '<span><svg class="frmsvg"><use xlink:href="#frm_field_group_layout_icon"></use></svg></span>';
1173
+ controls.innerHTML += '<span class="frm-move"><svg class="frmsvg"><use xlink:href="#frm_thick_move_icon"></use></svg></span>';
1174
+ controls.appendChild( getFieldControlsDropdown() );
1175
+ }
1176
+
1177
+ function getFieldControlsDropdown() {
1178
+ var dropdown, trigger, ul;
1179
+
1180
+ dropdown = document.createElement( 'span' );
1181
+ dropdown.classList.add( 'dropdown' );
1182
+
1183
+ trigger = document.createElement( 'a' );
1184
+ trigger.classList.add( 'frm_bstooltip', 'frm-hover-icon', 'frm-dropdown-toggle', 'dropdown-toggle' );
1185
+ trigger.setAttribute( 'title', __( 'More Options', 'formidable' ) );
1186
+ trigger.setAttribute( 'data-toggle', 'dropdown' );
1187
+ trigger.setAttribute( 'data-container', 'body' );
1188
+ trigger.innerHTML = '<span><svg class="frmsvg"><use xlink:href="#frm_thick_more_vert_icon"></use></svg></span>';
1189
+ dropdown.appendChild( trigger );
1190
+
1191
+ ul = document.createElement( 'ul' );
1192
+ ul.classList.add( 'frm-dropdown-menu' );
1193
+ ul.setAttribute( 'role', 'menu' );
1194
+ dropdown.appendChild( ul );
1195
+
1196
+ return dropdown;
1197
+ }
1198
+
1199
  function getSyncLayoutClass( layoutClasses, classToAdd ) {
1200
  return function( itemIndex ) {
1201
  var currentClassToAdd, length, layoutClassIndex, currentClass, activeLayoutClass, fieldId, layoutClassesInput;
1704
  }
1705
 
1706
  function duplicateField() {
1707
+ var $field, fieldId, children, newRowId, fieldOrder;
1708
 
1709
  $field = jQuery( this ).closest( 'li.form-field' );
1710
 
1716
 
1717
  fieldId = $field.data( 'fid' );
1718
  children = fieldsInSection( fieldId );
1719
+ newRowId = this.getAttribute( 'frm-target-row-id' );
1720
+
1721
+ if ( null !== newRowId ) {
1722
+ fieldOrder = this.getAttribute( 'frm-field-order' );
1723
+ }
1724
 
1725
  jQuery.ajax({
1726
  type: 'POST',
1733
  nonce: frmGlobal.nonce
1734
  },
1735
  success: function( msg ) {
1736
+ var newRow;
1737
+
1738
+ if ( null !== newRowId ) {
1739
+ newRow = document.getElementById( newRowId );
1740
+ if ( null !== newRow ) {
1741
+ jQuery( newRow ).append( msg );
1742
+ if ( null !== fieldOrder ) {
1743
+ newRow.lastElementChild.setAttribute( 'frm-field-order', fieldOrder );
1744
+ }
1745
+ jQuery( newRow ).trigger( 'frm_added_duplicated_field_to_row' );
1746
+ afterAddField( msg, false );
1747
+ return;
1748
+ }
1749
+ }
1750
+
1751
  if ( $field.siblings( 'li.form-field' ).length ) {
1752
  $field.after( msg );
1753
  syncLayoutClasses( $field );
1754
  } else {
1755
  $field.parent().parent().after( wrapFieldLi( msg ) );
1756
  }
1757
+
1758
  updateFieldOrder();
1759
  afterAddField( msg, false );
1760
  }
1839
  maybeRemoveGroupHoverTarget();
1840
  }
1841
 
1842
+ function onFieldActionDropdownShow( isFieldGroup ) {
1843
  unselectFieldGroups();
1844
  // maybe offset the dropdown if it goes off of the right of the screen.
1845
  setTimeout(
1849
  if ( null === ul ) {
1850
  return;
1851
  }
1852
+ if ( 0 === ul.children.length ) {
1853
+ fillFieldActionDropdown( ul, true === isFieldGroup );
1854
+ }
1855
  $ul = jQuery( ul );
1856
  if ( $ul.offset().left > jQuery( window ).width() - $ul.outerWidth() ) {
1857
  ul.style.left = ( -$ul.outerWidth() ) + 'px';
1861
  );
1862
  }
1863
 
1864
+ function onFieldGroupActionDropdownShow() {
1865
+ onFieldActionDropdownShow( true );
1866
+ }
1867
+
1868
+ function fillFieldActionDropdown( ul, isFieldGroup ) {
1869
+ var classSuffix, options;
1870
+ classSuffix = isFieldGroup ? '_field_group' : '_field';
1871
+ options = [ getDeleteActionOption( isFieldGroup ), getDuplicateActionOption( isFieldGroup ) ];
1872
+ if ( ! isFieldGroup ) {
1873
+ options.push(
1874
+ { class: 'frm_select', icon: 'frm_settings_icon', label: __( 'Field settings', 'formidable' ) }
1875
+ );
1876
+ }
1877
+ options.forEach(
1878
+ function( option ) {
1879
+ var li, span;
1880
+ li = document.createElement( 'li' );
1881
+ li.classList.add( 'frm_dropdown_li', option.class + classSuffix );
1882
+ if ( 'frm_delete' === option.class ) {
1883
+ // delete using a confirmation that will cause a redirect if href isn't set to #.
1884
+ li.setAttribute( 'href', '#' );
1885
+ }
1886
+ span = document.createElement( 'span' );
1887
+ span.textContent = option.label;
1888
+ li.innerHTML = '<svg class="frmsvg"><use xlink:href="#' + option.icon + '"></use></svg>';
1889
+ li.appendChild( document.createTextNode( ' ' ) );
1890
+ li.appendChild( span );
1891
+ ul.appendChild( li );
1892
+ }
1893
+ );
1894
+ }
1895
+
1896
+ function getDeleteActionOption( isFieldGroup ) {
1897
+ var option = { class: 'frm_delete', icon: 'frm_delete_icon' };
1898
+ option.label = isFieldGroup ? __( 'Delete Group', 'formidable' ) : __( 'Delete', 'formidable' );
1899
+ return option;
1900
+ }
1901
+
1902
+ function getDuplicateActionOption( isFieldGroup ) {
1903
+ var option = { class: 'frm_clone', icon: 'frm_clone_icon' };
1904
+ option.label = isFieldGroup ? __( 'Duplicate Group', 'formidable' ) : __( 'Duplicate', 'formidable' );
1905
+ return option;
1906
+ }
1907
+
1908
  function wrapFieldLi( li ) {
1909
  return jQuery( '<li>' )
1910
  .addClass( 'frm_field_box' )
2969
  this.closest( 'li.form-field' ).click();
2970
  }
2971
 
2972
+ function clickDeleteFieldGroup() {
2973
+ var hoverTarget, decoy;
2974
+
2975
+ hoverTarget = document.querySelector( '.frm-field-group-hover-target' );
2976
+ if ( null === hoverTarget ) {
2977
+ return;
2978
+ }
2979
+
2980
+ hoverTarget.classList.add( 'frm-selected-field-group' );
2981
+
2982
+ decoy = document.createElement( 'div' );
2983
+ decoy.classList.add( 'frm-delete-field-groups', 'frm_hidden' );
2984
+ document.body.appendChild( decoy );
2985
+ decoy.click();
2986
+ }
2987
+
2988
+ function duplicateFieldGroup() {
2989
+ var hoverTarget, newRowId, $newRow, $fields, syncDetails, expectedLength, duplicatedCount, injectedCloneOptions;
2990
+
2991
+ hoverTarget = document.querySelector( '.frm-field-group-hover-target' );
2992
+
2993
+ if ( null === hoverTarget ) {
2994
+ return;
2995
+ }
2996
+
2997
+ newRowId = 'frm_field_group_' + getAutoId();
2998
+ $newRow = wrapFieldLi( '' );
2999
+ $newRowUl = $newRow.find( 'ul' );
3000
+ $newRowUl.attr( 'id', newRowId );
3001
+ $newRow.addClass( 'frm_hidden' );
3002
+ jQuery( hoverTarget ).closest( 'li.frm_field_box' ).after( $newRow );
3003
+
3004
+ $fields = getFieldsInRow( jQuery( hoverTarget ) );
3005
+ syncDetails = [];
3006
+ injectedCloneOptions = [];
3007
+
3008
+ expectedLength = $fields.length;
3009
+ duplicatedCount = 0;
3010
+
3011
+ $newRow.on(
3012
+ 'frm_added_duplicated_field_to_row',
3013
+ function() {
3014
+ var $duplicatedFields, index;
3015
+
3016
+ if ( expectedLength > ++duplicatedCount ) {
3017
+ return;
3018
+ }
3019
+
3020
+ $duplicatedFields = getFieldsInRow( $newRowUl );
3021
+
3022
+ injectedCloneOptions.forEach(
3023
+ function( cloneOption ) {
3024
+ cloneOption.remove();
3025
+ }
3026
+ );
3027
+
3028
+ for ( index = 0; index < expectedLength; ++index ) {
3029
+ $newRowUl.append(
3030
+ $newRowUl.children( 'li.form-field[frm-field-order="' + index + '"]' )
3031
+ );
3032
+ }
3033
+
3034
+ syncLayoutClasses( $duplicatedFields.first(), syncDetails );
3035
+ $newRow.removeClass( 'frm_hidden' );
3036
+ updateFieldOrder();
3037
+ }
3038
+ );
3039
+
3040
+ $fields.each(
3041
+ function( index ) {
3042
+ var cloneOption;
3043
+ cloneOption = document.createElement( 'li' );
3044
+ cloneOption.classList.add( 'frm_clone_field' );
3045
+ cloneOption.setAttribute( 'frm-target-row-id', newRowId );
3046
+ cloneOption.setAttribute( 'frm-field-order', index );
3047
+ this.appendChild( cloneOption );
3048
+ cloneOption.click();
3049
+ injectedCloneOptions.push( cloneOption );
3050
+ syncDetails.push( getSizeOfLayoutClass( getLayoutClassName( this.classList ) ) );
3051
+ }
3052
+ );
3053
+ }
3054
+
3055
  function clickFieldGroupLayout() {
3056
  var hoverTarget, sizeOfFieldGroup, popupWrapper;
3057
 
3652
  } else {
3653
  // not multi-selecting
3654
  unselectFieldGroups();
3655
+ numberOfSelectedGroups = 1;
3656
  }
3657
 
3658
  hoverTarget.classList.add( 'frm-selected-field-group' );
3664
 
3665
  function syncAfterMultiSelect( numberOfSelectedGroups ) {
3666
  clearSettingsBox( true ); // unselect any fields if one is selected.
3667
+ if ( numberOfSelectedGroups >= 2 || ( 1 === numberOfSelectedGroups && selectedGroupHasMultipleFields() ) ) {
3668
  addFieldMultiselectPopup();
3669
  } else {
3670
  maybeRemoveMultiselectPopup();
3672
  maybeRemoveGroupHoverTarget();
3673
  }
3674
 
3675
+ function selectedGroupHasMultipleFields() {
3676
+ return getFieldsInRow( jQuery( document.querySelector( '.frm-selected-field-group' ) ) ).length > 1;
3677
+ }
3678
+
3679
  function unselectFieldGroups( event ) {
3680
  if ( 'undefined' !== typeof event ) {
3681
  if ( null !== event.originalEvent.target.closest( '#frm-show-fields' ) ) {
3758
  var selectedFieldGroups, totalFieldCount, length, index, fieldGroup;
3759
  selectedFieldGroups = document.querySelectorAll( '.frm-selected-field-group' );
3760
  length = selectedFieldGroups.length;
3761
+ if ( 1 === length ) {
3762
+ return false;
3763
+ }
3764
  totalFieldCount = 0;
3765
  for ( index = 0; index < length; ++index ) {
3766
  fieldGroup = selectedFieldGroups[ index ];
3804
  }
3805
 
3806
  function deleteFieldGroupsClick() {
3807
+ var fieldIdsToDelete, deleteOnConfirm, multiselectPopup;
3808
 
3809
  fieldIdsToDelete = getSelectedFieldIds();
3810
  deleteOnConfirm = getDeleteSelectedFieldGroupsOnConfirmFunction( fieldIdsToDelete );
3811
+
3812
+ multiselectPopup = document.getElementById( 'frm_field_multiselect_popup' );
3813
+ if ( null !== multiselectPopup ) {
3814
+ multiselectPopup.remove();
3815
+ }
3816
 
3817
  this.setAttribute( 'data-frmcaution', __( 'Heads up', 'formidable' ) );
3818
  /* translators: %1$s: Number of fields that are selected to be deleted. */
8564
  $newFields.on( 'click', 'input[type=radio], input[type=checkbox]', stopFieldFocus );
8565
  $newFields.on( 'click', '.frm_delete_field', clickDeleteField );
8566
  $newFields.on( 'click', '.frm_select_field', clickSelectField );
8567
+ jQuery( document ).on( 'click', '.frm_delete_field_group', clickDeleteFieldGroup );
8568
+ jQuery( document ).on( 'click', '.frm_clone_field_group', duplicateFieldGroup );
8569
  jQuery( document ).on( 'click', '#frm_field_group_controls > span:first-child', clickFieldGroupLayout );
8570
  jQuery( document ).on( 'click', '.frm-row-layout-option', handleFieldGroupLayoutOptionClick );
8571
  jQuery( document ).on( 'click', '.frm-merge-fields-into-row .frm-row-layout-option', handleFieldGroupLayoutOptionInsideMergeClick );
8584
  });
8585
  $newFields.on( 'mousemove', 'ul.frm_sorting', checkForMultiselectKeysOnMouseMove );
8586
  $newFields.on( 'show.bs.dropdown', '.frm-field-action-icons', onFieldActionDropdownShow );
8587
+ jQuery( document ).on( 'show.bs.dropdown', '#frm_field_group_controls', onFieldGroupActionDropdownShow );
8588
  $builderForm.on( 'click', '.frm_single_option a[data-removeid]', deleteFieldOption );
8589
  $builderForm.on( 'mousedown', '.frm_single_option input[type=radio]', maybeUncheckRadio );
8590
  $builderForm.on( 'focusin', '.frm_single_option input[type=text]', maybeClearOptText );
js/formidable_admin_global.js CHANGED
File without changes
languages/formidable-az_AZ.mo CHANGED
File without changes
languages/formidable-az_AZ.po CHANGED
File without changes
languages/formidable-hu_HU.mo CHANGED
File without changes
languages/formidable-hu_HU.po CHANGED
File without changes
languages/formidable-it_IT.po CHANGED
File without changes
languages/formidable-ja.mo CHANGED
File without changes
languages/formidable-ja.po CHANGED
File without changes
languages/formidable-js-strings.php DELETED
@@ -1,59 +0,0 @@
1
- <?php
2
- /* THIS IS A GENERATED FILE. DO NOT EDIT DIRECTLY. */
3
- $generated_i18n_strings = array(
4
- // Reference: js/src/common/components/itemselect.js:26
5
- __( 'Select a %s', 'formidable' ),
6
-
7
- // Reference: js/src/common/components/itemselect.js:47
8
- __( 'Currently, there are no %s', 'formidable' ),
9
-
10
- // Reference: js/src/form/block.js:19
11
- __( 'Display a Form', 'formidable' ),
12
-
13
- // Reference: js/src/form/block.js:23
14
- __( 'contact forms', 'formidable' ),
15
-
16
- // Reference: js/src/form/block.js:35
17
- // Reference: js/src/form/calculator.js:43
18
- __( 'This site does not have any forms.', 'formidable' ),
19
-
20
- // Reference: js/src/form/calculator.js:27
21
- __( 'Display a Calculator Form', 'formidable' ),
22
-
23
- // Reference: js/src/form/calculator.js:55
24
- __( 'This site does not have any calculator forms.', 'formidable' ),
25
-
26
- // Reference: js/src/form/calculator.js:58
27
- __( 'Upgrade Formidable Forms.', 'formidable' ),
28
-
29
- // Reference: js/src/form/calculator.js:61
30
- __( 'Calculator Form', 'formidable' ),
31
-
32
- // Reference: js/src/form/formselect.js:23
33
- __( 'form', 'formidable' ),
34
-
35
- // Reference: js/src/form/formselect.js:24
36
- __( 'forms', 'formidable' ),
37
-
38
- // Reference: js/src/form/inspector.js:43
39
- __( 'Select Form', 'formidable' ),
40
-
41
- // Reference: js/src/form/inspector.js:57
42
- __( 'Go to form', 'formidable' ),
43
-
44
- // Reference: js/src/form/inspector.js:62
45
- __( 'Options', 'formidable' ),
46
-
47
- // Reference: js/src/form/inspector.js:66
48
- __( 'Show Form Title', 'formidable' ),
49
-
50
- // Reference: js/src/form/inspector.js:73
51
- __( 'Show Form Description', 'formidable' ),
52
-
53
- // Reference: js/src/form/inspector.js:80
54
- __( 'Minimize HTML', 'formidable' ),
55
-
56
- // Reference: js/src/form/inspector.js:88
57
- __( 'Shortcode', 'formidable' )
58
- );
59
- /* THIS IS THE END OF THE GENERATED FILE */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
languages/formidable-nb_NO.mo CHANGED
File without changes
languages/formidable-nb_NO.po CHANGED
File without changes
languages/formidable-pl_PL.po CHANGED
File without changes
languages/formidable-ro_RO.mo CHANGED
File without changes
languages/formidable-ro_RO.po CHANGED
File without changes
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.01\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-08-16T15:48:39+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"
@@ -1215,7 +1215,7 @@ msgstr ""
1215
  #: classes/views/frm-forms/new-form-overlay.php:139
1216
  #: classes/views/shared/admin-header.php:63
1217
  #: classes/views/shared/confirm-overlay.php:19
1218
- #: js/formidable_admin.js:3259
1219
  msgid "Cancel"
1220
  msgstr ""
1221
 
@@ -1242,7 +1242,7 @@ msgstr ""
1242
 
1243
  #: classes/helpers/FrmAppHelper.php:2514
1244
  #: classes/helpers/FrmListHelper.php:405
1245
- #: js/formidable_admin.js:3629
1246
  msgid "Heads up"
1247
  msgstr ""
1248
 
@@ -1750,7 +1750,7 @@ msgstr ""
1750
  #: classes/helpers/FrmFormsHelper.php:1134
1751
  #: classes/helpers/FrmFormsListHelper.php:133
1752
  #: classes/views/frm-form-actions/form_action.php:25
1753
- #: classes/views/frm-forms/add_field.php:34
1754
  msgid "Delete"
1755
  msgstr ""
1756
 
@@ -4722,7 +4722,7 @@ msgid "Conditional emails"
4722
  msgstr ""
4723
 
4724
  #: classes/views/frm-form-actions/form_action.php:21
4725
- #: classes/views/frm-forms/add_field.php:37
4726
  msgid "Duplicate"
4727
  msgstr ""
4728
 
@@ -4847,18 +4847,15 @@ msgid "Move Field"
4847
  msgstr ""
4848
 
4849
  #: classes/views/frm-forms/add_field.php:29
 
4850
  msgid "More Options"
4851
  msgstr ""
4852
 
4853
- #: classes/views/frm-forms/add_field.php:41
4854
- msgid "Field settings"
4855
- msgstr ""
4856
-
4857
- #: classes/views/frm-forms/add_field.php:54
4858
  msgid "(Collapsed)"
4859
  msgstr ""
4860
 
4861
- #: classes/views/frm-forms/add_field.php:90
4862
  #: classes/views/frm-forms/form.php:55
4863
  msgid "Add Fields Here"
4864
  msgstr ""
@@ -6220,35 +6217,47 @@ msgstr ""
6220
  msgid "Error"
6221
  msgstr ""
6222
 
6223
- #: js/formidable_admin.js:2972
 
 
 
 
 
 
 
 
 
 
 
 
6224
  msgid "Custom layout"
6225
  msgstr ""
6226
 
6227
- #: js/formidable_admin.js:2986
6228
  msgid "Break into rows"
6229
  msgstr ""
6230
 
6231
- #: js/formidable_admin.js:2995
6232
  msgid "Row Layout"
6233
  msgstr ""
6234
 
6235
- #: js/formidable_admin.js:3244
6236
  msgid "Enter number of columns for each field"
6237
  msgstr ""
6238
 
6239
- #: js/formidable_admin.js:3248
6240
  msgid "Layouts are based on a 12-column grid system"
6241
  msgstr ""
6242
 
6243
- #: js/formidable_admin.js:3264
6244
  msgid "Save"
6245
  msgstr ""
6246
 
6247
- #: js/formidable_admin.js:3550
6248
  msgid "Merge into row"
6249
  msgstr ""
6250
 
6251
  #. translators: %1$s: Number of fields that are selected to be deleted.
6252
- #: js/formidable_admin.js:3631
6253
  msgid "Are you sure you want to delete these %1$s selected fields?"
6254
  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.02\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-08-25T17:01:50+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"
1215
  #: classes/views/frm-forms/new-form-overlay.php:139
1216
  #: classes/views/shared/admin-header.php:63
1217
  #: classes/views/shared/confirm-overlay.php:19
1218
+ #: js/formidable_admin.js:3435
1219
  msgid "Cancel"
1220
  msgstr ""
1221
 
1242
 
1243
  #: classes/helpers/FrmAppHelper.php:2514
1244
  #: classes/helpers/FrmListHelper.php:405
1245
+ #: js/formidable_admin.js:3817
1246
  msgid "Heads up"
1247
  msgstr ""
1248
 
1750
  #: classes/helpers/FrmFormsHelper.php:1134
1751
  #: classes/helpers/FrmFormsListHelper.php:133
1752
  #: classes/views/frm-form-actions/form_action.php:25
1753
+ #: js/formidable_admin.js:1898
1754
  msgid "Delete"
1755
  msgstr ""
1756
 
4722
  msgstr ""
4723
 
4724
  #: classes/views/frm-form-actions/form_action.php:21
4725
+ #: js/formidable_admin.js:1904
4726
  msgid "Duplicate"
4727
  msgstr ""
4728
 
4847
  msgstr ""
4848
 
4849
  #: classes/views/frm-forms/add_field.php:29
4850
+ #: js/formidable_admin.js:1185
4851
  msgid "More Options"
4852
  msgstr ""
4853
 
4854
+ #: classes/views/frm-forms/add_field.php:43
 
 
 
 
4855
  msgid "(Collapsed)"
4856
  msgstr ""
4857
 
4858
+ #: classes/views/frm-forms/add_field.php:79
4859
  #: classes/views/frm-forms/form.php:55
4860
  msgid "Add Fields Here"
4861
  msgstr ""
6217
  msgid "Error"
6218
  msgstr ""
6219
 
6220
+ #: js/formidable_admin.js:1874
6221
+ msgid "Field settings"
6222
+ msgstr ""
6223
+
6224
+ #: js/formidable_admin.js:1898
6225
+ msgid "Delete Group"
6226
+ msgstr ""
6227
+
6228
+ #: js/formidable_admin.js:1904
6229
+ msgid "Duplicate Group"
6230
+ msgstr ""
6231
+
6232
+ #: js/formidable_admin.js:3148
6233
  msgid "Custom layout"
6234
  msgstr ""
6235
 
6236
+ #: js/formidable_admin.js:3162
6237
  msgid "Break into rows"
6238
  msgstr ""
6239
 
6240
+ #: js/formidable_admin.js:3171
6241
  msgid "Row Layout"
6242
  msgstr ""
6243
 
6244
+ #: js/formidable_admin.js:3420
6245
  msgid "Enter number of columns for each field"
6246
  msgstr ""
6247
 
6248
+ #: js/formidable_admin.js:3424
6249
  msgid "Layouts are based on a 12-column grid system"
6250
  msgstr ""
6251
 
6252
+ #: js/formidable_admin.js:3440
6253
  msgid "Save"
6254
  msgstr ""
6255
 
6256
+ #: js/formidable_admin.js:3731
6257
  msgid "Merge into row"
6258
  msgstr ""
6259
 
6260
  #. translators: %1$s: Number of fields that are selected to be deleted.
6261
+ #: js/formidable_admin.js:3819
6262
  msgid "Are you sure you want to delete these %1$s selected fields?"
6263
  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
7
  Requires PHP: 5.6
8
- Stable tag: 5.0.01
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,9 @@ 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.01 =
444
  * New: Updated styling and icons in the back end builder.
445
  * New: Added search to form fields in the builder to make finding a specific field easier.
@@ -475,9 +478,4 @@ See all <a href="https://zapier.com/apps/formidable/integrations">Formidable Zap
475
  = 4.11.02 =
476
  * New: The padding for descriptions can now be customized when editing styles.
477
 
478
- = 4.11.01 =
479
- * New: Added a new frm_duplicate_check_val filter for customizing the duplicate entry check. This can be used to remove IP to help prevent duplicate entries for longer periods of time when using frm_time_to_check_duplicates filter. For an example see https://formidableforms.com/knowledgebase/frm_duplicate_check_val/.
480
- * New: Added visibility option to the Name field.
481
- * Fix: The honeypot setting would still appear as on after it was turned off.
482
-
483
  <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
7
  Requires PHP: 5.6
8
+ Stable tag: 5.0.02
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.02 =
444
+ * New: Field groups can now be duplicated and deleted.
445
+
446
  = 5.0.01 =
447
  * New: Updated styling and icons in the back end builder.
448
  * New: Added search to form fields in the builder to make finding a specific field easier.
478
  = 4.11.02 =
479
  * New: The padding for descriptions can now be customized when editing styles.
480
 
 
 
 
 
 
481
  <a href="https://raw.githubusercontent.com/Strategy11/formidable-forms/master/changelog.txt">See changelog for all versions</a>