Form builder to get in touch with visitors, grow your email list and collect payments — Happyforms - Version 1.16.1

Version Description

  • New feature: "Bulk Add Choices" control for easily adding long lists of choices to Radio, Checkbox and Dropdown fields.
Download this release

Release Info

Developer happyforms
Plugin Icon 128x128 Form builder to get in touch with visitors, grow your email list and collect payments — Happyforms
Version 1.16.1
Comparing to
See all releases

Code changes from version 1.16.0 to 1.16.1

core/assets/css/customize.css CHANGED
@@ -273,7 +273,7 @@ span.members-only {
273
  display: none;
274
  }
275
 
276
- .happyforms-email-view.has-email.allow-abandoned-resume #customize-control-abandoned_resume_send_alert_email,
277
  .has-email #customize-control-alert_email_reply_to,
278
  #customize-control-receive_email_alerts.checked ~ #customize-control-owner_attach_pdf,
279
  .has-email #customize-control-send_confirmation_email.checked ~ #customize-control-attach_pdf {
@@ -571,8 +571,7 @@ a.happyforms-form-part-remove:hover {
571
  .happyforms-setup-view #customize-control-alert_email_subject,
572
  .happyforms-setup-view .customize-control[id*='customize-control-redirect']:not(#customize-control-redirect_on_complete):not(#customize-control-redirect_blank),
573
  .happyforms-setup-view .customize-control[id*='customize-control-captcha_']:not(#customize-control-captcha_label),
574
- .happyforms-setup-view #customize-control-email_mark_and_reply,
575
- .happyforms-setup-view #customize-control-alert_email_attachment_links {
576
  padding-bottom: 5px;
577
  border-bottom: 0;
578
  }
@@ -907,7 +906,7 @@ body.adding-happyforms-parts #customize-preview iframe {
907
  display: none;
908
  }
909
 
910
- .happyforms-part-widget .options h3 {
911
  margin-top: 8px;
912
  margin-bottom: 10px;
913
  display: none;
@@ -921,7 +920,7 @@ body.adding-happyforms-parts #customize-preview iframe {
921
  display: none;
922
  }
923
 
924
- .happyforms-part-widget .options ul:empty ~ h3,
925
  .happyforms-part-widget .options ul:empty ~ p {
926
  display: block;
927
  }
@@ -932,7 +931,6 @@ body.adding-happyforms-parts #customize-preview iframe {
932
 
933
  textarea.option-import-area {
934
  height: 125px;
935
- resize: none;
936
  }
937
 
938
  .happyforms-part-widget .links.mode-import {
@@ -1886,3 +1884,8 @@ ul.happyforms-parts-list li[data-part-type="rank_order"] {
1886
  .happyforms-item-choice-widget-title .choice-in-widget-title {
1887
  color: #646970;
1888
  }
 
 
 
 
 
273
  display: none;
274
  }
275
 
276
+ .happyforms-email-view.has-email.allow-resume #customize-control-abandoned_resume_send_alert_email,
277
  .has-email #customize-control-alert_email_reply_to,
278
  #customize-control-receive_email_alerts.checked ~ #customize-control-owner_attach_pdf,
279
  .has-email #customize-control-send_confirmation_email.checked ~ #customize-control-attach_pdf {
571
  .happyforms-setup-view #customize-control-alert_email_subject,
572
  .happyforms-setup-view .customize-control[id*='customize-control-redirect']:not(#customize-control-redirect_on_complete):not(#customize-control-redirect_blank),
573
  .happyforms-setup-view .customize-control[id*='customize-control-captcha_']:not(#customize-control-captcha_label),
574
+ .happyforms-setup-view #customize-control-email_mark_and_reply {
 
575
  padding-bottom: 5px;
576
  border-bottom: 0;
577
  }
906
  display: none;
907
  }
908
 
909
+ .happyforms-part-widget .options > label {
910
  margin-top: 8px;
911
  margin-bottom: 10px;
912
  display: none;
920
  display: none;
921
  }
922
 
923
+ .happyforms-part-widget .options ul:empty ~ label,
924
  .happyforms-part-widget .options ul:empty ~ p {
925
  display: block;
926
  }
931
 
932
  textarea.option-import-area {
933
  height: 125px;
 
934
  }
935
 
936
  .happyforms-part-widget .links.mode-import {
1884
  .happyforms-item-choice-widget-title .choice-in-widget-title {
1885
  color: #646970;
1886
  }
1887
+
1888
+ .happyforms-part-widget[data-part-type="radio"] .links.mode-manual .button:first-child,
1889
+ .happyforms-part-widget[data-part-type="radio"] .links.mode-import .button:first-child {
1890
+ margin-right: 0px;
1891
+ }
core/assets/js/parts/part-field-choice.js CHANGED
@@ -38,6 +38,8 @@
38
  var $toggleIndicator = $openWidgets.find( '.toggle-indicator' );
39
  $toggleIndicator.removeClass( 'opened' );
40
  } );
 
 
41
  },
42
 
43
  onAddOpenWidget: function( e ) {
@@ -231,7 +233,13 @@
231
  events: _.extend( {}, happyForms.classes.views.Part.prototype.events, {
232
  'click .add-option': 'onAddOptionClick',
233
  'click .add-heading': 'onAddHeadingClick',
 
 
 
 
 
234
  'item-duplicate': 'onOptionDuplicate',
 
235
  'change [data-bind=display_type]': 'onDisplayTypeChange',
236
  } ),
237
 
@@ -297,6 +305,77 @@
297
  this.model.get( 'options' ).findWhere( { id: itemID } ).trigger( 'open-widget' );
298
  },
299
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
300
  onOptionDuplicate: function( e, fieldChoice ) {
301
  e.preventDefault();
302
 
@@ -494,6 +573,16 @@
494
  happyForms.previewSend( 'happyforms-part-dom-update', data );
495
  },
496
 
 
 
 
 
 
 
 
 
 
 
497
  } );
498
 
499
  happyForms.previewer = _.extend( happyForms.previewer, {
38
  var $toggleIndicator = $openWidgets.find( '.toggle-indicator' );
39
  $toggleIndicator.removeClass( 'opened' );
40
  } );
41
+
42
+ this.$el.trigger( 'close-bulk-options', this.model );
43
  },
44
 
45
  onAddOpenWidget: function( e ) {
233
  events: _.extend( {}, happyForms.classes.views.Part.prototype.events, {
234
  'click .add-option': 'onAddOptionClick',
235
  'click .add-heading': 'onAddHeadingClick',
236
+ 'click .bulk-options': 'onAddBulkChoiceClick',
237
+ 'click .add-import-options': 'onAddBulkChoices',
238
+ 'keyup .option-import-area': 'onBulkTextChange',
239
+ 'input .option-import-area': 'onBulkTextChange',
240
+ 'click .cancel-import-options': 'closeBulkOpions',
241
  'item-duplicate': 'onOptionDuplicate',
242
+ 'close-bulk-options': 'closeBulkOpions',
243
  'change [data-bind=display_type]': 'onDisplayTypeChange',
244
  } ),
245
 
305
  this.model.get( 'options' ).findWhere( { id: itemID } ).trigger( 'open-widget' );
306
  },
307
 
