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

Version Description

  • Improvement: Faster preview of Layout Text changes.
  • Bugfix: Honeypot mechanism was triggering browser autocomplete, preventing submissions.
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.13.2
Comparing to
See all releases

Code changes from version 1.13.1 to 1.13.2

Files changed (55) hide show
  1. core/assets/css/color.css +1 -7
  2. core/assets/css/customize.css +1 -1
  3. core/assets/js/parts/part-checkbox.js +0 -1
  4. core/assets/js/parts/part-multi-line-text.js +18 -15
  5. core/assets/js/parts/part-radio.js +0 -1
  6. core/assets/jsx/build/admin/block.asset.php +1 -0
  7. core/assets/jsx/build/admin/block.js +248 -0
  8. core/assets/jsx/build/admin/block.js.map +1 -0
  9. core/assets/jsx/src/admin/block.js +95 -0
  10. core/assets/svg/icons/likert-scale.svg +0 -1
  11. core/assets/svg/icons/number-scale.svg +24 -0
  12. core/classes/class-block.php +10 -7
  13. core/classes/parts/class-part-checkbox.php +0 -48
  14. core/classes/parts/class-part-multi-line-text.php +1 -1
  15. core/classes/parts/class-part-radio.php +0 -29
  16. core/helpers/helper-form-templates.php +1 -19
  17. core/templates/parts/customize-checkbox.php +1 -6
  18. core/templates/parts/customize-radio.php +1 -6
  19. core/templates/parts/frontend-checkbox-other-option.php +0 -4
  20. core/templates/parts/frontend-checkbox.php +0 -4
  21. core/templates/parts/frontend-radio-other-option.php +0 -4
  22. core/templates/parts/frontend-radio.php +0 -4
  23. happyforms.php +10 -2
  24. inc/assets/css/admin.css +58 -0
  25. inc/assets/js/admin/dashboard.js +0 -4
  26. inc/assets/js/frontend.js +1 -1
  27. inc/classes/class-happyforms.php +66 -0
  28. inc/classes/class-message-admin.php +0 -7
  29. inc/classes/class-message-controller.php +1 -1
  30. inc/classes/parts/class-part-likert-scale-dummy.php +2 -2
  31. inc/templates/admin/modal-dummy-activity.php +0 -21
  32. integrations/assets/css/admin.css +128 -0
  33. integrations/classes/class-integrations-page-controller.php +95 -0
  34. integrations/templates/admin-integrations.php +43 -0
  35. integrations/templates/widget-active-campaign-dummy.php +28 -0
  36. integrations/templates/widget-aweber-dummy.php +26 -0
  37. integrations/templates/widget-constant-contact-dummy.php +28 -0
  38. integrations/templates/widget-convertkit-dummy.php +21 -0
  39. integrations/templates/widget-google-analytics-dummy.php +21 -0
  40. integrations/templates/widget-google-geocoding-dummy.php +21 -0
  41. integrations/templates/widget-google-places-dummy.php +21 -0
  42. integrations/templates/widget-integrately-dummy.php +21 -0
  43. integrations/templates/widget-integromat-dummy.php +21 -0
  44. integrations/templates/widget-mailchimp-dummy.php +21 -0
  45. integrations/templates/widget-mailerlite-dummy.php +21 -0
  46. integrations/templates/widget-mailpoet-dummy.php +9 -0
  47. integrations/templates/widget-paypal-dummy.php +38 -0
  48. integrations/templates/widget-recaptcha-dummy.php +38 -0
  49. integrations/templates/widget-sendfox-dummy.php +21 -0
  50. integrations/templates/widget-sendgrid-dummy.php +21 -0
  51. integrations/templates/widget-sendinblue-dummy.php +21 -0
  52. integrations/templates/widget-stripe-dummy.php +38 -0
  53. integrations/templates/widget-zapier-dummy.php +21 -0
  54. languages/happyforms.pot +322 -108
  55. readme.txt +9 -2
core/assets/css/color.css CHANGED
@@ -268,8 +268,7 @@
268
  color: var(--happyforms-color-part-description);
269
  }
270
 
271
- .happyforms-styles .happyforms-part .option-label input:checked+.checkmark,
272
- .happyforms-part.happyforms-part-choice--display-as-letters input:checked+.checkmark {
273
  background-color: #000;
274
  background-color: var(--happyforms-color-choice-checkmark-bg-focus);
275
  }
@@ -385,11 +384,6 @@
385
  color: var(--happyforms-color-choice-checkmark-color);
386
  }
387
 
388
- .happyforms-part.happyforms-part-choice--display-as-letters input:checked + .checkmark {
389
- color: #fff;
390
- color: var(--happyforms-color-choice-checkmark-color);
391
- }
392
-
393
  /* parts - select */
394
 
395
  .happyforms-styles .happyforms-part__select-bg {
268
  color: var(--happyforms-color-part-description);
269
  }
270
 
271
+ .happyforms-styles .happyforms-part .option-label input:checked+.checkmark {
 
272
  background-color: #000;
273
  background-color: var(--happyforms-color-choice-checkmark-bg-focus);
274
  }
384
  color: var(--happyforms-color-choice-checkmark-color);
385
  }
386
 
 
 
 
 
 
387
  /* parts - select */
388
 
389
  .happyforms-styles .happyforms-part__select-bg {
core/assets/css/customize.css CHANGED
@@ -1200,7 +1200,7 @@ ul.happyforms-parts-list li[data-part-type="rank_order_dummy"] .happyforms-parts
1200
 
1201
  ul.happyforms-parts-list li[data-part-type="likert_scale_dummy"] .happyforms-parts-list-item-title:before {
1202
  opacity: 0.5;
1203
- background-image: url(../svg/icons/likert-scale.svg);
1204
  }
1205
 
1206
  ul.happyforms-parts-list li[data-part-type="rating_dummy"] .happyforms-parts-list-item-title:before {
1200
 
1201
  ul.happyforms-parts-list li[data-part-type="likert_scale_dummy"] .happyforms-parts-list-item-title:before {
1202
  opacity: 0.5;
1203
+ background-image: url(../svg/icons/number-scale.svg);
1204
  }
1205
 
1206
  ul.happyforms-parts-list li[data-part-type="rating_dummy"] .happyforms-parts-list-item-title:before {
core/assets/js/parts/part-checkbox.js CHANGED
@@ -241,7 +241,6 @@
241
  this.listenTo( this.model, 'change:other_option', this.onAddOtherOption );
242
  this.listenTo( this.model, 'change:other_option_label', this.onOtherOptionLabelChange );
243
  this.listenTo( this.model, 'change:other_option_placeholder', this.onOtherOptionPlaceholderChange );
244
- this.listenTo( this.model, 'change:display_as_letters', this.refreshPart );
245
  this.listenTo( this.model, 'change:limit_choices', this.onLimitChoices );
246
  this.listenTo( this.model.get( 'options' ), 'add remove', this.refreshMinMaxChoices );
247
  },
241
  this.listenTo( this.model, 'change:other_option', this.onAddOtherOption );
242
  this.listenTo( this.model, 'change:other_option_label', this.onOtherOptionLabelChange );
243
  this.listenTo( this.model, 'change:other_option_placeholder', this.onOtherOptionPlaceholderChange );
 
244
  this.listenTo( this.model, 'change:limit_choices', this.onLimitChoices );
245
  this.listenTo( this.model.get( 'options' ), 'add remove', this.refreshMinMaxChoices );
246
  },
core/assets/js/parts/part-multi-line-text.js CHANGED
@@ -19,13 +19,12 @@
19
  this.listenTo( this.model, 'change:placeholder', this.onPlaceholderChange );
20
  this.listenTo( this.model, 'change:limit_input', this.onLimitInputChange );
21
  this.listenTo( this.model, 'change:character_limit', this.onCharacterLimitChange );
22
- this.listenTo( this.model, 'change:character_limit_mode', this.onCharacterLimitChange );
23
  this.listenTo( this.model, 'change:characters_label', this.onLimitWordsCharactersLabelChange );
24
  this.listenTo( this.model, 'change:words_label', this.onLimitWordsCharactersLabelChange );
25
  this.listenTo( this.model, 'change:rows', this.onRowsChange );
26
 
27
  this.listenTo( this.model, 'change:rich_text', this.onRichTextChange );
28
- this.listenTo( this.model, 'change:rows', this.onRowsChange );
29
  },
30
 
31
  /**
@@ -81,7 +80,7 @@
81
  }
82
  },
83
 
84
- onCharacterLimitChange: function( model, value ) {
85
  switch ( value ) {
86
  case 'word_min':
87
  case 'word_max':
@@ -114,6 +113,16 @@
114
  } );
115
  },
116
 
 
 
 
 
 
 
 
 
 
 
117
  onLimitWordsCharactersLabelChange: function( model, value ) {
118
  var data = {
119
  id: this.model.get( 'id' ),
@@ -125,18 +134,6 @@
125
 
126
  happyForms.previewSend( 'happyforms-part-dom-update', data );
127
  },
128
-
129
- onRowsChange: function( model, value ) {
130
- var data = {
131
- id: this.model.id,
132
- callback: 'onMultiLineTextRowsChange',
133
- options: {
134
- value: value
135
- }
136
- };
137
-
138
- happyForms.previewSend( 'happyforms-part-dom-update', data );
139
- },
140
 
141
  onRichTextChange: function( model, value ) {
142
  if ( 1 == value ) {
@@ -198,6 +195,12 @@
198
 
199
  this.$( 'textarea', $part ).attr( 'rows', options.value );
200
  },
 
 
 
 
 
 
201
  } );
202
 
203
  } ) ( jQuery, _, Backbone, wp.customize, _happyFormsSettings );
19
  this.listenTo( this.model, 'change:placeholder', this.onPlaceholderChange );
20
  this.listenTo( this.model, 'change:limit_input', this.onLimitInputChange );
21
  this.listenTo( this.model, 'change:character_limit', this.onCharacterLimitChange );
22
+ this.listenTo( this.model, 'change:character_limit_mode', this.onCharacterLimitModeChange );
23
  this.listenTo( this.model, 'change:characters_label', this.onLimitWordsCharactersLabelChange );
24
  this.listenTo( this.model, 'change:words_label', this.onLimitWordsCharactersLabelChange );
25
  this.listenTo( this.model, 'change:rows', this.onRowsChange );
26
 
27
  this.listenTo( this.model, 'change:rich_text', this.onRichTextChange );
 
28
  },
29
 
30
  /**
80
  }
81
  },
82
 
83
+ onCharacterLimitModeChange: function( model, value ) {
84
  switch ( value ) {
85
  case 'word_min':
86
  case 'word_max':
113
  } );
114
  },
115
 
116
+ onCharacterLimitChange: function( model, value ) {
117
+ var data = {
118
+ id: this.model.get('id'),
119
+ callback: 'onCharacterLimitChange',
120
+ };
121
+
122
+ happyForms.previewSend('happyforms-part-dom-update', data);
123
+
124
+ },
125
+
126
  onLimitWordsCharactersLabelChange: function( model, value ) {
127
  var data = {
128
  id: this.model.get( 'id' ),
134
 
135
  happyForms.previewSend( 'happyforms-part-dom-update', data );
136
  },
 
 
 
 
 
 
 
 
 
 
 
 
137
 
138
  onRichTextChange: function( model, value ) {
139
  if ( 1 == value ) {
195
 
196
  this.$( 'textarea', $part ).attr( 'rows', options.value );
197
  },
198
+ onCharacterLimitChange: function (id, html, options) {
199
+ var part = this.getPartModel(id);
200
+ var $part = this.getPartElement(html);
201
+
202
+ this.$('.happyforms-part__char-counter span.counter-limit', $part).html(part.get('character_limit'));
203
+ },
204
  } );
205
 
206
  } ) ( jQuery, _, Backbone, wp.customize, _happyFormsSettings );
core/assets/js/parts/part-radio.js CHANGED
@@ -231,7 +231,6 @@
231
  this.listenTo( this.model, 'change:other_option', this.onAddOtherOption );
232
  this.listenTo( this.model, 'change:other_option_label', this.onOtherOptionLabelChange );
233
  this.listenTo( this.model, 'change:other_option_placeholder', this.onOtherOptionPlaceholderChange );
234
- this.listenTo( this.model, 'change:display_as_letters', this.refreshPart );
235
  },
236
 
237
  onReady: function() {
231
  this.listenTo( this.model, 'change:other_option', this.onAddOtherOption );
232
  this.listenTo( this.model, 'change:other_option_label', this.onOtherOptionLabelChange );
233
  this.listenTo( this.model, 'change:other_option_placeholder', this.onOtherOptionPlaceholderChange );
 
234
  },
235
 
236
  onReady: function() {
core/assets/jsx/build/admin/block.asset.php ADDED
@@ -0,0 +1 @@
 
1
+ <?php return array('dependencies' => array('wp-blocks', 'wp-components', 'wp-editor', 'wp-element', 'wp-polyfill', 'wp-server-side-render'), 'version' => '73970ec5a1dd7a222949002f50b434a6');
core/assets/jsx/build/admin/block.js ADDED
@@ -0,0 +1,248 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /******/ (function(modules) { // webpackBootstrap
2
+ /******/ // The module cache
3
+ /******/ var installedModules = {};
4
+ /******/
5
+ /******/ // The require function
6
+ /******/ function __webpack_require__(moduleId) {
7
+ /******/
8
+ /******/ // Check if module is in cache
9
+ /******/ if(installedModules[moduleId]) {
10
+ /******/ return installedModules[moduleId].exports;
11
+ /******/ }
12
+ /******/ // Create a new module (and put it into the cache)
13
+ /******/ var module = installedModules[moduleId] = {
14
+ /******/ i: moduleId,
15
+ /******/ l: false,
16
+ /******/ exports: {}
17
+ /******/ };
18
+ /******/
19
+ /******/ // Execute the module function
20
+ /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
21
+ /******/
22
+ /******/ // Flag the module as loaded
23
+ /******/ module.l = true;
24
+ /******/
25
+ /******/ // Return the exports of the module
26
+ /******/ return module.exports;
27
+ /******/ }
28
+ /******/
29
+ /******/
30
+ /******/ // expose the modules object (__webpack_modules__)
31
+ /******/ __webpack_require__.m = modules;
32
+ /******/
33
+ /******/ // expose the module cache
34
+ /******/ __webpack_require__.c = installedModules;
35
+ /******/
36
+ /******/ // define getter function for harmony exports
37
+ /******/ __webpack_require__.d = function(exports, name, getter) {
38
+ /******/ if(!__webpack_require__.o(exports, name)) {
39
+ /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
40
+ /******/ }
41
+ /******/ };
42
+ /******/
43
+ /******/ // define __esModule on exports
44
+ /******/ __webpack_require__.r = function(exports) {
45
+ /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
46
+ /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
47
+ /******/ }
48
+ /******/ Object.defineProperty(exports, '__esModule', { value: true });
49
+ /******/ };
50
+ /******/
51
+ /******/ // create a fake namespace object
52
+ /******/ // mode & 1: value is a module id, require it
53
+ /******/ // mode & 2: merge all properties of value into the ns
54
+ /******/ // mode & 4: return value when already ns object
55
+ /******/ // mode & 8|1: behave like require
56
+ /******/ __webpack_require__.t = function(value, mode) {
57
+ /******/ if(mode & 1) value = __webpack_require__(value);
58
+ /******/ if(mode & 8) return value;
59
+ /******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
60
+ /******/ var ns = Object.create(null);
61
+ /******/ __webpack_require__.r(ns);
62
+ /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
63
+ /******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
64
+ /******/ return ns;
65
+ /******/ };
66
+ /******/
67
+ /******/ // getDefaultExport function for compatibility with non-harmony modules
68
+ /******/ __webpack_require__.n = function(module) {
69
+ /******/ var getter = module && module.__esModule ?
70
+ /******/ function getDefault() { return module['default']; } :
71
+ /******/ function getModuleExports() { return module; };
72
+ /******/ __webpack_require__.d(getter, 'a', getter);
73
+ /******/ return getter;
74
+ /******/ };
75
+ /******/
76
+ /******/ // Object.prototype.hasOwnProperty.call
77
+ /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
78
+ /******/
79
+ /******/ // __webpack_public_path__
80
+ /******/ __webpack_require__.p = "";
81
+ /******/
82
+ /******/
83
+ /******/ // Load entry module and return exports
84
+ /******/ return __webpack_require__(__webpack_require__.s = "./build/core/assets/jsx/src/admin/block.js");
85
+ /******/ })
86
+ /************************************************************************/
87
+ /******/ ({
88
+
89
+ /***/ "./build/core/assets/jsx/src/admin/block.js":
90
+ /*!**************************************************!*\
91
+ !*** ./build/core/assets/jsx/src/admin/block.js ***!
92
+ \**************************************************/
93
+ /*! no exports provided */
94
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
95
+
96
+ "use strict";
97
+ __webpack_require__.r(__webpack_exports__);
98
+ /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
99
+ /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__);
100
+ /* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/components */ "@wordpress/components");
101
+ /* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__);
102
+ /* harmony import */ var _wordpress_server_side_render__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/server-side-render */ "@wordpress/server-side-render");
103
+ /* harmony import */ var _wordpress_server_side_render__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_server_side_render__WEBPACK_IMPORTED_MODULE_2__);
104
+ /* harmony import */ var _wordpress_editor__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/editor */ "@wordpress/editor");
105
+ /* harmony import */ var _wordpress_editor__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_editor__WEBPACK_IMPORTED_MODULE_3__);
106
+ /* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/blocks */ "@wordpress/blocks");
107
+ /* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_4__);
108
+
109
+
110
+
111
+
112
+
113
+
114
+ (function (settings) {
115
+ var blockID = 'thethemefoundry/happyforms';
116
+ var options = settings.forms.map(function (form) {
117
+ return {
118
+ label: form.post_title,
119
+ value: form.ID
120
+ };
121
+ });
122
+ options.reverse().unshift({
123
+ label: settings.i18n.select_default,
124
+ value: ''
125
+ });
126
+
127
+ var ComponentPlaceholder = function (props) {
128
+ return Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["Placeholder"], {
129
+ icon: settings.icon,
130
+ label: settings.i18n.placeholder_text,
131
+ className: settings.i18n.placeholder_class,
132
+ key: "happyforms-component-placeholder"
133
+ }, settings.forms.length > 0 ? Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["SelectControl"], {
134
+ value: "",
135
+ options: options,
136
+ onChange: v => props.setAttributes({
137
+ id: v
138
+ })
139
+ }) : Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])("p", null, settings.i18n.no_forms_found_text));
140
+ };
141
+
142
+ var ComponentForm = function (props) {
143
+ return [Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_wordpress_server_side_render__WEBPACK_IMPORTED_MODULE_2___default.a, {
144
+ block: blockID,
145
+ attributes: props.attributes,
146
+ key: "happyforms-component-form"
147
+ })];
148
+ };
149
+
150
+ var ComponentInspector = function (props) {
151
+ return Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_wordpress_editor__WEBPACK_IMPORTED_MODULE_3__["InspectorControls"], {
152
+ key: "happyforms-inspector-controls"
153
+ }, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["PanelBody"], {
154
+ title: settings.i18n.settings_title
155
+ }, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["SelectControl"], {
156
+ value: props.attributes.id,
157
+ options: options,
158
+ onChange: v => props.setAttributes({
159
+ id: v
160
+ })
161
+ })));
162
+ };
163
+
164
+ Object(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_4__["registerBlockType"])(blockID, {
165
+ title: settings.block.title,
166
+ description: settings.block.description,
167
+ category: settings.block.category,
168
+ icon: settings.block.icon,
169
+ keywords: settings.block.keywords,
170
+ supports: {
171
+ anchor: true,
172
+ html: false
173
+ },
174
+ edit: function (props) {
175
+ if (!props.attributes.id && settings.forms.length === 1) {
176
+ props.attributes.id = settings.forms[0].ID;
177
+ }
178
+
179
+ let blockComponent = props.attributes.id ? ComponentForm(props) : ComponentPlaceholder(props);
180
+ let inspectorComponent = settings.forms.length > 1 ? ComponentInspector(props) : false;
181
+ let component = inspectorComponent ? [blockComponent, inspectorComponent] : [blockComponent];
182
+ return component;
183
+ },
184
+ save: function () {
185
+ return null;
186
+ }
187
+ });
188
+ })(_happyFormsBlockSettings);
189
+
190
+ /***/ }),
191
+
192
+ /***/ "@wordpress/blocks":
193
+ /*!********************************!*\
194
+ !*** external ["wp","blocks"] ***!
195
+ \********************************/
196
+ /*! no static exports found */
197
+ /***/ (function(module, exports) {
198
+
199
+ (function() { module.exports = window["wp"]["blocks"]; }());
200
+
201
+ /***/ }),
202
+
203
+ /***/ "@wordpress/components":
204
+ /*!************************************!*\
205
+ !*** external ["wp","components"] ***!
206
+ \************************************/
207
+ /*! no static exports found */
208
+ /***/ (function(module, exports) {
209
+
210
+ (function() { module.exports = window["wp"]["components"]; }());
211
+
212
+ /***/ }),
213
+
214
+ /***/ "@wordpress/editor":
215
+ /*!********************************!*\
216
+ !*** external ["wp","editor"] ***!
217
+ \********************************/
218
+ /*! no static exports found */
219
+ /***/ (function(module, exports) {
220
+
221
+ (function() { module.exports = window["wp"]["editor"]; }());
222
+
223
+ /***/ }),
224
+
225
+ /***/ "@wordpress/element":
226
+ /*!*********************************!*\
227
+ !*** external ["wp","element"] ***!
228
+ \*********************************/
229
+ /*! no static exports found */
230
+ /***/ (function(module, exports) {
231
+
232
+ (function() { module.exports = window["wp"]["element"]; }());
233
+
234
+ /***/ }),
235
+
236
+ /***/ "@wordpress/server-side-render":
237
+ /*!******************************************!*\
238
+ !*** external ["wp","serverSideRender"] ***!
239
+ \******************************************/
240
+ /*! no static exports found */
241
+ /***/ (function(module, exports) {
242
+
243
+ (function() { module.exports = window["wp"]["serverSideRender"]; }());
244
+
245
+ /***/ })
246
+
247
+ /******/ });
248
+ //# sourceMappingURL=block.js.map
core/assets/jsx/build/admin/block.js.map ADDED
@@ -0,0 +1 @@
 
