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

Version Description

  • New feature: Messages tab in Edit Form screen allows for complete language customization.
  • New feature: Prefill control for setting a default value on Short Text, Long Text, Email Address and Number fields.
  • Bugfix: "Email respondent a copy of their submission" "Include submitted" feature was misbehaving.
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.10.0
Comparing to
See all releases

Code changes from version 1.9.30 to 1.10.0

Files changed (50) hide show
  1. core/assets/css/admin.css +1 -1
  2. core/assets/css/color.css +3 -8
  3. core/assets/css/customize.css +128 -33
  4. core/assets/css/layout.css +9 -18
  5. core/assets/js/admin/shortcode.js +1 -0
  6. core/assets/js/frontend/email.js +2 -28
  7. core/assets/js/parts/part-email.js +0 -108
  8. core/assets/js/parts/part-number.js +0 -65
  9. core/assets/js/parts/part-select.js +1 -18
  10. core/classes/class-block.php +3 -3
  11. core/classes/class-form-controller.php +3 -0
  12. core/classes/class-form-email.php +9 -9
  13. core/classes/class-form-messages.php +212 -0
  14. core/classes/class-form-setup.php +82 -55
  15. core/classes/class-form-styles.php +4 -4
  16. core/classes/class-happyforms-core.php +21 -62
  17. core/classes/class-happyforms-widget.php +2 -2
  18. core/classes/class-validation-messages.php +110 -11
  19. core/classes/class-wp-customize-form-manager.php +5 -4
  20. core/classes/parts/class-part-checkbox.php +2 -2
  21. core/classes/parts/class-part-email.php +30 -112
  22. core/classes/parts/class-part-multi-line-text.php +22 -10
  23. core/classes/parts/class-part-number.php +33 -57
  24. core/classes/parts/class-part-radio.php +2 -2
  25. core/classes/parts/class-part-select.php +2 -6
  26. core/classes/parts/class-part-single-line-text.php +15 -2
  27. core/helpers/helper-form-templates.php +2 -27
  28. core/helpers/helper-misc.php +1 -1
  29. core/templates/customize-controls/setup/group_start.php +28 -1
  30. core/templates/customize-form-build.php +0 -1
  31. core/templates/customize-form-messages.php +22 -0
  32. core/templates/customize-form-part-footer.php +0 -1
  33. core/templates/customize-form-steps.php +1 -0
  34. core/templates/partials/form-submit.php +5 -1
  35. core/templates/partials/happyforms-select.php +1 -1
  36. core/templates/parts/customize-checkbox.php +45 -47
  37. core/templates/parts/customize-email.php +21 -40
  38. core/templates/parts/customize-multi-line-text.php +35 -41
  39. core/templates/parts/customize-number.php +31 -44
  40. core/templates/parts/customize-radio.php +27 -29
  41. core/templates/parts/customize-select.php +15 -23
  42. core/templates/parts/customize-single-line-text.php +21 -21
  43. core/templates/parts/frontend-email.php +18 -86
  44. core/templates/parts/frontend-number.php +1 -41
  45. happyforms.php +5 -5
  46. inc/assets/js/customize.js +320 -75
  47. inc/classes/class-happyforms.php +3 -3
  48. inc/templates/email-user.php +2 -2
  49. languages/happyforms.pot +547 -592
  50. readme.txt +9 -1
core/assets/css/admin.css CHANGED
@@ -206,7 +206,7 @@ p.welcome-panel-footer a:active {
206
  }
207
 
208
  #available-widgets div[id*='widget-tpl-happyforms_widget-'] .widget-title:before {
209
- content: '\f130';
210
  }
211
 
212
  .happyforms-editor-button span.dashicons {
206
  }
207
 
208
  #available-widgets div[id*='widget-tpl-happyforms_widget-'] .widget-title:before {
209
+ content: '\f175';
210
  }
211
 
212
  .happyforms-editor-button span.dashicons {
core/assets/css/color.css CHANGED
@@ -221,10 +221,6 @@
221
  position: relative;
222
  }
223
 
224
- .happyforms-styles .happyforms-part-wrap--confirmation {
225
- margin-top: 10px;
226
- }
227
-
228
  /* parts - option labels */
229
 
230
  .happyforms-styles .happyforms-part .option-label {
@@ -676,10 +672,9 @@
676
  color: var(--happyforms-color-part-placeholder);
677
  }
678
 
679
- .happyforms-styles .happyforms-part--label-as_placeholder input:focus~label .label,
680
- .happyforms-styles .happyforms-part--label-as_placeholder textarea:focus~label .label,
681
- .happyforms-styles .happyforms-part--label-as_placeholder.happyforms-part--filled input~label .label,
682
- .happyforms-styles .happyforms-part--label-as_placeholder.happyforms-part--filled textarea~label .label,
683
  .happyforms-styles .happyforms-part--select.happyforms-part--filled.happyforms-part--label-as_placeholder .label {
684
  font-weight: bold;
685
  font-size: 14px;
221
  position: relative;
222
  }
223
 
 
 
 
 
224
  /* parts - option labels */
225
 
226
  .happyforms-styles .happyforms-part .option-label {
672
  color: var(--happyforms-color-part-placeholder);
673
  }
674
 
675
+ .happyforms-styles .happyforms-part--label-as_placeholder input:focus~.happyforms-part__label-container label .label,
676
+ .happyforms-styles .happyforms-part--label-as_placeholder textarea:focus~.happyforms-part__label-container label .label,
677
+ .happyforms-styles .happyforms-part--label-as_placeholder.happyforms-part--filled .happyforms-part__label-container label .label,
 
678
  .happyforms-styles .happyforms-part--select.happyforms-part--filled.happyforms-part--label-as_placeholder .label {
679
  font-weight: bold;
680
  font-size: 14px;
core/assets/css/customize.css CHANGED
@@ -7,6 +7,14 @@
7
  z-index: 1000;
8
  }
9
 
 
 
 
 
 
 
 
 
10
  .wp-full-overlay-sidebar .wp-full-overlay-header {
11
  position: relative;
12
  z-index: 9999;
@@ -22,10 +30,22 @@
22
  border-bottom: 0;
23
  }
24
 
 
 
 
 
 
 
25
  .happyforms-stack-view input[type="number"] {
26
  padding-right: 0;
27
  }
28
 
 
 
 
 
 
 
29
  /**
30
  *
31
  * Header actions
@@ -92,6 +112,11 @@
92
  padding-top: 0;
93
  }
94
 
 
 
 
 
 
95
  /**
96
  *
97
  * Sidebar stacked view
@@ -362,7 +387,6 @@ a.happyforms-form-part-advanced-settings {
362
 
363
  a.happyforms-form-part-logic {
364
  float: right;
365
- margin-right: 10px;
366
  }
367
 
368
  .happyforms-part-logic-wrap {
@@ -477,13 +501,6 @@ a.happyforms-form-part-remove:hover {
477
  * Form edit
478
  *
479
  */
480
- #customize-control-optional_part_label {
481
- display: none;
482
- }
483
-
484
- #customize-control-confirmation_email_content .wp-editor-tabs {
485
- display: none;
486
- }
487
 
488
  .customize-control-group.happyforms-nested-settings {
489
  display: none;
@@ -500,7 +517,8 @@ a.happyforms-form-part-remove:hover {
500
 
501
  #customize-control-receive_email_alerts.checked ~ .happyforms-nested-settings[data-trigger=receive_email_alerts],
502
  .has-email #customize-control-send_confirmation_email.checked ~ .happyforms-nested-settings[data-trigger=send_confirmation_email],
503
- #customize-control-use_html_id.checked ~ .happyforms-nested-settings[data-trigger=use_html_id] {
 
504
  display: block;
505
  }
506
 
@@ -512,7 +530,6 @@ a.happyforms-form-part-remove:hover {
512
  .happyforms-setup-view #customize-control-email_recipient,
513
  .happyforms-setup-view #customize-control-email_bccs,
514
  .happyforms-setup-view #customize-control-alert_email_subject,
515
- .happyforms-setup-view .customize-control[id*='customize-control-confirmation_email_']:not(#customize-control-confirmation_email_include_values),
516
  .happyforms-setup-view .customize-control[id*='customize-control-redirect']:not(#customize-control-redirect_on_complete):not(#customize-control-redirect_blank),
517
  .happyforms-setup-view .customize-control[id*='customize-control-captcha_']:not(#customize-control-captcha_label),
518
  .happyforms-setup-view #customize-control-email_mark_and_reply,
@@ -555,6 +572,60 @@ a.happyforms-form-part-remove:hover {
555
  padding-bottom: 5px;
556
  }
557
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
558
  /**
559
  *
560
  * Form build
@@ -1378,6 +1449,10 @@ li.customize-control.happyforms-range-control select.happyforms-unit-switch {
1378
  unicode-bidi: embed;
1379
  }
1380
 
 
 
 
 
1381
  #customize-control-part_toggle_placeholders,
1382
  #customize-control-dropdowns,
1383
  #customize-control-checkboxes-radios,
@@ -1397,10 +1472,6 @@ li.customize-control.happyforms-range-control select.happyforms-unit-switch {
1397
  .happyforms-style-view.has-checkbox #customize-control-checkboxes-radios,
1398
  .happyforms-style-view.has-radio #customize-control-checkboxes-radios,
1399
  .happyforms-style-view.has-table #customize-control-checkboxes-radios,
1400
- .happyforms-style-view.has-legal #customize-control-checkboxes-radios,
1401
- .happyforms-style-view.has-poll #customize-control-checkboxes-radios,
1402
- .happyforms-style-view.has-signature #customize-control-checkboxes-radios,
1403
- .happyforms-style-view.has-email_integration #customize-control-checkboxes-radios,
1404
  .happyforms-style-view.has-rating #customize-control-rating,
1405
  .happyforms-style-view.has-table #customize-control-tables,
1406
  .happyforms-style-view.has-divider #customize-control-dividers,
@@ -1428,6 +1499,26 @@ i.mce-i-happyforms_narrative_input:after {
1428
  .happyforms-widget-form .mce-btn.mce-active:hover i {
1429
  color: inherit;
1430
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1431
 
1432
  /**
1433
  *
@@ -1440,7 +1531,8 @@ i.mce-i-happyforms_narrative_input:after {
1440
  border-left: 1px solid #eee;
1441
  }
1442
  .happyforms-setup-view .happyforms-nested-settings,
1443
- .happyforms-email-view .happyforms-nested-settings {
 
1444
  margin-top: -5px;
1445
  margin-bottom: 12px;
1446
  padding-top: 5px;
@@ -1483,24 +1575,6 @@ div.customize-section-description {
1483
  background: #fff;
1484
  }
1485
 
1486
- #customize-control-confirmation_message {
1487
- display: none;
1488
- }
1489
-
1490
- .happyforms-nested-settings[data-trigger="confirm_submission"] {
1491
- display: block;
1492
- }
1493
-
1494
- #customize-control-confirm_submission[data-value="success_message"] ~ .customize-control-group #customize-control-confirmation_message,
1495
- #customize-control-confirm_submission[data-value="success_message_hide_form"] ~ .customize-control-group #customize-control-confirmation_message {
1496
- display: block;
1497
- }
1498
-
1499
- #customize-control-confirm_submission[data-value="success_message"] ~ .happyforms-nested-settings[data-trigger="confirm_submission"],
1500
- #customize-control-confirm_submission[data-value="success_message_hide_form"] ~ .happyforms-nested-settings[data-trigger="confirm_submission"] {
1501
- display: block;
1502
- }
1503
-
1504
  .wp-editor-float-right {
1505
  float: right;
1506
  }
@@ -1565,3 +1639,24 @@ ul.happyforms-parts-list li.happyforms-parts-list-item--group .happyforms-parts-
1565
  .min-max-wrapper > *:last-child {
1566
  padding-right: 0;
1567
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7
  z-index: 1000;
8
  }
9
 
10
+ .wp-full-overlay.expanded .wp-full-overlay-sidebar {
11
+ width: 35%;
12
+ }
13
+
14
+ .wp-full-overlay.expanded {
15
+ margin-left: min( 35%, calc( 35% - calc( 35% - 600px ) ) );
16
+ }
17
+
18
  .wp-full-overlay-sidebar .wp-full-overlay-header {
19
  position: relative;
20
  z-index: 9999;
30
  border-bottom: 0;
31
  }
32
 
33
+
34
+ .wp-full-overlay.expanded .wp-full-overlay-footer {
35
+ width: calc( 35% - 1px );
36
+ max-width: 599px;
37
+ }
38
+
39
  .happyforms-stack-view input[type="number"] {
40
  padding-right: 0;
41
  }
42
 
43
+ @media screen and (max-width: 850px) {
44
+ .wp-full-overlay.expanded {
45
+ margin-left: 300px;
46
+ }
47
+ }
48
+
49
  /**
50
  *
51
  * Header actions
112
  padding-top: 0;
113
  }
114
 
115
+ #happyforms-steps-nav .nav-tab-wrapper .nav-tab-active {
116
+ background: #eeeeee;
117
+ border-bottom-color: #eeeeee;
118
+ }
119
+
120
  /**
121
  *
122
  * Sidebar stacked view
387
 
388
  a.happyforms-form-part-logic {
389
  float: right;
 
390
  }
391
 
392
  .happyforms-part-logic-wrap {
501
  * Form edit
502
  *
503
  */
 
 
 
 
 
 
 
504
 
505
  .customize-control-group.happyforms-nested-settings {
506
  display: none;
517
 
518
  #customize-control-receive_email_alerts.checked ~ .happyforms-nested-settings[data-trigger=receive_email_alerts],
519
  .has-email #customize-control-send_confirmation_email.checked ~ .happyforms-nested-settings[data-trigger=send_confirmation_email],
520
+ #customize-control-use_html_id.checked ~ .happyforms-nested-settings[data-trigger=use_html_id],
521
+ #customize-control-add_submit_button_class.checked ~ .happyforms-nested-settings[data-trigger=add_submit_button_class] {
522
  display: block;
523
  }
524
 
530
  .happyforms-setup-view #customize-control-email_recipient,
531
  .happyforms-setup-view #customize-control-email_bccs,
532
  .happyforms-setup-view #customize-control-alert_email_subject,
 
533
  .happyforms-setup-view .customize-control[id*='customize-control-redirect']:not(#customize-control-redirect_on_complete):not(#customize-control-redirect_blank),
534
  .happyforms-setup-view .customize-control[id*='customize-control-captcha_']:not(#customize-control-captcha_label),
535
  .happyforms-setup-view #customize-control-email_mark_and_reply,
572
  padding-bottom: 5px;
573
  }
574
 
575
+ /**
576
+ *
577
+ * Form message
578
+ *
579
+ */
580
+ .happyforms-messages-view .customize-control,
581
+ .happyforms-messages-view #messages-view-errors,
582
+ .happyforms-messages-view #messages-view-hints {
583
+ display: none;
584
+ }
585
+
586
+ #customize-control-error_message,
587
+ .has-required-selection-fields #messages-view-errors,
588
+ .has-min-limit-choices #messages-view-errors,
589
+ .has-field #messages-view-errors,
590
+ .has-optional-field #messages-view-hints,
591
+ .has-searchable-dropdown #messages-view-hints,
592
+ .has-min-chars-label #messages-view-hints,
593
+ .has-max-chars-label #messages-view-hints,
594
+ .has-min-words-label #messages-view-hints,
595
+ .has-max-words-label #messages-view-hints {
596
+ display: block;
597
+ }
598
+
599
+ #customize-control-submit_button_label,
600
+ .has-field #customize-control-field_invalid,
601
+ .has-required-fields #customize-control-field_empty,
602
+ .has-required-selection-fields #customize-control-no_selection,
603
+ .has-optional-field #customize-control-optional_part_label,
604
+ .has-min-limit-choices #customize-control-select_more_choices,
605
+ .has-max-limit-choices #customize-control-select_less_choices,
606
+ .is-show-success-msg #customize-control-confirmation_message,
607
+ .has-min-words-label #customize-control-words_label_min,
608
+ .has-max-words-label #customize-control-words_label_max,
609
+ .has-min-chars-label #customize-control-characters_label_min,
610
+ .has-max-chars-label #customize-control-characters_label_max,
611
+ .show-msg-short-label #customize-control-message_too_short,
612
+ .has-max-chars-label #customize-control-message_too_long,
613
+ .has-max-words-label #customize-control-message_too_long,
614
+ .has-searchable-dropdown #customize-control-no_results_label,
615
+ .has-number #customize-control-number_min_invalid,
616
+ .has-number #customize-control-number_max_invalid {
617
+ display: block;
618
+ }
619
+
620
+ .happyforms-messages-view .customize-control .has-restore-default {
621
+ margin-bottom: 5px;
622
+ }
623
+
624
+ .happyforms-messages-view .customize-control .restore-default-btn {
625
+ display: none;
626
+ width: 100%;
627
+ }
628
+
629
  /**
630
  *
631
  * Form build
1449
  unicode-bidi: embed;
1450
  }
1451
 
1452
+ .happyforms-widget-content textarea[data-bind=description] {
1453
+ height: 90px;
1454
+ }
1455
+
1456
  #customize-control-part_toggle_placeholders,
1457
  #customize-control-dropdowns,
1458
  #customize-control-checkboxes-radios,
1472
  .happyforms-style-view.has-checkbox #customize-control-checkboxes-radios,
1473
  .happyforms-style-view.has-radio #customize-control-checkboxes-radios,
1474
  .happyforms-style-view.has-table #customize-control-checkboxes-radios,
 
 
 
 
1475
  .happyforms-style-view.has-rating #customize-control-rating,
1476
  .happyforms-style-view.has-table #customize-control-tables,
1477
  .happyforms-style-view.has-divider #customize-control-dividers,
1499
  .happyforms-widget-form .mce-btn.mce-active:hover i {
1500
  color: inherit;
1501
  }
1502
+ /**
1503
+ *
1504
+ * Group settings
1505
+ *
1506
+ */
1507
+
1508
+ .happyforms-group-settings .happyforms-group-settings-description {
1509
+ margin-top: 0px;
1510
+ }
1511
+
1512
+ .happyforms-group-settings {
1513
+ margin-bottom: 10px;
1514
+ padding-top: 10px;
1515
+ padding-bottom: 10px;
1516
+ border-top: 1px solid #ddd;
1517
+ }
1518
+
1519
+ .happyforms-group-settings:first-child {
1520
+ border-top: 0px;
1521
+ }
1522
 
1523
  /**
1524
  *
1531
  border-left: 1px solid #eee;
1532
  }
1533
  .happyforms-setup-view .happyforms-nested-settings,
1534
+ .happyforms-email-view .happyforms-nested-settings,
1535
+ .happyforms-messages-view .happyforms-nested-settings {
1536
  margin-top: -5px;
1537
  margin-bottom: 12px;
1538
  padding-top: 5px;
1575
  background: #fff;
1576
  }
1577
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1578
  .wp-editor-float-right {
1579
  float: right;
1580
  }
1639
  .min-max-wrapper > *:last-child {
1640
  padding-right: 0;
1641
  }
1642
+
1643
+ .happyforms-widget-form .happyforms-widget-row {
1644
+ display: flex;
1645
+ flex-wrap: wrap;
1646
+ }
1647
+
1648
+ .happyforms-widget-form .happyforms-widget-cols.width-half {
1649
+ width: 50%;
1650
+ padding-right: 5px;
1651
+ flex: 0 50%;
1652
+ box-sizing: border-box;
1653
+ }
1654
+ .happyforms-widget-form .happyforms-widget-cols.width-half:nth-child(n+2) {
1655
+ padding-right: 0px;
1656
+ padding-left: 5px;
1657
+ }
1658
+
1659
+ /*
1660
+ .happyforms-messages-view .customize-control {
1661
+ display: block;
1662
+ }*/
core/assets/css/layout.css CHANGED
@@ -300,10 +300,6 @@ h3.happyforms-form__title {
300
  position: relative;
301
  }
302
 
303
- .happyforms-part-wrap--confirmation {
304
- margin-top: 10px;
305
- }
306
-
307
  /* label placement */
308
 
309
  .happyforms-part--label-below .happyforms-part-wrap {
@@ -318,10 +314,6 @@ h3.happyforms-form__title {
318
  margin-bottom: 5px;
319
  }
320
 
321
- .happyforms-part--label-above .happyforms-part__label--confirmation {
322
- margin-top: 10px;
323
- }
324
-
325
  .happyforms-part--label-below .happyforms-part__description {
326
  order: 1;
327
  margin-top: 0;
@@ -821,10 +813,9 @@ form .happyforms-flex>.happyforms-message-notices .happyforms-message-notice a {
821
  right: 11px;
822
  }
823
 
824
- .happyforms-part--label-as_placeholder input:focus~label,
825
- .happyforms-part--label-as_placeholder textarea:focus~label,
826
- .happyforms-part--label-as_placeholder.happyforms-part--filled input~label,
827
- .happyforms-part--label-as_placeholder.happyforms-part--filled textarea~label,
828
  .happyforms-part--select.happyforms-part--label-as_placeholder.happyforms-part--filled label {
829
  top: 8px;
830
  }
@@ -839,9 +830,9 @@ form .happyforms-flex>.happyforms-message-notices .happyforms-message-notice a {
839
  left: auto;
840
  }
841
 
842
- .happyforms-form--part-inner-padding-narrow .happyforms-part--label-as_placeholder input:focus~label,
843
- .happyforms-form--part-inner-padding-narrow .happyforms-part--label-as_placeholder textarea:focus~label,
844
- .happyforms-form--part-inner-padding-narrow .happyforms-part--label-as_placeholder.happyforms-part--filled input~label,
845
  .happyforms-form--part-inner-padding-narrow .happyforms-part--label-as_placeholder.happyforms-part--filled textarea~label {
846
  top: 7px;
847
  }
@@ -856,9 +847,9 @@ form .happyforms-flex>.happyforms-message-notices .happyforms-message-notice a {
856
  left: auto;
857
  }
858
 
859
- .happyforms-form--part-inner-padding-wide .happyforms-part--label-as_placeholder input:focus~label,
860
- .happyforms-form--part-inner-padding-wide .happyforms-part--label-as_placeholder textarea:focus~label,
861
- .happyforms-form--part-inner-padding-wide .happyforms-part--label-as_placeholder.happyforms-part--filled input~label,
862
  .happyforms-form--part-inner-padding-wide .happyforms-part--label-as_placeholder.happyforms-part--filled textarea~label {
863
  top: 12px;
864
  }
300
  position: relative;
301
  }
302
 
 
 
 
 
303
  /* label placement */
304
 
305
  .happyforms-part--label-below .happyforms-part-wrap {
314
  margin-bottom: 5px;
315
  }
316
 
 
 
 
 
317
  .happyforms-part--label-below .happyforms-part__description {
318
  order: 1;
319
  margin-top: 0;
813
  right: 11px;
814
  }
815
 
816
+ .happyforms-part--label-as_placeholder input:focus~.happyforms-part__label-container>label,
817
+ .happyforms-part--label-as_placeholder textarea:focus~.happyforms-part__label-container>label,
818
+ .happyforms-part--label-as_placeholder.happyforms-part--filled .happyforms-part__label-container label,
 
819
  .happyforms-part--select.happyforms-part--label-as_placeholder.happyforms-part--filled label {
820
  top: 8px;
821
  }
830
  left: auto;
831
  }
832
 
833
+ .happyforms-form--part-inner-padding-narrow .happyforms-part--label-as_placeholder input:focus~.happyforms-part__label-container>label,
834
+ .happyforms-form--part-inner-padding-narrow .happyforms-part--label-as_placeholder textarea:focus~.happyforms-part__label-container>label,
835
+ .happyforms-form--part-inner-padding-narrow .happyforms-part--label-as_placeholder.happyforms-part--filled .happyforms-part__label-container label,
836
  .happyforms-form--part-inner-padding-narrow .happyforms-part--label-as_placeholder.happyforms-part--filled textarea~label {
837
  top: 7px;
838
  }
847
  left: auto;
848
  }
849
 
850
+ .happyforms-form--part-inner-padding-wide .happyforms-part--label-as_placeholder input:focus~.happyforms-part__label-container>label,
851
+ .happyforms-form--part-inner-padding-wide .happyforms-part--label-as_placeholder textarea:focus~.happyforms-part__label-container>label,
852
+ .happyforms-form--part-inner-padding-wide .happyforms-part--label-as_placeholder.happyforms-part--filled .happyforms-part__label-container label,
853
  .happyforms-form--part-inner-padding-wide .happyforms-part--label-as_placeholder.happyforms-part--filled textarea~label {
854
  top: 12px;
855
  }
core/assets/js/admin/shortcode.js CHANGED
@@ -37,5 +37,6 @@
37
  }
38
 
39
  views.register( 'happyforms', _.extend( {}, happyforms ) );
 
40
 
41
  } )( window, window.wp.mce.views, window.jQuery, _happyFormsAdmin );
37
  }
38
 
39
  views.register( 'happyforms', _.extend( {}, happyforms ) );
40
+ views.register( 'form', _.extend( {}, happyforms ) );
41
 
42
  } )( window, window.wp.mce.views, window.jQuery, _happyFormsAdmin );
core/assets/js/frontend/email.js CHANGED
@@ -1,4 +1,4 @@
1
- ( function( $, settings ) {
2
 
3
  HappyForms.parts = HappyForms.parts || {};
4
 
@@ -7,11 +7,6 @@
7
  this.type = this.$el.data( 'happyforms-type' );
8
  this.$input = $( 'input', this.$el );
9
  this.$visualInput = $( 'input[type=email]', this.$el );
10
- this.mode = this.$el.attr( 'data-mode' );
11
-
12
- if ( 'autocomplete' === this.mode ) {
13
- this.initAutocomplete();
14
- }
15
 
16
  this.$input.on( 'keyup', this.triggerChange.bind( this ) );
17
  this.$input.on( 'change', this.triggerChange.bind( this ) );
@@ -19,28 +14,7 @@
19
  this.$visualInput.on( 'blur', this.onBlur.bind( this ) );
20
 
21
  this.initTooltip();
22
- },
23
-
24
- initAutocomplete: function() {
25
- var $inputs = $( '[data-serialize]', this.$el );
26
-
27
- $inputs.each( function() {
28
- var $visualInput = $( this ).next( 'input[type=email]' );
29
- var $select = $visualInput.next( '.happyforms-custom-select-dropdown' );
30
-
31
- $visualInput.happyFormsSelect( {
32
- $input: $( this ),
33
- $select: $select,
34
- searchable: 'autocomplete',
35
- autocompleteOptions: {
36
- url: settings.url,
37
- source: settings.autocompleteSource,
38
- trigger: '@',
39
- partial: true
40
- },
41
- });
42
- });
43
  }
44
  };
45
 
46
- } )( jQuery, _happyFormsEmailSettings );
1
+ ( function( $ ) {
2
 
3
  HappyForms.parts = HappyForms.parts || {};
4
 
7
  this.type = this.$el.data( 'happyforms-type' );
8
  this.$input = $( 'input', this.$el );
9
  this.$visualInput = $( 'input[type=email]', this.$el );
 
 
 
 
 
10
 
11
  this.$input.on( 'keyup', this.triggerChange.bind( this ) );
12
  this.$input.on( 'change', this.triggerChange.bind( this ) );
14
  this.$visualInput.on( 'blur', this.onBlur.bind( this ) );
15
 
16
  this.initTooltip();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17
  }
18
  };
19
 
20
+ } )( jQuery );
core/assets/js/parts/part-email.js CHANGED
@@ -15,116 +15,8 @@
15
 
16
  initialize: function() {
17
  happyForms.classes.views.Part.prototype.initialize.apply(this, arguments);
18
-
19
- this.listenTo( this.model, 'change:confirmation_field', this.onConfirmationChange );
20
- this.listenTo( this.model, 'change:confirmation_field_label', this.onConfirmationLabelChange );
21
- this.listenTo( this.model, 'change:confirmation_field_placeholder', this.onConfirmationPlaceholderChange );
22
- this.listenTo( this.model, 'change:autocomplete_domains', this.onAutocompleteDomainsChange );
23
- this.listenTo( this.model, 'change:prefix', this.onEmailPrefixSuffixChange );
24
- this.listenTo( this.model, 'change:suffix', this.onEmailPrefixSuffixChange );
25
- },
26
-
27
- /**
28
- * Trigger previewer event on 'Require confirmation of the value' checkbox change.
29
- * Adds a new confirmation field to preview.
30
- *
31
- * @since 1.0.0.
32
- *
33
- * @param {object} e JS event.
34
- *
35
- * @return void
36
- */
37
- onConfirmationChange: function( e ) {
38
- $confirmationSettings = $( '.happyforms-nested-settings[data-trigger="confirmation_field"]', this.$el );
39
-
40
- if ( this.model.get( 'confirmation_field' ) ) {
41
- $confirmationSettings.show();
42
- } else {
43
- $confirmationSettings.hide();
44
- }
45
-
46
- var model = this.model;
47
-
48
- model.fetchHtml( function( response ) {
49
- var data = {
50
- id: model.get( 'id' ),
51
- html: response,
52
- };
53
-
54
- happyForms.previewSend( 'happyforms-form-part-refresh', data );
55
- } );
56
- },
57
-
58
- /**
59
- * Send updated confirmation field label value to previewer.
60
- *
61
- * @since 1.0.0.
62
- *
63
- * @return void
64
- */
65
- onConfirmationLabelChange: function() {
66
- var data = {
67
- id: this.model.get( 'id' ),
68
- callback: 'onEmailConfirmationLabelChangeCallback',
69
- };
70
-
71
- happyForms.previewSend( 'happyforms-part-dom-update', data );
72
- },
73
-
74
- onConfirmationPlaceholderChange: function() {
75
- var data = {
76
- id: this.model.get( 'id' ),
77
- callback: 'onEmailConfirmationLabelPlaceholderCallback',
78
- };
79
-
80
- happyForms.previewSend( 'happyforms-part-dom-update', data );
81
  },
82
 
83
- onAutocompleteDomainsChange: function() {
84
- var model = this.model;
85
-
86
- model.fetchHtml( function( response ) {
87
- var data = {
88
- id: model.get( 'id' ),
89
- html: response,
90
- };
91
-
92
- happyForms.previewSend( 'happyforms-form-part-refresh', data );
93
- } );
94
- },
95
-
96
- onEmailPrefixSuffixChange: function( model, value ) {
97
- var $autocompleteDomainsControl = $( '[data-bind=autocomplete_domains]', this.$el ).parent();
98
-
99
- var prefixVal = $( '[data-bind=prefix]', this.$el ).val();
100
- var suffixVal = $( '[data-bind=suffix]', this.$el ).val();
101
-
102
- if ( prefixVal || suffixVal ) {
103
- $autocompleteDomainsControl.hide();
104
- $( '[data-bind=autocomplete_domains]', this.$el ).prop( 'checked', false );
105
- model.set( 'autocomplete_domains', 0 );
106
- } else {
107
- $autocompleteDomainsControl.show();
108
- }
109
- }
110
- } );
111
-
112
- happyForms.previewer = _.extend( happyForms.previewer, {
113
- onEmailConfirmationLabelChangeCallback: function( id, html, options ) {
114
- var part = this.getPartModel( id );
115
- var $part = this.getPartElement( html );
116
- var $label = this.$( '.happyforms-part__label--confirmation .label', $part );
117
-
118
- $label.text( part.get( 'confirmation_field_label' ) );
119
- },
120
-
121
- onEmailConfirmationLabelPlaceholderCallback: function( id, html, options ) {
122
- var part = this.getPartModel( id );
123
- var $part = this.getPartElement( html );
124
- var $input = this.$( '.happyforms-part-wrap--confirmation [type="email"]', $part );
125
-
126
- $input.attr( 'placeholder', part.get( 'confirmation_field_placeholder' ) );
127
- },
128
  } );
129
 
130
  } ) ( jQuery, _, Backbone, wp.customize, _happyFormsSettings );
15
 
16
  initialize: function() {
17
  happyForms.classes.views.Part.prototype.initialize.apply(this, arguments);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
18
  },
19
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
20
  } );
21
 
22
  } ) ( jQuery, _, Backbone, wp.customize, _happyFormsSettings );
core/assets/js/parts/part-number.js CHANGED
@@ -20,9 +20,6 @@
20
  initialize: function () {
21
  happyForms.classes.views.Part.prototype.initialize.apply( this, arguments );
22
 
23
- this.listenTo( this.model, 'change:confirmation_field', this.onConfirmationChange );
24
- this.listenTo( this.model, 'change:confirmation_field_label', this.onConfirmationLabelChange );
25
- this.listenTo( this.model, 'change:confirmation_field_placeholder', this.onConfirmationPlaceholderChange );
26
  this.listenTo( this.model, 'change:mask_numeric_thousands_delimiter', this.onThousandsDelimiterChange );
27
  this.listenTo( this.model, 'change:mask_numeric_decimal_mark', this.onDecimalMarkChange );
28
  this.listenTo( this.model, 'change:mask_numeric_prefix', this.onPrefixChange );
@@ -30,27 +27,6 @@
30
  this.listenTo( happyForms.form, 'save', this.onFormSave );
31
  },
32
 
33
- onConfirmationChange: function( e ) {
34
- $confirmationSettings = $( '.happyforms-nested-settings[data-trigger="confirmation_field"]', this.$el );
35
-
36
- if ( this.model.get( 'confirmation_field' ) ) {
37
- $confirmationSettings.show();
38
- } else {
39
- $confirmationSettings.hide();
40
- }
41
-
42
- var model = this.model;
43
-
44
- model.fetchHtml( function( response ) {
45
- var data = {
46
- id: model.get( 'id' ),
47
- html: response,
48
- };
49
-
50
- happyForms.previewSend( 'happyforms-form-part-refresh', data );
51
- } );
52
- },
53
-
54
  /**
55
  * Toggle masked input configuration on `Mask this input` checkbox change.
56
  *
@@ -89,31 +65,6 @@
89
  } );
90
  },
91
 
92
- /**
93
- * Send updated confirmation field label value to previewer.
94
- *
95
- * @since 1.0.0.
96
- *
97
- * @return void
98
- */
99
- onConfirmationLabelChange: function () {
100
- var data = {
101
- id: this.model.get( 'id' ),
102
- callback: 'onNumberConfirmationLabelChangeCallback',
103
- };
104
-
105
- happyForms.previewSend( 'happyforms-part-dom-update', data );
106
- },
107
-
108
- onConfirmationPlaceholderChange: function () {
109
- var data = {
110
- id: this.model.get( 'id' ),
111
- callback: 'onNumberConfirmationPlaceholderChangeCallback',
112
- };
113
-
114
- happyForms.previewSend( 'happyforms-part-dom-update', data );
115
- },
116
-
117
  onThousandsDelimiterChange: function() {
118
  var data = {
119
  id: this.model.get( 'id' ),
@@ -202,22 +153,6 @@
202
  } );
203
 
204
  happyForms.previewer = _.extend( happyForms.previewer, {
205
- onNumberConfirmationLabelChangeCallback: function( id, html, options ) {
206
- var part = this.getPartModel( id );
207
- var $part = this.getPartElement( html );
208
- var $confirmationLabel = this.$( '.happyforms-part__label--confirmation .label', $part );
209
-
210
- $confirmationLabel.text( part.get('confirmation_field_label') );
211
- },
212
-
213
- onNumberConfirmationPlaceholderChangeCallback: function( id, html, options ) {
214
- var part = this.getPartModel( id );
215
- var $part = this.getPartElement( html );
216
- var $input = this.$( '.happyforms-confirmation-input', $part );
217
-
218
- $input.attr( 'placeholder', part.get('confirmation_field_placeholder' ) );
219
- },
220
-
221
  onNumberThousandsDelimiterChangeCallback: function( id, html, options, $ ) {
222
  var part = this.getPartModel( id );
223
  var $part = this.getPartElement( html );
20
  initialize: function () {
21
  happyForms.classes.views.Part.prototype.initialize.apply( this, arguments );
22
 
 
 
 
23
  this.listenTo( this.model, 'change:mask_numeric_thousands_delimiter', this.onThousandsDelimiterChange );
24
  this.listenTo( this.model, 'change:mask_numeric_decimal_mark', this.onDecimalMarkChange );
25
  this.listenTo( this.model, 'change:mask_numeric_prefix', this.onPrefixChange );
27
  this.listenTo( happyForms.form, 'save', this.onFormSave );
28
  },
29
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
30
  /**
31
  * Toggle masked input configuration on `Mask this input` checkbox change.
32
  *
65
  } );
66
  },
67
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
68
  onThousandsDelimiterChange: function() {
69
  var data = {
70
  id: this.model.get( 'id' ),
153
  } );
154
 
155
  happyForms.previewer = _.extend( happyForms.previewer, {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
156
  onNumberThousandsDelimiterChangeCallback: function( id, html, options, $ ) {
157
  var part = this.getPartModel( id );
158
  var $part = this.getPartElement( html );
core/assets/js/parts/part-select.js CHANGED
@@ -134,6 +134,7 @@
134
  'click .show-all-options': 'onShowAllOptionsClick',
135
  'keyup [name=label]': 'onEnterKey',
136
  'keyup [name=description]': 'onEnterKey',
 
137
  } ),
138
 
139
  initialize: function() {
@@ -144,7 +145,6 @@
144
  this.listenTo( this.model, 'change:allow_search', this.onAllowSearchChange );
145
  this.listenTo( this.model, 'change:placeholder', this.onPlaceholderChange );
146
  this.listenTo( this.model, 'change:required', this.onRequiredChange );
147
- this.listenTo( this.model, 'change:no_results_label', this.onNoResultsLabelChange );
148
  this.listenTo( this.model.get( 'options' ), 'add', this.onOptionModelAdd );
149
  this.listenTo( this.model.get( 'options' ), 'change', this.onOptionModelChange );
150
  this.listenTo( this.model.get( 'options' ), 'remove', this.onOptionModelRemove );
@@ -413,17 +413,6 @@
413
  $( '.add-options', this.$el ).click();
414
  },
415
 
416
- onNoResultsLabelChange: function( model, value ) {
417
- var data = {
418
- id: model.get( 'id' ),
419
- callback: 'onNoResultsLabelChangeCallback',
420
- options: {
421
- label: value
422
- }
423
- };
424
-
425
- happyForms.previewSend( 'happyforms-part-dom-update', data );
426
- },
427
  } );
428
 
429
  happyForms.previewer = _.extend( happyForms.previewer, {
@@ -472,12 +461,6 @@
472
  $( '.happyforms-custom-select-dropdown__placeholder', $part ).removeClass('preview-hidden').text( options.label );
473
  },
474
 
475
- onNoResultsLabelChangeCallback: function( id, html, options, $ ) {
476
- var $part = this.getPartElement( html );
477
- var $option = $( '.happyforms-custom-select-dropdown__not-found', $part );
478
-
479
- $option.text( options.label );
480
- },
481
  } );
482
 
483
  } ) ( jQuery, _, Backbone, wp.customize, _happyFormsSettings );
134
  'click .show-all-options': 'onShowAllOptionsClick',
135
  'keyup [name=label]': 'onEnterKey',
136
  'keyup [name=description]': 'onEnterKey',
137
+
138
  } ),
139
 
140
  initialize: function() {
145
  this.listenTo( this.model, 'change:allow_search', this.onAllowSearchChange );
146
  this.listenTo( this.model, 'change:placeholder', this.onPlaceholderChange );
147
  this.listenTo( this.model, 'change:required', this.onRequiredChange );
 
148
  this.listenTo( this.model.get( 'options' ), 'add', this.onOptionModelAdd );
149
  this.listenTo( this.model.get( 'options' ), 'change', this.onOptionModelChange );
150
  this.listenTo( this.model.get( 'options' ), 'remove', this.onOptionModelRemove );
413
  $( '.add-options', this.$el ).click();
414
  },
415
 
 
 
 
 
 
 
 
 
 
 
 
416
  } );
417
 
418
  happyForms.previewer = _.extend( happyForms.previewer, {
461
  $( '.happyforms-custom-select-dropdown__placeholder', $part ).removeClass('preview-hidden').text( options.label );
462
  },
463
 
 
 
 
 
 
 
464
  } );
465
 
466
  } ) ( jQuery, _, Backbone, wp.customize, _happyFormsSettings );
core/classes/class-block.php CHANGED
@@ -46,10 +46,10 @@ class HappyForms_Block {
46
 
47
  private function get_properties() {
48
  $properties = array(
49
- 'title' => __( 'HappyForms', 'happyforms' ),
50
- 'description' => __( 'Contact form to manage and respond to conversations with customers.', 'happyforms' ),
51
  'category' => 'widgets',
52
- 'icon' => 'format-status',
53
  'keywords' => array(
54
  'form', 'contact', 'email',
55
  ),
46
 
47
  private function get_properties() {
48
  $properties = array(
49
+ 'title' => __( 'Forms', 'happyforms' ),
50
+ 'description' => __( 'Displays a form.', 'happyforms' ),
51
  'category' => 'widgets',
52
+ 'icon' => 'feedback',
53
  'keywords' => array(
54
  'form', 'contact', 'email',
55
  ),
core/classes/class-form-controller.php CHANGED
@@ -535,6 +535,9 @@ class HappyForms_Form_Controller {
535
 
536
  $post_data = array_intersect_key( $validated_data, $this->get_defaults( 'post' ) );
537
  $meta_data = array_intersect_key( $validated_data, $this->get_defaults( 'meta' ) );
 
 
 
538
  $meta_data = happyforms_prefix_meta( $meta_data );
539
 
540
  // Flatten data to make it filterable
535
 
536
  $post_data = array_intersect_key( $validated_data, $this->get_defaults( 'post' ) );
537
  $meta_data = array_intersect_key( $validated_data, $this->get_defaults( 'meta' ) );
538
+
539
+ $meta_data = apply_filters( 'happyforms_validate_meta_data', $meta_data );
540
+
541
  $meta_data = happyforms_prefix_meta( $meta_data );
542
 
543
  // Flatten data to make it filterable
core/classes/class-form-email.php CHANGED
@@ -84,7 +84,7 @@ class HappyForms_Form_Email {
84
  $controls = array(
85
  200 => array(
86
  'type' => 'checkbox',
87
- 'label' => __( 'Receive submission alerts', 'happyforms' ),
88
  'field' => 'receive_email_alerts',
89
  ),
90
  201 => array(
@@ -94,25 +94,25 @@ class HappyForms_Form_Email {
94
  300 => array(
95
  'type' => 'text',
96
  'label' => __( 'Email address', 'happyforms' ),
97
- 'tooltip' => __( 'Add your email address here to receive a confirmation email for each form response. You can add multiple email addresses by separating each address with a comma.', 'happyforms' ),
98
  'field' => 'email_recipient',
99
  ),
100
  310 => array(
101
  'type' => 'text',
102
  'label' => __( 'Email Bcc address', 'happyforms' ),
103
- 'tooltip' => __( 'Add your Bcc email address here to receive a confirmation email for each form response without appearing in the received message header. You can add multiple email addresses by separating each address with a comma.', 'happyforms' ),
104
  'field' => 'email_bccs',
105
  ),
106
  390 => array(
107
  'type' => 'text',
108
  'label' => __( 'Email display name', 'happyforms' ),
109
- 'tooltip' => __( 'You will receive an email with this sender name.', 'happyforms' ),
110
  'field' => 'alert_email_from_name',
111
  ),
112
  400 => array(
113
  'type' => 'text',
114
  'label' => __( 'Email subject', 'happyforms' ),
115
- 'tooltip' => __( 'Each time a user submits a message, you\'ll receive an email with this subject.', 'happyforms' ),
116
  'field' => 'alert_email_subject',
117
  ),
118
  490 => array(
@@ -120,7 +120,7 @@ class HappyForms_Form_Email {
120
  ),
121
  500 => array(
122
  'type' => 'checkbox',
123
- 'label' => __( 'Send confirmation email', 'happyforms' ),
124
  'field' => 'send_confirmation_email',
125
  ),
126
  501 => array(
@@ -140,19 +140,19 @@ class HappyForms_Form_Email {
140
  600 => array(
141
  'type' => 'text',
142
  'label' => __( 'Email display name', 'happyforms' ),
143
- 'tooltip' => __( 'If your form contains an email field, users will receive an email with this sender name.', 'happyforms' ),
144
  'field' => 'confirmation_email_from_name',
145
  ),
146
  700 => array(
147
  'type' => 'text',
148
  'label' => __( 'Email subject', 'happyforms' ),
149
- 'tooltip' => __( 'If your form contains an email field, users will receive an email with this subject.', 'happyforms' ),
150
  'field' => 'confirmation_email_subject',
151
  ),
152
  800 => array(
153
  'type' => 'editor',
154
  'label' => __( 'Email content', 'happyforms' ),
155
- 'tooltip' => __( 'If your form contains an email field, users will receive an email with this content.', 'happyforms' ),
156
  'field' => 'confirmation_email_content',
157
  ),
158
  810 => array(
84
  $controls = array(
85
  200 => array(
86
  'type' => 'checkbox',
87
+ 'label' => __( 'Email me a copy of each submission', 'happyforms' ),
88
  'field' => 'receive_email_alerts',
89
  ),
90
  201 => array(
94
  300 => array(
95
  'type' => 'text',
96
  'label' => __( 'Email address', 'happyforms' ),
97
+ // 'tooltip' => __( 'Add your email address here to receive a confirmation email for each form response. You can add multiple email addresses by separating each address with a comma.', 'happyforms' ),
98
  'field' => 'email_recipient',
99
  ),
100
  310 => array(
101
  'type' => 'text',
102
  'label' => __( 'Email Bcc address', 'happyforms' ),
103
+ // 'tooltip' => __( 'Add your Bcc email address here to receive a confirmation email for each form response without appearing in the received message header. You can add multiple email addresses by separating each address with a comma.', 'happyforms' ),
104
  'field' => 'email_bccs',
105
  ),
106
  390 => array(
107
  'type' => 'text',
108
  'label' => __( 'Email display name', 'happyforms' ),
109
+ // 'tooltip' => __( 'You will receive an email with this sender name.', 'happyforms' ),
110
  'field' => 'alert_email_from_name',
111
  ),
112
  400 => array(
113
  'type' => 'text',
114
  'label' => __( 'Email subject', 'happyforms' ),
115
+ // 'tooltip' => __( 'Each time a user submits a message, you\'ll receive an email with this subject.', 'happyforms' ),
116
  'field' => 'alert_email_subject',
117
  ),
118
  490 => array(
120
  ),
121
  500 => array(
122
  'type' => 'checkbox',
123
+ 'label' => __( 'Email respondent a copy of their submission', 'happyforms' ),
124
  'field' => 'send_confirmation_email',
125
  ),
126
  501 => array(
140
  600 => array(
141
  'type' => 'text',
142
  'label' => __( 'Email display name', 'happyforms' ),
143
+ // 'tooltip' => __( 'If your form contains an email field, users will receive an email with this sender name.', 'happyforms' ),
144
  'field' => 'confirmation_email_from_name',
145
  ),
146
  700 => array(
147
  'type' => 'text',
148
  'label' => __( 'Email subject', 'happyforms' ),
149
+ // 'tooltip' => __( 'If your form contains an email field, users will receive an email with this subject.', 'happyforms' ),
150
  'field' => 'confirmation_email_subject',
151
  ),
152
  800 => array(
153
  'type' => 'editor',
154
  'label' => __( 'Email content', 'happyforms' ),
155
+ // 'tooltip' => __( 'If your form contains an email field, users will receive an email with this content.', 'happyforms' ),
156
  'field' => 'confirmation_email_content',
157
  ),
158
  810 => array(
core/classes/class-form-messages.php ADDED
@@ -0,0 +1,212 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class HappyForms_Form_Messages {
4
+
5
+ private static $instance;
6
+
7
+ private $form = null;
8
+
9
+ private $default_validation_messages = array();
10
+
11
+ public static function instance() {
12
+ if ( is_null( self::$instance ) ) {
13
+ self::$instance = new self();
14
+ }
15
+
16
+ self::$instance->hook();
17
+ self::$instance->define_validation_defaults();
18
+
19
+ return self::$instance;
20
+ }
21
+
22
+ public function hook() {
23
+ add_filter( 'happyforms_meta_fields', array( $this, 'meta_fields' ) );
24
+ add_action( 'happyforms_do_messages_control', array( happyforms_get_setup(), 'do_control' ), 10, 3 );
25
+ add_filter( 'happyforms_validate_meta_data', array( $this, 'validate_validation_messages' ), 10 );
26
+ }
27
+
28
+ public function get_fields() {
29
+
30
+ $fields = array(
31
+ 'words_label_min' => array(
32
+ 'default' => __( 'Min words', 'happyforms' ),
33
+ 'sanitize' => 'sanitize_text_field',
34
+ ),
35
+ 'words_label_max' => array(
36
+ 'default' => __( 'Max words', 'happyforms' ),
37
+ 'sanitize' => 'sanitize_text_field',
38
+ ),
39
+ 'characters_label_min' => array(
40
+ 'default' => __( 'Min characters', 'happyforms' ),
41
+ 'sanitize' => 'sanitize_text_field',
42
+ ),
43
+ 'characters_label_max' => array(
44
+ 'default' => __( 'Max characters', 'happyforms' ),
45
+ 'sanitize' => 'sanitize_text_field',
46
+ ),
47
+ 'no_results_label' => array(
48
+ 'default' => __( 'Nothing found', 'happyforms' ),
49
+ 'sanitize' => 'sanitize_text_field',
50
+ ),
51
+ 'number_min_invalid' => array(
52
+ 'default' => __( "Oops. This number isn't big enough.", 'happyforms' ),
53
+ 'sanitize' => 'sanitize_text_field',
54
+ ),
55
+ 'number_max_invalid' => array(
56
+ 'default' => __( 'Oops. This number is too big.', 'happyforms' ),
57
+ 'sanitize' => 'sanitize_text_field',
58
+ ),
59
+ );
60
+
61
+ $fields = apply_filters( 'happyforms_messages_fields', $fields );
62
+
63
+ return $fields;
64
+ }
65
+
66
+ public function get_controls() {
67
+ $controls = array(
68
+ // control groupings
69
+ 1 => array (
70
+ 'type' => 'group_start',
71
+ 'group_type' => 'group',
72
+ 'group_id' => 'messages-view-alerts',
73
+ 'group_title' => __( 'Alerts', 'happyforms' ),
74
+ 'group_description' => __( 'These messages are show to respondents at the very top of the form to communicate the form’s status.', 'happyforms' ),
75
+ ),
76
+ 2000 => array (
77
+ 'type' => 'group_end',
78
+ ),
79
+
80
+ 2001 => array (
81
+ 'type' => 'group_start',
82
+ 'group_type' => 'group',
83
+ 'group_id' => 'messages-view-buttons',
84
+ 'group_title' => __( 'Buttons', 'happyforms' ),
85
+ 'group_description' => __( 'The messages are shown to respondents as they fill out the form to help them trigger an action.', 'happyforms' ),
86
+ ),
87
+ 4000 => array (
88
+ 'type' => 'group_end',
89
+ ),
90
+ 4001 => array (
91
+ 'type' => 'group_start',
92
+ 'group_type' => 'group',
93
+ 'group_id' => 'messages-view-errors',
94
+ 'group_title' => __( 'Errors', 'happyforms' ),
95
+ 'group_description' => __( 'These messages are show to respondents when they try to submit their reply but one or more fields has a mistake.', 'happyforms' ),
96
+ ),
97
+ 6000 => array (
98
+ 'type' => 'group_end',
99
+ ),
100
+ 6001 => array (
101
+ 'type' => 'group_start',
102
+ 'group_type' => 'group',
103
+ 'group_id' => 'messages-view-hints',
104
+ 'group_title' => __( 'Hints', 'happyforms' ),
105
+ 'group_description' => __( 'These messages are show to respondents as they fill our the form to help them avoid mistakes.', 'happyforms' ),
106
+ ),
107
+ 8000 => array (
108
+ 'type' => 'group_end',
109
+ ),
110
+
111
+ // individual controls
112
+ 4300 => array(
113
+ 'type' => 'text',
114
+ 'label' => __( 'Number too small', 'happyforms' ),
115
+ 'field' => 'number_min_invalid',
116
+ ),
117
+ 4320 => array(
118
+ 'type' => 'text',
119
+ 'label' => __( 'Number too big', 'happyforms' ),
120
+ 'field' => 'number_max_invalid',
121
+ ),
122
+ 6020 => array(
123
+ 'type' => 'text',
124
+ 'label' => __( "Search couldn't find anything", 'happyforms' ),
125
+ 'field' => 'no_results_label',
126
+ ),
127
+ 6040 => array(
128
+ 'type' => 'text',
129
+ 'label' => __( 'Minimum characters', 'happyforms' ),
130
+ 'field' => 'characters_label_min',
131
+ ),
132
+ 6060 => array(
133
+ 'type' => 'text',
134
+ 'label' => __( 'Maximum characters', 'happyforms' ),
135
+ 'field' => 'characters_label_max',
136
+ ),
137
+ 6080 => array(
138
+ 'type' => 'text',
139
+ 'label' => __( 'Minimum words', 'happyforms' ),
140
+ 'field' => 'words_label_min',
141
+ ),
142
+ 6100 => array(
143
+ 'type' => 'text',
144
+ 'label' => __( 'Maximum words', 'happyforms' ),
145
+ 'field' => 'words_label_max',
146
+ ),
147
+ );
148
+
149
+ $controls = apply_filters( 'happyforms_messages_controls', $controls );
150
+ ksort( $controls, SORT_NUMERIC );
151
+
152
+ return $controls;
153
+ }
154
+
155
+ /**
156
+ * Filter: add fields to form meta.
157
+ *
158
+ * @hooked filter happyforms_meta_fields
159
+ *
160
+ * @param array $fields Current form meta fields.
161
+ *
162
+ * @return array
163
+ */
164
+ public function meta_fields( $fields ) {
165
+ $fields = array_merge( $fields, $this->get_fields() );
166
+
167
+ return $fields;
168
+ }
169
+
170
+ public function validate_validation_messages( $meta_data ) {
171
+ $meta_fields = wp_list_pluck( $this->get_fields(), 'default' );
172
+
173
+ foreach( $meta_fields as $key => $value ) {
174
+ if ( empty( $meta_data[ $key ] ) ) {
175
+ $meta_data[ $key ] = $meta_fields[ $key ];
176
+ }
177
+ }
178
+
179
+ return $meta_data;
180
+ }
181
+
182
+ public function define_validation_defaults(){
183
+ $this->default_validation_messages = happyforms_validation_messages()->get_default_messages();
184
+ }
185
+
186
+ public function get_default_validation_message( $key ) {
187
+ if ( empty( $this->default_validation_messages ) ) {
188
+ $this->define_validation_defaults();
189
+ }
190
+
191
+ return $this->default_validation_messages[ $key ];
192
+ }
193
+
194
+ public function get_validation_message( $message, $message_key ) {
195
+ if ( empty( $this->form[ $message_key ] ) ) {
196
+ return $message;
197
+ }
198
+
199
+ return $this->form[ $message_key ];
200
+ }
201
+
202
+ }
203
+
204
+ if ( ! function_exists( 'happyforms_get_messages' ) ):
205
+
206
+ function happyforms_get_messages() {
207
+ return HappyForms_Form_Messages::instance();
208
+ }
209
+
210
+ endif;
211
+
212
+ happyforms_get_messages();
core/classes/class-form-setup.php CHANGED
@@ -42,8 +42,13 @@ class HappyForms_Form_Setup {
42
  add_filter( 'happyforms_form_id', array( $this, 'form_html_id' ), 10, 2 );
43
  add_action( 'happyforms_do_setup_control', array( $this, 'do_control' ), 10, 3 );
44
 
 
 
 
45
  // Server-side hide-on-submit
46
  add_action( 'happyforms_submission_success', array( $this, 'submission_success' ), 10, 2 );
 
 
47
  }
48
 
49
  public function get_fields() {
@@ -54,21 +59,13 @@ class HappyForms_Form_Setup {
54
  'default' => 'success_message_hide_form',
55
  'sanitize' => 'sanitize_text_field',
56
  ),
57
- 'confirmation_message' => array(
58
- 'default' => __( 'Thank you! Your submission has been sent.', 'happyforms' ),
59
- 'sanitize' => 'esc_html',
60
- ),
61
- 'error_message' => array(
62
- 'default' => __( 'There is a problem! Please review your submission.', 'happyforms' ),
63
- 'sanitize' => 'esc_html'
64
- ),
65
  'redirect_on_complete' => array(
66
  'default' => 0,
67
  'sanitize' => 'happyforms_sanitize_checkbox',
68
  ),
69
  'redirect_url' => array(
70
  'default' => '',
71
- 'sanitize' => 'esc_url_raw',
72
  ),
73
  'redirect_blank' => array(
74
  'default' => 0,
@@ -82,14 +79,6 @@ class HappyForms_Form_Setup {
82
  'default' => __( 'This field is required.', 'happyforms' ),
83
  'sanitize' => 'sanitize_text_field'
84
  ),
85
- 'optional_part_label' => array(
86
- 'default' => __( '(optional)', 'happyforms' ),
87
- 'sanitize' => 'sanitize_text_field',
88
- ),
89
- 'submit_button_label' => array(
90
- 'default' => __( 'Send', 'happyforms' ),
91
- 'sanitize' => 'sanitize_text_field',
92
- ),
93
  'form_expiration_datetime' => array(
94
  'default' => date( 'Y-m-d H:i:s', time() + WEEK_IN_SECONDS ),
95
  'sanitize' => 'happyforms_sanitize_datetime',
@@ -118,14 +107,6 @@ class HappyForms_Form_Setup {
118
  'default' => 0,
119
  'sanitize' => 'happyforms_sanitize_checkbox',
120
  ),
121
- 'review_button_label' => array(
122
- 'default' => __( 'Review submission', 'happyforms' ),
123
- 'sanitize' => 'sanitize_text_field',
124
- ),
125
- 'edit_button_label' => array(
126
- 'default' => __( 'Edit', 'happyforms' ),
127
- 'sanitize' => 'sanitize_text_field',
128
- ),
129
  'use_html_id' => array(
130
  'default' => 0,
131
  'sanitize' => 'happyforms_sanitize_checkbox',
@@ -138,6 +119,10 @@ class HappyForms_Form_Setup {
138
  'default' => '',
139
  'sanitize' => 'happyforms_sanitize_checkbox'
140
  ),
 
 
 
 
141
  'submit_button_html_class' => array(
142
  'default' => '',
143
  'sanitize' => 'sanitize_text_field'
@@ -151,18 +136,44 @@ class HappyForms_Form_Setup {
151
  return $fields;
152
  }
153
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
154
  public function get_controls() {
155
  $controls = array(
156
  10 => array(
157
  'type' => 'select',
158
- 'label' => __( 'Confirm submission', 'happyforms' ),
159
  'options' => array(
160
- 'success_message_hide_form' => __( 'Show a \'thank you\' message', 'happyforms' ),
161
- 'success_message' => __( 'Show a \'thank you\' message and allow to resubmit the form', 'happyforms' ),
162
  'redirect' => __( 'Redirect to a web address', 'happyforms' ),
163
  ),
164
  'field' => 'confirm_submission',
165
- 'tooltip' => __( 'Choose how the form should confirm successful submission.', 'happyforms' ),
166
  ),
167
  11 => array(
168
  'type' => 'upsell',
@@ -174,44 +185,33 @@ class HappyForms_Form_Setup {
174
  'type' => 'group_start',
175
  'trigger' => 'confirm_submission',
176
  ),
177
- 100 => array(
178
- 'type' => 'editor',
179
- 'label' => __( '\'Thank you\' message', 'happyforms' ),
180
- 'field' => 'confirmation_message',
181
- ),
182
- 101 => array(
183
- 'type' => 'group_end'
184
- ),
185
  110 => array(
186
- 'type' => 'editor',
187
- 'label' => __( 'Error message', 'happyforms' ),
188
- 'tooltip' => __( 'This is the message your users will see when there are form errors preventing submission.', 'happyforms' ),
189
- 'field' => 'error_message',
190
  ),
191
- 900 => array(
192
- 'type' => 'text',
193
- 'label' => __( 'Optional field label', 'happyforms' ),
194
- 'tooltip' => __( 'Mark optional fields in your form to let your users distinguish them from required fields.', 'happyforms' ),
195
- 'field' => 'optional_part_label',
196
  ),
197
- 1000 => array(
198
- 'type' => 'text',
199
- 'label' => __( 'Submit button label', 'happyforms' ),
200
- 'tooltip' => __( 'Change text of submit button to describe an action your form performs.', 'happyforms' ),
201
- 'field' => 'submit_button_label',
202
  ),
203
- 1100 => array(
204
  'type' => 'text',
205
  'label' => __( 'Submit button CSS classes', 'happyforms' ),
206
- 'tooltip' => __( 'Add custom CSS classes separated by space for targeting a button in your stylesheet.', 'happyforms' ),
207
  'autocomplete' => 'off',
208
  'field' => 'submit_button_html_class'
209
  ),
 
 
 
210
  1200 => array(
211
  'type' => 'checkbox',
212
- 'label' => __( 'Use custom HTML ID', 'happyforms' ),
213
  'field' => 'use_html_id',
214
- 'tooltip' => __( 'Add a unique HTML ID to your form. Write without a hash (#) character.', 'happyforms' ),
215
  ),
216
  1201 => array(
217
  'type' => 'group_start',
@@ -234,6 +234,32 @@ class HappyForms_Form_Setup {
234
  return $controls;
235
  }
236
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
237
  public function do_control( $control, $field, $index ) {
238
  $type = $control['type'];
239
  $path = happyforms_get_core_folder() . '/templates/customize-controls/setup';
@@ -342,6 +368,7 @@ class HappyForms_Form_Setup {
342
  add_action( 'happyforms_form_submit_before', 'ob_start', 10, 0 );
343
  add_action( 'happyforms_form_submit_after', 'ob_end_clean', 10, 0 );
344
  }
 
345
  }
346
 
347
  if ( ! function_exists( 'happyforms_get_setup' ) ):
42
  add_filter( 'happyforms_form_id', array( $this, 'form_html_id' ), 10, 2 );
43
  add_action( 'happyforms_do_setup_control', array( $this, 'do_control' ), 10, 3 );
44
 
45
+ add_filter( 'happyforms_messages_controls', array( $this, 'messages_controls' ) );
46
+
47
+
48
  // Server-side hide-on-submit
49
  add_action( 'happyforms_submission_success', array( $this, 'submission_success' ), 10, 2 );
50
+
51
+ add_filter( 'happyforms_messages_fields', array( $this, 'get_messages_fields' ) );
52
  }
53
 
54
  public function get_fields() {
59
  'default' => 'success_message_hide_form',
60
  'sanitize' => 'sanitize_text_field',
61
  ),
 
 
 
 
 
 
 
 
62
  'redirect_on_complete' => array(
63
  'default' => 0,
64
  'sanitize' => 'happyforms_sanitize_checkbox',
65
  ),
66
  'redirect_url' => array(
67
  'default' => '',
68
+ 'sanitize' => 'sanitize_text_field',
69
  ),
70
  'redirect_blank' => array(
71
  'default' => 0,
79
  'default' => __( 'This field is required.', 'happyforms' ),
80
  'sanitize' => 'sanitize_text_field'
81
  ),
 
 
 
 
 
 
 
 
82
  'form_expiration_datetime' => array(
83
  'default' => date( 'Y-m-d H:i:s', time() + WEEK_IN_SECONDS ),
84
  'sanitize' => 'happyforms_sanitize_datetime',
107
  'default' => 0,
108
  'sanitize' => 'happyforms_sanitize_checkbox',
109
  ),
 
 
 
 
 
 
 
 
110
  'use_html_id' => array(
111
  'default' => 0,
112
  'sanitize' => 'happyforms_sanitize_checkbox',
119
  'default' => '',
120
  'sanitize' => 'happyforms_sanitize_checkbox'
121
  ),
122
+ 'add_submit_button_class' => array(
123
+ 'default' => '',
124
+ 'sanitize' => 'sanitize_text_field'
125
+ ),
126
  'submit_button_html_class' => array(
127
  'default' => '',
128
  'sanitize' => 'sanitize_text_field'
136
  return $fields;
137
  }
138
 
139
+ public function get_messages_fields( $fields ) {
140
+
141
+ $messages_fields = array(
142
+ 'confirmation_message' => array(
143
+ 'default' => __( 'Thank you. Your reply has been sent.', 'happyforms' ),
144
+ 'sanitize' => 'esc_html',
145
+ ),
146
+ 'error_message' => array(
147
+ 'default' => __( "Bummer. We can't submit your reply. Please check for mistakes.", 'happyforms' ),
148
+ 'sanitize' => 'esc_html'
149
+ ),
150
+ 'submit_button_label' => array(
151
+ 'default' => __( 'Send', 'happyforms' ),
152
+ 'sanitize' => 'sanitize_text_field',
153
+ ),
154
+ 'optional_part_label' => array(
155
+ 'default' => __( '(optional)', 'happyforms' ),
156
+ 'sanitize' => 'sanitize_text_field',
157
+ ),
158
+ );
159
+
160
+ $fields = array_merge( $fields, $messages_fields );
161
+
162
+ return $fields;
163
+ }
164
+
165
  public function get_controls() {
166
  $controls = array(
167
  10 => array(
168
  'type' => 'select',
169
+ 'label' => __( 'After the form is submitted', 'happyforms' ),
170
  'options' => array(
171
+ 'success_message_hide_form' => __( 'Show a message', 'happyforms' ),
172
+ 'success_message' => __( 'Show a message and allow to resubmit the form', 'happyforms' ),
173
  'redirect' => __( 'Redirect to a web address', 'happyforms' ),
174
  ),
175
  'field' => 'confirm_submission',
176
+ // 'tooltip' => __( 'Choose how the form should confirm successful submission.', 'happyforms' ),
177
  ),
178
  11 => array(
179
  'type' => 'upsell',
185
  'type' => 'group_start',
186
  'trigger' => 'confirm_submission',
187
  ),
 
 
 
 
 
 
 
 
188
  110 => array(
189
+ 'type' => 'group_end'
 
 
 
190
  ),
191
+ 1100 => array(
192
+ 'type' => 'checkbox',
193
+ 'label' => __( 'Add custom CSS classes to submit button', 'happyforms' ),
194
+ 'field' => 'add_submit_button_class',
 
195
  ),
196
+ 1101 => array(
197
+ 'type' => 'group_start',
198
+ 'trigger' => 'add_submit_button_class'
 
 
199
  ),
200
+ 1102 => array(
201
  'type' => 'text',
202
  'label' => __( 'Submit button CSS classes', 'happyforms' ),
203
+ // 'tooltip' => __( 'Add custom CSS classes separated by space for targeting a button in your stylesheet.', 'happyforms' ),
204
  'autocomplete' => 'off',
205
  'field' => 'submit_button_html_class'
206
  ),
207
+ 1103 => array(
208
+ 'type' => 'group_end',
209
+ ),
210
  1200 => array(
211
  'type' => 'checkbox',
212
+ 'label' => __( 'Add custom HTML ID to form', 'happyforms' ),
213
  'field' => 'use_html_id',
214
+ // 'tooltip' => __( 'Add a unique HTML ID to your form. Write without a hash (#) character.', 'happyforms' ),
215
  ),
216
  1201 => array(
217
  'type' => 'group_start',
234
  return $controls;
235
  }
236
 
237
+ public function messages_controls( $controls ) {
238
+ $controls[20] = array(
239
+ 'type' => 'text',
240
+ 'label' => __( 'Form is successfully submitted', 'happyforms' ),
241
+ 'field' => 'confirmation_message',
242
+ );
243
+ $controls[40] = array(
244
+ 'type' => 'text',
245
+ 'label' => __( "Form can’t be submitted", 'happyforms' ),
246
+ 'field' => 'error_message',
247
+ );
248
+
249
+ $controls[2020] = array(
250
+ 'type' => 'text',
251
+ 'label' => __( 'Submit form', 'happyforms' ),
252
+ 'field' => 'submit_button_label',
253
+ );
254
+ $controls[6010] = array(
255
+ 'type' => 'text',
256
+ 'label' => __( 'Question is optional', 'happyforms' ),
257
+ 'field' => 'optional_part_label',
258
+ );
259
+
260
+ return $controls;
261
+ }
262
+
263
  public function do_control( $control, $field, $index ) {
264
  $type = $control['type'];
265
  $path = happyforms_get_core_folder() . '/templates/customize-controls/setup';
368
  add_action( 'happyforms_form_submit_before', 'ob_start', 10, 0 );
369
  add_action( 'happyforms_form_submit_after', 'ob_end_clean', 10, 0 );
370
  }
371
+
372
  }
373
 
374
  if ( ! function_exists( 'happyforms_get_setup' ) ):
core/classes/class-form-styles.php CHANGED
@@ -717,17 +717,17 @@ class HappyForms_Form_Styles {
717
  ),
718
  3000 => array(
719
  'type' => 'buttonset',
720
- 'label' => __( 'Description alignment', 'happyforms' ),
721
  'field' => 'part_description_alignment'
722
  ),
723
  3100 => array(
724
  'type' => 'range',
725
- 'label' => __( 'Description font size', 'happyforms' ),
726
  'field' => 'part_description_font_size',
727
  ),
728
  3101 => array(
729
  'type' => 'custom-select',
730
- 'label' => __( 'Description display', 'happyforms' ),
731
  'field' => 'part_description_mode',
732
  ),
733
  3200 => array(
@@ -762,7 +762,7 @@ class HappyForms_Form_Styles {
762
  ),
763
  3701 => array(
764
  'type' => 'color',
765
- 'label' => __( 'Description', 'happyforms' ),
766
  'field' => 'color_part_description',
767
  ),
768
  3800 => array(
717
  ),
718
  3000 => array(
719
  'type' => 'buttonset',
720
+ 'label' => __( 'Hint alignment', 'happyforms' ),
721
  'field' => 'part_description_alignment'
722
  ),
723
  3100 => array(
724
  'type' => 'range',
725
+ 'label' => __( 'Hint font size', 'happyforms' ),
726
  'field' => 'part_description_font_size',
727
  ),
728
  3101 => array(
729
  'type' => 'custom-select',
730
+ 'label' => __( 'Hint display', 'happyforms' ),
731
  'field' => 'part_description_mode',
732
  ),
733
  3200 => array(
762
  ),
763
  3701 => array(
764
  'type' => 'color',
765
+ 'label' => __( 'Hint', 'happyforms' ),
766
  'field' => 'color_part_description',
767
  ),
768
  3800 => array(
core/classes/class-happyforms-core.php CHANGED
@@ -19,7 +19,9 @@ class HappyForms_Core {
19
  *
20
  * @var string
21
  */
22
- private $shortcode = 'happyforms';
 
 
23
 
24
  /**
25
  * URL of plugin landing page.
@@ -69,6 +71,8 @@ class HappyForms_Core {
69
  require_once( happyforms_get_core_folder() . '/classes/class-admin-notices.php' );
70
  }
71
 
 
 
72
  require_once( happyforms_get_core_folder() . '/classes/class-tracking.php' );
73
  require_once( happyforms_get_core_folder() . '/classes/class-form-controller.php' );
74
  require_once( happyforms_get_include_folder() . '/classes/class-message-controller.php' );
@@ -77,14 +81,13 @@ class HappyForms_Core {
77
  require_once( happyforms_get_core_folder() . '/classes/class-form-styles.php' );
78
  require_once( happyforms_get_core_folder() . '/classes/class-form-setup.php' );
79
  require_once( happyforms_get_core_folder() . '/classes/class-form-email.php' );
 
80
  require_once( happyforms_get_core_folder() . '/classes/class-session.php' );
81
  require_once( happyforms_get_core_folder() . '/classes/class-happyforms-widget.php' );
82
  require_once( happyforms_get_core_folder() . '/helpers/helper-form-templates.php' );
83
  require_once( happyforms_get_include_folder() . '/classes/class-migrations.php' );
84
  require_once( ABSPATH . 'wp-admin/includes/plugin.php' );
85
 
86
- require_once( happyforms_get_core_folder() . '/classes/class-validation-messages.php' );
87
-
88
  // Gutenberg block
89
  if ( happyforms_is_gutenberg() ) {
90
  require_once( happyforms_get_core_folder() . '/classes/class-block.php' );
@@ -102,6 +105,7 @@ class HappyForms_Core {
102
  add_action( 'widgets_init', array( $this, 'register_widget' ) );
103
 
104
  // Common hooks
 
105
  add_shortcode( $this->shortcode, array( $this, 'handle_shortcode' ) );
106
  add_action( 'wp_head', array( $this, 'wp_head' ) );
107
  add_action( 'wp_print_footer_scripts', array( $this, 'wp_print_footer_scripts' ), 0 );
@@ -115,7 +119,6 @@ class HappyForms_Core {
115
  add_action( 'wp_footer', array( $this, 'enqueue_scripts_preview' ) );
116
 
117
  add_action( 'customize_preview_init', array( $this, 'customize_preview_init' ) );
118
- add_action( 'current_screen', array( $this, 'show_help_tab' ) );
119
  }
120
 
121
  public function customize_preview_init() {
@@ -168,10 +171,10 @@ class HappyForms_Core {
168
  $form_controller = happyforms_get_form_controller();
169
 
170
  add_menu_page(
171
- __( 'HappyForms Index', 'happyforms' ),
172
- __( 'HappyForms', 'happyforms' ),
173
  apply_filters( 'happyforms_main_page_capabilities', 'manage_options' ),
174
- 'happyforms', '', 'dashicons-format-status', 50
175
  );
176
 
177
  add_submenu_page(
@@ -453,7 +456,7 @@ class HappyForms_Core {
453
  return;
454
  }
455
 
456
- $button_html = '<a href="#" class="button happyforms-editor-button" data-title="' . __( 'Insert HappyForm', 'happyforms' ) . '"><span class="dashicons dashicons-format-status"></span><span>'. __( 'Add HappyForms', 'happyforms' ) .'</span></a>';
457
 
458
  add_action( 'admin_footer', array( $this, 'output_happyforms_modal' ) );
459
 
@@ -488,6 +491,7 @@ class HappyForms_Core {
488
  }
489
 
490
  public function print_frontend_styles( $form ) {
 
491
  $output = apply_filters( 'happyforms_enqueue_style', true );
492
  $force_styles = apply_filters( 'happyforms_force_styles', false );
493
 
@@ -543,9 +547,17 @@ class HappyForms_Core {
543
  array( 'jquery' ), HAPPYFORMS_VERSION, true
544
  );
545
 
 
 
 
 
 
 
 
 
546
  $dependencies = apply_filters(
547
  'happyforms_frontend_dependencies',
548
- array( 'jquery', 'jquery-ui-core', 'jquery-ui-tooltip' ), $this->current_forms
549
  );
550
 
551
  $this->dependencies = $dependencies;
@@ -667,57 +679,4 @@ class HappyForms_Core {
667
  register_widget( 'HappyForms_Widget' );
668
  }
669
 
670
- public function show_help_tab() {
671
- $screen = get_current_screen();
672
- $show = false;
673
-
674
- if ( false !== strpos( $screen->id, 'happyforms_page' ) ) {
675
- $show = true;
676
- }
677
-
678
- if ( function_exists( 'happyforms_get_message_controller' ) && happyforms_get_message_controller()->post_type === $screen->post_type ) {
679
- $show = true;
680
- }
681
-
682
- if ( happyforms_get_form_controller()->post_type === $screen->post_type ) {
683
- $show = true;
684
- }
685
-
686
- if ( ! $show ) {
687
- return;
688
- }
689
-
690
- $screen->add_help_tab( array(
691
- 'id' => 'happyforms_help_tab_overview',
692
- 'title' => __( 'Overview', 'happyforms' ),
693
- 'callback' => array( $this, 'help_tab_overview_contents' )
694
- ) );
695
-
696
- $sidebar_content = $this->get_help_tab_sidebar_content();
697
- $screen->set_help_sidebar( $sidebar_content );
698
- }
699
-
700
- public function help_tab_overview_contents() {
701
- ?>
702
- <p><?php _e( 'Hey 👋 Welcome to your HappyForms Dashboard!', 'happyforms' ); ?></p>
703
-
704
- <p><?php printf(
705
- __( 'Are you looking for help? Well, we’ve swept the nacho crumbs from our keyboards, refilled our ginger beers and are ready to reply with answers! So, go on, email %s.', 'happyforms' ),
706
- '<a href="mailto:support@thethemefoundry.com">support@thethemefoundry.com</a>'
707
- ); ?></p>
708
- <?php
709
- }
710
-
711
- public function get_help_tab_sidebar_content() {
712
- ob_start();
713
- ?>
714
- <p><strong><?php _e( 'For more help', 'happyforms' ); ?>:</strong></p>
715
-
716
- <p><a href="https://happyforms.me/help-guide"><?php _e( 'Help guide', 'happyforms' ); ?></a></p>
717
- <?php
718
- $content = ob_get_clean();
719
-
720
- return $content;
721
- }
722
-
723
  }
19
  *
20
  * @var string
21
  */
22
+ private $shortcode = 'form';
23
+
24
+ private $branded_shortcode = 'happyforms';
25
 
26
  /**
27
  * URL of plugin landing page.
71
  require_once( happyforms_get_core_folder() . '/classes/class-admin-notices.php' );
72
  }
73
 
74
+ require_once( happyforms_get_core_folder() . '/classes/class-validation-messages.php' );
75
+
76
  require_once( happyforms_get_core_folder() . '/classes/class-tracking.php' );
77
  require_once( happyforms_get_core_folder() . '/classes/class-form-controller.php' );
78
  require_once( happyforms_get_include_folder() . '/classes/class-message-controller.php' );
81
  require_once( happyforms_get_core_folder() . '/classes/class-form-styles.php' );
82
  require_once( happyforms_get_core_folder() . '/classes/class-form-setup.php' );
83
  require_once( happyforms_get_core_folder() . '/classes/class-form-email.php' );
84
+ require_once( happyforms_get_core_folder() . '/classes/class-form-messages.php' );
85
  require_once( happyforms_get_core_folder() . '/classes/class-session.php' );
86
  require_once( happyforms_get_core_folder() . '/classes/class-happyforms-widget.php' );
87
  require_once( happyforms_get_core_folder() . '/helpers/helper-form-templates.php' );
88
  require_once( happyforms_get_include_folder() . '/classes/class-migrations.php' );
89
  require_once( ABSPATH . 'wp-admin/includes/plugin.php' );
90
 
 
 
91
  // Gutenberg block
92
  if ( happyforms_is_gutenberg() ) {
93
  require_once( happyforms_get_core_folder() . '/classes/class-block.php' );
105
  add_action( 'widgets_init', array( $this, 'register_widget' ) );
106
 
107
  // Common hooks
108
+ add_shortcode( $this->branded_shortcode, array( $this, 'handle_shortcode' ) );
109
  add_shortcode( $this->shortcode, array( $this, 'handle_shortcode' ) );
110
  add_action( 'wp_head', array( $this, 'wp_head' ) );
111
  add_action( 'wp_print_footer_scripts', array( $this, 'wp_print_footer_scripts' ), 0 );
119
  add_action( 'wp_footer', array( $this, 'enqueue_scripts_preview' ) );
120
 
121
  add_action( 'customize_preview_init', array( $this, 'customize_preview_init' ) );
 
122
  }
123
 
124
  public function customize_preview_init() {
171
  $form_controller = happyforms_get_form_controller();
172
 
173
  add_menu_page(
174
+ __( 'Forms', 'happyforms' ),
175
+ __( 'Forms', 'happyforms' ),
176
  apply_filters( 'happyforms_main_page_capabilities', 'manage_options' ),
177
+ 'happyforms', '', 'dashicons-feedback', 50
178
  );
179
 
180
  add_submenu_page(
456
  return;
457
  }
458
 
459
+ $button_html = '<a href="#" class="button happyforms-editor-button" data-title="' . __( 'Add form', 'happyforms' ) . '"><span class="dashicons dashicons-format-status"></span><span>'. __( 'Add form', 'happyforms' ) .'</span></a>';
460
 
461
  add_action( 'admin_footer', array( $this, 'output_happyforms_modal' ) );
462
 
491
  }
492
 
493
  public function print_frontend_styles( $form ) {
494
+
495
  $output = apply_filters( 'happyforms_enqueue_style', true );
496
  $force_styles = apply_filters( 'happyforms_force_styles', false );
497
 
547
  array( 'jquery' ), HAPPYFORMS_VERSION, true
548
  );
549
 
550
+ wp_register_script( 'happyforms-settings', '', array(), HAPPYFORMS_VERSION, true );
551
+
552
+ $settings = apply_filters( 'happyforms_frontend_settings', array(
553
+ 'ajaxUrl' => admin_url( 'admin-ajax.php' )
554
+ ) );
555
+
556
+ wp_localize_script( 'happyforms-settings', '_happyFormsSettings', $settings );
557
+
558
  $dependencies = apply_filters(
559
  'happyforms_frontend_dependencies',
560
+ array( 'jquery', 'jquery-ui-core', 'jquery-ui-tooltip', 'happyforms-settings' ), $this->current_forms
561
  );
562
 
563
  $this->dependencies = $dependencies;
679
  register_widget( 'HappyForms_Widget' );
680
  }
681
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
682
  }
core/classes/class-happyforms-widget.php CHANGED
@@ -10,9 +10,9 @@ class HappyForms_Widget extends WP_Widget {
10
  function __construct() {
11
  parent::__construct(
12
  'happyforms_widget',
13
- __( 'HappyForms', 'happyforms' ),
14
  array(
15
- 'description' => __( 'Easily add your HappyForms to widget areas.', 'happyforms' )
16
  )
17
  );
18
  }
10
  function __construct() {
11
  parent::__construct(
12
  'happyforms_widget',
13
+ __( 'Forms', 'happyforms' ),
14
  array(
15
+ 'description' => __( 'Displays a form.', 'happyforms' )
16
  )
17
  );
18
  }
core/classes/class-validation-messages.php CHANGED
@@ -11,6 +11,8 @@ class HappyForms_Validation_Messages {
11
  */
12
  private static $instance;
13
 
 
 
14
  /**
15
  * The singleton constructor.
16
  *
@@ -27,6 +29,10 @@ class HappyForms_Validation_Messages {
27
  }
28
 
29
  public function hook() {
 
 
 
 
30
  add_filter( 'happyforms_part_attributes', array( $this, 'add_accessibility_attributes' ), 10, 4 );
31
  }
32
 
@@ -59,16 +65,105 @@ class HappyForms_Validation_Messages {
59
  return $attributes;
60
  }
61
 
62
- public function get_default_messages() {
63
- $messages = array(
64
- 'field_empty' => __( 'Please fill in this field', 'happyforms' ),
65
- 'field_invalid' => __( 'This is invalid', 'happyforms' ),
66
- 'values_mismatch' => __( 'This doesn\'t match', 'happyforms' ),
67
- 'select_more_choices' => __( 'Please select more choices', 'happyforms' ),
68
- 'select_less_choices' => __( 'Please select fewer choices', 'happyforms' ),
69
- 'message_too_long' => __( 'This message is too long', 'happyforms' ),
70
- 'message_too_short' => __( 'This message is too short', 'happyforms' ),
 
71
  );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
72
 
73
  return apply_filters( 'happyforms_default_validation_messages', $messages );
74
  }
@@ -83,15 +178,19 @@ class HappyForms_Validation_Messages {
83
  * `happyforms_validation_message filter on success.
84
  */
85
  public function get_message( $message_key ) {
 
 
 
 
 
 
86
  $default_messages = $this->get_default_messages();
87
- $message = '';
88
 
89
  if ( ! isset( $default_messages[$message_key] ) ) {
90
  return $message;
91
  }
92
 
93
  $message = $default_messages[$message_key];
94
- $message = apply_filters( 'happyforms_validation_message', $message, $message_key );
95
 
96
  return $message;
97
  }
11
  */
12
  private static $instance;
13
 
14
+ private $form = null;
15
+
16
  /**
17
  * The singleton constructor.
18
  *
29
  }
30
 
31
  public function hook() {
32
+
33
+ add_filter( 'happyforms_get_form_data', array( $this, 'set_form'), 99 );
34
+ add_filter( 'happyforms_messages_fields', array( $this, 'meta_messages_fields' ) );
35
+ add_filter( 'happyforms_messages_controls', array( $this, 'messages_controls' ) );
36
  add_filter( 'happyforms_part_attributes', array( $this, 'add_accessibility_attributes' ), 10, 4 );
37
  }
38
 
65
  return $attributes;
66
  }
67
 
68
+ public function messages_controls( $controls ) {
69
+ $controls[4010] = array(
70
+ 'type' => 'text',
71
+ 'label' => __( 'Field is answered incorrectly', 'happyforms' ),
72
+ 'field' => 'field_invalid',
73
+ );
74
+ $controls[4020] = array(
75
+ 'type' => 'text',
76
+ 'label' => __( "Required field isn't answered", 'happyforms' ),
77
+ 'field' => 'field_empty',
78
  );
79
+ $controls[4040] = array(
80
+ 'type' => 'text',
81
+ 'label' => __( "Required choice isn't selected", 'happyforms' ),
82
+ 'field' => 'no_selection',
83
+ );
84
+ $controls[4080] = array(
85
+ 'type' => 'text',
86
+ 'label' => __( "Too many words/characters typed", 'happyforms' ),
87
+ 'field' => 'message_too_long',
88
+ );
89
+ $controls[4100] = array(
90
+ 'type' => 'text',
91
+ 'label' => __( 'Not enough words/characters typed', 'happyforms' ),
92
+ 'field' => 'message_too_short',
93
+ );
94
+ return $controls;
95
+ }
96
+
97
+ public function get_validation_fields() {
98
+
99
+ $fields = array(
100
+ 'field_invalid' => array(
101
+ 'default' => __( "Oops. Looks like there's a mistake here.", 'happyforms' ),
102
+ 'sanitize' => 'sanitize_text_field',
103
+ ),
104
+ 'field_empty' => array(
105
+ 'default' => __( 'Oops. Please answer this question.', 'happyforms' ),
106
+ 'sanitize' => 'sanitize_text_field',
107
+ ),
108
+ 'no_selection' => array(
109
+ 'default' => __( 'Oops. Please make a selection.', 'happyforms' ),
110
+ 'sanitize' => 'sanitize_text_field',
111
+ ),
112
+ 'message_too_long' => array(
113
+ 'default' => __( 'Oops. This answer is too long.', 'happyforms' ),
114
+ 'sanitize' => 'sanitize_text_field',
115
+ ),
116
+ 'message_too_short' => array(
117
+ 'default' => __( "Oops. This answer isn't long enough.", 'happyforms' ),
118
+ 'sanitize' => 'sanitize_text_field',
119
+ ),
120
+ // TODO remove this field once deprecated global messages is fully removed
121
+ 'per_form_validation_msg' => array(
122
+ 'default' => 0,
123
+ 'sanitize' => 'sanitize_text_field',
124
+ ),
125
+ );
126
+
127
+ return $fields;
128
+ }
129
+
130
+ public function meta_messages_fields( $fields ) {
131
+ $fields = array_merge( $fields, $this->get_validation_fields() );
132
+
133
+ return $fields;
134
+ }
135
+
136
+ /**
137
+ *
138
+ * TODO Remove this method (set_form) and all other references of per_form_validation_msg
139
+ * once the deprecated global messages has been fully retired.
140
+ *
141
+ */
142
+ public function set_form( $form ) {
143
+
144
+ if ( $form['ID'] != 0 && $form['per_form_validation_msg'] == 0 ) {
145
+ $deprecated_messages = get_option( 'happyforms-validation-messages', array() );
146
+ $messages = $this->get_default_messages();
147
+
148
+ foreach ( $deprecated_messages as $key => $value ) {
149
+ if ( ! empty( $deprecated_messages[ $key ] ) ) {
150
+ $form[ $key ] = $deprecated_messages[ $key ];
151
+ } else {
152
+ $form[ $key ] = $messages[ $key ];
153
+ }
154
+ }
155
+ } else if ( $form['ID'] == 0 ) {
156
+ $form['per_form_validation_msg'] = 1;
157
+ }
158
+
159
+ // since validation messages are now in form meta, we need the form variable.
160
+ $this->form = $form;
161
+
162
+ return $form;
163
+ }
164
+
165
+ public function get_default_messages() {
166
+ $messages = wp_list_pluck( $this->get_validation_fields(), 'default' );
167
 
168
  return apply_filters( 'happyforms_default_validation_messages', $messages );
169
  }
178
  * `happyforms_validation_message filter on success.
179
  */
180
  public function get_message( $message_key ) {
181
+ $message = $this->form[ $message_key ];
182
+
183
+ if ( ! empty( $message ) ) {
184
+ return $message;
185
+ }
186
+
187
  $default_messages = $this->get_default_messages();
 
188
 
189
  if ( ! isset( $default_messages[$message_key] ) ) {
190
  return $message;
191
  }
192
 
193
  $message = $default_messages[$message_key];
 
194
 
195
  return $message;
196
  }
core/classes/class-wp-customize-form-manager.php CHANGED
@@ -166,12 +166,12 @@ class HappyForms_WP_Customize_Form_Manager {
166
  $notice_content = '';
167
  $notice_content .= '<h3>' . __( 'Form saved 👏', 'happyforms' ) . '</h3>';
168
  $notice_content .= '<p>' . __( 'There are two ways to embed your form. Here goes…', 'happyforms' ) . '</p>';
169
- $notice_content .= '<h4>' . __( 'Add HappyForms to your page or post', 'happyforms' ) . '</h4>';
170
- $notice_content .= '<ol><li>' . __( 'In your Edit Post / Edit Page screen, click Add Block.', 'happyforms' ) . '</li><li>' . __( 'Select the HappyForms content block.', 'happyforms' ) . '</li><li>' . __( 'Select a form in the Form dropdown.', 'happyforms' ) . '</li><li> ' . __( 'That\'s it! You\'ll see a basic preview of your form in the editor.', 'happyforms' ) . '</li></ol>';
171
- $notice_content .= '<h4>' . __( 'Use HappyForms in a widget area', 'happyforms' ) . '</h4>';
172
  $notice_content .= '<ol>';
173
  $notice_content .= '<li>' . sprintf( __( 'Head over to Appearance &rarr; <a href="%s">Widgets</a> screen.', 'happyforms' ), get_site_url( NULL, 'wp-admin/widgets.php' ) ) . '</li>';
174
- $notice_content .= '<li>' . __( 'Drag the HappyForms widget to your sidebar.', 'happyforms' ) .'</li>';
175
  $notice_content .= '<li>' . __( 'Select a form in the Form dropdown.', 'happyforms' ) . '</li>';
176
  $notice_content .= '<li>' . __( 'All done!', 'happyforms' ) . '</li>';
177
  $notice_content .= '</ol>';
@@ -441,6 +441,7 @@ class HappyForms_WP_Customize_Form_Manager {
441
  require_once( happyforms_get_core_folder() . '/templates/customize-form-parts-drawer.php' );
442
  require_once( happyforms_get_core_folder() . '/templates/customize-form-style.php' );
443
  require_once( happyforms_get_core_folder() . '/templates/customize-form-email.php' );
 
444
 
445
  _WP_Editors::print_default_editor_scripts();
446
  }
166
  $notice_content = '';
167
  $notice_content .= '<h3>' . __( 'Form saved 👏', 'happyforms' ) . '</h3>';
168
  $notice_content .= '<p>' . __( 'There are two ways to embed your form. Here goes…', 'happyforms' ) . '</p>';
169
+ $notice_content .= '<h4>' . __( 'Add your form to a page or post', 'happyforms' ) . '</h4>';
170
+ $notice_content .= '<ol><li>' . __( 'In your Edit Post / Edit Page screen, click Add Block.', 'happyforms' ) . '</li><li>' . __( 'Select the Forms content block.', 'happyforms' ) . '</li><li>' . __( 'Select a form in the Form dropdown.', 'happyforms' ) . '</li><li> ' . __( 'That\'s it! You\'ll see a basic preview of your form in the editor.', 'happyforms' ) . '</li></ol>';
171
+ $notice_content .= '<h4>' . __( 'Use your form in a widget area', 'happyforms' ) . '</h4>';
172
  $notice_content .= '<ol>';
173
  $notice_content .= '<li>' . sprintf( __( 'Head over to Appearance &rarr; <a href="%s">Widgets</a> screen.', 'happyforms' ), get_site_url( NULL, 'wp-admin/widgets.php' ) ) . '</li>';
174
+ $notice_content .= '<li>' . __( 'Drag the Forms widget to your sidebar.', 'happyforms' ) .'</li>';
175
  $notice_content .= '<li>' . __( 'Select a form in the Form dropdown.', 'happyforms' ) . '</li>';
176
  $notice_content .= '<li>' . __( 'All done!', 'happyforms' ) . '</li>';
177
  $notice_content .= '</ol>';
441
  require_once( happyforms_get_core_folder() . '/templates/customize-form-parts-drawer.php' );
442
  require_once( happyforms_get_core_folder() . '/templates/customize-form-style.php' );
443
  require_once( happyforms_get_core_folder() . '/templates/customize-form-email.php' );
444
+ require_once( happyforms_get_core_folder() . '/templates/customize-form-messages.php' );
445
 
446
  _WP_Editors::print_default_editor_scripts();
447
  }
core/classes/parts/class-part-checkbox.php CHANGED
@@ -36,7 +36,7 @@ class HappyForms_Part_Checkbox extends HappyForms_Form_Part {
36
  'sanitize' => 'sanitize_text_field',
37
  ),
38
  'label' => array(
39
- 'default' => __( 'Untitled', 'happyforms' ),
40
  'sanitize' => 'sanitize_text_field',
41
  ),
42
  'label_placement' => array(
@@ -193,7 +193,7 @@ class HappyForms_Part_Checkbox extends HappyForms_Form_Part {
193
  $validated_value = $value;
194
 
195
  if ( 1 === $part['required'] && empty( $validated_value ) ) {
196
- $validated_value = new WP_Error( 'error', happyforms_get_validation_message( 'field_empty' ) );
197
  return $validated_value;
198
  }
199
 
36
  'sanitize' => 'sanitize_text_field',
37
  ),
38
  'label' => array(
39
+ 'default' => __( '', 'happyforms' ),
40
  'sanitize' => 'sanitize_text_field',
41
  ),
42
  'label_placement' => array(
193
  $validated_value = $value;
194
 
195
  if ( 1 === $part['required'] && empty( $validated_value ) ) {
196
+ $validated_value = new WP_Error( 'error', happyforms_get_validation_message( 'no_selection' ) );
197
  return $validated_value;
198
  }
199
 
core/classes/parts/class-part-email.php CHANGED
@@ -8,13 +8,14 @@ class HappyForms_Part_Email extends HappyForms_Form_Part {
8
  $this->label = __( 'Email Address', 'happyforms' );
9
  $this->description = __( 'For formatted email addresses. The \'@\' symbol is required.', 'happyforms' );
10
 
 
11
  add_filter( 'happyforms_part_class', array( $this, 'html_part_class' ), 10, 3 );
12
- add_filter( 'happyforms_part_data_attributes', array( $this, 'html_part_data_attributes' ), 10, 3 );
13
  add_filter( 'happyforms_message_part_value', array( $this, 'message_part_value' ), 10, 4 );
14
  add_filter( 'happyforms_frontend_dependencies', array( $this, 'script_dependencies' ), 10, 2 );
15
  add_filter( 'happyforms_stringify_part_value', array( $this, 'stringify_value' ), 10, 3 );
16
  add_filter( 'happyforms_validate_part', array( $this, 'validate_part' ) );
17
  add_filter( 'happyforms_email_part_visible', array( $this, 'email_part_visible' ), 10, 4 );
 
18
  }
19
 
20
  /**
@@ -31,7 +32,7 @@ class HappyForms_Part_Email extends HappyForms_Form_Part {
31
  'sanitize' => 'sanitize_text_field',
32
  ),
33
  'label' => array(
34
- 'default' => __( 'Untitled', 'happyforms' ),
35
  'sanitize' => 'sanitize_text_field',
36
  ),
37
  'label_placement' => array(
@@ -46,22 +47,6 @@ class HappyForms_Part_Email extends HappyForms_Form_Part {
46
  'default' => '',
47
  'sanitize' => 'sanitize_text_field'
48
  ),
49
- 'autocomplete_domains' => array(
50
- 'default' => 1,
51
- 'sanitize' => 'intval'
52
- ),
53
- 'confirmation_field' => array(
54
- 'default' => 0,
55
- 'sanitize' => 'intval'
56
- ),
57
- 'confirmation_field_label' => array(
58
- 'default' => __( 'Untitled', 'happyforms' ),
59
- 'sanitize' => 'sanitize_text_field'
60
- ),
61
- 'confirmation_field_placeholder' => array(
62
- 'default' => __( '', 'happyforms' ),
63
- 'sanitize' => 'sanitize_text_field'
64
- ),
65
  'placeholder' => array(
66
  'default' => '',
67
  'sanitize' => 'sanitize_text_field',
@@ -86,6 +71,10 @@ class HappyForms_Part_Email extends HappyForms_Form_Part {
86
  'default' => 1,
87
  'sanitize' => 'happyforms_sanitize_checkbox',
88
  ),
 
 
 
 
89
  );
90
 
91
  return happyforms_get_part_customize_fields( $fields, $this->type );
@@ -110,10 +99,6 @@ class HappyForms_Part_Email extends HappyForms_Form_Part {
110
  return $part_data;
111
  }
112
 
113
- if ( ! ( ( '' === $part_data['prefix'] ) && ( '' === $part_data['suffix'] ) ) && ( 1 == $part_data['autocomplete_domains'] ) ) {
114
- $part_data['autocomplete_domains'] = 0;
115
- }
116
-
117
  return $part_data;
118
  }
119
 
@@ -125,7 +110,7 @@ class HappyForms_Part_Email extends HappyForms_Form_Part {
125
 
126
  $empty_value = $part['prefix'] . $part['suffix'];
127
  $value = happyforms_get_message_part_value( $response['parts'][$part['id']], $part );
128
-
129
  if ( $empty_value === $value ) {
130
  $visible = false;
131
  }
@@ -134,6 +119,16 @@ class HappyForms_Part_Email extends HappyForms_Form_Part {
134
  return $visible;
135
  }
136
 
 
 
 
 
 
 
 
 
 
 
137
  /**
138
  * Get front end part template with parsed data.
139
  *
@@ -151,10 +146,6 @@ class HappyForms_Part_Email extends HappyForms_Form_Part {
151
  include( happyforms_get_core_folder() . '/templates/parts/frontend-email.php' );
152
  }
153
 
154
- public function get_default_value( $part_data = array() ) {
155
- return array();
156
- }
157
-
158
  /**
159
  * Sanitize submitted value before storing it.
160
  *
@@ -169,11 +160,7 @@ class HappyForms_Part_Email extends HappyForms_Form_Part {
169
  $part_name = happyforms_get_part_name( $part_data, $form_data );
170
 
171
  if ( isset( $request[$part_name] ) ) {
172
- $sanitized_value[0] = sanitize_text_field( $request[$part_name] );
173
- }
174
-
175
- if ( isset( $request[$part_name . '_confirmation'] ) ) {
176
- $sanitized_value[1] = sanitize_text_field( $request[$part_name . '_confirmation'] );
177
  }
178
 
179
  return $sanitized_value;
@@ -192,24 +179,17 @@ class HappyForms_Part_Email extends HappyForms_Form_Part {
192
  public function validate_value( $value, $part = array(), $form = array() ) {
193
  $part_name = happyforms_get_part_name( $part, $form );
194
 
195
- if ( empty( $value[0] ) ) {
196
  if ( 1 == $part['required'] ) {
197
  $error = new WP_Error( 'error', happyforms_get_validation_message( 'field_empty' ) );
198
 
199
- if ( empty( $value[1] ) ) {
200
- $error->add_data( array(
201
- 'components' => array( 0, 1 )
202
- ) );
203
- }
204
-
205
  return $error;
206
  } else {
207
- return $value[0];
208
  }
209
  }
210
 
211
- $validation_value = $value[0];
212
- $validation_confirmation_value = '';
213
 
214
  if ( ( '' !== $part['prefix'] ) ) {
215
  $validation_value = "{$part['prefix']}{$validation_value}";
@@ -219,46 +199,21 @@ class HappyForms_Part_Email extends HappyForms_Form_Part {
219
  $validation_value = "{$validation_value}{$part['suffix']}";
220
  }
221
 
222
- if ( isset( $value[1] ) ) {
223
- $validation_confirmation_value = $value[1];
224
-
225
- if ( ! empty( $part['prefix'] ) ) {
226
- $validation_confirmation_value = "{$part['prefix']}{$validation_confirmation_value}";
227
- }
228
- if ( ! empty( $part['suffix'] ) ) {
229
- $validation_confirmation_value = "{$validation_confirmation_value}{$part['suffix']}";
230
- }
231
- }
232
-
233
  if ( ! happyforms_is_email( $validation_value ) ) {
234
  $error = new WP_error( 'error', happyforms_get_validation_message( 'field_invalid' ) );
235
 
236
- if ( ! empty( $validation_confirmation_value ) && ! happyforms_is_email( $validation_confirmation_value ) ) {
237
- $error->add_data( array(
238
- 'components' => array( 0, 1 )
239
- ) );
240
- }
241
-
242
  return $error;
243
  }
244
 
245
- if ( isset( $value[1] ) && $validation_value !== $validation_confirmation_value ) {
246
- $error = new WP_Error();
247
 
248
- if ( ! empty( $value[1] ) ) {
249
- $error->add( 'error', happyforms_get_validation_message( 'values_mismatch' ), array(
250
- 'components' => array( 1 )
251
- ) );
252
- } else {
253
- $error->add( 'error', happyforms_get_validation_message( 'field_empty' ), array(
254
- 'components' => array( 1 )
255
- ) );
256
- }
257
 
258
- return $error;
 
 
259
  }
260
-
261
- return $value[0];
262
  }
263
 
264
  public function stringify_value( $value, $part, $form ) {
@@ -274,19 +229,6 @@ class HappyForms_Part_Email extends HappyForms_Form_Part {
274
  return $value;
275
  }
276
 
277
- public function html_part_data_attributes( $attributes, $part, $form ) {
278
- if ( $this->type === $part['type'] ) {
279
- if ( $part['confirmation_field'] ) {
280
- $attributes['happyforms-require-confirmation'] = '';
281
- }
282
- if ( $part['autocomplete_domains'] ) {
283
- $attributes['mode'] = 'autocomplete';
284
- }
285
- }
286
-
287
- return $attributes;
288
- }
289
-
290
  public function html_part_class( $class, $part, $form ) {
291
  if ( $this->type === $part['type'] ) {
292
  if ( happyforms_get_part_value( $part, $form, 0 )
@@ -304,19 +246,6 @@ class HappyForms_Part_Email extends HappyForms_Form_Part {
304
  return $class;
305
  }
306
 
307
- public function get_domains_for_autocomplete() {
308
- $domains = array(
309
- 'gmail.com',
310
- 'yahoo.com',
311
- 'hotmail.com',
312
- 'aol.com',
313
- 'icloud.com',
314
- 'outlook.com'
315
- );
316
-
317
- return apply_filters( 'happyforms_email_domains_autocomplete', $domains );
318
- }
319
-
320
  public function message_part_value( $value, $original_value, $part, $destination ) {
321
  if ( isset( $part['type'] )
322
  && $this->type === $part['type'] ) {
@@ -369,19 +298,8 @@ class HappyForms_Part_Email extends HappyForms_Form_Part {
369
 
370
  wp_register_script(
371
  'happyforms-email',
372
- happyforms_get_plugin_url() . 'core/assets/js/frontend/email.js',
373
- array( 'happyforms-select' ), HAPPYFORMS_VERSION, true
374
- );
375
-
376
- $settings = array(
377
- 'url' => admin_url( 'admin-ajax.php' ),
378
- 'autocompleteSource' => $this->get_domains_for_autocomplete()
379
- );
380
-
381
- wp_localize_script(
382
- 'happyforms-email',
383
- '_happyFormsEmailSettings',
384
- $settings
385
  );
386
 
387
  $deps[] = 'happyforms-email';
8
  $this->label = __( 'Email Address', 'happyforms' );
9
  $this->description = __( 'For formatted email addresses. The \'@\' symbol is required.', 'happyforms' );
10
 
11
+ add_filter( 'happyforms_part_value', array( $this, 'get_part_value' ), 10, 3 );
12
  add_filter( 'happyforms_part_class', array( $this, 'html_part_class' ), 10, 3 );
 
13
  add_filter( 'happyforms_message_part_value', array( $this, 'message_part_value' ), 10, 4 );
14
  add_filter( 'happyforms_frontend_dependencies', array( $this, 'script_dependencies' ), 10, 2 );
15
  add_filter( 'happyforms_stringify_part_value', array( $this, 'stringify_value' ), 10, 3 );
16
  add_filter( 'happyforms_validate_part', array( $this, 'validate_part' ) );
17
  add_filter( 'happyforms_email_part_visible', array( $this, 'email_part_visible' ), 10, 4 );
18
+ add_filter( 'happyforms_the_part_value', array( $this, 'handle_confirmation_value' ), 10, 4 );
19
  }
20
 
21
  /**
32
  'sanitize' => 'sanitize_text_field',
33
  ),
34
  'label' => array(
35
+ 'default' => __( '', 'happyforms' ),
36
  'sanitize' => 'sanitize_text_field',
37
  ),
38
  'label_placement' => array(
47
  'default' => '',
48
  'sanitize' => 'sanitize_text_field'
49
  ),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
50
  'placeholder' => array(
51
  'default' => '',
52
  'sanitize' => 'sanitize_text_field',
71
  'default' => 1,
72
  'sanitize' => 'happyforms_sanitize_checkbox',
73
  ),
74
+ 'default_value' => array(
75
+ 'default' => '',
76
+ 'sanitize' => 'sanitize_text_field'
77
+ )
78
  );
79
 
80
  return happyforms_get_part_customize_fields( $fields, $this->type );
99
  return $part_data;
100
  }
101
 
 
 
 
 
102
  return $part_data;
103
  }
104
 
110
 
111
  $empty_value = $part['prefix'] . $part['suffix'];
112
  $value = happyforms_get_message_part_value( $response['parts'][$part['id']], $part );
113
+
114
  if ( $empty_value === $value ) {
115
  $visible = false;
116
  }
119
  return $visible;
120
  }
121
 
122
+ public function handle_confirmation_value( $value, $part, $form, $component ) {
123
+ if ( $this->type === $part['type'] ) {
124
+ if ( false === $component && is_array( $value ) ) {
125
+ $value = $value[0];
126
+ }
127
+ }
128
+
129
+ return $value;
130
+ }
131
+
132
  /**
133
  * Get front end part template with parsed data.
134
  *
146
  include( happyforms_get_core_folder() . '/templates/parts/frontend-email.php' );
147
  }
148
 
 
 
 
 
149
  /**
150
  * Sanitize submitted value before storing it.
151
  *
160
  $part_name = happyforms_get_part_name( $part_data, $form_data );
161
 
162
  if ( isset( $request[$part_name] ) ) {
163
+ $sanitized_value = sanitize_text_field( $request[$part_name] );
 
 
 
 
164
  }
165
 
166
  return $sanitized_value;
179
  public function validate_value( $value, $part = array(), $form = array() ) {
180
  $part_name = happyforms_get_part_name( $part, $form );
181
 
182
+ if ( empty( $value ) ) {
183
  if ( 1 == $part['required'] ) {
184
  $error = new WP_Error( 'error', happyforms_get_validation_message( 'field_empty' ) );
185
 
 
 
 
 
 
 
186
  return $error;
187
  } else {
188
+ return $value;
189
  }
190
  }
191
 
192
+ $validation_value = $value;
 
193
 
194
  if ( ( '' !== $part['prefix'] ) ) {
195
  $validation_value = "{$part['prefix']}{$validation_value}";
199
  $validation_value = "{$validation_value}{$part['suffix']}";
200
  }
201
 
 
 
 
 
 
 
 
 
 
 
 
202
  if ( ! happyforms_is_email( $validation_value ) ) {
203
  $error = new WP_error( 'error', happyforms_get_validation_message( 'field_invalid' ) );
204
 
 
 
 
 
 
 
205
  return $error;
206
  }
207
 
 
 
208
 
209
+ return $value;
210
+ }
 
 
 
 
 
 
 
211
 
212
+ public function get_part_value( $value, $part, $form ){
213
+ if ( $this->type === $part['type'] ) {
214
+ $value = $part['default_value'];
215
  }
216
+ return $value;
 
217
  }
218
 
219
  public function stringify_value( $value, $part, $form ) {
229
  return $value;
230
  }
231
 
 
 
 
 
 
 
 
 
 
 
 
 
 
232
  public function html_part_class( $class, $part, $form ) {
233
  if ( $this->type === $part['type'] ) {
234
  if ( happyforms_get_part_value( $part, $form, 0 )
246
  return $class;
247
  }
248
 
 
 
 
 
 
 
 
 
 
 
 
 
 
249
  public function message_part_value( $value, $original_value, $part, $destination ) {
250
  if ( isset( $part['type'] )
251
  && $this->type === $part['type'] ) {
298
 
299
  wp_register_script(
300
  'happyforms-email',
301
+ happyforms_get_plugin_url() . 'core/assets/js/frontend/email.js',
302
+ array(), HAPPYFORMS_VERSION, true
 
 
 
 
 
 
 
 
 
 
 
303
  );
304
 
305
  $deps[] = 'happyforms-email';
core/classes/parts/class-part-multi-line-text.php CHANGED
@@ -8,11 +8,12 @@ class HappyForms_Part_MultiLineText extends HappyForms_Form_Part {
8
  $this->label = __( 'Long Answer', 'happyforms' );
9
  $this->description = __( 'For paragraph text fields.', 'happyforms' );
10
 
 
11
  add_filter( 'happyforms_the_part_value', array( $this, 'output_part_value' ), 10, 3 );
12
  add_filter( 'happyforms_email_part_value', array( $this, 'email_part_value' ), 10, 4 );
13
  add_filter( 'happyforms_message_part_value', array( $this, 'message_part_value' ), 10, 4 );
14
  add_filter( 'happyforms_part_attributes', array( $this, 'html_part_attributes' ), 10, 2 );
15
- add_action( 'happyforms_part_input_after', array( $this, 'part_input_after' ) );
16
  add_filter( 'happyforms_part_class', array( $this, 'html_part_class' ), 10, 3 );
17
  add_filter( 'happyforms_frontend_dependencies', array( $this, 'script_dependencies' ), 10, 2 );
18
  }
@@ -31,7 +32,7 @@ class HappyForms_Part_MultiLineText extends HappyForms_Form_Part {
31
  'sanitize' => 'sanitize_text_field',
32
  ),
33
  'label' => array(
34
- 'default' => __( 'Untitled', 'happyforms' ),
35
  'sanitize' => 'sanitize_text_field',
36
  ),
37
  'label_placement' => array(
@@ -88,6 +89,10 @@ class HappyForms_Part_MultiLineText extends HappyForms_Form_Part {
88
  'required' => array(
89
  'default' => 1,
90
  'sanitize' => 'happyforms_sanitize_checkbox',
 
 
 
 
91
  )
92
  );
93
 
@@ -203,6 +208,13 @@ class HappyForms_Part_MultiLineText extends HappyForms_Form_Part {
203
  return $validated_value;
204
  }
205
 
 
 
 
 
 
 
 
206
  public function output_part_value( $value, $part, $form ) {
207
  if ( $this->type === $part['type'] ) {
208
  $value = stripslashes( $value );
@@ -235,22 +247,22 @@ class HappyForms_Part_MultiLineText extends HappyForms_Form_Part {
235
  return $mode;
236
  }
237
 
238
- private function get_limit_label( $part ) {
239
  $min_or_max = '';
240
  $type = '';
241
 
242
  switch( $part['character_limit_mode'] ) {
243
  case 'character_min':
244
- $type = $part['characters_label'];
245
  break;
246
  case 'character_max':
247
- $type = $part['characters_label'];
248
  break;
249
  case 'word_min':
250
- $type = $part['words_label'];
251
  break;
252
  case 'word_max':
253
- $type = $part['words_label'];
254
  break;
255
  }
256
 
@@ -281,7 +293,7 @@ class HappyForms_Part_MultiLineText extends HappyForms_Form_Part {
281
  return $attrs;
282
  }
283
 
284
- public function part_input_after( $part ) {
285
  if ( $this->type !== $part['type'] ) {
286
  return;
287
  }
@@ -291,9 +303,9 @@ class HappyForms_Part_MultiLineText extends HappyForms_Form_Part {
291
  $character_limit = $limit_input ? $character_limit : 0;
292
 
293
  if ( $character_limit || happyforms_is_preview() ) {
294
- $label = $this->get_limit_label( $part );
295
  ?>
296
- <div class="happyforms-part__char-counter" <?php if ( happyforms_is_preview() && ! $character_limit ) : ?>style="display: none;"<?php endif; ?>>
297
  <span class="counter">0</span>/<?php echo $character_limit; ?> <?php echo $label; ?>
298
  </div>
299
  <?php
8
  $this->label = __( 'Long Answer', 'happyforms' );
9
  $this->description = __( 'For paragraph text fields.', 'happyforms' );
10
 
11
+ add_filter( 'happyforms_part_value', array( $this, 'get_part_value' ), 10, 3 );
12
  add_filter( 'happyforms_the_part_value', array( $this, 'output_part_value' ), 10, 3 );
13
  add_filter( 'happyforms_email_part_value', array( $this, 'email_part_value' ), 10, 4 );
14
  add_filter( 'happyforms_message_part_value', array( $this, 'message_part_value' ), 10, 4 );
15
  add_filter( 'happyforms_part_attributes', array( $this, 'html_part_attributes' ), 10, 2 );
16
+ add_action( 'happyforms_part_input_after', array( $this, 'part_input_after' ), 10, 2 );
17
  add_filter( 'happyforms_part_class', array( $this, 'html_part_class' ), 10, 3 );
18
  add_filter( 'happyforms_frontend_dependencies', array( $this, 'script_dependencies' ), 10, 2 );
19
  }
32
  'sanitize' => 'sanitize_text_field',
33
  ),
34
  'label' => array(
35
+ 'default' => __( '', 'happyforms' ),
36
  'sanitize' => 'sanitize_text_field',
37
  ),
38
  'label_placement' => array(
89
  'required' => array(
90
  'default' => 1,
91
  'sanitize' => 'happyforms_sanitize_checkbox',
92
+ ),
93
+ 'default_value' => array(
94
+ 'default' => '',
95
+ 'sanitize' => 'sanitize_text_field'
96
  )
97
  );
98
 
208
  return $validated_value;
209
  }
210
 
211
+ public function get_part_value( $value, $part, $form ){
212
+ if ( $this->type === $part['type'] ) {
213
+ $value = $part['default_value'];
214
+ }
215
+ return $value;
216
+ }
217
+
218
  public function output_part_value( $value, $part, $form ) {
219
  if ( $this->type === $part['type'] ) {
220
  $value = stripslashes( $value );
247
  return $mode;
248
  }
249
 
250
+ private function get_limit_label( $part, $form ) {
251
  $min_or_max = '';
252
  $type = '';
253
 
254
  switch( $part['character_limit_mode'] ) {
255
  case 'character_min':
256
+ $type = $form['characters_label_min'];
257
  break;
258
  case 'character_max':
259
+ $type = $form['characters_label_max'];
260
  break;
261
  case 'word_min':
262
+ $type = $form['words_label_min'];
263
  break;
264
  case 'word_max':
265
+ $type = $form['words_label_max'];
266
  break;
267
  }
268
 
293
  return $attrs;
294
  }
295
 
296
+ public function part_input_after( $part, $form ) {
297
  if ( $this->type !== $part['type'] ) {
298
  return;
299
  }
303
  $character_limit = $limit_input ? $character_limit : 0;
304
 
305
  if ( $character_limit || happyforms_is_preview() ) {
306
+ $label = $this->get_limit_label( $part, $form );
307
  ?>
308
+ <div class="happyforms-part__char-counter <?php echo $part['character_limit_mode']; ?>" <?php if ( happyforms_is_preview() && ! $character_limit ) : ?>style="display: none;"<?php endif; ?>>
309
  <span class="counter">0</span>/<?php echo $character_limit; ?> <?php echo $label; ?>
310
  </div>
311
  <?php
core/classes/parts/class-part-number.php CHANGED
@@ -8,12 +8,14 @@ class HappyForms_Part_Number extends HappyForms_Form_Part {
8
  $this->label = __( 'Number', 'happyforms' );
9
  $this->description = __( 'For numeric fields.', 'happyforms' );
10
 
 
11
  add_filter( 'happyforms_part_class', array( $this, 'html_part_class' ), 10, 3 );
12
  add_filter( 'happyforms_part_data_attributes', array( $this, 'html_part_data_attributes' ), 10, 3 );
13
  add_filter( 'happyforms_frontend_dependencies', array( $this, 'script_dependencies' ), 10, 2 );
14
  add_filter( 'happyforms_stringify_part_value', array( $this, 'stringify_value' ), 10, 3 );
15
  add_filter( 'happyforms_validate_part', array( $this, 'validate_part' ) );
16
  add_filter( 'happyforms_email_part_visible', array( $this, 'email_part_visible' ), 10, 4 );
 
17
  }
18
 
19
  /**
@@ -30,7 +32,7 @@ class HappyForms_Part_Number extends HappyForms_Form_Part {
30
  'sanitize' => 'sanitize_text_field',
31
  ),
32
  'label' => array(
33
- 'default' => __( 'Untitled', 'happyforms' ),
34
  'sanitize' => 'sanitize_text_field',
35
  ),
36
  'label_placement' => array(
@@ -85,22 +87,14 @@ class HappyForms_Part_Number extends HappyForms_Form_Part {
85
  'default' => '',
86
  'sanitize' => 'sanitize_text_field'
87
  ),
88
- 'confirmation_field' => array(
89
- 'default' => 0,
90
- 'sanitize' => 'intval'
91
- ),
92
- 'confirmation_field_label' => array(
93
- 'default' => __( 'Untitled', 'happyforms' ),
94
- 'sanitize' => 'sanitize_text_field'
95
- ),
96
- 'confirmation_field_placeholder' => array(
97
- 'default' => __( '', 'happyforms' ),
98
- 'sanitize' => 'sanitize_text_field'
99
- ),
100
  'required' => array(
101
  'default' => 1,
102
  'sanitize' => 'happyforms_sanitize_checkbox',
103
  ),
 
 
 
 
104
  );
105
 
106
  return happyforms_get_part_customize_fields( $fields, $this->type );
@@ -145,7 +139,7 @@ class HappyForms_Part_Number extends HappyForms_Form_Part {
145
 
146
  $empty_value = $part['mask_numeric_prefix'] . $part['mask_numeric_suffix'];
147
  $value = happyforms_get_email_part_value( $response, $part, $form );
148
-
149
  if ( $empty_value === $value ) {
150
  $visible = false;
151
  }
@@ -154,6 +148,16 @@ class HappyForms_Part_Number extends HappyForms_Form_Part {
154
  return $visible;
155
  }
156
 
 
 
 
 
 
 
 
 
 
 
157
  /**
158
  * Get front end part template with parsed data.
159
  *
@@ -171,10 +175,6 @@ class HappyForms_Part_Number extends HappyForms_Form_Part {
171
  include( happyforms_get_core_folder() . '/templates/parts/frontend-number.php' );
172
  }
173
 
174
- public function get_default_value( $part_data = array() ) {
175
- return array();
176
- }
177
-
178
  /**
179
  * Sanitize submitted value before storing it.
180
  *
@@ -189,15 +189,9 @@ class HappyForms_Part_Number extends HappyForms_Form_Part {
189
  $part_name = happyforms_get_part_name( $part_data, $form_data );
190
 
191
  if ( isset( $request[$part_name] ) ) {
192
- $sanitized_value[0] = $request[$part_name];
193
  }
194
 
195
- if ( isset( $request[$part_name . '_confirmation'] ) ) {
196
- $sanitized_value[1] = $request[$part_name . '_confirmation'];
197
- }
198
-
199
- $sanitized_value = array_map( 'sanitize_text_field' , $sanitized_value );
200
-
201
  return $sanitized_value;
202
  }
203
 
@@ -216,19 +210,13 @@ class HappyForms_Part_Number extends HappyForms_Form_Part {
216
  $part_name = happyforms_get_part_name( $part, $form );
217
  $validated_values = $value;
218
 
219
- if ( $part['required'] && '' === $validated_values[0] ) {
220
  $error = new WP_Error( 'error', happyforms_get_validation_message( 'field_empty' ) );
221
 
222
- if ( empty( $validated_values[1] ) ) {
223
- $error->add_data( array(
224
- 'components' => array( 0, 1 )
225
- ) );
226
- }
227
-
228
  return $error;
229
  }
230
 
231
- $validation_number = $validated_values[0];
232
 
233
  if ( $part['masked'] ) {
234
  $validation_number = str_replace( $part['mask_numeric_prefix'], '', $validation_number );
@@ -242,28 +230,13 @@ class HappyForms_Part_Number extends HappyForms_Form_Part {
242
  $min_value = intval( $part['min_value'] );
243
  $max_value = intval( $part['max_value'] );
244
 
245
- if ( $validation_number < $min_value || $validation_number > $max_value ) {
246
- return new WP_Error( 'error', happyforms_get_validation_message( 'field_invalid' ) );
 
 
247
  }
248
 
249
- // Check confirmation
250
- if ( isset( $validated_values[1] ) && ( $validated_values[0] !== $validated_values[1] ) ) {
251
- $error = new WP_Error();
252
-
253
- if ( ! empty( $validated_values[1] ) ) {
254
- $error->add( 'error', happyforms_get_validation_message( 'values_mismatch' ), array(
255
- 'components' => array( 1 )
256
- ) );
257
- } else {
258
- $error->add( 'error', happyforms_get_validation_message( 'field_empty' ), array(
259
- 'components' => array( 1 )
260
- ) );
261
- }
262
-
263
- return $error;
264
- }
265
-
266
- return $validated_values[0];
267
  }
268
 
269
  public function stringify_value( $value, $part, $form ) {
@@ -312,15 +285,18 @@ class HappyForms_Part_Number extends HappyForms_Form_Part {
312
  return $class;
313
  }
314
 
 
 
 
 
 
 
 
315
  public function html_part_data_attributes( $attributes, $part, $form ) {
316
  if ( $this->type !== $part['type'] ) {
317
  return $attributes;
318
  }
319
 
320
- if ( $part['confirmation_field'] ) {
321
- $attributes['happyforms-require-confirmation'] = '';
322
- }
323
-
324
  if ( $part['masked'] ) {
325
  $attributes['mask'] = 'true';
326
  $attributes['thousands-delimiter'] = $part['mask_numeric_thousands_delimiter'];
8
  $this->label = __( 'Number', 'happyforms' );
9
  $this->description = __( 'For numeric fields.', 'happyforms' );
10
 
11
+ add_filter( 'happyforms_part_value', array( $this, 'get_part_value' ), 10, 3 );
12
  add_filter( 'happyforms_part_class', array( $this, 'html_part_class' ), 10, 3 );
13
  add_filter( 'happyforms_part_data_attributes', array( $this, 'html_part_data_attributes' ), 10, 3 );
14
  add_filter( 'happyforms_frontend_dependencies', array( $this, 'script_dependencies' ), 10, 2 );
15
  add_filter( 'happyforms_stringify_part_value', array( $this, 'stringify_value' ), 10, 3 );
16
  add_filter( 'happyforms_validate_part', array( $this, 'validate_part' ) );
17
  add_filter( 'happyforms_email_part_visible', array( $this, 'email_part_visible' ), 10, 4 );
18
+ add_filter( 'happyforms_the_part_value', array( $this, 'handle_confirmation_value' ), 10, 4 );
19
  }
20
 
21
  /**
32
  'sanitize' => 'sanitize_text_field',
33
  ),
34
  'label' => array(
35
+ 'default' => __( '', 'happyforms' ),
36
  'sanitize' => 'sanitize_text_field',
37
  ),
38
  'label_placement' => array(
87
  'default' => '',
88
  'sanitize' => 'sanitize_text_field'
89
  ),
 
 
 
 
 
 
 
 
 
 
 
 
90
  'required' => array(
91
  'default' => 1,
92
  'sanitize' => 'happyforms_sanitize_checkbox',
93
  ),
94
+ 'default_value' => array(
95
+ 'default' => '',
96
+ 'sanitize' => 'sanitize_text_field'
97
+ )
98
  );
99
 
100
  return happyforms_get_part_customize_fields( $fields, $this->type );
139
 
140
  $empty_value = $part['mask_numeric_prefix'] . $part['mask_numeric_suffix'];
141
  $value = happyforms_get_email_part_value( $response, $part, $form );
142
+
143
  if ( $empty_value === $value ) {
144
  $visible = false;
145
  }
148
  return $visible;
149
  }
150
 
151
+ public function handle_confirmation_value( $value, $part, $form, $component ) {
152
+ if ( $this->type === $part['type'] ) {
153
+ if ( false === $component && is_array( $value ) ) {
154
+ $value = $value[0];
155
+ }
156
+ }
157
+
158
+ return $value;
159
+ }
160
+
161
  /**
162
  * Get front end part template with parsed data.
163
  *
175
  include( happyforms_get_core_folder() . '/templates/parts/frontend-number.php' );
176
  }
177
 
 
 
 
 
178
  /**
179
  * Sanitize submitted value before storing it.
180
  *
189
  $part_name = happyforms_get_part_name( $part_data, $form_data );
190
 
191
  if ( isset( $request[$part_name] ) ) {
192
+ $sanitized_value = sanitize_text_field( $request[$part_name] );
193
  }
194
 
 
 
 
 
 
 
195
  return $sanitized_value;
196
  }
197
 
210
  $part_name = happyforms_get_part_name( $part, $form );
211
  $validated_values = $value;
212
 
213
+ if ( $part['required'] && '' === $validated_values ) {
214
  $error = new WP_Error( 'error', happyforms_get_validation_message( 'field_empty' ) );
215
 
 
 
 
 
 
 
216
  return $error;
217
  }
218
 
219
+ $validation_number = $validated_values;
220
 
221
  if ( $part['masked'] ) {
222
  $validation_number = str_replace( $part['mask_numeric_prefix'], '', $validation_number );
230
  $min_value = intval( $part['min_value'] );
231
  $max_value = intval( $part['max_value'] );
232
 
233
+ if ( $validation_number < $min_value ) {
234
+ return new WP_Error( 'error', happyforms_get_validation_message( 'number_min_invalid' ) );
235
+ } else if ( $validation_number > $max_value ) {
236
+ return new WP_Error( 'error', happyforms_get_validation_message( 'number_max_invalid' ) );
237
  }
238
 
239
+ return $validated_values;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
240
  }
241
 
242
  public function stringify_value( $value, $part, $form ) {
285
  return $class;
286
  }
287
 
288
+ public function get_part_value( $value, $part, $form ){
289
+ if ( $this->type === $part['type'] ) {
290
+ $value = $part['default_value'];
291
+ }
292
+ return $value;
293
+ }
294
+
295
  public function html_part_data_attributes( $attributes, $part, $form ) {
296
  if ( $this->type !== $part['type'] ) {
297
  return $attributes;
298
  }
299
 
 
 
 
 
300
  if ( $part['masked'] ) {
301
  $attributes['mask'] = 'true';
302
  $attributes['thousands-delimiter'] = $part['mask_numeric_thousands_delimiter'];
core/classes/parts/class-part-radio.php CHANGED
@@ -37,7 +37,7 @@ class HappyForms_Part_Radio extends HappyForms_Form_Part {
37
  'sanitize' => 'sanitize_text_field',
38
  ),
39
  'label' => array(
40
- 'default' => __( 'Untitled', 'happyforms' ),
41
  'sanitize' => 'sanitize_text_field',
42
  ),
43
  'label_placement' => array(
@@ -185,7 +185,7 @@ class HappyForms_Part_Radio extends HappyForms_Form_Part {
185
  $validated_value = $value;
186
 
187
  if ( 1 === $part['required'] && '' === $validated_value ) {
188
- return new WP_Error( 'error', happyforms_get_validation_message( 'field_empty' ) );
189
  }
190
 
191
  if ( '' !== $validated_value ) {
37
  'sanitize' => 'sanitize_text_field',
38
  ),
39
  'label' => array(
40
+ 'default' => __( '', 'happyforms' ),
41
  'sanitize' => 'sanitize_text_field',
42
  ),
43
  'label_placement' => array(
185
  $validated_value = $value;
186
 
187
  if ( 1 === $part['required'] && '' === $validated_value ) {
188
+ return new WP_Error( 'error', happyforms_get_validation_message( 'no_selection' ) );
189
  }
190
 
191
  if ( '' !== $validated_value ) {
core/classes/parts/class-part-select.php CHANGED
@@ -32,7 +32,7 @@ class HappyForms_Part_Select extends HappyForms_Form_Part {
32
  'sanitize' => 'sanitize_text_field',
33
  ),
34
  'label' => array(
35
- 'default' => __( 'Untitled', 'happyforms' ),
36
  'sanitize' => 'sanitize_text_field',
37
  ),
38
  'label_placement' => array(
@@ -71,10 +71,6 @@ class HappyForms_Part_Select extends HappyForms_Form_Part {
71
  'default' => 0,
72
  'sanitize' => 'happyforms_sanitize_checkbox'
73
  ),
74
- 'no_results_label' => array(
75
- 'default' => __( 'No results', 'happyforms' ),
76
- 'sanitize' => 'sanitize_text_field',
77
- ),
78
  );
79
 
80
  return happyforms_get_part_customize_fields( $fields, $this->type );
@@ -180,7 +176,7 @@ class HappyForms_Part_Select extends HappyForms_Form_Part {
180
  $validated_value = $value;
181
 
182
  if ( 1 === $part['required'] && '' === $validated_value ) {
183
- return new WP_Error( 'error', happyforms_get_validation_message( 'field_empty' ) );
184
  }
185
 
186
  if ( '' !== $validated_value ) {
32
  'sanitize' => 'sanitize_text_field',
33
  ),
34
  'label' => array(
35
+ 'default' => __( '', 'happyforms' ),
36
  'sanitize' => 'sanitize_text_field',
37
  ),
38
  'label_placement' => array(
71
  'default' => 0,
72
  'sanitize' => 'happyforms_sanitize_checkbox'
73
  ),
 
 
 
 
74
  );
75
 
76
  return happyforms_get_part_customize_fields( $fields, $this->type );
176
  $validated_value = $value;
177
 
178
  if ( 1 === $part['required'] && '' === $validated_value ) {
179
+ return new WP_Error( 'error', happyforms_get_validation_message( 'no_selection' ) );
180
  }
181
 
182
  if ( '' !== $validated_value ) {
core/classes/parts/class-part-single-line-text.php CHANGED
@@ -8,6 +8,7 @@ class HappyForms_Part_SingleLineText extends HappyForms_Form_Part {
8
  $this->label = __( 'Short Answer', 'happyforms' );
9
  $this->description = __( 'For single line text fields.', 'happyforms' );
10
 
 
11
  add_filter( 'happyforms_the_part_value', array( $this, 'output_part_value' ), 10, 3 );
12
  add_filter( 'happyforms_stringify_part_value', array( $this, 'stringify_value' ), 10, 3 );
13
  add_filter( 'happyforms_part_class', array( $this, 'html_part_class' ), 10, 3 );
@@ -28,7 +29,7 @@ class HappyForms_Part_SingleLineText extends HappyForms_Form_Part {
28
  'sanitize' => 'sanitize_text_field',
29
  ),
30
  'label' => array(
31
- 'default' => __( 'Untitled', 'happyforms' ),
32
  'sanitize' => 'sanitize_text_field',
33
  ),
34
  'label_placement' => array(
@@ -70,6 +71,10 @@ class HappyForms_Part_SingleLineText extends HappyForms_Form_Part {
70
  'use_as_subject' => array(
71
  'default' => 0,
72
  'sanitize' => 'happyforms_sanitize_checkbox'
 
 
 
 
73
  )
74
  );
75
 
@@ -153,6 +158,14 @@ class HappyForms_Part_SingleLineText extends HappyForms_Form_Part {
153
  return $value;
154
  }
155
 
 
 
 
 
 
 
 
 
156
  public function output_part_value( $value, $part, $form ) {
157
  if ( $this->type === $part['type'] ) {
158
  $value = stripslashes( $value );
@@ -179,7 +192,7 @@ class HappyForms_Part_SingleLineText extends HappyForms_Form_Part {
179
  if ( $this->type === $part['type'] ) {
180
  $empty_value = $part['prefix'] . $part['suffix'];
181
  $value = happyforms_get_email_part_value( $response, $part, $form );
182
-
183
  if ( $empty_value === $value ) {
184
  $visible = false;
185
  }
8
  $this->label = __( 'Short Answer', 'happyforms' );
9
  $this->description = __( 'For single line text fields.', 'happyforms' );
10
 
11
+ add_filter( 'happyforms_part_value', array( $this, 'get_part_value' ), 10, 3 );
12
  add_filter( 'happyforms_the_part_value', array( $this, 'output_part_value' ), 10, 3 );
13
  add_filter( 'happyforms_stringify_part_value', array( $this, 'stringify_value' ), 10, 3 );
14
  add_filter( 'happyforms_part_class', array( $this, 'html_part_class' ), 10, 3 );
29
  'sanitize' => 'sanitize_text_field',
30
  ),
31
  'label' => array(
32
+ 'default' => __( '', 'happyforms' ),
33
  'sanitize' => 'sanitize_text_field',
34
  ),
35
  'label_placement' => array(
71
  'use_as_subject' => array(
72
  'default' => 0,
73
  'sanitize' => 'happyforms_sanitize_checkbox'
74
+ ),
75
+ 'default_value' => array(
76
+ 'default' => '',
77
+ 'sanitize' => 'sanitize_text_field'
78
  )
79
  );
80
 
158
  return $value;
159
  }
160
 
161
+ public function get_part_value( $value, $part, $form ) {
162
+ if ( $this->type === $part['type'] ) {
163
+ $value = $part['default_value'];
164
+ }
165
+
166
+ return $value;
167
+ }
168
+
169
  public function output_part_value( $value, $part, $form ) {
170
  if ( $this->type === $part['type'] ) {
171
  $value = stripslashes( $value );
192
  if ( $this->type === $part['type'] ) {
193
  $empty_value = $part['prefix'] . $part['suffix'];
194
  $value = happyforms_get_email_part_value( $response, $part, $form );
195
+
196
  if ( $empty_value === $value ) {
197
  $visible = false;
198
  }
core/helpers/helper-form-templates.php CHANGED
@@ -368,7 +368,7 @@ if ( ! function_exists( 'happyforms_the_part_value' ) ):
368
  */
369
  function happyforms_the_part_value( $part, $form, $component = false ) {
370
  $value = happyforms_get_part_value( $part, $form, $component );
371
- $value = apply_filters( 'happyforms_the_part_value', $value, $part, $form );
372
 
373
  echo esc_attr( $value );
374
  }
@@ -989,31 +989,6 @@ function happyforms_the_part_label( $part, $form ) {
989
 
990
  endif;
991
 
992
- if ( ! function_exists( 'happyforms_the_part_confirmation_label' ) ) :
993
- /**
994
- * Output a part confirmation label
995
- *
996
- * @since 1.3
997
- *
998
- * @param string $id Current part id.
999
- * @param array $part Current part data.
1000
- * @param array $form Current form data.
1001
- *
1002
- * @return void
1003
- */
1004
- function happyforms_the_part_confirmation_label( $part, $form ) {
1005
- ?>
1006
- <label for="<?php happyforms_the_part_id( $part, $form ); ?>_confirmation" class="happyforms-part__label happyforms-part__label--confirmation">
1007
- <span class="label"><?php echo esc_html( $part['confirmation_field_label'] ); ?></span>
1008
- <?php if ( 1 === intval( $part['required'] ) ) : ?>
1009
- <span class="happyforms-required"><?php echo happyforms_get_form_property( $form, 'hf_style_required_text' ); ?></span>
1010
- <?php endif; ?>
1011
- </label>
1012
- <?php
1013
- }
1014
-
1015
- endif;
1016
-
1017
  if ( ! function_exists( 'happyforms_get_part_options' ) ) :
1018
 
1019
  function happyforms_get_part_options( $options, $part, $form ) {
@@ -1534,7 +1509,7 @@ endif;
1534
  if ( ! function_exists( 'happyforms_get_shortcode' ) ):
1535
 
1536
  function happyforms_get_shortcode( $form_id = 'ID' ) {
1537
- $shortcode = "[happyforms id=\"{$form_id}\" /]";
1538
  $shortcode = apply_filters( 'happyforms_get_shortcode', $shortcode, $form_id );
1539
 
1540
  return $shortcode;
368
  */
369
  function happyforms_the_part_value( $part, $form, $component = false ) {
370
  $value = happyforms_get_part_value( $part, $form, $component );
371
+ $value = apply_filters( 'happyforms_the_part_value', $value, $part, $form, $component );
372
 
373
  echo esc_attr( $value );
374
  }
989
 
990
  endif;
991
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
992
  if ( ! function_exists( 'happyforms_get_part_options' ) ) :
993
 
994
  function happyforms_get_part_options( $options, $part, $form ) {
1509
  if ( ! function_exists( 'happyforms_get_shortcode' ) ):
1510
 
1511
  function happyforms_get_shortcode( $form_id = 'ID' ) {
1512
+ $shortcode = "[form id=\"{$form_id}\" /]";
1513
  $shortcode = apply_filters( 'happyforms_get_shortcode', $shortcode, $form_id );
1514
 
1515
  return $shortcode;
core/helpers/helper-misc.php CHANGED
@@ -204,7 +204,7 @@ if ( ! function_exists( 'happyforms_admin_footer' ) ):
204
  function happyforms_admin_footer() {
205
  ?>
206
  <span id="footer-thankyou">
207
- <?php _e( 'Thank you for creating with', 'happyforms' ); ?> <a href="https://happyforms.me/" target="_blank">HappyForms</a>.
208
  </span>
209
  <?php
210
  }
204
  function happyforms_admin_footer() {
205
  ?>
206
  <span id="footer-thankyou">
207
+ <?php _e( 'Thank you for creating with', 'happyforms' ); ?> <a href="https://wordpress.org/" target="_blank">WordPress</a>.
208
  </span>
209
  <?php
210
  }
core/templates/customize-controls/setup/group_start.php CHANGED
@@ -1 +1,28 @@
1
- <section class="customize-control-group happyforms-nested-settings" data-trigger="<?php echo $control['trigger']; ?>">
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ $trigger = '';
3
+ $group_id = '';
4
+ $group_class = 'happyforms-nested-settings';
5
+ $group_title = isset( $control['group_title'] ) ? $control['group_title'] : '';
6
+ $group_description = isset( $control['group_description'] ) ? $control['group_description'] : '';
7
+ $group_type = isset( $control['group_type'] ) ? $control['group_type'] : '';
8
+
9
+ if ( $group_type == 'group') {
10
+ $group_class = 'happyforms-group-settings';
11
+ }
12
+
13
+
14
+ if ( isset( $control['group_id'] ) && ! empty( $control['group_id'] ) ) {
15
+ $trigger = 'id="' . $control['group_id'] . '"';
16
+ }
17
+
18
+ if ( isset( $control['trigger'] ) && ! empty( $control['trigger'] ) ) {
19
+ $trigger = 'data-trigger="' . $control['trigger'] . '"';
20
+ }
21
+ ?>
22
+ <section class="customize-control-group <?php echo $group_class; ?>" <?php echo $group_id . ' ' . $trigger; ?>>
23
+ <?php if ( ! empty( $group_title ) ) : ?>
24
+ <span class="customize-control-title"><?php echo $group_title; ?></span>
25
+ <?php endif; ?>
26
+ <?php if ( ! empty( $group_description ) ) : ?>
27
+ <p class="happyforms-group-settings-description"><?php echo $group_description; ?></span>
28
+ <?php endif; ?>
core/templates/customize-form-build.php CHANGED
@@ -1,7 +1,6 @@
1
  <script type="text/template" id="happyforms-form-build-template">
2
  <div class="happyforms-stack-view">
3
  <div class="customize-control">
4
- <label for="" class="customize-control-title"><?php _e( 'Title', 'happyforms' ); ?></label>
5
  <input type="text" name="post_title" value="<%= post_title %>" id="happyforms-form-name" placeholder="<?php _e( 'Add title', 'happyforms' ); ?>">
6
  </div>
7
 
1
  <script type="text/template" id="happyforms-form-build-template">
2
  <div class="happyforms-stack-view">
3
  <div class="customize-control">
 
4
  <input type="text" name="post_title" value="<%= post_title %>" id="happyforms-form-name" placeholder="<?php _e( 'Add title', 'happyforms' ); ?>">
5
  </div>
6
 
core/templates/customize-form-messages.php ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ $controller = happyforms_get_form_controller();
3
+ $controls = happyforms_get_messages()->get_controls();
4
+ ?>
5
+
6
+ <script type="text/template" id="happyforms-form-messages-template">
7
+ <div class="happyforms-stack-view happyforms-messages-view">
8
+ <?php
9
+ $c = 0;
10
+ foreach( $controls as $control ) {
11
+ $field = false;
12
+
13
+ if ( isset( $control['field'] ) ) {
14
+ $field = $controller->get_field( $control['field'] );
15
+ }
16
+
17
+ do_action( 'happyforms_do_messages_control', $control, $field, $c );
18
+ $c ++;
19
+ }
20
+ ?>
21
+ </div>
22
+ </script>
core/templates/customize-form-part-footer.php CHANGED
@@ -2,7 +2,6 @@
2
  <div class="happyforms-widget-actions">
3
  <a href="#" class="happyforms-form-part-remove"><?php _e( 'Delete', 'happyforms' ); ?></a> |
4
  <a href="#" class="happyforms-form-part-duplicate"><?php _e( 'Duplicate', 'happyforms' ); ?></a>
5
- <a href="#" class="happyforms-form-part-advanced-settings"><?php _e( 'More', 'happyforms' ); ?></a>
6
  <a href="#" class="happyforms-form-part-logic"><?php _e( 'Logic', 'happyforms' ); ?></a>
7
  </div>
8
  </div>
2
  <div class="happyforms-widget-actions">
3
  <a href="#" class="happyforms-form-part-remove"><?php _e( 'Delete', 'happyforms' ); ?></a> |
4
  <a href="#" class="happyforms-form-part-duplicate"><?php _e( 'Duplicate', 'happyforms' ); ?></a>
 
5
  <a href="#" class="happyforms-form-part-logic"><?php _e( 'Logic', 'happyforms' ); ?></a>
6
  </div>
7
  </div>
core/templates/customize-form-steps.php CHANGED
@@ -3,6 +3,7 @@
3
  <a href="#" class="nav-tab<%= ( 'build' === happyForms.currentRoute ) ? ' nav-tab-active' : '' %>" data-step="build"><?php _e( 'Build', 'happyforms' ); ?></a>
4
  <a href="#" class="nav-tab<%= ( 'setup' === happyForms.currentRoute ) ? ' nav-tab-active' : '' %>" data-step="setup"><?php _e( 'Setup', 'happyforms' ); ?></a>
5
  <a href="#" class="nav-tab<%= ( 'email' === happyForms.currentRoute ) ? ' nav-tab-active' : '' %>" data-step="email"><?php _e( 'Email', 'happyforms' ); ?></a>
 
6
  <a href="#" class="nav-tab<%= ( 'style' === happyForms.currentRoute ) ? ' nav-tab-active' : '' %>" data-step="style"><?php _e( 'Style', 'happyforms' ); ?></a>
7
  </nav>
8
  </script>
3
  <a href="#" class="nav-tab<%= ( 'build' === happyForms.currentRoute ) ? ' nav-tab-active' : '' %>" data-step="build"><?php _e( 'Build', 'happyforms' ); ?></a>
4
  <a href="#" class="nav-tab<%= ( 'setup' === happyForms.currentRoute ) ? ' nav-tab-active' : '' %>" data-step="setup"><?php _e( 'Setup', 'happyforms' ); ?></a>
5
  <a href="#" class="nav-tab<%= ( 'email' === happyForms.currentRoute ) ? ' nav-tab-active' : '' %>" data-step="email"><?php _e( 'Email', 'happyforms' ); ?></a>
6
+ <a href="#" class="nav-tab<%= ( 'messages' === happyForms.currentRoute ) ? ' nav-tab-active' : '' %>" data-step="messages"><?php _e( 'Messages', 'happyforms' ); ?></a>
7
  <a href="#" class="nav-tab<%= ( 'style' === happyForms.currentRoute ) ? ' nav-tab-active' : '' %>" data-step="style"><?php _e( 'Style', 'happyforms' ); ?></a>
8
  </nav>
9
  </script>
core/templates/partials/form-submit.php CHANGED
@@ -1,4 +1,8 @@
1
- <?php $submit_button_extra_class = ( happyforms_get_form_property( $form, 'submit_button_html_class' ) ) ? happyforms_get_form_property( $form, 'submit_button_html_class' ) : ''; ?>
 
 
 
 
2
  <div class="happyforms-form__part happyforms-part happyforms-part--submit">
3
  <?php do_action( 'happyforms_form_submit_before', $form ); ?>
4
  <input type="submit" class="happyforms-submit happyforms-button--submit <?php echo $submit_button_extra_class; ?>" value="<?php echo esc_attr( happyforms_get_form_property( $form, 'submit_button_label' ) ); ?>">
1
+ <?php
2
+ $submit_button_extra_class = '';
3
+ if( happyforms_get_form_property( $form, 'add_submit_button_class' ) == 1 ) {
4
+ $submit_button_extra_class = happyforms_get_form_property( $form, 'submit_button_html_class' );
5
+ } ?>
6
  <div class="happyforms-form__part happyforms-part happyforms-part--submit">
7
  <?php do_action( 'happyforms_form_submit_before', $form ); ?>
8
  <input type="submit" class="happyforms-submit happyforms-button--submit <?php echo $submit_button_extra_class; ?>" value="<?php echo esc_attr( happyforms_get_form_property( $form, 'submit_button_label' ) ); ?>">
core/templates/partials/happyforms-select.php CHANGED
@@ -4,6 +4,6 @@
4
  <li <?php echo ( isset( $option['id'] ) ) ? 'data-option-id="'. esc_attr( $option['id'] ) .'" ' : ''; ?>data-value="<?php echo ( isset( $option['value'] ) ) ? $option['value'] : $index; ?>" data-label="<?php echo esc_attr( $option['label'] ); ?>" class="happyforms-dropdown-item happyforms-custom-select-dropdown__item"><?php echo esc_attr( $option['label'] ); ?></li>
5
  <?php endforeach; ?>
6
  <?php if ( isset( $part['allow_search'] ) && 1 == $part['allow_search'] ) : ?>
7
- <li class="happyforms-custom-select-dropdown__not-found"><?php echo esc_attr( $part['no_results_label'] ); ?></li>
8
  <?php endif; ?>
9
  </ul>
4
  <li <?php echo ( isset( $option['id'] ) ) ? 'data-option-id="'. esc_attr( $option['id'] ) .'" ' : ''; ?>data-value="<?php echo ( isset( $option['value'] ) ) ? $option['value'] : $index; ?>" data-label="<?php echo esc_attr( $option['label'] ); ?>" class="happyforms-dropdown-item happyforms-custom-select-dropdown__item"><?php echo esc_attr( $option['label'] ); ?></li>
5
  <?php endforeach; ?>
6
  <?php if ( isset( $part['allow_search'] ) && 1 == $part['allow_search'] ) : ?>
7
+ <li class="happyforms-custom-select-dropdown__not-found"><?php echo esc_attr( $form['no_results_label'] ); ?></li>
8
  <?php endif; ?>
9
  </ul>
core/templates/parts/customize-checkbox.php CHANGED
@@ -5,7 +5,7 @@
5
  <input type="text" id="<%= instance.id %>_title" class="widefat title" value="<%= instance.label %>" data-bind="label" />
6
  </p>
7
  <p>
8
- <label for="<%= instance.id %>_description"><?php _e( 'Description', 'happyforms' ); ?></label>
9
  <textarea id="<%= instance.id %>_description" data-bind="description"><%= instance.description %></textarea>
10
  </p>
11
 
@@ -14,7 +14,7 @@
14
  <div class="options">
15
  <ul class="option-list"></ul>
16
  <h3><?php _e( 'Choices', 'happyforms' ); ?></h3>
17
- <p class="no-options description"><?php _e( 'No choices added yet. Add one by clicking <i>Add Choice</i> below.', 'happyforms' ); ?></p>
18
  </div>
19
  <div class="options-import">
20
  <h3><?php _e( 'Choices', 'happyforms' ); ?></h3>
@@ -34,59 +34,57 @@
34
  </p>
35
  <p>
36
  <label>
37
- <input type="checkbox" class="checkbox" value="1" <% if ( instance.required ) { %>checked="checked"<% } %> data-bind="required" /> <?php _e( 'This is required', 'happyforms' ); ?>
38
  </label>
39
  </p>
40
 
41
  <?php do_action( 'happyforms_part_customize_checkbox_after_options' ); ?>
42
 
43
- <div class="happyforms-part-advanced-settings-wrap">
44
- <?php do_action( 'happyforms_part_customize_checkbox_before_advanced_options' ); ?>
45
 
46
- <p>
47
- <label>
48
- <input type="checkbox" class="checkbox" value="1" <% if ( instance.show_select_all ) { %>checked="checked"<% } %> data-bind="show_select_all" /> <?php _e( 'Add \'select all\' choice', 'happyforms' ); ?>
49
- </label>
50
- </p>
51
- <p>
52
- <label for="<%= instance.id %>_display_type"><?php _e( 'Choices display', 'happyforms' ); ?></label>
53
- <select id="<%= instance.id %>_display_type" name="display_type" data-bind="display_type" class="widefat">
54
- <option value="inline"<%= (instance.display_type == 'inline') ? ' selected' : '' %>><?php _e( 'Horizontal', 'happyforms' ); ?></option>
55
- <option value="block"<%= (instance.display_type == 'block') ? ' selected' : '' %>><?php _e( 'Vertical', 'happyforms' ); ?></option>
56
- </select>
57
- </p>
58
- <p class="part-options-width-setting">
59
- <label for="<%= instance.id %>_options_width"><?php _e( 'Choices width', 'happyforms' ); ?></label>
60
- <select id="<%= instance.id %>_options_width" name="options_width" data-bind="options_width" class="widefat">
61
- <option class="display-type--inline display-type--block" value="full"<%= (instance.options_width == 'full') ? ' selected' : '' %>><?php _e( 'Full', 'happyforms' ); ?></option>
62
- <option class="display-type--inline" value="half" style="display: <%= ( instance.display_type == 'inline' ) ? 'block' : 'none' %>" <%= (instance.options_width == 'half') ? ' selected' : '' %>><?php _e( 'Half', 'happyforms' ); ?></option>
63
- <option class="display-type--inline" value="third" style="display: <%= ( instance.display_type == 'inline' ) ? 'block' : 'none' %>" <%= (instance.options_width == 'third') ? ' selected' : '' %>><?php _e( 'Third', 'happyforms' ); ?></option>
64
- <option class="display-type--inline" value="quarter" style="display: <%= ( instance.display_type == 'inline' ) ? 'block' : 'none' %>" <%= (instance.options_width == 'quarter') ? ' selected' : '' %>><?php _e( 'Quarter', 'happyforms' ); ?></option>
65
- <option class="display-type--inline display-type--block" value="auto"<%= (instance.options_width == 'auto') ? ' selected' : '' %>><?php _e( 'Auto', 'happyforms' ); ?></option>
66
- </select>
67
- </p>
68
- <p>
69
- <label for="<%= instance.id %>_width"><?php _e( 'Width', 'happyforms' ); ?></label>
70
- <select id="<%= instance.id %>_width" name="width" data-bind="width" class="widefat">
71
- <option value="full"<%= (instance.width == 'full') ? ' selected' : '' %>><?php _e( 'Full', 'happyforms' ); ?></option>
72
- <option value="half"<%= (instance.width == 'half') ? ' selected' : '' %>><?php _e( 'Half', 'happyforms' ); ?></option>
73
- <option value="third"<%= (instance.width == 'third') ? ' selected' : '' %>><?php _e( 'Third', 'happyforms' ); ?></option>
74
- <option value="auto"<%= (instance.width == 'auto') ? ' selected' : '' %>><?php _e( 'Auto', 'happyforms' ); ?></option>
75
- </select>
76
- </p>
77
- <p class="width-options" style="display: none">
78
- <label>
79
- <input type="checkbox" class="checkbox apply-all-check" value="" /> <?php _e( 'Apply to all fields', 'happyforms' ); ?>
80
- </label>
81
- </p>
82
 
83
- <?php do_action( 'happyforms_part_customize_checkbox_after_advanced_options' ); ?>
84
 
85
- <p>
86
- <label for="<%= instance.id %>_css_class"><?php _e( 'CSS classes', 'happyforms' ); ?></label>
87
- <input type="text" id="<%= instance.id %>_css_class" class="widefat title" value="<%= instance.css_class %>" data-bind="css_class" />
88
- </p>
89
- </div>
90
 
91
  <div class="happyforms-part-logic-wrap">
92
  <div class="happyforms-logic-view">
5
  <input type="text" id="<%= instance.id %>_title" class="widefat title" value="<%= instance.label %>" data-bind="label" />
6
  </p>
7
  <p>
8
+ <label for="<%= instance.id %>_description"><?php _e( 'Hint', 'happyforms' ); ?></label>
9
  <textarea id="<%= instance.id %>_description" data-bind="description"><%= instance.description %></textarea>
10
  </p>
11
 
14
  <div class="options">
15
  <ul class="option-list"></ul>
16
  <h3><?php _e( 'Choices', 'happyforms' ); ?></h3>
17
+ <p class="no-options description"><?php _e( 'No choices added yet.', 'happyforms' ); ?></p>
18
  </div>
19
  <div class="options-import">
20
  <h3><?php _e( 'Choices', 'happyforms' ); ?></h3>
34
  </p>
35
  <p>
36
  <label>
37
+ <input type="checkbox" class="checkbox" value="1" <% if ( instance.required ) { %>checked="checked"<% } %> data-bind="required" /> <?php _e( 'Require an answer', 'happyforms' ); ?>
38
  </label>
39
  </p>
40
 
41
  <?php do_action( 'happyforms_part_customize_checkbox_after_options' ); ?>
42
 
43
+ <?php do_action( 'happyforms_part_customize_checkbox_before_advanced_options' ); ?>
 
44
 
45
+ <p>
46
+ <label>
47
+ <input type="checkbox" class="checkbox" value="1" <% if ( instance.show_select_all ) { %>checked="checked"<% } %> data-bind="show_select_all" /> <?php _e( 'Add \'select all\' choice', 'happyforms' ); ?>
48
+ </label>
49
+ </p>
50
+ <p>
51
+ <label for="<%= instance.id %>_display_type"><?php _e( 'Choices display', 'happyforms' ); ?></label>
52
+ <select id="<%= instance.id %>_display_type" name="display_type" data-bind="display_type" class="widefat">
53
+ <option value="inline"<%= (instance.display_type == 'inline') ? ' selected' : '' %>><?php _e( 'Horizontal', 'happyforms' ); ?></option>
54
+ <option value="block"<%= (instance.display_type == 'block') ? ' selected' : '' %>><?php _e( 'Vertical', 'happyforms' ); ?></option>
55
+ </select>
56
+ </p>
57
+ <p class="part-options-width-setting">
58
+ <label for="<%= instance.id %>_options_width"><?php _e( 'Choices width', 'happyforms' ); ?></label>
59
+ <select id="<%= instance.id %>_options_width" name="options_width" data-bind="options_width" class="widefat">
60
+ <option class="display-type--inline display-type--block" value="full"<%= (instance.options_width == 'full') ? ' selected' : '' %>><?php _e( 'Full', 'happyforms' ); ?></option>
61
+ <option class="display-type--inline" value="half" style="display: <%= ( instance.display_type == 'inline' ) ? 'block' : 'none' %>" <%= (instance.options_width == 'half') ? ' selected' : '' %>><?php _e( 'Half', 'happyforms' ); ?></option>
62
+ <option class="display-type--inline" value="third" style="display: <%= ( instance.display_type == 'inline' ) ? 'block' : 'none' %>" <%= (instance.options_width == 'third') ? ' selected' : '' %>><?php _e( 'Third', 'happyforms' ); ?></option>
63
+ <option class="display-type--inline" value="quarter" style="display: <%= ( instance.display_type == 'inline' ) ? 'block' : 'none' %>" <%= (instance.options_width == 'quarter') ? ' selected' : '' %>><?php _e( 'Quarter', 'happyforms' ); ?></option>
64
+ <option class="display-type--inline display-type--block" value="auto"<%= (instance.options_width == 'auto') ? ' selected' : '' %>><?php _e( 'Auto', 'happyforms' ); ?></option>
65
+ </select>
66
+ </p>
67
+ <p>
68
+ <label for="<%= instance.id %>_width"><?php _e( 'Width', 'happyforms' ); ?></label>
69
+ <select id="<%= instance.id %>_width" name="width" data-bind="width" class="widefat">
70
+ <option value="full"<%= (instance.width == 'full') ? ' selected' : '' %>><?php _e( 'Full', 'happyforms' ); ?></option>
71
+ <option value="half"<%= (instance.width == 'half') ? ' selected' : '' %>><?php _e( 'Half', 'happyforms' ); ?></option>
72
+ <option value="third"<%= (instance.width == 'third') ? ' selected' : '' %>><?php _e( 'Third', 'happyforms' ); ?></option>
73
+ <option value="auto"<%= (instance.width == 'auto') ? ' selected' : '' %>><?php _e( 'Auto', 'happyforms' ); ?></option>
74
+ </select>
75
+ </p>
76
+ <p class="width-options" style="display: none">
77
+ <label>
78
+ <input type="checkbox" class="checkbox apply-all-check" value="" /> <?php _e( 'Apply to all fields', 'happyforms' ); ?>
79
+ </label>
80
+ </p>
81
 
82
+ <?php do_action( 'happyforms_part_customize_checkbox_after_advanced_options' ); ?>
83
 
84
+ <p>
85
+ <label for="<%= instance.id %>_css_class"><?php _e( 'CSS classes', 'happyforms' ); ?></label>
86
+ <input type="text" id="<%= instance.id %>_css_class" class="widefat title" value="<%= instance.css_class %>" data-bind="css_class" />
87
+ </p>
 
88
 
89
  <div class="happyforms-part-logic-wrap">
90
  <div class="happyforms-logic-view">
core/templates/parts/customize-email.php CHANGED
@@ -8,8 +8,12 @@
8
  <label for="<%= instance.id %>_placeholder"><?php _e( 'Placeholder', 'happyforms' ); ?></label>
9
  <input type="text" id="<%= instance.id %>_placeholder" class="widefat title" value="<%= instance.placeholder %>" data-bind="placeholder" />
10
  </p>
 
 
 
 
11
  <p>
12
- <label for="<%= instance.id %>_description"><?php _e( 'Description', 'happyforms' ); ?></label>
13
  <textarea id="<%= instance.id %>_description" data-bind="description"><%= instance.description %></textarea>
14
  </p>
15
 
@@ -17,54 +21,31 @@
17
 
18
  <p>
19
  <label>
20
- <input type="checkbox" class="checkbox" value="1" <% if ( instance.required ) { %>checked="checked"<% } %> data-bind="required" /> <?php _e( 'This is required', 'happyforms' ); ?>
21
  </label>
22
  </p>
23
 
24
  <?php do_action( 'happyforms_part_customize_email_after_options' ); ?>
25
 
26
- <div class="happyforms-part-advanced-settings-wrap">
27
- <?php do_action( 'happyforms_part_customize_email_before_advanced_options' ); ?>
28
-
29
- <p style="display: <%= ( instance.suffix.length || instance.prefix.length ) ? 'none' : 'block' %>">
30
- <label>
31
- <input type="checkbox" class="checkbox" value="1" <% if ( instance.autocomplete_domains ) { %>checked="checked"<% } %> data-bind="autocomplete_domains" /> <?php _e( 'Suggest common email domains', 'happyforms' ); ?>
32
- </label>
33
- </p>
34
- <p>
35
- <label>
36
- <input type="checkbox" class="checkbox confirmation-checkbox" value="1" <% if ( instance.confirmation_field ) { %>checked="checked"<% } %> data-bind="confirmation_field" /> <?php _e( 'Require confirmation', 'happyforms' ); ?>
37
- </label>
38
- </p>
39
- <div class="happyforms-nested-settings" data-trigger="confirmation_field" style="display: <%= (instance.confirmation_field == 1) ? 'block' : 'none' %>">
40
- <p>
41
- <label for="<%= instance.id %>_confirmation_field_label"><?php _e( '\'Confirmation\' label', 'happyforms' ); ?></label>
42
- <input type="text" id="<%= instance.id %>_confirmation_field_label" class="widefat title" value="<%= instance.confirmation_field_label %>" data-bind="confirmation_field_label" />
43
- </p>
44
- <p>
45
- <label for="<%= instance.id %>_confirmation_field_placeholder"><?php _e( '\'Confirmation\' placeholder', 'happyforms' ); ?></label>
46
- <input type="text" id="<%= instance.id %>_confirmation_field_placeholder" class="widefat title" value="<%= instance.confirmation_field_placeholder %>" data-bind="confirmation_field_placeholder" />
47
- </p>
48
- </div>
49
 
50
- <p>
51
- <label for="<%= instance.id %>_prefix"><?php _e( 'Prefix', 'happyforms' ); ?></label>
52
- <input type="text" id="<%= instance.id %>_prefix" class="widefat title" value="<%= instance.prefix %>" data-bind="prefix" maxlength="50" />
53
- </p>
54
- <p>
55
- <label for="<%= instance.id %>_suffix"><?php _e( 'Suffix', 'happyforms' ); ?></label>
56
- <input type="text" id="<%= instance.id %>_suffix" class="widefat title" value="<%= instance.suffix %>" data-bind="suffix" maxlength="50" />
57
- </p>
58
 
59
- <?php happyforms_customize_part_width_control(); ?>
60
 
61
- <?php do_action( 'happyforms_part_customize_email_after_advanced_options' ); ?>
62
 
63
- <p>
64
- <label for="<%= instance.id %>_css_class"><?php _e( 'CSS classes', 'happyforms' ); ?></label>
65
- <input type="text" id="<%= instance.id %>_css_class" class="widefat title" value="<%= instance.css_class %>" data-bind="css_class" />
66
- </p>
67
- </div>
68
 
69
  <div class="happyforms-part-logic-wrap">
70
  <div class="happyforms-logic-view">
8
  <label for="<%= instance.id %>_placeholder"><?php _e( 'Placeholder', 'happyforms' ); ?></label>
9
  <input type="text" id="<%= instance.id %>_placeholder" class="widefat title" value="<%= instance.placeholder %>" data-bind="placeholder" />
10
  </p>
11
+ <p class="happyforms-default-value-option">
12
+ <label for="<%= instance.id %>_default_value"><?php _e( 'Prefill', 'happyforms' ); ?></label>
13
+ <input type="email" id="<%= instance.id %>_default_value" class="widefat title default_value" value="<%= instance.default_value %>" data-bind="default_value" />
14
+ </p>
15
  <p>
16
+ <label for="<%= instance.id %>_description"><?php _e( 'Hint', 'happyforms' ); ?></label>
17
  <textarea id="<%= instance.id %>_description" data-bind="description"><%= instance.description %></textarea>
18
  </p>
19
 
21
 
22
  <p>
23
  <label>
24
+ <input type="checkbox" class="checkbox" value="1" <% if ( instance.required ) { %>checked="checked"<% } %> data-bind="required" /> <?php _e( 'Require an answer', 'happyforms' ); ?>
25
  </label>
26
  </p>
27
 
28
  <?php do_action( 'happyforms_part_customize_email_after_options' ); ?>
29
 
30
+ <?php do_action( 'happyforms_part_customize_email_before_advanced_options' ); ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
31
 
32
+ <p>
33
+ <label for="<%= instance.id %>_prefix"><?php _e( 'Prefix', 'happyforms' ); ?></label>
34
+ <input type="text" id="<%= instance.id %>_prefix" class="widefat title" value="<%= instance.prefix %>" data-bind="prefix" maxlength="50" />
35
+ </p>
36
+ <p>
37
+ <label for="<%= instance.id %>_suffix"><?php _e( 'Suffix', 'happyforms' ); ?></label>
38
+ <input type="text" id="<%= instance.id %>_suffix" class="widefat title" value="<%= instance.suffix %>" data-bind="suffix" maxlength="50" />
39
+ </p>
40
 
41
+ <?php happyforms_customize_part_width_control(); ?>
42
 
43
+ <?php do_action( 'happyforms_part_customize_email_after_advanced_options' ); ?>
44
 
45
+ <p>
46
+ <label for="<%= instance.id %>_css_class"><?php _e( 'CSS classes', 'happyforms' ); ?></label>
47
+ <input type="text" id="<%= instance.id %>_css_class" class="widefat title" value="<%= instance.css_class %>" data-bind="css_class" />
48
+ </p>
 
49
 
50
  <div class="happyforms-part-logic-wrap">
51
  <div class="happyforms-logic-view">
core/templates/parts/customize-multi-line-text.php CHANGED
@@ -8,8 +8,12 @@
8
  <label for="<%= instance.id %>_placeholder"><?php _e( 'Placeholder', 'happyforms' ); ?></label>
9
  <input type="text" id="<%= instance.id %>_placeholder" class="widefat title" value="<%= instance.placeholder %>" data-bind="placeholder" />
10
  </p>
 
 
 
 
11
  <p>
12
- <label for="<%= instance.id %>_description"><?php _e( 'Description', 'happyforms' ); ?></label>
13
  <textarea id="<%= instance.id %>_description" data-bind="description"><%= instance.description %></textarea>
14
  </p>
15
 
@@ -17,59 +21,49 @@
17
 
18
  <p>
19
  <label>
20
- <input type="checkbox" class="checkbox" value="1" <% if ( instance.required ) { %>checked="checked"<% } %> data-bind="required" /> <?php _e( 'This is required', 'happyforms' ); ?>
21
  </label>
22
  </p>
23
 
24
  <?php do_action( 'happyforms_part_customize_multi_line_text_after_options' ); ?>
25
 
26
- <div class="happyforms-part-advanced-settings-wrap">
27
- <?php do_action( 'happyforms_part_customize_multi_line_text_before_advanced_options' ); ?>
28
 
 
 
 
 
 
 
 
29
  <p>
30
- <label>
31
- <input type="checkbox" class="checkbox" value="1" <% if ( instance.limit_input ) { %>checked="checked"<% } %> data-bind="limit_input" /> <?php _e( 'Limit words/characters', 'happyforms' ); ?>
32
- </label>
33
  </p>
34
-
35
- <div class="happyforms-nested-settings character-limit-settings" <% if ( ! instance.limit_input ) { %>style="display: none;"<% } %>>
36
- <p>
37
- <label for="<%= instance.id %>_character_limit"><?php _e( 'Limit', 'happyforms' ); ?></label>
38
- <input type="number" id="<%= instance.id %>_character_limit" class="widefat title" step="1" min="1" value="<%= instance.character_limit %>" data-bind="character_limit" />
39
- </p>
40
- <p>
41
- <label for="<%= instance.id %>_character_limit_mode"><?php _e( 'Count', 'happyforms' ); ?></label>
42
- <select id="<%= instance.id %>_character_limit_mode" data-bind="character_limit_mode">
43
- <option value="word_max"<%= (instance.character_limit_mode == 'word_max') ? ' selected' : '' %>><?php _e( 'Max words', 'happyforms' ); ?></option>
44
- <option value="word_min"<%= (instance.character_limit_mode == 'word_min') ? ' selected' : '' %>><?php _e( 'Min words', 'happyforms' ); ?></option>
45
- <option value="character_max"<%= (instance.character_limit_mode == 'character_max') ? ' selected' : '' %>><?php _e( 'Max characters', 'happyforms' ); ?></option>
46
- <option value="character_min"<%= (instance.character_limit_mode == 'character_min') ? ' selected' : '' %>><?php _e( 'Min characters', 'happyforms' ); ?></option>
47
- </select>
48
- </p>
49
- <p class="character-limit__characters-label" style="display: <%= ( 'character_min' === instance.character_limit_mode || 'character_max' === instance.character_limit_mode ) ? 'block' : 'none' %>">
50
- <label for="<%= instance.id %>_characters_label"><?php _e( '\'Characters\' label', 'happyforms' ); ?></label>
51
- <input type="text" id="<%= instance.id %>_characters_label" class="widefat title" value="<%= instance.characters_label %>" data-bind="characters_label" />
52
- </p>
53
- <p class="character-limit__words-label" style="display: <%= ( 'word_max' === instance.character_limit_mode || 'word_min' === instance.character_limit_mode ) ? 'block' : 'none' %>">
54
- <label for="<%= instance.id %>_words_label"><?php _e( '\'Words\' label', 'happyforms' ); ?></label>
55
- <input type="text" id="<%= instance.id %>_words_label" class="widefat title" value="<%= instance.words_label %>" data-bind="words_label" />
56
- </p>
57
- </div>
58
-
59
  <p>
60
- <label for="<%= instance.id %>_rows"><?php _e( 'Rows', 'happyforms' ); ?></label>
61
- <input type="number" id="<%= instance.id %>_rows" min="5" max="20" class="widefat title" value="<%= instance.rows %>" data-bind="rows" />
 
 
 
 
 
62
  </p>
 
63
 
64
- <?php happyforms_customize_part_width_control(); ?>
 
 
 
65
 
66
- <?php do_action( 'happyforms_part_customize_multi_line_text_after_advanced_options' ); ?>
67
 
68
- <p>
69
- <label for="<%= instance.id %>_css_class"><?php _e( 'CSS classes', 'happyforms' ); ?></label>
70
- <input type="text" id="<%= instance.id %>_css_class" class="widefat title" value="<%= instance.css_class %>" data-bind="css_class" />
71
- </p>
72
- </div>
 
73
 
74
  <div class="happyforms-part-logic-wrap">
75
  <div class="happyforms-logic-view">
8
  <label for="<%= instance.id %>_placeholder"><?php _e( 'Placeholder', 'happyforms' ); ?></label>
9
  <input type="text" id="<%= instance.id %>_placeholder" class="widefat title" value="<%= instance.placeholder %>" data-bind="placeholder" />
10
  </p>
11
+ <p class="happyforms-default-value-option">
12
+ <label for="<%= instance.id %>_default_value"><?php _e( 'Prefill', 'happyforms' ); ?></label>
13
+ <input type="text" id="<%= instance.id %>_default_value" class="widefat title default_value" value="<%= instance.default_value %>" data-bind="default_value" />
14
+ </p>
15
  <p>
16
+ <label for="<%= instance.id %>_description"><?php _e( 'Hint', 'happyforms' ); ?></label>
17
  <textarea id="<%= instance.id %>_description" data-bind="description"><%= instance.description %></textarea>
18
  </p>
19
 
21
 
22
  <p>
23
  <label>
24
+ <input type="checkbox" class="checkbox" value="1" <% if ( instance.required ) { %>checked="checked"<% } %> data-bind="required" /> <?php _e( 'Require an answer', 'happyforms' ); ?>
25
  </label>
26
  </p>
27
 
28
  <?php do_action( 'happyforms_part_customize_multi_line_text_after_options' ); ?>
29
 
30
+ <?php do_action( 'happyforms_part_customize_multi_line_text_before_advanced_options' ); ?>
 
31
 
32
+ <p>
33
+ <label>
34
+ <input type="checkbox" class="checkbox" value="1" <% if ( instance.limit_input ) { %>checked="checked"<% } %> data-bind="limit_input" /> <?php _e( 'Limit words/characters', 'happyforms' ); ?>
35
+ </label>
36
+ </p>
37
+
38
+ <div class="happyforms-nested-settings character-limit-settings" <% if ( ! instance.limit_input ) { %>style="display: none;"<% } %>>
39
  <p>
40
+ <label for="<%= instance.id %>_character_limit"><?php _e( 'Limit', 'happyforms' ); ?></label>
41
+ <input type="number" id="<%= instance.id %>_character_limit" class="widefat title" step="1" min="1" value="<%= instance.character_limit %>" data-bind="character_limit" />
 
42
  </p>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
43
  <p>
44
+ <label for="<%= instance.id %>_character_limit_mode"><?php _e( 'Count', 'happyforms' ); ?></label>
45
+ <select id="<%= instance.id %>_character_limit_mode" data-bind="character_limit_mode">
46
+ <option value="word_max"<%= (instance.character_limit_mode == 'word_max') ? ' selected' : '' %>><?php _e( 'Max words', 'happyforms' ); ?></option>
47
+ <option value="word_min"<%= (instance.character_limit_mode == 'word_min') ? ' selected' : '' %>><?php _e( 'Min words', 'happyforms' ); ?></option>
48
+ <option value="character_max"<%= (instance.character_limit_mode == 'character_max') ? ' selected' : '' %>><?php _e( 'Max characters', 'happyforms' ); ?></option>
49
+ <option value="character_min"<%= (instance.character_limit_mode == 'character_min') ? ' selected' : '' %>><?php _e( 'Min characters', 'happyforms' ); ?></option>
50
+ </select>
51
  </p>
52
+ </div>
53
 
54
+ <p>
55
+ <label for="<%= instance.id %>_rows"><?php _e( 'Rows', 'happyforms' ); ?></label>
56
+ <input type="number" id="<%= instance.id %>_rows" min="5" max="20" class="widefat title" value="<%= instance.rows %>" data-bind="rows" />
57
+ </p>
58
 
59
+ <?php happyforms_customize_part_width_control(); ?>
60
 
61
+ <?php do_action( 'happyforms_part_customize_multi_line_text_after_advanced_options' ); ?>
62
+
63
+ <p>
64
+ <label for="<%= instance.id %>_css_class"><?php _e( 'CSS classes', 'happyforms' ); ?></label>
65
+ <input type="text" id="<%= instance.id %>_css_class" class="widefat title" value="<%= instance.css_class %>" data-bind="css_class" />
66
+ </p>
67
 
68
  <div class="happyforms-part-logic-wrap">
69
  <div class="happyforms-logic-view">
core/templates/parts/customize-number.php CHANGED
@@ -8,8 +8,12 @@
8
  <label for="<%= instance.id %>_placeholder"><?php _e( 'Placeholder', 'happyforms' ); ?></label>
9
  <input type="text" id="<%= instance.id %>_placeholder" class="widefat title" value="<%= instance.placeholder %>" data-bind="placeholder" />
10
  </p>
 
 
 
 
11
  <p>
12
- <label for="<%= instance.id %>_description"><?php _e( 'Description', 'happyforms' ); ?></label>
13
  <textarea id="<%= instance.id %>_description" data-bind="description"><%= instance.description %></textarea>
14
  </p>
15
 
@@ -27,63 +31,46 @@
27
  </div>
28
  <p>
29
  <label>
30
- <input type="checkbox" class="checkbox" value="1" <% if ( instance.required ) { %>checked="checked"<% } %> data-bind="required" /> <?php _e( 'This is required', 'happyforms' ); ?>
31
  </label>
32
  </p>
33
 
34
  <?php do_action( 'happyforms_part_customize_number_after_options' ); ?>
35
 
36
- <div class="happyforms-part-advanced-settings-wrap">
37
- <?php do_action( 'happyforms_part_customize_number_before_advanced_options' ); ?>
38
 
 
 
 
 
 
 
39
  <p>
40
- <label>
41
- <input type="checkbox" name="masked" class="checkbox" value="1" <% if ( instance.masked ) { %>checked="checked"<% } %> data-bind="masked" /> <?php _e( 'Use number separators', 'happyforms' ); ?>
42
- </label>
43
- </p>
44
- <div class="happyforms-nested-settings mask-wrapper number-options number-options--numeric" data-trigger="masked" style="display: <%= (instance.masked == 1) ? 'flex' : 'none' %>">
45
- <p>
46
- <label for="<%= instance.id %>_mask_numeric_thousands_delimiter"><?php _e( 'Grouping', 'happyforms' ); ?></label>
47
- <input type="text" id="<%= instance.id %>_mask_numeric_thousands_delimiter" class="widefat title" value="<%= instance.mask_numeric_thousands_delimiter %>" data-bind="mask_numeric_thousands_delimiter" />
48
- </p>
49
- <p>
50
- <label for="<%= instance.id %>_mask_numeric_decimal_mark"><?php _e( 'Decimal', 'happyforms' ); ?></label>
51
- <input type="text" id="<%= instance.id %>_mask_numeric_decimal_mark" class="widefat title" value="<%= instance.mask_numeric_decimal_mark %>" data-bind="mask_numeric_decimal_mark" />
52
- </p>
53
- </div>
54
- <p>
55
- <label>
56
- <input type="checkbox" class="checkbox confirmation-checkbox" value="1" <% if ( instance.confirmation_field ) { %>checked="checked"<% } %> data-bind="confirmation_field" /> <?php _e( 'Require confirmation', 'happyforms' ); ?>
57
- </label>
58
  </p>
59
- <div class="happyforms-nested-settings" data-trigger="confirmation_field" style="display: <%= (instance.confirmation_field == 1) ? 'block' : 'none' %>">
60
- <p>
61
- <label for="<%= instance.id %>_confirmation_field_label"><?php _e( '\'Confirmation\' label', 'happyforms' ); ?></label>
62
- <input type="text" id="<%= instance.id %>_confirmation_field_label" class="widefat title" value="<%= instance.confirmation_field_label %>" data-bind="confirmation_field_label" />
63
- </p>
64
- <p>
65
- <label for="<%= instance.id %>_confirmation_field_placeholder"><?php _e( '\'Confirmation\' placeholder', 'happyforms' ); ?></label>
66
- <input type="text" id="<%= instance.id %>_confirmation_field_placeholder" class="widefat title" value="<%= instance.confirmation_field_placeholder %>" data-bind="confirmation_field_placeholder" />
67
- </p>
68
- </div>
69
  <p>
70
- <label for="<%= instance.id %>_mask_numeric_prefix"><?php _e( 'Prefix', 'happyforms' ); ?></label>
71
- <input type="text" id="<%= instance.id %>_mask_numeric_prefix" class="widefat title" value="<%= instance.mask_numeric_prefix %>" data-bind="mask_numeric_prefix" maxlength="50" />
72
  </p>
73
- <p>
74
- <label for="<%= instance.id %>_mask_numeric_suffix"><?php _e( 'Suffix', 'happyforms' ); ?></label>
 
 
 
 
 
75
  <input type="text" id="<%= instance.id %>_mask_numeric_suffix" class="widefat title" value="<%= instance.mask_numeric_suffix %>" data-bind="mask_numeric_suffix" maxlength="50" />
76
- </p>
77
 
78
- <?php happyforms_customize_part_width_control(); ?>
79
 
80
- <p>
81
- <label for="<%= instance.id %>_css_class"><?php _e( 'CSS classes', 'happyforms' ); ?></label>
82
- <input type="text" id="<%= instance.id %>_css_class" class="widefat title" value="<%= instance.css_class %>" data-bind="css_class" />
83
- </p>
84
 
85
- <?php do_action( 'happyforms_part_customize_number_after_advanced_options' ); ?>
86
- </div>
87
 
88
  <div class="happyforms-part-logic-wrap">
89
  <div class="happyforms-logic-view">
8
  <label for="<%= instance.id %>_placeholder"><?php _e( 'Placeholder', 'happyforms' ); ?></label>
9
  <input type="text" id="<%= instance.id %>_placeholder" class="widefat title" value="<%= instance.placeholder %>" data-bind="placeholder" />
10
  </p>
11
+ <p class="happyforms-default-value-option">
12
+ <label for="<%= instance.id %>_default_value"><?php _e( 'Prefill', 'happyforms' ); ?></label>
13
+ <input type="number" id="<%= instance.id %>_default_value" class="widefat title default_value" value="<%= instance.default_value %>" data-bind="default_value" />
14
+ </p>
15
  <p>
16
+ <label for="<%= instance.id %>_description"><?php _e( 'Hint', 'happyforms' ); ?></label>
17
  <textarea id="<%= instance.id %>_description" data-bind="description"><%= instance.description %></textarea>
18
  </p>
19
 
31
  </div>
32
  <p>
33
  <label>
34
+ <input type="checkbox" class="checkbox" value="1" <% if ( instance.required ) { %>checked="checked"<% } %> data-bind="required" /> <?php _e( 'Require an answer', 'happyforms' ); ?>
35
  </label>
36
  </p>
37
 
38
  <?php do_action( 'happyforms_part_customize_number_after_options' ); ?>
39
 
40
+ <?php do_action( 'happyforms_part_customize_number_before_advanced_options' ); ?>
 
41
 
42
+ <p>
43
+ <label>
44
+ <input type="checkbox" name="masked" class="checkbox" value="1" <% if ( instance.masked ) { %>checked="checked"<% } %> data-bind="masked" /> <?php _e( 'Use number separators', 'happyforms' ); ?>
45
+ </label>
46
+ </p>
47
+ <div class="happyforms-nested-settings mask-wrapper number-options number-options--numeric" data-trigger="masked" style="display: <%= (instance.masked == 1) ? 'flex' : 'none' %>">
48
  <p>
49
+ <label for="<%= instance.id %>_mask_numeric_thousands_delimiter"><?php _e( 'Grouping', 'happyforms' ); ?></label>
50
+ <input type="text" id="<%= instance.id %>_mask_numeric_thousands_delimiter" class="widefat title" value="<%= instance.mask_numeric_thousands_delimiter %>" data-bind="mask_numeric_thousands_delimiter" />
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
51
  </p>
 
 
 
 
 
 
 
 
 
 
52
  <p>
53
+ <label for="<%= instance.id %>_mask_numeric_decimal_mark"><?php _e( 'Decimal', 'happyforms' ); ?></label>
54
+ <input type="text" id="<%= instance.id %>_mask_numeric_decimal_mark" class="widefat title" value="<%= instance.mask_numeric_decimal_mark %>" data-bind="mask_numeric_decimal_mark" />
55
  </p>
56
+ </div>
57
+ <p>
58
+ <label for="<%= instance.id %>_mask_numeric_prefix"><?php _e( 'Prefix', 'happyforms' ); ?></label>
59
+ <input type="text" id="<%= instance.id %>_mask_numeric_prefix" class="widefat title" value="<%= instance.mask_numeric_prefix %>" data-bind="mask_numeric_prefix" maxlength="50" />
60
+ </p>
61
+ <p>
62
+ <label for="<%= instance.id %>_mask_numeric_suffix"><?php _e( 'Suffix', 'happyforms' ); ?></label>
63
  <input type="text" id="<%= instance.id %>_mask_numeric_suffix" class="widefat title" value="<%= instance.mask_numeric_suffix %>" data-bind="mask_numeric_suffix" maxlength="50" />
64
+ </p>
65
 
66
+ <?php happyforms_customize_part_width_control(); ?>
67
 
68
+ <p>
69
+ <label for="<%= instance.id %>_css_class"><?php _e( 'CSS classes', 'happyforms' ); ?></label>
70
+ <input type="text" id="<%= instance.id %>_css_class" class="widefat title" value="<%= instance.css_class %>" data-bind="css_class" />
71
+ </p>
72
 
73
+ <?php do_action( 'happyforms_part_customize_number_after_advanced_options' ); ?>
 
74
 
75
  <div class="happyforms-part-logic-wrap">
76
  <div class="happyforms-logic-view">
core/templates/parts/customize-radio.php CHANGED
@@ -5,7 +5,7 @@
5
  <input type="text" id="<%= instance.id %>_title" class="widefat title" value="<%= instance.label %>" data-bind="label" />
6
  </p>
7
  <p>
8
- <label for="<%= instance.id %>_description"><?php _e( 'Description', 'happyforms' ); ?></label>
9
  <textarea id="<%= instance.id %>_description" data-bind="description"><%= instance.description %></textarea>
10
  </p>
11
 
@@ -14,7 +14,7 @@
14
  <div class="options">
15
  <ul class="option-list"></ul>
16
  <h3><?php _e( 'Choices', 'happyforms' ); ?></h3>
17
- <p class="no-options description"><?php _e( 'No choices added yet. Add one by clicking <i>Add Choice</i> below.', 'happyforms' ); ?></p>
18
  </div>
19
  <div class="options-import">
20
  <h3><?php _e( 'Choices', 'happyforms' ); ?></h3>
@@ -34,42 +34,40 @@
34
  </p>
35
  <p>
36
  <label>
37
- <input type="checkbox" class="checkbox" value="1" <% if ( instance.required ) { %>checked="checked"<% } %> data-bind="required" /> <?php _e( 'This is required', 'happyforms' ); ?>
38
  </label>
39
  </p>
40
 
41
  <?php do_action( 'happyforms_part_customize_radio_after_options' ); ?>
42
 
43
- <div class="happyforms-part-advanced-settings-wrap">
44
- <?php do_action( 'happyforms_part_customize_radio_before_advanced_options' ); ?>
45
 
46
- <p>
47
- <label for="<%= instance.id %>_display_type"><?php _e( 'Choices display', 'happyforms' ); ?></label>
48
- <select id="<%= instance.id %>_display_type" name="display_type" data-bind="display_type" class="widefat">
49
- <option value="inline"<%= (instance.display_type == 'inline') ? ' selected' : '' %>><?php _e( 'Horizontal', 'happyforms' ); ?></option>
50
- <option value="block"<%= (instance.display_type == 'block') ? ' selected' : '' %>><?php _e( 'Vertical', 'happyforms' ); ?></option>
51
- </select>
52
- </p>
53
- <p class="part-options-width-setting">
54
- <label for="<%= instance.id %>_options_width"><?php _e( 'Choices width', 'happyforms' ); ?></label>
55
- <select id="<%= instance.id %>_options_width" name="options_width" data-bind="options_width" class="widefat">
56
- <option class="display-type--inline display-type--block" value="full"<%= (instance.options_width == 'full') ? ' selected' : '' %>><?php _e( 'Full', 'happyforms' ); ?></option>
57
- <option class="display-type--inline" value="half" style="display: <%= ( instance.display_type == 'inline' ) ? 'block' : 'none' %>" <%= (instance.options_width == 'half') ? ' selected' : '' %>><?php _e( 'Half', 'happyforms' ); ?></option>
58
- <option class="display-type--inline" value="third" style="display: <%= ( instance.display_type == 'inline' ) ? 'block' : 'none' %>" <%= (instance.options_width == 'third') ? ' selected' : '' %>><?php _e( 'Third', 'happyforms' ); ?></option>
59
- <option class="display-type--inline" value="quarter" style="display: <%= ( instance.display_type == 'inline' ) ? 'block' : 'none' %>" <%= (instance.options_width == 'quarter') ? ' selected' : '' %>><?php _e( 'Quarter', 'happyforms' ); ?></option>
60
- <option class="display-type--inline display-type--block" value="auto"<%= (instance.options_width == 'auto') ? ' selected' : '' %>><?php _e( 'Auto', 'happyforms' ); ?></option>
61
- </select>
62
- </p>
63
 
64
- <?php happyforms_customize_part_width_control(); ?>
65
 
66
- <p>
67
- <label for="<%= instance.id %>_css_class"><?php _e( 'CSS classes', 'happyforms' ); ?></label>
68
- <input type="text" id="<%= instance.id %>_css_class" class="widefat title" value="<%= instance.css_class %>" data-bind="css_class" />
69
- </p>
70
 
71
- <?php do_action( 'happyforms_part_customize_radio_after_advanced_options' ); ?>
72
- </div>
73
 
74
  <div class="happyforms-part-logic-wrap">
75
  <div class="happyforms-logic-view">
5
  <input type="text" id="<%= instance.id %>_title" class="widefat title" value="<%= instance.label %>" data-bind="label" />
6
  </p>
7
  <p>
8
+ <label for="<%= instance.id %>_description"><?php _e( 'Hint', 'happyforms' ); ?></label>
9
  <textarea id="<%= instance.id %>_description" data-bind="description"><%= instance.description %></textarea>
10
  </p>
11
 
14
  <div class="options">
15
  <ul class="option-list"></ul>
16
  <h3><?php _e( 'Choices', 'happyforms' ); ?></h3>
17
+ <p class="no-options description"><?php _e( 'No choices added yet.', 'happyforms' ); ?></p>
18
  </div>
19
  <div class="options-import">
20
  <h3><?php _e( 'Choices', 'happyforms' ); ?></h3>
34
  </p>
35
  <p>
36
  <label>
37
+ <input type="checkbox" class="checkbox" value="1" <% if ( instance.required ) { %>checked="checked"<% } %> data-bind="required" /> <?php _e( 'Require an answer', 'happyforms' ); ?>
38
  </label>
39
  </p>
40
 
41
  <?php do_action( 'happyforms_part_customize_radio_after_options' ); ?>
42
 
43
+ <?php do_action( 'happyforms_part_customize_radio_before_advanced_options' ); ?>
 
44
 
45
+ <p>
46
+ <label for="<%= instance.id %>_display_type"><?php _e( 'Choices display', 'happyforms' ); ?></label>
47
+ <select id="<%= instance.id %>_display_type" name="display_type" data-bind="display_type" class="widefat">
48
+ <option value="inline"<%= (instance.display_type == 'inline') ? ' selected' : '' %>><?php _e( 'Horizontal', 'happyforms' ); ?></option>
49
+ <option value="block"<%= (instance.display_type == 'block') ? ' selected' : '' %>><?php _e( 'Vertical', 'happyforms' ); ?></option>
50
+ </select>
51
+ </p>
52
+ <p class="part-options-width-setting">
53
+ <label for="<%= instance.id %>_options_width"><?php _e( 'Choices width', 'happyforms' ); ?></label>
54
+ <select id="<%= instance.id %>_options_width" name="options_width" data-bind="options_width" class="widefat">
55
+ <option class="display-type--inline display-type--block" value="full"<%= (instance.options_width == 'full') ? ' selected' : '' %>><?php _e( 'Full', 'happyforms' ); ?></option>
56
+ <option class="display-type--inline" value="half" style="display: <%= ( instance.display_type == 'inline' ) ? 'block' : 'none' %>" <%= (instance.options_width == 'half') ? ' selected' : '' %>><?php _e( 'Half', 'happyforms' ); ?></option>
57
+ <option class="display-type--inline" value="third" style="display: <%= ( instance.display_type == 'inline' ) ? 'block' : 'none' %>" <%= (instance.options_width == 'third') ? ' selected' : '' %>><?php _e( 'Third', 'happyforms' ); ?></option>
58
+ <option class="display-type--inline" value="quarter" style="display: <%= ( instance.display_type == 'inline' ) ? 'block' : 'none' %>" <%= (instance.options_width == 'quarter') ? ' selected' : '' %>><?php _e( 'Quarter', 'happyforms' ); ?></option>
59
+ <option class="display-type--inline display-type--block" value="auto"<%= (instance.options_width == 'auto') ? ' selected' : '' %>><?php _e( 'Auto', 'happyforms' ); ?></option>
60
+ </select>
61
+ </p>
62
 
63
+ <?php happyforms_customize_part_width_control(); ?>
64
 
65
+ <p>
66
+ <label for="<%= instance.id %>_css_class"><?php _e( 'CSS classes', 'happyforms' ); ?></label>
67
+ <input type="text" id="<%= instance.id %>_css_class" class="widefat title" value="<%= instance.css_class %>" data-bind="css_class" />
68
+ </p>
69
 
70
+ <?php do_action( 'happyforms_part_customize_radio_after_advanced_options' ); ?>
 
71
 
72
  <div class="happyforms-part-logic-wrap">
73
  <div class="happyforms-logic-view">
core/templates/parts/customize-select.php CHANGED
@@ -9,7 +9,7 @@
9
  <input type="text" id="<%= instance.id %>_placeholder" class="widefat title" value="<%= instance.placeholder %>" data-bind="placeholder" />
10
  </p>
11
  <p>
12
- <label for="<%= instance.id %>_description"><?php _e( 'Description', 'happyforms' ); ?></label>
13
  <textarea id="<%= instance.id %>_description" data-bind="description"><%= instance.description %></textarea>
14
  </p>
15
 
@@ -18,7 +18,7 @@
18
  <div class="options">
19
  <ul class="option-list"></ul>
20
  <h3><?php _e( 'Choices', 'happyforms' ); ?></h3>
21
- <p class="no-options description"><?php _e( 'No choices added yet. Add one by clicking <i>Add Choice</i> below.', 'happyforms' ); ?></p>
22
  </div>
23
  <div class="options-import">
24
  <h3><?php _e( 'Choices', 'happyforms' ); ?></h3>
@@ -38,36 +38,28 @@
38
  </p>
39
  <p>
40
  <label>
41
- <input type="checkbox" class="checkbox" value="1" <% if ( instance.required ) { %>checked="checked"<% } %> data-bind="required" /> <?php _e( 'This is required', 'happyforms' ); ?>
42
  </label>
43
  </p>
44
 
45
  <?php do_action( 'happyforms_part_customize_select_after_options' ); ?>
46
 
47
- <div class="happyforms-part-advanced-settings-wrap">
48
- <?php do_action( 'happyforms_part_customize_select_before_advanced_options' ); ?>
49
 
50
- <p>
51
- <label>
52
- <input type="checkbox" class="checkbox" value="1" <% if ( instance.allow_search ) { %>checked="checked"<% } %> data-bind="allow_search" /> <?php _e( 'Make searchable', 'happyforms' ); ?>
53
- </label>
54
- </p>
55
- <div class="happyforms-nested-settings" data-trigger="allow_search" style="display: <%= (instance.allow_search == 1) ? 'block' : 'none' %>">
56
- <p>
57
- <label for="<%= instance.id %>_no_results_label"><?php _e( '\'No results\' label', 'happyforms' ); ?></label>
58
- <input type="text" id="<%= instance.id %>_no_results_label" class="widefat title" value="<%= instance.no_results_label %>" data-bind="no_results_label" />
59
- </p>
60
- </div>
61
 
62
- <?php happyforms_customize_part_width_control(); ?>
63
 
64
- <?php do_action( 'happyforms_part_customize_select_after_advanced_options' ); ?>
65
 
66
- <p>
67
- <label for="<%= instance.id %>_css_class"><?php _e( 'CSS classes', 'happyforms' ); ?></label>
68
- <input type="text" id="<%= instance.id %>_css_class" class="widefat title" value="<%= instance.css_class %>" data-bind="css_class" />
69
- </p>
70
- </div>
71
 
72
  <div class="happyforms-part-logic-wrap">
73
  <div class="happyforms-logic-view">
9
  <input type="text" id="<%= instance.id %>_placeholder" class="widefat title" value="<%= instance.placeholder %>" data-bind="placeholder" />
10
  </p>
11
  <p>
12
+ <label for="<%= instance.id %>_description"><?php _e( 'Hint', 'happyforms' ); ?></label>
13
  <textarea id="<%= instance.id %>_description" data-bind="description"><%= instance.description %></textarea>
14
  </p>
15
 
18
  <div class="options">
19
  <ul class="option-list"></ul>
20
  <h3><?php _e( 'Choices', 'happyforms' ); ?></h3>
21
+ <p class="no-options description"><?php _e( 'No choices added yet.', 'happyforms' ); ?></p>
22
  </div>
23
  <div class="options-import">
24
  <h3><?php _e( 'Choices', 'happyforms' ); ?></h3>
38
  </p>
39
  <p>
40
  <label>
41
+ <input type="checkbox" class="checkbox" value="1" <% if ( instance.required ) { %>checked="checked"<% } %> data-bind="required" /> <?php _e( 'Require an answer', 'happyforms' ); ?>
42
  </label>
43
  </p>
44
 
45
  <?php do_action( 'happyforms_part_customize_select_after_options' ); ?>
46
 
47
+ <?php do_action( 'happyforms_part_customize_select_before_advanced_options' ); ?>
 
48
 
49
+ <p>
50
+ <label>
51
+ <input type="checkbox" class="checkbox" value="1" <% if ( instance.allow_search ) { %>checked="checked"<% } %> data-bind="allow_search" /> <?php _e( 'Make searchable', 'happyforms' ); ?>
52
+ </label>
53
+ </p>
 
 
 
 
 
 
54
 
55
+ <?php happyforms_customize_part_width_control(); ?>
56
 
57
+ <?php do_action( 'happyforms_part_customize_select_after_advanced_options' ); ?>
58
 
59
+ <p>
60
+ <label for="<%= instance.id %>_css_class"><?php _e( 'CSS classes', 'happyforms' ); ?></label>
61
+ <input type="text" id="<%= instance.id %>_css_class" class="widefat title" value="<%= instance.css_class %>" data-bind="css_class" />
62
+ </p>
 
63
 
64
  <div class="happyforms-part-logic-wrap">
65
  <div class="happyforms-logic-view">
core/templates/parts/customize-single-line-text.php CHANGED
@@ -8,8 +8,12 @@
8
  <label for="<%= instance.id %>_placeholder"><?php _e( 'Placeholder', 'happyforms' ); ?></label>
9
  <input type="text" id="<%= instance.id %>_placeholder" class="widefat title" value="<%= instance.placeholder %>" data-bind="placeholder" />
10
  </p>
 
 
 
 
11
  <p>
12
- <label for="<%= instance.id %>_description"><?php _e( 'Description', 'happyforms' ); ?></label>
13
  <textarea id="<%= instance.id %>_description" data-bind="description"><%= instance.description %></textarea>
14
  </p>
15
 
@@ -17,34 +21,30 @@
17
 
18
  <p>
19
  <label>
20
- <input type="checkbox" class="checkbox" value="1" <% if ( instance.required ) { %>checked="checked"<% } %> data-bind="required" /> <?php _e( 'This is required', 'happyforms' ); ?>
21
  </label>
22
  </p>
23
 
24
  <?php do_action( 'happyforms_part_customize_single_line_text_after_options' ); ?>
25
 
26
- <div class="happyforms-part-advanced-settings-wrap">
27
- <?php do_action( 'happyforms_part_customize_single_line_text_before_advanced_options' ); ?>
28
-
29
- <p>
30
- <label for="<%= instance.id %>_prefix"><?php _e( 'Prefix', 'happyforms' ); ?></label>
31
- <input type="text" id="<%= instance.id %>_prefix" class="widefat title" value="<%= instance.prefix %>" data-bind="prefix" maxlength="50" />
32
- </p>
33
-
34
- <p>
35
- <label for="<%= instance.id %>_suffix"><?php _e( 'Suffix', 'happyforms' ); ?></label>
36
- <input type="text" id="<%= instance.id %>_suffix" class="widefat title" value="<%= instance.suffix %>" data-bind="suffix" maxlength="50" />
37
- </p>
38
 
39
- <?php happyforms_customize_part_width_control(); ?>
40
 
41
- <?php do_action( 'happyforms_part_customize_single_line_text_after_advanced_options' ); ?>
42
 
43
- <p>
44
- <label for="<%= instance.id %>_css_class"><?php _e( 'CSS classes', 'happyforms' ); ?></label>
45
- <input type="text" id="<%= instance.id %>_css_class" class="widefat title" value="<%= instance.css_class %>" data-bind="css_class" />
46
- </p>
47
- </div>
48
 
49
  <div class="happyforms-part-logic-wrap">
50
  <div class="happyforms-logic-view">
8
  <label for="<%= instance.id %>_placeholder"><?php _e( 'Placeholder', 'happyforms' ); ?></label>
9
  <input type="text" id="<%= instance.id %>_placeholder" class="widefat title" value="<%= instance.placeholder %>" data-bind="placeholder" />
10
  </p>
11
+ <p class="happyforms-default-value-option">
12
+ <label for="<%= instance.id %>_default_value"><?php _e( 'Prefill', 'happyforms' ); ?></label>
13
+ <input type="text" id="<%= instance.id %>_default_value" class="widefat title default_value" value="<%= instance.default_value %>" data-bind="default_value" />
14
+ </p>
15
  <p>
16
+ <label for="<%= instance.id %>_description"><?php _e( 'Hint', 'happyforms' ); ?></label>
17
  <textarea id="<%= instance.id %>_description" data-bind="description"><%= instance.description %></textarea>
18
  </p>
19
 
21
 
22
  <p>
23
  <label>
24
+ <input type="checkbox" class="checkbox" value="1" <% if ( instance.required ) { %>checked="checked"<% } %> data-bind="required" /> <?php _e( 'Require an answer', 'happyforms' ); ?>
25
  </label>
26
  </p>
27
 
28
  <?php do_action( 'happyforms_part_customize_single_line_text_after_options' ); ?>
29
 
30
+ <?php do_action( 'happyforms_part_customize_single_line_text_before_advanced_options' ); ?>
31
+ <p>
32
+ <label for="<%= instance.id %>_prefix"><?php _e( 'Prefix', 'happyforms' ); ?></label>
33
+ <input type="text" id="<%= instance.id %>_prefix" class="widefat title" value="<%= instance.prefix %>" data-bind="prefix" maxlength="50" />
34
+ </p>
35
+ <p>
36
+ <label for="<%= instance.id %>_suffix"><?php _e( 'Suffix', 'happyforms' ); ?></label>
37
+ <input type="text" id="<%= instance.id %>_suffix" class="widefat title" value="<%= instance.suffix %>" data-bind="suffix" maxlength="50" />
38
+ </p>
 
 
 
39
 
40
+ <?php happyforms_customize_part_width_control(); ?>
41
 
42
+ <?php do_action( 'happyforms_part_customize_single_line_text_after_advanced_options' ); ?>
43
 
44
+ <p>
45
+ <label for="<%= instance.id %>_css_class"><?php _e( 'CSS classes', 'happyforms' ); ?></label>
46
+ <input type="text" id="<%= instance.id %>_css_class" class="widefat title" value="<%= instance.css_class %>" data-bind="css_class" />
47
+ </p>
 
48
 
49
  <div class="happyforms-part-logic-wrap">
50
  <div class="happyforms-logic-view">
core/templates/parts/frontend-email.php CHANGED
@@ -1,6 +1,5 @@
1
  <div class="<?php happyforms_the_part_class( $part, $form ); ?>" id="<?php happyforms_the_part_id( $part, $form ); ?>-part" <?php happyforms_the_part_data_attributes( $part, $form ); ?>>
2
  <?php
3
- $autocomplete_domains = ( 1 == $part['autocomplete_domains'] );
4
  $input_group = false;
5
  $has_prefix = ( '' !== $part['prefix'] );
6
  $has_suffix = ( '' !== $part['suffix'] );
@@ -10,10 +9,6 @@
10
  $input_group = true;
11
  }
12
 
13
- if ( $has_suffix || $has_prefix ) {
14
- $autocomplete_domains = false;
15
- }
16
-
17
  if ( 'as_placeholder' === $part['label_placement'] ) {
18
  $early_label = false;
19
  }
@@ -26,102 +21,39 @@
26
  <div class="happyforms-part__el">
27
  <?php do_action( 'happyforms_part_input_before', $part, $form ); ?>
28
 
29
- <?php if ( $autocomplete_domains ) : ?>
30
- <input type="hidden" name="<?php happyforms_the_part_name( $part, $form ); ?>" value="<?php happyforms_the_part_value( $part, $form, 0 ); ?>" data-serialize />
31
-
32
- <input type="email" name="<?php happyforms_the_part_id( $part, $form ); ?>_dummy_<?php echo time(); ?>" id="<?php happyforms_the_part_id( $part, $form ); ?>" value="<?php happyforms_the_part_value( $part, $form, 0 ); ?>" autocomplete="none" placeholder="<?php echo esc_attr( $part['placeholder'] ); ?>" <?php happyforms_the_part_attributes( $part, $form, 0 ); ?> />
33
-
34
- <?php if ( 'as_placeholder' === $part['label_placement'] ) : ?>
35
- <?php happyforms_the_part_label( $part, $form ); ?>
36
- <?php endif; ?>
37
- <?php else: ?>
38
- <?php if ( $input_group ) : ?>
39
- <div class="happyforms-input-group<?php echo ( $has_prefix ) ? ' with-prefix' : ''; ?><?php echo ( $has_suffix ) ? ' with-suffix': '' ?>">
40
- <?php if ( $has_prefix ) : ?>
41
- <div class="happyforms-input-group__prefix">
42
- <span><?php echo $part['prefix']; ?></span>
43
- </div>
44
- <?php endif; ?>
45
- <?php endif; ?>
46
-
47
- <div class="happyforms-input">
48
- <input type="email" name="<?php happyforms_the_part_name( $part, $form ); ?>" id="<?php happyforms_the_part_id( $part, $form ); ?>" value="<?php happyforms_the_part_value( $part, $form, 0 ); ?>" placeholder="<?php echo esc_attr( $part['placeholder'] ); ?>" <?php happyforms_the_part_attributes( $part, $form, 0 ); ?> />
49
- <?php if ( 'as_placeholder' === $part['label_placement'] ) : ?>
50
- <?php happyforms_the_part_label( $part, $form ); ?>
51
- <?php endif; ?>
52
- </div>
53
-
54
- <?php if ( $input_group ) : ?>
55
- <?php if ( $has_suffix ) : ?>
56
- <div class="happyforms-input-group__suffix">
57
- <span><?php echo $part['suffix']; ?></span>
58
  </div>
59
  <?php endif; ?>
60
-
61
- </div><!-- /.happyforms-input-group -->
62
- <?php endif; ?>
63
  <?php endif; ?>
64
 
65
- <?php
66
- if ( $autocomplete_domains ) {
67
- happyforms_select( array(), $part, $form );
68
- }
69
- ?>
70
-
71
- <?php if ( 'tooltip' !== $part['description_mode'] ) : ?>
72
- <?php happyforms_print_part_description( $part ); ?>
73
- <?php endif; ?>
74
-
75
- <?php happyforms_part_error_message( happyforms_get_part_name( $part, $form ) ); ?>
76
-
77
- <?php do_action( 'happyforms_part_input_after', $part, $form ); ?>
78
- </div>
79
- </div>
80
- <?php if ( 1 === intval( $part['confirmation_field'] ) ) : ?>
81
- <div class="happyforms-part-wrap happyforms-part-wrap--confirmation" id="<?php happyforms_the_part_id( $part, $form ); ?>-part_confirmation">
82
- <?php if ( $early_label ) : ?>
83
- <?php happyforms_the_part_confirmation_label( $part, $form ); ?>
84
- <?php endif; ?>
85
-
86
- <div class="happyforms-part__el">
87
- <?php if ( $autocomplete_domains ) : ?>
88
- <input type="hidden" name="<?php happyforms_the_part_name( $part, $form ); ?>_confirmation" value="<?php happyforms_the_part_value( $part, $form, 1 ); ?>" data-serialize />
89
-
90
- <input type="email" name="<?php happyforms_the_part_id( $part, $form ); ?>_dummy_<?php echo time(); ?>" id="<?php happyforms_the_part_id( $part, $form ); ?>_confirmation" placeholder="<?php echo esc_attr( $part['confirmation_field_placeholder'] ); ?>" value="<?php happyforms_the_part_value( $part, $form, 1 ); ?>" autocomplete="none" <?php happyforms_the_part_attributes( $part, $form, 1 ); ?> />
91
-
92
  <?php if ( 'as_placeholder' === $part['label_placement'] ) : ?>
93
- <?php happyforms_the_part_confirmation_label( $part, $form ); ?>
94
- <?php endif; ?>
95
- <?php else: ?>
96
- <?php if ( $has_suffix ) : ?>
97
- <div class="happyforms-input-group with-suffix">
98
  <?php endif; ?>
 
99
 
100
- <div class="happyforms-input">
101
- <input type="email" id="<?php happyforms_the_part_id( $part, $form ); ?>_confirmation" name="<?php happyforms_the_part_name( $part, $form ); ?>_confirmation" placeholder="<?php echo esc_attr( $part['confirmation_field_placeholder'] ); ?>" value="<?php happyforms_the_part_value( $part, $form, 1 ); ?>" class="happyforms-confirmation-input" data-confirmation-of="<?php echo esc_attr( $part['id'] ); ?>" <?php happyforms_the_part_attributes( $part, $form, 1 ); ?> />
102
-
103
- <?php if ( 'as_placeholder' === $part['label_placement'] ) : ?>
104
- <?php happyforms_the_part_confirmation_label( $part, $form ); ?>
105
- <?php endif; ?>
106
- </div>
107
-
108
  <?php if ( $has_suffix ) : ?>
109
  <div class="happyforms-input-group__suffix">
110
  <span><?php echo $part['suffix']; ?></span>
111
  </div>
112
-
113
- </div><!-- /.happyforms-input-group -->
114
  <?php endif; ?>
 
 
115
  <?php endif; ?>
116
 
117
- <?php
118
- if ( $autocomplete_domains ) {
119
- happyforms_select( array(), $part, $form );
120
- }
121
- ?>
122
 
123
- <?php happyforms_part_error_message( happyforms_get_part_name( $part, $form ), 1 ); ?>
 
 
124
  </div>
125
  </div>
126
- <?php endif; ?>
127
  </div>
1
  <div class="<?php happyforms_the_part_class( $part, $form ); ?>" id="<?php happyforms_the_part_id( $part, $form ); ?>-part" <?php happyforms_the_part_data_attributes( $part, $form ); ?>>
2
  <?php
 
3
  $input_group = false;
4
  $has_prefix = ( '' !== $part['prefix'] );
5
  $has_suffix = ( '' !== $part['suffix'] );
9
  $input_group = true;
10
  }
11
 
 
 
 
 
12
  if ( 'as_placeholder' === $part['label_placement'] ) {
13
  $early_label = false;
14
  }
21
  <div class="happyforms-part__el">
22
  <?php do_action( 'happyforms_part_input_before', $part, $form ); ?>
23
 
24
+ <?php if ( $input_group ) : ?>
25
+ <div class="happyforms-input-group<?php echo ( $has_prefix ) ? ' with-prefix' : ''; ?><?php echo ( $has_suffix ) ? ' with-suffix': '' ?>">
26
+ <?php if ( $has_prefix ) : ?>
27
+ <div class="happyforms-input-group__prefix">
28
+ <span><?php echo $part['prefix']; ?></span>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
29
  </div>
30
  <?php endif; ?>
 
 
 
31
  <?php endif; ?>
32
 
33
+ <div class="happyforms-input">
34
+ <input type="email" name="<?php happyforms_the_part_name( $part, $form ); ?>" id="<?php happyforms_the_part_id( $part, $form ); ?>" value="<?php happyforms_the_part_value( $part, $form ); ?>" placeholder="<?php echo esc_attr( $part['placeholder'] ); ?>" <?php happyforms_the_part_attributes( $part, $form, 0 ); ?> />
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
35
  <?php if ( 'as_placeholder' === $part['label_placement'] ) : ?>
36
+ <?php happyforms_the_part_label( $part, $form ); ?>
 
 
 
 
37
  <?php endif; ?>
38
+ </div>
39
 
40
+ <?php if ( $input_group ) : ?>
 
 
 
 
 
 
 
41
  <?php if ( $has_suffix ) : ?>
42
  <div class="happyforms-input-group__suffix">
43
  <span><?php echo $part['suffix']; ?></span>
44
  </div>
 
 
45
  <?php endif; ?>
46
+
47
+ </div><!-- /.happyforms-input-group -->
48
  <?php endif; ?>
49
 
50
+ <?php if ( 'tooltip' !== $part['description_mode'] ) : ?>
51
+ <?php happyforms_print_part_description( $part ); ?>
52
+ <?php endif; ?>
 
 
53
 
54
+ <?php happyforms_part_error_message( happyforms_get_part_name( $part, $form ) ); ?>
55
+
56
+ <?php do_action( 'happyforms_part_input_after', $part, $form ); ?>
57
  </div>
58
  </div>
 
59
  </div>
core/templates/parts/frontend-number.php CHANGED
@@ -41,7 +41,7 @@
41
  <?php if ( ! $early_label && 'as_placeholder' !== $part['label_placement'] ) : ?>
42
  <?php happyforms_the_part_label( $part, $form ); ?>
43
  <?php endif; ?>
44
- <input id="<?php happyforms_the_part_id( $part, $form ); ?>" type="<?php echo $input_type; ?>" value="<?php happyforms_the_part_value( $part, $form, 0 ); ?>" name="<?php happyforms_the_part_name( $part, $form ); ?>" placeholder="<?php echo esc_attr( $part['placeholder'] ); ?>" min="<?php echo esc_attr( $part['min_value'] ) ?>" max="<?php echo esc_attr( $part['max_value'] ); ?>" <?php happyforms_the_part_attributes( $part, $form, 0 ); ?> />
45
  <?php if ( 'as_placeholder' === $part['label_placement'] ) : ?>
46
  <?php happyforms_the_part_label( $part, $form ); ?>
47
  <?php endif; ?>
@@ -66,44 +66,4 @@
66
  <?php happyforms_part_error_message( happyforms_get_part_name( $part, $form ) ); ?>
67
  </div>
68
  </div>
69
- <?php if ( 1 === intval( $part['confirmation_field'] ) ) : ?>
70
- <div class="happyforms-part-wrap happyforms-part-wrap--confirmation" id="<?php happyforms_the_part_id( $part, $form ); ?>-part_confirmation">
71
- <?php if ( $early_label ) : ?>
72
- <?php happyforms_the_part_confirmation_label( $part, $form ); ?>
73
- <?php endif; ?>
74
-
75
- <div class="happyforms-part__el">
76
- <?php if ( $input_group ) : ?>
77
- <div class="happyforms-input-group<?php echo ( $has_prefix ) ? ' with-prefix' : ''; ?><?php echo ( $has_suffix ) ? ' with-suffix': '' ?>">
78
- <?php if ( $has_prefix ) : ?>
79
- <div class="happyforms-input-group__prefix">
80
- <span><?php echo $part['mask_numeric_prefix']; ?></span>
81
- </div>
82
- <?php endif; ?>
83
- <?php endif; ?>
84
-
85
- <div class="happyforms-input">
86
- <?php if ( ! $early_label && 'as_placeholder' !== $part['label_placement'] ) : ?>
87
- <?php happyforms_the_part_confirmation_label( $part, $form ); ?>
88
- <?php endif; ?>
89
- <input id="<?php happyforms_the_part_id( $part, $form ); ?>_confirmation" class="happyforms-confirmation-input" type="<?php echo $input_type; ?>" name="<?php happyforms_the_part_name( $part, $form ); ?>_confirmation" value="<?php happyforms_the_part_value( $part, $form, 1 ); ?>" placeholder="<?php echo esc_attr( $part['confirmation_field_placeholder'] ); ?>" min="<?php echo esc_attr( $part['min_value'] ); ?>" max="<?php echo esc_attr( $part['max_value'] ); ?>" value="<?php echo esc_attr( $part['min_value'] ); ?>" <?php happyforms_the_part_attributes( $part, $form, 1 ); ?> />
90
- <?php if ( 'as_placeholder' === $part['label_placement'] ) : ?>
91
- <?php happyforms_the_part_confirmation_label( $part, $form ); ?>
92
- <?php endif; ?>
93
- </div>
94
-
95
- <?php if ( $input_group ) : ?>
96
- <?php if ( $has_suffix ) : ?>
97
- <div class="happyforms-input-group__suffix">
98
- <span><?php echo $part['mask_numeric_suffix']; ?></span>
99
- </div>
100
- <?php endif; ?>
101
-
102
- </div><!-- /.happyforms-input-group -->
103
- <?php endif; ?>
104
-
105
- <?php happyforms_part_error_message( happyforms_get_part_name( $part, $form ), 1 ); ?>
106
- </div>
107
- </div>
108
- <?php endif; ?>
109
  </div>
41
  <?php if ( ! $early_label && 'as_placeholder' !== $part['label_placement'] ) : ?>
42
  <?php happyforms_the_part_label( $part, $form ); ?>
43
  <?php endif; ?>
44
+ <input id="<?php happyforms_the_part_id( $part, $form ); ?>" type="<?php echo $input_type; ?>" value="<?php happyforms_the_part_value( $part, $form ); ?>" name="<?php happyforms_the_part_name( $part, $form ); ?>" placeholder="<?php echo esc_attr( $part['placeholder'] ); ?>" min="<?php echo esc_attr( $part['min_value'] ) ?>" max="<?php echo esc_attr( $part['max_value'] ); ?>" <?php happyforms_the_part_attributes( $part, $form, 0 ); ?> />
45
  <?php if ( 'as_placeholder' === $part['label_placement'] ) : ?>
46
  <?php happyforms_the_part_label( $part, $form ); ?>
47
  <?php endif; ?>
66
  <?php happyforms_part_error_message( happyforms_get_part_name( $part, $form ) ); ?>
67
  </div>
68
  </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
69
  </div>
happyforms.php CHANGED
@@ -1,11 +1,11 @@
1
  <?php
2
 
3
  /**
4
- * Plugin Name: HappyForms
5
  * Plugin URI: https://happyforms.me
6
- * Description: Your friendly drag and drop contact form builder for creating contact forms, lead generation forms, feedback forms, quote forms, survey forms and more!
7
- * Author: HappyForms
8
- * Version: 1.9.30
9
  * Author URI: https://happyforms.me
10
  * Upgrade URI: https://happyforms.me/upgrade
11
  */
@@ -13,7 +13,7 @@
13
  /**
14
  * The current version of the plugin.
15
  */
16
- define( 'HAPPYFORMS_VERSION', '1.9.30' );
17
 
18
  if ( ! function_exists( 'happyforms_plugin_file' ) ):
19
  /**
1
  <?php
2
 
3
  /**
4
+ * Plugin Name: Happyforms (free)
5
  * Plugin URI: https://happyforms.me
6
+ * Description: We're changin' WordPress forms.
7
+ * Author: Happyforms
8
+ * Version: 1.10.0
9
  * Author URI: https://happyforms.me
10
  * Upgrade URI: https://happyforms.me/upgrade
11
  */
13
  /**
14
  * The current version of the plugin.
15
  */
16
+ define( 'HAPPYFORMS_VERSION', '1.10.0' );
17
 
18
  if ( ! function_exists( 'happyforms_plugin_file' ) ):
19
  /**
inc/assets/js/customize.js CHANGED
@@ -77,35 +77,21 @@
77
  },
78
 
79
  changeDocumentTitle: function() {
 
 
 
 
 
 
80
  var formTitle = this.get( 'post_title' );
81
- _wpCustomizeSettings.documentTitleTmpl = 'HappyForms: %s';
82
- var titleTemplate = 'HappyForms';
83
 
84
  if ( formTitle ) {
85
  titleTemplate = titleTemplate + ': ' + formTitle;
86
  }
87
 
88
  _wpCustomizeSettings.documentTitleTmpl = titleTemplate;
89
- },
90
-
91
- fetchCustomCSS: function( success ) {
92
- var data = {
93
- action: 'happyforms-get-custom-css',
94
- 'happyforms-nonce': api.settings.nonce.happyforms,
95
- happyforms: 1,
96
- wp_customize: 'on',
97
- form_id: happyForms.form.id,
98
- form: JSON.stringify( this.toJSON() ),
99
- };
100
-
101
- var request = $.ajax( ajaxurl, {
102
- type: 'post',
103
- dataType: 'text',
104
- data: data,
105
- } );
106
-
107
- request.done( success );
108
- },
109
  } );
110
 
111
  classes.models.Part = Backbone.Model.extend( {
@@ -190,9 +176,10 @@
190
  'setup': 'setup',
191
  'email': 'email',
192
  'style': 'style',
 
193
  },
194
 
195
- steps: [ 'build', 'setup', 'email', 'style' ],
196
  previousRoute: '',
197
  currentRoute: 'build',
198
  savedStates: {
@@ -206,6 +193,9 @@
206
  'email': {
207
  'scrollTop': 0,
208
  },
 
 
 
209
  'style': {
210
  'scrollTop': 0,
211
  'activeSection': ''
@@ -283,6 +273,9 @@
283
  case 'style':
284
  childView = new classes.views.FormStyle( { model: this.form } );
285
  break;
 
 
 
286
  }
287
 
288
  this.previousRoute = this.currentRoute;
@@ -660,15 +653,11 @@
660
  }.bind( this ),
661
  } );
662
 
663
- $( '.happyforms-widget-expanded input[data-bind=label]', this.$el ).focus();
664
-
665
  this.drawer = new classes.views.PartsDrawer();
666
  $( '.wp-full-overlay' ).append( this.drawer.render().$el );
667
 
668
  if ( -1 === happyForms.savedStates.build.activePartIndex ) {
669
  $( '#happyforms-form-name', this.$el ).focus().select();
670
- } else {
671
- $( '.happyforms-widget:eq(' + happyForms.savedStates.build.activePartIndex + ')' ).addClass( 'happyforms-widget-expanded' );
672
  }
673
  },
674
 
@@ -839,16 +828,16 @@
839
  }, this ) );
840
  },
841
 
842
- onPartViewsSorted: function( partViews ) {
843
- var $stage = $( '.happyforms-form-widgets', this.$el );
844
 
845
- partViews.forEach( function( partViewModel ) {
846
- var partView = partViewModel.get( 'view' );
847
- var $partViewEl = partView.$el;
848
- $partViewEl.detach();
849
- $stage.append( $partViewEl );
850
- partView.trigger( 'refresh' );
851
- }, this );
852
  },
853
 
854
  onPartViewsChanged: function( partViews ) {
@@ -1021,6 +1010,7 @@
1021
  this.listenTo( this.model, 'change:required', this.onRequiredCheckboxChange );
1022
  this.listenTo( this.model, 'change:placeholder', this.onPlaceholderChange );
1023
  this.listenTo( this.model, 'change:description', this.onDescriptionChange );
 
1024
  //this.listenTo( this.model, 'change:description_mode', this.onDescriptionModeChange );
1025
  this.listenTo( this.model, 'change:label_placement', this.onLabelPlacementChange );
1026
  this.listenTo( this.model, 'change:css_class', this.onCSSClassChange );
@@ -1246,6 +1236,22 @@
1246
  happyForms.previewSend( 'happyforms-part-dom-update', data );
1247
  },
1248
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1249
  /**
1250
  * Send changed description value to previewer.
1251
  *
@@ -1524,7 +1530,6 @@
1524
  'keyup [data-attribute]': 'onInputChange',
1525
  'change [data-attribute]': 'onInputChange',
1526
  'change input[type=number]': 'onNumberChange',
1527
- 'keyup input[data-attribute="optional_part_label"]': 'onOptionalPartLabelChange',
1528
  } ),
1529
 
1530
  pointers: {},
@@ -1611,14 +1616,6 @@
1611
  happyForms.previewSend( 'happyforms-submit-button-text-update', value );
1612
  },
1613
 
1614
- onOptionalPartLabelChange: function( e ) {
1615
- var data = {
1616
- callback: 'onOptionalPartLabelChangeCallback',
1617
- };
1618
-
1619
- happyForms.previewSend( 'happyforms-form-dom-update', data );
1620
- },
1621
-
1622
  setOptionalLabelVisibility: function() {
1623
  var optionalParts = this.model.get( 'parts' ).find( function( model, index, parts ) {
1624
  return ( '' !== parts[index].get( 'required' ) && 1 !== parts[index].get( 'required' ) );
@@ -1693,6 +1690,250 @@
1693
  },
1694
  } );
1695
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1696
  classes.views.FormStyle = classes.views.Base.extend( {
1697
  template: '#happyforms-form-style-template',
1698
 
@@ -1704,7 +1945,6 @@
1704
  'change [data-target="form_class"] input[type="checkbox"]': 'onFormClassCheckboxChange',
1705
  'change [data-target="css_var"] input[type=radio]': 'onRadioChange',
1706
  'keyup [data-target="attribute"] input[type=text]': 'onAttributeChange',
1707
- 'change [data-attribute="form_title"]': 'onFormTitleDisplayChange',
1708
  'change [data-attribute="part_description_mode"]': 'onChangeGlobalControls',
1709
  'change [data-attribute="part_title_label_placement"]': 'onChangeGlobalControls',
1710
  'navigate-to-group': 'navigateToGroup',
@@ -1715,10 +1955,6 @@
1715
  initialize: function() {
1716
  classes.views.Base.prototype.initialize.apply( this, arguments );
1717
 
1718
- this.listenTo( this.model, 'change:additional_css', _.debounce( function( model, value ) {
1719
- this.onAdditionalCSSChange( model, value );
1720
- }, 500 ) );
1721
-
1722
  this.styles = new Backbone.Collection();
1723
  },
1724
 
@@ -1728,12 +1964,6 @@
1728
  return this;
1729
  },
1730
 
1731
- onAdditionalCSSChange: function( model, value ) {
1732
- happyForms.form.fetchCustomCSS( function( response ) {
1733
- api.previewer.send( 'happyforms-custom-css-updated', response );
1734
- } );
1735
- },
1736
-
1737
  applyConditionClasses: function() {
1738
  var self = this;
1739
 
@@ -1808,7 +2038,7 @@
1808
  happyForms.form.set( attribute, value );
1809
 
1810
  var partAttribute = '';
1811
-
1812
  switch ( attribute ) {
1813
  case 'part_description_mode':
1814
  partAttribute = 'description_mode';
@@ -1879,24 +2109,6 @@
1879
  happyForms.form.set( attribute, value );
1880
  },
1881
 
1882
- onFormTitleDisplayChange: function( e ) {
1883
- e.preventDefault();
1884
-
1885
- var $target = $( e.target );
1886
- var attribute = $target.data( 'attribute' );
1887
- var variable = $target.parents( '.happyforms-buttonset-control' ).data( 'variable' );
1888
- var value = $target.val();
1889
-
1890
- happyForms.form.set( attribute, value );
1891
-
1892
- var data = {
1893
- attribute: attribute,
1894
- callback: 'onFormClassToggleCallback'
1895
- };
1896
-
1897
- happyForms.previewSend( 'happyforms-form-class-update', data );
1898
- },
1899
-
1900
  onGroupClick: function( e ) {
1901
  e.preventDefault();
1902
 
@@ -2251,6 +2463,32 @@
2251
  $( '.happyforms-optional', $form ).text( optionalLabel );
2252
  },
2253
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2254
  /**
2255
  *
2256
  * Previewer callbacks for live part DOM updates
@@ -2317,6 +2555,13 @@
2317
  $description.text(description);
2318
  },
2319
 
 
 
 
 
 
 
 
2320
  onDescriptionModeChangeCallback: function( id, html ) {
2321
  var part = happyForms.form.get( 'parts' ).get( id );
2322
  var $part = this.$( html );
77
  },
78
 
79
  changeDocumentTitle: function() {
80
+ var title = $( 'title' ).text();
81
+ var newTitle = '';
82
+
83
+ newTitle = title.replace( title.substring( 0, title.indexOf( ':' ) ), 'Form' );
84
+ $( 'title' ).text( newTitle );
85
+
86
  var formTitle = this.get( 'post_title' );
87
+ var titleTemplate = 'Form';
 
88
 
89
  if ( formTitle ) {
90
  titleTemplate = titleTemplate + ': ' + formTitle;
91
  }
92
 
93
  _wpCustomizeSettings.documentTitleTmpl = titleTemplate;
94
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
95
  } );
96
 
97
  classes.models.Part = Backbone.Model.extend( {
176
  'setup': 'setup',
177
  'email': 'email',
178
  'style': 'style',
179
+ 'messages': 'messages',
180
  },
181
 
182
+ steps: [ 'build', 'setup', 'email', 'style', 'messages' ],
183
  previousRoute: '',
184
  currentRoute: 'build',
185
  savedStates: {
193
  'email': {
194
  'scrollTop': 0,
195
  },
196
+ 'messages': {
197
+ 'scrollTop': 0,
198
+ },
199
  'style': {
200
  'scrollTop': 0,
201
  'activeSection': ''
273
  case 'style':
274
  childView = new classes.views.FormStyle( { model: this.form } );
275
  break;
276
+ case 'messages':
277
+ childView = new classes.views.FormMessages( { model: this.form } );
278
+ break;
279
  }
280
 
281
  this.previousRoute = this.currentRoute;
653
  }.bind( this ),
654
  } );
655
 
 
 
656
  this.drawer = new classes.views.PartsDrawer();
657
  $( '.wp-full-overlay' ).append( this.drawer.render().$el );
658
 
659
  if ( -1 === happyForms.savedStates.build.activePartIndex ) {
660
  $( '#happyforms-form-name', this.$el ).focus().select();
 
 
661
  }
662
  },
663
 
828
  }, this ) );
829
  },
830
 
831
+ onPartViewsSorted: function( partViews ) {
832
+ var $stage = $( '.happyforms-form-widgets', this.$el );
833
 
834
+ partViews.forEach( function( partViewModel ) {
835
+ var partView = partViewModel.get( 'view' );
836
+ var $partViewEl = partView.$el;
837
+ $partViewEl.detach();
838
+ $stage.append( $partViewEl );
839
+ partView.trigger( 'refresh' );
840
+ }, this );
841
  },
842
 
843
  onPartViewsChanged: function( partViews ) {
1010
  this.listenTo( this.model, 'change:required', this.onRequiredCheckboxChange );
1011
  this.listenTo( this.model, 'change:placeholder', this.onPlaceholderChange );
1012
  this.listenTo( this.model, 'change:description', this.onDescriptionChange );
1013
+ this.listenTo( this.model, 'change:default_value', this.onDefaultValueChange );
1014
  //this.listenTo( this.model, 'change:description_mode', this.onDescriptionModeChange );
1015
  this.listenTo( this.model, 'change:label_placement', this.onLabelPlacementChange );
1016
  this.listenTo( this.model, 'change:css_class', this.onCSSClassChange );
1236
  happyForms.previewSend( 'happyforms-part-dom-update', data );
1237
  },
1238
 
1239
+ /**
1240
+ * Send changed default value to previewer.
1241
+ *
1242
+ * @since 1.0.0.
1243
+ *
1244
+ * @return void
1245
+ */
1246
+ onDefaultValueChange: function() {
1247
+ var data = {
1248
+ id: this.model.id,
1249
+ callback: 'onDefaultValueChangeCallback',
1250
+ };
1251
+
1252
+ happyForms.previewSend( 'happyforms-part-dom-update', data );
1253
+ },
1254
+
1255
  /**
1256
  * Send changed description value to previewer.
1257
  *
1530
  'keyup [data-attribute]': 'onInputChange',
1531
  'change [data-attribute]': 'onInputChange',
1532
  'change input[type=number]': 'onNumberChange',
 
1533
  } ),
1534
 
1535
  pointers: {},
1616
  happyForms.previewSend( 'happyforms-submit-button-text-update', value );
1617
  },
1618
 
 
 
 
 
 
 
 
 
1619
  setOptionalLabelVisibility: function() {
1620
  var optionalParts = this.model.get( 'parts' ).find( function( model, index, parts ) {
1621
  return ( '' !== parts[index].get( 'required' ) && 1 !== parts[index].get( 'required' ) );
1690
  },
1691
  } );
1692
 
1693
+ classes.views.FormMessages = classes.views.FormSetup.extend( {
1694
+ template: '#happyforms-form-messages-template',
1695
+
1696
+ events: _.extend( {}, classes.views.Base.prototype.events, {
1697
+ 'keyup [data-attribute]': 'onInputChange',
1698
+ 'change [data-attribute]': 'onInputChange',
1699
+ 'keyup [data-attribute="optional_part_label"]': 'onOptionalPartLabelChange',
1700
+ 'change [data-attribute="optional_part_label"]': 'onOptionalPartLabelChange',
1701
+ 'keyup [data-attribute="submit_button_label"]': 'onSubmitButtonLabelChange',
1702
+ 'change [data-attribute="submit_button_label"]': 'onSubmitButtonLabelChange',
1703
+ 'focus .has-restore-default': 'showRestoreBtn',
1704
+ 'click .restore-default-btn': 'resetValidationMessage',
1705
+ 'keyup [data-attribute="words_label_min"]': 'onCharLimitMinWordsChange',
1706
+ 'change [data-attribute="words_label_min"]': 'onCharLimitMinWordsChange',
1707
+ 'keyup [data-attribute="words_label_max"]': 'onCharLimitMaxWordsChange',
1708
+ 'change [data-attribute="words_label_max"]': 'onCharLimitMaxWordsChange',
1709
+ 'keyup [data-attribute="characters_label_min"]': 'onCharLimitMinCharsChange',
1710
+ 'change [data-attribute="characters_label_min"]': 'onCharLimitMinCharsChange',
1711
+ 'keyup [data-attribute="characters_label_max"]': 'onCharLimitMaxCharsChange',
1712
+ 'change [data-attribute="characters_label_max"]': 'onCharLimitMaxCharsChange',
1713
+ 'keyup [data-attribute="no_results_label"]': 'onNoResultsLabelChange',
1714
+ 'change [data-attribute="no_results_label"]': 'onNoResultsLabelChange',
1715
+ } ),
1716
+
1717
+ editors: {
1718
+ },
1719
+
1720
+ initialize: function() {
1721
+ classes.views.Base.prototype.initialize.apply( this, arguments );
1722
+ },
1723
+
1724
+ render: function() {
1725
+ this.setElement( this.template( this.model.toJSON() ) );
1726
+ classes.views.FormSetup.prototype.render.apply( this, arguments );
1727
+ this.applyMsgConditionClasses();
1728
+
1729
+ return this;
1730
+ },
1731
+
1732
+ applyMsgConditionClasses: function() {
1733
+ var self = this;
1734
+
1735
+ var partTypes = happyForms.form.get( 'parts' ).map( function( model ) {
1736
+ return model.get( 'type' );
1737
+ } );
1738
+
1739
+ partTypes = _.union( partTypes );
1740
+
1741
+ for ( var i = 0; i < partTypes.length; i++ ) {
1742
+ var className = 'has-' + partTypes[i];
1743
+
1744
+ if ( self.$el.hasClass( className ) ) {
1745
+ className = className + '-part';
1746
+ }
1747
+
1748
+ self.$el.addClass( className );
1749
+ }
1750
+
1751
+ var hasRequiredField = this.model.get( 'parts' ).find( function( part ) {
1752
+ var types = [ 'single_line_text', 'multi_line_text', 'email', 'number' ];
1753
+ var required = part.get( 'required' );
1754
+
1755
+ if ( required == 1 ) {
1756
+ var type = part.get( 'type' );
1757
+ return ( $.inArray( type, types ) > -1 );
1758
+ }
1759
+
1760
+ return false;
1761
+ } );
1762
+
1763
+ if ( hasRequiredField ) {
1764
+ self.$el.addClass( 'has-required-fields' );
1765
+ }
1766
+
1767
+
1768
+ var hasRequiredSelectionField = this.model.get( 'parts' ).find( function( part ) {
1769
+ var types = [ 'radio', 'checkbox', 'select' ];
1770
+ var required = part.get( 'required' );
1771
+
1772
+ if ( required == 1 ) {
1773
+ var type = part.get( 'type' );
1774
+ return ( $.inArray( type, types ) > -1 );
1775
+ }
1776
+
1777
+ return false;
1778
+ } );
1779
+
1780
+ if( hasRequiredSelectionField ) {
1781
+ self.$el.addClass( 'has-required-selection-fields' );
1782
+ }
1783
+
1784
+ if ( happyForms.form.get( 'parts' ).length > 0 ) {
1785
+ self.$el.addClass( 'has-field' );
1786
+ }
1787
+
1788
+ var optionalPart = this.model.get( 'parts' ).find( function( part ) {
1789
+ var part_required = part.get( 'required' );
1790
+
1791
+ return ( part_required == 0 || part_required == '' );
1792
+ } );
1793
+
1794
+ if ( optionalPart ) {
1795
+ self.$el.addClass( 'has-optional-field' );
1796
+ }
1797
+
1798
+ var hasConfirmField = happyForms.form.get( 'parts' ).findWhere( {
1799
+ confirmation_field: 1
1800
+ } );
1801
+
1802
+ if ( hasConfirmField ) {
1803
+ self.$el.addClass( 'has-confirm-field' );
1804
+ }
1805
+
1806
+ var confirmSubmission = happyForms.form.get( 'confirm_submission' );
1807
+
1808
+ if ( confirmSubmission == 'success_message_hide_form' || confirmSubmission == 'success_message' ) {
1809
+ self.$el.addClass( 'is-show-success-msg' );
1810
+ }
1811
+
1812
+ var hasMinWords = happyForms.form.get( 'parts' ).findWhere( {
1813
+ limit_input: 1,
1814
+ character_limit_mode: 'word_min'
1815
+ } );
1816
+
1817
+ if ( hasMinWords ) {
1818
+ self.$el.addClass( 'has-min-words-label' );
1819
+ }
1820
+
1821
+ var hasMaxWords = happyForms.form.get( 'parts' ).findWhere( {
1822
+ limit_input: 1,
1823
+ character_limit_mode: 'word_max'
1824
+ } );
1825
+
1826
+ if ( hasMaxWords ) {
1827
+ self.$el.addClass( 'has-max-words-label' );
1828
+ }
1829
+
1830
+ var hasMinChars = happyForms.form.get( 'parts' ).findWhere( {
1831
+ limit_input: 1,
1832
+ character_limit_mode: 'character_min'
1833
+ } );
1834
+
1835
+ if ( hasMinChars ) {
1836
+ self.$el.addClass( 'has-min-chars-label' );
1837
+ }
1838
+
1839
+ var hasMaxChars = happyForms.form.get( 'parts' ).findWhere( {
1840
+ limit_input: 1,
1841
+ character_limit_mode: 'character_max'
1842
+ } );
1843
+
1844
+ if ( hasMaxChars ) {
1845
+ self.$el.addClass( 'has-max-chars-label' );
1846
+ }
1847
+
1848
+ var showMsgShortLabel = happyForms.form.get( 'parts' ).find( function( part ) {
1849
+ var limit_mode = part.get( 'character_limit_mode' );
1850
+
1851
+ if( limit_mode ) {
1852
+ if( part.get( 'limit_input' ) == 1 && ( limit_mode == 'character_min' || limit_mode == 'word_min' ) &&
1853
+ part.get( 'character_limit' ) > 1 ) {
1854
+ return true;
1855
+ }
1856
+ }
1857
+ } );
1858
+
1859
+ if ( showMsgShortLabel ) {
1860
+ self.$el.addClass( 'show-msg-short-label' );
1861
+ }
1862
+
1863
+ var hasSearchableDropdown = happyForms.form.get( 'parts' ).findWhere( {
1864
+ allow_search: 1
1865
+ } );
1866
+
1867
+ if ( hasSearchableDropdown ) {
1868
+ self.$el.addClass( 'has-searchable-dropdown' );
1869
+ }
1870
+
1871
+ },
1872
+
1873
+ ready: function() {
1874
+ var self = this;
1875
+ this.$inputRestoreBtns = $( '.restore-default-btn' );
1876
+
1877
+ var defaultEditorSettings = {
1878
+ };
1879
+
1880
+ },
1881
+
1882
+
1883
+ onSubmitButtonLabelChange: function( e ) {
1884
+
1885
+ happyForms.previewSend( 'happyforms-submit-button-text-update', $( e.target ).val() );
1886
+ },
1887
+
1888
+ onOptionalPartLabelChange: function( e ) {
1889
+ var data = {
1890
+ callback: 'onOptionalPartLabelChangeCallback',
1891
+ };
1892
+
1893
+ happyForms.previewSend( 'happyforms-form-dom-update', data );
1894
+ },
1895
+
1896
+ onCharLimitMinWordsChange: function ( e ) {
1897
+ var data = {
1898
+ callback: 'onCharLimitMinWordsChangeCallback',
1899
+ };
1900
+
1901
+ happyForms.previewSend( 'happyforms-form-dom-update', data );
1902
+ },
1903
+
1904
+ onCharLimitMaxWordsChange: function ( e ) {
1905
+ var data = {
1906
+ callback: 'onCharLimitMaxWordsChangeCallback',
1907
+ };
1908
+
1909
+ happyForms.previewSend( 'happyforms-form-dom-update', data );
1910
+ },
1911
+
1912
+ onCharLimitMinCharsChange: function ( e ) {
1913
+ var data = {
1914
+ callback: 'onCharLimitMinCharsChangeCallback',
1915
+ };
1916
+
1917
+ happyForms.previewSend( 'happyforms-form-dom-update', data );
1918
+ },
1919
+
1920
+ onCharLimitMaxCharsChange: function ( e ) {
1921
+ var data = {
1922
+ callback: 'onCharLimitMaxCharsChangeCallback',
1923
+ };
1924
+
1925
+ happyForms.previewSend( 'happyforms-form-dom-update', data );
1926
+ },
1927
+ onNoResultsLabelChange: function( e ) {
1928
+ var data = {
1929
+ callback: 'onNoResultsLabelChangeCallback',
1930
+ };
1931
+
1932
+ happyForms.previewSend( 'happyforms-form-dom-update', data );
1933
+ },
1934
+
1935
+ } );
1936
+
1937
  classes.views.FormStyle = classes.views.Base.extend( {
1938
  template: '#happyforms-form-style-template',
1939
 
1945
  'change [data-target="form_class"] input[type="checkbox"]': 'onFormClassCheckboxChange',
1946
  'change [data-target="css_var"] input[type=radio]': 'onRadioChange',
1947
  'keyup [data-target="attribute"] input[type=text]': 'onAttributeChange',
 
1948
  'change [data-attribute="part_description_mode"]': 'onChangeGlobalControls',
1949
  'change [data-attribute="part_title_label_placement"]': 'onChangeGlobalControls',
1950
  'navigate-to-group': 'navigateToGroup',
1955
  initialize: function() {
1956
  classes.views.Base.prototype.initialize.apply( this, arguments );
1957
 
 
 
 
 
1958
  this.styles = new Backbone.Collection();
1959
  },
1960
 
1964
  return this;
1965
  },
1966
 
 
 
 
 
 
 
1967
  applyConditionClasses: function() {
1968
  var self = this;
1969
 
2038
  happyForms.form.set( attribute, value );
2039
 
2040
  var partAttribute = '';
2041
+
2042
  switch ( attribute ) {
2043
  case 'part_description_mode':
2044
  partAttribute = 'description_mode';
2109
  happyForms.form.set( attribute, value );
2110
  },
2111
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2112
  onGroupClick: function( e ) {
2113
  e.preventDefault();
2114
 
2463
  $( '.happyforms-optional', $form ).text( optionalLabel );
2464
  },
2465
 
2466
+ onCharLimitMinWordsChangeCallback: function( $form ) {
2467
+ var label = happyForms.form.get( 'words_label_min' );
2468
+ $( '.happyforms-part__char-counter.word_min span.counter-label', $form ).text( label );
2469
+ },
2470
+
2471
+ onCharLimitMaxWordsChangeCallback: function( $form ) {
2472
+ var label = happyForms.form.get( 'words_label_max' );
2473
+ $( '.happyforms-part__char-counter.word_max span.counter-label', $form ).text( label );
2474
+ },
2475
+
2476
+ onCharLimitMinCharsChangeCallback: function( $form ) {
2477
+ var label = happyForms.form.get( 'characters_label_min' );
2478
+ $( '.happyforms-part__char-counter.character_min span.counter-label', $form ).text( label );
2479
+ },
2480
+
2481
+ onCharLimitMaxCharsChangeCallback: function( $form ) {
2482
+ var label = happyForms.form.get( 'characters_label_max' );
2483
+ $( '.happyforms-part__char-counter.character_max span.counter-label', $form ).text( label );
2484
+ },
2485
+
2486
+ onNoResultsLabelChangeCallback: function( $form ) {
2487
+ var label = happyForms.form.get( 'no_results_label' );
2488
+
2489
+ $( 'li.happyforms-custom-select-dropdown__not-found', $form ).text( label );
2490
+ },
2491
+
2492
  /**
2493
  *
2494
  * Previewer callbacks for live part DOM updates
2555
  $description.text(description);
2556
  },
2557
 
2558
+ onDefaultValueChangeCallback: function( id, $part ) {
2559
+ var part = happyForms.form.get( 'parts' ).get( id );
2560
+ var default_value = part.get( 'default_value' );
2561
+
2562
+ $part.find( ':input' ).val( default_value );
2563
+ },
2564
+
2565
  onDescriptionModeChangeCallback: function( id, html ) {
2566
  var part = happyForms.form.get( 'parts' ).get( id );
2567
  var $part = this.$( html );
inc/classes/class-happyforms.php CHANGED
@@ -129,21 +129,21 @@ class HappyForms extends HappyForms_Core {
129
  $controls[1660] = array(
130
  'type' => 'checkbox_dummy',
131
  'dummy_id' => 'save_abandoned_responses',
132
- 'label' => __( 'Save abandoned forms', 'happyforms' ),
133
  'tooltip' => __( 'Keep incomplete users responses stored in your WordPress database.', 'happyforms' ),
134
  );
135
 
136
  $controls[1661] = array(
137
  'type' => 'checkbox_dummy',
138
  'dummy_id' => 'save_and_resume_submissions',
139
- 'label' => __( 'Allow save and resume', 'happyforms' ),
140
  'tooltip' => __( 'Let users temporarily save their incomplete response and continue filling out the form at a later time.', 'happyforms' ),
141
  );
142
 
143
  $controls[1800] = array(
144
  'type' => 'checkbox_dummy',
145
  'dummy_id' => 'preview_before_submit',
146
- 'label' => __( 'Preview before submit', 'happyforms' ),
147
  'tooltip' => __( 'Let your users review their submission before confirming it.', 'happyforms' ),
148
  );
149
 
129
  $controls[1660] = array(
130
  'type' => 'checkbox_dummy',
131
  'dummy_id' => 'save_abandoned_responses',
132
+ 'label' => __( 'Save incomplete and abandoned submissions', 'happyforms' ),
133
  'tooltip' => __( 'Keep incomplete users responses stored in your WordPress database.', 'happyforms' ),
134
  );
135
 
136
  $controls[1661] = array(
137
  'type' => 'checkbox_dummy',
138
  'dummy_id' => 'save_and_resume_submissions',
139
+ 'label' => __( 'Let respondents save a draft submission and come back to it later', 'happyforms' ),
140
  'tooltip' => __( 'Let users temporarily save their incomplete response and continue filling out the form at a later time.', 'happyforms' ),
141
  );
142
 
143
  $controls[1800] = array(
144
  'type' => 'checkbox_dummy',
145
  'dummy_id' => 'preview_before_submit',
146
+ 'label' => __( 'Require respondents to review a submission before submitting', 'happyforms' ),
147
  'tooltip' => __( 'Let your users review their submission before confirming it.', 'happyforms' ),
148
  );
149
 
inc/templates/email-user.php CHANGED
@@ -15,9 +15,9 @@
15
 
16
  <?php foreach( $form['parts'] as $part ) : ?>
17
 
18
- <?php if ( happyforms_email_is_part_visible( $part, $form, $response ) ) : ?>
19
 
20
- <b><?php echo happyforms_get_email_part_label( $response, $part, $form ); ?></b><br>
21
  <?php echo happyforms_get_email_part_value( $message, $part, $form ); ?>
22
  <br><br>
23
 
15
 
16
  <?php foreach( $form['parts'] as $part ) : ?>
17
 
18
+ <?php if ( happyforms_email_is_part_visible( $part, $form, $message ) ) : ?>
19
 
20
+ <b><?php echo happyforms_get_email_part_label( $message, $part, $form ); ?></b><br>
21
  <?php echo happyforms_get_email_part_value( $message, $part, $form ); ?>
22
  <br><br>
23
 
languages/happyforms.pot CHANGED
@@ -1,10 +1,10 @@
1
- # Copyright (C) 2021 HappyForms
2
- # This file is distributed under the same license as the HappyForms package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: HappyForms 1.9.30\n"
6
  "Report-Msgid-Bugs-To: https://thethemefoundry.com/support/\n"
7
- "POT-Creation-Date: 2021-02-01 09:57:31+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=utf-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
@@ -13,12 +13,15 @@ msgstr ""
13
  "Language-Team: The Theme Foundry\n"
14
  "X-Generator: grunt-wp-i18n 0.4.9\n"
15
 
16
- #. Author of the plugin/theme
17
- msgid "HappyForms"
 
 
 
18
  msgstr ""
19
 
20
- #: core/classes/class-block.php:50
21
- msgid "Contact form to manage and respond to conversations with customers."
22
  msgstr ""
23
 
24
  #: core/classes/class-block.php:102
@@ -136,7 +139,7 @@ msgstr ""
136
  msgid "Last modified"
137
  msgstr ""
138
 
139
- #: core/classes/class-form-admin.php:353 core/classes/class-form-setup.php:126
140
  msgid "Edit"
141
  msgstr ""
142
 
@@ -158,17 +161,13 @@ msgstr ""
158
  msgid "Undo"
159
  msgstr ""
160
 
161
- #: core/classes/class-form-controller.php:68
162
- msgid "Forms"
163
- msgstr ""
164
-
165
  #: core/classes/class-form-controller.php:69
166
  msgid "Form"
167
  msgstr ""
168
 
169
  #: core/classes/class-form-controller.php:70
170
- #: core/classes/class-happyforms-core.php:187
171
- #: core/classes/class-happyforms-core.php:188
172
  msgid "Add New"
173
  msgstr ""
174
 
@@ -199,8 +198,8 @@ msgstr ""
199
 
200
  #: core/classes/class-form-controller.php:79
201
  #: core/classes/class-form-controller.php:80
202
- #: core/classes/class-happyforms-core.php:179
203
- #: core/classes/class-happyforms-core.php:180
204
  msgid "All Forms"
205
  msgstr ""
206
 
@@ -208,7 +207,7 @@ msgstr ""
208
  msgid "(no title)"
209
  msgstr ""
210
 
211
- #: core/classes/class-form-controller.php:615
212
  msgid " Copy"
213
  msgstr ""
214
 
@@ -227,51 +226,27 @@ msgid ""
227
  msgstr ""
228
 
229
  #: core/classes/class-form-email.php:87
230
- msgid "Receive submission alerts"
231
  msgstr ""
232
 
233
  #: core/classes/class-form-email.php:96 core/templates/admin-tracking.php:15
234
  msgid "Email address"
235
  msgstr ""
236
 
237
- #: core/classes/class-form-email.php:97
238
- msgid ""
239
- "Add your email address here to receive a confirmation email for each form "
240
- "response. You can add multiple email addresses by separating each address "
241
- "with a comma."
242
- msgstr ""
243
-
244
  #: core/classes/class-form-email.php:102
245
  msgid "Email Bcc address"
246
  msgstr ""
247
 
248
- #: core/classes/class-form-email.php:103
249
- msgid ""
250
- "Add your Bcc email address here to receive a confirmation email for each "
251
- "form response without appearing in the received message header. You can "
252
- "add multiple email addresses by separating each address with a comma."
253
- msgstr ""
254
-
255
  #: core/classes/class-form-email.php:108 core/classes/class-form-email.php:142
256
  msgid "Email display name"
257
  msgstr ""
258
 
259
- #: core/classes/class-form-email.php:109
260
- msgid "You will receive an email with this sender name."
261
- msgstr ""
262
-
263
  #: core/classes/class-form-email.php:114 core/classes/class-form-email.php:148
264
  msgid "Email subject"
265
  msgstr ""
266
 
267
- #: core/classes/class-form-email.php:115
268
- msgid ""
269
- "Each time a user submits a message, you'll receive an email with this "
270
- "subject."
271
- msgstr ""
272
-
273
  #: core/classes/class-form-email.php:123
274
- msgid "Send confirmation email"
275
  msgstr ""
276
 
277
  #: core/classes/class-form-email.php:132
@@ -282,153 +257,207 @@ msgstr ""
282
  msgid "Reply email address"
283
  msgstr ""
284
 
285
- #: core/classes/class-form-email.php:143
286
- msgid ""
287
- "If your form contains an email field, users will receive an email with this "
288
- "sender name."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
289
  msgstr ""
290
 
291
- #: core/classes/class-form-email.php:149
 
 
 
 
 
 
 
 
 
 
 
 
292
  msgid ""
293
- "If your form contains an email field, users will receive an email with this "
294
- "subject."
295
  msgstr ""
296
 
297
- #: core/classes/class-form-email.php:154
298
- msgid "Email content"
299
  msgstr ""
300
 
301
- #: core/classes/class-form-email.php:155
302
  msgid ""
303
- "If your form contains an email field, users will receive an email with this "
304
- "content."
305
  msgstr ""
306
 
307
- #: core/classes/class-form-email.php:160
308
- msgid "Include submitted values"
309
  msgstr ""
310
 
311
- #: core/classes/class-form-part-library.php:189
312
- msgid "Invalid data"
 
 
313
  msgstr ""
314
 
315
- #: core/classes/class-form-part-library.php:196
316
- msgid "Field definition not found"
317
  msgstr ""
318
 
319
- #: core/classes/class-form-part-library.php:227
320
- msgid "Missing validation callback for field %s"
 
 
321
  msgstr ""
322
 
323
- #: core/classes/class-form-setup.php:58
324
- msgid "Thank you! Your submission has been sent."
325
  msgstr ""
326
 
327
- #: core/classes/class-form-setup.php:62
328
- msgid "There is a problem! Please review your submission."
329
  msgstr ""
330
 
331
- #: core/classes/class-form-setup.php:82
332
- msgid "This field is required."
333
  msgstr ""
334
 
335
- #: core/classes/class-form-setup.php:86
336
- msgid "(optional)"
337
  msgstr ""
338
 
339
- #: core/classes/class-form-setup.php:90
340
- msgid "Send"
341
  msgstr ""
342
 
343
- #: core/classes/class-form-setup.php:114
344
- msgid "Validate your submission"
345
  msgstr ""
346
 
347
- #: core/classes/class-form-setup.php:122
348
- msgid "Review submission"
349
  msgstr ""
350
 
351
- #: core/classes/class-form-setup.php:158
352
- msgid "Confirm submission"
353
  msgstr ""
354
 
355
- #: core/classes/class-form-setup.php:160
356
- msgid "Show a 'thank you' message"
357
  msgstr ""
358
 
359
- #: core/classes/class-form-setup.php:161
360
- msgid "Show a 'thank you' message and allow to resubmit the form"
361
  msgstr ""
362
 
363
- #: core/classes/class-form-setup.php:162
364
- msgid "Redirect to a web address"
365
  msgstr ""
366
 
367
- #: core/classes/class-form-setup.php:165
368
- msgid "Choose how the form should confirm successful submission."
369
  msgstr ""
370
 
371
- #: core/classes/class-form-setup.php:169
372
- #: core/templates/customize-form-parts-drawer.php:38
373
- #: inc/templates/customize-controls/checkbox_dummy.php:7
374
- #: inc/templates/customize-controls/email-parts-list-dummy.php:11
375
- msgid "Upgrade"
376
  msgstr ""
377
 
378
- #: core/classes/class-form-setup.php:179
379
- msgid "'Thank you' message"
380
  msgstr ""
381
 
382
- #: core/classes/class-form-setup.php:187
383
- msgid "Error message"
384
  msgstr ""
385
 
386
- #: core/classes/class-form-setup.php:188
387
- msgid ""
388
- "This is the message your users will see when there are form errors "
389
- "preventing submission."
390
  msgstr ""
391
 
392
- #: core/classes/class-form-setup.php:193
393
- msgid "Optional field label"
394
  msgstr ""
395
 
396
- #: core/classes/class-form-setup.php:194
397
- msgid ""
398
- "Mark optional fields in your form to let your users distinguish them from "
399
- "required fields."
400
  msgstr ""
401
 
402
- #: core/classes/class-form-setup.php:199
403
- msgid "Submit button label"
404
  msgstr ""
405
 
406
- #: core/classes/class-form-setup.php:200
407
- msgid "Change text of submit button to describe an action your form performs."
408
  msgstr ""
409
 
410
- #: core/classes/class-form-setup.php:205
411
- msgid "Submit button CSS classes"
 
 
 
412
  msgstr ""
413
 
414
- #: core/classes/class-form-setup.php:206
415
- msgid ""
416
- "Add custom CSS classes separated by space for targeting a button in your "
417
- "stylesheet."
418
  msgstr ""
419
 
420
- #: core/classes/class-form-setup.php:212
421
- msgid "Use custom HTML ID"
422
  msgstr ""
423
 
424
- #: core/classes/class-form-setup.php:214
425
- msgid "Add a unique HTML ID to your form. Write without a hash (#) character."
426
  msgstr ""
427
 
428
  #: core/classes/class-form-setup.php:222
429
  msgid "Form HTML ID"
430
  msgstr ""
431
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
432
  #: core/classes/class-form-styles.php:53
433
  msgid "Left-to-right"
434
  msgstr ""
@@ -562,7 +591,7 @@ msgstr ""
562
 
563
  #: core/classes/class-form-styles.php:560
564
  #: core/classes/class-form-styles.php:885 core/helpers/helper-misc.php:929
565
- #: core/templates/parts/customize-checkbox.php:69
566
  msgid "Width"
567
  msgstr ""
568
 
@@ -611,7 +640,6 @@ msgid "Error message text"
611
  msgstr ""
612
 
613
  #: core/classes/class-form-styles.php:615
614
- #: core/templates/customize-form-build.php:4
615
  #: inc/classes/parts/class-part-layout-title-dummy.php:8
616
  #: inc/classes/parts/class-part-title-dummy.php:8
617
  msgid "Title"
@@ -702,15 +730,15 @@ msgid "Label display"
702
  msgstr ""
703
 
704
  #: core/classes/class-form-styles.php:720
705
- msgid "Description alignment"
706
  msgstr ""
707
 
708
  #: core/classes/class-form-styles.php:725
709
- msgid "Description font size"
710
  msgstr ""
711
 
712
  #: core/classes/class-form-styles.php:730
713
- msgid "Description display"
714
  msgstr ""
715
 
716
  #: core/classes/class-form-styles.php:735
@@ -723,14 +751,14 @@ msgstr ""
723
 
724
  #: core/classes/class-form-styles.php:750
725
  #: core/templates/parts/customize-checkbox.php:4
726
- #: core/templates/parts/customize-checkbox.php:104
727
  #: core/templates/parts/customize-email.php:4
728
  #: core/templates/parts/customize-multi-line-text.php:4
729
  #: core/templates/parts/customize-number.php:4
730
  #: core/templates/parts/customize-radio.php:4
731
- #: core/templates/parts/customize-radio.php:87
732
  #: core/templates/parts/customize-select.php:4
733
- #: core/templates/parts/customize-select.php:85
734
  #: core/templates/parts/customize-single-line-text.php:4
735
  msgid "Label"
736
  msgstr ""
@@ -751,13 +779,13 @@ msgstr ""
751
 
752
  #: core/classes/class-form-styles.php:765
753
  #: core/templates/parts/customize-checkbox.php:8
754
- #: core/templates/parts/customize-email.php:12
755
- #: core/templates/parts/customize-multi-line-text.php:12
756
- #: core/templates/parts/customize-number.php:12
757
  #: core/templates/parts/customize-radio.php:8
758
  #: core/templates/parts/customize-select.php:12
759
- #: core/templates/parts/customize-single-line-text.php:12
760
- msgid "Description"
761
  msgstr ""
762
 
763
  #: core/classes/class-form-styles.php:770
@@ -863,63 +891,28 @@ msgstr ""
863
  msgid "Additional CSS"
864
  msgstr ""
865
 
866
- #: core/classes/class-happyforms-core.php:171
867
- msgid "HappyForms Index"
868
- msgstr ""
869
-
870
- #: core/classes/class-happyforms-core.php:195
871
- #: core/classes/class-happyforms-core.php:196
872
  msgid "Activity"
873
  msgstr ""
874
 
875
- #: core/classes/class-happyforms-core.php:204
876
- #: core/classes/class-happyforms-core.php:205
877
  msgid "Integrations"
878
  msgstr ""
879
 
880
- #: core/classes/class-happyforms-core.php:213
881
- #: core/classes/class-happyforms-core.php:214
882
  msgid "Settings"
883
  msgstr ""
884
 
885
- #: core/classes/class-happyforms-core.php:222
886
- #: core/classes/class-happyforms-core.php:223
887
  msgid "Welcome"
888
  msgstr ""
889
 
890
- #: core/classes/class-happyforms-core.php:456
891
- msgid "Insert HappyForm"
892
- msgstr ""
893
-
894
- #: core/classes/class-happyforms-core.php:456
895
- msgid "Add HappyForms"
896
- msgstr ""
897
-
898
- #: core/classes/class-happyforms-core.php:692
899
- msgid "Overview"
900
- msgstr ""
901
-
902
- #: core/classes/class-happyforms-core.php:702
903
- msgid "Hey 👋 Welcome to your HappyForms Dashboard!"
904
- msgstr ""
905
-
906
- #: core/classes/class-happyforms-core.php:705
907
- msgid ""
908
- "Are you looking for help? Well, we’ve swept the nacho crumbs from our "
909
- "keyboards, refilled our ginger beers and are ready to reply with answers! "
910
- "So, go on, email %s."
911
- msgstr ""
912
-
913
- #: core/classes/class-happyforms-core.php:714
914
- msgid "For more help"
915
- msgstr ""
916
-
917
- #: core/classes/class-happyforms-core.php:716
918
- msgid "Help guide"
919
- msgstr ""
920
-
921
- #: core/classes/class-happyforms-widget.php:15
922
- msgid "Easily add your HappyForms to widget areas."
923
  msgstr ""
924
 
925
  #: core/classes/class-happyforms-widget.php:79
@@ -960,32 +953,44 @@ msgstr ""
960
  msgid "Error description"
961
  msgstr ""
962
 
963
- #: core/classes/class-validation-messages.php:64
964
- msgid "Please fill in this field"
965
  msgstr ""
966
 
967
- #: core/classes/class-validation-messages.php:65
968
- msgid "This is invalid"
969
  msgstr ""
970
 
971
- #: core/classes/class-validation-messages.php:66
972
- msgid "This doesn't match"
973
  msgstr ""
974
 
975
- #: core/classes/class-validation-messages.php:67
976
- msgid "Please select more choices"
977
  msgstr ""
978
 
979
- #: core/classes/class-validation-messages.php:68
980
- msgid "Please select fewer choices"
981
  msgstr ""
982
 
983
- #: core/classes/class-validation-messages.php:69
984
- msgid "This message is too long"
985
  msgstr ""
986
 
987
- #: core/classes/class-validation-messages.php:70
988
- msgid "This message is too short"
 
 
 
 
 
 
 
 
 
 
 
 
989
  msgstr ""
990
 
991
  #: core/classes/class-wp-customize-form-manager.php:167
@@ -997,7 +1002,7 @@ msgid "There are two ways to embed your form. Here goes…"
997
  msgstr ""
998
 
999
  #: core/classes/class-wp-customize-form-manager.php:169
1000
- msgid "Add HappyForms to your page or post"
1001
  msgstr ""
1002
 
1003
  #: core/classes/class-wp-customize-form-manager.php:170
@@ -1005,7 +1010,7 @@ msgid "In your Edit Post / Edit Page screen, click Add Block."
1005
  msgstr ""
1006
 
1007
  #: core/classes/class-wp-customize-form-manager.php:170
1008
- msgid "Select the HappyForms content block."
1009
  msgstr ""
1010
 
1011
  #: core/classes/class-wp-customize-form-manager.php:170
@@ -1018,7 +1023,7 @@ msgid "That's it! You'll see a basic preview of your form in the editor."
1018
  msgstr ""
1019
 
1020
  #: core/classes/class-wp-customize-form-manager.php:171
1021
- msgid "Use HappyForms in a widget area"
1022
  msgstr ""
1023
 
1024
  #: core/classes/class-wp-customize-form-manager.php:173
@@ -1026,7 +1031,7 @@ msgid "Head over to Appearance &rarr; <a href=\"%s\">Widgets</a> screen."
1026
  msgstr ""
1027
 
1028
  #: core/classes/class-wp-customize-form-manager.php:174
1029
- msgid "Drag the HappyForms widget to your sidebar."
1030
  msgstr ""
1031
 
1032
  #: core/classes/class-wp-customize-form-manager.php:176
@@ -1054,18 +1059,6 @@ msgstr ""
1054
  msgid "For checkboxes allowing multiple selections."
1055
  msgstr ""
1056
 
1057
- #: core/classes/parts/class-part-checkbox.php:39
1058
- #: core/classes/parts/class-part-email.php:34
1059
- #: core/classes/parts/class-part-email.php:58
1060
- #: core/classes/parts/class-part-multi-line-text.php:34
1061
- #: core/classes/parts/class-part-number.php:33
1062
- #: core/classes/parts/class-part-number.php:93
1063
- #: core/classes/parts/class-part-radio.php:40
1064
- #: core/classes/parts/class-part-select.php:35
1065
- #: core/classes/parts/class-part-single-line-text.php:31
1066
- msgid "Untitled"
1067
- msgstr ""
1068
-
1069
  #: core/classes/parts/class-part-checkbox.php:83
1070
  #: core/templates/parts/frontend-checkbox.php:13
1071
  msgid "Select all"
@@ -1087,16 +1080,6 @@ msgstr ""
1087
  msgid "For paragraph text fields."
1088
  msgstr ""
1089
 
1090
- #: core/classes/parts/class-part-multi-line-text.php:69
1091
- #: core/templates/parts/customize-multi-line-text.php:46
1092
- msgid "Min characters"
1093
- msgstr ""
1094
-
1095
- #: core/classes/parts/class-part-multi-line-text.php:73
1096
- #: core/templates/parts/customize-multi-line-text.php:43
1097
- msgid "Max words"
1098
- msgstr ""
1099
-
1100
  #: core/classes/parts/class-part-number.php:8
1101
  msgid "Number"
1102
  msgstr ""
@@ -1121,10 +1104,6 @@ msgstr ""
1121
  msgid "For selecting one option from a long list. Default value adjustable."
1122
  msgstr ""
1123
 
1124
- #: core/classes/parts/class-part-select.php:75
1125
- msgid "No results"
1126
- msgstr ""
1127
-
1128
  #: core/classes/parts/class-part-single-line-text.php:8
1129
  msgid "Short Answer"
1130
  msgstr ""
@@ -1173,1028 +1152,1028 @@ msgstr ""
1173
  msgid "Spam protection, skip this field"
1174
  msgstr ""
1175
 
1176
- #: core/helpers/helper-form-templates.php:1031
1177
  msgid "January"
1178
  msgstr ""
1179
 
1180
- #: core/helpers/helper-form-templates.php:1032
1181
  msgid "February"
1182
  msgstr ""
1183
 
1184
- #: core/helpers/helper-form-templates.php:1033
1185
  msgid "March"
1186
  msgstr ""
1187
 
1188
- #: core/helpers/helper-form-templates.php:1034
1189
  msgid "April"
1190
  msgstr ""
1191
 
1192
- #: core/helpers/helper-form-templates.php:1035
1193
  msgid "May"
1194
  msgstr ""
1195
 
1196
- #: core/helpers/helper-form-templates.php:1036
1197
  msgid "June"
1198
  msgstr ""
1199
 
1200
- #: core/helpers/helper-form-templates.php:1037
1201
  msgid "July"
1202
  msgstr ""
1203
 
1204
- #: core/helpers/helper-form-templates.php:1038
1205
  msgid "August"
1206
  msgstr ""
1207
 
1208
- #: core/helpers/helper-form-templates.php:1039
1209
  msgid "September"
1210
  msgstr ""
1211
 
1212
- #: core/helpers/helper-form-templates.php:1040
1213
  msgid "October"
1214
  msgstr ""
1215
 
1216
- #: core/helpers/helper-form-templates.php:1041
1217
  msgid "November"
1218
  msgstr ""
1219
 
1220
- #: core/helpers/helper-form-templates.php:1042
1221
  msgid "December"
1222
  msgstr ""
1223
 
1224
- #: core/helpers/helper-form-templates.php:1083
1225
  msgid "Ascension Island"
1226
  msgstr ""
1227
 
1228
- #: core/helpers/helper-form-templates.php:1084 core/helpers/helper-misc.php:228
1229
  msgid "Andorra"
1230
  msgstr ""
1231
 
1232
- #: core/helpers/helper-form-templates.php:1085 core/helpers/helper-misc.php:446
1233
  msgid "United Arab Emirates"
1234
  msgstr ""
1235
 
1236
- #: core/helpers/helper-form-templates.php:1086 core/helpers/helper-misc.php:224
1237
  msgid "Afghanistan"
1238
  msgstr ""
1239
 
1240
- #: core/helpers/helper-form-templates.php:1087 core/helpers/helper-misc.php:232
1241
  msgid "Antigua and Barbuda"
1242
  msgstr ""
1243
 
1244
- #: core/helpers/helper-form-templates.php:1088 core/helpers/helper-misc.php:230
1245
  msgid "Anguilla"
1246
  msgstr ""
1247
 
1248
- #: core/helpers/helper-form-templates.php:1089 core/helpers/helper-misc.php:225
1249
  msgid "Albania"
1250
  msgstr ""
1251
 
1252
- #: core/helpers/helper-form-templates.php:1090 core/helpers/helper-misc.php:234
1253
  msgid "Armenia"
1254
  msgstr ""
1255
 
1256
- #: core/helpers/helper-form-templates.php:1091 core/helpers/helper-misc.php:229
1257
  msgid "Angola"
1258
  msgstr ""
1259
 
1260
- #: core/helpers/helper-form-templates.php:1092 core/helpers/helper-misc.php:233
1261
  msgid "Argentina"
1262
  msgstr ""
1263
 
1264
- #: core/helpers/helper-form-templates.php:1093 core/helpers/helper-misc.php:227
1265
  msgid "American Samoa"
1266
  msgstr ""
1267
 
1268
- #: core/helpers/helper-form-templates.php:1094 core/helpers/helper-misc.php:237
1269
  msgid "Austria"
1270
  msgstr ""
1271
 
1272
- #: core/helpers/helper-form-templates.php:1095 core/helpers/helper-misc.php:236
1273
  msgid "Australia"
1274
  msgstr ""
1275
 
1276
- #: core/helpers/helper-form-templates.php:1096 core/helpers/helper-misc.php:235
1277
  msgid "Aruba"
1278
  msgstr ""
1279
 
1280
- #: core/helpers/helper-form-templates.php:1097
1281
  msgid "Åland Islands"
1282
  msgstr ""
1283
 
1284
- #: core/helpers/helper-form-templates.php:1098 core/helpers/helper-misc.php:238
1285
  msgid "Azerbaijan"
1286
  msgstr ""
1287
 
1288
- #: core/helpers/helper-form-templates.php:1099
1289
  msgid "Bosnia and Herzegovina"
1290
  msgstr ""
1291
 
1292
- #: core/helpers/helper-form-templates.php:1100 core/helpers/helper-misc.php:242
1293
  msgid "Barbados"
1294
  msgstr ""
1295
 
1296
- #: core/helpers/helper-form-templates.php:1101 core/helpers/helper-misc.php:241
1297
  msgid "Bangladesh"
1298
  msgstr ""
1299
 
1300
- #: core/helpers/helper-form-templates.php:1102 core/helpers/helper-misc.php:244
1301
  msgid "Belgium"
1302
  msgstr ""
1303
 
1304
- #: core/helpers/helper-form-templates.php:1103 core/helpers/helper-misc.php:257
1305
  msgid "Burkina Faso"
1306
  msgstr ""
1307
 
1308
- #: core/helpers/helper-form-templates.php:1104 core/helpers/helper-misc.php:256
1309
  msgid "Bulgaria"
1310
  msgstr ""
1311
 
1312
- #: core/helpers/helper-form-templates.php:1105 core/helpers/helper-misc.php:240
1313
  msgid "Bahrain"
1314
  msgstr ""
1315
 
1316
- #: core/helpers/helper-form-templates.php:1106 core/helpers/helper-misc.php:258
1317
  msgid "Burundi"
1318
  msgstr ""
1319
 
1320
- #: core/helpers/helper-form-templates.php:1107 core/helpers/helper-misc.php:246
1321
  msgid "Benin"
1322
  msgstr ""
1323
 
1324
- #: core/helpers/helper-form-templates.php:1108
1325
  msgid "Saint Barthélemy"
1326
  msgstr ""
1327
 
1328
- #: core/helpers/helper-form-templates.php:1109 core/helpers/helper-misc.php:247
1329
  msgid "Bermuda"
1330
  msgstr ""
1331
 
1332
- #: core/helpers/helper-form-templates.php:1110 core/helpers/helper-misc.php:255
1333
  msgid "Brunei Darussalam"
1334
  msgstr ""
1335
 
1336
- #: core/helpers/helper-form-templates.php:1111 core/helpers/helper-misc.php:249
1337
  msgid "Bolivia"
1338
  msgstr ""
1339
 
1340
- #: core/helpers/helper-form-templates.php:1112
1341
  msgid "Bonaire, Sint Eustatius and Saba"
1342
  msgstr ""
1343
 
1344
- #: core/helpers/helper-form-templates.php:1113 core/helpers/helper-misc.php:253
1345
  msgid "Brazil"
1346
  msgstr ""
1347
 
1348
- #: core/helpers/helper-form-templates.php:1114 core/helpers/helper-misc.php:239
1349
  msgid "Bahamas"
1350
  msgstr ""
1351
 
1352
- #: core/helpers/helper-form-templates.php:1115 core/helpers/helper-misc.php:248
1353
  msgid "Bhutan"
1354
  msgstr ""
1355
 
1356
- #: core/helpers/helper-form-templates.php:1116 core/helpers/helper-misc.php:251
1357
  msgid "Botswana"
1358
  msgstr ""
1359
 
1360
- #: core/helpers/helper-form-templates.php:1117 core/helpers/helper-misc.php:243
1361
  msgid "Belarus"
1362
  msgstr ""
1363
 
1364
- #: core/helpers/helper-form-templates.php:1118 core/helpers/helper-misc.php:245
1365
  msgid "Belize"
1366
  msgstr ""
1367
 
1368
- #: core/helpers/helper-form-templates.php:1119 core/helpers/helper-misc.php:261
1369
  msgid "Canada"
1370
  msgstr ""
1371
 
1372
- #: core/helpers/helper-form-templates.php:1120 core/helpers/helper-misc.php:269
1373
  msgid "Cocos (Keeling) Islands"
1374
  msgstr ""
1375
 
1376
- #: core/helpers/helper-form-templates.php:1121 core/helpers/helper-misc.php:273
1377
  msgid "Congo, the Democratic Republic of the"
1378
  msgstr ""
1379
 
1380
- #: core/helpers/helper-form-templates.php:1122 core/helpers/helper-misc.php:264
1381
  msgid "Central African Republic"
1382
  msgstr ""
1383
 
1384
- #: core/helpers/helper-form-templates.php:1123 core/helpers/helper-misc.php:272
1385
  msgid "Congo"
1386
  msgstr ""
1387
 
1388
- #: core/helpers/helper-form-templates.php:1124 core/helpers/helper-misc.php:429
1389
  msgid "Switzerland"
1390
  msgstr ""
1391
 
1392
- #: core/helpers/helper-form-templates.php:1125
1393
  msgid "Cote D'Ivoire"
1394
  msgstr ""
1395
 
1396
- #: core/helpers/helper-form-templates.php:1126 core/helpers/helper-misc.php:274
1397
  msgid "Cook Islands"
1398
  msgstr ""
1399
 
1400
- #: core/helpers/helper-form-templates.php:1127 core/helpers/helper-misc.php:266
1401
  msgid "Chile"
1402
  msgstr ""
1403
 
1404
- #: core/helpers/helper-form-templates.php:1128 core/helpers/helper-misc.php:260
1405
  msgid "Cameroon"
1406
  msgstr ""
1407
 
1408
- #: core/helpers/helper-form-templates.php:1129 core/helpers/helper-misc.php:267
1409
  msgid "China"
1410
  msgstr ""
1411
 
1412
- #: core/helpers/helper-form-templates.php:1130 core/helpers/helper-misc.php:270
1413
  msgid "Colombia"
1414
  msgstr ""
1415
 
1416
- #: core/helpers/helper-form-templates.php:1131 core/helpers/helper-misc.php:275
1417
  msgid "Costa Rica"
1418
  msgstr ""
1419
 
1420
- #: core/helpers/helper-form-templates.php:1132 core/helpers/helper-misc.php:278
1421
  msgid "Cuba"
1422
  msgstr ""
1423
 
1424
- #: core/helpers/helper-form-templates.php:1133 core/helpers/helper-misc.php:262
1425
  msgid "Cape Verde"
1426
  msgstr ""
1427
 
1428
- #: core/helpers/helper-form-templates.php:1134
1429
  msgid "Curaçao"
1430
  msgstr ""
1431
 
1432
- #: core/helpers/helper-form-templates.php:1135 core/helpers/helper-misc.php:268
1433
  msgid "Christmas Island"
1434
  msgstr ""
1435
 
1436
- #: core/helpers/helper-form-templates.php:1136 core/helpers/helper-misc.php:279
1437
  msgid "Cyprus"
1438
  msgstr ""
1439
 
1440
- #: core/helpers/helper-form-templates.php:1137 core/helpers/helper-misc.php:280
1441
  msgid "Czech Republic"
1442
  msgstr ""
1443
 
1444
- #: core/helpers/helper-form-templates.php:1138 core/helpers/helper-misc.php:305
1445
  msgid "Germany"
1446
  msgstr ""
1447
 
1448
- #: core/helpers/helper-form-templates.php:1139 core/helpers/helper-misc.php:282
1449
  msgid "Djibouti"
1450
  msgstr ""
1451
 
1452
- #: core/helpers/helper-form-templates.php:1140 core/helpers/helper-misc.php:281
1453
  msgid "Denmark"
1454
  msgstr ""
1455
 
1456
- #: core/helpers/helper-form-templates.php:1141 core/helpers/helper-misc.php:283
1457
  msgid "Dominica"
1458
  msgstr ""
1459
 
1460
- #: core/helpers/helper-form-templates.php:1142 core/helpers/helper-misc.php:284
1461
  msgid "Dominican Republic"
1462
  msgstr ""
1463
 
1464
- #: core/helpers/helper-form-templates.php:1143 core/helpers/helper-misc.php:226
1465
  msgid "Algeria"
1466
  msgstr ""
1467
 
1468
- #: core/helpers/helper-form-templates.php:1144 core/helpers/helper-misc.php:286
1469
  msgid "Ecuador"
1470
  msgstr ""
1471
 
1472
- #: core/helpers/helper-form-templates.php:1145 core/helpers/helper-misc.php:291
1473
  msgid "Estonia"
1474
  msgstr ""
1475
 
1476
- #: core/helpers/helper-form-templates.php:1146 core/helpers/helper-misc.php:287
1477
  msgid "Egypt"
1478
  msgstr ""
1479
 
1480
- #: core/helpers/helper-form-templates.php:1147 core/helpers/helper-misc.php:458
1481
  msgid "Western Sahara"
1482
  msgstr ""
1483
 
1484
- #: core/helpers/helper-form-templates.php:1148 core/helpers/helper-misc.php:290
1485
  msgid "Eritrea"
1486
  msgstr ""
1487
 
1488
- #: core/helpers/helper-form-templates.php:1149 core/helpers/helper-misc.php:420
1489
  msgid "Spain"
1490
  msgstr ""
1491
 
1492
- #: core/helpers/helper-form-templates.php:1150 core/helpers/helper-misc.php:292
1493
  msgid "Ethiopia"
1494
  msgstr ""
1495
 
1496
- #: core/helpers/helper-form-templates.php:1151 core/helpers/helper-misc.php:296
1497
  msgid "Finland"
1498
  msgstr ""
1499
 
1500
- #: core/helpers/helper-form-templates.php:1152 core/helpers/helper-misc.php:295
1501
  msgid "Fiji"
1502
  msgstr ""
1503
 
1504
- #: core/helpers/helper-form-templates.php:1153 core/helpers/helper-misc.php:293
1505
  msgid "Falkland Islands (Malvinas)"
1506
  msgstr ""
1507
 
1508
- #: core/helpers/helper-form-templates.php:1154 core/helpers/helper-misc.php:364
1509
  msgid "Micronesia, Federated States of"
1510
  msgstr ""
1511
 
1512
- #: core/helpers/helper-form-templates.php:1155 core/helpers/helper-misc.php:294
1513
  msgid "Faroe Islands"
1514
  msgstr ""
1515
 
1516
- #: core/helpers/helper-form-templates.php:1156 core/helpers/helper-misc.php:297
1517
  msgid "France"
1518
  msgstr ""
1519
 
1520
- #: core/helpers/helper-form-templates.php:1157 core/helpers/helper-misc.php:302
1521
  msgid "Gabon"
1522
  msgstr ""
1523
 
1524
- #: core/helpers/helper-form-templates.php:1158 core/helpers/helper-misc.php:447
1525
  msgid "United Kingdom"
1526
  msgstr ""
1527
 
1528
- #: core/helpers/helper-form-templates.php:1159 core/helpers/helper-misc.php:310
1529
  msgid "Grenada"
1530
  msgstr ""
1531
 
1532
- #: core/helpers/helper-form-templates.php:1160 core/helpers/helper-misc.php:304
1533
  msgid "Georgia"
1534
  msgstr ""
1535
 
1536
- #: core/helpers/helper-form-templates.php:1161 core/helpers/helper-misc.php:299
1537
  msgid "French Guiana"
1538
  msgstr ""
1539
 
1540
- #: core/helpers/helper-form-templates.php:1162
1541
  msgid "Guernsey"
1542
  msgstr ""
1543
 
1544
- #: core/helpers/helper-form-templates.php:1163 core/helpers/helper-misc.php:306
1545
  msgid "Ghana"
1546
  msgstr ""
1547
 
1548
- #: core/helpers/helper-form-templates.php:1164 core/helpers/helper-misc.php:307
1549
  msgid "Gibraltar"
1550
  msgstr ""
1551
 
1552
- #: core/helpers/helper-form-templates.php:1165 core/helpers/helper-misc.php:309
1553
  msgid "Greenland"
1554
  msgstr ""
1555
 
1556
- #: core/helpers/helper-form-templates.php:1166 core/helpers/helper-misc.php:303
1557
  msgid "Gambia"
1558
  msgstr ""
1559
 
1560
- #: core/helpers/helper-form-templates.php:1167 core/helpers/helper-misc.php:314
1561
  msgid "Guinea"
1562
  msgstr ""
1563
 
1564
- #: core/helpers/helper-form-templates.php:1168 core/helpers/helper-misc.php:311
1565
  msgid "Guadeloupe"
1566
  msgstr ""
1567
 
1568
- #: core/helpers/helper-form-templates.php:1169 core/helpers/helper-misc.php:289
1569
  msgid "Equatorial Guinea"
1570
  msgstr ""
1571
 
1572
- #: core/helpers/helper-form-templates.php:1170 core/helpers/helper-misc.php:308
1573
  msgid "Greece"
1574
  msgstr ""
1575
 
1576
- #: core/helpers/helper-form-templates.php:1171 core/helpers/helper-misc.php:313
1577
  msgid "Guatemala"
1578
  msgstr ""
1579
 
1580
- #: core/helpers/helper-form-templates.php:1172 core/helpers/helper-misc.php:312
1581
  msgid "Guam"
1582
  msgstr ""
1583
 
1584
- #: core/helpers/helper-form-templates.php:1173 core/helpers/helper-misc.php:315
1585
  msgid "Guinea-Bissau"
1586
  msgstr ""
1587
 
1588
- #: core/helpers/helper-form-templates.php:1174 core/helpers/helper-misc.php:316
1589
  msgid "Guyana"
1590
  msgstr ""
1591
 
1592
- #: core/helpers/helper-form-templates.php:1175 core/helpers/helper-misc.php:321
1593
  msgid "Hong Kong"
1594
  msgstr ""
1595
 
1596
- #: core/helpers/helper-form-templates.php:1176 core/helpers/helper-misc.php:320
1597
  msgid "Honduras"
1598
  msgstr ""
1599
 
1600
- #: core/helpers/helper-form-templates.php:1177
1601
  msgid "Croatia"
1602
  msgstr ""
1603
 
1604
- #: core/helpers/helper-form-templates.php:1178 core/helpers/helper-misc.php:317
1605
  msgid "Haiti"
1606
  msgstr ""
1607
 
1608
- #: core/helpers/helper-form-templates.php:1179 core/helpers/helper-misc.php:322
1609
  msgid "Hungary"
1610
  msgstr ""
1611
 
1612
- #: core/helpers/helper-form-templates.php:1180 core/helpers/helper-misc.php:325
1613
  msgid "Indonesia"
1614
  msgstr ""
1615
 
1616
- #: core/helpers/helper-form-templates.php:1181 core/helpers/helper-misc.php:328
1617
  msgid "Ireland"
1618
  msgstr ""
1619
 
1620
- #: core/helpers/helper-form-templates.php:1182 core/helpers/helper-misc.php:329
1621
  msgid "Israel"
1622
  msgstr ""
1623
 
1624
- #: core/helpers/helper-form-templates.php:1183
1625
  msgid "Isle of Man"
1626
  msgstr ""
1627
 
1628
- #: core/helpers/helper-form-templates.php:1184 core/helpers/helper-misc.php:324
1629
  msgid "India"
1630
  msgstr ""
1631
 
1632
- #: core/helpers/helper-form-templates.php:1185 core/helpers/helper-misc.php:254
1633
  msgid "British Indian Ocean Territory"
1634
  msgstr ""
1635
 
1636
- #: core/helpers/helper-form-templates.php:1186 core/helpers/helper-misc.php:327
1637
  msgid "Iraq"
1638
  msgstr ""
1639
 
1640
- #: core/helpers/helper-form-templates.php:1187
1641
  msgid "Iran, Islamic Republic of"
1642
  msgstr ""
1643
 
1644
- #: core/helpers/helper-form-templates.php:1188 core/helpers/helper-misc.php:323
1645
  msgid "Iceland"
1646
  msgstr ""
1647
 
1648
- #: core/helpers/helper-form-templates.php:1189 core/helpers/helper-misc.php:330
1649
  msgid "Italy"
1650
  msgstr ""
1651
 
1652
- #: core/helpers/helper-form-templates.php:1190
1653
  msgid "Jersey"
1654
  msgstr ""
1655
 
1656
- #: core/helpers/helper-form-templates.php:1191 core/helpers/helper-misc.php:331
1657
  msgid "Jamaica"
1658
  msgstr ""
1659
 
1660
- #: core/helpers/helper-form-templates.php:1192 core/helpers/helper-misc.php:333
1661
  msgid "Jordan"
1662
  msgstr ""
1663
 
1664
- #: core/helpers/helper-form-templates.php:1193 core/helpers/helper-misc.php:332
1665
  msgid "Japan"
1666
  msgstr ""
1667
 
1668
- #: core/helpers/helper-form-templates.php:1194 core/helpers/helper-misc.php:335
1669
  msgid "Kenya"
1670
  msgstr ""
1671
 
1672
- #: core/helpers/helper-form-templates.php:1195 core/helpers/helper-misc.php:340
1673
  msgid "Kyrgyzstan"
1674
  msgstr ""
1675
 
1676
- #: core/helpers/helper-form-templates.php:1196 core/helpers/helper-misc.php:259
1677
  msgid "Cambodia"
1678
  msgstr ""
1679
 
1680
- #: core/helpers/helper-form-templates.php:1197 core/helpers/helper-misc.php:336
1681
  msgid "Kiribati"
1682
  msgstr ""
1683
 
1684
- #: core/helpers/helper-form-templates.php:1198 core/helpers/helper-misc.php:271
1685
  msgid "Comoros"
1686
  msgstr ""
1687
 
1688
- #: core/helpers/helper-form-templates.php:1199 core/helpers/helper-misc.php:403
1689
  msgid "Saint Kitts and Nevis"
1690
  msgstr ""
1691
 
1692
- #: core/helpers/helper-form-templates.php:1200
1693
  msgid "North Korea"
1694
  msgstr ""
1695
 
1696
- #: core/helpers/helper-form-templates.php:1201
1697
  msgid "South Korea"
1698
  msgstr ""
1699
 
1700
- #: core/helpers/helper-form-templates.php:1202 core/helpers/helper-misc.php:339
1701
  msgid "Kuwait"
1702
  msgstr ""
1703
 
1704
- #: core/helpers/helper-form-templates.php:1203 core/helpers/helper-misc.php:263
1705
  msgid "Cayman Islands"
1706
  msgstr ""
1707
 
1708
- #: core/helpers/helper-form-templates.php:1204 core/helpers/helper-misc.php:334
1709
  msgid "Kazakhstan"
1710
  msgstr ""
1711
 
1712
- #: core/helpers/helper-form-templates.php:1205
1713
  msgid "Lao People's Democratic Republic"
1714
  msgstr ""
1715
 
1716
- #: core/helpers/helper-form-templates.php:1206 core/helpers/helper-misc.php:343
1717
  msgid "Lebanon"
1718
  msgstr ""
1719
 
1720
- #: core/helpers/helper-form-templates.php:1207 core/helpers/helper-misc.php:404
1721
  msgid "Saint Lucia"
1722
  msgstr ""
1723
 
1724
- #: core/helpers/helper-form-templates.php:1208 core/helpers/helper-misc.php:347
1725
  msgid "Liechtenstein"
1726
  msgstr ""
1727
 
1728
- #: core/helpers/helper-form-templates.php:1209 core/helpers/helper-misc.php:421
1729
  msgid "Sri Lanka"
1730
  msgstr ""
1731
 
1732
- #: core/helpers/helper-form-templates.php:1210 core/helpers/helper-misc.php:345
1733
  msgid "Liberia"
1734
  msgstr ""
1735
 
1736
- #: core/helpers/helper-form-templates.php:1211 core/helpers/helper-misc.php:344
1737
  msgid "Lesotho"
1738
  msgstr ""
1739
 
1740
- #: core/helpers/helper-form-templates.php:1212 core/helpers/helper-misc.php:348
1741
  msgid "Lithuania"
1742
  msgstr ""
1743
 
1744
- #: core/helpers/helper-form-templates.php:1213 core/helpers/helper-misc.php:349
1745
  msgid "Luxembourg"
1746
  msgstr ""
1747
 
1748
- #: core/helpers/helper-form-templates.php:1214 core/helpers/helper-misc.php:342
1749
  msgid "Latvia"
1750
  msgstr ""
1751
 
1752
- #: core/helpers/helper-form-templates.php:1215
1753
  msgid "Libya"
1754
  msgstr ""
1755
 
1756
- #: core/helpers/helper-form-templates.php:1216 core/helpers/helper-misc.php:369
1757
  msgid "Morocco"
1758
  msgstr ""
1759
 
1760
- #: core/helpers/helper-form-templates.php:1217 core/helpers/helper-misc.php:366
1761
  msgid "Monaco"
1762
  msgstr ""
1763
 
1764
- #: core/helpers/helper-form-templates.php:1218 core/helpers/helper-misc.php:365
1765
  msgid "Moldova, Republic of"
1766
  msgstr ""
1767
 
1768
- #: core/helpers/helper-form-templates.php:1219
1769
  msgid "Montenegro"
1770
  msgstr ""
1771
 
1772
- #: core/helpers/helper-form-templates.php:1220
1773
  msgid "Saint Martin (French part)"
1774
  msgstr ""
1775
 
1776
- #: core/helpers/helper-form-templates.php:1221 core/helpers/helper-misc.php:352
1777
  msgid "Madagascar"
1778
  msgstr ""
1779
 
1780
- #: core/helpers/helper-form-templates.php:1222 core/helpers/helper-misc.php:358
1781
  msgid "Marshall Islands"
1782
  msgstr ""
1783
 
1784
- #: core/helpers/helper-form-templates.php:1223
1785
  msgid "North Macedonia, Republic of"
1786
  msgstr ""
1787
 
1788
- #: core/helpers/helper-form-templates.php:1224 core/helpers/helper-misc.php:356
1789
  msgid "Mali"
1790
  msgstr ""
1791
 
1792
- #: core/helpers/helper-form-templates.php:1225 core/helpers/helper-misc.php:371
1793
  msgid "Myanmar"
1794
  msgstr ""
1795
 
1796
- #: core/helpers/helper-form-templates.php:1226 core/helpers/helper-misc.php:367
1797
  msgid "Mongolia"
1798
  msgstr ""
1799
 
1800
- #: core/helpers/helper-form-templates.php:1227
1801
  msgid "Macao"
1802
  msgstr ""
1803
 
1804
- #: core/helpers/helper-form-templates.php:1228 core/helpers/helper-misc.php:384
1805
  msgid "Northern Mariana Islands"
1806
  msgstr ""
1807
 
1808
- #: core/helpers/helper-form-templates.php:1229 core/helpers/helper-misc.php:359
1809
  msgid "Martinique"
1810
  msgstr ""
1811
 
1812
- #: core/helpers/helper-form-templates.php:1230 core/helpers/helper-misc.php:360
1813
  msgid "Mauritania"
1814
  msgstr ""
1815
 
1816
- #: core/helpers/helper-form-templates.php:1231 core/helpers/helper-misc.php:368
1817
  msgid "Montserrat"
1818
  msgstr ""
1819
 
1820
- #: core/helpers/helper-form-templates.php:1232 core/helpers/helper-misc.php:357
1821
  msgid "Malta"
1822
  msgstr ""
1823
 
1824
- #: core/helpers/helper-form-templates.php:1233 core/helpers/helper-misc.php:361
1825
  msgid "Mauritius"
1826
  msgstr ""
1827
 
1828
- #: core/helpers/helper-form-templates.php:1234 core/helpers/helper-misc.php:355
1829
  msgid "Maldives"
1830
  msgstr ""
1831
 
1832
- #: core/helpers/helper-form-templates.php:1235 core/helpers/helper-misc.php:353
1833
  msgid "Malawi"
1834
  msgstr ""
1835
 
1836
- #: core/helpers/helper-form-templates.php:1236 core/helpers/helper-misc.php:363
1837
  msgid "Mexico"
1838
  msgstr ""
1839
 
1840
- #: core/helpers/helper-form-templates.php:1237 core/helpers/helper-misc.php:354
1841
  msgid "Malaysia"
1842
  msgstr ""
1843
 
1844
- #: core/helpers/helper-form-templates.php:1238 core/helpers/helper-misc.php:370
1845
  msgid "Mozambique"
1846
  msgstr ""
1847
 
1848
- #: core/helpers/helper-form-templates.php:1239 core/helpers/helper-misc.php:372
1849
  msgid "Namibia"
1850
  msgstr ""
1851
 
1852
- #: core/helpers/helper-form-templates.php:1240 core/helpers/helper-misc.php:377
1853
  msgid "New Caledonia"
1854
  msgstr ""
1855
 
1856
- #: core/helpers/helper-form-templates.php:1241 core/helpers/helper-misc.php:380
1857
  msgid "Niger"
1858
  msgstr ""
1859
 
1860
- #: core/helpers/helper-form-templates.php:1242 core/helpers/helper-misc.php:383
1861
  msgid "Norfolk Island"
1862
  msgstr ""
1863
 
1864
- #: core/helpers/helper-form-templates.php:1243 core/helpers/helper-misc.php:381
1865
  msgid "Nigeria"
1866
  msgstr ""
1867
 
1868
- #: core/helpers/helper-form-templates.php:1244 core/helpers/helper-misc.php:379
1869
  msgid "Nicaragua"
1870
  msgstr ""
1871
 
1872
- #: core/helpers/helper-form-templates.php:1245 core/helpers/helper-misc.php:375
1873
  msgid "Netherlands"
1874
  msgstr ""
1875
 
1876
- #: core/helpers/helper-form-templates.php:1246 core/helpers/helper-misc.php:385
1877
  msgid "Norway"
1878
  msgstr ""
1879
 
1880
- #: core/helpers/helper-form-templates.php:1247 core/helpers/helper-misc.php:374
1881
  msgid "Nepal"
1882
  msgstr ""
1883
 
1884
- #: core/helpers/helper-form-templates.php:1248 core/helpers/helper-misc.php:373
1885
  msgid "Nauru"
1886
  msgstr ""
1887
 
1888
- #: core/helpers/helper-form-templates.php:1249 core/helpers/helper-misc.php:382
1889
  msgid "Niue"
1890
  msgstr ""
1891
 
1892
- #: core/helpers/helper-form-templates.php:1250 core/helpers/helper-misc.php:378
1893
  msgid "New Zealand"
1894
  msgstr ""
1895
 
1896
- #: core/helpers/helper-form-templates.php:1251 core/helpers/helper-misc.php:386
1897
  msgid "Oman"
1898
  msgstr ""
1899
 
1900
- #: core/helpers/helper-form-templates.php:1252 core/helpers/helper-misc.php:389
1901
  msgid "Panama"
1902
  msgstr ""
1903
 
1904
- #: core/helpers/helper-form-templates.php:1253 core/helpers/helper-misc.php:392
1905
  msgid "Peru"
1906
  msgstr ""
1907
 
1908
- #: core/helpers/helper-form-templates.php:1254 core/helpers/helper-misc.php:300
1909
  msgid "French Polynesia"
1910
  msgstr ""
1911
 
1912
- #: core/helpers/helper-form-templates.php:1255 core/helpers/helper-misc.php:390
1913
  msgid "Papua New Guinea"
1914
  msgstr ""
1915
 
1916
- #: core/helpers/helper-form-templates.php:1256 core/helpers/helper-misc.php:393
1917
  msgid "Philippines"
1918
  msgstr ""
1919
 
1920
- #: core/helpers/helper-form-templates.php:1257 core/helpers/helper-misc.php:387
1921
  msgid "Pakistan"
1922
  msgstr ""
1923
 
1924
- #: core/helpers/helper-form-templates.php:1258 core/helpers/helper-misc.php:395
1925
  msgid "Poland"
1926
  msgstr ""
1927
 
1928
- #: core/helpers/helper-form-templates.php:1259
1929
  msgid "Saint Pierre and Miquelon"
1930
  msgstr ""
1931
 
1932
- #: core/helpers/helper-form-templates.php:1260 core/helpers/helper-misc.php:397
1933
  msgid "Puerto Rico"
1934
  msgstr ""
1935
 
1936
- #: core/helpers/helper-form-templates.php:1261
1937
  msgid "Palestinian Territory, Occupied"
1938
  msgstr ""
1939
 
1940
- #: core/helpers/helper-form-templates.php:1262 core/helpers/helper-misc.php:396
1941
  msgid "Portugal"
1942
  msgstr ""
1943
 
1944
- #: core/helpers/helper-form-templates.php:1263 core/helpers/helper-misc.php:388
1945
  msgid "Palau"
1946
  msgstr ""
1947
 
1948
- #: core/helpers/helper-form-templates.php:1264 core/helpers/helper-misc.php:391
1949
  msgid "Paraguay"
1950
  msgstr ""
1951
 
1952
- #: core/helpers/helper-form-templates.php:1265 core/helpers/helper-misc.php:398
1953
  msgid "Qatar"
1954
  msgstr ""
1955
 
1956
- #: core/helpers/helper-form-templates.php:1266 core/helpers/helper-misc.php:399
1957
  msgid "Reunion"
1958
  msgstr ""
1959
 
1960
- #: core/helpers/helper-form-templates.php:1267 core/helpers/helper-misc.php:400
1961
  msgid "Romania"
1962
  msgstr ""
1963
 
1964
- #: core/helpers/helper-form-templates.php:1268
1965
  msgid "Serbia"
1966
  msgstr ""
1967
 
1968
- #: core/helpers/helper-form-templates.php:1269 core/helpers/helper-misc.php:401
1969
  msgid "Russian Federation"
1970
  msgstr ""
1971
 
1972
- #: core/helpers/helper-form-templates.php:1270 core/helpers/helper-misc.php:402
1973
  msgid "Rwanda"
1974
  msgstr ""
1975
 
1976
- #: core/helpers/helper-form-templates.php:1271 core/helpers/helper-misc.php:409
1977
  msgid "Saudi Arabia"
1978
  msgstr ""
1979
 
1980
- #: core/helpers/helper-form-templates.php:1272 core/helpers/helper-misc.php:416
1981
  msgid "Solomon Islands"
1982
  msgstr ""
1983
 
1984
- #: core/helpers/helper-form-templates.php:1273 core/helpers/helper-misc.php:411
1985
  msgid "Seychelles"
1986
  msgstr ""
1987
 
1988
- #: core/helpers/helper-form-templates.php:1274 core/helpers/helper-misc.php:424
1989
  msgid "Sudan"
1990
  msgstr ""
1991
 
1992
- #: core/helpers/helper-form-templates.php:1275 core/helpers/helper-misc.php:428
1993
  msgid "Sweden"
1994
  msgstr ""
1995
 
1996
- #: core/helpers/helper-form-templates.php:1276 core/helpers/helper-misc.php:413
1997
  msgid "Singapore"
1998
  msgstr ""
1999
 
2000
- #: core/helpers/helper-form-templates.php:1277
2001
- #: core/helpers/helper-form-templates.php:1292
2002
  msgid "Saint Helena"
2003
  msgstr ""
2004
 
2005
- #: core/helpers/helper-form-templates.php:1278 core/helpers/helper-misc.php:415
2006
  msgid "Slovenia"
2007
  msgstr ""
2008
 
2009
- #: core/helpers/helper-form-templates.php:1279
2010
  msgid "Svalbard and Jan Mayen"
2011
  msgstr ""
2012
 
2013
- #: core/helpers/helper-form-templates.php:1280
2014
  msgid "Slovakia"
2015
  msgstr ""
2016
 
2017
- #: core/helpers/helper-form-templates.php:1281 core/helpers/helper-misc.php:412
2018
  msgid "Sierra Leone"
2019
  msgstr ""
2020
 
2021
- #: core/helpers/helper-form-templates.php:1282 core/helpers/helper-misc.php:407
2022
  msgid "San Marino"
2023
  msgstr ""
2024
 
2025
- #: core/helpers/helper-form-templates.php:1283 core/helpers/helper-misc.php:410
2026
  msgid "Senegal"
2027
  msgstr ""
2028
 
2029
- #: core/helpers/helper-form-templates.php:1284 core/helpers/helper-misc.php:417
2030
  msgid "Somalia"
2031
  msgstr ""
2032
 
2033
- #: core/helpers/helper-form-templates.php:1285 core/helpers/helper-misc.php:425
2034
  msgid "Suriname"
2035
  msgstr ""
2036
 
2037
- #: core/helpers/helper-form-templates.php:1286
2038
  msgid "South Sudan"
2039
  msgstr ""
2040
 
2041
- #: core/helpers/helper-form-templates.php:1287 core/helpers/helper-misc.php:408
2042
  msgid "Sao Tome and Principe"
2043
  msgstr ""
2044
 
2045
- #: core/helpers/helper-form-templates.php:1288 core/helpers/helper-misc.php:288
2046
  msgid "El Salvador"
2047
  msgstr ""
2048
 
2049
- #: core/helpers/helper-form-templates.php:1289
2050
  msgid "Sint Maarten (Dutch part)"
2051
  msgstr ""
2052
 
2053
- #: core/helpers/helper-form-templates.php:1290 core/helpers/helper-misc.php:430
2054
  msgid "Syrian Arab Republic"
2055
  msgstr ""
2056
 
2057
- #: core/helpers/helper-form-templates.php:1291
2058
  msgid "Eswatini"
2059
  msgstr ""
2060
 
2061
- #: core/helpers/helper-form-templates.php:1293 core/helpers/helper-misc.php:442
2062
  msgid "Turks and Caicos Islands"
2063
  msgstr ""
2064
 
2065
- #: core/helpers/helper-form-templates.php:1294 core/helpers/helper-misc.php:265
2066
  msgid "Chad"
2067
  msgstr ""
2068
 
2069
- #: core/helpers/helper-form-templates.php:1295 core/helpers/helper-misc.php:435
2070
  msgid "Togo"
2071
  msgstr ""
2072
 
2073
- #: core/helpers/helper-form-templates.php:1296 core/helpers/helper-misc.php:434
2074
  msgid "Thailand"
2075
  msgstr ""
2076
 
2077
- #: core/helpers/helper-form-templates.php:1297 core/helpers/helper-misc.php:432
2078
  msgid "Tajikistan"
2079
  msgstr ""
2080
 
2081
- #: core/helpers/helper-form-templates.php:1298 core/helpers/helper-misc.php:436
2082
  msgid "Tokelau"
2083
  msgstr ""
2084
 
2085
- #: core/helpers/helper-form-templates.php:1299
2086
  msgid "Timor-Leste"
2087
  msgstr ""
2088
 
2089
- #: core/helpers/helper-form-templates.php:1300 core/helpers/helper-misc.php:441
2090
  msgid "Turkmenistan"
2091
  msgstr ""
2092
 
2093
- #: core/helpers/helper-form-templates.php:1301 core/helpers/helper-misc.php:439
2094
  msgid "Tunisia"
2095
  msgstr ""
2096
 
2097
- #: core/helpers/helper-form-templates.php:1302 core/helpers/helper-misc.php:437
2098
  msgid "Tonga"
2099
  msgstr ""
2100
 
2101
- #: core/helpers/helper-form-templates.php:1303 core/helpers/helper-misc.php:440
2102
  msgid "Turkey"
2103
  msgstr ""
2104
 
2105
- #: core/helpers/helper-form-templates.php:1304 core/helpers/helper-misc.php:438
2106
  msgid "Trinidad and Tobago"
2107
  msgstr ""
2108
 
2109
- #: core/helpers/helper-form-templates.php:1305 core/helpers/helper-misc.php:443
2110
  msgid "Tuvalu"
2111
  msgstr ""
2112
 
2113
- #: core/helpers/helper-form-templates.php:1306
2114
  msgid "Taiwan"
2115
  msgstr ""
2116
 
2117
- #: core/helpers/helper-form-templates.php:1307 core/helpers/helper-misc.php:433
2118
  msgid "Tanzania, United Republic of"
2119
  msgstr ""
2120
 
2121
- #: core/helpers/helper-form-templates.php:1308 core/helpers/helper-misc.php:445
2122
  msgid "Ukraine"
2123
  msgstr ""
2124
 
2125
- #: core/helpers/helper-form-templates.php:1309 core/helpers/helper-misc.php:444
2126
  msgid "Uganda"
2127
  msgstr ""
2128
 
2129
- #: core/helpers/helper-form-templates.php:1310
2130
  msgid "United States of America"
2131
  msgstr ""
2132
 
2133
- #: core/helpers/helper-form-templates.php:1311 core/helpers/helper-misc.php:450
2134
  msgid "Uruguay"
2135
  msgstr ""
2136
 
2137
- #: core/helpers/helper-form-templates.php:1312 core/helpers/helper-misc.php:451
2138
  msgid "Uzbekistan"
2139
  msgstr ""
2140
 
2141
- #: core/helpers/helper-form-templates.php:1313 core/helpers/helper-misc.php:319
2142
  msgid "Holy See (Vatican City State)"
2143
  msgstr ""
2144
 
2145
- #: core/helpers/helper-form-templates.php:1314 core/helpers/helper-misc.php:405
2146
  msgid "Saint Vincent and the Grenadines"
2147
  msgstr ""
2148
 
2149
- #: core/helpers/helper-form-templates.php:1315 core/helpers/helper-misc.php:453
2150
  msgid "Venezuela"
2151
  msgstr ""
2152
 
2153
- #: core/helpers/helper-form-templates.php:1316
2154
  msgid "Virgin Islands, British"
2155
  msgstr ""
2156
 
2157
- #: core/helpers/helper-form-templates.php:1317
2158
  msgid "Virgin Islands, U.S."
2159
  msgstr ""
2160
 
2161
- #: core/helpers/helper-form-templates.php:1318 core/helpers/helper-misc.php:454
2162
  msgid "Vietnam"
2163
  msgstr ""
2164
 
2165
- #: core/helpers/helper-form-templates.php:1319 core/helpers/helper-misc.php:452
2166
  msgid "Vanuatu"
2167
  msgstr ""
2168
 
2169
- #: core/helpers/helper-form-templates.php:1320
2170
  msgid "Wallis and Futuna"
2171
  msgstr ""
2172
 
2173
- #: core/helpers/helper-form-templates.php:1321 core/helpers/helper-misc.php:406
2174
  msgid "Samoa"
2175
  msgstr ""
2176
 
2177
- #: core/helpers/helper-form-templates.php:1322
2178
  msgid "Kosovo"
2179
  msgstr ""
2180
 
2181
- #: core/helpers/helper-form-templates.php:1323 core/helpers/helper-misc.php:459
2182
  msgid "Yemen"
2183
  msgstr ""
2184
 
2185
- #: core/helpers/helper-form-templates.php:1324 core/helpers/helper-misc.php:362
2186
  msgid "Mayotte"
2187
  msgstr ""
2188
 
2189
- #: core/helpers/helper-form-templates.php:1325 core/helpers/helper-misc.php:418
2190
  msgid "South Africa"
2191
  msgstr ""
2192
 
2193
- #: core/helpers/helper-form-templates.php:1326 core/helpers/helper-misc.php:461
2194
  msgid "Zambia"
2195
  msgstr ""
2196
 
2197
- #: core/helpers/helper-form-templates.php:1327 core/helpers/helper-misc.php:462
2198
  msgid "Zimbabwe"
2199
  msgstr ""
2200
 
@@ -2875,41 +2854,41 @@ msgid "Yoruba"
2875
  msgstr ""
2876
 
2877
  #: core/helpers/helper-misc.php:931
2878
- #: core/templates/parts/customize-checkbox.php:61
2879
- #: core/templates/parts/customize-checkbox.php:71
2880
- #: core/templates/parts/customize-radio.php:56
2881
  msgid "Full"
2882
  msgstr ""
2883
 
2884
  #: core/helpers/helper-misc.php:932
2885
- #: core/templates/parts/customize-checkbox.php:62
2886
- #: core/templates/parts/customize-checkbox.php:72
2887
- #: core/templates/parts/customize-radio.php:57
2888
  msgid "Half"
2889
  msgstr ""
2890
 
2891
  #: core/helpers/helper-misc.php:933
2892
- #: core/templates/parts/customize-checkbox.php:63
2893
- #: core/templates/parts/customize-checkbox.php:73
2894
- #: core/templates/parts/customize-radio.php:58
2895
  msgid "Third"
2896
  msgstr ""
2897
 
2898
  #: core/helpers/helper-misc.php:934
2899
- #: core/templates/parts/customize-checkbox.php:64
2900
- #: core/templates/parts/customize-radio.php:59
2901
  msgid "Quarter"
2902
  msgstr ""
2903
 
2904
  #: core/helpers/helper-misc.php:935
2905
- #: core/templates/parts/customize-checkbox.php:65
2906
- #: core/templates/parts/customize-checkbox.php:74
2907
- #: core/templates/parts/customize-radio.php:60
2908
  msgid "Auto"
2909
  msgstr ""
2910
 
2911
  #: core/helpers/helper-misc.php:940
2912
- #: core/templates/parts/customize-checkbox.php:79
2913
  msgid "Apply to all fields"
2914
  msgstr ""
2915
 
@@ -2953,15 +2932,15 @@ msgstr ""
2953
  msgid "You are customizing"
2954
  msgstr ""
2955
 
2956
- #: core/templates/customize-form-build.php:5
2957
  msgid "Add title"
2958
  msgstr ""
2959
 
2960
- #: core/templates/customize-form-build.php:10
2961
  msgid "Add fields here to appear in your form."
2962
  msgstr ""
2963
 
2964
- #: core/templates/customize-form-build.php:13
2965
  msgid "Add a Field"
2966
  msgstr ""
2967
 
@@ -2975,15 +2954,15 @@ msgid "Setup"
2975
  msgstr ""
2976
 
2977
  #: core/templates/customize-form-item.php:24
2978
- #: core/templates/customize-form-steps.php:6
2979
  msgid "Style"
2980
  msgstr ""
2981
 
2982
  #: core/templates/customize-form-item.php:33
2983
  #: core/templates/customize-form-part-footer.php:3
2984
- #: core/templates/parts/customize-checkbox.php:113
2985
- #: core/templates/parts/customize-radio.php:96
2986
- #: core/templates/parts/customize-select.php:94
2987
  msgid "Delete"
2988
  msgstr ""
2989
 
@@ -2992,13 +2971,6 @@ msgid "Preview"
2992
  msgstr ""
2993
 
2994
  #: core/templates/customize-form-part-footer.php:5
2995
- #: core/templates/parts/customize-checkbox.php:114
2996
- #: core/templates/parts/customize-radio.php:97
2997
- #: core/templates/parts/customize-select.php:95
2998
- msgid "More"
2999
- msgstr ""
3000
-
3001
- #: core/templates/customize-form-part-footer.php:6
3002
  #: core/templates/customize-form-part-logic.php:2
3003
  msgid "Logic"
3004
  msgstr ""
@@ -3028,6 +3000,10 @@ msgstr ""
3028
  msgid "Email"
3029
  msgstr ""
3030
 
 
 
 
 
3031
  #: core/templates/customize-header-actions.php:5
3032
  msgid "Save"
3033
  msgstr ""
@@ -3064,7 +3040,7 @@ msgstr ""
3064
  #: core/templates/parts/customize-checkbox.php:17
3065
  #: core/templates/parts/customize-radio.php:17
3066
  #: core/templates/parts/customize-select.php:21
3067
- msgid "No choices added yet. Add one by clicking <i>Add Choice</i> below."
3068
  msgstr ""
3069
 
3070
  #: core/templates/parts/customize-checkbox.php:21
@@ -3098,146 +3074,120 @@ msgid "Cancel"
3098
  msgstr ""
3099
 
3100
  #: core/templates/parts/customize-checkbox.php:37
3101
- #: core/templates/parts/customize-email.php:20
3102
- #: core/templates/parts/customize-multi-line-text.php:20
3103
- #: core/templates/parts/customize-number.php:30
3104
  #: core/templates/parts/customize-radio.php:37
3105
  #: core/templates/parts/customize-select.php:41
3106
- #: core/templates/parts/customize-single-line-text.php:20
3107
- msgid "This is required"
3108
  msgstr ""
3109
 
3110
- #: core/templates/parts/customize-checkbox.php:48
3111
  msgid "Add 'select all' choice"
3112
  msgstr ""
3113
 
3114
- #: core/templates/parts/customize-checkbox.php:52
3115
- #: core/templates/parts/customize-radio.php:47
3116
  msgid "Choices display"
3117
  msgstr ""
3118
 
3119
- #: core/templates/parts/customize-checkbox.php:54
3120
- #: core/templates/parts/customize-radio.php:49
3121
  msgid "Horizontal"
3122
  msgstr ""
3123
 
3124
- #: core/templates/parts/customize-checkbox.php:55
3125
- #: core/templates/parts/customize-radio.php:50
3126
  msgid "Vertical"
3127
  msgstr ""
3128
 
3129
- #: core/templates/parts/customize-checkbox.php:59
3130
- #: core/templates/parts/customize-radio.php:54
3131
  msgid "Choices width"
3132
  msgstr ""
3133
 
3134
- #: core/templates/parts/customize-checkbox.php:86
3135
- #: core/templates/parts/customize-email.php:64
3136
- #: core/templates/parts/customize-multi-line-text.php:69
3137
- #: core/templates/parts/customize-number.php:81
3138
- #: core/templates/parts/customize-radio.php:67
3139
- #: core/templates/parts/customize-select.php:67
3140
- #: core/templates/parts/customize-single-line-text.php:44
3141
  msgid "CSS classes"
3142
  msgstr ""
3143
 
3144
- #: core/templates/parts/customize-checkbox.php:109
3145
- #: core/templates/parts/customize-radio.php:92
3146
- #: core/templates/parts/customize-select.php:90
3147
  msgid "Make this choice default"
3148
  msgstr ""
3149
 
3150
- #: core/templates/parts/customize-email.php:31
3151
- msgid "Suggest common email domains"
3152
- msgstr ""
3153
-
3154
- #: core/templates/parts/customize-email.php:36
3155
- #: core/templates/parts/customize-number.php:56
3156
- msgid "Require confirmation"
3157
- msgstr ""
3158
-
3159
- #: core/templates/parts/customize-email.php:41
3160
- #: core/templates/parts/customize-number.php:61
3161
- msgid "'Confirmation' label"
3162
  msgstr ""
3163
 
3164
- #: core/templates/parts/customize-email.php:45
3165
- #: core/templates/parts/customize-number.php:65
3166
- msgid "'Confirmation' placeholder"
 
 
3167
  msgstr ""
3168
 
3169
- #: core/templates/parts/customize-email.php:51
3170
- #: core/templates/parts/customize-number.php:70
3171
- #: core/templates/parts/customize-single-line-text.php:30
3172
  msgid "Prefix"
3173
  msgstr ""
3174
 
3175
- #: core/templates/parts/customize-email.php:55
3176
- #: core/templates/parts/customize-number.php:74
3177
- #: core/templates/parts/customize-single-line-text.php:35
3178
  msgid "Suffix"
3179
  msgstr ""
3180
 
3181
- #: core/templates/parts/customize-multi-line-text.php:31
3182
  msgid "Limit words/characters"
3183
  msgstr ""
3184
 
3185
- #: core/templates/parts/customize-multi-line-text.php:37
3186
  msgid "Limit"
3187
  msgstr ""
3188
 
3189
- #: core/templates/parts/customize-multi-line-text.php:41
3190
- msgid "Count"
3191
- msgstr ""
3192
-
3193
  #: core/templates/parts/customize-multi-line-text.php:44
3194
- msgid "Min words"
3195
- msgstr ""
3196
-
3197
- #: core/templates/parts/customize-multi-line-text.php:45
3198
- msgid "Max characters"
3199
- msgstr ""
3200
-
3201
- #: core/templates/parts/customize-multi-line-text.php:50
3202
- msgid "'Characters' label"
3203
- msgstr ""
3204
-
3205
- #: core/templates/parts/customize-multi-line-text.php:54
3206
- msgid "'Words' label"
3207
  msgstr ""
3208
 
3209
- #: core/templates/parts/customize-multi-line-text.php:60
3210
  msgid "Rows"
3211
  msgstr ""
3212
 
3213
- #: core/templates/parts/customize-number.php:20
3214
  msgid "Min number"
3215
  msgstr ""
3216
 
3217
- #: core/templates/parts/customize-number.php:24
3218
  msgid "Max number"
3219
  msgstr ""
3220
 
3221
- #: core/templates/parts/customize-number.php:41
3222
  msgid "Use number separators"
3223
  msgstr ""
3224
 
3225
- #: core/templates/parts/customize-number.php:46
3226
  msgid "Grouping"
3227
  msgstr ""
3228
 
3229
- #: core/templates/parts/customize-number.php:50
3230
  msgid "Decimal"
3231
  msgstr ""
3232
 
3233
- #: core/templates/parts/customize-select.php:52
3234
  msgid "Make searchable"
3235
  msgstr ""
3236
 
3237
- #: core/templates/parts/customize-select.php:57
3238
- msgid "'No results' label"
3239
- msgstr ""
3240
-
3241
  #: core/templates/preview-form-pencil.php:3
3242
  msgid "Click to edit this part."
3243
  msgstr ""
@@ -3277,7 +3227,7 @@ msgid ""
3277
  msgstr ""
3278
 
3279
  #: inc/classes/class-happyforms.php:132
3280
- msgid "Save abandoned forms"
3281
  msgstr ""
3282
 
3283
  #: inc/classes/class-happyforms.php:133
@@ -3285,7 +3235,7 @@ msgid "Keep incomplete users responses stored in your WordPress database."
3285
  msgstr ""
3286
 
3287
  #: inc/classes/class-happyforms.php:139
3288
- msgid "Allow save and resume"
3289
  msgstr ""
3290
 
3291
  #: inc/classes/class-happyforms.php:140
@@ -3295,7 +3245,7 @@ msgid ""
3295
  msgstr ""
3296
 
3297
  #: inc/classes/class-happyforms.php:146
3298
- msgid "Preview before submit"
3299
  msgstr ""
3300
 
3301
  #: inc/classes/class-happyforms.php:147
@@ -3558,13 +3508,18 @@ msgstr ""
3558
  msgid "field"
3559
  msgstr ""
3560
 
 
 
 
 
3561
  #. Author URI of the plugin/theme
3562
  msgid "https://happyforms.me"
3563
  msgstr ""
3564
 
3565
  #. Description of the plugin/theme
3566
- msgid ""
3567
- "Your friendly drag and drop contact form builder for creating contact "
3568
- "forms, lead generation forms, feedback forms, quote forms, survey forms and "
3569
- "more!"
 
3570
  msgstr ""
1
+ # Copyright (C) 2021 Happyforms
2
+ # This file is distributed under the same license as the Happyforms (free) package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Happyforms (free) 1.10.0\n"
6
  "Report-Msgid-Bugs-To: https://thethemefoundry.com/support/\n"
7
+ "POT-Creation-Date: 2021-02-16 14:03:18+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=utf-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
13
  "Language-Team: The Theme Foundry\n"
14
  "X-Generator: grunt-wp-i18n 0.4.9\n"
15
 
16
+ #: core/classes/class-block.php:49 core/classes/class-form-controller.php:68
17
+ #: core/classes/class-happyforms-core.php:174
18
+ #: core/classes/class-happyforms-core.php:175
19
+ #: core/classes/class-happyforms-widget.php:13
20
+ msgid "Forms"
21
  msgstr ""
22
 
23
+ #: core/classes/class-block.php:50 core/classes/class-happyforms-widget.php:15
24
+ msgid "Displays a form."
25
  msgstr ""
26
 
27
  #: core/classes/class-block.php:102
139
  msgid "Last modified"
140
  msgstr ""
141
 
142
+ #: core/classes/class-form-admin.php:353
143
  msgid "Edit"
144
  msgstr ""
145
 
161
  msgid "Undo"
162
  msgstr ""
163
 
 
 
 
 
164
  #: core/classes/class-form-controller.php:69
165
  msgid "Form"
166
  msgstr ""
167
 
168
  #: core/classes/class-form-controller.php:70
169
+ #: core/classes/class-happyforms-core.php:190
170
+ #: core/classes/class-happyforms-core.php:191
171
  msgid "Add New"
172
  msgstr ""
173
 
198
 
199
  #: core/classes/class-form-controller.php:79
200
  #: core/classes/class-form-controller.php:80
201
+ #: core/classes/class-happyforms-core.php:182
202
+ #: core/classes/class-happyforms-core.php:183
203
  msgid "All Forms"
204
  msgstr ""
205
 
207
  msgid "(no title)"
208
  msgstr ""
209
 
210
+ #: core/classes/class-form-controller.php:618
211
  msgid " Copy"
212
  msgstr ""
213
 
226
  msgstr ""
227
 
228
  #: core/classes/class-form-email.php:87
229
+ msgid "Email me a copy of each submission"
230
  msgstr ""
231
 
232
  #: core/classes/class-form-email.php:96 core/templates/admin-tracking.php:15
233
  msgid "Email address"
234
  msgstr ""
235
 
 
 
 
 
 
 
 
236
  #: core/classes/class-form-email.php:102
237
  msgid "Email Bcc address"
238
  msgstr ""
239
 
 
 
 
 
 
 
 
240
  #: core/classes/class-form-email.php:108 core/classes/class-form-email.php:142
241
  msgid "Email display name"
242
  msgstr ""
243
 
 
 
 
 
244
  #: core/classes/class-form-email.php:114 core/classes/class-form-email.php:148
245
  msgid "Email subject"
246
  msgstr ""
247
 
 
 
 
 
 
 
248
  #: core/classes/class-form-email.php:123
249
+ msgid "Email respondent a copy of their submission"
250
  msgstr ""
251
 
252
  #: core/classes/class-form-email.php:132
257
  msgid "Reply email address"
258
  msgstr ""
259
 
260
+ #: core/classes/class-form-email.php:154
261
+ msgid "Email content"
262
+ msgstr ""
263
+
264
+ #: core/classes/class-form-email.php:160
265
+ msgid "Include submitted values"
266
+ msgstr ""
267
+
268
+ #: core/classes/class-form-messages.php:32
269
+ #: core/templates/parts/customize-multi-line-text.php:47
270
+ msgid "Min words"
271
+ msgstr ""
272
+
273
+ #: core/classes/class-form-messages.php:36
274
+ #: core/classes/parts/class-part-multi-line-text.php:74
275
+ #: core/templates/parts/customize-multi-line-text.php:46
276
+ msgid "Max words"
277
+ msgstr ""
278
+
279
+ #: core/classes/class-form-messages.php:40
280
+ #: core/classes/parts/class-part-multi-line-text.php:70
281
+ #: core/templates/parts/customize-multi-line-text.php:49
282
+ msgid "Min characters"
283
+ msgstr ""
284
+
285
+ #: core/classes/class-form-messages.php:44
286
+ #: core/templates/parts/customize-multi-line-text.php:48
287
+ msgid "Max characters"
288
+ msgstr ""
289
+
290
+ #: core/classes/class-form-messages.php:48
291
+ msgid "Nothing found"
292
  msgstr ""
293
 
294
+ #: core/classes/class-form-messages.php:52
295
+ msgid "Oops. This number isn't big enough."
296
+ msgstr ""
297
+
298
+ #: core/classes/class-form-messages.php:56
299
+ msgid "Oops. This number is too big."
300
+ msgstr ""
301
+
302
+ #: core/classes/class-form-messages.php:73
303
+ msgid "Alerts"
304
+ msgstr ""
305
+
306
+ #: core/classes/class-form-messages.php:74
307
  msgid ""
308
+ "These messages are show to respondents at the very top of the form to "
309
+ "communicate the form’s status."
310
  msgstr ""
311
 
312
+ #: core/classes/class-form-messages.php:84
313
+ msgid "Buttons"
314
  msgstr ""
315
 
316
+ #: core/classes/class-form-messages.php:85
317
  msgid ""
318
+ "The messages are shown to respondents as they fill out the form to help "
319
+ "them trigger an action."
320
  msgstr ""
321
 
322
+ #: core/classes/class-form-messages.php:94
323
+ msgid "Errors"
324
  msgstr ""
325
 
326
+ #: core/classes/class-form-messages.php:95
327
+ msgid ""
328
+ "These messages are show to respondents when they try to submit their reply "
329
+ "but one or more fields has a mistake."
330
  msgstr ""
331
 
332
+ #: core/classes/class-form-messages.php:104
333
+ msgid "Hints"
334
  msgstr ""
335
 
336
+ #: core/classes/class-form-messages.php:105
337
+ msgid ""
338
+ "These messages are show to respondents as they fill our the form to help "
339
+ "them avoid mistakes."
340
  msgstr ""
341
 
342
+ #: core/classes/class-form-messages.php:114
343
+ msgid "Number too small"
344
  msgstr ""
345
 
346
+ #: core/classes/class-form-messages.php:119
347
+ msgid "Number too big"
348
  msgstr ""
349
 
350
+ #: core/classes/class-form-messages.php:124
351
+ msgid "Search couldn't find anything"
352
  msgstr ""
353
 
354
+ #: core/classes/class-form-messages.php:129
355
+ msgid "Minimum characters"
356
  msgstr ""
357
 
358
+ #: core/classes/class-form-messages.php:134
359
+ msgid "Maximum characters"
360
  msgstr ""
361
 
362
+ #: core/classes/class-form-messages.php:139
363
+ msgid "Minimum words"
364
  msgstr ""
365
 
366
+ #: core/classes/class-form-messages.php:144
367
+ msgid "Maximum words"
368
  msgstr ""
369
 
370
+ #: core/classes/class-form-part-library.php:189
371
+ msgid "Invalid data"
372
  msgstr ""
373
 
374
+ #: core/classes/class-form-part-library.php:196
375
+ msgid "Field definition not found"
376
  msgstr ""
377
 
378
+ #: core/classes/class-form-part-library.php:227
379
+ msgid "Missing validation callback for field %s"
380
  msgstr ""
381
 
382
+ #: core/classes/class-form-setup.php:79
383
+ msgid "This field is required."
384
  msgstr ""
385
 
386
+ #: core/classes/class-form-setup.php:103
387
+ msgid "Validate your submission"
388
  msgstr ""
389
 
390
+ #: core/classes/class-form-setup.php:143
391
+ msgid "Thank you. Your reply has been sent."
 
 
 
392
  msgstr ""
393
 
394
+ #: core/classes/class-form-setup.php:147
395
+ msgid "Bummer. We can't submit your reply. Please check for mistakes."
396
  msgstr ""
397
 
398
+ #: core/classes/class-form-setup.php:151
399
+ msgid "Send"
400
  msgstr ""
401
 
402
+ #: core/classes/class-form-setup.php:155
403
+ msgid "(optional)"
 
 
404
  msgstr ""
405
 
406
+ #: core/classes/class-form-setup.php:169
407
+ msgid "After the form is submitted"
408
  msgstr ""
409
 
410
+ #: core/classes/class-form-setup.php:171
411
+ msgid "Show a message"
 
 
412
  msgstr ""
413
 
414
+ #: core/classes/class-form-setup.php:172
415
+ msgid "Show a message and allow to resubmit the form"
416
  msgstr ""
417
 
418
+ #: core/classes/class-form-setup.php:173
419
+ msgid "Redirect to a web address"
420
  msgstr ""
421
 
422
+ #: core/classes/class-form-setup.php:180
423
+ #: core/templates/customize-form-parts-drawer.php:38
424
+ #: inc/templates/customize-controls/checkbox_dummy.php:7
425
+ #: inc/templates/customize-controls/email-parts-list-dummy.php:11
426
+ msgid "Upgrade"
427
  msgstr ""
428
 
429
+ #: core/classes/class-form-setup.php:193
430
+ msgid "Add custom CSS classes to submit button"
 
 
431
  msgstr ""
432
 
433
+ #: core/classes/class-form-setup.php:202
434
+ msgid "Submit button CSS classes"
435
  msgstr ""
436
 
437
+ #: core/classes/class-form-setup.php:212
438
+ msgid "Add custom HTML ID to form"
439
  msgstr ""
440
 
441
  #: core/classes/class-form-setup.php:222
442
  msgid "Form HTML ID"
443
  msgstr ""
444
 
445
+ #: core/classes/class-form-setup.php:240
446
+ msgid "Form is successfully submitted"
447
+ msgstr ""
448
+
449
+ #: core/classes/class-form-setup.php:245
450
+ msgid "Form can’t be submitted"
451
+ msgstr ""
452
+
453
+ #: core/classes/class-form-setup.php:251
454
+ msgid "Submit form"
455
+ msgstr ""
456
+
457
+ #: core/classes/class-form-setup.php:256
458
+ msgid "Question is optional"
459
+ msgstr ""
460
+
461
  #: core/classes/class-form-styles.php:53
462
  msgid "Left-to-right"
463
  msgstr ""
591
 
592
  #: core/classes/class-form-styles.php:560
593
  #: core/classes/class-form-styles.php:885 core/helpers/helper-misc.php:929
594
+ #: core/templates/parts/customize-checkbox.php:68
595
  msgid "Width"
596
  msgstr ""
597
 
640
  msgstr ""
641
 
642
  #: core/classes/class-form-styles.php:615
 
643
  #: inc/classes/parts/class-part-layout-title-dummy.php:8
644
  #: inc/classes/parts/class-part-title-dummy.php:8
645
  msgid "Title"
730
  msgstr ""
731
 
732
  #: core/classes/class-form-styles.php:720
733
+ msgid "Hint alignment"
734
  msgstr ""
735
 
736
  #: core/classes/class-form-styles.php:725
737
+ msgid "Hint font size"
738
  msgstr ""
739
 
740
  #: core/classes/class-form-styles.php:730
741
+ msgid "Hint display"
742
  msgstr ""
743
 
744
  #: core/classes/class-form-styles.php:735
751
 
752
  #: core/classes/class-form-styles.php:750
753
  #: core/templates/parts/customize-checkbox.php:4
754
+ #: core/templates/parts/customize-checkbox.php:102
755
  #: core/templates/parts/customize-email.php:4
756
  #: core/templates/parts/customize-multi-line-text.php:4
757
  #: core/templates/parts/customize-number.php:4
758
  #: core/templates/parts/customize-radio.php:4
759
+ #: core/templates/parts/customize-radio.php:85
760
  #: core/templates/parts/customize-select.php:4
761
+ #: core/templates/parts/customize-select.php:77
762
  #: core/templates/parts/customize-single-line-text.php:4
763
  msgid "Label"
764
  msgstr ""
779
 
780
  #: core/classes/class-form-styles.php:765
781
  #: core/templates/parts/customize-checkbox.php:8
782
+ #: core/templates/parts/customize-email.php:16
783
+ #: core/templates/parts/customize-multi-line-text.php:16
784
+ #: core/templates/parts/customize-number.php:16
785
  #: core/templates/parts/customize-radio.php:8
786
  #: core/templates/parts/customize-select.php:12
787
+ #: core/templates/parts/customize-single-line-text.php:16
788
+ msgid "Hint"
789
  msgstr ""
790
 
791
  #: core/classes/class-form-styles.php:770
891
  msgid "Additional CSS"
892
  msgstr ""
893
 
894
+ #: core/classes/class-happyforms-core.php:198
895
+ #: core/classes/class-happyforms-core.php:199
 
 
 
 
896
  msgid "Activity"
897
  msgstr ""
898
 
899
+ #: core/classes/class-happyforms-core.php:207
900
+ #: core/classes/class-happyforms-core.php:208
901
  msgid "Integrations"
902
  msgstr ""
903
 
904
+ #: core/classes/class-happyforms-core.php:216
905
+ #: core/classes/class-happyforms-core.php:217
906
  msgid "Settings"
907
  msgstr ""
908
 
909
+ #: core/classes/class-happyforms-core.php:225
910
+ #: core/classes/class-happyforms-core.php:226
911
  msgid "Welcome"
912
  msgstr ""
913
 
914
+ #: core/classes/class-happyforms-core.php:459
915
+ msgid "Add form"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
916
  msgstr ""
917
 
918
  #: core/classes/class-happyforms-widget.php:79
953
  msgid "Error description"
954
  msgstr ""
955
 
956
+ #: core/classes/class-validation-messages.php:71
957
+ msgid "Field is answered incorrectly"
958
  msgstr ""
959
 
960
+ #: core/classes/class-validation-messages.php:76
961
+ msgid "Required field isn't answered"
962
  msgstr ""
963
 
964
+ #: core/classes/class-validation-messages.php:81
965
+ msgid "Required choice isn't selected"
966
  msgstr ""
967
 
968
+ #: core/classes/class-validation-messages.php:86
969
+ msgid "Too many words/characters typed"
970
  msgstr ""
971
 
972
+ #: core/classes/class-validation-messages.php:91
973
+ msgid "Not enough words/characters typed"
974
  msgstr ""
975
 
976
+ #: core/classes/class-validation-messages.php:101
977
+ msgid "Oops. Looks like there's a mistake here."
978
  msgstr ""
979
 
980
+ #: core/classes/class-validation-messages.php:105
981
+ msgid "Oops. Please answer this question."
982
+ msgstr ""
983
+
984
+ #: core/classes/class-validation-messages.php:109
985
+ msgid "Oops. Please make a selection."
986
+ msgstr ""
987
+
988
+ #: core/classes/class-validation-messages.php:113
989
+ msgid "Oops. This answer is too long."
990
+ msgstr ""
991
+
992
+ #: core/classes/class-validation-messages.php:117
993
+ msgid "Oops. This answer isn't long enough."
994
  msgstr ""
995
 
996
  #: core/classes/class-wp-customize-form-manager.php:167
1002
  msgstr ""
1003
 
1004
  #: core/classes/class-wp-customize-form-manager.php:169
1005
+ msgid "Add your form to a page or post"
1006
  msgstr ""
1007
 
1008
  #: core/classes/class-wp-customize-form-manager.php:170
1010
  msgstr ""
1011
 
1012
  #: core/classes/class-wp-customize-form-manager.php:170
1013
+ msgid "Select the Forms content block."
1014
  msgstr ""
1015
 
1016
  #: core/classes/class-wp-customize-form-manager.php:170
1023
  msgstr ""
1024
 
1025
  #: core/classes/class-wp-customize-form-manager.php:171
1026
+ msgid "Use your form in a widget area"
1027
  msgstr ""
1028
 
1029
  #: core/classes/class-wp-customize-form-manager.php:173
1031
  msgstr ""
1032
 
1033
  #: core/classes/class-wp-customize-form-manager.php:174
1034
+ msgid "Drag the Forms widget to your sidebar."
1035
  msgstr ""
1036
 
1037
  #: core/classes/class-wp-customize-form-manager.php:176
1059
  msgid "For checkboxes allowing multiple selections."
1060
  msgstr ""
1061
 
 
 
 
 
 
 
 
 
 
 
 
 
1062
  #: core/classes/parts/class-part-checkbox.php:83
1063
  #: core/templates/parts/frontend-checkbox.php:13
1064
  msgid "Select all"
1080
  msgid "For paragraph text fields."
1081
  msgstr ""
1082
 
 
 
 
 
 
 
 
 
 
 
1083
  #: core/classes/parts/class-part-number.php:8
1084
  msgid "Number"
1085
  msgstr ""
1104
  msgid "For selecting one option from a long list. Default value adjustable."
1105
  msgstr ""
1106
 
 
 
 
 
1107
  #: core/classes/parts/class-part-single-line-text.php:8
1108
  msgid "Short Answer"
1109
  msgstr ""
1152
  msgid "Spam protection, skip this field"
1153
  msgstr ""
1154
 
1155
+ #: core/helpers/helper-form-templates.php:1006
1156
  msgid "January"
1157
  msgstr ""
1158
 
1159
+ #: core/helpers/helper-form-templates.php:1007
1160
  msgid "February"
1161
  msgstr ""
1162
 
1163
+ #: core/helpers/helper-form-templates.php:1008
1164
  msgid "March"
1165
  msgstr ""
1166
 
1167
+ #: core/helpers/helper-form-templates.php:1009
1168
  msgid "April"
1169
  msgstr ""
1170
 
1171
+ #: core/helpers/helper-form-templates.php:1010
1172
  msgid "May"
1173
  msgstr ""
1174
 
1175
+ #: core/helpers/helper-form-templates.php:1011
1176
  msgid "June"
1177
  msgstr ""
1178
 
1179
+ #: core/helpers/helper-form-templates.php:1012
1180
  msgid "July"
1181
  msgstr ""
1182
 
1183
+ #: core/helpers/helper-form-templates.php:1013
1184
  msgid "August"
1185
  msgstr ""
1186
 
1187
+ #: core/helpers/helper-form-templates.php:1014
1188
  msgid "September"
1189
  msgstr ""
1190
 
1191
+ #: core/helpers/helper-form-templates.php:1015
1192
  msgid "October"
1193
  msgstr ""
1194
 
1195
+ #: core/helpers/helper-form-templates.php:1016
1196
  msgid "November"
1197
  msgstr ""
1198
 
1199
+ #: core/helpers/helper-form-templates.php:1017
1200
  msgid "December"
1201
  msgstr ""
1202
 
1203
+ #: core/helpers/helper-form-templates.php:1058
1204
  msgid "Ascension Island"
1205
  msgstr ""
1206
 
1207
+ #: core/helpers/helper-form-templates.php:1059 core/helpers/helper-misc.php:228
1208
  msgid "Andorra"
1209
  msgstr ""
1210
 
1211
+ #: core/helpers/helper-form-templates.php:1060 core/helpers/helper-misc.php:446
1212
  msgid "United Arab Emirates"
1213
  msgstr ""
1214
 
1215
+ #: core/helpers/helper-form-templates.php:1061 core/helpers/helper-misc.php:224
1216
  msgid "Afghanistan"
1217
  msgstr ""
1218
 
1219
+ #: core/helpers/helper-form-templates.php:1062 core/helpers/helper-misc.php:232
1220
  msgid "Antigua and Barbuda"
1221
  msgstr ""
1222
 
1223
+ #: core/helpers/helper-form-templates.php:1063 core/helpers/helper-misc.php:230
1224
  msgid "Anguilla"
1225
  msgstr ""
1226
 
1227
+ #: core/helpers/helper-form-templates.php:1064 core/helpers/helper-misc.php:225
1228
  msgid "Albania"
1229
  msgstr ""
1230
 
1231
+ #: core/helpers/helper-form-templates.php:1065 core/helpers/helper-misc.php:234
1232
  msgid "Armenia"
1233
  msgstr ""
1234
 
1235
+ #: core/helpers/helper-form-templates.php:1066 core/helpers/helper-misc.php:229
1236
  msgid "Angola"
1237
  msgstr ""
1238
 
1239
+ #: core/helpers/helper-form-templates.php:1067 core/helpers/helper-misc.php:233
1240
  msgid "Argentina"
1241
  msgstr ""
1242
 
1243
+ #: core/helpers/helper-form-templates.php:1068 core/helpers/helper-misc.php:227
1244
  msgid "American Samoa"
1245
  msgstr ""
1246
 
1247
+ #: core/helpers/helper-form-templates.php:1069 core/helpers/helper-misc.php:237
1248
  msgid "Austria"
1249
  msgstr ""
1250
 
1251
+ #: core/helpers/helper-form-templates.php:1070 core/helpers/helper-misc.php:236
1252
  msgid "Australia"
1253
  msgstr ""
1254
 
1255
+ #: core/helpers/helper-form-templates.php:1071 core/helpers/helper-misc.php:235
1256
  msgid "Aruba"
1257
  msgstr ""
1258
 
1259
+ #: core/helpers/helper-form-templates.php:1072
1260
  msgid "Åland Islands"
1261
  msgstr ""
1262
 
1263
+ #: core/helpers/helper-form-templates.php:1073 core/helpers/helper-misc.php:238
1264
  msgid "Azerbaijan"
1265
  msgstr ""
1266
 
1267
+ #: core/helpers/helper-form-templates.php:1074
1268
  msgid "Bosnia and Herzegovina"
1269
  msgstr ""
1270
 
1271
+ #: core/helpers/helper-form-templates.php:1075 core/helpers/helper-misc.php:242
1272
  msgid "Barbados"
1273
  msgstr ""
1274
 
1275
+ #: core/helpers/helper-form-templates.php:1076 core/helpers/helper-misc.php:241
1276
  msgid "Bangladesh"
1277
  msgstr ""
1278
 
1279
+ #: core/helpers/helper-form-templates.php:1077 core/helpers/helper-misc.php:244
1280
  msgid "Belgium"
1281
  msgstr ""
1282
 
1283
+ #: core/helpers/helper-form-templates.php:1078 core/helpers/helper-misc.php:257
1284
  msgid "Burkina Faso"
1285
  msgstr ""
1286
 
1287
+ #: core/helpers/helper-form-templates.php:1079 core/helpers/helper-misc.php:256
1288
  msgid "Bulgaria"
1289
  msgstr ""
1290
 
1291
+ #: core/helpers/helper-form-templates.php:1080 core/helpers/helper-misc.php:240
1292
  msgid "Bahrain"
1293
  msgstr ""
1294
 
1295
+ #: core/helpers/helper-form-templates.php:1081 core/helpers/helper-misc.php:258
1296
  msgid "Burundi"
1297
  msgstr ""
1298
 
1299
+ #: core/helpers/helper-form-templates.php:1082 core/helpers/helper-misc.php:246
1300
  msgid "Benin"
1301
  msgstr ""
1302
 
1303
+ #: core/helpers/helper-form-templates.php:1083
1304
  msgid "Saint Barthélemy"
1305
  msgstr ""
1306
 
1307
+ #: core/helpers/helper-form-templates.php:1084 core/helpers/helper-misc.php:247
1308
  msgid "Bermuda"
1309
  msgstr ""
1310
 
1311
+ #: core/helpers/helper-form-templates.php:1085 core/helpers/helper-misc.php:255
1312
  msgid "Brunei Darussalam"
1313
  msgstr ""
1314
 
1315
+ #: core/helpers/helper-form-templates.php:1086 core/helpers/helper-misc.php:249
1316
  msgid "Bolivia"
1317
  msgstr ""
1318
 
1319
+ #: core/helpers/helper-form-templates.php:1087
1320
  msgid "Bonaire, Sint Eustatius and Saba"
1321
  msgstr ""
1322
 
1323
+ #: core/helpers/helper-form-templates.php:1088 core/helpers/helper-misc.php:253
1324
  msgid "Brazil"
1325
  msgstr ""
1326
 
1327
+ #: core/helpers/helper-form-templates.php:1089 core/helpers/helper-misc.php:239
1328
  msgid "Bahamas"
1329
  msgstr ""
1330
 
1331
+ #: core/helpers/helper-form-templates.php:1090 core/helpers/helper-misc.php:248
1332
  msgid "Bhutan"
1333
  msgstr ""
1334
 
1335
+ #: core/helpers/helper-form-templates.php:1091 core/helpers/helper-misc.php:251
1336
  msgid "Botswana"
1337
  msgstr ""
1338
 
1339
+ #: core/helpers/helper-form-templates.php:1092 core/helpers/helper-misc.php:243
1340
  msgid "Belarus"
1341
  msgstr ""
1342
 
1343
+ #: core/helpers/helper-form-templates.php:1093 core/helpers/helper-misc.php:245
1344
  msgid "Belize"
1345
  msgstr ""
1346
 
1347
+ #: core/helpers/helper-form-templates.php:1094 core/helpers/helper-misc.php:261
1348
  msgid "Canada"
1349
  msgstr ""
1350
 
1351
+ #: core/helpers/helper-form-templates.php:1095 core/helpers/helper-misc.php:269
1352
  msgid "Cocos (Keeling) Islands"
1353
  msgstr ""
1354
 
1355
+ #: core/helpers/helper-form-templates.php:1096 core/helpers/helper-misc.php:273
1356
  msgid "Congo, the Democratic Republic of the"
1357
  msgstr ""
1358
 
1359
+ #: core/helpers/helper-form-templates.php:1097 core/helpers/helper-misc.php:264
1360
  msgid "Central African Republic"
1361
  msgstr ""
1362
 
1363
+ #: core/helpers/helper-form-templates.php:1098 core/helpers/helper-misc.php:272
1364
  msgid "Congo"
1365
  msgstr ""
1366
 
1367
+ #: core/helpers/helper-form-templates.php:1099 core/helpers/helper-misc.php:429
1368
  msgid "Switzerland"
1369
  msgstr ""
1370
 
1371
+ #: core/helpers/helper-form-templates.php:1100
1372
  msgid "Cote D'Ivoire"
1373
  msgstr ""
1374
 
1375
+ #: core/helpers/helper-form-templates.php:1101 core/helpers/helper-misc.php:274
1376
  msgid "Cook Islands"
1377
  msgstr ""
1378
 
1379
+ #: core/helpers/helper-form-templates.php:1102 core/helpers/helper-misc.php:266
1380
  msgid "Chile"
1381
  msgstr ""
1382
 
1383
+ #: core/helpers/helper-form-templates.php:1103 core/helpers/helper-misc.php:260
1384
  msgid "Cameroon"
1385
  msgstr ""
1386
 
1387
+ #: core/helpers/helper-form-templates.php:1104 core/helpers/helper-misc.php:267
1388
  msgid "China"
1389
  msgstr ""
1390
 
1391
+ #: core/helpers/helper-form-templates.php:1105 core/helpers/helper-misc.php:270
1392
  msgid "Colombia"
1393
  msgstr ""
1394
 
1395
+ #: core/helpers/helper-form-templates.php:1106 core/helpers/helper-misc.php:275
1396
  msgid "Costa Rica"
1397
  msgstr ""
1398
 
1399
+ #: core/helpers/helper-form-templates.php:1107 core/helpers/helper-misc.php:278
1400
  msgid "Cuba"
1401
  msgstr ""
1402
 
1403
+ #: core/helpers/helper-form-templates.php:1108 core/helpers/helper-misc.php:262
1404
  msgid "Cape Verde"
1405
  msgstr ""
1406
 
1407
+ #: core/helpers/helper-form-templates.php:1109
1408
  msgid "Curaçao"
1409
  msgstr ""
1410
 
1411
+ #: core/helpers/helper-form-templates.php:1110 core/helpers/helper-misc.php:268
1412
  msgid "Christmas Island"
1413
  msgstr ""
1414
 
1415
+ #: core/helpers/helper-form-templates.php:1111 core/helpers/helper-misc.php:279
1416
  msgid "Cyprus"
1417
  msgstr ""
1418
 
1419
+ #: core/helpers/helper-form-templates.php:1112 core/helpers/helper-misc.php:280
1420
  msgid "Czech Republic"
1421
  msgstr ""
1422
 
1423
+ #: core/helpers/helper-form-templates.php:1113 core/helpers/helper-misc.php:305
1424
  msgid "Germany"
1425
  msgstr ""
1426
 
1427
+ #: core/helpers/helper-form-templates.php:1114 core/helpers/helper-misc.php:282
1428
  msgid "Djibouti"
1429
  msgstr ""
1430
 
1431
+ #: core/helpers/helper-form-templates.php:1115 core/helpers/helper-misc.php:281
1432
  msgid "Denmark"
1433
  msgstr ""
1434
 
1435
+ #: core/helpers/helper-form-templates.php:1116 core/helpers/helper-misc.php:283
1436
  msgid "Dominica"
1437
  msgstr ""
1438
 
1439
+ #: core/helpers/helper-form-templates.php:1117 core/helpers/helper-misc.php:284
1440
  msgid "Dominican Republic"
1441
  msgstr ""
1442
 
1443
+ #: core/helpers/helper-form-templates.php:1118 core/helpers/helper-misc.php:226
1444
  msgid "Algeria"
1445
  msgstr ""
1446
 
1447
+ #: core/helpers/helper-form-templates.php:1119 core/helpers/helper-misc.php:286
1448
  msgid "Ecuador"
1449
  msgstr ""
1450
 
1451
+ #: core/helpers/helper-form-templates.php:1120 core/helpers/helper-misc.php:291
1452
  msgid "Estonia"
1453
  msgstr ""
1454
 
1455
+ #: core/helpers/helper-form-templates.php:1121 core/helpers/helper-misc.php:287
1456
  msgid "Egypt"
1457
  msgstr ""
1458
 
1459
+ #: core/helpers/helper-form-templates.php:1122 core/helpers/helper-misc.php:458
1460
  msgid "Western Sahara"
1461
  msgstr ""
1462
 
1463
+ #: core/helpers/helper-form-templates.php:1123 core/helpers/helper-misc.php:290
1464
  msgid "Eritrea"
1465
  msgstr ""
1466
 
1467
+ #: core/helpers/helper-form-templates.php:1124 core/helpers/helper-misc.php:420
1468
  msgid "Spain"
1469
  msgstr ""
1470
 
1471
+ #: core/helpers/helper-form-templates.php:1125 core/helpers/helper-misc.php:292
1472
  msgid "Ethiopia"
1473
  msgstr ""
1474
 
1475
+ #: core/helpers/helper-form-templates.php:1126 core/helpers/helper-misc.php:296
1476
  msgid "Finland"
1477
  msgstr ""
1478
 
1479
+ #: core/helpers/helper-form-templates.php:1127 core/helpers/helper-misc.php:295
1480
  msgid "Fiji"
1481
  msgstr ""
1482
 
1483
+ #: core/helpers/helper-form-templates.php:1128 core/helpers/helper-misc.php:293
1484
  msgid "Falkland Islands (Malvinas)"
1485
  msgstr ""
1486
 
1487
+ #: core/helpers/helper-form-templates.php:1129 core/helpers/helper-misc.php:364
1488
  msgid "Micronesia, Federated States of"
1489
  msgstr ""
1490
 
1491
+ #: core/helpers/helper-form-templates.php:1130 core/helpers/helper-misc.php:294
1492
  msgid "Faroe Islands"
1493
  msgstr ""
1494
 
1495
+ #: core/helpers/helper-form-templates.php:1131 core/helpers/helper-misc.php:297
1496
  msgid "France"
1497
  msgstr ""
1498
 
1499
+ #: core/helpers/helper-form-templates.php:1132 core/helpers/helper-misc.php:302
1500
  msgid "Gabon"
1501
  msgstr ""
1502
 
1503
+ #: core/helpers/helper-form-templates.php:1133 core/helpers/helper-misc.php:447
1504
  msgid "United Kingdom"
1505
  msgstr ""
1506
 
1507
+ #: core/helpers/helper-form-templates.php:1134 core/helpers/helper-misc.php:310
1508
  msgid "Grenada"
1509
  msgstr ""
1510
 
1511
+ #: core/helpers/helper-form-templates.php:1135 core/helpers/helper-misc.php:304
1512
  msgid "Georgia"
1513
  msgstr ""
1514
 
1515
+ #: core/helpers/helper-form-templates.php:1136 core/helpers/helper-misc.php:299
1516
  msgid "French Guiana"
1517
  msgstr ""
1518
 
1519
+ #: core/helpers/helper-form-templates.php:1137
1520
  msgid "Guernsey"
1521
  msgstr ""
1522
 
1523
+ #: core/helpers/helper-form-templates.php:1138 core/helpers/helper-misc.php:306
1524
  msgid "Ghana"
1525
  msgstr ""
1526
 
1527
+ #: core/helpers/helper-form-templates.php:1139 core/helpers/helper-misc.php:307
1528
  msgid "Gibraltar"
1529
  msgstr ""
1530
 
1531
+ #: core/helpers/helper-form-templates.php:1140 core/helpers/helper-misc.php:309
1532
  msgid "Greenland"
1533
  msgstr ""
1534
 
1535
+ #: core/helpers/helper-form-templates.php:1141 core/helpers/helper-misc.php:303
1536
  msgid "Gambia"
1537
  msgstr ""
1538
 
1539
+ #: core/helpers/helper-form-templates.php:1142 core/helpers/helper-misc.php:314
1540
  msgid "Guinea"
1541
  msgstr ""
1542
 
1543
+ #: core/helpers/helper-form-templates.php:1143 core/helpers/helper-misc.php:311
1544
  msgid "Guadeloupe"
1545
  msgstr ""
1546
 
1547
+ #: core/helpers/helper-form-templates.php:1144 core/helpers/helper-misc.php:289
1548
  msgid "Equatorial Guinea"
1549
  msgstr ""
1550
 
1551
+ #: core/helpers/helper-form-templates.php:1145 core/helpers/helper-misc.php:308
1552
  msgid "Greece"
1553
  msgstr ""
1554
 
1555
+ #: core/helpers/helper-form-templates.php:1146 core/helpers/helper-misc.php:313
1556
  msgid "Guatemala"
1557
  msgstr ""
1558
 
1559
+ #: core/helpers/helper-form-templates.php:1147 core/helpers/helper-misc.php:312
1560
  msgid "Guam"
1561
  msgstr ""
1562
 
1563
+ #: core/helpers/helper-form-templates.php:1148 core/helpers/helper-misc.php:315
1564
  msgid "Guinea-Bissau"
1565
  msgstr ""
1566
 
1567
+ #: core/helpers/helper-form-templates.php:1149 core/helpers/helper-misc.php:316
1568
  msgid "Guyana"
1569
  msgstr ""
1570
 
1571
+ #: core/helpers/helper-form-templates.php:1150 core/helpers/helper-misc.php:321
1572
  msgid "Hong Kong"
1573
  msgstr ""
1574
 
1575
+ #: core/helpers/helper-form-templates.php:1151 core/helpers/helper-misc.php:320
1576
  msgid "Honduras"
1577
  msgstr ""
1578
 
1579
+ #: core/helpers/helper-form-templates.php:1152
1580
  msgid "Croatia"
1581
  msgstr ""
1582
 
1583
+ #: core/helpers/helper-form-templates.php:1153 core/helpers/helper-misc.php:317
1584
  msgid "Haiti"
1585
  msgstr ""
1586
 
1587
+ #: core/helpers/helper-form-templates.php:1154 core/helpers/helper-misc.php:322
1588
  msgid "Hungary"
1589
  msgstr ""
1590
 
1591
+ #: core/helpers/helper-form-templates.php:1155 core/helpers/helper-misc.php:325
1592
  msgid "Indonesia"
1593
  msgstr ""
1594
 
1595
+ #: core/helpers/helper-form-templates.php:1156 core/helpers/helper-misc.php:328
1596
  msgid "Ireland"
1597
  msgstr ""
1598
 
1599
+ #: core/helpers/helper-form-templates.php:1157 core/helpers/helper-misc.php:329
1600
  msgid "Israel"
1601
  msgstr ""
1602
 
1603
+ #: core/helpers/helper-form-templates.php:1158
1604
  msgid "Isle of Man"
1605
  msgstr ""
1606
 
1607
+ #: core/helpers/helper-form-templates.php:1159 core/helpers/helper-misc.php:324
1608
  msgid "India"
1609
  msgstr ""
1610
 
1611
+ #: core/helpers/helper-form-templates.php:1160 core/helpers/helper-misc.php:254
1612
  msgid "British Indian Ocean Territory"
1613
  msgstr ""
1614
 
1615
+ #: core/helpers/helper-form-templates.php:1161 core/helpers/helper-misc.php:327
1616
  msgid "Iraq"
1617
  msgstr ""
1618
 
1619
+ #: core/helpers/helper-form-templates.php:1162
1620
  msgid "Iran, Islamic Republic of"
1621
  msgstr ""
1622
 
1623
+ #: core/helpers/helper-form-templates.php:1163 core/helpers/helper-misc.php:323
1624
  msgid "Iceland"
1625
  msgstr ""
1626
 
1627
+ #: core/helpers/helper-form-templates.php:1164 core/helpers/helper-misc.php:330
1628
  msgid "Italy"
1629
  msgstr ""
1630
 
1631
+ #: core/helpers/helper-form-templates.php:1165
1632
  msgid "Jersey"
1633
  msgstr ""
1634
 
1635
+ #: core/helpers/helper-form-templates.php:1166 core/helpers/helper-misc.php:331
1636
  msgid "Jamaica"
1637
  msgstr ""
1638
 
1639
+ #: core/helpers/helper-form-templates.php:1167 core/helpers/helper-misc.php:333
1640
  msgid "Jordan"
1641
  msgstr ""
1642
 
1643
+ #: core/helpers/helper-form-templates.php:1168 core/helpers/helper-misc.php:332
1644
  msgid "Japan"
1645
  msgstr ""
1646
 
1647
+ #: core/helpers/helper-form-templates.php:1169 core/helpers/helper-misc.php:335
1648
  msgid "Kenya"
1649
  msgstr ""
1650
 
1651
+ #: core/helpers/helper-form-templates.php:1170 core/helpers/helper-misc.php:340
1652
  msgid "Kyrgyzstan"
1653
  msgstr ""
1654
 
1655
+ #: core/helpers/helper-form-templates.php:1171 core/helpers/helper-misc.php:259
1656
  msgid "Cambodia"
1657
  msgstr ""
1658
 
1659
+ #: core/helpers/helper-form-templates.php:1172 core/helpers/helper-misc.php:336
1660
  msgid "Kiribati"
1661
  msgstr ""
1662
 
1663
+ #: core/helpers/helper-form-templates.php:1173 core/helpers/helper-misc.php:271
1664
  msgid "Comoros"
1665
  msgstr ""
1666
 
1667
+ #: core/helpers/helper-form-templates.php:1174 core/helpers/helper-misc.php:403
1668
  msgid "Saint Kitts and Nevis"
1669
  msgstr ""
1670
 
1671
+ #: core/helpers/helper-form-templates.php:1175
1672
  msgid "North Korea"
1673
  msgstr ""
1674
 
1675
+ #: core/helpers/helper-form-templates.php:1176
1676
  msgid "South Korea"
1677
  msgstr ""
1678
 
1679
+ #: core/helpers/helper-form-templates.php:1177 core/helpers/helper-misc.php:339
1680
  msgid "Kuwait"
1681
  msgstr ""
1682
 
1683
+ #: core/helpers/helper-form-templates.php:1178 core/helpers/helper-misc.php:263
1684
  msgid "Cayman Islands"
1685
  msgstr ""
1686
 
1687
+ #: core/helpers/helper-form-templates.php:1179 core/helpers/helper-misc.php:334
1688
  msgid "Kazakhstan"
1689
  msgstr ""
1690
 
1691
+ #: core/helpers/helper-form-templates.php:1180
1692
  msgid "Lao People's Democratic Republic"
1693
  msgstr ""
1694
 
1695
+ #: core/helpers/helper-form-templates.php:1181 core/helpers/helper-misc.php:343
1696
  msgid "Lebanon"
1697
  msgstr ""
1698
 
1699
+ #: core/helpers/helper-form-templates.php:1182 core/helpers/helper-misc.php:404
1700
  msgid "Saint Lucia"
1701
  msgstr ""
1702
 
1703
+ #: core/helpers/helper-form-templates.php:1183 core/helpers/helper-misc.php:347
1704
  msgid "Liechtenstein"
1705
  msgstr ""
1706
 
1707
+ #: core/helpers/helper-form-templates.php:1184 core/helpers/helper-misc.php:421
1708
  msgid "Sri Lanka"
1709
  msgstr ""
1710
 
1711
+ #: core/helpers/helper-form-templates.php:1185 core/helpers/helper-misc.php:345
1712
  msgid "Liberia"
1713
  msgstr ""
1714
 
1715
+ #: core/helpers/helper-form-templates.php:1186 core/helpers/helper-misc.php:344
1716
  msgid "Lesotho"
1717
  msgstr ""
1718
 
1719
+ #: core/helpers/helper-form-templates.php:1187 core/helpers/helper-misc.php:348
1720
  msgid "Lithuania"
1721
  msgstr ""
1722
 
1723
+ #: core/helpers/helper-form-templates.php:1188 core/helpers/helper-misc.php:349
1724
  msgid "Luxembourg"
1725
  msgstr ""
1726
 
1727
+ #: core/helpers/helper-form-templates.php:1189 core/helpers/helper-misc.php:342
1728
  msgid "Latvia"
1729
  msgstr ""
1730
 
1731
+ #: core/helpers/helper-form-templates.php:1190
1732
  msgid "Libya"
1733
  msgstr ""
1734
 
1735
+ #: core/helpers/helper-form-templates.php:1191 core/helpers/helper-misc.php:369
1736
  msgid "Morocco"
1737
  msgstr ""
1738
 
1739
+ #: core/helpers/helper-form-templates.php:1192 core/helpers/helper-misc.php:366
1740
  msgid "Monaco"
1741
  msgstr ""
1742
 
1743
+ #: core/helpers/helper-form-templates.php:1193 core/helpers/helper-misc.php:365
1744
  msgid "Moldova, Republic of"
1745
  msgstr ""
1746
 
1747
+ #: core/helpers/helper-form-templates.php:1194
1748
  msgid "Montenegro"
1749
  msgstr ""
1750
 
1751
+ #: core/helpers/helper-form-templates.php:1195
1752
  msgid "Saint Martin (French part)"
1753
  msgstr ""
1754
 
1755
+ #: core/helpers/helper-form-templates.php:1196 core/helpers/helper-misc.php:352
1756
  msgid "Madagascar"
1757
  msgstr ""
1758
 
1759
+ #: core/helpers/helper-form-templates.php:1197 core/helpers/helper-misc.php:358
1760
  msgid "Marshall Islands"
1761
  msgstr ""
1762
 
1763
+ #: core/helpers/helper-form-templates.php:1198
1764
  msgid "North Macedonia, Republic of"
1765
  msgstr ""
1766
 
1767
+ #: core/helpers/helper-form-templates.php:1199 core/helpers/helper-misc.php:356
1768
  msgid "Mali"
1769
  msgstr ""
1770
 
1771
+ #: core/helpers/helper-form-templates.php:1200 core/helpers/helper-misc.php:371
1772
  msgid "Myanmar"
1773
  msgstr ""
1774
 
1775
+ #: core/helpers/helper-form-templates.php:1201 core/helpers/helper-misc.php:367
1776
  msgid "Mongolia"
1777
  msgstr ""
1778
 
1779
+ #: core/helpers/helper-form-templates.php:1202
1780
  msgid "Macao"
1781
  msgstr ""
1782
 
1783
+ #: core/helpers/helper-form-templates.php:1203 core/helpers/helper-misc.php:384
1784
  msgid "Northern Mariana Islands"
1785
  msgstr ""
1786
 
1787
+ #: core/helpers/helper-form-templates.php:1204 core/helpers/helper-misc.php:359
1788
  msgid "Martinique"
1789
  msgstr ""
1790
 
1791
+ #: core/helpers/helper-form-templates.php:1205 core/helpers/helper-misc.php:360
1792
  msgid "Mauritania"
1793
  msgstr ""
1794
 
1795
+ #: core/helpers/helper-form-templates.php:1206 core/helpers/helper-misc.php:368
1796
  msgid "Montserrat"
1797
  msgstr ""
1798
 
1799
+ #: core/helpers/helper-form-templates.php:1207 core/helpers/helper-misc.php:357
1800
  msgid "Malta"
1801
  msgstr ""
1802
 
1803
+ #: core/helpers/helper-form-templates.php:1208 core/helpers/helper-misc.php:361
1804
  msgid "Mauritius"
1805
  msgstr ""
1806
 
1807
+ #: core/helpers/helper-form-templates.php:1209 core/helpers/helper-misc.php:355
1808
  msgid "Maldives"
1809
  msgstr ""
1810
 
1811
+ #: core/helpers/helper-form-templates.php:1210 core/helpers/helper-misc.php:353
1812
  msgid "Malawi"
1813
  msgstr ""
1814
 
1815
+ #: core/helpers/helper-form-templates.php:1211 core/helpers/helper-misc.php:363
1816
  msgid "Mexico"
1817
  msgstr ""
1818
 
1819
+ #: core/helpers/helper-form-templates.php:1212 core/helpers/helper-misc.php:354
1820
  msgid "Malaysia"
1821
  msgstr ""
1822
 
1823
+ #: core/helpers/helper-form-templates.php:1213 core/helpers/helper-misc.php:370
1824
  msgid "Mozambique"
1825
  msgstr ""
1826
 
1827
+ #: core/helpers/helper-form-templates.php:1214 core/helpers/helper-misc.php:372
1828
  msgid "Namibia"
1829
  msgstr ""
1830
 
1831
+ #: core/helpers/helper-form-templates.php:1215 core/helpers/helper-misc.php:377
1832
  msgid "New Caledonia"
1833
  msgstr ""
1834
 
1835
+ #: core/helpers/helper-form-templates.php:1216 core/helpers/helper-misc.php:380
1836
  msgid "Niger"
1837
  msgstr ""
1838
 
1839
+ #: core/helpers/helper-form-templates.php:1217 core/helpers/helper-misc.php:383
1840
  msgid "Norfolk Island"
1841
  msgstr ""
1842
 
1843
+ #: core/helpers/helper-form-templates.php:1218 core/helpers/helper-misc.php:381
1844
  msgid "Nigeria"
1845
  msgstr ""
1846
 
1847
+ #: core/helpers/helper-form-templates.php:1219 core/helpers/helper-misc.php:379
1848
  msgid "Nicaragua"
1849
  msgstr ""
1850
 
1851
+ #: core/helpers/helper-form-templates.php:1220 core/helpers/helper-misc.php:375
1852
  msgid "Netherlands"
1853
  msgstr ""
1854
 
1855
+ #: core/helpers/helper-form-templates.php:1221 core/helpers/helper-misc.php:385
1856
  msgid "Norway"
1857
  msgstr ""
1858
 
1859
+ #: core/helpers/helper-form-templates.php:1222 core/helpers/helper-misc.php:374
1860
  msgid "Nepal"
1861
  msgstr ""
1862
 
1863
+ #: core/helpers/helper-form-templates.php:1223 core/helpers/helper-misc.php:373
1864
  msgid "Nauru"
1865
  msgstr ""
1866
 
1867
+ #: core/helpers/helper-form-templates.php:1224 core/helpers/helper-misc.php:382
1868
  msgid "Niue"
1869
  msgstr ""
1870
 
1871
+ #: core/helpers/helper-form-templates.php:1225 core/helpers/helper-misc.php:378
1872
  msgid "New Zealand"
1873
  msgstr ""
1874
 
1875
+ #: core/helpers/helper-form-templates.php:1226 core/helpers/helper-misc.php:386
1876
  msgid "Oman"
1877
  msgstr ""
1878
 
1879
+ #: core/helpers/helper-form-templates.php:1227 core/helpers/helper-misc.php:389
1880
  msgid "Panama"
1881
  msgstr ""
1882
 
1883
+ #: core/helpers/helper-form-templates.php:1228 core/helpers/helper-misc.php:392
1884
  msgid "Peru"
1885
  msgstr ""
1886
 
1887
+ #: core/helpers/helper-form-templates.php:1229 core/helpers/helper-misc.php:300
1888
  msgid "French Polynesia"
1889
  msgstr ""
1890
 
1891
+ #: core/helpers/helper-form-templates.php:1230 core/helpers/helper-misc.php:390
1892
  msgid "Papua New Guinea"
1893
  msgstr ""
1894
 
1895
+ #: core/helpers/helper-form-templates.php:1231 core/helpers/helper-misc.php:393
1896
  msgid "Philippines"
1897
  msgstr ""
1898
 
1899
+ #: core/helpers/helper-form-templates.php:1232 core/helpers/helper-misc.php:387
1900
  msgid "Pakistan"
1901
  msgstr ""
1902
 
1903
+ #: core/helpers/helper-form-templates.php:1233 core/helpers/helper-misc.php:395
1904
  msgid "Poland"
1905
  msgstr ""
1906
 
1907
+ #: core/helpers/helper-form-templates.php:1234
1908
  msgid "Saint Pierre and Miquelon"
1909
  msgstr ""
1910
 
1911
+ #: core/helpers/helper-form-templates.php:1235 core/helpers/helper-misc.php:397
1912
  msgid "Puerto Rico"
1913
  msgstr ""
1914
 
1915
+ #: core/helpers/helper-form-templates.php:1236
1916
  msgid "Palestinian Territory, Occupied"
1917
  msgstr ""
1918
 
1919
+ #: core/helpers/helper-form-templates.php:1237 core/helpers/helper-misc.php:396
1920
  msgid "Portugal"
1921
  msgstr ""
1922
 
1923
+ #: core/helpers/helper-form-templates.php:1238 core/helpers/helper-misc.php:388
1924
  msgid "Palau"
1925
  msgstr ""
1926
 
1927
+ #: core/helpers/helper-form-templates.php:1239 core/helpers/helper-misc.php:391
1928
  msgid "Paraguay"
1929
  msgstr ""
1930
 
1931
+ #: core/helpers/helper-form-templates.php:1240 core/helpers/helper-misc.php:398
1932
  msgid "Qatar"
1933
  msgstr ""
1934
 
1935
+ #: core/helpers/helper-form-templates.php:1241 core/helpers/helper-misc.php:399
1936
  msgid "Reunion"
1937
  msgstr ""
1938
 
1939
+ #: core/helpers/helper-form-templates.php:1242 core/helpers/helper-misc.php:400
1940
  msgid "Romania"
1941
  msgstr ""
1942
 
1943
+ #: core/helpers/helper-form-templates.php:1243
1944
  msgid "Serbia"
1945
  msgstr ""
1946
 
1947
+ #: core/helpers/helper-form-templates.php:1244 core/helpers/helper-misc.php:401
1948
  msgid "Russian Federation"
1949
  msgstr ""
1950
 
1951
+ #: core/helpers/helper-form-templates.php:1245 core/helpers/helper-misc.php:402
1952
  msgid "Rwanda"
1953
  msgstr ""
1954
 
1955
+ #: core/helpers/helper-form-templates.php:1246 core/helpers/helper-misc.php:409
1956
  msgid "Saudi Arabia"
1957
  msgstr ""
1958
 
1959
+ #: core/helpers/helper-form-templates.php:1247 core/helpers/helper-misc.php:416
1960
  msgid "Solomon Islands"
1961
  msgstr ""
1962
 
1963
+ #: core/helpers/helper-form-templates.php:1248 core/helpers/helper-misc.php:411
1964
  msgid "Seychelles"
1965
  msgstr ""
1966
 
1967
+ #: core/helpers/helper-form-templates.php:1249 core/helpers/helper-misc.php:424
1968
  msgid "Sudan"
1969
  msgstr ""
1970
 
1971
+ #: core/helpers/helper-form-templates.php:1250 core/helpers/helper-misc.php:428
1972
  msgid "Sweden"
1973
  msgstr ""
1974
 
1975
+ #: core/helpers/helper-form-templates.php:1251 core/helpers/helper-misc.php:413
1976
  msgid "Singapore"
1977
  msgstr ""
1978
 
1979
+ #: core/helpers/helper-form-templates.php:1252
1980
+ #: core/helpers/helper-form-templates.php:1267
1981
  msgid "Saint Helena"
1982
  msgstr ""
1983
 
1984
+ #: core/helpers/helper-form-templates.php:1253 core/helpers/helper-misc.php:415
1985
  msgid "Slovenia"
1986
  msgstr ""
1987
 
1988
+ #: core/helpers/helper-form-templates.php:1254
1989
  msgid "Svalbard and Jan Mayen"
1990
  msgstr ""
1991
 
1992
+ #: core/helpers/helper-form-templates.php:1255
1993
  msgid "Slovakia"
1994
  msgstr ""
1995
 
1996
+ #: core/helpers/helper-form-templates.php:1256 core/helpers/helper-misc.php:412
1997
  msgid "Sierra Leone"
1998
  msgstr ""
1999
 
2000
+ #: core/helpers/helper-form-templates.php:1257 core/helpers/helper-misc.php:407
2001
  msgid "San Marino"
2002
  msgstr ""
2003
 
2004
+ #: core/helpers/helper-form-templates.php:1258 core/helpers/helper-misc.php:410
2005
  msgid "Senegal"
2006
  msgstr ""
2007
 
2008
+ #: core/helpers/helper-form-templates.php:1259 core/helpers/helper-misc.php:417
2009
  msgid "Somalia"
2010
  msgstr ""
2011
 
2012
+ #: core/helpers/helper-form-templates.php:1260 core/helpers/helper-misc.php:425
2013
  msgid "Suriname"
2014
  msgstr ""
2015
 
2016
+ #: core/helpers/helper-form-templates.php:1261
2017
  msgid "South Sudan"
2018
  msgstr ""
2019
 
2020
+ #: core/helpers/helper-form-templates.php:1262 core/helpers/helper-misc.php:408
2021
  msgid "Sao Tome and Principe"
2022
  msgstr ""
2023
 
2024
+ #: core/helpers/helper-form-templates.php:1263 core/helpers/helper-misc.php:288
2025
  msgid "El Salvador"
2026
  msgstr ""
2027
 
2028
+ #: core/helpers/helper-form-templates.php:1264
2029
  msgid "Sint Maarten (Dutch part)"
2030
  msgstr ""
2031
 
2032
+ #: core/helpers/helper-form-templates.php:1265 core/helpers/helper-misc.php:430
2033
  msgid "Syrian Arab Republic"
2034
  msgstr ""
2035
 
2036
+ #: core/helpers/helper-form-templates.php:1266
2037
  msgid "Eswatini"
2038
  msgstr ""
2039
 
2040
+ #: core/helpers/helper-form-templates.php:1268 core/helpers/helper-misc.php:442
2041
  msgid "Turks and Caicos Islands"
2042
  msgstr ""
2043
 
2044
+ #: core/helpers/helper-form-templates.php:1269 core/helpers/helper-misc.php:265
2045
  msgid "Chad"
2046
  msgstr ""
2047
 
2048
+ #: core/helpers/helper-form-templates.php:1270 core/helpers/helper-misc.php:435
2049
  msgid "Togo"
2050
  msgstr ""
2051
 
2052
+ #: core/helpers/helper-form-templates.php:1271 core/helpers/helper-misc.php:434
2053
  msgid "Thailand"
2054
  msgstr ""
2055
 
2056
+ #: core/helpers/helper-form-templates.php:1272 core/helpers/helper-misc.php:432
2057
  msgid "Tajikistan"
2058
  msgstr ""
2059
 
2060
+ #: core/helpers/helper-form-templates.php:1273 core/helpers/helper-misc.php:436
2061
  msgid "Tokelau"
2062
  msgstr ""
2063
 
2064
+ #: core/helpers/helper-form-templates.php:1274
2065
  msgid "Timor-Leste"
2066
  msgstr ""
2067
 
2068
+ #: core/helpers/helper-form-templates.php:1275 core/helpers/helper-misc.php:441
2069
  msgid "Turkmenistan"
2070
  msgstr ""
2071
 
2072
+ #: core/helpers/helper-form-templates.php:1276 core/helpers/helper-misc.php:439
2073
  msgid "Tunisia"
2074
  msgstr ""
2075
 
2076
+ #: core/helpers/helper-form-templates.php:1277 core/helpers/helper-misc.php:437
2077
  msgid "Tonga"
2078
  msgstr ""
2079
 
2080
+ #: core/helpers/helper-form-templates.php:1278 core/helpers/helper-misc.php:440
2081
  msgid "Turkey"
2082
  msgstr ""
2083
 
2084
+ #: core/helpers/helper-form-templates.php:1279 core/helpers/helper-misc.php:438
2085
  msgid "Trinidad and Tobago"
2086
  msgstr ""
2087
 
2088
+ #: core/helpers/helper-form-templates.php:1280 core/helpers/helper-misc.php:443
2089
  msgid "Tuvalu"
2090
  msgstr ""
2091
 
2092
+ #: core/helpers/helper-form-templates.php:1281
2093
  msgid "Taiwan"
2094
  msgstr ""
2095
 
2096
+ #: core/helpers/helper-form-templates.php:1282 core/helpers/helper-misc.php:433
2097
  msgid "Tanzania, United Republic of"
2098
  msgstr ""
2099
 
2100
+ #: core/helpers/helper-form-templates.php:1283 core/helpers/helper-misc.php:445
2101
  msgid "Ukraine"
2102
  msgstr ""
2103
 
2104
+ #: core/helpers/helper-form-templates.php:1284 core/helpers/helper-misc.php:444
2105
  msgid "Uganda"
2106
  msgstr ""
2107
 
2108
+ #: core/helpers/helper-form-templates.php:1285
2109
  msgid "United States of America"
2110
  msgstr ""
2111
 
2112
+ #: core/helpers/helper-form-templates.php:1286 core/helpers/helper-misc.php:450
2113
  msgid "Uruguay"
2114
  msgstr ""
2115
 
2116
+ #: core/helpers/helper-form-templates.php:1287 core/helpers/helper-misc.php:451
2117
  msgid "Uzbekistan"
2118
  msgstr ""
2119
 
2120
+ #: core/helpers/helper-form-templates.php:1288 core/helpers/helper-misc.php:319
2121
  msgid "Holy See (Vatican City State)"
2122
  msgstr ""
2123
 
2124
+ #: core/helpers/helper-form-templates.php:1289 core/helpers/helper-misc.php:405
2125
  msgid "Saint Vincent and the Grenadines"
2126
  msgstr ""
2127
 
2128
+ #: core/helpers/helper-form-templates.php:1290 core/helpers/helper-misc.php:453
2129
  msgid "Venezuela"
2130
  msgstr ""
2131
 
2132
+ #: core/helpers/helper-form-templates.php:1291
2133
  msgid "Virgin Islands, British"
2134
  msgstr ""
2135
 
2136
+ #: core/helpers/helper-form-templates.php:1292
2137
  msgid "Virgin Islands, U.S."
2138
  msgstr ""
2139
 
2140
+ #: core/helpers/helper-form-templates.php:1293 core/helpers/helper-misc.php:454
2141
  msgid "Vietnam"
2142
  msgstr ""
2143
 
2144
+ #: core/helpers/helper-form-templates.php:1294 core/helpers/helper-misc.php:452
2145
  msgid "Vanuatu"
2146
  msgstr ""
2147
 
2148
+ #: core/helpers/helper-form-templates.php:1295
2149
  msgid "Wallis and Futuna"
2150
  msgstr ""
2151
 
2152
+ #: core/helpers/helper-form-templates.php:1296 core/helpers/helper-misc.php:406
2153
  msgid "Samoa"
2154
  msgstr ""
2155
 
2156
+ #: core/helpers/helper-form-templates.php:1297
2157
  msgid "Kosovo"
2158
  msgstr ""
2159
 
2160
+ #: core/helpers/helper-form-templates.php:1298 core/helpers/helper-misc.php:459
2161
  msgid "Yemen"
2162
  msgstr ""
2163
 
2164
+ #: core/helpers/helper-form-templates.php:1299 core/helpers/helper-misc.php:362
2165
  msgid "Mayotte"
2166
  msgstr ""
2167
 
2168
+ #: core/helpers/helper-form-templates.php:1300 core/helpers/helper-misc.php:418
2169
  msgid "South Africa"
2170
  msgstr ""
2171
 
2172
+ #: core/helpers/helper-form-templates.php:1301 core/helpers/helper-misc.php:461
2173
  msgid "Zambia"
2174
  msgstr ""
2175
 
2176
+ #: core/helpers/helper-form-templates.php:1302 core/helpers/helper-misc.php:462
2177
  msgid "Zimbabwe"
2178
  msgstr ""
2179
 
2854
  msgstr ""
2855
 
2856
  #: core/helpers/helper-misc.php:931
2857
+ #: core/templates/parts/customize-checkbox.php:60
2858
+ #: core/templates/parts/customize-checkbox.php:70
2859
+ #: core/templates/parts/customize-radio.php:55
2860
  msgid "Full"
2861
  msgstr ""
2862
 
2863
  #: core/helpers/helper-misc.php:932
2864
+ #: core/templates/parts/customize-checkbox.php:61
2865
+ #: core/templates/parts/customize-checkbox.php:71
2866
+ #: core/templates/parts/customize-radio.php:56
2867
  msgid "Half"
2868
  msgstr ""
2869
 
2870
  #: core/helpers/helper-misc.php:933
2871
+ #: core/templates/parts/customize-checkbox.php:62
2872
+ #: core/templates/parts/customize-checkbox.php:72
2873
+ #: core/templates/parts/customize-radio.php:57
2874
  msgid "Third"
2875
  msgstr ""
2876
 
2877
  #: core/helpers/helper-misc.php:934
2878
+ #: core/templates/parts/customize-checkbox.php:63
2879
+ #: core/templates/parts/customize-radio.php:58
2880
  msgid "Quarter"
2881
  msgstr ""
2882
 
2883
  #: core/helpers/helper-misc.php:935
2884
+ #: core/templates/parts/customize-checkbox.php:64
2885
+ #: core/templates/parts/customize-checkbox.php:73
2886
+ #: core/templates/parts/customize-radio.php:59
2887
  msgid "Auto"
2888
  msgstr ""
2889
 
2890
  #: core/helpers/helper-misc.php:940
2891
+ #: core/templates/parts/customize-checkbox.php:78
2892
  msgid "Apply to all fields"
2893
  msgstr ""
2894
 
2932
  msgid "You are customizing"
2933
  msgstr ""
2934
 
2935
+ #: core/templates/customize-form-build.php:4
2936
  msgid "Add title"
2937
  msgstr ""
2938
 
2939
+ #: core/templates/customize-form-build.php:9
2940
  msgid "Add fields here to appear in your form."
2941
  msgstr ""
2942
 
2943
+ #: core/templates/customize-form-build.php:12
2944
  msgid "Add a Field"
2945
  msgstr ""
2946
 
2954
  msgstr ""
2955
 
2956
  #: core/templates/customize-form-item.php:24
2957
+ #: core/templates/customize-form-steps.php:7
2958
  msgid "Style"
2959
  msgstr ""
2960
 
2961
  #: core/templates/customize-form-item.php:33
2962
  #: core/templates/customize-form-part-footer.php:3
2963
+ #: core/templates/parts/customize-checkbox.php:111
2964
+ #: core/templates/parts/customize-radio.php:94
2965
+ #: core/templates/parts/customize-select.php:86
2966
  msgid "Delete"
2967
  msgstr ""
2968
 
2971
  msgstr ""
2972
 
2973
  #: core/templates/customize-form-part-footer.php:5
 
 
 
 
 
 
 
2974
  #: core/templates/customize-form-part-logic.php:2
2975
  msgid "Logic"
2976
  msgstr ""
3000
  msgid "Email"
3001
  msgstr ""
3002
 
3003
+ #: core/templates/customize-form-steps.php:6
3004
+ msgid "Messages"
3005
+ msgstr ""
3006
+
3007
  #: core/templates/customize-header-actions.php:5
3008
  msgid "Save"
3009
  msgstr ""
3040
  #: core/templates/parts/customize-checkbox.php:17
3041
  #: core/templates/parts/customize-radio.php:17
3042
  #: core/templates/parts/customize-select.php:21
3043
+ msgid "No choices added yet."
3044
  msgstr ""
3045
 
3046
  #: core/templates/parts/customize-checkbox.php:21
3074
  msgstr ""
3075
 
3076
  #: core/templates/parts/customize-checkbox.php:37
3077
+ #: core/templates/parts/customize-email.php:24
3078
+ #: core/templates/parts/customize-multi-line-text.php:24
3079
+ #: core/templates/parts/customize-number.php:34
3080
  #: core/templates/parts/customize-radio.php:37
3081
  #: core/templates/parts/customize-select.php:41
3082
+ #: core/templates/parts/customize-single-line-text.php:24
3083
+ msgid "Require an answer"
3084
  msgstr ""
3085
 
3086
+ #: core/templates/parts/customize-checkbox.php:47
3087
  msgid "Add 'select all' choice"
3088
  msgstr ""
3089
 
3090
+ #: core/templates/parts/customize-checkbox.php:51
3091
+ #: core/templates/parts/customize-radio.php:46
3092
  msgid "Choices display"
3093
  msgstr ""
3094
 
3095
+ #: core/templates/parts/customize-checkbox.php:53
3096
+ #: core/templates/parts/customize-radio.php:48
3097
  msgid "Horizontal"
3098
  msgstr ""
3099
 
3100
+ #: core/templates/parts/customize-checkbox.php:54
3101
+ #: core/templates/parts/customize-radio.php:49
3102
  msgid "Vertical"
3103
  msgstr ""
3104
 
3105
+ #: core/templates/parts/customize-checkbox.php:58
3106
+ #: core/templates/parts/customize-radio.php:53
3107
  msgid "Choices width"
3108
  msgstr ""
3109
 
3110
+ #: core/templates/parts/customize-checkbox.php:85
3111
+ #: core/templates/parts/customize-email.php:46
3112
+ #: core/templates/parts/customize-multi-line-text.php:64
3113
+ #: core/templates/parts/customize-number.php:69
3114
+ #: core/templates/parts/customize-radio.php:66
3115
+ #: core/templates/parts/customize-select.php:60
3116
+ #: core/templates/parts/customize-single-line-text.php:45
3117
  msgid "CSS classes"
3118
  msgstr ""
3119
 
3120
+ #: core/templates/parts/customize-checkbox.php:107
3121
+ #: core/templates/parts/customize-radio.php:90
3122
+ #: core/templates/parts/customize-select.php:82
3123
  msgid "Make this choice default"
3124
  msgstr ""
3125
 
3126
+ #: core/templates/parts/customize-checkbox.php:112
3127
+ #: core/templates/parts/customize-radio.php:95
3128
+ #: core/templates/parts/customize-select.php:87
3129
+ msgid "More"
 
 
 
 
 
 
 
 
3130
  msgstr ""
3131
 
3132
+ #: core/templates/parts/customize-email.php:12
3133
+ #: core/templates/parts/customize-multi-line-text.php:12
3134
+ #: core/templates/parts/customize-number.php:12
3135
+ #: core/templates/parts/customize-single-line-text.php:12
3136
+ msgid "Prefill"
3137
  msgstr ""
3138
 
3139
+ #: core/templates/parts/customize-email.php:33
3140
+ #: core/templates/parts/customize-number.php:58
3141
+ #: core/templates/parts/customize-single-line-text.php:32
3142
  msgid "Prefix"
3143
  msgstr ""
3144
 
3145
+ #: core/templates/parts/customize-email.php:37
3146
+ #: core/templates/parts/customize-number.php:62
3147
+ #: core/templates/parts/customize-single-line-text.php:36
3148
  msgid "Suffix"
3149
  msgstr ""
3150
 
3151
+ #: core/templates/parts/customize-multi-line-text.php:34
3152
  msgid "Limit words/characters"
3153
  msgstr ""
3154
 
3155
+ #: core/templates/parts/customize-multi-line-text.php:40
3156
  msgid "Limit"
3157
  msgstr ""
3158
 
 
 
 
 
3159
  #: core/templates/parts/customize-multi-line-text.php:44
3160
+ msgid "Count"
 
 
 
 
 
 
 
 
 
 
 
 
3161
  msgstr ""
3162
 
3163
+ #: core/templates/parts/customize-multi-line-text.php:55
3164
  msgid "Rows"
3165
  msgstr ""
3166
 
3167
+ #: core/templates/parts/customize-number.php:24
3168
  msgid "Min number"
3169
  msgstr ""
3170
 
3171
+ #: core/templates/parts/customize-number.php:28
3172
  msgid "Max number"
3173
  msgstr ""
3174
 
3175
+ #: core/templates/parts/customize-number.php:44
3176
  msgid "Use number separators"
3177
  msgstr ""
3178
 
3179
+ #: core/templates/parts/customize-number.php:49
3180
  msgid "Grouping"
3181
  msgstr ""
3182
 
3183
+ #: core/templates/parts/customize-number.php:53
3184
  msgid "Decimal"
3185
  msgstr ""
3186
 
3187
+ #: core/templates/parts/customize-select.php:51
3188
  msgid "Make searchable"
3189
  msgstr ""
3190
 
 
 
 
 
3191
  #: core/templates/preview-form-pencil.php:3
3192
  msgid "Click to edit this part."
3193
  msgstr ""
3227
  msgstr ""
3228
 
3229
  #: inc/classes/class-happyforms.php:132
3230
+ msgid "Save incomplete and abandoned submissions"
3231
  msgstr ""
3232
 
3233
  #: inc/classes/class-happyforms.php:133
3235
  msgstr ""
3236
 
3237
  #: inc/classes/class-happyforms.php:139
3238
+ msgid "Let respondents save a draft submission and come back to it later"
3239
  msgstr ""
3240
 
3241
  #: inc/classes/class-happyforms.php:140
3245
  msgstr ""
3246
 
3247
  #: inc/classes/class-happyforms.php:146
3248
+ msgid "Require respondents to review a submission before submitting"
3249
  msgstr ""
3250
 
3251
  #: inc/classes/class-happyforms.php:147
3508
  msgid "field"
3509
  msgstr ""
3510
 
3511
+ #. Plugin Name of the plugin/theme
3512
+ msgid "Happyforms (free)"
3513
+ msgstr ""
3514
+
3515
  #. Author URI of the plugin/theme
3516
  msgid "https://happyforms.me"
3517
  msgstr ""
3518
 
3519
  #. Description of the plugin/theme
3520
+ msgid "We're changin' WordPress forms."
3521
+ msgstr ""
3522
+
3523
+ #. Author of the plugin/theme
3524
+ msgid "Happyforms"
3525
  msgstr ""
readme.txt CHANGED
@@ -5,7 +5,7 @@ Tags: contact form, contact form plugin, forms, form builder, custom form, intak
5
  Requires at least: 4.8
6
  Tested up to: 5.6
7
  Requires PHP: 5.3
8
- Stable tag: 1.9.30
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
@@ -144,6 +144,11 @@ Note: you'll need to upgrade to our paid contact form builder plugin to get some
144
 
145
  == Changelog ==
146
 
 
 
 
 
 
147
  = 1.9.30 =
148
  * Improvement: Better styling control for choice fields option labels.
149
 
@@ -745,6 +750,9 @@ Note: you'll need to upgrade to our paid contact form builder plugin to get some
745
 
746
  == Upgrade Notice ==
747
 
 
 
 
748
  = 1.9.30 =
749
  * Minor improvements and bugfixes.
750
 
5
  Requires at least: 4.8
6
  Tested up to: 5.6
7
  Requires PHP: 5.3
8
+ Stable tag: 1.10.0
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
144
 
145
  == Changelog ==
146
 
147
+ = 1.10.0 =
148
+ * New feature: Messages tab in Edit Form screen allows for complete language customization.
149
+ * New feature: Prefill control for setting a default value on Short Text, Long Text, Email Address and Number fields.
150
+ * Bugfix: "Email respondent a copy of their submission" → "Include submitted" feature was misbehaving.
151
+
152
  = 1.9.30 =
153
  * Improvement: Better styling control for choice fields option labels.
154
 
750
 
751
  == Upgrade Notice ==
752
 
753
+ = 1.10.0 =
754
+ * New Messages tab, Prefill control, miscellaneous bugfixes.
755
+
756
  = 1.9.30 =
757
  * Minor improvements and bugfixes.
758