308
+ onAddBulkChoiceClick: function( e ) {
309
+ e.preventDefault();
310
+
311
+ this.closeAllItemWidget();
312
+
313
+ if ( 0 == this.model.get( 'options' ).length ) {
314
+ $( '.options', this.$el ).hide();
315
+ }
316
+
317
+ $( '.options-import', this.$el ).show();
318
+ $( '.links.mode-manual', this.$el ).hide();
319
+ $( '.links.mode-import', this.$el ).show();
320
+ $( '.option-import-area', this.$el ).trigger( 'focus' );
321
+ $( '.add-import-options', this.$el ).attr( 'disabled', 'disabled' );
322
+ },
323
+
324
+ onAddBulkChoices: function( e ) {
325
+ e.preventDefault();
326
+
327
+ var $textarea = $( '.option-import-area', this.$el );
328
+ var list = $textarea.val();
329
+ var self = this;
330
+
331
+ var models = list
332
+ .split( /[\r\n]+/g )
333
+ .map( function( s ) {
334
+ return s.trim();
335
+ } )
336
+ .filter( function( s ) {
337
+ return s;
338
+ } )
339
+ .forEach( function( label, i, list ) {
340
+ _.delay( function() {
341
+ var itemID = self.getOptionModelID();
342
+ var modelClass = self.model.get( 'options' ).model;
343
+ var item = new modelClass( {
344
+ id: itemID,
345
+ label: label
346
+ } );
347
+
348
+ self.model.get( 'options' ).add( item, { refresh: ( list.length - 1 === i ) } );
349
+ }, i );
350
+ } );
351
+
352
+ $textarea.val( '' );
353
+ $( '.cancel-import-options', this.$el ).trigger( 'click' );
354
+ },
355
+
356
+ onBulkTextChange: function( e ) {
357
+ var val = $( e.target ).val();
358
+ var $addBulkButton = $( '.add-import-options', this.$el );
359
+
360
+ var disabled = '' === val;
361
+
362
+ if ( disabled ) {
363
+ $addBulkButton.attr( 'disabled', 'disabled' );
364
+ } else {
365
+ $addBulkButton.removeAttr('disabled')
366
+ }
367
+ },
368
+
369
+ closeBulkOpions: function( e ) {
370
+ e.preventDefault();
371
+
372
+ $( '.options', this.$el ).show();
373
+ $( '.options-import', this.$el ).hide();
374
+ $( '.links.mode-import', this.$el ).hide();
375
+ $( '.links.mode-manual', this.$el ).show();
376
+ $( '.option-import-area', this.$el ).val( '' );
377
+ },
378
+
379
  onOptionDuplicate: function( e, fieldChoice ) {
380
  e.preventDefault();
381
 
573
  happyForms.previewSend( 'happyforms-part-dom-update', data );
574
  },
575
 
576
+ closeAllItemWidget: function() {
577
+ var $openWidgets = $( '.happyforms-choice-item-widget', this.$el );
578
+
579
+ $openWidgets.removeClass( 'happyforms-widget-choice-expanded' );
580
+ $openWidgets.find( '.happyforms-part-item-advanced' ).slideUp( 200, function() {
581
+ var $toggleIndicator = $openWidgets.find( '.toggle-indicator' );
582
+ $toggleIndicator.removeClass( 'opened' );
583
+ } );
584
+ },
585
+
586
  } );
587
 