1
+ {"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./build/core/assets/jsx/src/admin/block.js","webpack:///external [\"wp\",\"blocks\"]","webpack:///external [\"wp\",\"components\"]","webpack:///external [\"wp\",\"editor\"]","webpack:///external [\"wp\",\"element\"]","webpack:///external [\"wp\",\"serverSideRender\"]"],"names":["settings","blockID","options","forms","map","form","label","post_title","value","ID","reverse","unshift","i18n","select_default","ComponentPlaceholder","props","icon","placeholder_text","placeholder_class","length","v","setAttributes","id","no_forms_found_text","ComponentForm","attributes","ComponentInspector","settings_title","registerBlockType","title","block","description","category","keywords","supports","anchor","html","edit","blockComponent","inspectorComponent","component","save","_happyFormsBlockSettings"],"mappings":";QAAA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;;;QAGA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA,0CAA0C,gCAAgC;QAC1E;QACA;;QAEA;QACA;QACA;QACA,wDAAwD,kBAAkB;QAC1E;QACA,iDAAiD,cAAc;QAC/D;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA,yCAAyC,iCAAiC;QAC1E,gHAAgH,mBAAmB,EAAE;QACrI;QACA;;QAEA;QACA;QACA;QACA,2BAA2B,0BAA0B,EAAE;QACvD,iCAAiC,eAAe;QAChD;QACA;QACA;;QAEA;QACA,sDAAsD,+DAA+D;;QAErH;QACA;;;QAGA;QACA;;;;;;;;;;;;;;;;;;;;;;;;;AClFA;AACA;AACA;AACA;;AAEA,CAAE,UAAUA,QAAV,EAAqB;AAEtB,MAAIC,OAAO,GAAG,4BAAd;AACA,MAAIC,OAAO,GAAGF,QAAQ,CAACG,KAAT,CACZC,GADY,CACP,UAAUC,IAAV,EAAiB;AACtB,WAAO;AAAEC,WAAK,EAAED,IAAI,CAACE,UAAd;AAA0BC,WAAK,EAAEH,IAAI,CAACI;AAAtC,KAAP;AACA,GAHY,CAAd;AAIAP,SAAO,CAACQ,OAAR,GAAkBC,OAAlB,CAA2B;AAAEL,SAAK,EAAEN,QAAQ,CAACY,IAAT,CAAcC,cAAvB;AAAuCL,SAAK,EAAE;AAA9C,GAA3B;;AAEA,MAAIM,oBAAoB,GAAG,UAAUC,KAAV,EAAkB;AAC5C,WACC,yEAAC,iEAAD;AACC,UAAI,EAAGf,QAAQ,CAACgB,IADjB;AAEC,WAAK,EAAGhB,QAAQ,CAACY,IAAT,CAAcK,gBAFvB;AAGC,eAAS,EAAGjB,QAAQ,CAACY,IAAT,CAAcM,iBAH3B;AAIC,SAAG,EAAC;AAJL,OAMGlB,QAAQ,CAACG,KAAT,CAAegB,MAAf,GAAwB,CAAxB,GACC,yEAAC,mEAAD;AAAe,WAAK,EAAC,EAArB;AAAwB,aAAO,EAAGjB,OAAlC;AAA4C,cAAQ,EAAKkB,CAAF,IAASL,KAAK,CAACM,aAAN,CAAqB;AAAEC,UAAE,EAAEF;AAAN,OAArB;AAAhE,MADD,GAEC,oFAAKpB,QAAQ,CAACY,IAAT,CAAcW,mBAAnB,CARJ,CADD;AAcA,GAfD;;AAiBA,MAAIC,aAAa,GAAG,UAAUT,KAAV,EAAkB;AACrC,WAAO,CACN,yEAAC,oEAAD;AACC,WAAK,EAAGd,OADT;AAEC,gBAAU,EAAGc,KAAK,CAACU,UAFpB;AAGC,SAAG,EAAC;AAHL,MADM,CAAP;AAMA,GAPD;;AASA,MAAIC,kBAAkB,GAAG,UAAUX,KAAV,EAAkB;AAC1C,WACC,yEAAC,mEAAD;AAAmB,SAAG,EAAC;AAAvB,OACC,yEAAC,+DAAD;AAAW,WAAK,EAAGf,QAAQ,CAACY,IAAT,CAAce;AAAjC,OACC,yEAAC,mEAAD;AAAe,WAAK,EAAGZ,KAAK,CAACU,UAAN,CAAiBH,EAAxC;AAA6C,aAAO,EAAGpB,OAAvD;AAAiE,cAAQ,EAAKkB,CAAF,IAASL,KAAK,CAACM,aAAN,CAAqB;AAAEC,UAAE,EAAGF;AAAP,OAArB;AAArF,MADD,CADD,CADD;AAOA,GARD;;AAUAQ,6EAAiB,CAAE3B,OAAF,EAAW;AAC3B4B,SAAK,EAAE7B,QAAQ,CAAC8B,KAAT,CAAeD,KADK;AAE3BE,eAAW,EAAE/B,QAAQ,CAAC8B,KAAT,CAAeC,WAFD;AAG3BC,YAAQ,EAAEhC,QAAQ,CAAC8B,KAAT,CAAeE,QAHE;AAI3BhB,QAAI,EAAEhB,QAAQ,CAAC8B,KAAT,CAAed,IAJM;AAK3BiB,YAAQ,EAAEjC,QAAQ,CAAC8B,KAAT,CAAeG,QALE;AAM3BC,YAAQ,EAAE;AACTC,YAAM,EAAE,IADC;AAETC,UAAI,EAAE;AAFG,KANiB;AAW3BC,QAAI,EAAE,UAAUtB,KAAV,EAAkB;AACvB,UAAK,CAAEA,KAAK,CAACU,UAAN,CAAiBH,EAAnB,IAAyBtB,QAAQ,CAACG,KAAT,CAAegB,MAAf,KAA0B,CAAxD,EAA4D;AAC3DJ,aAAK,CAACU,UAAN,CAAiBH,EAAjB,GAAsBtB,QAAQ,CAACG,KAAT,CAAe,CAAf,EAAkBM,EAAxC;AACA;;AAED,UAAI6B,cAAc,GACjBvB,KAAK,CAACU,UAAN,CAAiBH,EAAjB,GACAE,aAAa,CAAET,KAAF,CADb,GAEAD,oBAAoB,CAAEC,KAAF,CAHrB;AAMA,UAAIwB,kBAAkB,GACrBvC,QAAQ,CAACG,KAAT,CAAegB,MAAf,GAAwB,CAAxB,GACAO,kBAAkB,CAAEX,KAAF,CADlB,GAEA,KAHD;AAMA,UAAIyB,SAAS,GACZD,kBAAkB,GAClB,CAAED,cAAF,EAAkBC,kBAAlB,CADkB,GAElB,CAAED,cAAF,CAHD;AAMA,aAAOE,SAAP;AACA,KAnC0B;AAqC3BC,QAAI,EAAE,YAAW;AAChB,aAAO,IAAP;AACA;AAvC0B,GAAX,CAAjB;AA0CA,CAvFD,EAwFCC,wBAxFD,E;;;;;;;;;;;ACLA,aAAa,yCAAyC,EAAE,I;;;;;;;;;;;ACAxD,aAAa,6CAA6C,EAAE,I;;;;;;;;;;;ACA5D,aAAa,yCAAyC,EAAE,I;;;;;;;;;;;ACAxD,aAAa,0CAA0C,EAAE,I;;;;;;;;;;;ACAzD,aAAa,mDAAmD,EAAE,I","file":"block.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./build/core/assets/jsx/src/admin/block.js\");\n","import { Placeholder, SelectControl, PanelBody } from '@wordpress/components';\nimport ServerSideRender from '@wordpress/server-side-render';\nimport { InspectorControls } from '@wordpress/editor';\nimport { registerBlockType } from '@wordpress/blocks';\n\n( function( settings ) {\n\n\tvar blockID = 'thethemefoundry/happyforms';\n\tvar options = settings.forms\n\t\t.map( function( form ) {\n\t\t\treturn { label: form.post_title, value: form.ID };\n\t\t} )\n\toptions.reverse().unshift( { label: settings.i18n.select_default, value: '' } );\n\n\tvar ComponentPlaceholder = function( props ) {\n\t\treturn (\n\t\t\t<Placeholder \n\t\t\t\ticon={ settings.icon } \n\t\t\t\tlabel={ settings.i18n.placeholder_text }\n\t\t\t\tclassName={ settings.i18n.placeholder_class }\n\t\t\t\tkey=\"happyforms-component-placeholder\">\n\n\t\t\t\t{ settings.forms.length > 0\n\t\t\t\t\t? <SelectControl value=\"\" options={ options } onChange={ ( v ) => props.setAttributes( { id: v } ) } />\n\t\t\t\t\t: <p>{ settings.i18n.no_forms_found_text }</p>\n\t\t\t\t}\n\n\t\t\t</Placeholder>\n\t\t);\n\t};\n\n\tvar ComponentForm = function( props ) {\n\t\treturn [\n\t\t\t<ServerSideRender\n\t\t\t\tblock={ blockID }\n\t\t\t\tattributes={ props.attributes }\n\t\t\t\tkey=\"happyforms-component-form\" />\n\t\t];\n\t};\n\n\tvar ComponentInspector = function( props ) {\n\t\treturn (\n\t\t\t<InspectorControls key=\"happyforms-inspector-controls\">\n\t\t\t\t<PanelBody title={ settings.i18n.settings_title }>\n\t\t\t\t\t<SelectControl value={ props.attributes.id } options={ options } onChange={ ( v ) => props.setAttributes( { id : v } ) } />\n\t\t\t\t</PanelBody>\n\t\t\t</InspectorControls>\n\t\t);\n\t};\n\n\tregisterBlockType( blockID, {\n\t\ttitle: settings.block.title,\n\t\tdescription: settings.block.description,\n\t\tcategory: settings.block.category,\n\t\ticon: settings.block.icon,\n\t\tkeywords: settings.block.keywords,\n\t\tsupports: {\n\t\t\tanchor: true,\n\t\t\thtml: false\n\t\t},\n\n\t\tedit: function( props ) {\n\t\t\tif ( ! props.attributes.id && settings.forms.length === 1 ) {\n\t\t\t\tprops.attributes.id = settings.forms[0].ID;\n\t\t\t}\n\n\t\t\tlet blockComponent = (\n\t\t\t\tprops.attributes.id ?\n\t\t\t\tComponentForm( props ) :\n\t\t\t\tComponentPlaceholder( props )\n\t\t\t);\n\n\t\t\tlet inspectorComponent = (\n\t\t\t\tsettings.forms.length > 1 ?\n\t\t\t\tComponentInspector( props ) :\n\t\t\t\tfalse\n\t\t\t);\n\t\t\t\n\t\t\tlet component = (\n\t\t\t\tinspectorComponent ? \n\t\t\t\t[ blockComponent, inspectorComponent ] :\n\t\t\t\t[ blockComponent ]\n\t\t\t);\n\n\t\t\treturn component;\n\t\t},\n\n\t\tsave: function() {\n\t\t\treturn null;\n\t\t},\n\t} );\n\n} )(\n\t_happyFormsBlockSettings,\n);","(function() { module.exports = window[\"wp\"][\"blocks\"]; }());","(function() { module.exports = window[\"wp\"][\"components\"]; }());","(function() { module.exports = window[\"wp\"][\"editor\"]; }());","(function() { module.exports = window[\"wp\"][\"element\"]; }());","(function() { module.exports = window[\"wp\"][\"serverSideRender\"]; }());"],"sourceRoot":""}
core/assets/jsx/src/admin/block.js ADDED
@@ -0,0 +1,95 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { Placeholder, SelectControl, PanelBody } from '@wordpress/components';
2
+ import ServerSideRender from '@wordpress/server-side-render';
3
+ import { InspectorControls } from '@wordpress/editor';
4
+ import { registerBlockType } from '@wordpress/blocks';
5
+
6
+ ( function( settings ) {
7
+
8
+ var blockID = 'thethemefoundry/happyforms';
9
+ var options = settings.forms
10
+ .map( function( form ) {
11
+ return { label: form.post_title, value: form.ID };
12
+ } )
13
+ options.reverse().unshift( { label: settings.i18n.select_default, value: '' } );
14
+
15
+ var ComponentPlaceholder = function( props ) {
16
+ return (
17
+ <Placeholder
18
+ icon={ settings.icon }
19
+ label={ settings.i18n.placeholder_text }
20
+ className={ settings.i18n.placeholder_class }
21
+ key="happyforms-component-placeholder">
22
+
23
+ { settings.forms.length > 0
24
+ ? <SelectControl value="" options={ options } onChange={ ( v ) => props.setAttributes( { id: v } ) } />
25
+ : <p>{ settings.i18n.no_forms_found_text }</p>
26
+ }
27
+
28
+ </Placeholder>
29
+ );
30
+ };
31
+
32
+ var ComponentForm = function( props ) {
33
+ return [
34
+ <ServerSideRender
35
+ block={ blockID }
36
+ attributes={ props.attributes }
37
+ key="happyforms-component-form" />
38
+ ];
39
+ };
40
+
41
+ var ComponentInspector = function( props ) {
42
+ return (
43
+ <InspectorControls key="happyforms-inspector-controls">
44
+ <PanelBody title={ settings.i18n.settings_title }>
45
+ <SelectControl value={ props.attributes.id } options={ options } onChange={ ( v ) => props.setAttributes( { id : v } ) } />
46
+ </PanelBody>
47
+ </InspectorControls>
48
+ );
49
+ };
50
+
51
+ registerBlockType( blockID, {
52
+ title: settings.block.title,
53
+ description: settings.block.description,
54
+ category: settings.block.category,
55
+ icon: settings.block.icon,
56
+ keywords: settings.block.keywords,
57
+ supports: {
58
+ anchor: true,
59
+ html: false
60
+ },
61
+
62
+ edit: function( props ) {
63
+ if ( ! props.attributes.id && settings.forms.length === 1 ) {
64
+ props.attributes.id = settings.forms[0].ID;
65
+ }
66
+
67
+ let blockComponent = (
68
+ props.attributes.id ?
69
+ ComponentForm( props ) :
70
+ ComponentPlaceholder( props )
71
+ );
72
+
73
+ let inspectorComponent = (
74
+ settings.forms.length > 1 ?
75
+ ComponentInspector( props ) :
76
+ false
77
+ );
78
+
79
+ let component = (
80
+ inspectorComponent ?
81
+ [ blockComponent, inspectorComponent ] :
82
+ [ blockComponent ]
83
+ );
84
+
85
+ return component;
86
+ },
87
+
88
+ save: function() {
89
+ return null;
90
+ },
91
+ } );
92
+
93
+ } )(
94
+ _happyFormsBlockSettings,
95
+ );
core/assets/svg/icons/likert-scale.svg DELETED
@@ -1 +0,0 @@
1
- <svg enable-background="new 0 0 24 24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="m0 0h24v24h-24z" fill="none"/><path d="m13 11.3 5 6.7h-12l5-6.7v-5.3h2m3-2h-8c-.4 0-.6.5-.3.8l1.3 1.7v4.2l-5.8 7.7c-.5.7 0 1.6.8 1.6h16c.8 0 1.3-.9.8-1.6l-5.8-7.7v-4.2l1.4-1.7c.2-.3 0-.8-.4-.8z"/></svg>
 
core/assets/svg/icons/number-scale.svg ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Generator: Adobe Illustrator 25.4.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+ <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
4
+ viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
5
+ <style type="text/css">
6
+ .st0{fill:none;}
7
+ </style>
8
+ <g>
9
+ <path class="st0" d="M0,0h24v24H0V0z"/>
10
+ </g>
11
+ <g>
12
+ <g>
13
+ <path d="M20,4H4C2.9,4,2,4.9,2,6v12c0,1.1,0.9,2,2,2h16c1.1,0,2-0.9,2-2V6C22,4.9,21.1,4,20,4z M20,18H4V6h16V18z"/>
14
+ <polygon points="6.5,10.5 6.5,15 7.6,15 7.6,9 6.8,9 5,10.3 5.6,11.2 "/>
15
+ <path d="M11.5,10.1c0.5,0,0.8,0.3,0.8,0.7c0,0.4-0.1,0.6-0.5,1.1c-0.4,0.4-1.1,1.1-2.1,2.1v1h3.9v-1h-2.4l0-0.1
16
+ c0.7-0.7,1.1-1.1,1.4-1.4c0.6-0.6,0.9-1.2,0.9-1.9c0-0.2-0.1-1-0.9-1.5c-0.5-0.2-1.3-0.4-2,0c-0.8,0.4-1,1.1-1,1.1l1,0.4
17
+ C10.7,10.4,10.9,10.1,11.5,10.1z"/>
18
+ <path d="M17,13.9c-0.8,0-1-0.8-1-0.9l-1,0.4c0.4,1.6,2,1.5,2.1,1.5c1.2,0,1.7-0.7,1.8-0.9c0.3-0.5,0.4-1.2,0-1.8
19
+ c-0.2-0.2-0.4-0.4-0.7-0.5v-0.1c0.2-0.1,0.4-0.3,0.5-0.5c0.3-0.4,0.3-1.1,0-1.6C18.5,9.6,18,9,16.9,9c-1.3,0-1.7,0.9-1.9,1.2
20
+ l1,0.4c0.1-0.3,0.4-0.6,0.9-0.6c0.4,0,0.8,0.3,0.8,0.6c0,0.6-0.5,0.7-0.9,0.7h-0.5v1h0.5c0.6,0,1,0.2,1,0.8
21
+ C17.9,13.7,17.4,13.9,17,13.9z"/>
22
+ </g>
23
+ </g>
24
+ </svg>
core/classes/class-block.php CHANGED
@@ -92,20 +92,22 @@ class HappyForms_Block {
92
  }
93
 
94
  public function enqueue_scripts() {
95
- $screen = get_current_screen();
96
 
97
  wp_enqueue_script(
98
  'happyforms-block',
99
- happyforms_get_plugin_url() . 'core/assets/js/admin/block.js',
100
- array( 'wp-blocks', 'wp-element', 'wp-components', 'wp-block-editor', 'jquery' )
101
  );
102
 
103
- $user_id = get_current_user_id();
104
- $admin_notices = happyforms_get_admin_notices();
105
  $forms = happyforms_get_form_controller()->get();
106
  $forms = array_values( wp_list_filter( $forms, array( 'post_status' => 'publish' ) ) );
107
- $forms = wp_list_pluck( $forms, 'post_title', 'ID' );
108
-
 
 
 
 
109
  $block_properties = $this->get_properties();
110
  $data = array(
111
  'ajaxurl' => admin_url( 'admin-ajax.php' ),
@@ -114,6 +116,7 @@ class HappyForms_Block {
114
  'i18n' => array(
115
  'select_default' => __( 'Choose', 'happyforms' ),
116
  'placeholder_text' => __( 'Which form would you like to add here?', 'happyforms' ),
 
117
  'settings_title' => __( 'HappyForms Settings', 'happyforms' ),
118
  'placeholder_class' => 'happyforms-block-form-selector-wrap'
119
  ),
92
  }
93
 
94
  public function enqueue_scripts() {
95
+ $asset_file = require( happyforms_get_core_folder() . '/assets/jsx/build/admin/block.asset.php' );
96
 
97
  wp_enqueue_script(
98
  'happyforms-block',
99
+ happyforms_get_plugin_url() . 'core/assets/jsx/build/admin/block.js',
100
+ $asset_file['dependencies']
101
  );
102
 
 
 
103
  $forms = happyforms_get_form_controller()->get();
104
  $forms = array_values( wp_list_filter( $forms, array( 'post_status' => 'publish' ) ) );
105
+ $forms = array_map( function ( $form ) {
106
+ return array(
107
+ 'ID' => $form['ID'],
108
+ 'post_title' => $form['post_title'],
109
+ );
110
+ }, $forms );
111
  $block_properties = $this->get_properties();
112
  $data = array(
113
  'ajaxurl' => admin_url( 'admin-ajax.php' ),
116
  'i18n' => array(
117
  'select_default' => __( 'Choose', 'happyforms' ),
118
  'placeholder_text' => __( 'Which form would you like to add here?', 'happyforms' ),
119
+ 'no_forms_found_text' => __( 'No forms found.', 'happyforms' ),
120
  'settings_title' => __( 'HappyForms Settings', 'happyforms' ),
121
  'placeholder_class' => 'happyforms-block-form-selector-wrap'
122
  ),
core/classes/parts/class-part-checkbox.php CHANGED
@@ -97,10 +97,6 @@ class HappyForms_Part_Checkbox extends HappyForms_Form_Part {
97
  'default' => '',
98
  'sanitize' => 'sanitize_text_field',
99
  ),
100
- 'display_as_letters' => array(
101
- 'default' => 0,
102
- 'sanitize' => 'happyforms_sanitize_checkbox',
103
- ),
104
  'limit_choices' => array(
105
  'default' => 0,
106
  'sanitize' => 'happyforms_sanitize_checkbox',
@@ -364,43 +360,13 @@ class HappyForms_Part_Checkbox extends HappyForms_Form_Part {
364
  }
365
 
366
  $value = implode( ', ', $value );
367
- if ( $this->display_choices_as_letters( $part ) ) {
368
- $values = array();
369
- foreach ( $original_value as $option_index ) {
370
- if ( isset( $part['options'][(int) $option_index] ) ) {
371
- $option = $part['options'][(int) $option_index];
372
- $letter = happyforms_get_part_choice_letter( $option, $part );
373
- $values[] = "{$letter}) {$option['label']}";
374
- }
375
- }
376
-
377
- $value = implode( ', ', $values );
378
- }
379
  } else {
380
  foreach ( $value as $i => $index ) {
381
  $label = '';
382
-
383
  if ( is_array( $index ) && ! empty( $index[1] ) ) { // other option
384
  $value[$i] = $index[1];
385
-
386
- if ( $this->display_choices_as_letters( $part ) ) {
387
- $letter = happyforms_get_part_choice_letter( '', $part );
388
- $label = $value[$i];
389
- }
390
  } else { // standard option
391
  $value[$i] = $options[$index]['label'];
392
-
393
- if ( $this->display_choices_as_letters( $part ) ) {
394
- if ( isset( $part['options'][$index] ) ) {
395
- $option = $part['options'][$index];
396
- $letter = happyforms_get_part_choice_letter( $option, $part );
397
- $label = $option['label'];
398
- }
399
- }
400
- }
401
-
402
- if ( $this->display_choices_as_letters( $part ) ) {
403
- $value[$i] = "{$letter}) {$label}";
404
  }
405
  }
406
  }
@@ -466,23 +432,9 @@ class HappyForms_Part_Checkbox extends HappyForms_Form_Part {
466
  $class[] = "happyforms-part-options-width--{$part_options_width}";
467
  }
468
 
469
- if ( $this->type === $part['type'] ) {
470
- if ( $this->display_choices_as_letters( $part ) ) {
471
- $class[] = 'happyforms-part-choice--display-as-letters';
472
- }
473
- }
474
-
475
  return $class;
476
  }
477
 
478
- public function display_choices_as_letters( $part ) {
479
- if ( 1 == $part['display_as_letters'] ) {
480
- return true;
481
- }
482
-
483
- return false;
484
- }
485
-
486
  public function script_dependencies( $deps, $forms ) {
487
  $contains_checkbox = false;
488
  $form_controller = happyforms_get_form_controller();
97
  'default' => '',
98
  'sanitize' => 'sanitize_text_field',
99
  ),
 
 
 
 
100
  'limit_choices' => array(
101
  'default' => 0,
102
  'sanitize' => 'happyforms_sanitize_checkbox',
360
  }
361
 
362
  $value = implode( ', ', $value );
 
 
 
 
 
 
 
 
 
 
 
 
363
  } else {
364
  foreach ( $value as $i => $index ) {
365
  $label = '';
 
366
  if ( is_array( $index ) && ! empty( $index[1] ) ) { // other option
367
  $value[$i] = $index[1];
 
 
 
 
 
368
  } else { // standard option
369
  $value[$i] = $options[$index]['label'];
 
 
 
 
 
 
 
 
 
 
 
 
370
  }
371
  }
372
  }
432
  $class[] = "happyforms-part-options-width--{$part_options_width}";
433
  }
434
 
 
 
 
 
 
 
435
  return $class;
436
  }
437
 
 
 
 
 
 
 
 
 
438
  public function script_dependencies( $deps, $forms ) {
439
  $contains_checkbox = false;
440
  $form_controller = happyforms_get_form_controller();
core/classes/parts/class-part-multi-line-text.php CHANGED
@@ -525,7 +525,7 @@ class HappyForms_Part_MultiLineText extends HappyForms_Form_Part {
525
  $label = $this->get_limit_label( $part, $form );
526
  ?>
527
  <div class="happyforms-part__char-counter <?php echo $part['character_limit_mode']; ?>">
528
- <span class="counter">0</span>/<?php echo $character_limit; ?> <?php echo $label; ?>
529
  </div>
530
  <?php
531
  }
525
  $label = $this->get_limit_label( $part, $form );
526
  ?>
527
  <div class="happyforms-part__char-counter <?php echo $part['character_limit_mode']; ?>">
528
+ <span class="counter">0</span>/<span class="counter-limit"><?php echo $character_limit; ?></span> <?php echo $label; ?>
529
  </div>
530
  <?php
531
  }
core/classes/parts/class-part-radio.php CHANGED
@@ -78,10 +78,6 @@ class HappyForms_Part_Radio extends HappyForms_Form_Part {
78
  'default' => 'auto',
79
  'sanitize' => 'sanitize_text_field'
80
  ),
81
- 'display_as_letters' => array(
82
- 'default' => 0,
83
- 'sanitize' => 'happyforms_sanitize_checkbox'
84
- ),
85
  'other_option' => array(
86
  'default' => 0,
87
  'sanitize' => 'happyforms_sanitize_checkbox'
@@ -298,14 +294,6 @@ class HappyForms_Part_Radio extends HappyForms_Form_Part {
298
  return $value;
299
  }
300
 
301
- public function display_choices_as_letters( $part ) {
302
- if ( 1 == $part['display_as_letters'] ) {
303
- return true;
304
- }
305
-
306
- return false;
307
- }
308
-
309
  public function stringify_value( $value, $part, $form, $force = false ) {
310
  if ( $this->type === $part['type'] || $force ) {
311
  $original_value = $value;
@@ -316,22 +304,9 @@ class HappyForms_Part_Radio extends HappyForms_Form_Part {
316
  $value = $options[$value]['label'];
317
  }
318
 
319
- if ( $this->display_choices_as_letters( $part ) ) {
320
- $original_value = intval( $original_value );
321
-
322
- if ( isset( $part['options'][$original_value] ) ) {
323
- $option = $part['options'][$original_value];
324
- $letter = happyforms_get_part_choice_letter( $option, $part );
325
- $value = "{$letter}) {$value}";
326
- }
327
- }
328
  } else { // other option
329
  $value = ( ! empty( $value[1] ) ) ? $value[1] : '';
330
 
331
- if ( $this->display_choices_as_letters( $part ) ) {
332
- $letter = happyforms_get_part_choice_letter( '', $part );
333
- $value = "{$letter}) {$value}";
334
- }
335
  }
336
  }
337
 
@@ -346,10 +321,6 @@ class HappyForms_Part_Radio extends HappyForms_Form_Part {
346
  $class[] = 'display-type--block';
347
  }
348
 
349
- if ( 1 == $part['display_as_letters'] ) {
350
- $class[] = 'happyforms-part-choice--display-as-letters';
351
- }
352
-
353
  $part_options_width = $part['options_width'];
354
 
355
  $class[] = "happyforms-part-options-width--{$part_options_width}";
78
  'default' => 'auto',
79
  'sanitize' => 'sanitize_text_field'
80
  ),
 
 
 
 
81
  'other_option' => array(
82
  'default' => 0,
83
  'sanitize' => 'happyforms_sanitize_checkbox'
294
  return $value;
295
  }
296
 
 
 
 
 
 
 
 
 
297
  public function stringify_value( $value, $part, $form, $force = false ) {
298
  if ( $this->type === $part['type'] || $force ) {
299
  $original_value = $value;
304
  $value = $options[$value]['label'];
305
  }
306
 
 
 
 
 
 
 
 
 
 
307
  } else { // other option
308
  $value = ( ! empty( $value[1] ) ) ? $value[1] : '';
309
 
 
 
 
 
310
  }
311
  }
312
 
321
  $class[] = 'display-type--block';
322
  }
323
 
 
 
 
 
324
  $part_options_width = $part['options_width'];
325
 
326
  $class[] = "happyforms-part-options-width--{$part_options_width}";
core/helpers/helper-form-templates.php CHANGED
@@ -59,7 +59,7 @@ if ( ! function_exists( 'happyforms_honeypot' ) ) :
59
 