588
  happyForms.previewer = _.extend( happyForms.previewer, {
core/classes/class-form-controller.php CHANGED
@@ -792,6 +792,17 @@ class HappyForms_Form_Controller {
792
  return $has_browser_protection;
793
  }
794
 
 
 
 
 
 
 
 
 
 
 
 
795
  /**
796
  * Get form-wide submission notice definitions.
797
  *
792
  return $has_browser_protection;
793
  }
794
 
795
+ /**
796
+ *
797
+ * Get wether or not this form requires async validation of submissions.
798
+ *
799
+ */
800
+ public function has_pending_submission( $form ) {
801
+ $is_pending = apply_filters( 'happyforms_form_has_pending_submission', false, $form );
802
+
803
+ return $is_pending;
804
+ }
805
+
806
  /**
807
  * Get form-wide submission notice definitions.
808
  *
core/classes/class-form-setup.php CHANGED
@@ -248,6 +248,7 @@ class HappyForms_Form_Setup {
248
  case 'radio':
249
  case 'select':
250
  case 'textarea':
 
251
  case 'group_start':
252
  case 'group_end':
253
  case 'upsell':
248
  case 'radio':
249
  case 'select':
250
  case 'textarea':
251
+ case 'buttongroup':
252
  case 'group_start':
253
  case 'group_end':
254
  case 'upsell':
core/helpers/helper-form-templates.php CHANGED
@@ -34,6 +34,22 @@ function happyforms_action_field() {
34
 
35
  endif;
36
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
37
  if ( ! function_exists( 'happyforms_honeypot' ) ) :
38
 
39
  function happyforms_honeypot( $form ) {
34
 
35
  endif;
36
 
37
+ if ( ! function_exists( 'happyforms_referer_field' ) ):
38
+ /**
39
+ * Output a form's action attribute.
40
+ *
41
+ * @since 1.0
42
+ *
43
+ * @return void
44
+ */
45
+ function happyforms_client_referer_field() {
46
+ ?>
47
+ <input type="hidden" name="client_referer" value="">
48
+ <?php
49
+ }
50
+
51
+ endif;
52
+
53
  if ( ! function_exists( 'happyforms_honeypot' ) ) :
54
 
55
  function happyforms_honeypot( $form ) {
core/helpers/helper-misc.php CHANGED
@@ -1101,3 +1101,27 @@ function happyforms_shuffle_array( $array, $seed = '' ) {
1101
  }
1102
 
1103
  endif;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1101
  }
1102
 
1103
  endif;
1104
+
1105
+ if ( ! function_exists( 'happyforms_capture_client_id' ) ) :
1106
+
1107
+ function happyforms_capture_client_id() {
1108
+ $capture_user_id = apply_filters( 'happyforms_capture_client_id', '__return_true' );
1109
+
1110
+ return $capture_user_id;
1111
+ }
1112
+
1113
+ endif;
1114
+
1115
+ if ( ! function_exists( 'happyforms_the_external_link_icon' ) ) :
1116
+
1117
+ function happyforms_the_external_link_icon( $echo = true ) {
1118
+ if ( ! $echo ) {
1119
+ ob_start();
1120
+ }
1121
+ ?><svg xmlns="http://www.w3.org/2000/svg" viewBox="11 -4 1 24" width="20" height="18" class="components-external-link__icon css-bqq7t3 etxm6pv0" role="img" aria-hidden="true" focusable="false" style="margin-bottom: -2px;" fill="currentColor"><path d="M18.2 17c0 .7-.6 1.2-1.2 1.2H7c-.7 0-1.2-.6-1.2-1.2V7c0-.7.6-1.2 1.2-1.2h3.2V4.2H7C5.5 4.2 4.2 5.5 4.2 7v10c0 1.5 1.2 2.8 2.8 2.8h10c1.5 0 2.8-1.2 2.8-2.8v-3.6h-1.5V17zM14.9 3v1.5h3.7l-6.4 6.4 1.1 1.1 6.4-6.4v3.7h1.5V3h-6.3z"></path></svg><?php
1122
+ if ( ! $echo ) {
1123
+ return ob_get_clean();
1124
+ }
1125
+ }
1126
+
1127
+ endif;
core/templates/customize-controls/setup/buttongroup.php ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="customize-control customize-control-buttongroup <% if ( <?php echo $control['field']; ?> ) { %>checked<% } %>" id="customize-control-<?php echo $control['field']; ?>" data-value="<%= <?php echo $control['field']; ?> %>">
2
+ <label class="customize-control-title" for="<?php echo $control['field']; ?>"><?php echo $control['label']; ?></label>
3
+ <div class="happyforms-buttongroup-wrapper">
4
+ <span class="happyforms-buttongroup happyforms-buttongroup-<?php echo $control['label']; ?>">
5
+ <?php foreach( $control['options'] as $id => $label ): ?>
6
+ <label for="<?php echo $control['field']; ?>_<?php echo $label; ?>">
7
+ <input type="radio" id="<?php echo $control['field']; ?>_<?php echo $label; ?>" value="<?php echo $id; ?>" name="<?php echo $control['field']; ?>" data-attribute="<?php echo $control['field']; ?>" <% if ( '<?php echo $id; ?>' === <?php echo $control['field']; ?> ) { %>checked<% } %> />
8
+ <span><?php echo $label; ?></span>
9
+ </label>
10
+ <?php endforeach; ?>
11
+ </span>
12
+ </div>
13
+ </div>
core/templates/customize-controls/setup/select.php CHANGED
@@ -8,11 +8,15 @@
8
  <?php endif; ?>
9
  <?php foreach ( $control['options'] as $option => $value ) : ?>
10
  <?php if ( is_array( $value ) ) : ?>
 
11
  <optgroup label="<?php echo $option; ?>">
 
12
  <?php foreach ( $value as $val ) : ?>
13
  <option value="<?php echo $val['value']; ?>" <% if ( '<?php echo $val['value']; ?>' === <?php echo $control['field']; ?> ) { %>selected="selected"<% } %>><?php echo $val['label']; ?></option>
14
  <?php endforeach; ?>
 
15
  </optgroup>
 
16
  <?php else : ?>
17
  <option value="<?php echo $option; ?>" <% if ( '<?php echo $option; ?>' === <?php echo $control['field']; ?> ) { %>selected="selected"<% } %>><?php echo $value; ?></option>
18
  <?php endif; ?>
8
  <?php endif; ?>
9
  <?php foreach ( $control['options'] as $option => $value ) : ?>
10
  <?php if ( is_array( $value ) ) : ?>
11
+ <?php if ( '' !== $option ) : ?>
12
  <optgroup label="<?php echo $option; ?>">
13
+ <?php endif; ?>
14
  <?php foreach ( $value as $val ) : ?>
15
  <option value="<?php echo $val['value']; ?>" <% if ( '<?php echo $val['value']; ?>' === <?php echo $control['field']; ?> ) { %>selected="selected"<% } %>><?php echo $val['label']; ?></option>
16
  <?php endforeach; ?>
17
+ <?php if ( '' !== $option ) : ?>
18
  </optgroup>
19
+ <?php endif; ?>
20
  <?php else : ?>
21
  <option value="<?php echo $option; ?>" <% if ( '<?php echo $option; ?>' === <?php echo $control['field']; ?> ) { %>selected="selected"<% } %>><?php echo $value; ?></option>
22
  <?php endif; ?>
core/templates/parts/customize-checkbox.php CHANGED
@@ -25,17 +25,23 @@
25
 
26
  <div class="options">
27
  <ul class="option-list"></ul>
28
- <h3><?php _e( 'Choices', 'happyforms' ); ?></h3>
29
  <p class="no-options description"><?php _e( 'It doesn\'t look like your field has any choices yet. Want to add one? Click the "Add Choice" button to start.', 'happyforms' ); ?></p>
30
  </div>
31
- <div class="options-import">
32
- <h3><?php _e( 'Choices', 'happyforms' ); ?></h3>
33
- <textarea class="option-import-area" cols="30" rows="10" placeholder="<?php _e( 'Type or paste your choices here, adding each on a new line.' ); ?>"></textarea>
34
- </div>
 
35
  <p class="links mode-manual">
 
36
  <a href="#" class="button add-heading"><?php _e( 'Add heading', 'happyforms' ); ?></a>
37
  <a href="#" class="button add-option centered"><?php _e( 'Add choice', 'happyforms' ); ?></a>
38
  </p>
 
 
 
 
39
 
40
  <?php do_action( 'happyforms_part_customize_checkbox_after_options' ); ?>
41
 
25
 
26
  <div class="options">
27
  <ul class="option-list"></ul>
28
+ <label><?php _e( 'Choices', 'happyforms' ); ?>:</label>
29
  <p class="no-options description"><?php _e( 'It doesn\'t look like your field has any choices yet. Want to add one? Click the "Add Choice" button to start.', 'happyforms' ); ?></p>
30
  </div>
31
+ <p class="options-import">
32
+ <label for="<%= instance.id %>_bulk_choices"><?php _e( 'Choices', 'happyforms' ); ?></label>
33
+ <textarea id="<%= instance.id %>_bulk_choices" class="option-import-area" cols="30" rows="10"></textarea>
34
+ <span class="customize-control-description"><?php _e( 'Type or paste your choices, adding each on a new line.' ); ?></span>
35
+ </p>
36
  <p class="links mode-manual">
37
+ <a href="#" class="button bulk-options centered"><?php _e( 'Bulk add choices', 'happyforms' ); ?></a>
38
  <a href="#" class="button add-heading"><?php _e( 'Add heading', 'happyforms' ); ?></a>
39
  <a href="#" class="button add-option centered"><?php _e( 'Add choice', 'happyforms' ); ?></a>
40
  </p>
41
+ <p class="links mode-import">
42
+ <a href="#" class="button add-import-options"><?php _e( 'Add choices', 'happyforms' ); ?></a>
43
+ <a href="#" class="button cancel-import-options"><?php _e( 'Cancel', 'happyforms' ); ?></a>
44
+ </p>
45
 
46
  <?php do_action( 'happyforms_part_customize_checkbox_after_options' ); ?>
47
 
core/templates/parts/customize-radio.php CHANGED
@@ -25,14 +25,24 @@
25
 
26
  <div class="options">
27
  <ul class="option-list"></ul>
28
- <h3><?php _e( 'Choices', 'happyforms' ); ?></h3>
29
  <p class="no-options description"><?php _e( 'It doesn\'t look like your field has any choices yet. Want to add one?
30
  Click the "Add Choice" button to start.', 'happyforms' ); ?></p>
31
  </div>
 
 
 
 
 
32
  <p class="links mode-manual">
 
33
  <a href="#" class="button add-heading"><?php _e( 'Add heading', 'happyforms' ); ?></a>
34
  <a href="#" class="button add-option centered"><?php _e( 'Add choice', 'happyforms' ); ?></a>
35
  </p>
 
 
 
 
36
 
37
  <?php do_action( 'happyforms_part_customize_radio_after_options' ); ?>
38
 
25
 
26
  <div class="options">
27
  <ul class="option-list"></ul>
28
+ <label><?php _e( 'Choices', 'happyforms' ); ?>:</label>
29
  <p class="no-options description"><?php _e( 'It doesn\'t look like your field has any choices yet. Want to add one?
30
  Click the "Add Choice" button to start.', 'happyforms' ); ?></p>
31
  </div>
32
+ <p class="options-import">
33
+ <label for="<%= instance.id %>_bulk_choices"><?php _e( 'Choices', 'happyforms' ); ?></label>
34
+ <textarea id="<%= instance.id %>_bulk_choices" class="option-import-area" cols="30" rows="10"></textarea>
35
+ <span class="customize-control-description"><?php _e( 'Type or paste your choices, adding each on a new line.' ); ?></span>
36
+ </p>
37
  <p class="links mode-manual">
38
+ <a href="#" class="button bulk-options centered"><?php _e( 'Bulk add choices', 'happyforms' ); ?></a>
39
  <a href="#" class="button add-heading"><?php _e( 'Add heading', 'happyforms' ); ?></a>
40
  <a href="#" class="button add-option centered"><?php _e( 'Add choice', 'happyforms' ); ?></a>
41
  </p>
42
+ <p class="links mode-import">
43
+ <a href="#" class="button add-import-options" disabled><?php _e( 'Add choices', 'happyforms' ); ?></a>
44
+ <a href="#" class="button cancel-import-options"><?php _e( 'Cancel', 'happyforms' ); ?></a>
45
+ </p>
46
 
47
  <?php do_action( 'happyforms_part_customize_radio_after_options' ); ?>
48
 
core/templates/parts/customize-select.php CHANGED
@@ -29,13 +29,23 @@
29
 
30
  <div class="options">
31
  <ul class="option-list"></ul>
32
- <h3><?php _e( 'Choices', 'happyforms' ); ?></h3>
33
  <p class="no-options description"><?php _e( 'It doesn\'t look like your field has any choices yet. Want to add one? Click the "Add Choice" button to start.', 'happyforms' ); ?></p>
34
  </div>
 
 
 
 
 
35
  <p class="links mode-manual">
 
36
  <a href="#" class="button add-heading"><?php _e( 'Add heading', 'happyforms' ); ?></a>
37
  <a href="#" class="button add-option centered"><?php _e( 'Add choice', 'happyforms' ); ?></a>
38
  </p>
 
 
 
 
39
 
40
  <% if ( instance.other_option ) { %>
41
  <p>
29
 
30
  <div class="options">
31
  <ul class="option-list"></ul>
32
+ <label><?php _e( 'Choices', 'happyforms' ); ?>:</label>
33
  <p class="no-options description"><?php _e( 'It doesn\'t look like your field has any choices yet. Want to add one? Click the "Add Choice" button to start.', 'happyforms' ); ?></p>
34
  </div>
35
+ <p class="options-import">
36
+ <label for="<%= instance.id %>_bulk_choices"><?php _e( 'Choices', 'happyforms' ); ?></label>
37
+ <textarea id="<%= instance.id %>_bulk_choices" class="option-import-area" cols="30" rows="10"></textarea>
38
+ <span class="customize-control-description"><?php _e( 'Type or paste your choices, adding each on a new line.' ); ?></span>
39
+ </p>
40
  <p class="links mode-manual">
41
+ <a href="#" class="button bulk-options centered"><?php _e( 'Bulk add choices', 'happyforms' ); ?></a>
42
  <a href="#" class="button add-heading"><?php _e( 'Add heading', 'happyforms' ); ?></a>
43
  <a href="#" class="button add-option centered"><?php _e( 'Add choice', 'happyforms' ); ?></a>
44
  </p>
45
+ <p class="links mode-import">
46
+ <a href="#" class="button add-import-options"><?php _e( 'Add choices', 'happyforms' ); ?></a>
47
+ <a href="#" class="button cancel-import-options"><?php _e( 'Cancel', 'happyforms' ); ?></a>
48
+ </p>
49
 
50
  <% if ( instance.other_option ) { %>
51
  <p>
core/templates/single-form.php CHANGED
@@ -6,6 +6,7 @@
6
  <?php do_action( 'happyforms_form_open', $form ); ?>
7
 
8
  <?php happyforms_action_field(); ?>
 
9
  <?php happyforms_form_field( $form['ID'] ); ?>
10
  <?php happyforms_step_field( $form ); ?>
11
 
6
  <?php do_action( 'happyforms_form_open', $form ); ?>
7
 
8
  <?php happyforms_action_field(); ?>
9
+ <?php happyforms_client_referer_field( $form['ID'] ); ?>
10
  <?php happyforms_form_field( $form['ID'] ); ?>
11
  <?php happyforms_step_field( $form ); ?>
12
 
happyforms.php CHANGED
@@ -5,7 +5,7 @@
5
  * Plugin URI: https://happyforms.io
6
  * Description: We're changin' WordPress forms.
7
  * Author: Happyforms
8
- * Version: 1.16.0
9
  * Author URI: https://happyforms.io
10
  * Upgrade URI: https://happyforms.io/upgrade
11
  */
@@ -22,7 +22,7 @@ if ( defined( 'HAPPYFORMS_UPGRADE_VERSION' ) ) {
22
  /**
23
  * The current version of the plugin.
24
  */
25
- define( 'HAPPYFORMS_VERSION', '1.16.0' );
26
 
27
  if ( ! function_exists( 'happyforms_get_version' ) ):
28
 
5
  * Plugin URI: https://happyforms.io
6
  * Description: We're changin' WordPress forms.
7
  * Author: Happyforms
8
+ * Version: 1.16.1
9
  * Author URI: https://happyforms.io
10
  * Upgrade URI: https://happyforms.io/upgrade
11
  */
22
  /**
23
  * The current version of the plugin.
24
  */
25
+ define( 'HAPPYFORMS_VERSION', '1.16.1' );
26
 
27
  if ( ! function_exists( 'happyforms_get_version' ) ):
28
 
inc/classes/class-happyforms.php CHANGED
@@ -121,9 +121,9 @@ class HappyForms extends HappyForms_Core {
121
  );
122
 
123
  $controls[1655] = array(
124
- 'type' => 'checkbox_dummy',
125
- 'dummy_id' => 'allow_abandoned_resume',
126
- 'label' => __( 'Let submitters save a draft and come back to it later', 'happyforms' ),
127
  );
128
 
129
  $controls[1800] = array(
@@ -144,12 +144,6 @@ class HappyForms extends HappyForms_Core {
144
  'label' => __( "Erase submitter's personal data after set number of days", 'happyforms' ),
145
  );
146
 
147
- $controls[3191] = array(
148
- 'type' => 'checkbox_dummy',
149
- 'dummy_id' => 'save_submissions',
150
- 'label' => __( "Capture submitter's metadata (IP, language, platform, time and timezone)", 'happyforms' ),
151
- );
152
-
153
  $controls[3200] = array(
154
  'type' => 'checkbox_dummy',
155
  'dummy_id' => 'block_emails',
121
  );
122
 
123
  $controls[1655] = array(
124
+ 'type' => 'number_dummy',
125
+ 'dummy_id' => 'abandoned_resume_response_expire',
126
+ 'label' => __( 'Let submitters save a draft for set number of days', 'happyforms' ),
127
  );
128
 
129
  $controls[1800] = array(
144
  'label' => __( "Erase submitter's personal data after set number of days", 'happyforms' ),
145
  );
146
 
 
 
 
 
 
 
147
  $controls[3200] = array(
148
  'type' => 'checkbox_dummy',
149
  'dummy_id' => 'block_emails',
inc/classes/parts/class-part-website-url-dummy.php CHANGED
@@ -6,7 +6,7 @@ class HappyForms_Part_WebsiteUrl_Dummy extends HappyForms_Form_Part {
6
 
7
  public function __construct() {
8
  $this->label = __( 'Website', 'happyforms' );
9
- $this->description = __( 'For formatted site URLs.', 'happyforms' );
10
  }
11
 
12
  }
6
 
7
  public function __construct() {
8
  $this->label = __( 'Website', 'happyforms' );
9
+ $this->description = __( 'For collecting formatted site or page addresses (URL).', 'happyforms' );
10
  }
11
 
12
  }
integrations/classes/class-integrations-page-controller.php CHANGED
@@ -29,7 +29,6 @@ class HappyForms_Integrations_Page_Controller {
29
  [ 'id' => 'convertkit', 'label' => __( 'ConvertKit', 'happyforms' ), 'context' => 'normal' ],
30
  [ 'id' => 'mailchimp', 'label' => __( 'Mailchimp', 'happyforms' ), 'context' => 'normal' ],
31
  [ 'id' => 'mailerlite', 'label' => __( 'MailerLite', 'happyforms' ), 'context' => 'normal' ],
32
- [ 'id' => 'mailpoet', 'label' => __( 'MailPoet', 'happyforms' ), 'context' => 'normal' ],
33
  [ 'id' => 'sendfox', 'label' => __( 'SendFox', 'happyforms' ), 'context' => 'normal' ],
34
  [ 'id' => 'sendgrid', 'label' => __( 'SendGrid', 'happyforms' ), 'context' => 'normal' ],
35
  [ 'id' => 'sendinblue', 'label' => __( 'Sendinblue', 'happyforms' ), 'context' => 'normal' ],
29
  [ 'id' => 'convertkit', 'label' => __( 'ConvertKit', 'happyforms' ), 'context' => 'normal' ],
30
  [ 'id' => 'mailchimp', 'label' => __( 'Mailchimp', 'happyforms' ), 'context' => 'normal' ],
31
  [ 'id' => 'mailerlite', 'label' => __( 'MailerLite', 'happyforms' ), 'context' => 'normal' ],
 
32
  [ 'id' => 'sendfox', 'label' => __( 'SendFox', 'happyforms' ), 'context' => 'normal' ],
33
  [ 'id' => 'sendgrid', 'label' => __( 'SendGrid', 'happyforms' ), 'context' => 'normal' ],
34
  [ 'id' => 'sendinblue', 'label' => __( 'Sendinblue', 'happyforms' ), 'context' => 'normal' ],
integrations/templates/widget-mailpoet-dummy.php DELETED
@@ -1,9 +0,0 @@
1
- <form class="happyforms-service hf-ajax-submit">
2
- <div class="widget-content">
3
- <div id="happyforms-service-google-places" class="happyforms-service-integration">
4
- <div class="widget-content">
5
- <p><?php _e( 'MailPoet plugin must first be installed and activated to use this integration.', 'happyforms' ); ?></p>
6
- </div>
7
- </div>
8
- </div>
9
- </form>
 
 
 
 
 
 
 
 
 
languages/happyforms.pot CHANGED
@@ -2,14 +2,14 @@
2
  # This file is distributed under the same license as the Happyforms (free) plugin.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: Happyforms (free) 1.16.0\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/happyforms/\n"
7
  "Last-Translator: The Theme Foundry\n"
8
  "Language-Team: The Theme Foundry\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: 2022-06-30T07:08:40+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: happyforms\n"
@@ -80,12 +80,12 @@ msgstr ""
80
  #: core/classes/class-form-admin.php:454
81
  #: core/templates/customize-form-item.php:27
82
  #: core/templates/customize-form-part-footer.php:4
83
- #: core/templates/parts/customize-checkbox.php:156
84
- #: core/templates/parts/customize-checkbox.php:184
85
- #: core/templates/parts/customize-radio.php:138
86
- #: core/templates/parts/customize-radio.php:166
87
- #: core/templates/parts/customize-select.php:123
88
- #: core/templates/parts/customize-select.php:151
89
  msgid "Duplicate"
90
  msgstr ""
91
 
@@ -174,7 +174,7 @@ msgid "Email me a copy of each submission"
174
  msgstr ""
175
 
176
  #: core/classes/class-form-email.php:106
177
- #: inc/classes/class-happyforms.php:178
178
  msgid "To email address"
179
  msgstr ""
180
 
@@ -691,17 +691,17 @@ msgstr ""
691
 
692
  #: core/classes/class-form-styles.php:716
693
  #: core/templates/parts/customize-checkbox.php:4
694
- #: core/templates/parts/customize-checkbox.php:133
695
- #: core/templates/parts/customize-checkbox.php:178
696
  #: core/templates/parts/customize-email.php:4
697
  #: core/templates/parts/customize-multi-line-text.php:4
698
  #: core/templates/parts/customize-number.php:4
699
  #: core/templates/parts/customize-radio.php:4
700
- #: core/templates/parts/customize-radio.php:115
701
- #: core/templates/parts/customize-radio.php:160
702
  #: core/templates/parts/customize-select.php:4
703
- #: core/templates/parts/customize-select.php:106
704
- #: core/templates/parts/customize-select.php:145
705
  #: core/templates/parts/customize-single-line-text.php:4
706
  msgid "Label"
707
  msgstr ""
@@ -721,12 +721,12 @@ msgstr ""
721
 
722
  #: core/classes/class-form-styles.php:731
723
  #: core/templates/parts/customize-checkbox.php:20
724
- #: core/templates/parts/customize-checkbox.php:139
725
  #: core/templates/parts/customize-email.php:28
726
  #: core/templates/parts/customize-multi-line-text.php:28
727
  #: core/templates/parts/customize-number.php:28
728
  #: core/templates/parts/customize-radio.php:20
729
- #: core/templates/parts/customize-radio.php:121
730
  #: core/templates/parts/customize-select.php:24
731
  #: core/templates/parts/customize-single-line-text.php:28
732
  msgid "Hint"
@@ -1071,55 +1071,55 @@ msgstr ""
1071
  msgid "I agree to the storage and handling of my data by this website"
1072
  msgstr ""
1073
 
1074
- #: core/helpers/helper-form-templates.php:46
1075
  msgid "Leave this field blank"
1076
  msgstr ""
1077
 
1078
- #: core/helpers/helper-form-templates.php:965
1079
  msgid "January"
1080
  msgstr ""
1081
 
1082
- #: core/helpers/helper-form-templates.php:966
1083
  msgid "February"
1084
  msgstr ""
1085
 
1086
- #: core/helpers/helper-form-templates.php:967
1087
  msgid "March"
1088
  msgstr ""
1089
 
1090
- #: core/helpers/helper-form-templates.php:968
1091
  msgid "April"
1092
  msgstr ""
1093
 
1094
- #: core/helpers/helper-form-templates.php:969
1095
  msgid "May"
1096
  msgstr ""
1097
 
1098
- #: core/helpers/helper-form-templates.php:970
1099
  msgid "June"
1100
  msgstr ""
1101
 
1102
- #: core/helpers/helper-form-templates.php:971
1103
  msgid "July"
1104
  msgstr ""
1105
 
1106
- #: core/helpers/helper-form-templates.php:972
1107
  msgid "August"
1108
  msgstr ""
1109
 
1110
- #: core/helpers/helper-form-templates.php:973
1111
  msgid "September"
1112
  msgstr ""
1113
 
1114
- #: core/helpers/helper-form-templates.php:974
1115
  msgid "October"
1116
  msgstr ""
1117
 
1118
- #: core/helpers/helper-form-templates.php:975
1119
  msgid "November"
1120
  msgstr ""
1121
 
1122
- #: core/helpers/helper-form-templates.php:976
1123
  msgid "December"
1124
  msgstr ""
1125
 
@@ -2704,12 +2704,12 @@ msgstr ""
2704
 
2705
  #: core/templates/customize-form-item.php:33
2706
  #: core/templates/customize-form-part-footer.php:3
2707
- #: core/templates/parts/customize-checkbox.php:155
2708
- #: core/templates/parts/customize-checkbox.php:183
2709
- #: core/templates/parts/customize-radio.php:137
2710
- #: core/templates/parts/customize-radio.php:165
2711
- #: core/templates/parts/customize-select.php:122
2712
- #: core/templates/parts/customize-select.php:150
2713
  msgid "Delete"
2714
  msgstr ""
2715
 
@@ -2805,7 +2805,9 @@ msgstr ""
2805
  #: core/templates/parts/customize-checkbox.php:28
2806
  #: core/templates/parts/customize-checkbox.php:32
2807
  #: core/templates/parts/customize-radio.php:28
 
2808
  #: core/templates/parts/customize-select.php:32
 
2809
  msgid "Choices"
2810
  msgstr ""
2811
 
@@ -2814,108 +2816,126 @@ msgstr ""
2814
  msgid "It doesn't look like your field has any choices yet. Want to add one? Click the \"Add Choice\" button to start."
2815
  msgstr ""
2816
 
2817
- #: core/templates/parts/customize-checkbox.php:36
2818
- #: core/templates/parts/customize-radio.php:33
2819
- #: core/templates/parts/customize-select.php:36
 
 
 
 
 
 
2820
  msgid "Add heading"
2821
  msgstr ""
2822
 
2823
- #: core/templates/parts/customize-checkbox.php:37
2824
- #: core/templates/parts/customize-radio.php:34
2825
- #: core/templates/parts/customize-select.php:37
2826
  msgid "Add choice"
2827
  msgstr ""
2828
 
2829
- #: core/templates/parts/customize-checkbox.php:47
 
 
 
 
 
 
2830
  #: core/templates/parts/customize-radio.php:44
2831
- #: core/templates/parts/customize-select.php:43
 
 
 
 
 
 
2832
  msgid "Add 'other' choice"
2833
  msgstr ""
2834
 
2835
- #: core/templates/parts/customize-checkbox.php:52
2836
- #: core/templates/parts/customize-radio.php:49
2837
- #: core/templates/parts/customize-select.php:49
2838
  msgid "'Other' label"
2839
  msgstr ""
2840
 
2841
- #: core/templates/parts/customize-checkbox.php:56
2842
- #: core/templates/parts/customize-radio.php:53
2843
- #: core/templates/parts/customize-select.php:53
2844
  msgid "'Other' placeholder"
2845
  msgstr ""
2846
 
2847
- #: core/templates/parts/customize-checkbox.php:63
2848
- #: core/templates/parts/customize-radio.php:60
2849
- #: core/templates/parts/customize-select.php:65
2850
  msgid "Shuffle order of choices"
2851
  msgstr ""
2852
 
2853
- #: core/templates/parts/customize-checkbox.php:68
2854
  msgid "Limit choices"
2855
  msgstr ""
2856
 
2857
- #: core/templates/parts/customize-checkbox.php:73
2858
  msgid "Min choices"
2859
  msgstr ""
2860
 
2861
- #: core/templates/parts/customize-checkbox.php:77
2862
  msgid "Max choices"
2863
  msgstr ""
2864
 
2865
- #: core/templates/parts/customize-checkbox.php:82
2866
- #: core/templates/parts/customize-radio.php:64
2867
  msgid "Align choices"
2868
  msgstr ""
2869
 
2870
- #: core/templates/parts/customize-checkbox.php:86
2871
- #: core/templates/parts/customize-radio.php:68
2872
  msgid "Vertically"
2873
  msgstr ""
2874
 
2875
- #: core/templates/parts/customize-checkbox.php:90
2876
- #: core/templates/parts/customize-radio.php:72
2877
  msgid "Horizontally"
2878
  msgstr ""
2879
 
2880
- #: core/templates/parts/customize-checkbox.php:96
2881
  #: core/templates/parts/customize-email.php:48
2882
  #: core/templates/parts/customize-multi-line-text.php:61
2883
  #: core/templates/parts/customize-number.php:76
2884
- #: core/templates/parts/customize-radio.php:78
2885
- #: core/templates/parts/customize-select.php:70
2886
  #: core/templates/parts/customize-single-line-text.php:47
2887
  msgid "Require an answer"
2888
  msgstr ""
2889
 
2890
- #: core/templates/parts/customize-checkbox.php:105
2891
  #: core/templates/parts/customize-email.php:57
2892
  #: core/templates/parts/customize-multi-line-text.php:70
2893
  #: core/templates/parts/customize-number.php:83
2894
- #: core/templates/parts/customize-radio.php:85
2895
- #: core/templates/parts/customize-select.php:76
2896
  #: core/templates/parts/customize-single-line-text.php:56
2897
  msgid "Additional CSS class(es)"
2898
  msgstr ""
2899
 
2900
- #: core/templates/parts/customize-checkbox.php:126
2901
- #: core/templates/parts/customize-radio.php:108
2902
- #: core/templates/parts/customize-select.php:99
2903
  msgid "Choice"
2904
  msgstr ""
2905
 
2906
- #: core/templates/parts/customize-checkbox.php:145
2907
  msgid "Max submissions"
2908
  msgstr ""
2909
 
2910
- #: core/templates/parts/customize-checkbox.php:151
2911
- #: core/templates/parts/customize-radio.php:133
2912
- #: core/templates/parts/customize-select.php:118
2913
  msgid "Make this choice default"
2914
  msgstr ""
2915
 
2916
- #: core/templates/parts/customize-checkbox.php:171
2917
- #: core/templates/parts/customize-radio.php:153
2918
- #: core/templates/parts/customize-select.php:138
2919
  #: inc/classes/parts/class-part-layout-title-dummy.php:8
2920
  msgid "Heading"
2921
  msgstr ""
@@ -2981,8 +3001,8 @@ msgid ""
2981
  "Click the \"Add Choice\" button to start."
2982
  msgstr ""
2983
 
2984
- #: core/templates/parts/customize-radio.php:127
2985
- #: core/templates/parts/customize-select.php:112
2986
  #: inc/classes/class-happyforms.php:138
2987
  msgid "Max number of submissions"
2988
  msgstr ""
@@ -3012,7 +3032,7 @@ msgid "Save incomplete and abandoned submissions"
3012
  msgstr ""
3013
 
3014
  #: inc/classes/class-happyforms.php:126
3015
- msgid "Let submitters save a draft and come back to it later"
3016
  msgstr ""
3017
 
3018
  #: inc/classes/class-happyforms.php:132
@@ -3024,22 +3044,18 @@ msgid "Erase submitter's personal data after set number of days"
3024
  msgstr ""
3025
 
3026
  #: inc/classes/class-happyforms.php:150
3027
- msgid "Capture submitter's metadata (IP, language, platform, time and timezone)"
3028
- msgstr ""
3029
-
3030
- #: inc/classes/class-happyforms.php:156
3031
  msgid "Show an error message if field contains words in Disallowed Comment Keys"
3032
  msgstr ""
3033
 
3034
- #: inc/classes/class-happyforms.php:166
3035
  msgid "Include reply link"
3036
  msgstr ""
3037
 
3038
- #: inc/classes/class-happyforms.php:172
3039
  msgid "Include referral web address"
3040
  msgstr ""
3041
 
3042
- #: inc/classes/class-happyforms.php:184
3043
  msgid "Send abandonment email"
3044
  msgstr ""
3045
 
@@ -3226,7 +3242,7 @@ msgid "Website"
3226
  msgstr ""
3227
 
3228
  #: inc/classes/parts/class-part-website-url-dummy.php:9
3229
- msgid "For formatted site URLs."
3230
  msgstr ""
3231
 
3232
  #: integrations/classes/class-integrations-page-controller.php:26
@@ -3254,46 +3270,42 @@ msgid "MailerLite"
3254
  msgstr ""
3255
 
3256
  #: integrations/classes/class-integrations-page-controller.php:32
3257
- msgid "MailPoet"
3258
- msgstr ""
3259
-
3260
- #: integrations/classes/class-integrations-page-controller.php:33
3261
  msgid "SendFox"
3262
  msgstr ""
3263
 
3264
- #: integrations/classes/class-integrations-page-controller.php:34
3265
  msgid "SendGrid"
3266
  msgstr ""
3267
 
3268
- #: integrations/classes/class-integrations-page-controller.php:35
3269
  msgid "Sendinblue"
3270
  msgstr ""
3271
 
3272
- #: integrations/classes/class-integrations-page-controller.php:36
3273
  msgid "reCAPTCHA"
3274
  msgstr ""
3275
 
3276
- #: integrations/classes/class-integrations-page-controller.php:37
3277
  msgid "Stripe"
3278
  msgstr ""
3279
 
3280
- #: integrations/classes/class-integrations-page-controller.php:38
3281
  msgid "PayPal"
3282
  msgstr ""
3283
 
3284
- #: integrations/classes/class-integrations-page-controller.php:39
3285
  msgid "Zapier"
3286
  msgstr ""
3287
 
3288
- #: integrations/classes/class-integrations-page-controller.php:40
3289
  msgid "Integromat"
3290
  msgstr ""
3291
 
3292
- #: integrations/classes/class-integrations-page-controller.php:41
3293
  msgid "Integrately"
3294
  msgstr ""
3295
 
3296
- #: integrations/classes/class-integrations-page-controller.php:42
3297
  msgid "Google Analytics"
3298
  msgstr ""
3299
 
@@ -3400,10 +3412,6 @@ msgstr ""
3400
  msgid "Tracking ID"
3401
  msgstr ""
3402
 
3403
- #: integrations/templates/widget-mailpoet-dummy.php:5
3404
- msgid "MailPoet plugin must first be installed and activated to use this integration."
3405
- msgstr ""
3406
-
3407
  #: integrations/templates/widget-paypal-dummy.php:4
3408
  #: integrations/templates/widget-recaptcha-dummy.php:4
3409
  #: integrations/templates/widget-stripe-dummy.php:4
2
  # This file is distributed under the same license as the Happyforms (free) plugin.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Happyforms (free) 1.16.1\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/happyforms/\n"
7
  "Last-Translator: The Theme Foundry\n"
8
  "Language-Team: The Theme Foundry\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: 2022-07-19T10:37:44+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: happyforms\n"
80
  #: core/classes/class-form-admin.php:454
81
  #: core/templates/customize-form-item.php:27
82
  #: core/templates/customize-form-part-footer.php:4
83
+ #: core/templates/parts/customize-checkbox.php:162
84
+ #: core/templates/parts/customize-checkbox.php:190
85
+ #: core/templates/parts/customize-radio.php:148
86
+ #: core/templates/parts/customize-radio.php:176
87
+ #: core/templates/parts/customize-select.php:133
88
+ #: core/templates/parts/customize-select.php:161
89
  msgid "Duplicate"
90
  msgstr ""
91
 
174
  msgstr ""
175
 
176
  #: core/classes/class-form-email.php:106
177
+ #: inc/classes/class-happyforms.php:172
178
  msgid "To email address"
179
  msgstr ""
180
 
691
 
692
  #: core/classes/class-form-styles.php:716
693
  #: core/templates/parts/customize-checkbox.php:4
694
+ #: core/templates/parts/customize-checkbox.php:139
695
+ #: core/templates/parts/customize-checkbox.php:184
696
  #: core/templates/parts/customize-email.php:4
697
  #: core/templates/parts/customize-multi-line-text.php:4
698
  #: core/templates/parts/customize-number.php:4
699
  #: core/templates/parts/customize-radio.php:4
700
+ #: core/templates/parts/customize-radio.php:125
701
+ #: core/templates/parts/customize-radio.php:170
702
  #: core/templates/parts/customize-select.php:4
703
+ #: core/templates/parts/customize-select.php:116
704
+ #: core/templates/parts/customize-select.php:155
705
  #: core/templates/parts/customize-single-line-text.php:4
706
  msgid "Label"
707
  msgstr ""
721
 
722
  #: core/classes/class-form-styles.php:731
723
  #: core/templates/parts/customize-checkbox.php:20
724
+ #: core/templates/parts/customize-checkbox.php:145
725
  #: core/templates/parts/customize-email.php:28
726
  #: core/templates/parts/customize-multi-line-text.php:28
727
  #: core/templates/parts/customize-number.php:28
728
  #: core/templates/parts/customize-radio.php:20
729
+ #: core/templates/parts/customize-radio.php:131
730
  #: core/templates/parts/customize-select.php:24
731
  #: core/templates/parts/customize-single-line-text.php:28
732
  msgid "Hint"
1071
  msgid "I agree to the storage and handling of my data by this website"
1072
  msgstr ""
1073
 
1074
+ #: core/helpers/helper-form-templates.php:62
1075
  msgid "Leave this field blank"
1076
  msgstr ""
1077
 
1078
+ #: core/helpers/helper-form-templates.php:981
1079
  msgid "January"
1080
  msgstr ""
1081
 
1082
+ #: core/helpers/helper-form-templates.php:982
1083
  msgid "February"
1084
  msgstr ""
1085
 
1086
+ #: core/helpers/helper-form-templates.php:983
1087
  msgid "March"
1088
  msgstr ""
1089
 
1090
+ #: core/helpers/helper-form-templates.php:984
1091
  msgid "April"
1092
  msgstr ""
1093
 
1094
+ #: core/helpers/helper-form-templates.php:985
1095
  msgid "May"
1096
  msgstr ""
1097
 
1098
+ #: core/helpers/helper-form-templates.php:986
1099
  msgid "June"
1100
  msgstr ""
1101
 
1102
+ #: core/helpers/helper-form-templates.php:987
1103
  msgid "July"
1104
  msgstr ""
1105
 
1106
+ #: core/helpers/helper-form-templates.php:988
1107
  msgid "August"
1108
  msgstr ""
1109
 
1110
+ #: core/helpers/helper-form-templates.php:989
1111
  msgid "September"
1112
  msgstr ""
1113
 
1114
+ #: core/helpers/helper-form-templates.php:990
1115
  msgid "October"
1116
  msgstr ""
1117
 
1118
+ #: core/helpers/helper-form-templates.php:991
1119
  msgid "November"
1120
  msgstr ""
1121
 
1122
+ #: core/helpers/helper-form-templates.php:992
1123
  msgid "December"
1124
  msgstr ""
1125
 
2704
 
2705
  #: core/templates/customize-form-item.php:33
2706
  #: core/templates/customize-form-part-footer.php:3
2707
+ #: core/templates/parts/customize-checkbox.php:161
2708
+ #: core/templates/parts/customize-checkbox.php:189
2709
+ #: core/templates/parts/customize-radio.php:147
2710
+ #: core/templates/parts/customize-radio.php:175
2711
+ #: core/templates/parts/customize-select.php:132
2712
+ #: core/templates/parts/customize-select.php:160
2713
  msgid "Delete"
2714
  msgstr ""
2715
 
2805
  #: core/templates/parts/customize-checkbox.php:28
2806
  #: core/templates/parts/customize-checkbox.php:32
2807
  #: core/templates/parts/customize-radio.php:28
2808
+ #: core/templates/parts/customize-radio.php:33
2809
  #: core/templates/parts/customize-select.php:32
2810
+ #: core/templates/parts/customize-select.php:36
2811
  msgid "Choices"
2812
  msgstr ""
2813
 
2816
  msgid "It doesn't look like your field has any choices yet. Want to add one? Click the \"Add Choice\" button to start."
2817
  msgstr ""
2818
 
2819
+ #: core/templates/parts/customize-checkbox.php:37
2820
+ #: core/templates/parts/customize-radio.php:38
2821
+ #: core/templates/parts/customize-select.php:41
2822
+ msgid "Bulk add choices"
2823
+ msgstr ""
2824
+
2825
+ #: core/templates/parts/customize-checkbox.php:38
2826
+ #: core/templates/parts/customize-radio.php:39
2827
+ #: core/templates/parts/customize-select.php:42
2828
  msgid "Add heading"
2829
  msgstr ""
2830
 
2831
+ #: core/templates/parts/customize-checkbox.php:39
2832
+ #: core/templates/parts/customize-radio.php:40
2833
+ #: core/templates/parts/customize-select.php:43
2834
  msgid "Add choice"
2835
  msgstr ""
2836
 
2837
+ #: core/templates/parts/customize-checkbox.php:42
2838
+ #: core/templates/parts/customize-radio.php:43
2839
+ #: core/templates/parts/customize-select.php:46
2840
+ msgid "Add choices"
2841
+ msgstr ""
2842
+
2843
+ #: core/templates/parts/customize-checkbox.php:43
2844
  #: core/templates/parts/customize-radio.php:44
2845
+ #: core/templates/parts/customize-select.php:47
2846
+ msgid "Cancel"
2847
+ msgstr ""
2848
+
2849
+ #: core/templates/parts/customize-checkbox.php:53
2850
+ #: core/templates/parts/customize-radio.php:54
2851
+ #: core/templates/parts/customize-select.php:53
2852
  msgid "Add 'other' choice"
2853
  msgstr ""
2854
 
2855
+ #: core/templates/parts/customize-checkbox.php:58
2856
+ #: core/templates/parts/customize-radio.php:59
2857
+ #: core/templates/parts/customize-select.php:59
2858
  msgid "'Other' label"
2859
  msgstr ""
2860
 
2861
+ #: core/templates/parts/customize-checkbox.php:62
2862
+ #: core/templates/parts/customize-radio.php:63
2863
+ #: core/templates/parts/customize-select.php:63
2864
  msgid "'Other' placeholder"
2865
  msgstr ""
2866
 
2867
+ #: core/templates/parts/customize-checkbox.php:69
2868
+ #: core/templates/parts/customize-radio.php:70
2869
+ #: core/templates/parts/customize-select.php:75
2870
  msgid "Shuffle order of choices"
2871
  msgstr ""
2872
 
2873
+ #: core/templates/parts/customize-checkbox.php:74
2874
  msgid "Limit choices"
2875
  msgstr ""
2876
 
2877
+ #: core/templates/parts/customize-checkbox.php:79
2878
  msgid "Min choices"
2879
  msgstr ""
2880
 
2881
+ #: core/templates/parts/customize-checkbox.php:83
2882
  msgid "Max choices"
2883
  msgstr ""
2884
 
2885
+ #: core/templates/parts/customize-checkbox.php:88
2886
+ #: core/templates/parts/customize-radio.php:74
2887
  msgid "Align choices"
2888
  msgstr ""
2889
 
2890
+ #: core/templates/parts/customize-checkbox.php:92
2891
+ #: core/templates/parts/customize-radio.php:78
2892
  msgid "Vertically"
2893
  msgstr ""
2894
 
2895
+ #: core/templates/parts/customize-checkbox.php:96
2896
+ #: core/templates/parts/customize-radio.php:82
2897
  msgid "Horizontally"
2898
  msgstr ""
2899
 
2900
+ #: core/templates/parts/customize-checkbox.php:102
2901
  #: core/templates/parts/customize-email.php:48
2902
  #: core/templates/parts/customize-multi-line-text.php:61
2903
  #: core/templates/parts/customize-number.php:76
2904
+ #: core/templates/parts/customize-radio.php:88
2905
+ #: core/templates/parts/customize-select.php:80
2906
  #: core/templates/parts/customize-single-line-text.php:47
2907
  msgid "Require an answer"
2908
  msgstr ""
2909
 
2910
+ #: core/templates/parts/customize-checkbox.php:111
2911
  #: core/templates/parts/customize-email.php:57
2912
  #: core/templates/parts/customize-multi-line-text.php:70
2913
  #: core/templates/parts/customize-number.php:83
2914
+ #: core/templates/parts/customize-radio.php:95
2915
+ #: core/templates/parts/customize-select.php:86
2916
  #: core/templates/parts/customize-single-line-text.php:56
2917
  msgid "Additional CSS class(es)"
2918
  msgstr ""
2919
 
2920
+ #: core/templates/parts/customize-checkbox.php:132
2921
+ #: core/templates/parts/customize-radio.php:118
2922
+ #: core/templates/parts/customize-select.php:109
2923
  msgid "Choice"
2924
  msgstr ""
2925
 
2926
+ #: core/templates/parts/customize-checkbox.php:151
2927
  msgid "Max submissions"
2928
  msgstr ""
2929
 
2930
+ #: core/templates/parts/customize-checkbox.php:157
2931
+ #: core/templates/parts/customize-radio.php:143
2932
+ #: core/templates/parts/customize-select.php:128
2933
  msgid "Make this choice default"
2934
  msgstr ""
2935
 
2936
+ #: core/templates/parts/customize-checkbox.php:177
2937
+ #: core/templates/parts/customize-radio.php:163
2938
+ #: core/templates/parts/customize-select.php:148
2939
  #: inc/classes/parts/class-part-layout-title-dummy.php:8
2940
  msgid "Heading"
2941
  msgstr ""
3001
  "Click the \"Add Choice\" button to start."
3002
  msgstr ""
3003
 
3004
+ #: core/templates/parts/customize-radio.php:137
3005
+ #: core/templates/parts/customize-select.php:122
3006
  #: inc/classes/class-happyforms.php:138
3007
  msgid "Max number of submissions"
3008
  msgstr ""
3032
  msgstr ""
3033
 
3034
  #: inc/classes/class-happyforms.php:126
3035
+ msgid "Let submitters save a draft for set number of days"
3036
  msgstr ""
3037
 
3038
  #: inc/classes/class-happyforms.php:132
3044
  msgstr ""
3045
 
3046
  #: inc/classes/class-happyforms.php:150
 
 
 
 
3047
  msgid "Show an error message if field contains words in Disallowed Comment Keys"
3048
  msgstr ""
3049
 
3050
+ #: inc/classes/class-happyforms.php:160
3051
  msgid "Include reply link"
3052
  msgstr ""
3053
 
3054
+ #: inc/classes/class-happyforms.php:166
3055
  msgid "Include referral web address"
3056
  msgstr ""
3057
 
3058
+ #: inc/classes/class-happyforms.php:178
3059
  msgid "Send abandonment email"
3060
  msgstr ""
3061
 
3242
  msgstr ""
3243
 
3244
  #: inc/classes/parts/class-part-website-url-dummy.php:9
3245
+ msgid "For collecting formatted site or page addresses (URL)."
3246
  msgstr ""
3247
 
3248
  #: integrations/classes/class-integrations-page-controller.php:26
3270
  msgstr ""
3271
 
3272
  #: integrations/classes/class-integrations-page-controller.php:32
 
 
 
 
3273
  msgid "SendFox"
3274
  msgstr ""
3275
 
3276
+ #: integrations/classes/class-integrations-page-controller.php:33
3277
  msgid "SendGrid"
3278
  msgstr ""
3279
 
3280
+ #: integrations/classes/class-integrations-page-controller.php:34
3281
  msgid "Sendinblue"
3282
  msgstr ""
3283
 
3284
+ #: integrations/classes/class-integrations-page-controller.php:35
3285
  msgid "reCAPTCHA"
3286
  msgstr ""
3287
 
3288
+ #: integrations/classes/class-integrations-page-controller.php:36
3289
  msgid "Stripe"
3290
  msgstr ""
3291
 
3292
+ #: integrations/classes/class-integrations-page-controller.php:37
3293
  msgid "PayPal"
3294
  msgstr ""
3295
 
3296
+ #: integrations/classes/class-integrations-page-controller.php:38
3297
  msgid "Zapier"
3298
  msgstr ""
3299
 
3300
+ #: integrations/classes/class-integrations-page-controller.php:39
3301
  msgid "Integromat"
3302
  msgstr ""
3303
 
3304
+ #: integrations/classes/class-integrations-page-controller.php:40
3305
  msgid "Integrately"
3306
  msgstr ""
3307
 
3308
+ #: integrations/classes/class-integrations-page-controller.php:41
3309
  msgid "Google Analytics"
3310
  msgstr ""
3311
 
3412
  msgid "Tracking ID"
3413
  msgstr ""
3414
 
 
 
 
 
3415
  #: integrations/templates/widget-paypal-dummy.php:4
3416
  #: integrations/templates/widget-recaptcha-dummy.php:4
3417
  #: integrations/templates/widget-stripe-dummy.php:4
readme.txt CHANGED
@@ -5,7 +5,7 @@ Tags: contact form, contact form plugin, forms, form builder, custom form, intak
5
  Requires at least: 5.0
6
  Tested up to: 6.0
7
  Requires PHP: 7.0
8
- Stable tag: 1.16.0
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
@@ -145,6 +145,9 @@ Aw, honestly, the thought that you're writing about our contact form builder is
145
 
146
  == Changelog ==
147
 
 
 
 
148
  = 1.16.0 =
149
  * Improvement: Reworded dashboard and builder labels to improve usability.
150
  * Improvement: Empty labels in emails now won't result in excessive whitespace.
@@ -948,6 +951,9 @@ Aw, honestly, the thought that you're writing about our contact form builder is
948
 
949
  == Upgrade Notice ==
950
 
 
 
 
951
  = 1.16.0 =
952
  * Better rendering of empty labels in emails, improved wording.
953
 
5
  Requires at least: 5.0
6
  Tested up to: 6.0
7
  Requires PHP: 7.0
8
+ Stable tag: 1.16.1
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
145
 
146
  == Changelog ==
147
 
148
+ = 1.16.1 =
149
+ * New feature: "Bulk Add Choices" control for easily adding long lists of choices to Radio, Checkbox and Dropdown fields.
150
+
151
  = 1.16.0 =
152
  * Improvement: Reworded dashboard and builder labels to improve usability.
153
  * Improvement: Empty labels in emails now won't result in excessive whitespace.
951
 
952
  == Upgrade Notice ==
953
 
954
+ = 1.16.1 =
955
+ * New "Bulk Add Choices" control for Radio, Checkbox and Dropdown fields, miscellaneous improvements and bugfixes.
956
+
957
  = 1.16.0 =
958
  * Better rendering of empty labels in emails, improved wording.
959