60
  function happyforms_honeypot( $form ) {
61
  $controller = happyforms_get_form_controller();
62
- $names = array( 'username', 'email', 'password' );
63
  $key = array_rand( $names, 1 );
64
  $name = $names[$key];
65
 
@@ -1612,24 +1612,6 @@ function happyforms_get_part_states( $location = '' ) {
1612
 
1613
  endif;
1614
 
1615
- if ( ! function_exists( 'happyforms_get_part_choice_letter' ) ) :
1616
-
1617
- function happyforms_get_part_choice_letter( $option, $part ) {
1618
- $letters = range( 'A', 'Z' );
1619
-
1620
- if ( ! empty( $option ) ) {
1621
- $option_index = array_search( $option['id'], array_column( $part['options'], 'id' ) );
1622
- $letter = $letters[$option_index];
1623
- } else {
1624
- $options_count = count( $part['options'] );
1625
- $letter = $letters[$options_count];
1626
- }
1627
-
1628
- return $letter;
1629
- }
1630
-
1631
- endif;
1632
-
1633
  if ( ! function_exists( 'happyforms_get_prefixed_css' ) ):
1634
  /**
1635
  * Prefix CSS selectors with specified prefix.
59
 
60
  function happyforms_honeypot( $form ) {
61
  $controller = happyforms_get_form_controller();
62
+ $names = array( 'single_line_text', 'multi_line_text', 'number' );
63
  $key = array_rand( $names, 1 );
64
  $name = $names[$key];
65
 
1612
 
1613
  endif;
1614
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1615
  if ( ! function_exists( 'happyforms_get_prefixed_css' ) ):
1616
  /**
1617
  * Prefix CSS selectors with specified prefix.
core/templates/parts/customize-checkbox.php CHANGED
@@ -53,12 +53,7 @@
53
  <?php do_action( 'happyforms_part_customize_checkbox_after_options' ); ?>
54
 
55
  <?php do_action( 'happyforms_part_customize_checkbox_before_advanced_options' ); ?>
56
-
57
- <p>
58
- <label>
59
- <input type="checkbox" class="checkbox" value="1" <% if ( instance.display_as_letters ) { %>checked="checked"<% } %> data-bind="display_as_letters" /> <?php _e( 'Show as alphabetical choice', 'happyforms' ); ?>
60
- </label>
61
- </p>
62
  <p>
63
  <label>
64
  <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' ); ?>
53
  <?php do_action( 'happyforms_part_customize_checkbox_after_options' ); ?>
54
 
55
  <?php do_action( 'happyforms_part_customize_checkbox_before_advanced_options' ); ?>
56
+
 
 
 
 
 
57
  <p>
58
  <label>
59
  <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' ); ?>
core/templates/parts/customize-radio.php CHANGED
@@ -53,12 +53,7 @@
53
  <?php do_action( 'happyforms_part_customize_radio_after_options' ); ?>
54
 
55
  <?php do_action( 'happyforms_part_customize_radio_before_advanced_options' ); ?>
56
-
57
- <p>
58
- <label>
59
- <input type="checkbox" class="checkbox" value="1" <% if ( instance.display_as_letters ) { %>checked="checked"<% } %> data-bind="display_as_letters" /> <?php _e( 'Show as alphabetical choice', 'happyforms' ); ?>
60
- </label>
61
- </p>
62
  <p>
63
  <label>
64
  <input type="checkbox" class="checkbox" value="1" <% if ( instance.other_option ) { %>checked="checked"<% } %> data-bind="other_option" /> <?php _e( 'Add \'other\' choice', 'happyforms' ); ?>
53
  <?php do_action( 'happyforms_part_customize_radio_after_options' ); ?>
54
 
55
  <?php do_action( 'happyforms_part_customize_radio_before_advanced_options' ); ?>
56
+
 
 
 
 
 
57
  <p>
58
  <label>
59
  <input type="checkbox" class="checkbox" value="1" <% if ( instance.other_option ) { %>checked="checked"<% } %> data-bind="other_option" /> <?php _e( 'Add \'other\' choice', 'happyforms' ); ?>
core/templates/parts/frontend-checkbox-other-option.php CHANGED
@@ -20,10 +20,6 @@ foreach ( $array_values as $index => $array ) {
20
 
21
  $checkmark_content = '<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 24 24"><path fill="currentColor" d="M20.285 2l-11.285 11.567-5.286-5.011-3.714 3.716 9 8.728 15-15.285z"/></svg>';
22
 
23
- if ( 1 == $part['display_as_letters'] ) {
24
- $letter = happyforms_get_part_choice_letter( '', $part );
25
- $checkmark_content = $letter;
26
- }
27
  ?>
28
  <div class="happyforms-part__option happyforms-part-option happyforms-part-option--other" id="<?php echo $part['id']; ?>_other">
29
  <label class="option-label">
20
 
21
  $checkmark_content = '<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 24 24"><path fill="currentColor" d="M20.285 2l-11.285 11.567-5.286-5.011-3.714 3.716 9 8.728 15-15.285z"/></svg>';
22
 
 
 
 
 
23
  ?>
24
  <div class="happyforms-part__option happyforms-part-option happyforms-part-option--other" id="<?php echo $part['id']; ?>_other">
25
  <label class="option-label">
core/templates/parts/frontend-checkbox.php CHANGED
@@ -37,10 +37,6 @@
37
  }
38
  ?>
39
  <label class="option-label">
40
- <?php if ( 1 == $part['display_as_letters'] ) {
41
- $letter = happyforms_get_part_choice_letter( $option, $part );
42
- $checkmark_content = $letter;
43
- } ?>
44
  <input type="checkbox" class="happyforms-visuallyhidden happyforms-checkbox" name="<?php happyforms_the_part_name( $part, $form ); ?>[]" value="<?php echo $o; ?>" data-serialize <?php echo $checked; ?> <?php happyforms_the_part_attributes( $part, $form ); ?>>
45
  <span class="checkmark"><?php echo $checkmark_content; ?></span>
46
  <span class="label"><?php echo esc_attr( $option['label'] ); ?></span><?php echo $option['submissions_left_label']; ?>
37
  }
38
  ?>
39
  <label class="option-label">
 
 
 
 
40
  <input type="checkbox" class="happyforms-visuallyhidden happyforms-checkbox" name="<?php happyforms_the_part_name( $part, $form ); ?>[]" value="<?php echo $o; ?>" data-serialize <?php echo $checked; ?> <?php happyforms_the_part_attributes( $part, $form ); ?>>
41
  <span class="checkmark"><?php echo $checkmark_content; ?></span>
42
  <span class="label"><?php echo esc_attr( $option['label'] ); ?></span><?php echo $option['submissions_left_label']; ?>
core/templates/parts/frontend-radio-other-option.php CHANGED
@@ -15,10 +15,6 @@ if ( is_array( $value ) ) {
15
 
16
  $checkmark_content = '<span class="happyforms-radio-circle"></span>';
17
 
18
- if ( 1 == $part['display_as_letters'] ) {
19
- $letter = happyforms_get_part_choice_letter( '', $part );
20
- $checkmark_content = $letter;
21
- }
22
  ?>
23
  <div class="happyforms-part__option happyforms-part-option happyforms-part-option--other" id="<?php echo $part['id']; ?>_other">
24
  <label class="option-label">
15
 
16
  $checkmark_content = '<span class="happyforms-radio-circle"></span>';
17
 
 
 
 
 
18
  ?>
19
  <div class="happyforms-part__option happyforms-part-option happyforms-part-option--other" id="<?php echo $part['id']; ?>_other">
20
  <label class="option-label">
core/templates/parts/frontend-radio.php CHANGED
@@ -26,10 +26,6 @@
26
  $checked = checked( 1, $option['is_default'], false );
27
  }
28
 
29
- if ( 1 == $part['display_as_letters'] ) {
30
- $letter = happyforms_get_part_choice_letter( $option, $part );
31
- $checkmark_content = $letter;
32
- }
33
  ?>
34
  <div class="happyforms-part__option happyforms-part-option" id="<?php echo esc_attr( $option['id'] ); ?>">
35
  <label class="option-label">
26
  $checked = checked( 1, $option['is_default'], false );
27
  }
28
 
 
 
 
 
29
  ?>
30
  <div class="happyforms-part__option happyforms-part-option" id="<?php echo esc_attr( $option['id'] ); ?>">
31
  <label class="option-label">
happyforms.php CHANGED
@@ -5,7 +5,7 @@
5
  * Plugin URI: https://happyforms.io
6
  * Description: We're changin' WordPress forms.
7
  * Author: Happyforms
8
- * Version: 1.13.1
9
  * Author URI: https://happyforms.io
10
  * Upgrade URI: https://happyforms.io/upgrade
11
  */
@@ -22,7 +22,7 @@ if ( defined( 'HAPPYFORMS_UPGRADE_VERSION' ) ) {
22
  /**
23
  * The current version of the plugin.
24
  */
25
- define( 'HAPPYFORMS_VERSION', '1.13.1' );
26
 
27
  if ( ! function_exists( 'happyforms_plugin_file' ) ):
28
  /**
@@ -92,6 +92,14 @@ function happyforms_get_core_folder() {
92
 
93
  endif;
94
 
 
 
 
 
 
 
 
 
95
  /**
96
  * Activate
97
  */
5
  * Plugin URI: https://happyforms.io
6
  * Description: We're changin' WordPress forms.
7
  * Author: Happyforms
8
+ * Version: 1.13.2
9
  * Author URI: https://happyforms.io
10
  * Upgrade URI: https://happyforms.io/upgrade
11
  */
22
  /**
23
  * The current version of the plugin.
24
  */
25
+ define( 'HAPPYFORMS_VERSION', '1.13.2' );
26
 
27
  if ( ! function_exists( 'happyforms_plugin_file' ) ):
28
  /**
92
 
93
  endif;
94
 
95
+ if ( ! function_exists( 'happyforms_get_integrations_folder' ) ):
96
+
97
+ function happyforms_get_integrations_folder() {
98
+ return dirname( __FILE__ ) . '/integrations';
99
+ }
100
+
101
+ endif;
102
+
103
  /**
104
  * Activate
105
  */
inc/assets/css/admin.css CHANGED
@@ -154,3 +154,61 @@ body.post-type-happyforms-activity .fixed .column-contact {
154
  .fixed .column-datetime {
155
  width: 14%;
156
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
154
  .fixed .column-datetime {
155
  width: 14%;
156
  }
157
+
158
+ .hf-pwd input.happyforms-credentials-input {
159
+ font-family: Consolas,Monaco,monospace;
160
+ }
161
+
162
+ .hf-pwd {
163
+ position: relative;
164
+ margin: 0 0 1em;
165
+ }
166
+
167
+ .hf-pwd:last-of-type {
168
+ margin: 0;
169
+ }
170
+
171
+ .hf-pwd:last-child {
172
+ margin: 0 0 1em;
173
+ }
174
+
175
+ .wp-core-ui #happyforms-integrations-screen form .hf-pwd + p {
176
+ margin-top: 1em !important;
177
+ }
178
+
179
+ .hf-pwd input.happyforms-credentials-input {
180
+ padding-right: 2.5rem;
181
+ }
182
+
183
+ .hf-pwd > button.hf-hide-pw {
184
+ position: absolute;
185
+ right: 1px;
186
+ top: 1px;
187
+ display: flex;
188
+ align-items: center;
189
+ border: 1px solid transparent !important;
190
+ width: 2.1rem;
191
+ min-width: 25px;
192
+ min-height: auto;
193
+ height: calc(100% - 2px);
194
+ margin: 0;
195
+ padding: 5px 9px 5px 7px;
196
+ font-size: 14px;
197
+ line-height: 2;
198
+ box-shadow: none;
199
+ background: transparent !important;
200
+ vertical-align: middle;
201
+ }
202
+
203
+ button.hf-hide-pw:focus {
204
+ background: transparent !important;
205
+ border-color: #3582c4;
206
+ box-shadow: 0 0 0 1px #3582c4 !important;
207
+ outline: 2px solid transparent !important;
208
+ }
209
+
210
+ button.hf-hide-pw .dashicons {
211
+ width: 1.25rem;
212
+ height: 1.25rem;
213
+ font-size: 18px;
214
+ }
inc/assets/js/admin/dashboard.js CHANGED
@@ -6,11 +6,7 @@
6
  init: function() {
7
  dashboardInit.apply( this, arguments );
8
 
9
- $( document ).on( 'click', '#adminmenu #toplevel_page_happyforms a[href="#responses"]', this.openUpgradeModal );
10
  $( document ).on( 'click', '#adminmenu #toplevel_page_happyforms a[href="#settings"]', this.openUpgradeModal );
11
- $( document ).on( 'click', '#adminmenu #toplevel_page_happyforms a[href="#integrations"]', this.openUpgradeModal );
12
-
13
- // Onboarding modal logic
14
  $( document ).on( 'click', '.happyforms-modal__navigation-item', this.onModalNavigationItemClick );
15
  },
16
 
6
  init: function() {
7
  dashboardInit.apply( this, arguments );
8
 
 
9
  $( document ).on( 'click', '#adminmenu #toplevel_page_happyforms a[href="#settings"]', this.openUpgradeModal );
 
 
 
10
  $( document ).on( 'click', '.happyforms-modal__navigation-item', this.onModalNavigationItemClick );
11
  },
12
 
inc/assets/js/frontend.js CHANGED
@@ -265,7 +265,7 @@
265
  { name: 'referer', value: referer },
266
  ];
267
 
268
- var honeypotNames = [ 'username', 'email', 'password' ];
269
 
270
  for (var h = 0; h < honeypotNames.length; h ++) {
271
  var inputName = form_id + '-' + honeypotNames[h];
265
  { name: 'referer', value: referer },
266
  ];
267
 
268
+ var honeypotNames = [ 'single_line_text', 'multi_line_text', 'number' ];
269
 
270
  for (var h = 0; h < honeypotNames.length; h ++) {
271
  var inputName = form_id + '-' + honeypotNames[h];
inc/classes/class-happyforms.php CHANGED
@@ -27,6 +27,11 @@ class HappyForms extends HappyForms_Core {
27
  add_action( 'happyforms_form_after', [ $this, 'output_powered_by_form' ] );
28
  add_action( 'happyforms_email_owner_after', [ $this, 'output_powered_by_email' ] );
29
  add_action( 'happyforms_email_user_after', [ $this, 'output_powered_by_email' ] );
 
 
 
 
 
30
 
31
  $this->register_dummy_parts();
32
  $this->add_setup_logic_upgrade_links();
@@ -476,4 +481,65 @@ class HappyForms extends HappyForms_Core {
476
  require_once( happyforms_get_include_folder() . '/classes/class-message-admin.php' );
477
  }
478
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
479
  }
27
  add_action( 'happyforms_form_after', [ $this, 'output_powered_by_form' ] );
28
  add_action( 'happyforms_email_owner_after', [ $this, 'output_powered_by_email' ] );
29
  add_action( 'happyforms_email_user_after', [ $this, 'output_powered_by_email' ] );
30
+ add_action( 'admin_print_footer_scripts', array( $this, 'admin_print_footer_scripts' ) );
31
+
32
+ if ( is_admin() ) {
33
+ require_once( happyforms_get_integrations_folder() . '/classes/class-integrations-page-controller.php' );
34
+ }
35
 
36
  $this->register_dummy_parts();
37
  $this->add_setup_logic_upgrade_links();
481
  require_once( happyforms_get_include_folder() . '/classes/class-message-admin.php' );
482
  }
483
  }
484
+
485
+ public function admin_print_footer_scripts() {
486
+ global $pagenow;
487
+
488
+ $message_post_type = happyforms_get_message_controller()->dummy_type;
489
+ $current_post_type = get_current_screen()->post_type;
490
+
491
+ $is_activity_screen = (
492
+ in_array( $pagenow, array( 'edit.php', 'post.php' ) )
493
+ && ( $current_post_type === $message_post_type )
494
+ );
495
+
496
+ $is_integrations_screen = (
497
+ isset( $_GET['page'] )
498
+ && 'happyforms-integrations' === $_GET['page']
499
+ );
500
+
501
+ if ( ! $is_activity_screen && ! $is_integrations_screen ) {
502
+ return;
503
+ }
504
+
505
+ ?>
506
+ <script type="text/html" id="happyforms-upgrade-modal-template">
507
+ <?php
508
+ $settings = array(
509
+ 'classes' => 'happyforms-modal__frame--upgrade',
510
+ 'dismissible' => false
511
+ );
512
+ require( happyforms_get_core_folder() . '/templates/partials/admin-modal-header.php' );
513
+ require( happyforms_get_include_folder() . '/templates/admin/modal-upgrade.php' );
514
+ require( happyforms_get_core_folder() . '/templates/partials/admin-modal-footer.php' );
515
+ ?>
516
+ </script>
517
+
518
+ <script type="text/javascript">
519
+ ( function( $ ) {
520
+
521
+ var openModal = happyForms.dashboard.openModal;
522
+ var closeModal = happyForms.dashboard.closeModal;
523
+
524
+ happyForms.dashboard.openModal = function() {
525
+ $( 'body' ).addClass( 'modal-open' );
526
+ $( 'body' ).append( $( '#happyforms-upgrade-modal-template' ).html() );
527
+
528
+ $( document ).one( 'click', '.happyforms-modal__overlay', happyForms.dashboard.closeModal );
529
+ $( document ).one( 'click', '.happyforms-modal__dismiss', happyForms.dashboard.closeModal );
530
+ }
531
+
532
+ happyForms.dashboard.closeModal = function() {
533
+ window.location.href = '<?php echo get_admin_url() . 'edit.php?post_type=happyform'; ?>';
534
+ }
535
+
536
+ $( function() {
537
+ happyForms.dashboard.openModal( 'upgrade' );
538
+ } );
539
+
540
+ } )( jQuery );
541
+ </script>
542
+ <?php
543
+ }
544
+
545
  }
inc/classes/class-message-admin.php CHANGED
@@ -50,7 +50,6 @@ class HappyForms_Message_Admin {
50
  add_filter( "manage_{$this->post_type}_posts_columns", array( $this, 'column_headers' ), PHP_INT_MAX );
51
  add_filter( "manage_edit-{$this->post_type}_sortable_columns", array( $this, 'sortable_columns' ), PHP_INT_MAX );
52
  add_filter( "views_edit-{$this->post_type}", array( $this, 'table_views' ) );
53
- add_action( 'admin_footer-edit.php', array( $this, 'print_upgade_modal' ) );
54
  }
55
 
56
  public function column_headers( $columns ) {
@@ -87,12 +86,6 @@ class HappyForms_Message_Admin {
87
  return $views;
88
  }
89
 
90
- public function print_upgade_modal() {
91
- if ( $this->post_type === get_current_screen()->post_type ) {
92
- require( happyforms_get_include_folder() . '/templates/admin/modal-dummy-activity.php' );
93
- }
94
- }
95
-
96
  }
97
 
98
  /**
50
  add_filter( "manage_{$this->post_type}_posts_columns", array( $this, 'column_headers' ), PHP_INT_MAX );
51
  add_filter( "manage_edit-{$this->post_type}_sortable_columns", array( $this, 'sortable_columns' ), PHP_INT_MAX );
52
  add_filter( "views_edit-{$this->post_type}", array( $this, 'table_views' ) );
 
53
  }
54
 
55
  public function column_headers( $columns ) {
86
  return $views;
87
  }
88
 
 
 
 
 
 
 
89
  }
90
 
91
  /**
inc/classes/class-message-controller.php CHANGED
@@ -426,7 +426,7 @@ class HappyForms_Message_Controller {
426
  */
427
  private function validate_honeypot( $form ) {
428
  $honeypot_name = $form['ID'] . 'single_line_text_-1';
429
- $names = array( 'username', 'email', 'password' );
430
  $validated = true;
431
 
432
  foreach( $names as $key ) {
426
  */
427
  private function validate_honeypot( $form ) {
428
  $honeypot_name = $form['ID'] . 'single_line_text_-1';
429
+ $names = array( 'single_line_text', 'multi_line_text', 'number' );
430
  $validated = true;
431
 
432
  foreach( $names as $key ) {
inc/classes/parts/class-part-likert-scale-dummy.php CHANGED
@@ -5,8 +5,8 @@ class HappyForms_Part_LikertScale_Dummy extends HappyForms_Form_Part {
5
  public $type = 'likert_scale_dummy';
6
 
7
  public function __construct() {
8
- $this->label = __( 'Likert Scale', 'happyforms' );
9
- $this->description = __( 'For collecting opinions using a numeric likert scale.', 'happyforms' );
10
  }
11
 
12
  }
5
  public $type = 'likert_scale_dummy';
6
 
7
  public function __construct() {
8
+ $this->label = __( 'Number Scale', 'happyforms' );
9
+ $this->description = __( 'For collecting ratings using a fixed numeric scale.', 'happyforms' );
10
  }
11
 
12
  }
inc/templates/admin/modal-dummy-activity.php DELETED
@@ -1,21 +0,0 @@
1
- <?php $return_url = get_admin_url() . 'edit.php?post_type=happyform'; ?>
2
- <div class="happyforms-modal__overlay">
3
- <div class="happyforms-modal__frame happyforms-modal__frame--upgrade">
4
- <div class="happyforms-modal__header">
5
- <a href="<?php echo $return_url; ?>" class="happyforms-modal__dismiss">
6
-
7
- <svg width="24" height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" role="img" aria-hidden="true" focusable="false"><path d="M13 11.8l6.1-6.3-1-1-6.1 6.2-6.1-6.2-1 1 6.1 6.3-6.5 6.7 1 1 6.5-6.6 6.5 6.6 1-1z"></path></svg>
8
- </a>
9
- </div>
10
- <div class="happyforms-modal__body">
11
- <div class="happyforms-modal__heading">
12
- <h1><?php _e( 'You’ll need to upgrade<br> to access this', 'happyforms' ); ?></h1>
13
- <p><?php _e( 'We offer several, affordable paid plans that include our best features. Upgrade today and increase your customer interactions.', 'happyforms' ); ?></p>
14
- </div>
15
- <div class="happyforms-modal__content">
16
- <a href="https://happyforms.io/upgrade" target="_blank" class="button button-primary button-hero"><?php _e( 'Start Your Risk-Free 14-Day Trial', 'happyforms' ); ?></a>
17
- <p>Or <a href="<?php echo $return_url; ?>" class="happyforms-continue-link">continue with free version</a></p>
18
- </div>
19
- </div>
20
- </div>
21
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
integrations/assets/css/admin.css ADDED
@@ -0,0 +1,128 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #happyforms-integrations-screen {
2
+ pointer-events: none;
3
+ }
4
+
5
+ #happyforms-integrations-screen .widgets-holder-wrap {
6
+ border: 0;
7
+ box-shadow: none;
8
+ background: transparent;
9
+ }
10
+
11
+ #happyforms-integrations-screen .widget {
12
+ max-width: 100%;
13
+ margin: 0 0 10px;
14
+ }
15
+
16
+ #happyforms-integrations-screen .widget .ui-sortable-handle {
17
+ cursor: auto;
18
+ }
19
+
20
+ #happyforms-integrations-screen .widget .widget-top {
21
+ cursor: default;
22
+ }
23
+
24
+ #happyforms-integrations-screen .widget-content label {
25
+ display: inline-block;
26
+ margin-bottom: 4px;
27
+ }
28
+
29
+ #happyforms-integrations-screen .widget p:last-child {
30
+ margin-bottom: 0;
31
+ padding-bottom: 0;
32
+ }
33
+
34
+ #happyforms-integrations-screen .widget .in-widget-title {
35
+ position: relative;
36
+ margin-left: 5px;
37
+ padding-left: 15px;
38
+ font-weight: normal;
39
+ }
40
+
41
+ #happyforms-integrations-screen .widget .in-widget-title:before {
42
+ content: "\f12a";
43
+ position: absolute;
44
+ left: 0;
45
+ padding-right: 3px;
46
+ font-family: dashicons;
47
+ vertical-align: middle;
48
+ }
49
+
50
+ #happyforms-integrations-screen .widget .widget-control-actions {
51
+ margin-top: 15px;
52
+ }
53
+
54
+ #happyforms-integrations-screen .widget .widget-control-actions a {
55
+ font-style: normal;
56
+ }
57
+
58
+ #happyforms-integrations-screen .widget .preview {
59
+ float: none;
60
+ color: #A0A5AA;
61
+ }
62
+
63
+ #happyforms-integrations-screen .nested-block {
64
+ display: none;
65
+ margin: -10px 0 15px 8px;
66
+ padding: 5px 0 5px 15px;
67
+ border-left: 1px solid #ccc;
68
+ }
69
+
70
+ #happyforms-integrations-screen .nested-block p:last-child {
71
+ margin-bottom: 0;
72
+ }
73
+
74
+ #happyforms-integrations-screen .enabled .nested-block {
75
+ display: block;
76
+ }
77
+
78
+ #happyforms-integrations-screen .sidebar-content {
79
+ padding: 0 2px 15px;
80
+ }
81
+
82
+ .wp-core-ui #happyforms-integrations-screen select {
83
+ max-width: 100%;
84
+ }
85
+
86
+ #widgets-right .widgets-holder-wrap .happyforms-service-integration p.description:first-of-type {
87
+ padding: 0;
88
+ }
89
+
90
+ #happyforms-service-aweber .widget-content.authenticated .oauth-flow {
91
+ display: none;
92
+ }
93
+
94
+ #happyforms-service-aweber .widget-content:not(.authenticated) .oauth-connected {
95
+ display: none;
96
+ }
97
+
98
+ #happyforms-service-mailpoet .widget-content p {
99
+ margin-bottom: 0;
100
+ }
101
+
102
+ .happyforms-stripe-block,
103
+ .happyforms-paypal-block {
104
+ display: none;
105
+ }
106
+
107
+ #happyforms-service-stripe[data-active-mode="live"] .happyforms-stripe-block-live,
108
+ #happyforms-service-stripe[data-active-mode="test"] .happyforms-stripe-block-test,
109
+ #happyforms-service-paypal[data-active-mode="live"] .happyforms-paypal-block-live,
110
+ #happyforms-service-paypal[data-active-mode="sandbox"] .happyforms-paypal-block-sandbox {
111
+ display: block;
112
+ }
113
+
114
+ #happyforms-integration-toolbar {
115
+ margin-bottom: 15px;
116
+ }
117
+
118
+ #happyforms-integration-toolbar .media-toolbar-secondary {
119
+ float: left;
120
+ margin-top: 11px;
121
+ }
122
+
123
+ @media only screen and (max-width: 1000px) {
124
+ .media-toolbar-primary.search-form {
125
+ float: right;
126
+ max-width: 50%;
127
+ }
128
+ }
integrations/classes/class-integrations-page-controller.php ADDED
@@ -0,0 +1,95 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class HappyForms_Integrations_Page_Controller {
3
+ private static $instance;
4
+
5
+ public static function instance() {
6
+ if ( is_null( self::$instance ) ) {
7
+ self::$instance = new self();
8
+ }
9
+
10
+ self::$instance->hook();
11
+
12
+ return self::$instance;
13
+ }
14
+
15
+ public function hook() {
16
+ add_filter( 'happyforms_integrations_page_method', array( $this, 'set_admin_page_method' ) );
17
+ add_filter( 'happyforms_integrations_page_url', array( $this, 'set_admin_page_url' ) );
18
+ add_action( 'happyforms_add_meta_boxes', array( $this, 'set_metaboxes' ) );
19
+ add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_scripts' ) );
20
+ }
21
+
22
+ public function set_metaboxes() {
23
+ $screen = get_plugin_page_hookname( plugin_basename( $this->set_admin_page_url() ), 'happyforms' );
24
+
25
+ $widgets = [
26
+ [ 'id' => 'active-campaign', 'label' => __( 'ActiveCampaign', 'happyforms' ), 'context' => 'normal' ],
27
+ [ 'id' => 'aweber', 'label' => __( 'AWeber', 'happyforms' ), 'context' => 'normal' ],
28
+ [ 'id' => 'constant-contact', 'label' => __( 'Constant Contact', 'happyforms' ), 'context' => 'normal' ],
29
+ [ 'id' => 'convertkit', 'label' => __( 'ConvertKit', 'happyforms' ), 'context' => 'normal' ],
30
+ [ 'id' => 'mailchimp', 'label' => __( 'Mailchimp', 'happyforms' ), 'context' => 'normal' ],
31
+ [ 'id' => 'mailerlite', 'label' => __( 'MailerLite', 'happyforms' ), 'context' => 'normal' ],
32
+ [ 'id' => 'mailpoet', 'label' => __( 'MailPoet', 'happyforms' ), 'context' => 'normal' ],
33
+ [ 'id' => 'sendfox', 'label' => __( 'SendFox', 'happyforms' ), 'context' => 'normal' ],
34
+ [ 'id' => 'sendgrid', 'label' => __( 'SendGrid', 'happyforms' ), 'context' => 'normal' ],
35
+ [ 'id' => 'sendinblue', 'label' => __( 'Sendinblue', 'happyforms' ), 'context' => 'normal' ],
36
+ [ 'id' => 'recaptcha', 'label' => __( 'reCAPTCHA', 'happyforms' ), 'context' => 'side' ],
37
+ [ 'id' => 'google-places', 'label' => __( 'Google Places', 'happyforms' ), 'context' => 'side' ],
38
+ [ 'id' => 'google-geocoding', 'label' => __( 'Google Geocoding', 'happyforms' ), 'context' => 'side' ],
39
+ [ 'id' => 'stripe', 'label' => __( 'Stripe', 'happyforms' ), 'context' => 'side' ],
40
+ [ 'id' => 'paypal', 'label' => __( 'PayPal', 'happyforms' ), 'context' => 'side' ],
41
+ [ 'id' => 'zapier', 'label' => __( 'Zapier', 'happyforms' ), 'context' => 'column3' ],
42
+ [ 'id' => 'integromat', 'label' => __( 'Integromat', 'happyforms' ), 'context' => 'column3' ],
43
+ [ 'id' => 'integrately', 'label' => __( 'Integrately', 'happyforms' ), 'context' => 'column3' ],
44
+ [ 'id' => 'google-analytics', 'label' => __( 'Google Analytics', 'happyforms' ), 'context' => 'column4' ],
45
+
46
+ ];
47
+
48
+ foreach( $widgets as $widget ) {
49
+ add_meta_box(
50
+ 'happyforms-integrations-widget-' . $widget['id'],
51
+ $widget['label'], function() use ( $widget ) {
52
+ require( happyforms_get_integrations_folder() . '/templates/widget-' . $widget['id'] . '-dummy.php' );
53
+ },
54
+ $screen, $widget['context'],
55
+ );
56
+ }
57
+ }
58
+
59
+ public function set_admin_page_method() {
60
+ return array( $this, 'integrations_page' );
61
+ }
62
+
63
+ public function set_admin_page_url() {
64
+ return 'happyforms-integrations';
65
+ }
66
+
67
+ public function integrations_page() {
68
+ wp_enqueue_script( 'dashboard' );
69
+ add_filter( 'admin_footer_text', 'happyforms_admin_footer' );
70
+
71
+ require_once( happyforms_get_integrations_folder() . '/templates/admin-integrations.php' );
72
+ }
73
+
74
+ public function admin_enqueue_scripts() {
75
+ if ( ! isset( $_GET['page'] ) || 'happyforms-integrations' !== $_GET['page'] ) {
76
+ return;
77
+ }
78
+
79
+ wp_enqueue_style(
80
+ 'happyforms-integrations',
81
+ happyforms_get_plugin_url() . 'integrations/assets/css/admin.css'
82
+ );
83
+ }
84
+
85
+ }
86
+
87
+ if ( ! function_exists( 'happyforms_get_integrations_page_controller' ) ):
88
+
89
+ function happyforms_get_integrations_page_controller() {
90
+ return HappyForms_Integrations_Page_Controller::instance();
91
+ }
92
+
93
+ endif;
94
+
95
+ happyforms_get_integrations_page_controller();
integrations/templates/admin-integrations.php ADDED
@@ -0,0 +1,43 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php $screen = get_current_screen()->id; ?>
2
+ <div class="wrap" id="happyforms-integrations-screen">
3
+ <h1><?php _e( 'Integrations', 'happyforms' ); ?></h1>
4
+ <div id="happyforms-integration-toolbar" class="media-toolbar wp-filter">
5
+ <div class="media-toolbar-secondary">
6
+ <select id="happyforms-integration-filters" class="attachment-filters">
7
+ <option>All integrations</option>
8
+ <option>Analytics and insights</option>
9
+ <option>Anti-spam and validation</option>
10
+ <option>Automation services</option>
11
+ <option>Email marketing</option>
12
+ <option>Location services</option>
13
+ <option>Payment processing</option>
14
+ </select>
15
+ </div>
16
+
17
+ <div class="media-toolbar-primary search-form">
18
+ <label for="media-search-input" class="media-search-input-label">Search</label>
19
+ <input type="search" id="happyforms-search-input" class="search">
20
+ </div>
21
+ </div>
22
+ <div id="dashboard-widgets-wrap" class="happyforms-admin-widgets">
23
+ <div id="dashboard-widgets" class="metabox-holder">
24
+ <div id="postbox-container-1" class="postbox-container">
25
+ <?php do_meta_boxes( $screen, 'normal', '' ); ?>
26
+ </div>
27
+ <div id="postbox-container-2" class="postbox-container">
28
+ <?php do_meta_boxes( $screen, 'side', '' ); ?>
29
+ </div>
30
+ <div id="postbox-container-3" class="postbox-container">
31
+ <?php do_meta_boxes( $screen, 'column3', '' ); ?>
32
+ </div>
33
+ <div id="postbox-container-4" class="postbox-container">
34
+ <?php do_meta_boxes( $screen, 'column4', '' ); ?>
35
+ </div>
36
+ </div>
37
+ <?php
38
+ wp_nonce_field( 'closedpostboxes', 'closedpostboxesnonce', false );
39
+ wp_nonce_field( 'meta-box-order', 'meta-box-order-nonce', false );
40
+ ?>
41
+
42
+ </div>
43
+ </div>
integrations/templates/widget-active-campaign-dummy.php ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <form class="happyforms-service">
2
+ <div class="widget-content">
3
+ <div id="happyforms-service-active-campaign" class="happyforms-service-integration">
4
+ <div class="widget-content">
5
+ <label for=""><?php _e( 'API URL', 'happyforms' ); ?></label>
6
+ <div class="hf-pwd">
7
+ <input type="password" class="widefat happyforms-credentials-input connected" id="" name="" value="" />
8
+ <button type="button" class="button button-secondary hf-hide-pw hide-if-no-js" data-toggle="0" aria-label="<?php _e( 'Show credentials', 'happyforms' ); ?>" data-label-show="<?php _e( 'Show credentials', 'happyforms' ); ?>" data-label-hide="<?php _e( 'Hide credentials', 'happyforms' ); ?>">
9
+ <span class="dashicons dashicons-visibility" aria-hidden="true"></span>
10
+ </button>
11
+ </div>
12
+ <label for=""><?php _e( 'API key', 'happyforms' ); ?></label>
13
+ <div class="hf-pwd">
14
+ <input type="password" class="widefat happyforms-credentials-input connected" id="" name="" value="" />
15
+ <button type="button" class="button button-secondary hf-hide-pw hide-if-no-js" data-toggle="0" aria-label="<?php _e( 'Show credentials', 'happyforms' ); ?>" data-label-show="<?php _e( 'Show credentials', 'happyforms' ); ?>" data-label-hide="<?php _e( 'Hide credentials', 'happyforms' ); ?>">
16
+ <span class="dashicons dashicons-visibility" aria-hidden="true"></span>
17
+ </button>
18
+ </div>
19
+ </div>
20
+ </div>
21
+ <div class="widget-control-actions">
22
+ <div class="alignleft">
23
+ <input type="submit" class="connected button button-primary widget-control-save right" value="<?php _e( 'Save Changes', 'happyforms' ); ?>">
24
+ </div>
25
+ <br class="clear" />
26
+ </div>
27
+ </div>
28
+ </form>
integrations/templates/widget-aweber-dummy.php ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ $label_link = ' (<a href="#" target="_blank">' . __( 'get your code', 'happyforms' ) . '</a>)';
3
+ ?>
4
+ <form class="happyforms-service">
5
+ <div class="widget-content">
6
+ <div id="happyforms-service-aweber" class="happyforms-service-integration">
7
+ <div class="widget-content">
8
+ <div class="oauth-flow">
9
+ <label for=""><?php echo __( 'Verification code', 'happyforms' ) . $label_link; ?></label>
10
+ <div class="hf-pwd">
11
+ <input type="password" class="widefat happyforms-credentials-input connected" id="" name="" value="" />
12
+ <button type="button" class="button button-secondary hf-hide-pw hide-if-no-js" data-toggle="0" aria-label="<?php _e( 'Show credentials', 'happyforms' ); ?>" data-label-show="<?php _e( 'Show credentials', 'happyforms' ); ?>" data-label-hide="<?php _e( 'Hide credentials', 'happyforms' ); ?>">
13
+ <span class="dashicons dashicons-visibility" aria-hidden="true"></span>
14
+ </button>
15
+ </div>
16
+ </div>
17
+ </div>
18
+ </div>
19
+ <div class="widget-control-actions">
20
+ <div class="alignleft">
21
+ <input type="submit" class="connected button button-primary widget-control-save right" value="<?php _e( 'Save Changes', 'happyforms' ); ?>">
22
+ </div>
23
+ <br class="clear" />
24
+ </div>
25
+ </div>
26
+ </form>
integrations/templates/widget-constant-contact-dummy.php ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <form class="happyforms-service">
2
+ <div class="widget-content">
3
+ <div id="happyforms-service-active-campaign" class="happyforms-service-integration">
4
+ <div class="widget-content">
5
+ <label for=""><?php _e( 'API URL', 'happyforms' ); ?></label>
6
+ <div class="hf-pwd">
7
+ <input type="password" class="widefat happyforms-credentials-input connected" id="" name="" value="" />
8
+ <button type="button" class="button button-secondary hf-hide-pw hide-if-no-js" data-toggle="0" aria-label="<?php _e( 'Show credentials', 'happyforms' ); ?>" data-label-show="<?php _e( 'Show credentials', 'happyforms' ); ?>" data-label-hide="<?php _e( 'Hide credentials', 'happyforms' ); ?>">
9
+ <span class="dashicons dashicons-visibility" aria-hidden="true"></span>
10
+ </button>
11
+ </div>
12
+ <label for=""><?php _e( 'API key', 'happyforms' ); ?></label>
13
+ <div class="hf-pwd">
14
+ <input type="password" class="widefat happyforms-credentials-input connected" id="" name="" value="" />
15
+ <button type="button" class="button button-secondary hf-hide-pw hide-if-no-js" data-toggle="0" aria-label="<?php _e( 'Show credentials', 'happyforms' ); ?>" data-label-show="<?php _e( 'Show credentials', 'happyforms' ); ?>" data-label-hide="<?php _e( 'Hide credentials', 'happyforms' ); ?>">
16
+ <span class="dashicons dashicons-visibility" aria-hidden="true"></span>
17
+ </button>
18
+ </div>
19
+ </div>
20
+ </div>
21
+ <div class="widget-control-actions">
22
+ <div class="alignleft">
23
+ <input type="submit" class="connected button button-primary widget-control-save right" value="<?php _e( 'Save Changes', 'happyforms' ); ?>">
24
+ </div>
25
+ <br class="clear" />
26
+ </div>
27
+ </div>
28
+ </form>
integrations/templates/widget-convertkit-dummy.php ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <form class="happyforms-service hf-ajax-submit">
2
+ <div class="widget-content">
3
+ <div id="happyforms-service-google-places" class="happyforms-service-integration">
4
+ <div class="widget-content">
5
+ <label for=""><?php _e( 'API key', 'happyforms' ); ?></label>
6
+ <div class="hf-pwd">
7
+ <input type="password" class="widefat happyforms-credentials-input connected" id="" name="" value="" />
8
+ <button type="button" class="button button-secondary hf-hide-pw hide-if-no-js" data-toggle="0" aria-label="<?php _e( 'Show credentials', 'happyforms' ); ?>" data-label-show="<?php _e( 'Show credentials', 'happyforms' ); ?>" data-label-hide="<?php _e( 'Hide credentials', 'happyforms' ); ?>">
9
+ <span class="dashicons dashicons-visibility" aria-hidden="true"></span>
10
+ </button>
11
+ </div>
12
+ </div>
13
+ </div>
14
+ <div class="widget-control-actions">
15
+ <div class="alignleft">
16
+ <input type="button" class="connected button button-primary widget-control-save right" value="<?php _e( 'Save Changes', 'happyforms' ); ?>">
17
+ </div>
18
+ <br class="clear" />
19
+ </div>
20
+ </div>
21
+ </form>
integrations/templates/widget-google-analytics-dummy.php ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <form class="happyforms-service hf-ajax-submit">
2
+ <div class="widget-content">
3
+ <div id="happyforms-service-google-places" class="happyforms-service-integration">
4
+ <div class="widget-content">
5
+ <label for=""><?php _e( 'Tracking ID', 'happyforms' ); ?></label>
6
+ <div class="hf-pwd">
7
+ <input type="password" class="widefat happyforms-credentials-input connected" id="" name="" value="" />
8
+ <button type="button" class="button button-secondary hf-hide-pw hide-if-no-js" data-toggle="0" aria-label="<?php _e( 'Show credentials', 'happyforms' ); ?>" data-label-show="<?php _e( 'Show credentials', 'happyforms' ); ?>" data-label-hide="<?php _e( 'Hide credentials', 'happyforms' ); ?>">
9
+ <span class="dashicons dashicons-visibility" aria-hidden="true"></span>
10
+ </button>
11
+ </div>
12
+ </div>
13
+ </div>
14
+ <div class="widget-control-actions">
15
+ <div class="alignleft">
16
+ <input type="button" class="connected button button-primary widget-control-save right" value="<?php _e( 'Save Changes', 'happyforms' ); ?>">
17
+ </div>
18
+ <br class="clear" />
19
+ </div>
20
+ </div>
21
+ </form>
integrations/templates/widget-google-geocoding-dummy.php ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <form class="happyforms-service hf-ajax-submit">
2
+ <div class="widget-content">
3
+ <div id="happyforms-service-google-places" class="happyforms-service-integration">
4
+ <div class="widget-content">
5
+ <label for=""><?php _e( 'API key', 'happyforms' ); ?></label>
6
+ <div class="hf-pwd">
7
+ <input type="password" class="widefat happyforms-credentials-input connected" id="" name="" value="" />
8
+ <button type="button" class="button button-secondary hf-hide-pw hide-if-no-js" data-toggle="0" aria-label="<?php _e( 'Show credentials', 'happyforms' ); ?>" data-label-show="<?php _e( 'Show credentials', 'happyforms' ); ?>" data-label-hide="<?php _e( 'Hide credentials', 'happyforms' ); ?>">
9
+ <span class="dashicons dashicons-visibility" aria-hidden="true"></span>
10
+ </button>
11
+ </div>
12
+ </div>
13
+ </div>
14
+ <div class="widget-control-actions">
15
+ <div class="alignleft">
16
+ <input type="button" class="connected button button-primary widget-control-save right" value="<?php _e( 'Save Changes', 'happyforms' ); ?>">
17
+ </div>
18
+ <br class="clear" />
19
+ </div>
20
+ </div>
21
+ </form>
integrations/templates/widget-google-places-dummy.php ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <form class="happyforms-service hf-ajax-submit">
2
+ <div class="widget-content">
3
+ <div id="happyforms-service-google-places" class="happyforms-service-integration">
4
+ <div class="widget-content">
5
+ <label for=""><?php _e( 'API key', 'happyforms' ); ?></label>
6
+ <div class="hf-pwd">
7
+ <input type="password" class="widefat happyforms-credentials-input connected" id="" name="" value="" />
8
+ <button type="button" class="button button-secondary hf-hide-pw hide-if-no-js" data-toggle="0" aria-label="<?php _e( 'Show credentials', 'happyforms' ); ?>" data-label-show="<?php _e( 'Show credentials', 'happyforms' ); ?>" data-label-hide="<?php _e( 'Hide credentials', 'happyforms' ); ?>">
9
+ <span class="dashicons dashicons-visibility" aria-hidden="true"></span>
10
+ </button>
11
+ </div>
12
+ </div>
13
+ </div>
14
+ <div class="widget-control-actions">
15
+ <div class="alignleft">
16
+ <input type="button" class="connected button button-primary widget-control-save right" value="<?php _e( 'Save Changes', 'happyforms' ); ?>">
17
+ </div>
18
+ <br class="clear" />
19
+ </div>
20
+ </div>
21
+ </form>
integrations/templates/widget-integrately-dummy.php ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <form class="happyforms-service hf-ajax-submit">
2
+ <div class="widget-content">
3
+ <div id="happyforms-service-google-places" class="happyforms-service-integration">
4
+ <div class="widget-content">
5
+ <label for=""><?php _e( 'API key', 'happyforms' ); ?></label>
6
+ <div class="hf-pwd">
7
+ <input type="password" class="widefat happyforms-credentials-input connected" id="" name="" value="<?php echo wp_generate_uuid4(); ?>" />
8
+ <button type="button" class="button button-secondary hf-hide-pw hide-if-no-js" data-toggle="0" aria-label="<?php _e( 'Show credentials', 'happyforms' ); ?>" data-label-show="<?php _e( 'Show credentials', 'happyforms' ); ?>" data-label-hide="<?php _e( 'Hide credentials', 'happyforms' ); ?>">
9
+ <span class="dashicons dashicons-visibility" aria-hidden="true"></span>
10
+ </button>
11
+ </div>
12
+ </div>
13
+ </div>
14
+ <div class="widget-control-actions">
15
+ <div class="alignleft">
16
+ <input type="button" class="connected button button-primary widget-control-save right" value="<?php _e( 'Save Changes', 'happyforms' ); ?>">
17
+ </div>
18
+ <br class="clear" />
19
+ </div>
20
+ </div>
21
+ </form>
integrations/templates/widget-integromat-dummy.php ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <form class="happyforms-service hf-ajax-submit">
2
+ <div class="widget-content">
3
+ <div id="happyforms-service-google-places" class="happyforms-service-integration">
4
+ <div class="widget-content">
5
+ <label for=""><?php _e( 'API key', 'happyforms' ); ?></label>
6
+ <div class="hf-pwd">
7
+ <input type="password" class="widefat happyforms-credentials-input connected" id="" name="" value="<?php echo wp_generate_uuid4(); ?>" />
8
+ <button type="button" class="button button-secondary hf-hide-pw hide-if-no-js" data-toggle="0" aria-label="<?php _e( 'Show credentials', 'happyforms' ); ?>" data-label-show="<?php _e( 'Show credentials', 'happyforms' ); ?>" data-label-hide="<?php _e( 'Hide credentials', 'happyforms' ); ?>">
9
+ <span class="dashicons dashicons-visibility" aria-hidden="true"></span>
10
+ </button>
11
+ </div>
12
+ </div>
13
+ </div>
14
+ <div class="widget-control-actions">
15
+ <div class="alignleft">
16
+ <input type="button" class="connected button button-primary widget-control-save right" value="<?php _e( 'Save Changes', 'happyforms' ); ?>">
17
+ </div>
18
+ <br class="clear" />
19
+ </div>
20
+ </div>
21
+ </form>
integrations/templates/widget-mailchimp-dummy.php ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <form class="happyforms-service hf-ajax-submit">
2
+ <div class="widget-content">
3
+ <div id="happyforms-service-google-places" class="happyforms-service-integration">
4
+ <div class="widget-content">
5
+ <label for=""><?php _e( 'API key', 'happyforms' ); ?></label>
6
+ <div class="hf-pwd">
7
+ <input type="password" class="widefat happyforms-credentials-input connected" id="" name="" value="" />
8
+ <button type="button" class="button button-secondary hf-hide-pw hide-if-no-js" data-toggle="0" aria-label="<?php _e( 'Show credentials', 'happyforms' ); ?>" data-label-show="<?php _e( 'Show credentials', 'happyforms' ); ?>" data-label-hide="<?php _e( 'Hide credentials', 'happyforms' ); ?>">
9
+ <span class="dashicons dashicons-visibility" aria-hidden="true"></span>
10
+ </button>
11
+ </div>
12
+ </div>
13
+ </div>
14
+ <div class="widget-control-actions">
15
+ <div class="alignleft">
16
+ <input type="button" class="connected button button-primary widget-control-save right" value="<?php _e( 'Save Changes', 'happyforms' ); ?>">
17
+ </div>
18
+ <br class="clear" />
19
+ </div>
20
+ </div>
21
+ </form>
integrations/templates/widget-mailerlite-dummy.php ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <form class="happyforms-service hf-ajax-submit">
2
+ <div class="widget-content">
3
+ <div id="happyforms-service-google-places" class="happyforms-service-integration">
4
+ <div class="widget-content">
5
+ <label for=""><?php _e( 'API key', 'happyforms' ); ?></label>
6
+ <div class="hf-pwd">
7
+ <input type="password" class="widefat happyforms-credentials-input connected" id="" name="" value="" />
8
+ <button type="button" class="button button-secondary hf-hide-pw hide-if-no-js" data-toggle="0" aria-label="<?php _e( 'Show credentials', 'happyforms' ); ?>" data-label-show="<?php _e( 'Show credentials', 'happyforms' ); ?>" data-label-hide="<?php _e( 'Hide credentials', 'happyforms' ); ?>">
9
+ <span class="dashicons dashicons-visibility" aria-hidden="true"></span>
10
+ </button>
11
+ </div>
12
+ </div>
13
+ </div>
14
+ <div class="widget-control-actions">
15
+ <div class="alignleft">
16
+ <input type="button" class="connected button button-primary widget-control-save right" value="<?php _e( 'Save Changes', 'happyforms' ); ?>">
17
+ </div>
18
+ <br class="clear" />
19
+ </div>
20
+ </div>
21
+ </form>
integrations/templates/widget-mailpoet-dummy.php ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <form class="happyforms-service hf-ajax-submit">
2
+ <div class="widget-content">
3
+ <div id="happyforms-service-google-places" class="happyforms-service-integration">
4
+ <div class="widget-content">
5
+ <p><?php _e( 'MailPoet plugin must first be installed and activated to use this integration.', 'happyforms' ); ?></p>
6
+ </div>
7
+ </div>
8
+ </div>
9
+ </form>
integrations/templates/widget-paypal-dummy.php ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <form class="happyforms-service hf-ajax-submit">
2
+ <div class="widget-content has-service-selection">
3
+ <p>
4
+ <label for="happyforms_integrations_spam_service"><?php _e( 'Mode', 'happyforms' ); ?></label>
5
+ <select id="happyforms_integrations_spam_service" class="widefat">
6
+ <option>Live</option>
7
+ </select>
8
+ </p>
9
+
10
+ <div id="happyforms-service-recaptcha" class="happyforms-service-integration">
11
+ <div class="widget-content">
12
+ <label for=""><?php _e( 'Client ID', 'happyforms' ); ?></label>
13
+ <div class="hf-pwd">
14
+ <input type="password" class="widefat happyforms-credentials-input connected" id="" name="" value="" />
15
+ <button type="button" class="button button-secondary hf-hide-pw hide-if-no-js" data-toggle="0" aria-label="<?php _e( 'Show credentials', 'happyforms' ); ?>" data-label-show="<?php _e( 'Show credentials', 'happyforms' ); ?>" data-label-hide="<?php _e( 'Hide credentials', 'happyforms' ); ?>">
16
+ <span class="dashicons dashicons-visibility" aria-hidden="true"></span>
17
+ </button>
18
+ </div>
19
+ <label for=""><?php _e( 'Client secret', 'happyforms' ); ?></label>
20
+ <div class="hf-pwd">
21
+ <input type="password" class="widefat happyforms-credentials-input connected" id="" name="" value="" />
22
+ <button type="button" class="button button-secondary hf-hide-pw hide-if-no-js" data-toggle="0" aria-label="<?php _e( 'Show credentials', 'happyforms' ); ?>" data-label-show="<?php _e( 'Show credentials', 'happyforms' ); ?>" data-label-hide="<?php _e( 'Hide credentials', 'happyforms' ); ?>">
23
+ <span class="dashicons dashicons-visibility" aria-hidden="true"></span>
24
+ </button>
25
+ </div>
26
+ </div>
27
+ </div>
28
+
29
+ <div class="widget-control-actions">
30
+ <div class="alignleft">
31
+ <span class="spinner"></span>
32
+ <input type="submit" class="connected button button-primary widget-control-save right" value="<?php _e( 'Save Changes', 'happyforms' ); ?>">
33
+ </div>
34
+ <br class="clear" />
35
+ </div>
36
+ </div>
37
+ </form>
38
+
integrations/templates/widget-recaptcha-dummy.php ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <form class="happyforms-service hf-ajax-submit">
2
+ <div class="widget-content has-service-selection">
3
+ <p>
4
+ <label for="happyforms_integrations_spam_service"><?php _e( 'Service', 'happyforms' ); ?></label>
5
+ <select id="happyforms_integrations_spam_service" class="widefat">
6
+ <option>V2</option>
7
+ </select>
8
+ </p>
9
+
10
+ <div id="happyforms-service-recaptcha" class="happyforms-service-integration">
11
+ <div class="widget-content">
12
+ <label for=""><?php _e( 'Site key', 'happyforms' ); ?></label>
13
+ <div class="hf-pwd">
14
+ <input type="password" class="widefat happyforms-credentials-input connected" id="" name="" value="" />
15
+ <button type="button" class="button button-secondary hf-hide-pw hide-if-no-js" data-toggle="0" aria-label="<?php _e( 'Show credentials', 'happyforms' ); ?>" data-label-show="<?php _e( 'Show credentials', 'happyforms' ); ?>" data-label-hide="<?php _e( 'Hide credentials', 'happyforms' ); ?>">
16
+ <span class="dashicons dashicons-visibility" aria-hidden="true"></span>
17
+ </button>
18
+ </div>
19
+ <label for=""><?php _e( 'Secret key', 'happyforms' ); ?></label>
20
+ <div class="hf-pwd">
21
+ <input type="password" class="widefat happyforms-credentials-input connected" id="" name="" value="" />
22
+ <button type="button" class="button button-secondary hf-hide-pw hide-if-no-js" data-toggle="0" aria-label="<?php _e( 'Show credentials', 'happyforms' ); ?>" data-label-show="<?php _e( 'Show credentials', 'happyforms' ); ?>" data-label-hide="<?php _e( 'Hide credentials', 'happyforms' ); ?>">
23
+ <span class="dashicons dashicons-visibility" aria-hidden="true"></span>
24
+ </button>
25
+ </div>
26
+ </div>
27
+ </div>
28
+
29
+ <div class="widget-control-actions">
30
+ <div class="alignleft">
31
+ <span class="spinner"></span>
32
+ <input type="submit" class="connected button button-primary widget-control-save right" value="<?php _e( 'Save Changes', 'happyforms' ); ?>">
33
+ </div>
34
+ <br class="clear" />
35
+ </div>
36
+ </div>
37
+ </form>
38
+
integrations/templates/widget-sendfox-dummy.php ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <form class="happyforms-service hf-ajax-submit">
2
+ <div class="widget-content">
3
+ <div id="happyforms-service-google-places" class="happyforms-service-integration">
4
+ <div class="widget-content">
5
+ <label for=""><?php _e( 'Personal access token', 'happyforms' ); ?></label>
6
+ <div class="hf-pwd">
7
+ <input type="password" class="widefat happyforms-credentials-input connected" id="" name="" value="" />
8
+ <button type="button" class="button button-secondary hf-hide-pw hide-if-no-js" data-toggle="0" aria-label="<?php _e( 'Show credentials', 'happyforms' ); ?>" data-label-show="<?php _e( 'Show credentials', 'happyforms' ); ?>" data-label-hide="<?php _e( 'Hide credentials', 'happyforms' ); ?>">
9
+ <span class="dashicons dashicons-visibility" aria-hidden="true"></span>
10
+ </button>
11
+ </div>
12
+ </div>
13
+ </div>
14
+ <div class="widget-control-actions">
15
+ <div class="alignleft">
16
+ <input type="button" class="connected button button-primary widget-control-save right" value="<?php _e( 'Save Changes', 'happyforms' ); ?>">
17
+ </div>
18
+ <br class="clear" />
19
+ </div>
20
+ </div>
21
+ </form>
integrations/templates/widget-sendgrid-dummy.php ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <form class="happyforms-service hf-ajax-submit">
2
+ <div class="widget-content">
3
+ <div id="happyforms-service-google-places" class="happyforms-service-integration">
4
+ <div class="widget-content">
5
+ <label for=""><?php _e( 'Personal access token', 'happyforms' ); ?></label>
6
+ <div class="hf-pwd">
7
+ <input type="password" class="widefat happyforms-credentials-input connected" id="" name="" value="" />
8
+ <button type="button" class="button button-secondary hf-hide-pw hide-if-no-js" data-toggle="0" aria-label="<?php _e( 'Show credentials', 'happyforms' ); ?>" data-label-show="<?php _e( 'Show credentials', 'happyforms' ); ?>" data-label-hide="<?php _e( 'Hide credentials', 'happyforms' ); ?>">
9
+ <span class="dashicons dashicons-visibility" aria-hidden="true"></span>
10
+ </button>
11
+ </div>
12
+ </div>
13
+ </div>
14
+ <div class="widget-control-actions">
15
+ <div class="alignleft">
16
+ <input type="button" class="connected button button-primary widget-control-save right" value="<?php _e( 'Save Changes', 'happyforms' ); ?>">
17
+ </div>
18
+ <br class="clear" />
19
+ </div>
20
+ </div>
21
+ </form>
integrations/templates/widget-sendinblue-dummy.php ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <form class="happyforms-service hf-ajax-submit">
2
+ <div class="widget-content">
3
+ <div id="happyforms-service-google-places" class="happyforms-service-integration">
4
+ <div class="widget-content">
5
+ <label for=""><?php _e( 'Personal access token', 'happyforms' ); ?></label>
6
+ <div class="hf-pwd">
7
+ <input type="password" class="widefat happyforms-credentials-input connected" id="" name="" value="" />
8
+ <button type="button" class="button button-secondary hf-hide-pw hide-if-no-js" data-toggle="0" aria-label="<?php _e( 'Show credentials', 'happyforms' ); ?>" data-label-show="<?php _e( 'Show credentials', 'happyforms' ); ?>" data-label-hide="<?php _e( 'Hide credentials', 'happyforms' ); ?>">
9
+ <span class="dashicons dashicons-visibility" aria-hidden="true"></span>
10
+ </button>
11
+ </div>
12
+ </div>
13
+ </div>
14
+ <div class="widget-control-actions">
15
+ <div class="alignleft">
16
+ <input type="button" class="connected button button-primary widget-control-save right" value="<?php _e( 'Save Changes', 'happyforms' ); ?>">
17
+ </div>
18
+ <br class="clear" />
19
+ </div>
20
+ </div>
21
+ </form>
integrations/templates/widget-stripe-dummy.php ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <form class="happyforms-service hf-ajax-submit">
2
+ <div class="widget-content has-service-selection">
3
+ <p>
4
+ <label for="happyforms_integrations_spam_service"><?php _e( 'Mode', 'happyforms' ); ?></label>
5
+ <select id="happyforms_integrations_spam_service" class="widefat">
6
+ <option>Live</option>
7
+ </select>
8
+ </p>
9
+
10
+ <div id="happyforms-service-recaptcha" class="happyforms-service-integration">
11
+ <div class="widget-content">
12
+ <label for=""><?php _e( 'Publishable key', 'happyforms' ); ?></label>
13
+ <div class="hf-pwd">
14
+ <input type="password" class="widefat happyforms-credentials-input connected" id="" name="" value="" />
15
+ <button type="button" class="button button-secondary hf-hide-pw hide-if-no-js" data-toggle="0" aria-label="<?php _e( 'Show credentials', 'happyforms' ); ?>" data-label-show="<?php _e( 'Show credentials', 'happyforms' ); ?>" data-label-hide="<?php _e( 'Hide credentials', 'happyforms' ); ?>">
16
+ <span class="dashicons dashicons-visibility" aria-hidden="true"></span>
17
+ </button>
18
+ </div>
19
+ <label for=""><?php _e( 'Secret key', 'happyforms' ); ?></label>
20
+ <div class="hf-pwd">
21
+ <input type="password" class="widefat happyforms-credentials-input connected" id="" name="" value="" />
22
+ <button type="button" class="button button-secondary hf-hide-pw hide-if-no-js" data-toggle="0" aria-label="<?php _e( 'Show credentials', 'happyforms' ); ?>" data-label-show="<?php _e( 'Show credentials', 'happyforms' ); ?>" data-label-hide="<?php _e( 'Hide credentials', 'happyforms' ); ?>">
23
+ <span class="dashicons dashicons-visibility" aria-hidden="true"></span>
24
+ </button>
25
+ </div>
26
+ </div>
27
+ </div>
28
+
29
+ <div class="widget-control-actions">
30
+ <div class="alignleft">
31
+ <span class="spinner"></span>
32
+ <input type="submit" class="connected button button-primary widget-control-save right" value="<?php _e( 'Save Changes', 'happyforms' ); ?>">
33
+ </div>
34
+ <br class="clear" />
35
+ </div>
36
+ </div>
37
+ </form>
38
+
integrations/templates/widget-zapier-dummy.php ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <form class="happyforms-service hf-ajax-submit">
2
+ <div class="widget-content">
3
+ <div id="happyforms-service-google-places" class="happyforms-service-integration">
4
+ <div class="widget-content">
5
+ <label for=""><?php _e( 'API key', 'happyforms' ); ?></label>
6
+ <div class="hf-pwd">
7
+ <input type="password" class="widefat happyforms-credentials-input connected" id="" name="" value="<?php echo wp_generate_uuid4(); ?>" />
8
+ <button type="button" class="button button-secondary hf-hide-pw hide-if-no-js" data-toggle="0" aria-label="<?php _e( 'Show credentials', 'happyforms' ); ?>" data-label-show="<?php _e( 'Show credentials', 'happyforms' ); ?>" data-label-hide="<?php _e( 'Hide credentials', 'happyforms' ); ?>">
9
+ <span class="dashicons dashicons-visibility" aria-hidden="true"></span>
10
+ </button>
11
+ </div>
12
+ </div>
13
+ </div>
14
+ <div class="widget-control-actions">
15
+ <div class="alignleft">
16
+ <input type="button" class="connected button button-primary widget-control-save right" value="<?php _e( 'Save Changes', 'happyforms' ); ?>">
17
+ </div>
18
+ <br class="clear" />
19
+ </div>
20
+ </div>
21
+ </form>
languages/happyforms.pot CHANGED
@@ -2,9 +2,9 @@
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.13.1\n"
6
  "Report-Msgid-Bugs-To: https://thethemefoundry.com/support/\n"
7
- "POT-Creation-Date: 2021-09-07 07:47:23+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=utf-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
@@ -24,15 +24,19 @@ msgstr ""
24
  msgid "Displays a form."
25
  msgstr ""
26
 
27
- #: core/classes/class-block.php:115 core/classes/parts/class-part-select.php:56
28
  msgid "Choose"
29
  msgstr ""
30
 
31
- #: core/classes/class-block.php:116
32
  msgid "Which form would you like to add here?"
33
  msgstr ""
34
 
35
- #: core/classes/class-block.php:117
 
 
 
 
36
  msgid "HappyForms Settings"
37
  msgstr ""
38
 
@@ -162,7 +166,7 @@ msgstr ""
162
  msgid "Duplicate"
163
  msgstr ""
164
 
165
- #: core/classes/class-form-admin.php:423 inc/classes/class-message-admin.php:84
166
  msgid "Trash"
167
  msgstr ""
168
 
@@ -201,10 +205,6 @@ msgstr ""
201
  msgid "Search Forms"
202
  msgstr ""
203
 
204
- #: core/classes/class-form-controller.php:81
205
- msgid "No forms found."
206
- msgstr ""
207
-
208
  #: core/classes/class-form-controller.php:82
209
  msgid "No forms found in Trash."
210
  msgstr ""
@@ -489,7 +489,7 @@ msgstr ""
489
  msgid "Submit form"
490
  msgstr ""
491
 
492
- #: core/classes/class-form-shuffle.php:43 inc/classes/class-happyforms.php:119
493
  msgid "Randomize fields to prevent bias"
494
  msgstr ""
495
 
@@ -810,12 +810,12 @@ msgstr ""
810
 
811
  #: core/classes/class-form-styles.php:745
812
  #: core/templates/parts/customize-checkbox.php:4
813
- #: core/templates/parts/customize-checkbox.php:148
814
  #: core/templates/parts/customize-email.php:4
815
  #: core/templates/parts/customize-multi-line-text.php:4
816
  #: core/templates/parts/customize-number.php:4
817
  #: core/templates/parts/customize-radio.php:4
818
- #: core/templates/parts/customize-radio.php:122
819
  #: core/templates/parts/customize-select.php:4
820
  #: core/templates/parts/customize-select.php:105
821
  #: core/templates/parts/customize-single-line-text.php:4
@@ -959,6 +959,7 @@ msgstr ""
959
 
960
  #: core/classes/class-happyforms-core.php:206
961
  #: core/classes/class-happyforms-core.php:207
 
962
  msgid "Integrations"
963
  msgstr ""
964
 
@@ -1120,7 +1121,7 @@ msgid "Select all"
1120
  msgstr ""
1121
 
1122
  #: core/classes/parts/class-part-checkbox.php:93
1123
- #: core/classes/parts/class-part-radio.php:90
1124
  #: core/classes/parts/class-part-select.php:80
1125
  msgid "Other"
1126
  msgstr ""
@@ -2974,8 +2975,8 @@ msgstr ""
2974
 
2975
  #: core/templates/customize-form-item.php:33
2976
  #: core/templates/customize-form-part-footer.php:3
2977
- #: core/templates/parts/customize-checkbox.php:169
2978
- #: core/templates/parts/customize-radio.php:143
2979
  #: core/templates/parts/customize-select.php:126
2980
  msgid "Delete"
2981
  msgstr ""
@@ -3003,7 +3004,7 @@ msgid "Clear Results"
3003
  msgstr ""
3004
 
3005
  #: core/templates/customize-form-parts-drawer.php:38
3006
- #: inc/classes/class-happyforms.php:111
3007
  #: inc/templates/customize-controls/checkbox_dummy.php:7
3008
  #: inc/templates/customize-controls/email-parts-list-dummy.php:11
3009
  msgid "Upgrade"
@@ -3050,32 +3051,32 @@ msgid "Close"
3050
  msgstr ""
3051
 
3052
  #: core/templates/partials/customize-field-width.php:4
3053
- #: core/templates/parts/customize-checkbox.php:118
3054
- #: core/templates/parts/customize-radio.php:92
3055
  msgid "Full"
3056
  msgstr ""
3057
 
3058
  #: core/templates/partials/customize-field-width.php:5
3059
- #: core/templates/parts/customize-checkbox.php:119
3060
- #: core/templates/parts/customize-radio.php:93
3061
  msgid "Half"
3062
  msgstr ""
3063
 
3064
  #: core/templates/partials/customize-field-width.php:6
3065
- #: core/templates/parts/customize-checkbox.php:120
3066
- #: core/templates/parts/customize-radio.php:94
3067
  msgid "Third"
3068
  msgstr ""
3069
 
3070
  #: core/templates/partials/customize-field-width.php:7
3071
- #: core/templates/parts/customize-checkbox.php:121
3072
- #: core/templates/parts/customize-radio.php:95
3073
  msgid "Quarter"
3074
  msgstr ""
3075
 
3076
  #: core/templates/partials/customize-field-width.php:8
3077
- #: core/templates/parts/customize-checkbox.php:122
3078
- #: core/templates/parts/customize-radio.php:96
3079
  msgid "Auto"
3080
  msgstr ""
3081
 
@@ -3139,111 +3140,106 @@ msgid "Require an answer"
3139
  msgstr ""
3140
 
3141
  #: core/templates/parts/customize-checkbox.php:59
3142
- #: core/templates/parts/customize-radio.php:59
3143
- msgid "Show as alphabetical choice"
3144
- msgstr ""
3145
-
3146
- #: core/templates/parts/customize-checkbox.php:64
3147
  msgid "Add 'select all' choice"
3148
  msgstr ""
3149
 
3150
- #: core/templates/parts/customize-checkbox.php:69
3151
  msgid "'Select all' label"
3152
  msgstr ""
3153
 
3154
- #: core/templates/parts/customize-checkbox.php:75
3155
- #: core/templates/parts/customize-radio.php:64
3156
  #: core/templates/parts/customize-select.php:59
3157
  msgid "Add 'other' choice"
3158
  msgstr ""
3159
 
3160
- #: core/templates/parts/customize-checkbox.php:80
3161
- #: core/templates/parts/customize-radio.php:69
3162
  #: core/templates/parts/customize-select.php:64
3163
  msgid "'Other' label"
3164
  msgstr ""
3165
 
3166
- #: core/templates/parts/customize-checkbox.php:84
3167
- #: core/templates/parts/customize-radio.php:73
3168
  #: core/templates/parts/customize-select.php:68
3169
  msgid "'Other' placeholder"
3170
  msgstr ""
3171
 
3172
- #: core/templates/parts/customize-checkbox.php:90
3173
- #: core/templates/parts/customize-radio.php:79
3174
  #: core/templates/parts/customize-select.php:79
3175
  msgid "Randomize choices to prevent bias"
3176
  msgstr ""
3177
 
3178
- #: core/templates/parts/customize-checkbox.php:95
3179
  msgid "Limit choices"
3180
  msgstr ""
3181
 
3182
- #: core/templates/parts/customize-checkbox.php:100
3183
  msgid "Min choices"
3184
  msgstr ""
3185
 
3186
- #: core/templates/parts/customize-checkbox.php:104
3187
  msgid "Max choices"
3188
  msgstr ""
3189
 
3190
- #: core/templates/parts/customize-checkbox.php:109
3191
- #: core/templates/parts/customize-radio.php:83
3192
  msgid "Choices display"
3193
  msgstr ""
3194
 
3195
- #: core/templates/parts/customize-checkbox.php:111
3196
- #: core/templates/parts/customize-radio.php:85
3197
  msgid "Horizontal"
3198
  msgstr ""
3199
 
3200
- #: core/templates/parts/customize-checkbox.php:112
3201
- #: core/templates/parts/customize-radio.php:86
3202
  msgid "Vertical"
3203
  msgstr ""
3204
 
3205
- #: core/templates/parts/customize-checkbox.php:116
3206
- #: core/templates/parts/customize-radio.php:90
3207
  msgid "Choices width"
3208
  msgstr ""
3209
 
3210
- #: core/templates/parts/customize-checkbox.php:131
3211
  #: core/templates/parts/customize-email.php:58
3212
  #: core/templates/parts/customize-multi-line-text.php:82
3213
  #: core/templates/parts/customize-number.php:81
3214
- #: core/templates/parts/customize-radio.php:103
3215
  #: core/templates/parts/customize-select.php:86
3216
  #: core/templates/parts/customize-single-line-text.php:57
3217
  msgid "CSS classes"
3218
  msgstr ""
3219
 
3220
- #: core/templates/parts/customize-checkbox.php:153
3221
- #: core/templates/parts/customize-radio.php:127
3222
  #: core/templates/parts/customize-select.php:110
3223
  msgid "Make this choice default"
3224
  msgstr ""
3225
 
3226
- #: core/templates/parts/customize-checkbox.php:156
3227
- #: core/templates/parts/customize-radio.php:130
3228
  #: core/templates/parts/customize-select.php:113
3229
- #: inc/classes/class-happyforms.php:155
3230
  msgid "Limit submissions"
3231
  msgstr ""
3232
 
3233
- #: core/templates/parts/customize-checkbox.php:160
3234
- #: core/templates/parts/customize-radio.php:134
3235
  #: core/templates/parts/customize-select.php:117
3236
  msgid "Max submissions"
3237
  msgstr ""
3238
 
3239
- #: core/templates/parts/customize-checkbox.php:164
3240
- #: core/templates/parts/customize-radio.php:138
3241
  #: core/templates/parts/customize-select.php:121
3242
  msgid "Show remaining submissions"
3243
  msgstr ""
3244
 
3245
- #: core/templates/parts/customize-checkbox.php:170
3246
- #: core/templates/parts/customize-radio.php:144
3247
  #: core/templates/parts/customize-select.php:127
3248
  msgid "More"
3249
  msgstr ""
@@ -3311,99 +3307,99 @@ msgstr ""
3311
  msgid "Click to edit this part."
3312
  msgstr ""
3313
 
3314
- #: inc/classes/class-happyforms.php:125
3315
  msgid "Use reCAPTCHA"
3316
  msgstr ""
3317
 
3318
- #: inc/classes/class-happyforms.php:131
3319
  msgid "Save incomplete and abandoned submissions"
3320
  msgstr ""
3321
 
3322
- #: inc/classes/class-happyforms.php:137
3323
  msgid "Let respondents save a draft submission and come back to it later"
3324
  msgstr ""
3325
 
3326
- #: inc/classes/class-happyforms.php:143
3327
  msgid "Require respondents to review a submission before submitting"
3328
  msgstr ""
3329
 
3330
- #: inc/classes/class-happyforms.php:149
3331
  msgid "Disable buttons until required fields are answered"
3332
  msgstr ""
3333
 
3334
- #: inc/classes/class-happyforms.php:161
3335
  msgid "Schedule visibility"
3336
  msgstr ""
3337
 
3338
- #: inc/classes/class-happyforms.php:167
3339
  msgid "Store activity in database"
3340
  msgstr ""
3341
 
3342
- #: inc/classes/class-happyforms.php:173
3343
  msgid "Capture user metadata (IP, language, platform, time and timezone)"
3344
  msgstr ""
3345
 
3346
- #: inc/classes/class-happyforms.php:179
3347
  msgid "Block these email addresses, email domains and email partials"
3348
  msgstr ""
3349
 
3350
- #: inc/classes/class-happyforms.php:185
3351
  msgid "Block these words, phrases and letters"
3352
  msgstr ""
3353
 
3354
- #: inc/classes/class-happyforms.php:195
3355
  msgid "Include reply link"
3356
  msgstr ""
3357
 
3358
- #: inc/classes/class-happyforms.php:201
3359
  msgid "Include referral web address"
3360
  msgstr ""
3361
 
3362
- #: inc/classes/class-happyforms.php:207 inc/classes/class-happyforms.php:219
3363
  msgid "Attach .pdf"
3364
  msgstr ""
3365
 
3366
- #: inc/classes/class-happyforms.php:213
3367
  msgid "To email address"
3368
  msgstr ""
3369
 
3370
- #: inc/classes/class-happyforms.php:225
3371
  msgid "Send abandonment email"
3372
  msgstr ""
3373
 
3374
- #: inc/classes/class-happyforms.php:442 inc/classes/class-happyforms.php:460
3375
  msgid "Build your own WordPress form with Happyforms"
3376
  msgstr ""
3377
 
3378
- #: inc/classes/class-message-admin.php:60
3379
  msgid "Contact"
3380
  msgstr ""
3381
 
3382
- #: inc/classes/class-message-admin.php:61
3383
  msgid "Submission"
3384
  msgstr ""
3385
 
3386
- #: inc/classes/class-message-admin.php:62
3387
  msgid "In Response To"
3388
  msgstr ""
3389
 
3390
- #: inc/classes/class-message-admin.php:63
3391
  msgid "Submitted On"
3392
  msgstr ""
3393
 
3394
- #: inc/classes/class-message-admin.php:80
3395
  msgid "All"
3396
  msgstr ""
3397
 
3398
- #: inc/classes/class-message-admin.php:81
3399
  msgid "Unread"
3400
  msgstr ""
3401
 
3402
- #: inc/classes/class-message-admin.php:82
3403
  msgid "Read"
3404
  msgstr ""
3405
 
3406
- #: inc/classes/class-message-admin.php:83
3407
  msgid "Spam"
3408
  msgstr ""
3409
 
@@ -3465,11 +3461,11 @@ msgid "For requiring permission before accepting submission."
3465
  msgstr ""
3466
 
3467
  #: inc/classes/parts/class-part-likert-scale-dummy.php:8
3468
- msgid "Likert Scale"
3469
  msgstr ""
3470
 
3471
  #: inc/classes/parts/class-part-likert-scale-dummy.php:9
3472
- msgid "For collecting opinions using a numeric likert scale."
3473
  msgstr ""
3474
 
3475
  #: inc/classes/parts/class-part-media-dummy.php:8
@@ -3592,23 +3588,6 @@ msgstr ""
3592
  msgid "For formatted site URLs."
3593
  msgstr ""
3594
 
3595
- #: inc/templates/admin/modal-dummy-activity.php:12
3596
- #: inc/templates/admin/modal-upgrade.php:2
3597
- msgid "You’ll need to upgrade<br> to access this"
3598
- msgstr ""
3599
-
3600
- #: inc/templates/admin/modal-dummy-activity.php:13
3601
- #: inc/templates/admin/modal-upgrade.php:3
3602
- msgid ""
3603
- "We offer several, affordable paid plans that include our best features. "
3604
- "Upgrade today and increase your customer interactions."
3605
- msgstr ""
3606
-
3607
- #: inc/templates/admin/modal-dummy-activity.php:16
3608
- #: inc/templates/admin/modal-upgrade.php:6
3609
- msgid "Start Your Risk-Free 14-Day Trial"
3610
- msgstr ""
3611
-
3612
  #: inc/templates/admin/modal-onboarding.php:4
3613
  msgid "Welcome to Happyforms"
3614
  msgstr ""
@@ -3644,10 +3623,245 @@ msgstr ""
3644
  msgid "Complete"
3645
  msgstr ""
3646
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3647
  #: inc/templates/customize-controls/email-parts-list-dummy.php:8
3648
  msgid "field"
3649
  msgstr ""
3650
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3651
  #. Plugin Name of the plugin/theme
3652
  msgid "Happyforms (free)"
3653
  msgstr ""
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.13.2\n"
6
  "Report-Msgid-Bugs-To: https://thethemefoundry.com/support/\n"
7
+ "POT-Creation-Date: 2021-09-23 08:04:49+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=utf-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
24
  msgid "Displays a form."
25
  msgstr ""
26
 
27
+ #: core/classes/class-block.php:117 core/classes/parts/class-part-select.php:56
28
  msgid "Choose"
29
  msgstr ""
30
 
31
+ #: core/classes/class-block.php:118
32
  msgid "Which form would you like to add here?"
33
  msgstr ""
34
 
35
+ #: core/classes/class-block.php:119 core/classes/class-form-controller.php:81
36
+ msgid "No forms found."
37
+ msgstr ""
38
+
39
+ #: core/classes/class-block.php:120
40
  msgid "HappyForms Settings"
41
  msgstr ""
42
 
166
  msgid "Duplicate"
167
  msgstr ""
168
 
169
+ #: core/classes/class-form-admin.php:423 inc/classes/class-message-admin.php:83
170
  msgid "Trash"
171
  msgstr ""
172
 
205
  msgid "Search Forms"
206
  msgstr ""
207
 
 
 
 
 
208
  #: core/classes/class-form-controller.php:82
209
  msgid "No forms found in Trash."
210
  msgstr ""
489
  msgid "Submit form"
490
  msgstr ""
491
 
492
+ #: core/classes/class-form-shuffle.php:43 inc/classes/class-happyforms.php:124
493
  msgid "Randomize fields to prevent bias"
494
  msgstr ""
495
 
810
 
811
  #: core/classes/class-form-styles.php:745
812
  #: core/templates/parts/customize-checkbox.php:4
813
+ #: core/templates/parts/customize-checkbox.php:143
814
  #: core/templates/parts/customize-email.php:4
815
  #: core/templates/parts/customize-multi-line-text.php:4
816
  #: core/templates/parts/customize-number.php:4
817
  #: core/templates/parts/customize-radio.php:4
818
+ #: core/templates/parts/customize-radio.php:117
819
  #: core/templates/parts/customize-select.php:4
820
  #: core/templates/parts/customize-select.php:105
821
  #: core/templates/parts/customize-single-line-text.php:4
959
 
960
  #: core/classes/class-happyforms-core.php:206
961
  #: core/classes/class-happyforms-core.php:207
962
+ #: integrations/templates/admin-integrations.php:3
963
  msgid "Integrations"
964
  msgstr ""
965
 
1121
  msgstr ""
1122
 
1123
  #: core/classes/parts/class-part-checkbox.php:93
1124
+ #: core/classes/parts/class-part-radio.php:86
1125
  #: core/classes/parts/class-part-select.php:80
1126
  msgid "Other"
1127
  msgstr ""
2975
 
2976
  #: core/templates/customize-form-item.php:33
2977
  #: core/templates/customize-form-part-footer.php:3
2978
+ #: core/templates/parts/customize-checkbox.php:164
2979
+ #: core/templates/parts/customize-radio.php:138
2980
  #: core/templates/parts/customize-select.php:126
2981
  msgid "Delete"
2982
  msgstr ""
3004
  msgstr ""
3005
 
3006
  #: core/templates/customize-form-parts-drawer.php:38
3007
+ #: inc/classes/class-happyforms.php:116
3008
  #: inc/templates/customize-controls/checkbox_dummy.php:7
3009
  #: inc/templates/customize-controls/email-parts-list-dummy.php:11
3010
  msgid "Upgrade"
3051
  msgstr ""
3052
 
3053
  #: core/templates/partials/customize-field-width.php:4
3054
+ #: core/templates/parts/customize-checkbox.php:113
3055
+ #: core/templates/parts/customize-radio.php:87
3056
  msgid "Full"
3057
  msgstr ""
3058
 
3059
  #: core/templates/partials/customize-field-width.php:5
3060
+ #: core/templates/parts/customize-checkbox.php:114
3061
+ #: core/templates/parts/customize-radio.php:88
3062
  msgid "Half"
3063
  msgstr ""
3064
 
3065
  #: core/templates/partials/customize-field-width.php:6
3066
+ #: core/templates/parts/customize-checkbox.php:115
3067
+ #: core/templates/parts/customize-radio.php:89
3068
  msgid "Third"
3069
  msgstr ""
3070
 
3071
  #: core/templates/partials/customize-field-width.php:7
3072
+ #: core/templates/parts/customize-checkbox.php:116
3073
+ #: core/templates/parts/customize-radio.php:90
3074
  msgid "Quarter"
3075
  msgstr ""
3076
 
3077
  #: core/templates/partials/customize-field-width.php:8
3078
+ #: core/templates/parts/customize-checkbox.php:117
3079
+ #: core/templates/parts/customize-radio.php:91
3080
  msgid "Auto"
3081
  msgstr ""
3082
 
3140
  msgstr ""
3141
 
3142
  #: core/templates/parts/customize-checkbox.php:59
 
 
 
 
 
3143
  msgid "Add 'select all' choice"
3144
  msgstr ""
3145
 
3146
+ #: core/templates/parts/customize-checkbox.php:64
3147
  msgid "'Select all' label"
3148
  msgstr ""
3149
 
3150
+ #: core/templates/parts/customize-checkbox.php:70
3151
+ #: core/templates/parts/customize-radio.php:59
3152
  #: core/templates/parts/customize-select.php:59
3153
  msgid "Add 'other' choice"
3154
  msgstr ""
3155
 
3156
+ #: core/templates/parts/customize-checkbox.php:75
3157
+ #: core/templates/parts/customize-radio.php:64
3158
  #: core/templates/parts/customize-select.php:64
3159
  msgid "'Other' label"
3160
  msgstr ""
3161
 
3162
+ #: core/templates/parts/customize-checkbox.php:79
3163
+ #: core/templates/parts/customize-radio.php:68
3164
  #: core/templates/parts/customize-select.php:68
3165
  msgid "'Other' placeholder"
3166
  msgstr ""
3167
 
3168
+ #: core/templates/parts/customize-checkbox.php:85
3169
+ #: core/templates/parts/customize-radio.php:74
3170
  #: core/templates/parts/customize-select.php:79
3171
  msgid "Randomize choices to prevent bias"
3172
  msgstr ""
3173
 
3174
+ #: core/templates/parts/customize-checkbox.php:90
3175
  msgid "Limit choices"
3176
  msgstr ""
3177
 
3178
+ #: core/templates/parts/customize-checkbox.php:95
3179
  msgid "Min choices"
3180
  msgstr ""
3181
 
3182
+ #: core/templates/parts/customize-checkbox.php:99
3183
  msgid "Max choices"
3184
  msgstr ""
3185
 
3186
+ #: core/templates/parts/customize-checkbox.php:104
3187
+ #: core/templates/parts/customize-radio.php:78
3188
  msgid "Choices display"
3189
  msgstr ""
3190
 
3191
+ #: core/templates/parts/customize-checkbox.php:106
3192
+ #: core/templates/parts/customize-radio.php:80
3193
  msgid "Horizontal"
3194
  msgstr ""
3195
 
3196
+ #: core/templates/parts/customize-checkbox.php:107
3197
+ #: core/templates/parts/customize-radio.php:81
3198
  msgid "Vertical"
3199
  msgstr ""
3200
 
3201
+ #: core/templates/parts/customize-checkbox.php:111
3202
+ #: core/templates/parts/customize-radio.php:85
3203
  msgid "Choices width"
3204
  msgstr ""
3205
 
3206
+ #: core/templates/parts/customize-checkbox.php:126
3207
  #: core/templates/parts/customize-email.php:58
3208
  #: core/templates/parts/customize-multi-line-text.php:82
3209
  #: core/templates/parts/customize-number.php:81
3210
+ #: core/templates/parts/customize-radio.php:98
3211
  #: core/templates/parts/customize-select.php:86
3212
  #: core/templates/parts/customize-single-line-text.php:57
3213
  msgid "CSS classes"
3214
  msgstr ""
3215
 
3216
+ #: core/templates/parts/customize-checkbox.php:148
3217
+ #: core/templates/parts/customize-radio.php:122
3218
  #: core/templates/parts/customize-select.php:110
3219
  msgid "Make this choice default"
3220
  msgstr ""
3221
 
3222
+ #: core/templates/parts/customize-checkbox.php:151
3223
+ #: core/templates/parts/customize-radio.php:125
3224
  #: core/templates/parts/customize-select.php:113
3225
+ #: inc/classes/class-happyforms.php:160
3226
  msgid "Limit submissions"
3227
  msgstr ""
3228
 
3229
+ #: core/templates/parts/customize-checkbox.php:155
3230
+ #: core/templates/parts/customize-radio.php:129
3231
  #: core/templates/parts/customize-select.php:117
3232
  msgid "Max submissions"
3233
  msgstr ""
3234
 
3235
+ #: core/templates/parts/customize-checkbox.php:159
3236
+ #: core/templates/parts/customize-radio.php:133
3237
  #: core/templates/parts/customize-select.php:121
3238
  msgid "Show remaining submissions"
3239
  msgstr ""
3240
 
3241
+ #: core/templates/parts/customize-checkbox.php:165
3242
+ #: core/templates/parts/customize-radio.php:139
3243
  #: core/templates/parts/customize-select.php:127
3244
  msgid "More"
3245
  msgstr ""
3307
  msgid "Click to edit this part."
3308
  msgstr ""
3309
 
3310
+ #: inc/classes/class-happyforms.php:130
3311
  msgid "Use reCAPTCHA"
3312
  msgstr ""
3313
 
3314
+ #: inc/classes/class-happyforms.php:136
3315
  msgid "Save incomplete and abandoned submissions"
3316
  msgstr ""
3317
 
3318
+ #: inc/classes/class-happyforms.php:142
3319
  msgid "Let respondents save a draft submission and come back to it later"
3320
  msgstr ""
3321
 
3322
+ #: inc/classes/class-happyforms.php:148
3323
  msgid "Require respondents to review a submission before submitting"
3324
  msgstr ""
3325
 
3326
+ #: inc/classes/class-happyforms.php:154
3327
  msgid "Disable buttons until required fields are answered"
3328
  msgstr ""
3329
 
3330
+ #: inc/classes/class-happyforms.php:166
3331
  msgid "Schedule visibility"
3332
  msgstr ""
3333
 
3334
+ #: inc/classes/class-happyforms.php:172
3335
  msgid "Store activity in database"
3336
  msgstr ""
3337
 
3338
+ #: inc/classes/class-happyforms.php:178
3339
  msgid "Capture user metadata (IP, language, platform, time and timezone)"
3340
  msgstr ""
3341
 
3342
+ #: inc/classes/class-happyforms.php:184
3343
  msgid "Block these email addresses, email domains and email partials"
3344
  msgstr ""
3345
 
3346
+ #: inc/classes/class-happyforms.php:190
3347
  msgid "Block these words, phrases and letters"
3348
  msgstr ""
3349
 
3350
+ #: inc/classes/class-happyforms.php:200
3351
  msgid "Include reply link"
3352
  msgstr ""
3353
 
3354
+ #: inc/classes/class-happyforms.php:206
3355
  msgid "Include referral web address"
3356
  msgstr ""
3357
 
3358
+ #: inc/classes/class-happyforms.php:212 inc/classes/class-happyforms.php:224
3359
  msgid "Attach .pdf"
3360
  msgstr ""
3361
 
3362
+ #: inc/classes/class-happyforms.php:218
3363
  msgid "To email address"
3364
  msgstr ""
3365
 
3366
+ #: inc/classes/class-happyforms.php:230
3367
  msgid "Send abandonment email"
3368
  msgstr ""
3369
 
3370
+ #: inc/classes/class-happyforms.php:447 inc/classes/class-happyforms.php:465
3371
  msgid "Build your own WordPress form with Happyforms"
3372
  msgstr ""
3373
 
3374
+ #: inc/classes/class-message-admin.php:59
3375
  msgid "Contact"
3376
  msgstr ""
3377
 
3378
+ #: inc/classes/class-message-admin.php:60
3379
  msgid "Submission"
3380
  msgstr ""
3381
 
3382
+ #: inc/classes/class-message-admin.php:61
3383
  msgid "In Response To"
3384
  msgstr ""
3385
 
3386
+ #: inc/classes/class-message-admin.php:62
3387
  msgid "Submitted On"
3388
  msgstr ""
3389
 
3390
+ #: inc/classes/class-message-admin.php:79
3391
  msgid "All"
3392
  msgstr ""
3393
 
3394
+ #: inc/classes/class-message-admin.php:80
3395
  msgid "Unread"
3396
  msgstr ""
3397
 
3398
+ #: inc/classes/class-message-admin.php:81
3399
  msgid "Read"
3400
  msgstr ""
3401
 
3402
+ #: inc/classes/class-message-admin.php:82
3403
  msgid "Spam"
3404
  msgstr ""
3405
 
3461
  msgstr ""
3462
 
3463
  #: inc/classes/parts/class-part-likert-scale-dummy.php:8
3464
+ msgid "Number Scale"
3465
  msgstr ""
3466
 
3467
  #: inc/classes/parts/class-part-likert-scale-dummy.php:9
3468
+ msgid "For collecting ratings using a fixed numeric scale."
3469
  msgstr ""
3470
 
3471
  #: inc/classes/parts/class-part-media-dummy.php:8
3588
  msgid "For formatted site URLs."
3589
  msgstr ""
3590
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3591
  #: inc/templates/admin/modal-onboarding.php:4
3592
  msgid "Welcome to Happyforms"
3593
  msgstr ""
3623
  msgid "Complete"
3624
  msgstr ""
3625
 
3626
+ #: inc/templates/admin/modal-upgrade.php:2
3627
+ msgid "You’ll need to upgrade<br> to access this"
3628
+ msgstr ""
3629
+
3630
+ #: inc/templates/admin/modal-upgrade.php:3
3631
+ msgid ""
3632
+ "We offer several, affordable paid plans that include our best features. "
3633
+ "Upgrade today and increase your customer interactions."
3634
+ msgstr ""
3635
+
3636
+ #: inc/templates/admin/modal-upgrade.php:6
3637
+ msgid "Start Your Risk-Free 14-Day Trial"
3638
+ msgstr ""
3639
+
3640
  #: inc/templates/customize-controls/email-parts-list-dummy.php:8
3641
  msgid "field"
3642
  msgstr ""
3643
 
3644
+ #: integrations/classes/class-integrations-page-controller.php:26
3645
+ msgid "ActiveCampaign"
3646
+ msgstr ""
3647
+
3648
+ #: integrations/classes/class-integrations-page-controller.php:27
3649
+ msgid "AWeber"
3650
+ msgstr ""
3651
+
3652
+ #: integrations/classes/class-integrations-page-controller.php:28
3653
+ msgid "Constant Contact"
3654
+ msgstr ""
3655
+
3656
+ #: integrations/classes/class-integrations-page-controller.php:29
3657
+ msgid "ConvertKit"
3658
+ msgstr ""
3659
+
3660
+ #: integrations/classes/class-integrations-page-controller.php:30
3661
+ msgid "Mailchimp"
3662
+ msgstr ""
3663
+
3664
+ #: integrations/classes/class-integrations-page-controller.php:31
3665
+ msgid "MailerLite"
3666
+ msgstr ""
3667
+
3668
+ #: integrations/classes/class-integrations-page-controller.php:32
3669
+ msgid "MailPoet"
3670
+ msgstr ""
3671
+
3672
+ #: integrations/classes/class-integrations-page-controller.php:33
3673
+ msgid "SendFox"
3674
+ msgstr ""
3675
+
3676
+ #: integrations/classes/class-integrations-page-controller.php:34
3677
+ msgid "SendGrid"
3678
+ msgstr ""
3679
+
3680
+ #: integrations/classes/class-integrations-page-controller.php:35
3681
+ msgid "Sendinblue"
3682
+ msgstr ""
3683
+
3684
+ #: integrations/classes/class-integrations-page-controller.php:36
3685
+ msgid "reCAPTCHA"
3686
+ msgstr ""
3687
+
3688
+ #: integrations/classes/class-integrations-page-controller.php:37
3689
+ msgid "Google Places"
3690
+ msgstr ""
3691
+
3692
+ #: integrations/classes/class-integrations-page-controller.php:38
3693
+ msgid "Google Geocoding"
3694
+ msgstr ""
3695
+
3696
+ #: integrations/classes/class-integrations-page-controller.php:39
3697
+ msgid "Stripe"
3698
+ msgstr ""
3699
+
3700
+ #: integrations/classes/class-integrations-page-controller.php:40
3701
+ msgid "PayPal"
3702
+ msgstr ""
3703
+
3704
+ #: integrations/classes/class-integrations-page-controller.php:41
3705
+ msgid "Zapier"
3706
+ msgstr ""
3707
+
3708
+ #: integrations/classes/class-integrations-page-controller.php:42
3709
+ msgid "Integromat"
3710
+ msgstr ""
3711
+
3712
+ #: integrations/classes/class-integrations-page-controller.php:43
3713
+ msgid "Integrately"
3714
+ msgstr ""
3715
+
3716
+ #: integrations/classes/class-integrations-page-controller.php:44
3717
+ msgid "Google Analytics"
3718
+ msgstr ""
3719
+
3720
+ #: integrations/templates/widget-active-campaign-dummy.php:5
3721
+ #: integrations/templates/widget-constant-contact-dummy.php:5
3722
+ msgid "API URL"
3723
+ msgstr ""
3724
+
3725
+ #: integrations/templates/widget-active-campaign-dummy.php:8
3726
+ #: integrations/templates/widget-active-campaign-dummy.php:15
3727
+ #: integrations/templates/widget-aweber-dummy.php:12
3728
+ #: integrations/templates/widget-constant-contact-dummy.php:8
3729
+ #: integrations/templates/widget-constant-contact-dummy.php:15
3730
+ #: integrations/templates/widget-convertkit-dummy.php:8
3731
+ #: integrations/templates/widget-google-analytics-dummy.php:8
3732
+ #: integrations/templates/widget-google-geocoding-dummy.php:8
3733
+ #: integrations/templates/widget-google-places-dummy.php:8
3734
+ #: integrations/templates/widget-integrately-dummy.php:8
3735
+ #: integrations/templates/widget-integromat-dummy.php:8
3736
+ #: integrations/templates/widget-mailchimp-dummy.php:8
3737
+ #: integrations/templates/widget-mailerlite-dummy.php:8
3738
+ #: integrations/templates/widget-paypal-dummy.php:15
3739
+ #: integrations/templates/widget-paypal-dummy.php:22
3740
+ #: integrations/templates/widget-recaptcha-dummy.php:15
3741
+ #: integrations/templates/widget-recaptcha-dummy.php:22
3742
+ #: integrations/templates/widget-sendfox-dummy.php:8
3743
+ #: integrations/templates/widget-sendgrid-dummy.php:8
3744
+ #: integrations/templates/widget-sendinblue-dummy.php:8
3745
+ #: integrations/templates/widget-stripe-dummy.php:15
3746
+ #: integrations/templates/widget-stripe-dummy.php:22
3747
+ #: integrations/templates/widget-zapier-dummy.php:8
3748
+ msgid "Show credentials"
3749
+ msgstr ""
3750
+
3751
+ #: integrations/templates/widget-active-campaign-dummy.php:8
3752
+ #: integrations/templates/widget-active-campaign-dummy.php:15
3753
+ #: integrations/templates/widget-aweber-dummy.php:12
3754
+ #: integrations/templates/widget-constant-contact-dummy.php:8
3755
+ #: integrations/templates/widget-constant-contact-dummy.php:15
3756
+ #: integrations/templates/widget-convertkit-dummy.php:8
3757
+ #: integrations/templates/widget-google-analytics-dummy.php:8
3758
+ #: integrations/templates/widget-google-geocoding-dummy.php:8
3759
+ #: integrations/templates/widget-google-places-dummy.php:8
3760
+ #: integrations/templates/widget-integrately-dummy.php:8
3761
+ #: integrations/templates/widget-integromat-dummy.php:8
3762
+ #: integrations/templates/widget-mailchimp-dummy.php:8
3763
+ #: integrations/templates/widget-mailerlite-dummy.php:8
3764
+ #: integrations/templates/widget-paypal-dummy.php:15
3765
+ #: integrations/templates/widget-paypal-dummy.php:22
3766
+ #: integrations/templates/widget-recaptcha-dummy.php:15
3767
+ #: integrations/templates/widget-recaptcha-dummy.php:22
3768
+ #: integrations/templates/widget-sendfox-dummy.php:8
3769
+ #: integrations/templates/widget-sendgrid-dummy.php:8
3770
+ #: integrations/templates/widget-sendinblue-dummy.php:8
3771
+ #: integrations/templates/widget-stripe-dummy.php:15
3772
+ #: integrations/templates/widget-stripe-dummy.php:22
3773
+ #: integrations/templates/widget-zapier-dummy.php:8
3774
+ msgid "Hide credentials"
3775
+ msgstr ""
3776
+
3777
+ #: integrations/templates/widget-active-campaign-dummy.php:12
3778
+ #: integrations/templates/widget-constant-contact-dummy.php:12
3779
+ #: integrations/templates/widget-convertkit-dummy.php:5
3780
+ #: integrations/templates/widget-google-geocoding-dummy.php:5
3781
+ #: integrations/templates/widget-google-places-dummy.php:5
3782
+ #: integrations/templates/widget-integrately-dummy.php:5
3783
+ #: integrations/templates/widget-integromat-dummy.php:5
3784
+ #: integrations/templates/widget-mailchimp-dummy.php:5
3785
+ #: integrations/templates/widget-mailerlite-dummy.php:5
3786
+ #: integrations/templates/widget-zapier-dummy.php:5
3787
+ msgid "API key"
3788
+ msgstr ""
3789
+
3790
+ #: integrations/templates/widget-active-campaign-dummy.php:23
3791
+ #: integrations/templates/widget-aweber-dummy.php:21
3792
+ #: integrations/templates/widget-constant-contact-dummy.php:23
3793
+ #: integrations/templates/widget-convertkit-dummy.php:16
3794
+ #: integrations/templates/widget-google-analytics-dummy.php:16
3795
+ #: integrations/templates/widget-google-geocoding-dummy.php:16
3796
+ #: integrations/templates/widget-google-places-dummy.php:16
3797
+ #: integrations/templates/widget-integrately-dummy.php:16
3798
+ #: integrations/templates/widget-integromat-dummy.php:16
3799
+ #: integrations/templates/widget-mailchimp-dummy.php:16
3800
+ #: integrations/templates/widget-mailerlite-dummy.php:16
3801
+ #: integrations/templates/widget-paypal-dummy.php:32
3802
+ #: integrations/templates/widget-recaptcha-dummy.php:32
3803
+ #: integrations/templates/widget-sendfox-dummy.php:16
3804
+ #: integrations/templates/widget-sendgrid-dummy.php:16
3805
+ #: integrations/templates/widget-sendinblue-dummy.php:16
3806
+ #: integrations/templates/widget-stripe-dummy.php:32
3807
+ #: integrations/templates/widget-zapier-dummy.php:16
3808
+ msgid "Save Changes"
3809
+ msgstr ""
3810
+
3811
+ #: integrations/templates/widget-aweber-dummy.php:2
3812
+ msgid "get your code"
3813
+ msgstr ""
3814
+
3815
+ #: integrations/templates/widget-aweber-dummy.php:9
3816
+ msgid "Verification code"
3817
+ msgstr ""
3818
+
3819
+ #: integrations/templates/widget-google-analytics-dummy.php:5
3820
+ msgid "Tracking ID"
3821
+ msgstr ""
3822
+
3823
+ #: integrations/templates/widget-mailpoet-dummy.php:5
3824
+ msgid ""
3825
+ "MailPoet plugin must first be installed and activated to use this "
3826
+ "integration."
3827
+ msgstr ""
3828
+
3829
+ #: integrations/templates/widget-paypal-dummy.php:4
3830
+ #: integrations/templates/widget-stripe-dummy.php:4
3831
+ msgid "Mode"
3832
+ msgstr ""
3833
+
3834
+ #: integrations/templates/widget-paypal-dummy.php:12
3835
+ msgid "Client ID"
3836
+ msgstr ""
3837
+
3838
+ #: integrations/templates/widget-paypal-dummy.php:19
3839
+ msgid "Client secret"
3840
+ msgstr ""
3841
+
3842
+ #: integrations/templates/widget-recaptcha-dummy.php:4
3843
+ msgid "Service"
3844
+ msgstr ""
3845
+
3846
+ #: integrations/templates/widget-recaptcha-dummy.php:12
3847
+ msgid "Site key"
3848
+ msgstr ""
3849
+
3850
+ #: integrations/templates/widget-recaptcha-dummy.php:19
3851
+ #: integrations/templates/widget-stripe-dummy.php:19
3852
+ msgid "Secret key"
3853
+ msgstr ""
3854
+
3855
+ #: integrations/templates/widget-sendfox-dummy.php:5
3856
+ #: integrations/templates/widget-sendgrid-dummy.php:5
3857
+ #: integrations/templates/widget-sendinblue-dummy.php:5
3858
+ msgid "Personal access token"
3859
+ msgstr ""
3860
+
3861
+ #: integrations/templates/widget-stripe-dummy.php:12
3862
+ msgid "Publishable key"
3863
+ msgstr ""
3864
+
3865
  #. Plugin Name of the plugin/theme
3866
  msgid "Happyforms (free)"
3867
  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.8
7
  Requires PHP: 5.3
8
- Stable tag: 1.13.1
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
@@ -151,6 +151,10 @@ Aw, honestly, the thought that you're writing about our contact form builder is
151
 
152
  == Changelog ==
153
 
 
 
 
 
154
  = 1.13.1 =
155
  * New feature: HTML anchor on form block.
156
  * Bugfix: Dropdown item font size doesn't match form style setting.
@@ -186,7 +190,7 @@ Aw, honestly, the thought that you're writing about our contact form builder is
186
  * Bugfix: Error notices were ignoring color settings.
187
 
188
  = 1.12.9 =
189
- * Bugfix: Jetpack synchronization was triggering a fatal error.
190
 
191
  = 1.12.8 =
192
  * Improvement: Safer builder controls internal API.
@@ -848,6 +852,9 @@ Aw, honestly, the thought that you're writing about our contact form builder is
848
 
849
  == Upgrade Notice ==
850
 
 
 
 
851
  = 1.13.1 =
852
  * HTML anchor on form block, bugfixes.
853
 
5
  Requires at least: 4.8
6
  Tested up to: 5.8
7
  Requires PHP: 5.3
8
+ Stable tag: 1.13.2
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
151
 
152
  == Changelog ==
153
 
154
+ = 1.13.2 =
155
+ * Improvement: Faster preview of Layout Text changes.
156
+ * Bugfix: Honeypot mechanism was triggering browser autocomplete, preventing submissions.
157
+
158
  = 1.13.1 =
159
  * New feature: HTML anchor on form block.
160
  * Bugfix: Dropdown item font size doesn't match form style setting.
190
  * Bugfix: Error notices were ignoring color settings.
191
 
192
  = 1.12.9 =
193
+ * Bugfix: Jetpack synchronization was triggering a fatal error.
194
 
195
  = 1.12.8 =
196
  * Improvement: Safer builder controls internal API.
852
 
853
  == Upgrade Notice ==
854
 
855
+ = 1.13.2 =
856
+ * Minor improvements and bugfixes.
857
+
858
  = 1.13.1 =
859
  * HTML anchor on form block, bugfixes.
860