Version Description
- New: Added support for several new language options for datepicker localization and for reCAPTCHA.
- New: Updated deprecated code in Elementor widget for better compatibility with new versions of Elementor.
- Fix: Actions that trigger when an entry is deleted were not properly working when conditional logic would check item meta values.
- Fix: An imported application page's parent page ID was not updating to match the new imported parent page ID.
- Fix: Clicking save while a field was still being inserted would cause an error pop up to appear with a missing message.
- Removed a restriction that was preventing a second summary field from being added after adding the first.
Download this release
Release Info
Developer | sswells |
Plugin | Formidable Forms – Form Builder for WordPress |
Version | 5.4.5 |
Comparing to | |
See all releases |
Code changes from version 5.4.4 to 5.4.5
- classes/controllers/FrmElementorController.php +1 -1
- classes/controllers/FrmHooksController.php +1 -1
- classes/helpers/FrmAppHelper.php +45 -4
- classes/helpers/FrmXMLHelper.php +2 -0
- classes/models/FrmEntry.php +1 -1
- classes/models/FrmPluginSearch.php +9 -10
- css/frm_admin.css +2 -1
- formidable.php +1 -1
- js/admin/dom.js +91 -1
- js/formidable_admin.js +241 -300
- languages/formidable.pot +219 -115
- readme.txt +33 -23
classes/controllers/FrmElementorController.php
CHANGED
@@ -10,7 +10,7 @@ class FrmElementorController {
|
|
10 |
|
11 |
public static function register_elementor_hooks() {
|
12 |
require_once FrmAppHelper::plugin_path() . '/classes/widgets/FrmElementorWidget.php';
|
13 |
-
\Elementor\Plugin::instance()->widgets_manager->
|
14 |
|
15 |
if ( is_admin() ) {
|
16 |
add_action(
|
10 |
|
11 |
public static function register_elementor_hooks() {
|
12 |
require_once FrmAppHelper::plugin_path() . '/classes/widgets/FrmElementorWidget.php';
|
13 |
+
\Elementor\Plugin::instance()->widgets_manager->register( new \FrmElementorWidget() );
|
14 |
|
15 |
if ( is_admin() ) {
|
16 |
add_action(
|
classes/controllers/FrmHooksController.php
CHANGED
@@ -94,7 +94,7 @@ class FrmHooksController {
|
|
94 |
add_filter( 'frm_keep_name_value_array', '__return_true' );
|
95 |
|
96 |
// Elementor.
|
97 |
-
add_action( 'elementor/widgets/
|
98 |
add_filter( 'frm_fields_in_form_builder', 'FrmFormsController::update_form_builder_fields', 10, 2 );
|
99 |
}
|
100 |
|
94 |
add_filter( 'frm_keep_name_value_array', '__return_true' );
|
95 |
|
96 |
// Elementor.
|
97 |
+
add_action( 'elementor/widgets/register', 'FrmElementorController::register_elementor_hooks' );
|
98 |
add_filter( 'frm_fields_in_form_builder', 'FrmFormsController::update_form_builder_fields', 10, 2 );
|
99 |
}
|
100 |
|
classes/helpers/FrmAppHelper.php
CHANGED
@@ -16,7 +16,7 @@ class FrmAppHelper {
|
|
16 |
/**
|
17 |
* @since 2.0
|
18 |
*/
|
19 |
-
public static $plug_version = '5.4.
|
20 |
|
21 |
/**
|
22 |
* @since 1.07.02
|
@@ -2980,15 +2980,23 @@ class FrmAppHelper {
|
|
2980 |
}
|
2981 |
}
|
2982 |
|
|
|
|
|
|
|
|
|
2983 |
public static function locales( $type = 'date' ) {
|
2984 |
$locales = array(
|
2985 |
'en' => __( 'English', 'formidable' ),
|
2986 |
'af' => __( 'Afrikaans', 'formidable' ),
|
2987 |
'sq' => __( 'Albanian', 'formidable' ),
|
|
|
|
|
2988 |
'ar' => __( 'Arabic', 'formidable' ),
|
2989 |
'hy' => __( 'Armenian', 'formidable' ),
|
2990 |
'az' => __( 'Azerbaijani', 'formidable' ),
|
2991 |
'eu' => __( 'Basque', 'formidable' ),
|
|
|
|
|
2992 |
'bs' => __( 'Bosnian', 'formidable' ),
|
2993 |
'bg' => __( 'Bulgarian', 'formidable' ),
|
2994 |
'ca' => __( 'Catalan', 'formidable' ),
|
@@ -3009,10 +3017,13 @@ class FrmAppHelper {
|
|
3009 |
'fr' => __( 'French', 'formidable' ),
|
3010 |
'fr-CA' => __( 'French/Canadian', 'formidable' ),
|
3011 |
'fr-CH' => __( 'French/Swiss', 'formidable' ),
|
|
|
|
|
3012 |
'de' => __( 'German', 'formidable' ),
|
3013 |
'de-AT' => __( 'German/Austria', 'formidable' ),
|
3014 |
'de-CH' => __( 'German/Switzerland', 'formidable' ),
|
3015 |
'el' => __( 'Greek', 'formidable' ),
|
|
|
3016 |
'he' => __( 'Hebrew', 'formidable' ),
|
3017 |
'iw' => __( 'Hebrew', 'formidable' ),
|
3018 |
'hi' => __( 'Hindi', 'formidable' ),
|
@@ -3021,41 +3032,71 @@ class FrmAppHelper {
|
|
3021 |
'id' => __( 'Indonesian', 'formidable' ),
|
3022 |
'it' => __( 'Italian', 'formidable' ),
|
3023 |
'ja' => __( 'Japanese', 'formidable' ),
|
|
|
|
|
|
|
3024 |
'ko' => __( 'Korean', 'formidable' ),
|
|
|
|
|
3025 |
'lv' => __( 'Latvian', 'formidable' ),
|
3026 |
'lt' => __( 'Lithuanian', 'formidable' ),
|
|
|
|
|
|
|
3027 |
'ms' => __( 'Malaysian', 'formidable' ),
|
|
|
3028 |
'no' => __( 'Norwegian', 'formidable' ),
|
|
|
|
|
3029 |
'pl' => __( 'Polish', 'formidable' ),
|
3030 |
'pt' => __( 'Portuguese', 'formidable' ),
|
3031 |
'pt-BR' => __( 'Portuguese/Brazilian', 'formidable' ),
|
3032 |
'pt-PT' => __( 'Portuguese/Portugal', 'formidable' ),
|
|
|
3033 |
'ro' => __( 'Romanian', 'formidable' ),
|
3034 |
'ru' => __( 'Russian', 'formidable' ),
|
3035 |
'sr' => __( 'Serbian', 'formidable' ),
|
3036 |
'sr-SR' => __( 'Serbian', 'formidable' ),
|
|
|
3037 |
'sk' => __( 'Slovak', 'formidable' ),
|
3038 |
'sl' => __( 'Slovenian', 'formidable' ),
|
3039 |
'es' => __( 'Spanish', 'formidable' ),
|
3040 |
'es-419' => __( 'Spanish/Latin America', 'formidable' ),
|
|
|
3041 |
'sv' => __( 'Swedish', 'formidable' ),
|
3042 |
'ta' => __( 'Tamil', 'formidable' ),
|
|
|
3043 |
'th' => __( 'Thai', 'formidable' ),
|
|
|
3044 |
'tr' => __( 'Turkish', 'formidable' ),
|
3045 |
'uk' => __( 'Ukrainian', 'formidable' ),
|
|
|
3046 |
'vi' => __( 'Vietnamese', 'formidable' ),
|
|
|
|
|
3047 |
);
|
3048 |
|
3049 |
if ( $type === 'captcha' ) {
|
3050 |
// remove the languages unavailable for the captcha
|
3051 |
-
$unset = array( '
|
3052 |
} else {
|
3053 |
// remove the languages unavailable for the datepicker
|
3054 |
-
$unset = array( 'fil', 'fr-CA', 'de-AT', 'de-CH', 'iw', 'hi', 'pt', 'pt-PT', 'es-419' );
|
3055 |
}
|
3056 |
|
3057 |
$locales = array_diff_key( $locales, array_flip( $unset ) );
|
3058 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3059 |
|
3060 |
return $locales;
|
3061 |
}
|
16 |
/**
|
17 |
* @since 2.0
|
18 |
*/
|
19 |
+
public static $plug_version = '5.4.5';
|
20 |
|
21 |
/**
|
22 |
* @since 1.07.02
|
2980 |
}
|
2981 |
}
|
2982 |
|
2983 |
+
/**
|
2984 |
+
* @param string $type
|
2985 |
+
* @return array<string,string>
|
2986 |
+
*/
|
2987 |
public static function locales( $type = 'date' ) {
|
2988 |
$locales = array(
|
2989 |
'en' => __( 'English', 'formidable' ),
|
2990 |
'af' => __( 'Afrikaans', 'formidable' ),
|
2991 |
'sq' => __( 'Albanian', 'formidable' ),
|
2992 |
+
'ar-DZ' => __( 'Algerian Arabic', 'formidable' ),
|
2993 |
+
'am' => __( 'Amharic', 'formidable' ),
|
2994 |
'ar' => __( 'Arabic', 'formidable' ),
|
2995 |
'hy' => __( 'Armenian', 'formidable' ),
|
2996 |
'az' => __( 'Azerbaijani', 'formidable' ),
|
2997 |
'eu' => __( 'Basque', 'formidable' ),
|
2998 |
+
'be' => __( 'Belarusian', 'formidable' ),
|
2999 |
+
'bn' => __( 'Bengali', 'formidable' ),
|
3000 |
'bs' => __( 'Bosnian', 'formidable' ),
|
3001 |
'bg' => __( 'Bulgarian', 'formidable' ),
|
3002 |
'ca' => __( 'Catalan', 'formidable' ),
|
3017 |
'fr' => __( 'French', 'formidable' ),
|
3018 |
'fr-CA' => __( 'French/Canadian', 'formidable' ),
|
3019 |
'fr-CH' => __( 'French/Swiss', 'formidable' ),
|
3020 |
+
'gl' => __( 'Galician', 'formidable' ),
|
3021 |
+
'ka' => __( 'Georgian', 'formidable' ),
|
3022 |
'de' => __( 'German', 'formidable' ),
|
3023 |
'de-AT' => __( 'German/Austria', 'formidable' ),
|
3024 |
'de-CH' => __( 'German/Switzerland', 'formidable' ),
|
3025 |
'el' => __( 'Greek', 'formidable' ),
|
3026 |
+
'gu' => __( 'Gujarati', 'formidable' ),
|
3027 |
'he' => __( 'Hebrew', 'formidable' ),
|
3028 |
'iw' => __( 'Hebrew', 'formidable' ),
|
3029 |
'hi' => __( 'Hindi', 'formidable' ),
|
3032 |
'id' => __( 'Indonesian', 'formidable' ),
|
3033 |
'it' => __( 'Italian', 'formidable' ),
|
3034 |
'ja' => __( 'Japanese', 'formidable' ),
|
3035 |
+
'kn' => __( 'Kannada', 'formidable' ),
|
3036 |
+
'kk' => __( 'Kazakh', 'formidable' ),
|
3037 |
+
'km' => __( 'Khmer', 'formidable' ),
|
3038 |
'ko' => __( 'Korean', 'formidable' ),
|
3039 |
+
'ky' => __( 'Kyrgyz', 'formidable' ),
|
3040 |
+
'lo' => __( 'Laothian', 'formidable' ),
|
3041 |
'lv' => __( 'Latvian', 'formidable' ),
|
3042 |
'lt' => __( 'Lithuanian', 'formidable' ),
|
3043 |
+
'lb' => __( 'Luxembourgish', 'formidable' ),
|
3044 |
+
'mk' => __( 'Macedonian', 'formidable' ),
|
3045 |
+
'ml' => __( 'Malayalam', 'formidable' ),
|
3046 |
'ms' => __( 'Malaysian', 'formidable' ),
|
3047 |
+
'mr' => __( 'Marathi', 'formidable' ),
|
3048 |
'no' => __( 'Norwegian', 'formidable' ),
|
3049 |
+
'nb' => __( 'Norwegian Bokmål', 'formidable' ),
|
3050 |
+
'nn' => __( 'Norwegian Nynorsk', 'formidable' ),
|
3051 |
'pl' => __( 'Polish', 'formidable' ),
|
3052 |
'pt' => __( 'Portuguese', 'formidable' ),
|
3053 |
'pt-BR' => __( 'Portuguese/Brazilian', 'formidable' ),
|
3054 |
'pt-PT' => __( 'Portuguese/Portugal', 'formidable' ),
|
3055 |
+
'rm' => __( 'Romansh', 'formidable' ),
|
3056 |
'ro' => __( 'Romanian', 'formidable' ),
|
3057 |
'ru' => __( 'Russian', 'formidable' ),
|
3058 |
'sr' => __( 'Serbian', 'formidable' ),
|
3059 |
'sr-SR' => __( 'Serbian', 'formidable' ),
|
3060 |
+
'si' => __( 'Sinhalese', 'formidable' ),
|
3061 |
'sk' => __( 'Slovak', 'formidable' ),
|
3062 |
'sl' => __( 'Slovenian', 'formidable' ),
|
3063 |
'es' => __( 'Spanish', 'formidable' ),
|
3064 |
'es-419' => __( 'Spanish/Latin America', 'formidable' ),
|
3065 |
+
'sw' => __( 'Swahili', 'formidable' ),
|
3066 |
'sv' => __( 'Swedish', 'formidable' ),
|
3067 |
'ta' => __( 'Tamil', 'formidable' ),
|
3068 |
+
'te' => __( 'Telugu', 'formidable' ),
|
3069 |
'th' => __( 'Thai', 'formidable' ),
|
3070 |
+
'tj' => __( 'Tajiki', 'formidable' ),
|
3071 |
'tr' => __( 'Turkish', 'formidable' ),
|
3072 |
'uk' => __( 'Ukrainian', 'formidable' ),
|
3073 |
+
'ur' => __( 'Urdu', 'formidable' ),
|
3074 |
'vi' => __( 'Vietnamese', 'formidable' ),
|
3075 |
+
'cy-GB' => __( 'Welsh', 'formidable' ),
|
3076 |
+
'zu' => __( 'Zulu', 'formidable' ),
|
3077 |
);
|
3078 |
|
3079 |
if ( $type === 'captcha' ) {
|
3080 |
// remove the languages unavailable for the captcha
|
3081 |
+
$unset = array( 'sq', 'bs', 'eo', 'fo', 'fr-CH', 'sr-SR', 'ar-DZ', 'be', 'cy-GB', 'kk', 'km', 'ky', 'lb', 'mk', 'nb', 'nn', 'rm', 'tj' );
|
3082 |
} else {
|
3083 |
// remove the languages unavailable for the datepicker
|
3084 |
+
$unset = array( 'fil', 'fr-CA', 'de-AT', 'de-CH', 'iw', 'hi', 'pt', 'pt-PT', 'es-419', 'mr', 'lo', 'kn', 'si', 'gu', 'bn', 'zu', 'ur', 'te', 'sw', 'am' );
|
3085 |
}
|
3086 |
|
3087 |
$locales = array_diff_key( $locales, array_flip( $unset ) );
|
3088 |
+
|
3089 |
+
/**
|
3090 |
+
* Filter available locale options.
|
3091 |
+
*
|
3092 |
+
* @since x.x Added $args parameter with type.
|
3093 |
+
*
|
3094 |
+
* @param array<string,string> $locales
|
3095 |
+
* @param array $args {
|
3096 |
+
* @type string $type
|
3097 |
+
* }
|
3098 |
+
*/
|
3099 |
+
$locales = apply_filters( 'frm_locales', $locales, compact( 'type' ) );
|
3100 |
|
3101 |
return $locales;
|
3102 |
}
|
classes/helpers/FrmXMLHelper.php
CHANGED
@@ -799,6 +799,8 @@ class FrmXMLHelper {
|
|
799 |
} else {
|
800 |
if ( $post['post_type'] === 'frm_display' ) {
|
801 |
$post['post_content'] = self::maybe_prepare_json_view_content( $post['post_content'] );
|
|
|
|
|
802 |
}
|
803 |
// Create/update post now
|
804 |
$post_id = wp_insert_post( $post );
|
799 |
} else {
|
800 |
if ( $post['post_type'] === 'frm_display' ) {
|
801 |
$post['post_content'] = self::maybe_prepare_json_view_content( $post['post_content'] );
|
802 |
+
} elseif ( 'page' === $post['post_type'] && isset( $imported['posts'][ $post['post_parent'] ] ) ) {
|
803 |
+
$post['post_parent'] = $imported['posts'][ $post['post_parent'] ];
|
804 |
}
|
805 |
// Create/update post now
|
806 |
$post_id = wp_insert_post( $post );
|
classes/models/FrmEntry.php
CHANGED
@@ -261,7 +261,7 @@ class FrmEntry {
|
|
261 |
global $wpdb;
|
262 |
$id = (int) $id;
|
263 |
|
264 |
-
$entry = self::getOne( $id );
|
265 |
if ( ! $entry ) {
|
266 |
$result = false;
|
267 |
return $result;
|
261 |
global $wpdb;
|
262 |
$id = (int) $id;
|
263 |
|
264 |
+
$entry = self::getOne( $id, true ); // Item meta is required for conditional logic in actions with 'delete' events.
|
265 |
if ( ! $entry ) {
|
266 |
$result = false;
|
267 |
return $result;
|
classes/models/FrmPluginSearch.php
CHANGED
@@ -83,6 +83,10 @@ class FrmPluginSearch {
|
|
83 |
'version' => $addon_list[ $matching_addon ]['version'],
|
84 |
);
|
85 |
|
|
|
|
|
|
|
|
|
86 |
// Splice in the base addon data.
|
87 |
$inject = array_merge( $inject, $addon_list[ $matching_addon ], $overrides );
|
88 |
|
@@ -108,20 +112,15 @@ class FrmPluginSearch {
|
|
108 |
continue;
|
109 |
}
|
110 |
|
111 |
-
/*
|
112 |
-
* Does the site's current plan support the feature?
|
113 |
-
*/
|
114 |
-
$is_supported_by_plan = ! empty( $addon_opts['url'] );
|
115 |
-
|
116 |
if ( ! isset( $addon_opts['search_terms'] ) ) {
|
117 |
$addon_opts['search_terms'] = '';
|
118 |
}
|
119 |
|
120 |
-
$addon_terms = $this->search_to_array( $addon_opts['search_terms'] . '
|
121 |
|
122 |
$matches = ! empty( array_intersect( $addon_terms, $normalized_term ) );
|
123 |
|
124 |
-
if ( $matches
|
125 |
$matching_addon = $addon_id;
|
126 |
break;
|
127 |
}
|
@@ -137,7 +136,8 @@ class FrmPluginSearch {
|
|
137 |
*/
|
138 |
private function get_addons() {
|
139 |
$api = new FrmFormApi();
|
140 |
-
|
|
|
141 |
}
|
142 |
|
143 |
/**
|
@@ -271,7 +271,7 @@ class FrmPluginSearch {
|
|
271 |
*/
|
272 |
private function search_to_array( $terms ) {
|
273 |
$terms = $this->sanitize_search_term( $terms );
|
274 |
-
return array_filter( explode( '
|
275 |
}
|
276 |
|
277 |
/**
|
@@ -291,7 +291,6 @@ class FrmPluginSearch {
|
|
291 |
$links = array();
|
292 |
$is_installed = $this->is_installed( $plugin['plugin'] );
|
293 |
$is_active = is_plugin_active( $plugin['plugin'] );
|
294 |
-
$has_access = ! empty( $plugin['url'] );
|
295 |
|
296 |
// Plugin installed, active, feature not enabled; prompt to enable.
|
297 |
if ( ! $is_active && $is_installed ) {
|
83 |
'version' => $addon_list[ $matching_addon ]['version'],
|
84 |
);
|
85 |
|
86 |
+
if ( ! empty( $addon_list[ $matching_addon ]['external'] ) ) {
|
87 |
+
unset( $overrides['name'] );
|
88 |
+
}
|
89 |
+
|
90 |
// Splice in the base addon data.
|
91 |
$inject = array_merge( $inject, $addon_list[ $matching_addon ], $overrides );
|
92 |
|
112 |
continue;
|
113 |
}
|
114 |
|
|
|
|
|
|
|
|
|
|
|
115 |
if ( ! isset( $addon_opts['search_terms'] ) ) {
|
116 |
$addon_opts['search_terms'] = '';
|
117 |
}
|
118 |
|
119 |
+
$addon_terms = $this->search_to_array( $addon_opts['search_terms'] . ' ' . $addon_opts['name'] );
|
120 |
|
121 |
$matches = ! empty( array_intersect( $addon_terms, $normalized_term ) );
|
122 |
|
123 |
+
if ( $matches ) {
|
124 |
$matching_addon = $addon_id;
|
125 |
break;
|
126 |
}
|
136 |
*/
|
137 |
private function get_addons() {
|
138 |
$api = new FrmFormApi();
|
139 |
+
$addons = $api->get_api_info();
|
140 |
+
return apply_filters( 'frm_plugin_search', $addons );
|
141 |
}
|
142 |
|
143 |
/**
|
271 |
*/
|
272 |
private function search_to_array( $terms ) {
|
273 |
$terms = $this->sanitize_search_term( $terms );
|
274 |
+
return array_filter( explode( ' ', $terms ) );
|
275 |
}
|
276 |
|
277 |
/**
|
291 |
$links = array();
|
292 |
$is_installed = $this->is_installed( $plugin['plugin'] );
|
293 |
$is_active = is_plugin_active( $plugin['plugin'] );
|
|
|
294 |
|
295 |
// Plugin installed, active, feature not enabled; prompt to enable.
|
296 |
if ( ! $is_active && $is_installed ) {
|
css/frm_admin.css
CHANGED
@@ -5817,7 +5817,8 @@ ul.start_divider {
|
|
5817 |
cursor: not-allowed;
|
5818 |
}
|
5819 |
|
5820 |
-
|
|
|
5821 |
display: none !important;
|
5822 |
}
|
5823 |
|
5817 |
cursor: not-allowed;
|
5818 |
}
|
5819 |
|
5820 |
+
/* Hide the Duplicate summary option because we are missing the logic that also adds a new page */
|
5821 |
+
.edit_field_type_summary .frm_more_options_li:nth-child(2) {
|
5822 |
display: none !important;
|
5823 |
}
|
5824 |
|
formidable.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
/*
|
3 |
Plugin Name: Formidable Forms
|
4 |
Description: Quickly and easily create drag-and-drop forms
|
5 |
-
Version: 5.4.
|
6 |
Plugin URI: https://formidableforms.com/
|
7 |
Author URI: https://formidableforms.com/
|
8 |
Author: Strategy11 Form Builder Team
|
2 |
/*
|
3 |
Plugin Name: Formidable Forms
|
4 |
Description: Quickly and easily create drag-and-drop forms
|
5 |
+
Version: 5.4.5
|
6 |
Plugin URI: https://formidableforms.com/
|
7 |
Author URI: https://formidableforms.com/
|
8 |
Author: Strategy11 Form Builder Team
|
js/admin/dom.js
CHANGED
@@ -388,6 +388,96 @@
|
|
388 |
}
|
389 |
};
|
390 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
391 |
function getModalHelper( modal, appendTo ) {
|
392 |
return function( child, uniqueClassName ) {
|
393 |
let element = modal.querySelector( '.' + uniqueClassName );
|
@@ -538,5 +628,5 @@
|
|
538 |
element.appendChild( child );
|
539 |
}
|
540 |
|
541 |
-
window.frmDom = { tag, div, span, a, img, svg, setAttributes, modal, ajax, bootstrap, autocomplete, search, util };
|
542 |
}() );
|
388 |
}
|
389 |
};
|
390 |
|
391 |
+
const wysiwyg = {
|
392 |
+
init( editor, { setupCallback } = {}) {
|
393 |
+
if ( isTinyMceActive() ) {
|
394 |
+
setTimeout( resetTinyMce, 0 );
|
395 |
+
} else {
|
396 |
+
initQuickTagsButtons();
|
397 |
+
}
|
398 |
+
|
399 |
+
setUpTinyMceVisualButtonListener();
|
400 |
+
setUpTinyMceHtmlButtonListener();
|
401 |
+
|
402 |
+
function initQuickTagsButtons() {
|
403 |
+
if ( 'function' !== typeof window.quicktags || typeof window.QTags.instances[ editor.id ] !== 'undefined' ) {
|
404 |
+
return;
|
405 |
+
}
|
406 |
+
|
407 |
+
const id = editor.id;
|
408 |
+
window.quicktags({
|
409 |
+
name: 'qt_' + id,
|
410 |
+
id: id,
|
411 |
+
canvas: editor,
|
412 |
+
settings: { id },
|
413 |
+
toolbar: document.getElementById( 'qt_' + id + '_toolbar' ),
|
414 |
+
theButtons: {}
|
415 |
+
});
|
416 |
+
}
|
417 |
+
|
418 |
+
function initRichText() {
|
419 |
+
const key = Object.keys( tinyMCEPreInit.mceInit )[0];
|
420 |
+
const orgSettings = tinyMCEPreInit.mceInit[ key ];
|
421 |
+
|
422 |
+
const settings = Object.assign(
|
423 |
+
{},
|
424 |
+
orgSettings,
|
425 |
+
{
|
426 |
+
selector: '#' + editor.id,
|
427 |
+
body_class: orgSettings.body_class.replace( key, editor.id )
|
428 |
+
}
|
429 |
+
);
|
430 |
+
|
431 |
+
if ( setupCallback ) {
|
432 |
+
settings.setup = setupCallback;
|
433 |
+
}
|
434 |
+
|
435 |
+
tinymce.init( settings );
|
436 |
+
}
|
437 |
+
|
438 |
+
function removeRichText() {
|
439 |
+
tinymce.EditorManager.execCommand( 'mceRemoveEditor', true, editor.id );
|
440 |
+
}
|
441 |
+
|
442 |
+
function resetTinyMce() {
|
443 |
+
removeRichText();
|
444 |
+
initRichText();
|
445 |
+
}
|
446 |
+
|
447 |
+
function isTinyMceActive() {
|
448 |
+
const id = editor.id;
|
449 |
+
const wrapper = document.getElementById( 'wp-' + id + '-wrap' );
|
450 |
+
return null !== wrapper && wrapper.classList.contains( 'tmce-active' );
|
451 |
+
}
|
452 |
+
|
453 |
+
function setUpTinyMceVisualButtonListener() {
|
454 |
+
jQuery( document ).on(
|
455 |
+
'click', '#' + editor.id + '-html',
|
456 |
+
function() {
|
457 |
+
editor.style.visibility = 'visible';
|
458 |
+
initQuickTagsButtons( editor );
|
459 |
+
}
|
460 |
+
);
|
461 |
+
}
|
462 |
+
|
463 |
+
function setUpTinyMceHtmlButtonListener() {
|
464 |
+
jQuery( '#' + editor.id + '-tmce' ).on( 'click', handleTinyMceHtmlButtonClick );
|
465 |
+
}
|
466 |
+
|
467 |
+
function handleTinyMceHtmlButtonClick() {
|
468 |
+
if ( isTinyMceActive() ) {
|
469 |
+
resetTinyMce();
|
470 |
+
} else {
|
471 |
+
initRichText();
|
472 |
+
}
|
473 |
+
|
474 |
+
const wrap = document.getElementById( 'wp-' + editor.id + '-wrap' );
|
475 |
+
wrap.classList.add( 'tmce-active' );
|
476 |
+
wrap.classList.remove( 'html-active' );
|
477 |
+
}
|
478 |
+
}
|
479 |
+
};
|
480 |
+
|
481 |
function getModalHelper( modal, appendTo ) {
|
482 |
return function( child, uniqueClassName ) {
|
483 |
let element = modal.querySelector( '.' + uniqueClassName );
|
628 |
element.appendChild( child );
|
629 |
}
|
630 |
|
631 |
+
window.frmDom = { tag, div, span, a, img, svg, setAttributes, modal, ajax, bootstrap, autocomplete, search, util, wysiwyg };
|
632 |
}() );
|
js/formidable_admin.js
CHANGED
@@ -605,30 +605,27 @@ function frmAdminBuildJS() {
|
|
605 |
|
606 |
function removeThisTag() {
|
607 |
/*jshint validthis:true */
|
608 |
-
|
609 |
-
id = '',
|
610 |
-
deleteButton = jQuery( this ),
|
611 |
-
continueRemove = confirmLinkClick( this );
|
612 |
|
613 |
-
if ( parseInt( this.getAttribute( 'data-skip-frm-js' ) ) ) {
|
614 |
return;
|
615 |
}
|
616 |
|
617 |
-
|
618 |
-
|
619 |
-
|
620 |
-
|
621 |
-
|
622 |
-
|
623 |
-
|
624 |
-
|
625 |
-
|
626 |
-
|
627 |
-
|
628 |
-
hide = '';
|
629 |
-
}
|
630 |
}
|
631 |
|
|
|
|
|
632 |
if ( show !== '' ) {
|
633 |
if ( deleteButton.closest( '.frm_add_remove' ).find( '.frm_remove_tag:visible' ).length > 1 ) {
|
634 |
show = '';
|
@@ -646,7 +643,7 @@ function frmAdminBuildJS() {
|
|
646 |
}
|
647 |
}
|
648 |
|
649 |
-
|
650 |
$fadeEle.fadeOut( 400, function() {
|
651 |
$fadeEle.remove();
|
652 |
fieldUpdated();
|
@@ -659,10 +656,9 @@ function frmAdminBuildJS() {
|
|
659 |
jQuery( show + ' a,' + show ).removeClass( 'frm_hidden' ).fadeIn( 'slow' );
|
660 |
}
|
661 |
|
662 |
-
|
663 |
-
|
664 |
-
|
665 |
-
checkActiveAction( type );
|
666 |
}
|
667 |
});
|
668 |
|
@@ -680,6 +676,14 @@ function frmAdminBuildJS() {
|
|
680 |
return false;
|
681 |
}
|
682 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
683 |
function clickWidget( event, b ) {
|
684 |
/*jshint validthis:true */
|
685 |
var target = event.target;
|
@@ -1427,31 +1431,23 @@ function frmAdminBuildJS() {
|
|
1427 |
* @param {object} opts
|
1428 |
*/
|
1429 |
function insertNewFieldByDragging( selectedItem, fieldButton ) {
|
1430 |
-
|
1431 |
-
|
1432 |
-
fieldType = fieldButton.attr( 'id' );
|
1433 |
-
|
1434 |
-
// We'll optimistically disable the button now. We'll re-enable if AJAX fails
|
1435 |
-
if ( 'summary' === fieldType ) {
|
1436 |
-
addBtn = fieldButton.children( '.frm_add_field' );
|
1437 |
-
disableSummaryBtnBeforeAJAX( addBtn, fieldButton );
|
1438 |
-
}
|
1439 |
|
1440 |
-
sortableData = jQuery( selectedItem ).data().uiSortable;
|
1441 |
-
currentItem = sortableData.currentItem;
|
1442 |
-
insertAtIndex = determineIndexBasedOffOfMousePositionInRow( currentItem.parent(), currentItem.offset().left );
|
1443 |
jQuery( getFieldsInRow( currentItem.parent() ).get( insertAtIndex ) ).before( currentItem );
|
1444 |
-
section = getSectionForFieldPlacement( currentItem );
|
1445 |
-
formId = getFormIdForFieldPlacement( section );
|
1446 |
-
sectionId = getSectionIdForFieldPlacement( section );
|
1447 |
|
1448 |
-
loadingID
|
1449 |
-
$placeholder = jQuery( '<li class="frm-wait frmbutton_loadingnow" id="' + loadingID + '" ></li>' );
|
1450 |
currentItem.replaceWith( $placeholder );
|
1451 |
|
1452 |
syncLayoutClasses( $placeholder );
|
1453 |
|
1454 |
-
hasBreak = 0;
|
1455 |
if ( 'summary' === fieldType ) {
|
1456 |
// see if we need to insert a page break before this newly-added summary field. Check for at least 1 page break
|
1457 |
hasBreak = jQuery( '.frmbutton_loadingnow#' + loadingID ).prevAll( 'li[data-type="break"]' ).length ? 1 : 0;
|
@@ -1468,9 +1464,9 @@ function frmAdminBuildJS() {
|
|
1468 |
has_break: hasBreak
|
1469 |
},
|
1470 |
success: function( msg ) {
|
1471 |
-
|
1472 |
document.getElementById( 'frm_form_editor_container' ).classList.add( 'frm-has-fields' );
|
1473 |
-
$siblings = $placeholder.siblings( 'li.form-field' ).not( '.edit_field_type_end_divider' );
|
1474 |
if ( ! $siblings.length ) {
|
1475 |
// if dragging into a new row, we need to wrap the li first.
|
1476 |
replaceWith = wrapFieldLi( msg );
|
@@ -1485,12 +1481,24 @@ function frmAdminBuildJS() {
|
|
1485 |
}
|
1486 |
toggleSectionHolder();
|
1487 |
},
|
1488 |
-
error:
|
1489 |
-
maybeReenableSummaryBtnAfterAJAX( fieldType, addBtn, fieldButton, errorThrown );
|
1490 |
-
}
|
1491 |
});
|
1492 |
}
|
1493 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1494 |
/**
|
1495 |
* Get a unique id that automatically increments with every function call.
|
1496 |
* Can be used for any UI that requires a unique id.
|
@@ -1674,25 +1682,21 @@ function frmAdminBuildJS() {
|
|
1674 |
|
1675 |
function addFieldClick() {
|
1676 |
/*jshint validthis:true */
|
1677 |
-
|
1678 |
// there is no real way to disable a <a> (with a valid href attribute) in HTML - https://css-tricks.com/how-to-disable-links/
|
1679 |
if ( $thisObj.hasClass( 'disabled' ) ) {
|
1680 |
return false;
|
1681 |
}
|
1682 |
|
1683 |
-
|
1684 |
-
|
1685 |
|
1686 |
-
|
1687 |
if ( 'summary' === fieldType ) {
|
1688 |
-
// We'll optimistically disable $button now. We'll re-enable if AJAX fails
|
1689 |
-
disableSummaryBtnBeforeAJAX( $thisObj, $button );
|
1690 |
-
|
1691 |
hasBreak = $newFields.children( 'li[data-type="break"]' ).length > 0 ? 1 : 0;
|
1692 |
}
|
1693 |
|
1694 |
-
|
1695 |
-
|
1696 |
jQuery.ajax({
|
1697 |
type: 'POST',
|
1698 |
url: ajaxurl,
|
@@ -1709,52 +1713,11 @@ function frmAdminBuildJS() {
|
|
1709 |
$newFields.append( wrapFieldLi( msg ) );
|
1710 |
afterAddField( msg, true );
|
1711 |
},
|
1712 |
-
error:
|
1713 |
-
maybeReenableSummaryBtnAfterAJAX( fieldType, $thisObj, $button, errorThrown );
|
1714 |
-
}
|
1715 |
});
|
1716 |
return false;
|
1717 |
}
|
1718 |
|
1719 |
-
function disableSummaryBtnBeforeAJAX( addBtn, fieldButton ) {
|
1720 |
-
addBtn.addClass( 'disabled' );
|
1721 |
-
fieldButton.draggable( 'disable' );
|
1722 |
-
}
|
1723 |
-
|
1724 |
-
function reenableAddSummaryBtn() {
|
1725 |
-
var frmBtn = jQuery( 'li#summary' );
|
1726 |
-
var addFieldLink = frmBtn.children( '.frm_add_field' );
|
1727 |
-
frmBtn.draggable( 'enable' );
|
1728 |
-
addFieldLink.removeClass( 'disabled' );
|
1729 |
-
}
|
1730 |
-
|
1731 |
-
function maybeDisableAddSummaryBtn() {
|
1732 |
-
var summary = document.getElementById( 'summary' );
|
1733 |
-
if ( summary && ! summary.classList.contains( 'frm_show_upgrade' ) && formHasSummaryField() ) {
|
1734 |
-
disableAddSummaryBtn();
|
1735 |
-
}
|
1736 |
-
}
|
1737 |
-
|
1738 |
-
function disableAddSummaryBtn() {
|
1739 |
-
var frmBtn = jQuery( 'li#summary' );
|
1740 |
-
var addFieldLink = frmBtn.children( '.frm_add_field' );
|
1741 |
-
frmBtn.draggable( 'disable' );
|
1742 |
-
addFieldLink.addClass( 'disabled' );
|
1743 |
-
}
|
1744 |
-
|
1745 |
-
function maybeReenableSummaryBtnAfterAJAX( fieldType, addBtn, fieldButton, errorThrown ) {
|
1746 |
-
infoModal( errorThrown + '. Please try again.' );
|
1747 |
-
if ( 'summary' === fieldType ) {
|
1748 |
-
addBtn.removeClass( 'disabled' );
|
1749 |
-
fieldButton.draggable( 'enable' );
|
1750 |
-
}
|
1751 |
-
}
|
1752 |
-
|
1753 |
-
function formHasSummaryField() {
|
1754 |
-
// .edit_field_type_summary is a better selector here in order to also cover fields loaded by AJAX
|
1755 |
-
return $newFields.children( 'li.edit_field_type_summary' ).length > 0;
|
1756 |
-
}
|
1757 |
-
|
1758 |
function maybeHideQuantityProductFieldOption() {
|
1759 |
var hide = true,
|
1760 |
opts = document.querySelectorAll( '.frmjs_prod_field_opt_cont' );
|
@@ -3055,16 +3018,13 @@ function frmAdminBuildJS() {
|
|
3055 |
}
|
3056 |
|
3057 |
function addImageToOption( event ) {
|
3058 |
-
|
3059 |
-
$this = jQuery( this ),
|
3060 |
-
$imagePreview = $this.closest( '.frm_image_preview_wrapper' ),
|
3061 |
-
postID = 0;
|
3062 |
|
3063 |
event.preventDefault();
|
3064 |
|
3065 |
-
wp.media.model.settings.post.id =
|
3066 |
|
3067 |
-
fileFrame = wp.media.frames.file_frame = wp.media({
|
3068 |
multiple: false,
|
3069 |
library: {
|
3070 |
type: [ 'image' ]
|
@@ -3073,13 +3033,20 @@ function frmAdminBuildJS() {
|
|
3073 |
|
3074 |
fileFrame.on( 'select', function() {
|
3075 |
const attachment = fileFrame.state().get( 'selection' ).first().toJSON();
|
3076 |
-
|
3077 |
-
|
3078 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3079 |
$imagePreview.siblings( 'input[name*="[label]"]' ).data( 'frmimgurl', attachment.url );
|
3080 |
-
$imagePreview.find( '.frm_choose_image_box' ).hide();
|
3081 |
$imagePreview.find( 'input.frm_image_id' ).val( attachment.id ).trigger( 'change' );
|
3082 |
-
wp.media.model.settings.post.id =
|
3083 |
});
|
3084 |
|
3085 |
fileFrame.open();
|
@@ -4186,9 +4153,6 @@ function frmAdminBuildJS() {
|
|
4186 |
if ( type === 'break' ) {
|
4187 |
renumberPageBreaks();
|
4188 |
}
|
4189 |
-
if ( type === 'summary' ) {
|
4190 |
-
reenableAddSummaryBtn();
|
4191 |
-
}
|
4192 |
if ( type === 'product' ) {
|
4193 |
maybeHideQuantityProductFieldOption();
|
4194 |
// a product field attached to a quantity field earlier might be the one deleted, so re-populate
|
@@ -6005,39 +5969,70 @@ function frmAdminBuildJS() {
|
|
6005 |
}
|
6006 |
}
|
6007 |
|
6008 |
-
function copyFormAction() {
|
6009 |
-
|
6010 |
-
if ( waitForActionToLoadBeforeCopy( this ) ) {
|
6011 |
return;
|
6012 |
}
|
6013 |
|
6014 |
-
|
6015 |
-
|
6016 |
-
|
6017 |
-
|
6018 |
-
|
6019 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6020 |
|
6021 |
// the .html() gets original values, so they need to be set
|
6022 |
-
action.find( 'input[type=text], textarea, input[type=number]' ).prop( 'defaultValue', function() {
|
6023 |
return this.value;
|
6024 |
});
|
6025 |
|
6026 |
-
action.find( 'input[type=checkbox], input[type=radio]' ).prop( 'defaultChecked', function() {
|
6027 |
return this.checked;
|
6028 |
});
|
6029 |
|
6030 |
-
|
6031 |
-
|
6032 |
-
|
6033 |
-
|
6034 |
|
6035 |
-
|
6036 |
html = html.replace( reclass, '-' + newID + '"' ).replace( revalue, '"' + newID + '"' );
|
6037 |
-
var div = '<div id="frm_form_action_' + newID + '" class="widget frm_form_action_settings frm_single_email_settings" data-actionkey="' + newID + '">';
|
6038 |
|
6039 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6040 |
initiateMultiselect();
|
|
|
|
|
|
|
6041 |
}
|
6042 |
|
6043 |
function waitForActionToLoadBeforeCopy( element ) {
|
@@ -6072,21 +6067,19 @@ function frmAdminBuildJS() {
|
|
6072 |
|
6073 |
function addFormAction() {
|
6074 |
/*jshint validthis:true */
|
6075 |
-
|
6076 |
-
|
6077 |
-
type = jQuery( this ).data( 'actiontype' );
|
6078 |
|
6079 |
if ( isAtLimitForActionType( type ) ) {
|
6080 |
return;
|
6081 |
}
|
6082 |
|
6083 |
-
actionId = getNewActionId();
|
6084 |
-
formId = thisFormId;
|
6085 |
|
6086 |
-
placeholderSetting = document.createElement( 'div' );
|
6087 |
placeholderSetting.classList.add( 'frm_single_' + type + '_settings' );
|
6088 |
|
6089 |
-
actionsList = document.getElementById( 'frm_notification_settings' );
|
6090 |
actionsList.appendChild( placeholderSetting );
|
6091 |
|
6092 |
jQuery.ajax({
|
@@ -6099,31 +6092,48 @@ function frmAdminBuildJS() {
|
|
6099 |
form_id: formId,
|
6100 |
nonce: frmGlobal.nonce
|
6101 |
},
|
6102 |
-
success:
|
6103 |
-
|
6104 |
-
placeholderSetting.remove();
|
6105 |
|
6106 |
-
|
6107 |
-
|
|
|
6108 |
|
6109 |
-
|
6110 |
-
jQuery( '.frm_form_action_settings' ).fadeIn( 'slow' );
|
6111 |
|
6112 |
-
|
|
|
6113 |
|
6114 |
-
|
6115 |
-
|
6116 |
-
top: newAction.offsetTop + 10,
|
6117 |
-
left: 0,
|
6118 |
-
behavior: 'smooth'
|
6119 |
-
});
|
6120 |
|
6121 |
-
|
6122 |
-
|
6123 |
-
|
6124 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6125 |
}
|
6126 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
6127 |
}
|
6128 |
|
6129 |
function toggleActionGroups() {
|
@@ -6195,129 +6205,15 @@ function frmAdminBuildJS() {
|
|
6195 |
singleField.classList.remove( 'frm_hidden' );
|
6196 |
document.getElementById( 'frm-options-panel-tab' ).click();
|
6197 |
|
6198 |
-
|
6199 |
-
setUpTinyMceHtmlButtonListener( singleField );
|
6200 |
-
|
6201 |
-
if ( isTinyMceActive() ) {
|
6202 |
-
setTimeout( resetTinyMce, 0 );
|
6203 |
-
} else {
|
6204 |
-
initQuickTagsButtons( singleField );
|
6205 |
-
}
|
6206 |
-
}
|
6207 |
-
|
6208 |
-
function setUpTinyMceVisualButtonListener( fieldSettings ) {
|
6209 |
-
var editor = fieldSettings.querySelector( '.wp-editor-area' );
|
6210 |
if ( editor ) {
|
6211 |
-
|
6212 |
-
|
6213 |
-
|
6214 |
-
editor.style.visibility = 'visible';
|
6215 |
-
initQuickTagsButtons( fieldSettings );
|
6216 |
-
}
|
6217 |
);
|
6218 |
}
|
6219 |
}
|
6220 |
|
6221 |
-
function setUpTinyMceHtmlButtonListener( fieldSettings ) {
|
6222 |
-
var editor, hasResetTinyMce;
|
6223 |
-
|
6224 |
-
editor = fieldSettings.querySelector( '.wp-editor-area' );
|
6225 |
-
if ( ! editor ) {
|
6226 |
-
return;
|
6227 |
-
}
|
6228 |
-
|
6229 |
-
hasResetTinyMce = false;
|
6230 |
-
|
6231 |
-
jQuery( '#' + editor.id + '-tmce' )
|
6232 |
-
.on(
|
6233 |
-
'click',
|
6234 |
-
function() {
|
6235 |
-
var wrap;
|
6236 |
-
|
6237 |
-
if ( ! hasResetTinyMce ) {
|
6238 |
-
resetTinyMce();
|
6239 |
-
hasResetTinyMce = true;
|
6240 |
-
}
|
6241 |
-
|
6242 |
-
wrap = document.getElementById( 'wp-' + editor.id + '-wrap' );
|
6243 |
-
wrap.classList.add( 'tmce-active' );
|
6244 |
-
wrap.classList.remove( 'html-active' );
|
6245 |
-
}
|
6246 |
-
);
|
6247 |
-
}
|
6248 |
-
|
6249 |
-
function initQuickTagsButtons( fieldSettings ) {
|
6250 |
-
var editor, settings;
|
6251 |
-
|
6252 |
-
editor = fieldSettings.querySelector( '.wp-editor-area' );
|
6253 |
-
|
6254 |
-
if ( ! editor || 'function' !== typeof window.quicktags || typeof window.QTags.instances[ editor.id ] !== 'undefined' ) {
|
6255 |
-
return;
|
6256 |
-
}
|
6257 |
-
|
6258 |
-
settings = {
|
6259 |
-
name: 'qt_' + editor.id,
|
6260 |
-
id: editor.id,
|
6261 |
-
canvas: editor,
|
6262 |
-
settings: {
|
6263 |
-
buttons: 'strong,em,link,block,del,ins,img,ul,ol,li,code,more,close',
|
6264 |
-
id: editor.id
|
6265 |
-
},
|
6266 |
-
toolbar: document.getElementById( 'qt_' + editor.id + '_toolbar' ),
|
6267 |
-
theButtons: {}
|
6268 |
-
};
|
6269 |
-
window.quicktags( settings );
|
6270 |
-
}
|
6271 |
-
|
6272 |
-
function resetTinyMce() {
|
6273 |
-
document.querySelectorAll( '.frm-single-settings:not(.frm_hidden) .wp-editor-area' ).forEach(
|
6274 |
-
function( editor ) {
|
6275 |
-
var isInitialized, isVisible;
|
6276 |
-
|
6277 |
-
isInitialized = 'undefined' !== typeof tinyMCE.editors[ editor.id ];
|
6278 |
-
isVisible = isInitialized && ! tinyMCE.editors[ editor.id ].isHidden();
|
6279 |
-
|
6280 |
-
if ( isVisible ) {
|
6281 |
-
removeRichText( editor.id );
|
6282 |
-
}
|
6283 |
-
|
6284 |
-
if ( isVisible || ! isInitialized ) {
|
6285 |
-
initRichText( editor.id );
|
6286 |
-
}
|
6287 |
-
}
|
6288 |
-
);
|
6289 |
-
}
|
6290 |
-
|
6291 |
-
function removeRichText( id ) {
|
6292 |
-
tinymce.EditorManager.execCommand( 'mceRemoveEditor', true, id );
|
6293 |
-
tinymce.remove( id );
|
6294 |
-
}
|
6295 |
-
|
6296 |
-
function initRichText( id ) {
|
6297 |
-
var defaultSettings = getDefaultTinyMceSettings(),
|
6298 |
-
newValues = {
|
6299 |
-
selector: '#' + id,
|
6300 |
-
body_class: defaultSettings.body_class.replace( getDefaultSettingsKey(), id ),
|
6301 |
-
setup: setupTinyMceEventHandlers
|
6302 |
-
},
|
6303 |
-
newSettings = Object.assign(
|
6304 |
-
{}, defaultSettings, newValues
|
6305 |
-
);
|
6306 |
-
if ( 'undefined' !== typeof newSettings.toolbar1 ) {
|
6307 |
-
// the link option does not work in the modal, so exclude it.
|
6308 |
-
newSettings.toolbar1 = newSettings.toolbar1.replace( ',wp_more', '' );
|
6309 |
-
}
|
6310 |
-
tinymce.init( newSettings );
|
6311 |
-
}
|
6312 |
-
|
6313 |
-
function getDefaultSettingsKey() {
|
6314 |
-
return Object.keys( tinyMCEPreInit.mceInit )[0];
|
6315 |
-
}
|
6316 |
-
|
6317 |
-
function getDefaultTinyMceSettings() {
|
6318 |
-
return tinyMCEPreInit.mceInit[ getDefaultSettingsKey() ];
|
6319 |
-
}
|
6320 |
-
|
6321 |
function setupTinyMceEventHandlers( editor ) {
|
6322 |
editor.on( 'Change', function() {
|
6323 |
handleTinyMceChange( editor );
|
@@ -6325,10 +6221,12 @@ function frmAdminBuildJS() {
|
|
6325 |
}
|
6326 |
|
6327 |
function handleTinyMceChange( editor ) {
|
6328 |
-
if ( isTinyMceActive()
|
6329 |
-
|
6330 |
-
jQuery( editor.targetElm ).trigger( 'change' );
|
6331 |
}
|
|
|
|
|
|
|
6332 |
}
|
6333 |
|
6334 |
function isTinyMceActive() {
|
@@ -6397,23 +6295,46 @@ function frmAdminBuildJS() {
|
|
6397 |
}
|
6398 |
|
6399 |
function checkActiveAction( type ) {
|
6400 |
-
|
6401 |
-
|
6402 |
-
$actionTriggers = jQuery( '.frm_' + type + '_action' );
|
6403 |
|
6404 |
if ( isAtLimitForActionType( type ) ) {
|
6405 |
-
|
6406 |
-
|
6407 |
-
|
6408 |
-
}
|
6409 |
-
$actionTriggers.removeClass( 'frm_active_action' ).addClass( limitClass );
|
6410 |
-
} else {
|
6411 |
-
$actionTriggers.removeClass( 'frm_inactive_action frm_already_used' ).addClass( 'frm_active_action' );
|
6412 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6413 |
}
|
6414 |
|
6415 |
function isAtLimitForActionType( type ) {
|
6416 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
6417 |
}
|
6418 |
|
6419 |
function getLimitForActionType( type ) {
|
@@ -8025,9 +7946,6 @@ function frmAdminBuildJS() {
|
|
8025 |
});
|
8026 |
}
|
8027 |
|
8028 |
-
/**
|
8029 |
-
* TODO stop addressing oneclick stuff by ID as this may happen in a tab as well.
|
8030 |
-
*/
|
8031 |
function afterAddonInstall( response, button, message, el, saveAndReload ) {
|
8032 |
const addonStatuses = document.querySelectorAll( '.frm-addon-status' );
|
8033 |
addonStatuses.forEach(
|
@@ -9540,16 +9458,17 @@ function frmAdminBuildJS() {
|
|
9540 |
|
9541 |
initBulkOptionsOverlay();
|
9542 |
hideEmptyEle();
|
9543 |
-
maybeDisableAddSummaryBtn();
|
9544 |
maybeHideQuantityProductFieldOption();
|
9545 |
handleNameFieldOnFormBuilder();
|
9546 |
toggleSectionHolder();
|
9547 |
},
|
9548 |
|
9549 |
settingsInit: function() {
|
9550 |
-
|
9551 |
-
|
9552 |
-
|
|
|
|
|
9553 |
$formActions.on( 'click', '.frm_email_buttons', showEmailRow );
|
9554 |
$formActions.on( 'click', '.frm_remove_field', hideEmailRow );
|
9555 |
$formActions.on( 'change', '.frm_to_row, .frm_from_row', showEmailWarning );
|
@@ -9572,7 +9491,7 @@ function frmAdminBuildJS() {
|
|
9572 |
checkActiveAction( jQuery( this ).children( 'a' ).data( 'actiontype' ) );
|
9573 |
|
9574 |
// If the icon is a background image, don't add BG color.
|
9575 |
-
|
9576 |
if ( icon.css( 'background-image' ) !== 'none' ) {
|
9577 |
icon.addClass( 'frm-inverse' );
|
9578 |
}
|
@@ -9589,23 +9508,45 @@ function frmAdminBuildJS() {
|
|
9589 |
formSettings.on( 'click', '.frm_add_submit_logic', addSubmitLogic );
|
9590 |
formSettings.on( 'change', '.frm_submit_logic_field_opts', addSubmitLogicOpts );
|
9591 |
|
9592 |
-
|
9593 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9594 |
|
9595 |
// Close shortcode modal on click.
|
9596 |
formSettings.on( 'mouseup', '*:not(.frm-show-box)', function( e ) {
|
9597 |
e.stopPropagation();
|
|
|
9598 |
if ( e.target.classList.contains( 'frm-show-box' ) ) {
|
9599 |
return;
|
9600 |
}
|
9601 |
-
|
9602 |
-
|
|
|
|
|
|
|
9603 |
|
9604 |
if ( sidebar.getAttribute( 'data-fills' ) === e.target.id && typeof e.target.id !== 'undefined' ) {
|
9605 |
return;
|
9606 |
}
|
9607 |
|
9608 |
-
|
|
|
9609 |
hideShortcodes( sidebar );
|
9610 |
}
|
9611 |
});
|
605 |
|
606 |
function removeThisTag() {
|
607 |
/*jshint validthis:true */
|
608 |
+
let show, hide, removeMore;
|
|
|
|
|
|
|
609 |
|
610 |
+
if ( parseInt( this.getAttribute( 'data-skip-frm-js' ) ) || confirmLinkClick( this ) === false ) {
|
611 |
return;
|
612 |
}
|
613 |
|
614 |
+
const deleteButton = jQuery( this );
|
615 |
+
const id = deleteButton.attr( 'data-removeid' );
|
616 |
+
|
617 |
+
show = deleteButton.attr( 'data-showlast' );
|
618 |
+
if ( typeof show === 'undefined' ) {
|
619 |
+
show = '';
|
620 |
+
}
|
621 |
+
|
622 |
+
hide = deleteButton.attr( 'data-hidelast' );
|
623 |
+
if ( typeof hide === 'undefined' ) {
|
624 |
+
hide = '';
|
|
|
|
|
625 |
}
|
626 |
|
627 |
+
removeMore = deleteButton.attr( 'data-removemore' );
|
628 |
+
|
629 |
if ( show !== '' ) {
|
630 |
if ( deleteButton.closest( '.frm_add_remove' ).find( '.frm_remove_tag:visible' ).length > 1 ) {
|
631 |
show = '';
|
643 |
}
|
644 |
}
|
645 |
|
646 |
+
const $fadeEle = jQuery( document.getElementById( id ) );
|
647 |
$fadeEle.fadeOut( 400, function() {
|
648 |
$fadeEle.remove();
|
649 |
fieldUpdated();
|
656 |
jQuery( show + ' a,' + show ).removeClass( 'frm_hidden' ).fadeIn( 'slow' );
|
657 |
}
|
658 |
|
659 |
+
if ( this.closest( '.frm_form_action_settings' ) ) {
|
660 |
+
const type = this.closest( '.frm_form_action_settings' ).querySelector( '.frm_action_name' ).value;
|
661 |
+
afterActionRemoved( type );
|
|
|
662 |
}
|
663 |
});
|
664 |
|
676 |
return false;
|
677 |
}
|
678 |
|
679 |
+
function afterActionRemoved( type ) {
|
680 |
+
checkActiveAction( type );
|
681 |
+
|
682 |
+
const hookName = 'frm_after_action_removed';
|
683 |
+
const hookArgs = { type };
|
684 |
+
wp.hooks.doAction( hookName, hookArgs );
|
685 |
+
}
|
686 |
+
|
687 |
function clickWidget( event, b ) {
|
688 |
/*jshint validthis:true */
|
689 |
var target = event.target;
|
1431 |
* @param {object} opts
|
1432 |
*/
|
1433 |
function insertNewFieldByDragging( selectedItem, fieldButton ) {
|
1434 |
+
const fieldType = fieldButton.attr( 'id' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1435 |
|
1436 |
+
const sortableData = jQuery( selectedItem ).data().uiSortable;
|
1437 |
+
const currentItem = sortableData.currentItem;
|
1438 |
+
const insertAtIndex = determineIndexBasedOffOfMousePositionInRow( currentItem.parent(), currentItem.offset().left );
|
1439 |
jQuery( getFieldsInRow( currentItem.parent() ).get( insertAtIndex ) ).before( currentItem );
|
1440 |
+
const section = getSectionForFieldPlacement( currentItem );
|
1441 |
+
const formId = getFormIdForFieldPlacement( section );
|
1442 |
+
const sectionId = getSectionIdForFieldPlacement( section );
|
1443 |
|
1444 |
+
const loadingID = fieldType.replace( '|', '-' ) + '_' + getAutoId();
|
1445 |
+
const $placeholder = jQuery( '<li class="frm-wait frmbutton_loadingnow" id="' + loadingID + '" ></li>' );
|
1446 |
currentItem.replaceWith( $placeholder );
|
1447 |
|
1448 |
syncLayoutClasses( $placeholder );
|
1449 |
|
1450 |
+
let hasBreak = 0;
|
1451 |
if ( 'summary' === fieldType ) {
|
1452 |
// see if we need to insert a page break before this newly-added summary field. Check for at least 1 page break
|
1453 |
hasBreak = jQuery( '.frmbutton_loadingnow#' + loadingID ).prevAll( 'li[data-type="break"]' ).length ? 1 : 0;
|
1464 |
has_break: hasBreak
|
1465 |
},
|
1466 |
success: function( msg ) {
|
1467 |
+
let replaceWith;
|
1468 |
document.getElementById( 'frm_form_editor_container' ).classList.add( 'frm-has-fields' );
|
1469 |
+
const $siblings = $placeholder.siblings( 'li.form-field' ).not( '.edit_field_type_end_divider' );
|
1470 |
if ( ! $siblings.length ) {
|
1471 |
// if dragging into a new row, we need to wrap the li first.
|
1472 |
replaceWith = wrapFieldLi( msg );
|
1481 |
}
|
1482 |
toggleSectionHolder();
|
1483 |
},
|
1484 |
+
error: handleInsertFieldError
|
|
|
|
|
1485 |
});
|
1486 |
}
|
1487 |
|
1488 |
+
function handleInsertFieldError( jqXHR, _, errorThrown ) {
|
1489 |
+
maybeShowInsertFieldError( errorThrown, jqXHR );
|
1490 |
+
}
|
1491 |
+
|
1492 |
+
function maybeShowInsertFieldError( errorThrown, jqXHR ) {
|
1493 |
+
if ( ! jqXHRAborted( jqXHR ) ) {
|
1494 |
+
infoModal( errorThrown + '. Please try again.' );
|
1495 |
+
}
|
1496 |
+
}
|
1497 |
+
|
1498 |
+
function jqXHRAborted( jqXHR ) {
|
1499 |
+
return jqXHR.status === 0 || jqXHR.readyState === 0;
|
1500 |
+
}
|
1501 |
+
|
1502 |
/**
|
1503 |
* Get a unique id that automatically increments with every function call.
|
1504 |
* Can be used for any UI that requires a unique id.
|
1682 |
|
1683 |
function addFieldClick() {
|
1684 |
/*jshint validthis:true */
|
1685 |
+
const $thisObj = jQuery( this );
|
1686 |
// there is no real way to disable a <a> (with a valid href attribute) in HTML - https://css-tricks.com/how-to-disable-links/
|
1687 |
if ( $thisObj.hasClass( 'disabled' ) ) {
|
1688 |
return false;
|
1689 |
}
|
1690 |
|
1691 |
+
const $button = $thisObj.closest( '.frmbutton' );
|
1692 |
+
const fieldType = $button.attr( 'id' );
|
1693 |
|
1694 |
+
let hasBreak = 0;
|
1695 |
if ( 'summary' === fieldType ) {
|
|
|
|
|
|
|
1696 |
hasBreak = $newFields.children( 'li[data-type="break"]' ).length > 0 ? 1 : 0;
|
1697 |
}
|
1698 |
|
1699 |
+
const formId = thisFormId;
|
|
|
1700 |
jQuery.ajax({
|
1701 |
type: 'POST',
|
1702 |
url: ajaxurl,
|
1713 |
$newFields.append( wrapFieldLi( msg ) );
|
1714 |
afterAddField( msg, true );
|
1715 |
},
|
1716 |
+
error: handleInsertFieldError
|
|
|
|
|
1717 |
});
|
1718 |
return false;
|
1719 |
}
|
1720 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1721 |
function maybeHideQuantityProductFieldOption() {
|
1722 |
var hide = true,
|
1723 |
opts = document.querySelectorAll( '.frmjs_prod_field_opt_cont' );
|
3018 |
}
|
3019 |
|
3020 |
function addImageToOption( event ) {
|
3021 |
+
const imagePreview = event.target.closest( '.frm_image_preview_wrapper' );
|
|
|
|
|
|
|
3022 |
|
3023 |
event.preventDefault();
|
3024 |
|
3025 |
+
wp.media.model.settings.post.id = 0;
|
3026 |
|
3027 |
+
const fileFrame = wp.media.frames.file_frame = wp.media({
|
3028 |
multiple: false,
|
3029 |
library: {
|
3030 |
type: [ 'image' ]
|
3033 |
|
3034 |
fileFrame.on( 'select', function() {
|
3035 |
const attachment = fileFrame.state().get( 'selection' ).first().toJSON();
|
3036 |
+
const img = imagePreview.querySelector( 'img' );
|
3037 |
+
|
3038 |
+
img.setAttribute( 'src', attachment.url );
|
3039 |
+
img.classList.remove( 'frm_hidden' );
|
3040 |
+
img.removeAttribute( 'srcset' ); // Prevent the old image from sticking around.
|
3041 |
+
|
3042 |
+
imagePreview.querySelector( '.frm_image_preview_frame' ).style.display = 'block';
|
3043 |
+
imagePreview.querySelector( '.frm_image_preview_title' ).textContent = attachment.filename;
|
3044 |
+
imagePreview.querySelector( '.frm_choose_image_box' ).style.display = 'none';
|
3045 |
+
|
3046 |
+
const $imagePreview = jQuery( imagePreview );
|
3047 |
$imagePreview.siblings( 'input[name*="[label]"]' ).data( 'frmimgurl', attachment.url );
|
|
|
3048 |
$imagePreview.find( 'input.frm_image_id' ).val( attachment.id ).trigger( 'change' );
|
3049 |
+
wp.media.model.settings.post.id = 0;
|
3050 |
});
|
3051 |
|
3052 |
fileFrame.open();
|
4153 |
if ( type === 'break' ) {
|
4154 |
renumberPageBreaks();
|
4155 |
}
|
|
|
|
|
|
|
4156 |
if ( type === 'product' ) {
|
4157 |
maybeHideQuantityProductFieldOption();
|
4158 |
// a product field attached to a quantity field earlier might be the one deleted, so re-populate
|
5969 |
}
|
5970 |
}
|
5971 |
|
5972 |
+
function copyFormAction( event ) {
|
5973 |
+
if ( waitForActionToLoadBeforeCopy( event.target ) ) {
|
|
|
5974 |
return;
|
5975 |
}
|
5976 |
|
5977 |
+
const targetSettings = event.target.closest( '.frm_form_action_settings' );
|
5978 |
+
const wysiwyg = targetSettings.querySelector( '.wp-editor-area' );
|
5979 |
+
if ( wysiwyg ) {
|
5980 |
+
// Temporary remove TinyMCE before cloning to avoid TinyMCE conflicts.
|
5981 |
+
tinymce.EditorManager.execCommand( 'mceRemoveEditor', true, wysiwyg.id );
|
5982 |
+
}
|
5983 |
+
|
5984 |
+
const $action = jQuery( targetSettings ).clone();
|
5985 |
+
const currentID = $action.attr( 'id' ).replace( 'frm_form_action_', '' );
|
5986 |
+
const newID = newActionId( currentID );
|
5987 |
+
|
5988 |
+
$action.find( '.frm_action_id, .frm-btn-group' ).remove();
|
5989 |
+
$action.find( 'input[name$="[' + currentID + '][ID]"]' ).val( '' );
|
5990 |
+
$action.find( '.widget-inside' ).hide();
|
5991 |
|
5992 |
// the .html() gets original values, so they need to be set
|
5993 |
+
$action.find( 'input[type=text], textarea, input[type=number]' ).prop( 'defaultValue', function() {
|
5994 |
return this.value;
|
5995 |
});
|
5996 |
|
5997 |
+
$action.find( 'input[type=checkbox], input[type=radio]' ).prop( 'defaultChecked', function() {
|
5998 |
return this.checked;
|
5999 |
});
|
6000 |
|
6001 |
+
const rename = new RegExp( '\\[' + currentID + '\\]', 'g' );
|
6002 |
+
const reid = new RegExp( '_' + currentID + '"', 'g' );
|
6003 |
+
const reclass = new RegExp( '-' + currentID + '"', 'g' );
|
6004 |
+
const revalue = new RegExp( '"' + currentID + '"', 'g' ); // if a field id matches, this could cause trouble
|
6005 |
|
6006 |
+
let html = $action.html().replace( rename, '[' + newID + ']' ).replace( reid, '_' + newID + '"' );
|
6007 |
html = html.replace( reclass, '-' + newID + '"' ).replace( revalue, '"' + newID + '"' );
|
|
|
6008 |
|
6009 |
+
const newAction = div({
|
6010 |
+
id: 'frm_form_action_' + newID,
|
6011 |
+
className: $action.get( 0 ).className
|
6012 |
+
});
|
6013 |
+
newAction.setAttribute( 'data-actionkey', newID );
|
6014 |
+
newAction.innerHTML = html;
|
6015 |
+
newAction.querySelectorAll( '.wp-editor-wrap, .wp-editor-wrap *' ).forEach(
|
6016 |
+
element => {
|
6017 |
+
if ( 'string' === typeof element.className ) {
|
6018 |
+
element.className = element.className.replace( currentID, newID );
|
6019 |
+
}
|
6020 |
+
element.id = element.id.replace( currentID, newID );
|
6021 |
+
}
|
6022 |
+
);
|
6023 |
+
newAction.classList.remove( 'open' );
|
6024 |
+
document.getElementById( 'frm_notification_settings' ).appendChild( newAction );
|
6025 |
+
|
6026 |
+
if ( wysiwyg ) {
|
6027 |
+
// Re-initialize the original wysiwyg which was removed before cloning.
|
6028 |
+
frmDom.wysiwyg.init( wysiwyg );
|
6029 |
+
}
|
6030 |
+
frmDom.wysiwyg.init( newAction.querySelector( '.wp-editor-area' ) );
|
6031 |
+
|
6032 |
initiateMultiselect();
|
6033 |
+
|
6034 |
+
const hookName = 'frm_after_duplicate_action';
|
6035 |
+
wp.hooks.doAction( hookName, newAction );
|
6036 |
}
|
6037 |
|
6038 |
function waitForActionToLoadBeforeCopy( element ) {
|
6067 |
|
6068 |
function addFormAction() {
|
6069 |
/*jshint validthis:true */
|
6070 |
+
const type = jQuery( this ).data( 'actiontype' );
|
|
|
|
|
6071 |
|
6072 |
if ( isAtLimitForActionType( type ) ) {
|
6073 |
return;
|
6074 |
}
|
6075 |
|
6076 |
+
const actionId = getNewActionId();
|
6077 |
+
const formId = thisFormId;
|
6078 |
|
6079 |
+
const placeholderSetting = document.createElement( 'div' );
|
6080 |
placeholderSetting.classList.add( 'frm_single_' + type + '_settings' );
|
6081 |
|
6082 |
+
const actionsList = document.getElementById( 'frm_notification_settings' );
|
6083 |
actionsList.appendChild( placeholderSetting );
|
6084 |
|
6085 |
jQuery.ajax({
|
6092 |
form_id: formId,
|
6093 |
nonce: frmGlobal.nonce
|
6094 |
},
|
6095 |
+
success: handleAddFormActionSuccess
|
6096 |
+
});
|
|
|
6097 |
|
6098 |
+
function handleAddFormActionSuccess( html ) {
|
6099 |
+
fieldUpdated();
|
6100 |
+
placeholderSetting.remove();
|
6101 |
|
6102 |
+
closeOpenActions();
|
|
|
6103 |
|
6104 |
+
const newActionContainer = div();
|
6105 |
+
newActionContainer.innerHTML = html;
|
6106 |
|
6107 |
+
const widgetTop = newActionContainer.querySelector( '.widget-top' );
|
6108 |
+
Array.from( newActionContainer.children ).forEach( child => actionsList.appendChild( child ) );
|
|
|
|
|
|
|
|
|
6109 |
|
6110 |
+
jQuery( '.frm_form_action_settings' ).fadeIn( 'slow' );
|
6111 |
+
|
6112 |
+
const newAction = document.getElementById( 'frm_form_action_' + actionId );
|
6113 |
+
|
6114 |
+
newAction.classList.add( 'open' );
|
6115 |
+
document.getElementById( 'post-body-content' ).scroll({
|
6116 |
+
top: newAction.offsetTop + 10,
|
6117 |
+
left: 0,
|
6118 |
+
behavior: 'smooth'
|
6119 |
+
});
|
6120 |
+
|
6121 |
+
// Check if icon should be active
|
6122 |
+
checkActiveAction( type );
|
6123 |
+
showInputIcon( '#frm_form_action_' + actionId );
|
6124 |
+
|
6125 |
+
initiateMultiselect();
|
6126 |
+
|
6127 |
+
if ( widgetTop ) {
|
6128 |
+
jQuery( widgetTop ).trigger( 'frm-action-loaded' );
|
6129 |
}
|
6130 |
+
}
|
6131 |
+
}
|
6132 |
+
|
6133 |
+
function closeOpenActions() {
|
6134 |
+
document.querySelectorAll( '.frm_form_action_settings.open' ).forEach(
|
6135 |
+
setting => setting.classList.remove( 'open' )
|
6136 |
+
);
|
6137 |
}
|
6138 |
|
6139 |
function toggleActionGroups() {
|
6205 |
singleField.classList.remove( 'frm_hidden' );
|
6206 |
document.getElementById( 'frm-options-panel-tab' ).click();
|
6207 |
|
6208 |
+
const editor = singleField.querySelector( '.wp-editor-area' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6209 |
if ( editor ) {
|
6210 |
+
frmDom.wysiwyg.init(
|
6211 |
+
editor,
|
6212 |
+
{ setupCallback: setupTinyMceEventHandlers }
|
|
|
|
|
|
|
6213 |
);
|
6214 |
}
|
6215 |
}
|
6216 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6217 |
function setupTinyMceEventHandlers( editor ) {
|
6218 |
editor.on( 'Change', function() {
|
6219 |
handleTinyMceChange( editor );
|
6221 |
}
|
6222 |
|
6223 |
function handleTinyMceChange( editor ) {
|
6224 |
+
if ( ! isTinyMceActive() || tinyMCE.activeEditor.isHidden() ) {
|
6225 |
+
return;
|
|
|
6226 |
}
|
6227 |
+
|
6228 |
+
editor.targetElm.value = editor.getContent();
|
6229 |
+
jQuery( editor.targetElm ).trigger( 'change' );
|
6230 |
}
|
6231 |
|
6232 |
function isTinyMceActive() {
|
6295 |
}
|
6296 |
|
6297 |
function checkActiveAction( type ) {
|
6298 |
+
const actionTriggers = document.querySelectorAll( '.frm_' + type + '_action' );
|
|
|
|
|
6299 |
|
6300 |
if ( isAtLimitForActionType( type ) ) {
|
6301 |
+
const addAlreadyUsedClass = getLimitForActionType( type ) > 0;
|
6302 |
+
markActionTriggersInactive( actionTriggers, addAlreadyUsedClass );
|
6303 |
+
return;
|
|
|
|
|
|
|
|
|
6304 |
}
|
6305 |
+
|
6306 |
+
markActionTriggersActive( actionTriggers );
|
6307 |
+
}
|
6308 |
+
|
6309 |
+
function markActionTriggersActive( triggers ) {
|
6310 |
+
triggers.forEach(
|
6311 |
+
trigger => {
|
6312 |
+
trigger.classList.remove( 'frm_inactive_action', 'frm_already_used' );
|
6313 |
+
trigger.classList.add( 'frm_active_action' );
|
6314 |
+
}
|
6315 |
+
);
|
6316 |
+
}
|
6317 |
+
|
6318 |
+
function markActionTriggersInactive( triggers, addAlreadyUsedClass ) {
|
6319 |
+
triggers.forEach(
|
6320 |
+
trigger => {
|
6321 |
+
trigger.classList.remove( 'frm_active_action' );
|
6322 |
+
trigger.classList.add( 'frm_inactive_action' );
|
6323 |
+
if ( addAlreadyUsedClass ) {
|
6324 |
+
trigger.classList.add( 'frm_already_used' );
|
6325 |
+
}
|
6326 |
+
}
|
6327 |
+
);
|
6328 |
}
|
6329 |
|
6330 |
function isAtLimitForActionType( type ) {
|
6331 |
+
let atLimit = getNumberOfActionsForType( type ) >= getLimitForActionType( type );
|
6332 |
+
|
6333 |
+
const hookName = 'frm_action_at_limit';
|
6334 |
+
const hookArgs = { type };
|
6335 |
+
atLimit = wp.hooks.applyFilters( hookName, atLimit, hookArgs );
|
6336 |
+
|
6337 |
+
return atLimit;
|
6338 |
}
|
6339 |
|
6340 |
function getLimitForActionType( type ) {
|
7946 |
});
|
7947 |
}
|
7948 |
|
|
|
|
|
|
|
7949 |
function afterAddonInstall( response, button, message, el, saveAndReload ) {
|
7950 |
const addonStatuses = document.querySelectorAll( '.frm-addon-status' );
|
7951 |
addonStatuses.forEach(
|
9458 |
|
9459 |
initBulkOptionsOverlay();
|
9460 |
hideEmptyEle();
|
|
|
9461 |
maybeHideQuantityProductFieldOption();
|
9462 |
handleNameFieldOnFormBuilder();
|
9463 |
toggleSectionHolder();
|
9464 |
},
|
9465 |
|
9466 |
settingsInit: function() {
|
9467 |
+
const $formActions = jQuery( document.getElementById( 'frm_notification_settings' ) );
|
9468 |
+
|
9469 |
+
let formSettings, $loggedIn, $cookieExp, $editable;
|
9470 |
+
|
9471 |
+
// BCC, CC, and Reply To button functionality
|
9472 |
$formActions.on( 'click', '.frm_email_buttons', showEmailRow );
|
9473 |
$formActions.on( 'click', '.frm_remove_field', hideEmailRow );
|
9474 |
$formActions.on( 'change', '.frm_to_row, .frm_from_row', showEmailWarning );
|
9491 |
checkActiveAction( jQuery( this ).children( 'a' ).data( 'actiontype' ) );
|
9492 |
|
9493 |
// If the icon is a background image, don't add BG color.
|
9494 |
+
const icon = jQuery( this ).find( 'i' );
|
9495 |
if ( icon.css( 'background-image' ) !== 'none' ) {
|
9496 |
icon.addClass( 'frm-inverse' );
|
9497 |
}
|
9508 |
formSettings.on( 'click', '.frm_add_submit_logic', addSubmitLogic );
|
9509 |
formSettings.on( 'change', '.frm_submit_logic_field_opts', addSubmitLogicOpts );
|
9510 |
|
9511 |
+
document.addEventListener(
|
9512 |
+
'click',
|
9513 |
+
function handleImageUploadClickEvents( event ) {
|
9514 |
+
const { target } = event;
|
9515 |
+
|
9516 |
+
if ( ! target.closest( '.frm_image_preview_wrapper' ) ) {
|
9517 |
+
return;
|
9518 |
+
}
|
9519 |
+
|
9520 |
+
if ( target.closest( '.frm_choose_image_box' ) ) {
|
9521 |
+
addImageToOption.bind( target )( event );
|
9522 |
+
return;
|
9523 |
+
}
|
9524 |
+
|
9525 |
+
if ( target.closest( '.frm_remove_image_option' ) ) {
|
9526 |
+
removeImageFromOption.bind( target )( event );
|
9527 |
+
}
|
9528 |
+
}
|
9529 |
+
);
|
9530 |
|
9531 |
// Close shortcode modal on click.
|
9532 |
formSettings.on( 'mouseup', '*:not(.frm-show-box)', function( e ) {
|
9533 |
e.stopPropagation();
|
9534 |
+
|
9535 |
if ( e.target.classList.contains( 'frm-show-box' ) ) {
|
9536 |
return;
|
9537 |
}
|
9538 |
+
|
9539 |
+
const sidebar = document.getElementById( 'frm_adv_info' );
|
9540 |
+
if ( ! sidebar ) {
|
9541 |
+
return;
|
9542 |
+
}
|
9543 |
|
9544 |
if ( sidebar.getAttribute( 'data-fills' ) === e.target.id && typeof e.target.id !== 'undefined' ) {
|
9545 |
return;
|
9546 |
}
|
9547 |
|
9548 |
+
const isChild = jQuery( e.target ).closest( '#frm_adv_info' ).length > 0;
|
9549 |
+
if ( ! isChild && sidebar.display !== 'none' ) {
|
9550 |
hideShortcodes( sidebar );
|
9551 |
}
|
9552 |
});
|
languages/formidable.pot
CHANGED
@@ -1,15 +1,15 @@
|
|
1 |
-
# Copyright (C) 2022 Strategy11
|
2 |
# This file is distributed under the same license as the Formidable Forms plugin.
|
3 |
msgid ""
|
4 |
msgstr ""
|
5 |
-
"Project-Id-Version: Formidable Forms 5.4.
|
6 |
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/formidable\n"
|
7 |
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
8 |
"Language-Team: LANGUAGE <LL@li.org>\n"
|
9 |
"MIME-Version: 1.0\n"
|
10 |
"Content-Type: text/plain; charset=UTF-8\n"
|
11 |
"Content-Transfer-Encoding: 8bit\n"
|
12 |
-
"POT-Creation-Date: 2022-08-
|
13 |
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
14 |
"X-Generator: WP-CLI 2.6.0\n"
|
15 |
"X-Domain: formidable\n"
|
@@ -128,7 +128,7 @@ msgid "Quickly and easily create drag-and-drop forms"
|
|
128 |
msgstr ""
|
129 |
|
130 |
#. Author of the plugin
|
131 |
-
msgid "Strategy11"
|
132 |
msgstr ""
|
133 |
|
134 |
#: classes/controllers/FrmAddonsController.php:21
|
@@ -884,9 +884,9 @@ msgid "Activate WP Mail SMTP"
|
|
884 |
msgstr ""
|
885 |
|
886 |
#: classes/controllers/FrmSMTPController.php:322
|
887 |
-
#: classes/models/FrmPluginSearch.php:
|
888 |
#: classes/views/addons/settings.php:31
|
889 |
-
#: js/formidable_admin.js:
|
890 |
msgid "Activate"
|
891 |
msgstr ""
|
892 |
|
@@ -1234,7 +1234,7 @@ msgstr ""
|
|
1234 |
#: classes/views/frm-forms/new-form-overlay.php:132
|
1235 |
#: classes/views/shared/admin-header.php:56
|
1236 |
#: classes/views/shared/confirm-overlay.php:19
|
1237 |
-
#: js/formidable_admin.js:
|
1238 |
msgid "Cancel"
|
1239 |
msgstr ""
|
1240 |
|
@@ -1261,7 +1261,7 @@ msgstr ""
|
|
1261 |
|
1262 |
#: classes/helpers/FrmAppHelper.php:2822
|
1263 |
#: classes/helpers/FrmListHelper.php:412
|
1264 |
-
#: js/formidable_admin.js:
|
1265 |
msgid "Heads up"
|
1266 |
msgstr ""
|
1267 |
|
@@ -1401,257 +1401,361 @@ msgstr ""
|
|
1401 |
msgid "You are using an outdated browser that is not compatible with Formidable Forms. Please update to a more current browser (we recommend Chrome)."
|
1402 |
msgstr ""
|
1403 |
|
1404 |
-
#: classes/helpers/FrmAppHelper.php:
|
1405 |
msgid "English"
|
1406 |
msgstr ""
|
1407 |
|
1408 |
-
#: classes/helpers/FrmAppHelper.php:
|
1409 |
msgid "Afrikaans"
|
1410 |
msgstr ""
|
1411 |
|
1412 |
-
#: classes/helpers/FrmAppHelper.php:
|
1413 |
msgid "Albanian"
|
1414 |
msgstr ""
|
1415 |
|
1416 |
-
#: classes/helpers/FrmAppHelper.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1417 |
msgid "Arabic"
|
1418 |
msgstr ""
|
1419 |
|
1420 |
-
#: classes/helpers/FrmAppHelper.php:
|
1421 |
msgid "Armenian"
|
1422 |
msgstr ""
|
1423 |
|
1424 |
-
#: classes/helpers/FrmAppHelper.php:
|
1425 |
msgid "Azerbaijani"
|
1426 |
msgstr ""
|
1427 |
|
1428 |
-
#: classes/helpers/FrmAppHelper.php:
|
1429 |
msgid "Basque"
|
1430 |
msgstr ""
|
1431 |
|
1432 |
-
#: classes/helpers/FrmAppHelper.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1433 |
msgid "Bosnian"
|
1434 |
msgstr ""
|
1435 |
|
1436 |
-
#: classes/helpers/FrmAppHelper.php:
|
1437 |
msgid "Bulgarian"
|
1438 |
msgstr ""
|
1439 |
|
1440 |
-
#: classes/helpers/FrmAppHelper.php:
|
1441 |
msgid "Catalan"
|
1442 |
msgstr ""
|
1443 |
|
1444 |
-
#: classes/helpers/FrmAppHelper.php:
|
1445 |
msgid "Chinese Hong Kong"
|
1446 |
msgstr ""
|
1447 |
|
1448 |
-
#: classes/helpers/FrmAppHelper.php:
|
1449 |
msgid "Chinese Simplified"
|
1450 |
msgstr ""
|
1451 |
|
1452 |
-
#: classes/helpers/FrmAppHelper.php:
|
1453 |
msgid "Chinese Traditional"
|
1454 |
msgstr ""
|
1455 |
|
1456 |
-
#: classes/helpers/FrmAppHelper.php:
|
1457 |
msgid "Croatian"
|
1458 |
msgstr ""
|
1459 |
|
1460 |
-
#: classes/helpers/FrmAppHelper.php:
|
1461 |
msgid "Czech"
|
1462 |
msgstr ""
|
1463 |
|
1464 |
-
#: classes/helpers/FrmAppHelper.php:
|
1465 |
msgid "Danish"
|
1466 |
msgstr ""
|
1467 |
|
1468 |
-
#: classes/helpers/FrmAppHelper.php:
|
1469 |
msgid "Dutch"
|
1470 |
msgstr ""
|
1471 |
|
1472 |
-
#: classes/helpers/FrmAppHelper.php:
|
1473 |
msgid "English/UK"
|
1474 |
msgstr ""
|
1475 |
|
1476 |
-
#: classes/helpers/FrmAppHelper.php:
|
1477 |
msgid "Esperanto"
|
1478 |
msgstr ""
|
1479 |
|
1480 |
-
#: classes/helpers/FrmAppHelper.php:
|
1481 |
msgid "Estonian"
|
1482 |
msgstr ""
|
1483 |
|
1484 |
-
#: classes/helpers/FrmAppHelper.php:
|
1485 |
msgid "Faroese"
|
1486 |
msgstr ""
|
1487 |
|
1488 |
-
#: classes/helpers/FrmAppHelper.php:
|
1489 |
msgid "Farsi/Persian"
|
1490 |
msgstr ""
|
1491 |
|
1492 |
-
#: classes/helpers/FrmAppHelper.php:
|
1493 |
msgid "Filipino"
|
1494 |
msgstr ""
|
1495 |
|
1496 |
-
#: classes/helpers/FrmAppHelper.php:
|
1497 |
msgid "Finnish"
|
1498 |
msgstr ""
|
1499 |
|
1500 |
-
#: classes/helpers/FrmAppHelper.php:
|
1501 |
msgid "French"
|
1502 |
msgstr ""
|
1503 |
|
1504 |
-
#: classes/helpers/FrmAppHelper.php:
|
1505 |
msgid "French/Canadian"
|
1506 |
msgstr ""
|
1507 |
|
1508 |
-
#: classes/helpers/FrmAppHelper.php:
|
1509 |
msgid "French/Swiss"
|
1510 |
msgstr ""
|
1511 |
|
1512 |
-
#: classes/helpers/FrmAppHelper.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1513 |
msgid "German"
|
1514 |
msgstr ""
|
1515 |
|
1516 |
-
#: classes/helpers/FrmAppHelper.php:
|
1517 |
msgid "German/Austria"
|
1518 |
msgstr ""
|
1519 |
|
1520 |
-
#: classes/helpers/FrmAppHelper.php:
|
1521 |
msgid "German/Switzerland"
|
1522 |
msgstr ""
|
1523 |
|
1524 |
-
#: classes/helpers/FrmAppHelper.php:
|
1525 |
msgid "Greek"
|
1526 |
msgstr ""
|
1527 |
|
1528 |
-
#: classes/helpers/FrmAppHelper.php:
|
1529 |
-
|
|
|
|
|
|
|
|
|
1530 |
msgid "Hebrew"
|
1531 |
msgstr ""
|
1532 |
|
1533 |
-
#: classes/helpers/FrmAppHelper.php:
|
1534 |
msgid "Hindi"
|
1535 |
msgstr ""
|
1536 |
|
1537 |
-
#: classes/helpers/FrmAppHelper.php:
|
1538 |
msgid "Hungarian"
|
1539 |
msgstr ""
|
1540 |
|
1541 |
-
#: classes/helpers/FrmAppHelper.php:
|
1542 |
msgid "Icelandic"
|
1543 |
msgstr ""
|
1544 |
|
1545 |
-
#: classes/helpers/FrmAppHelper.php:
|
1546 |
msgid "Indonesian"
|
1547 |
msgstr ""
|
1548 |
|
1549 |
-
#: classes/helpers/FrmAppHelper.php:
|
1550 |
msgid "Italian"
|
1551 |
msgstr ""
|
1552 |
|
1553 |
-
#: classes/helpers/FrmAppHelper.php:
|
1554 |
msgid "Japanese"
|
1555 |
msgstr ""
|
1556 |
|
1557 |
-
#: classes/helpers/FrmAppHelper.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1558 |
msgid "Korean"
|
1559 |
msgstr ""
|
1560 |
|
1561 |
-
#: classes/helpers/FrmAppHelper.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1562 |
msgid "Latvian"
|
1563 |
msgstr ""
|
1564 |
|
1565 |
-
#: classes/helpers/FrmAppHelper.php:
|
1566 |
msgid "Lithuanian"
|
1567 |
msgstr ""
|
1568 |
|
1569 |
-
#: classes/helpers/FrmAppHelper.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1570 |
msgid "Malaysian"
|
1571 |
msgstr ""
|
1572 |
|
1573 |
-
#: classes/helpers/FrmAppHelper.php:
|
|
|
|
|
|
|
|
|
1574 |
msgid "Norwegian"
|
1575 |
msgstr ""
|
1576 |
|
1577 |
-
#: classes/helpers/FrmAppHelper.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1578 |
msgid "Polish"
|
1579 |
msgstr ""
|
1580 |
|
1581 |
-
#: classes/helpers/FrmAppHelper.php:
|
1582 |
msgid "Portuguese"
|
1583 |
msgstr ""
|
1584 |
|
1585 |
-
#: classes/helpers/FrmAppHelper.php:
|
1586 |
msgid "Portuguese/Brazilian"
|
1587 |
msgstr ""
|
1588 |
|
1589 |
-
#: classes/helpers/FrmAppHelper.php:
|
1590 |
msgid "Portuguese/Portugal"
|
1591 |
msgstr ""
|
1592 |
|
1593 |
-
#: classes/helpers/FrmAppHelper.php:
|
|
|
|
|
|
|
|
|
1594 |
msgid "Romanian"
|
1595 |
msgstr ""
|
1596 |
|
1597 |
-
#: classes/helpers/FrmAppHelper.php:
|
1598 |
msgid "Russian"
|
1599 |
msgstr ""
|
1600 |
|
1601 |
-
#: classes/helpers/FrmAppHelper.php:
|
1602 |
-
#: classes/helpers/FrmAppHelper.php:
|
1603 |
msgid "Serbian"
|
1604 |
msgstr ""
|
1605 |
|
1606 |
-
#: classes/helpers/FrmAppHelper.php:
|
|
|
|
|
|
|
|
|
1607 |
msgid "Slovak"
|
1608 |
msgstr ""
|
1609 |
|
1610 |
-
#: classes/helpers/FrmAppHelper.php:
|
1611 |
msgid "Slovenian"
|
1612 |
msgstr ""
|
1613 |
|
1614 |
-
#: classes/helpers/FrmAppHelper.php:
|
1615 |
msgid "Spanish"
|
1616 |
msgstr ""
|
1617 |
|
1618 |
-
#: classes/helpers/FrmAppHelper.php:
|
1619 |
msgid "Spanish/Latin America"
|
1620 |
msgstr ""
|
1621 |
|
1622 |
-
#: classes/helpers/FrmAppHelper.php:
|
|
|
|
|
|
|
|
|
1623 |
msgid "Swedish"
|
1624 |
msgstr ""
|
1625 |
|
1626 |
-
#: classes/helpers/FrmAppHelper.php:
|
1627 |
msgid "Tamil"
|
1628 |
msgstr ""
|
1629 |
|
1630 |
-
#: classes/helpers/FrmAppHelper.php:
|
|
|
|
|
|
|
|
|
1631 |
msgid "Thai"
|
1632 |
msgstr ""
|
1633 |
|
1634 |
-
#: classes/helpers/FrmAppHelper.php:
|
|
|
|
|
|
|
|
|
1635 |
msgid "Turkish"
|
1636 |
msgstr ""
|
1637 |
|
1638 |
-
#: classes/helpers/FrmAppHelper.php:
|
1639 |
msgid "Ukrainian"
|
1640 |
msgstr ""
|
1641 |
|
1642 |
-
#: classes/helpers/FrmAppHelper.php:
|
|
|
|
|
|
|
|
|
1643 |
msgid "Vietnamese"
|
1644 |
msgstr ""
|
1645 |
|
1646 |
-
#: classes/helpers/FrmAppHelper.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1647 |
msgid "Form Landing Pages"
|
1648 |
msgstr ""
|
1649 |
|
1650 |
-
#: classes/helpers/FrmAppHelper.php:
|
1651 |
msgid "Easily manage a landing page for your form. Upgrade to get form landing pages."
|
1652 |
msgstr ""
|
1653 |
|
1654 |
-
#: classes/helpers/FrmAppHelper.php:
|
1655 |
msgid "NEW"
|
1656 |
msgstr ""
|
1657 |
|
@@ -1778,7 +1882,7 @@ msgstr ""
|
|
1778 |
#: classes/helpers/FrmFormsHelper.php:1188
|
1779 |
#: classes/helpers/FrmFormsListHelper.php:133
|
1780 |
#: classes/views/frm-form-actions/form_action.php:25
|
1781 |
-
#: js/formidable_admin.js:
|
1782 |
msgid "Delete"
|
1783 |
msgstr ""
|
1784 |
|
@@ -1790,7 +1894,7 @@ msgstr ""
|
|
1790 |
#. translators: %s: The field name.
|
1791 |
#: classes/helpers/FrmFieldsHelper.php:167
|
1792 |
#: classes/helpers/FrmFieldsHelper.php:294
|
1793 |
-
#: classes/helpers/FrmXMLHelper.php:
|
1794 |
#: classes/models/fields/FrmFieldType.php:583
|
1795 |
msgid "%s is invalid"
|
1796 |
msgstr ""
|
@@ -3657,21 +3761,21 @@ msgstr ""
|
|
3657 |
msgid "Your server is missing the simplexml_import_dom function"
|
3658 |
msgstr ""
|
3659 |
|
3660 |
-
#: classes/helpers/FrmXMLHelper.php:
|
3661 |
#: classes/views/solutions/_import.php:51
|
3662 |
msgid "Imported"
|
3663 |
msgstr ""
|
3664 |
|
3665 |
-
#: classes/helpers/FrmXMLHelper.php:
|
3666 |
msgid "Updated"
|
3667 |
msgstr ""
|
3668 |
|
3669 |
-
#: classes/helpers/FrmXMLHelper.php:
|
3670 |
msgid "Nothing was imported or updated"
|
3671 |
msgstr ""
|
3672 |
|
3673 |
#. translators: %1$s: Number of items
|
3674 |
-
#: classes/helpers/FrmXMLHelper.php:
|
3675 |
msgid "%1$s Form"
|
3676 |
msgid_plural "%1$s Forms"
|
3677 |
msgstr[0] ""
|
@@ -3679,7 +3783,7 @@ msgstr[1] ""
|
|
3679 |
|
3680 |
#. translators: %1$s: Number of items
|
3681 |
#. translators: %1$s - field type
|
3682 |
-
#: classes/helpers/FrmXMLHelper.php:
|
3683 |
#: classes/models/FrmFormMigrator.php:584
|
3684 |
msgid "%1$s Field"
|
3685 |
msgid_plural "%1$s Fields"
|
@@ -3687,56 +3791,56 @@ msgstr[0] ""
|
|
3687 |
msgstr[1] ""
|
3688 |
|
3689 |
#. translators: %1$s: Number of items
|
3690 |
-
#: classes/helpers/FrmXMLHelper.php:
|
3691 |
msgid "%1$s Entry"
|
3692 |
msgid_plural "%1$s Entries"
|
3693 |
msgstr[0] ""
|
3694 |
msgstr[1] ""
|
3695 |
|
3696 |
#. translators: %1$s: Number of items
|
3697 |
-
#: classes/helpers/FrmXMLHelper.php:
|
3698 |
msgid "%1$s View"
|
3699 |
msgid_plural "%1$s Views"
|
3700 |
msgstr[0] ""
|
3701 |
msgstr[1] ""
|
3702 |
|
3703 |
#. translators: %1$s: Number of items
|
3704 |
-
#: classes/helpers/FrmXMLHelper.php:
|
3705 |
msgid "%1$s Page/Post"
|
3706 |
msgid_plural "%1$s Pages/Posts"
|
3707 |
msgstr[0] ""
|
3708 |
msgstr[1] ""
|
3709 |
|
3710 |
#. translators: %1$s: Number of items
|
3711 |
-
#: classes/helpers/FrmXMLHelper.php:
|
3712 |
msgid "%1$s Style"
|
3713 |
msgid_plural "%1$s Styles"
|
3714 |
msgstr[0] ""
|
3715 |
msgstr[1] ""
|
3716 |
|
3717 |
#. translators: %1$s: Number of items
|
3718 |
-
#: classes/helpers/FrmXMLHelper.php:
|
3719 |
msgid "%1$s Term"
|
3720 |
msgid_plural "%1$s Terms"
|
3721 |
msgstr[0] ""
|
3722 |
msgstr[1] ""
|
3723 |
|
3724 |
#. translators: %1$s: Number of items
|
3725 |
-
#: classes/helpers/FrmXMLHelper.php:
|
3726 |
msgid "%1$s Form Action"
|
3727 |
msgid_plural "%1$s Form Actions"
|
3728 |
msgstr[0] ""
|
3729 |
msgstr[1] ""
|
3730 |
|
3731 |
-
#: classes/helpers/FrmXMLHelper.php:
|
3732 |
msgid "Go to imported form"
|
3733 |
msgstr ""
|
3734 |
|
3735 |
-
#: classes/helpers/FrmXMLHelper.php:
|
3736 |
msgid "Create Posts"
|
3737 |
msgstr ""
|
3738 |
|
3739 |
-
#: classes/helpers/FrmXMLHelper.php:
|
3740 |
msgid "Email Notification"
|
3741 |
msgstr ""
|
3742 |
|
@@ -4171,19 +4275,19 @@ msgctxt "Formidable Addon Name"
|
|
4171 |
msgid "Formidable %s"
|
4172 |
msgstr ""
|
4173 |
|
4174 |
-
#: classes/models/FrmPluginSearch.php:
|
4175 |
msgid "Install Now"
|
4176 |
msgstr ""
|
4177 |
|
4178 |
-
#: classes/models/FrmPluginSearch.php:
|
4179 |
msgid "Learn more"
|
4180 |
msgstr ""
|
4181 |
|
4182 |
-
#: classes/models/FrmPluginSearch.php:
|
4183 |
msgid "Hide this suggestion"
|
4184 |
msgstr ""
|
4185 |
|
4186 |
-
#: classes/models/FrmPluginSearch.php:
|
4187 |
msgid "This suggestion was made by Formidable Forms, the form builder and application plugin already installed on your site."
|
4188 |
msgstr ""
|
4189 |
|
@@ -4519,7 +4623,7 @@ msgstr ""
|
|
4519 |
#: classes/views/frm-fields/back-end/inline-modal.php:7
|
4520 |
#: classes/views/frm-fields/back-end/inline-modal.php:8
|
4521 |
#: classes/views/shared/admin-header.php:11
|
4522 |
-
#: js/formidable_admin.js:
|
4523 |
msgid "Close"
|
4524 |
msgstr ""
|
4525 |
|
@@ -4812,7 +4916,7 @@ msgstr ""
|
|
4812 |
|
4813 |
#: classes/views/frm-form-actions/form_action.php:21
|
4814 |
#: classes/views/styles/_upsell-multiple-styles.php:15
|
4815 |
-
#: js/formidable_admin.js:
|
4816 |
msgid "Duplicate"
|
4817 |
msgstr ""
|
4818 |
|
@@ -4941,9 +5045,9 @@ msgid "Move Field"
|
|
4941 |
msgstr ""
|
4942 |
|
4943 |
#: classes/views/frm-forms/add_field.php:29
|
4944 |
-
#: js/formidable_admin.js:
|
4945 |
-
#: js/formidable_admin.js:
|
4946 |
-
#: js/formidable_admin.js:
|
4947 |
msgid "More Options"
|
4948 |
msgstr ""
|
4949 |
|
@@ -6480,71 +6584,71 @@ msgstr ""
|
|
6480 |
msgid "Successfully copied embed example"
|
6481 |
msgstr ""
|
6482 |
|
6483 |
-
#: js/formidable_admin.js:
|
6484 |
msgid "Set Row Layout"
|
6485 |
msgstr ""
|
6486 |
|
6487 |
-
#: js/formidable_admin.js:
|
6488 |
msgid "Move Field Group"
|
6489 |
msgstr ""
|
6490 |
|
6491 |
-
#: js/formidable_admin.js:
|
6492 |
msgid "Field settings"
|
6493 |
msgstr ""
|
6494 |
|
6495 |
-
#: js/formidable_admin.js:
|
6496 |
msgid "Delete Group"
|
6497 |
msgstr ""
|
6498 |
|
6499 |
-
#: js/formidable_admin.js:
|
6500 |
msgid "Duplicate Group"
|
6501 |
msgstr ""
|
6502 |
|
6503 |
-
#: js/formidable_admin.js:
|
6504 |
msgid "Custom layout"
|
6505 |
msgstr ""
|
6506 |
|
6507 |
-
#: js/formidable_admin.js:
|
6508 |
msgid "Break into rows"
|
6509 |
msgstr ""
|
6510 |
|
6511 |
-
#: js/formidable_admin.js:
|
6512 |
msgid "Row Layout"
|
6513 |
msgstr ""
|
6514 |
|
6515 |
-
#: js/formidable_admin.js:
|
6516 |
msgid "Enter number of columns for each field"
|
6517 |
msgstr ""
|
6518 |
|
6519 |
-
#: js/formidable_admin.js:
|
6520 |
msgid "Layouts are based on a 12-column grid system"
|
6521 |
msgstr ""
|
6522 |
|
6523 |
-
#: js/formidable_admin.js:
|
6524 |
msgid "Save"
|
6525 |
msgstr ""
|
6526 |
|
6527 |
-
#: js/formidable_admin.js:
|
6528 |
msgid "Merge into row"
|
6529 |
msgstr ""
|
6530 |
|
6531 |
#. translators: %1$s: Number of fields that are selected to be deleted.
|
6532 |
-
#: js/formidable_admin.js:
|
6533 |
msgid "Are you sure you want to delete these %1$s selected fields?"
|
6534 |
msgstr ""
|
6535 |
|
6536 |
-
#: js/formidable_admin.js:
|
6537 |
msgid "Duplicate option value \"%s\" detected"
|
6538 |
msgstr ""
|
6539 |
|
6540 |
-
#: js/formidable_admin.js:
|
6541 |
msgid "Ready Made Solution"
|
6542 |
msgstr ""
|
6543 |
|
6544 |
-
#: js/formidable_admin.js:
|
6545 |
msgid "Check all applications"
|
6546 |
msgstr ""
|
6547 |
|
6548 |
-
#: js/formidable_admin.js:
|
6549 |
msgid "Save and Reload"
|
6550 |
msgstr ""
|
1 |
+
# Copyright (C) 2022 Strategy11 Form Builder Team
|
2 |
# This file is distributed under the same license as the Formidable Forms plugin.
|
3 |
msgid ""
|
4 |
msgstr ""
|
5 |
+
"Project-Id-Version: Formidable Forms 5.4.5\n"
|
6 |
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/formidable\n"
|
7 |
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
8 |
"Language-Team: LANGUAGE <LL@li.org>\n"
|
9 |
"MIME-Version: 1.0\n"
|
10 |
"Content-Type: text/plain; charset=UTF-8\n"
|
11 |
"Content-Transfer-Encoding: 8bit\n"
|
12 |
+
"POT-Creation-Date: 2022-08-31T14:03:22+00:00\n"
|
13 |
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
14 |
"X-Generator: WP-CLI 2.6.0\n"
|
15 |
"X-Domain: formidable\n"
|
128 |
msgstr ""
|
129 |
|
130 |
#. Author of the plugin
|
131 |
+
msgid "Strategy11 Form Builder Team"
|
132 |
msgstr ""
|
133 |
|
134 |
#: classes/controllers/FrmAddonsController.php:21
|
884 |
msgstr ""
|
885 |
|
886 |
#: classes/controllers/FrmSMTPController.php:322
|
887 |
+
#: classes/models/FrmPluginSearch.php:306
|
888 |
#: classes/views/addons/settings.php:31
|
889 |
+
#: js/formidable_admin.js:5901
|
890 |
msgid "Activate"
|
891 |
msgstr ""
|
892 |
|
1234 |
#: classes/views/frm-forms/new-form-overlay.php:132
|
1235 |
#: classes/views/shared/admin-header.php:56
|
1236 |
#: classes/views/shared/confirm-overlay.php:19
|
1237 |
+
#: js/formidable_admin.js:3668
|
1238 |
msgid "Cancel"
|
1239 |
msgstr ""
|
1240 |
|
1261 |
|
1262 |
#: classes/helpers/FrmAppHelper.php:2822
|
1263 |
#: classes/helpers/FrmListHelper.php:412
|
1264 |
+
#: js/formidable_admin.js:4060
|
1265 |
msgid "Heads up"
|
1266 |
msgstr ""
|
1267 |
|
1401 |
msgid "You are using an outdated browser that is not compatible with Formidable Forms. Please update to a more current browser (we recommend Chrome)."
|
1402 |
msgstr ""
|
1403 |
|
1404 |
+
#: classes/helpers/FrmAppHelper.php:2989
|
1405 |
msgid "English"
|
1406 |
msgstr ""
|
1407 |
|
1408 |
+
#: classes/helpers/FrmAppHelper.php:2990
|
1409 |
msgid "Afrikaans"
|
1410 |
msgstr ""
|
1411 |
|
1412 |
+
#: classes/helpers/FrmAppHelper.php:2991
|
1413 |
msgid "Albanian"
|
1414 |
msgstr ""
|
1415 |
|
1416 |
+
#: classes/helpers/FrmAppHelper.php:2992
|
1417 |
+
msgid "Algerian Arabic"
|
1418 |
+
msgstr ""
|
1419 |
+
|
1420 |
+
#: classes/helpers/FrmAppHelper.php:2993
|
1421 |
+
msgid "Amharic"
|
1422 |
+
msgstr ""
|
1423 |
+
|
1424 |
+
#: classes/helpers/FrmAppHelper.php:2994
|
1425 |
msgid "Arabic"
|
1426 |
msgstr ""
|
1427 |
|
1428 |
+
#: classes/helpers/FrmAppHelper.php:2995
|
1429 |
msgid "Armenian"
|
1430 |
msgstr ""
|
1431 |
|
1432 |
+
#: classes/helpers/FrmAppHelper.php:2996
|
1433 |
msgid "Azerbaijani"
|
1434 |
msgstr ""
|
1435 |
|
1436 |
+
#: classes/helpers/FrmAppHelper.php:2997
|
1437 |
msgid "Basque"
|
1438 |
msgstr ""
|
1439 |
|
1440 |
+
#: classes/helpers/FrmAppHelper.php:2998
|
1441 |
+
msgid "Belarusian"
|
1442 |
+
msgstr ""
|
1443 |
+
|
1444 |
+
#: classes/helpers/FrmAppHelper.php:2999
|
1445 |
+
msgid "Bengali"
|
1446 |
+
msgstr ""
|
1447 |
+
|
1448 |
+
#: classes/helpers/FrmAppHelper.php:3000
|
1449 |
msgid "Bosnian"
|
1450 |
msgstr ""
|
1451 |
|
1452 |
+
#: classes/helpers/FrmAppHelper.php:3001
|
1453 |
msgid "Bulgarian"
|
1454 |
msgstr ""
|
1455 |
|
1456 |
+
#: classes/helpers/FrmAppHelper.php:3002
|
1457 |
msgid "Catalan"
|
1458 |
msgstr ""
|
1459 |
|
1460 |
+
#: classes/helpers/FrmAppHelper.php:3003
|
1461 |
msgid "Chinese Hong Kong"
|
1462 |
msgstr ""
|
1463 |
|
1464 |
+
#: classes/helpers/FrmAppHelper.php:3004
|
1465 |
msgid "Chinese Simplified"
|
1466 |
msgstr ""
|
1467 |
|
1468 |
+
#: classes/helpers/FrmAppHelper.php:3005
|
1469 |
msgid "Chinese Traditional"
|
1470 |
msgstr ""
|
1471 |
|
1472 |
+
#: classes/helpers/FrmAppHelper.php:3006
|
1473 |
msgid "Croatian"
|
1474 |
msgstr ""
|
1475 |
|
1476 |
+
#: classes/helpers/FrmAppHelper.php:3007
|
1477 |
msgid "Czech"
|
1478 |
msgstr ""
|
1479 |
|
1480 |
+
#: classes/helpers/FrmAppHelper.php:3008
|
1481 |
msgid "Danish"
|
1482 |
msgstr ""
|
1483 |
|
1484 |
+
#: classes/helpers/FrmAppHelper.php:3009
|
1485 |
msgid "Dutch"
|
1486 |
msgstr ""
|
1487 |
|
1488 |
+
#: classes/helpers/FrmAppHelper.php:3010
|
1489 |
msgid "English/UK"
|
1490 |
msgstr ""
|
1491 |
|
1492 |
+
#: classes/helpers/FrmAppHelper.php:3011
|
1493 |
msgid "Esperanto"
|
1494 |
msgstr ""
|
1495 |
|
1496 |
+
#: classes/helpers/FrmAppHelper.php:3012
|
1497 |
msgid "Estonian"
|
1498 |
msgstr ""
|
1499 |
|
1500 |
+
#: classes/helpers/FrmAppHelper.php:3013
|
1501 |
msgid "Faroese"
|
1502 |
msgstr ""
|
1503 |
|
1504 |
+
#: classes/helpers/FrmAppHelper.php:3014
|
1505 |
msgid "Farsi/Persian"
|
1506 |
msgstr ""
|
1507 |
|
1508 |
+
#: classes/helpers/FrmAppHelper.php:3015
|
1509 |
msgid "Filipino"
|
1510 |
msgstr ""
|
1511 |
|
1512 |
+
#: classes/helpers/FrmAppHelper.php:3016
|
1513 |
msgid "Finnish"
|
1514 |
msgstr ""
|
1515 |
|
1516 |
+
#: classes/helpers/FrmAppHelper.php:3017
|
1517 |
msgid "French"
|
1518 |
msgstr ""
|
1519 |
|
1520 |
+
#: classes/helpers/FrmAppHelper.php:3018
|
1521 |
msgid "French/Canadian"
|
1522 |
msgstr ""
|
1523 |
|
1524 |
+
#: classes/helpers/FrmAppHelper.php:3019
|
1525 |
msgid "French/Swiss"
|
1526 |
msgstr ""
|
1527 |
|
1528 |
+
#: classes/helpers/FrmAppHelper.php:3020
|
1529 |
+
msgid "Galician"
|
1530 |
+
msgstr ""
|
1531 |
+
|
1532 |
+
#: classes/helpers/FrmAppHelper.php:3021
|
1533 |
+
msgid "Georgian"
|
1534 |
+
msgstr ""
|
1535 |
+
|
1536 |
+
#: classes/helpers/FrmAppHelper.php:3022
|
1537 |
msgid "German"
|
1538 |
msgstr ""
|
1539 |
|
1540 |
+
#: classes/helpers/FrmAppHelper.php:3023
|
1541 |
msgid "German/Austria"
|
1542 |
msgstr ""
|
1543 |
|
1544 |
+
#: classes/helpers/FrmAppHelper.php:3024
|
1545 |
msgid "German/Switzerland"
|
1546 |
msgstr ""
|
1547 |
|
1548 |
+
#: classes/helpers/FrmAppHelper.php:3025
|
1549 |
msgid "Greek"
|
1550 |
msgstr ""
|
1551 |
|
1552 |
+
#: classes/helpers/FrmAppHelper.php:3026
|
1553 |
+
msgid "Gujarati"
|
1554 |
+
msgstr ""
|
1555 |
+
|
1556 |
+
#: classes/helpers/FrmAppHelper.php:3027
|
1557 |
+
#: classes/helpers/FrmAppHelper.php:3028
|
1558 |
msgid "Hebrew"
|
1559 |
msgstr ""
|
1560 |
|
1561 |
+
#: classes/helpers/FrmAppHelper.php:3029
|
1562 |
msgid "Hindi"
|
1563 |
msgstr ""
|
1564 |
|
1565 |
+
#: classes/helpers/FrmAppHelper.php:3030
|
1566 |
msgid "Hungarian"
|
1567 |
msgstr ""
|
1568 |
|
1569 |
+
#: classes/helpers/FrmAppHelper.php:3031
|
1570 |
msgid "Icelandic"
|
1571 |
msgstr ""
|
1572 |
|
1573 |
+
#: classes/helpers/FrmAppHelper.php:3032
|
1574 |
msgid "Indonesian"
|
1575 |
msgstr ""
|
1576 |
|
1577 |
+
#: classes/helpers/FrmAppHelper.php:3033
|
1578 |
msgid "Italian"
|
1579 |
msgstr ""
|
1580 |
|
1581 |
+
#: classes/helpers/FrmAppHelper.php:3034
|
1582 |
msgid "Japanese"
|
1583 |
msgstr ""
|
1584 |
|
1585 |
+
#: classes/helpers/FrmAppHelper.php:3035
|
1586 |
+
msgid "Kannada"
|
1587 |
+
msgstr ""
|
1588 |
+
|
1589 |
+
#: classes/helpers/FrmAppHelper.php:3036
|
1590 |
+
msgid "Kazakh"
|
1591 |
+
msgstr ""
|
1592 |
+
|
1593 |
+
#: classes/helpers/FrmAppHelper.php:3037
|
1594 |
+
msgid "Khmer"
|
1595 |
+
msgstr ""
|
1596 |
+
|
1597 |
+
#: classes/helpers/FrmAppHelper.php:3038
|
1598 |
msgid "Korean"
|
1599 |
msgstr ""
|
1600 |
|
1601 |
+
#: classes/helpers/FrmAppHelper.php:3039
|
1602 |
+
msgid "Kyrgyz"
|
1603 |
+
msgstr ""
|
1604 |
+
|
1605 |
+
#: classes/helpers/FrmAppHelper.php:3040
|
1606 |
+
msgid "Laothian"
|
1607 |
+
msgstr ""
|
1608 |
+
|
1609 |
+
#: classes/helpers/FrmAppHelper.php:3041
|
1610 |
msgid "Latvian"
|
1611 |
msgstr ""
|
1612 |
|
1613 |
+
#: classes/helpers/FrmAppHelper.php:3042
|
1614 |
msgid "Lithuanian"
|
1615 |
msgstr ""
|
1616 |
|
1617 |
+
#: classes/helpers/FrmAppHelper.php:3043
|
1618 |
+
msgid "Luxembourgish"
|
1619 |
+
msgstr ""
|
1620 |
+
|
1621 |
+
#: classes/helpers/FrmAppHelper.php:3044
|
1622 |
+
msgid "Macedonian"
|
1623 |
+
msgstr ""
|
1624 |
+
|
1625 |
+
#: classes/helpers/FrmAppHelper.php:3045
|
1626 |
+
msgid "Malayalam"
|
1627 |
+
msgstr ""
|
1628 |
+
|
1629 |
+
#: classes/helpers/FrmAppHelper.php:3046
|
1630 |
msgid "Malaysian"
|
1631 |
msgstr ""
|
1632 |
|
1633 |
+
#: classes/helpers/FrmAppHelper.php:3047
|
1634 |
+
msgid "Marathi"
|
1635 |
+
msgstr ""
|
1636 |
+
|
1637 |
+
#: classes/helpers/FrmAppHelper.php:3048
|
1638 |
msgid "Norwegian"
|
1639 |
msgstr ""
|
1640 |
|
1641 |
+
#: classes/helpers/FrmAppHelper.php:3049
|
1642 |
+
msgid "Norwegian Bokmål"
|
1643 |
+
msgstr ""
|
1644 |
+
|
1645 |
+
#: classes/helpers/FrmAppHelper.php:3050
|
1646 |
+
msgid "Norwegian Nynorsk"
|
1647 |
+
msgstr ""
|
1648 |
+
|
1649 |
+
#: classes/helpers/FrmAppHelper.php:3051
|
1650 |
msgid "Polish"
|
1651 |
msgstr ""
|
1652 |
|
1653 |
+
#: classes/helpers/FrmAppHelper.php:3052
|
1654 |
msgid "Portuguese"
|
1655 |
msgstr ""
|
1656 |
|
1657 |
+
#: classes/helpers/FrmAppHelper.php:3053
|
1658 |
msgid "Portuguese/Brazilian"
|
1659 |
msgstr ""
|
1660 |
|
1661 |
+
#: classes/helpers/FrmAppHelper.php:3054
|
1662 |
msgid "Portuguese/Portugal"
|
1663 |
msgstr ""
|
1664 |
|
1665 |
+
#: classes/helpers/FrmAppHelper.php:3055
|
1666 |
+
msgid "Romansh"
|
1667 |
+
msgstr ""
|
1668 |
+
|
1669 |
+
#: classes/helpers/FrmAppHelper.php:3056
|
1670 |
msgid "Romanian"
|
1671 |
msgstr ""
|
1672 |
|
1673 |
+
#: classes/helpers/FrmAppHelper.php:3057
|
1674 |
msgid "Russian"
|
1675 |
msgstr ""
|
1676 |
|
1677 |
+
#: classes/helpers/FrmAppHelper.php:3058
|
1678 |
+
#: classes/helpers/FrmAppHelper.php:3059
|
1679 |
msgid "Serbian"
|
1680 |
msgstr ""
|
1681 |
|
1682 |
+
#: classes/helpers/FrmAppHelper.php:3060
|
1683 |
+
msgid "Sinhalese"
|
1684 |
+
msgstr ""
|
1685 |
+
|
1686 |
+
#: classes/helpers/FrmAppHelper.php:3061
|
1687 |
msgid "Slovak"
|
1688 |
msgstr ""
|
1689 |
|
1690 |
+
#: classes/helpers/FrmAppHelper.php:3062
|
1691 |
msgid "Slovenian"
|
1692 |
msgstr ""
|
1693 |
|
1694 |
+
#: classes/helpers/FrmAppHelper.php:3063
|
1695 |
msgid "Spanish"
|
1696 |
msgstr ""
|
1697 |
|
1698 |
+
#: classes/helpers/FrmAppHelper.php:3064
|
1699 |
msgid "Spanish/Latin America"
|
1700 |
msgstr ""
|
1701 |
|
1702 |
+
#: classes/helpers/FrmAppHelper.php:3065
|
1703 |
+
msgid "Swahili"
|
1704 |
+
msgstr ""
|
1705 |
+
|
1706 |
+
#: classes/helpers/FrmAppHelper.php:3066
|
1707 |
msgid "Swedish"
|
1708 |
msgstr ""
|
1709 |
|
1710 |
+
#: classes/helpers/FrmAppHelper.php:3067
|
1711 |
msgid "Tamil"
|
1712 |
msgstr ""
|
1713 |
|
1714 |
+
#: classes/helpers/FrmAppHelper.php:3068
|
1715 |
+
msgid "Telugu"
|
1716 |
+
msgstr ""
|
1717 |
+
|
1718 |
+
#: classes/helpers/FrmAppHelper.php:3069
|
1719 |
msgid "Thai"
|
1720 |
msgstr ""
|
1721 |
|
1722 |
+
#: classes/helpers/FrmAppHelper.php:3070
|
1723 |
+
msgid "Tajiki"
|
1724 |
+
msgstr ""
|
1725 |
+
|
1726 |
+
#: classes/helpers/FrmAppHelper.php:3071
|
1727 |
msgid "Turkish"
|
1728 |
msgstr ""
|
1729 |
|
1730 |
+
#: classes/helpers/FrmAppHelper.php:3072
|
1731 |
msgid "Ukrainian"
|
1732 |
msgstr ""
|
1733 |
|
1734 |
+
#: classes/helpers/FrmAppHelper.php:3073
|
1735 |
+
msgid "Urdu"
|
1736 |
+
msgstr ""
|
1737 |
+
|
1738 |
+
#: classes/helpers/FrmAppHelper.php:3074
|
1739 |
msgid "Vietnamese"
|
1740 |
msgstr ""
|
1741 |
|
1742 |
+
#: classes/helpers/FrmAppHelper.php:3075
|
1743 |
+
msgid "Welsh"
|
1744 |
+
msgstr ""
|
1745 |
+
|
1746 |
+
#: classes/helpers/FrmAppHelper.php:3076
|
1747 |
+
msgid "Zulu"
|
1748 |
+
msgstr ""
|
1749 |
+
|
1750 |
+
#: classes/helpers/FrmAppHelper.php:3409
|
1751 |
msgid "Form Landing Pages"
|
1752 |
msgstr ""
|
1753 |
|
1754 |
+
#: classes/helpers/FrmAppHelper.php:3410
|
1755 |
msgid "Easily manage a landing page for your form. Upgrade to get form landing pages."
|
1756 |
msgstr ""
|
1757 |
|
1758 |
+
#: classes/helpers/FrmAppHelper.php:3503
|
1759 |
msgid "NEW"
|
1760 |
msgstr ""
|
1761 |
|
1882 |
#: classes/helpers/FrmFormsHelper.php:1188
|
1883 |
#: classes/helpers/FrmFormsListHelper.php:133
|
1884 |
#: classes/views/frm-form-actions/form_action.php:25
|
1885 |
+
#: js/formidable_admin.js:2033
|
1886 |
msgid "Delete"
|
1887 |
msgstr ""
|
1888 |
|
1894 |
#. translators: %s: The field name.
|
1895 |
#: classes/helpers/FrmFieldsHelper.php:167
|
1896 |
#: classes/helpers/FrmFieldsHelper.php:294
|
1897 |
+
#: classes/helpers/FrmXMLHelper.php:1396
|
1898 |
#: classes/models/fields/FrmFieldType.php:583
|
1899 |
msgid "%s is invalid"
|
1900 |
msgstr ""
|
3761 |
msgid "Your server is missing the simplexml_import_dom function"
|
3762 |
msgstr ""
|
3763 |
|
3764 |
+
#: classes/helpers/FrmXMLHelper.php:1209
|
3765 |
#: classes/views/solutions/_import.php:51
|
3766 |
msgid "Imported"
|
3767 |
msgstr ""
|
3768 |
|
3769 |
+
#: classes/helpers/FrmXMLHelper.php:1210
|
3770 |
msgid "Updated"
|
3771 |
msgstr ""
|
3772 |
|
3773 |
+
#: classes/helpers/FrmXMLHelper.php:1235
|
3774 |
msgid "Nothing was imported or updated"
|
3775 |
msgstr ""
|
3776 |
|
3777 |
#. translators: %1$s: Number of items
|
3778 |
+
#: classes/helpers/FrmXMLHelper.php:1262
|
3779 |
msgid "%1$s Form"
|
3780 |
msgid_plural "%1$s Forms"
|
3781 |
msgstr[0] ""
|
3783 |
|
3784 |
#. translators: %1$s: Number of items
|
3785 |
#. translators: %1$s - field type
|
3786 |
+
#: classes/helpers/FrmXMLHelper.php:1264
|
3787 |
#: classes/models/FrmFormMigrator.php:584
|
3788 |
msgid "%1$s Field"
|
3789 |
msgid_plural "%1$s Fields"
|
3791 |
msgstr[1] ""
|
3792 |
|
3793 |
#. translators: %1$s: Number of items
|
3794 |
+
#: classes/helpers/FrmXMLHelper.php:1266
|
3795 |
msgid "%1$s Entry"
|
3796 |
msgid_plural "%1$s Entries"
|
3797 |
msgstr[0] ""
|
3798 |
msgstr[1] ""
|
3799 |
|
3800 |
#. translators: %1$s: Number of items
|
3801 |
+
#: classes/helpers/FrmXMLHelper.php:1268
|
3802 |
msgid "%1$s View"
|
3803 |
msgid_plural "%1$s Views"
|
3804 |
msgstr[0] ""
|
3805 |
msgstr[1] ""
|
3806 |
|
3807 |
#. translators: %1$s: Number of items
|
3808 |
+
#: classes/helpers/FrmXMLHelper.php:1270
|
3809 |
msgid "%1$s Page/Post"
|
3810 |
msgid_plural "%1$s Pages/Posts"
|
3811 |
msgstr[0] ""
|
3812 |
msgstr[1] ""
|
3813 |
|
3814 |
#. translators: %1$s: Number of items
|
3815 |
+
#: classes/helpers/FrmXMLHelper.php:1272
|
3816 |
msgid "%1$s Style"
|
3817 |
msgid_plural "%1$s Styles"
|
3818 |
msgstr[0] ""
|
3819 |
msgstr[1] ""
|
3820 |
|
3821 |
#. translators: %1$s: Number of items
|
3822 |
+
#: classes/helpers/FrmXMLHelper.php:1274
|
3823 |
msgid "%1$s Term"
|
3824 |
msgid_plural "%1$s Terms"
|
3825 |
msgstr[0] ""
|
3826 |
msgstr[1] ""
|
3827 |
|
3828 |
#. translators: %1$s: Number of items
|
3829 |
+
#: classes/helpers/FrmXMLHelper.php:1276
|
3830 |
msgid "%1$s Form Action"
|
3831 |
msgid_plural "%1$s Form Actions"
|
3832 |
msgstr[0] ""
|
3833 |
msgstr[1] ""
|
3834 |
|
3835 |
+
#: classes/helpers/FrmXMLHelper.php:1314
|
3836 |
msgid "Go to imported form"
|
3837 |
msgstr ""
|
3838 |
|
3839 |
+
#: classes/helpers/FrmXMLHelper.php:1515
|
3840 |
msgid "Create Posts"
|
3841 |
msgstr ""
|
3842 |
|
3843 |
+
#: classes/helpers/FrmXMLHelper.php:1644
|
3844 |
msgid "Email Notification"
|
3845 |
msgstr ""
|
3846 |
|
4275 |
msgid "Formidable %s"
|
4276 |
msgstr ""
|
4277 |
|
4278 |
+
#: classes/models/FrmPluginSearch.php:313
|
4279 |
msgid "Install Now"
|
4280 |
msgstr ""
|
4281 |
|
4282 |
+
#: classes/models/FrmPluginSearch.php:322
|
4283 |
msgid "Learn more"
|
4284 |
msgstr ""
|
4285 |
|
4286 |
+
#: classes/models/FrmPluginSearch.php:331
|
4287 |
msgid "Hide this suggestion"
|
4288 |
msgstr ""
|
4289 |
|
4290 |
+
#: classes/models/FrmPluginSearch.php:355
|
4291 |
msgid "This suggestion was made by Formidable Forms, the form builder and application plugin already installed on your site."
|
4292 |
msgstr ""
|
4293 |
|
4623 |
#: classes/views/frm-fields/back-end/inline-modal.php:7
|
4624 |
#: classes/views/frm-fields/back-end/inline-modal.php:8
|
4625 |
#: classes/views/shared/admin-header.php:11
|
4626 |
+
#: js/formidable_admin.js:8020
|
4627 |
msgid "Close"
|
4628 |
msgstr ""
|
4629 |
|
4916 |
|
4917 |
#: classes/views/frm-form-actions/form_action.php:21
|
4918 |
#: classes/views/styles/_upsell-multiple-styles.php:15
|
4919 |
+
#: js/formidable_admin.js:2039
|
4920 |
msgid "Duplicate"
|
4921 |
msgstr ""
|
4922 |
|
5045 |
msgstr ""
|
5046 |
|
5047 |
#: classes/views/frm-forms/add_field.php:29
|
5048 |
+
#: js/formidable_admin.js:1250
|
5049 |
+
#: js/formidable_admin.js:1253
|
5050 |
+
#: js/formidable_admin.js:1977
|
5051 |
msgid "More Options"
|
5052 |
msgstr ""
|
5053 |
|
6584 |
msgid "Successfully copied embed example"
|
6585 |
msgstr ""
|
6586 |
|
6587 |
+
#: js/formidable_admin.js:1211
|
6588 |
msgid "Set Row Layout"
|
6589 |
msgstr ""
|
6590 |
|
6591 |
+
#: js/formidable_admin.js:1218
|
6592 |
msgid "Move Field Group"
|
6593 |
msgstr ""
|
6594 |
|
6595 |
+
#: js/formidable_admin.js:2005
|
6596 |
msgid "Field settings"
|
6597 |
msgstr ""
|
6598 |
|
6599 |
+
#: js/formidable_admin.js:2033
|
6600 |
msgid "Delete Group"
|
6601 |
msgstr ""
|
6602 |
|
6603 |
+
#: js/formidable_admin.js:2039
|
6604 |
msgid "Duplicate Group"
|
6605 |
msgstr ""
|
6606 |
|
6607 |
+
#: js/formidable_admin.js:3375
|
6608 |
msgid "Custom layout"
|
6609 |
msgstr ""
|
6610 |
|
6611 |
+
#: js/formidable_admin.js:3398
|
6612 |
msgid "Break into rows"
|
6613 |
msgstr ""
|
6614 |
|
6615 |
+
#: js/formidable_admin.js:3408
|
6616 |
msgid "Row Layout"
|
6617 |
msgstr ""
|
6618 |
|
6619 |
+
#: js/formidable_admin.js:3653
|
6620 |
msgid "Enter number of columns for each field"
|
6621 |
msgstr ""
|
6622 |
|
6623 |
+
#: js/formidable_admin.js:3657
|
6624 |
msgid "Layouts are based on a 12-column grid system"
|
6625 |
msgstr ""
|
6626 |
|
6627 |
+
#: js/formidable_admin.js:3673
|
6628 |
msgid "Save"
|
6629 |
msgstr ""
|
6630 |
|
6631 |
+
#: js/formidable_admin.js:3974
|
6632 |
msgid "Merge into row"
|
6633 |
msgstr ""
|
6634 |
|
6635 |
#. translators: %1$s: Number of fields that are selected to be deleted.
|
6636 |
+
#: js/formidable_admin.js:4062
|
6637 |
msgid "Are you sure you want to delete these %1$s selected fields?"
|
6638 |
msgstr ""
|
6639 |
|
6640 |
+
#: js/formidable_admin.js:5186
|
6641 |
msgid "Duplicate option value \"%s\" detected"
|
6642 |
msgstr ""
|
6643 |
|
6644 |
+
#: js/formidable_admin.js:7287
|
6645 |
msgid "Ready Made Solution"
|
6646 |
msgstr ""
|
6647 |
|
6648 |
+
#: js/formidable_admin.js:7290
|
6649 |
msgid "Check all applications"
|
6650 |
msgstr ""
|
6651 |
|
6652 |
+
#: js/formidable_admin.js:8005
|
6653 |
msgid "Save and Reload"
|
6654 |
msgstr ""
|
readme.txt
CHANGED
@@ -1,31 +1,33 @@
|
|
1 |
=== Formidable Forms - Contact Form, Survey, Quiz, Calculator & Custom Form Builder ===
|
2 |
Plugin Name: Formidable Forms - Contact Form, Survey & Quiz Form Builder for WordPress
|
3 |
Contributors: formidableforms, sswells, srwells
|
4 |
-
Tags: forms,
|
5 |
Requires at least: 5.2
|
6 |
-
Tested up to: 6.0.
|
7 |
Requires PHP: 5.6
|
8 |
-
Stable tag: 5.4.
|
9 |
|
10 |
-
The most advanced WordPress forms plugin. Go beyond contact forms with our drag
|
11 |
|
12 |
== Description ==
|
13 |
|
14 |
== The Most Powerful WordPress form builder plugin on the market ==
|
15 |
-
We built <a href="https://formidableforms.com/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion">Formidable Forms</a> to offer the "first-ever" solutions-focused WordPress form plugin
|
16 |
|
17 |
-
At Formidable, creating the most extendable online forms is our #1 priority. Unlike other
|
18 |
|
19 |
-
Before we explore the
|
20 |
|
21 |
Speaking of quick, we’ve optimized for speed and maximum server performance. We can confidently say that this is one of the FASTEST WordPress form builders on the market.
|
22 |
|
23 |
> <strong>Formidable Pro</strong><br />
|
24 |
-
> This form builder plugin is the free version of Formidable that comes with all the features you will ever need. Build an advanced email subscription form, multi-page form, file upload form, quiz, or a smart form with conditional logic. Stack on repeater fields, payment integrations, form templates, relationships, cascading dropdown fields. Don't forget the calculated fields, front-end form editing, and powerful
|
25 |
-
>
|
26 |
-
> <a href="https://formidableforms.com/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion" rel="friend">Click here to purchase the most advanced premium WordPress forms plugin now!</a>
|
|
|
|
|
27 |
|
28 |
-
You can start with our pre-built templates or create totally custom forms from scratch. All with an easy-to-use drag
|
29 |
|
30 |
https://youtu.be/7X2BqhRsXcg
|
31 |
|
@@ -41,19 +43,19 @@ Check out some of our main features below:
|
|
41 |
|
42 |
== Drag & Drop Form Maker ==
|
43 |
|
44 |
-
Formidable drag & drop forms allow you to quickly build unlimited surveys, quizzes, price calculators, and whatever else you need.
|
45 |
-
|
46 |
Our form maker comes with all the powerful fields that you need to create a solution-focused form, fast!
|
47 |
|
|
|
|
|
48 |
== Complete Entry Management for Web Forms and Surveys ==
|
49 |
|
50 |
-
|
51 |
|
52 |
-
|
53 |
|
54 |
Need to import your leads to an external service like MailChimp? No problem. **Export leads to a CSV**, open it in Excel, or import it anywhere.
|
55 |
|
56 |
-
You can also configure unlimited email notifications and autoresponders triggered by submissions.
|
57 |
|
58 |
On top of that, you can easily customize the success message after a form is submitted, or redirect visitors to another page.
|
59 |
|
@@ -65,9 +67,9 @@ By default, a single styling template is created. If you want a custom form styl
|
|
65 |
|
66 |
== Build Smart Surveys with Beautiful Reports ==
|
67 |
|
68 |
-
Formidable
|
69 |
|
70 |
-
|
71 |
|
72 |
You can even showcase data on the front-end of your website. Just embed graphs in your WordPress posts or pages.
|
73 |
|
@@ -83,7 +85,7 @@ Then, our marketing integrations and APIs can send the data anywhere you want.
|
|
83 |
|
84 |
By now, you probably already realize the theme that Formidable is more than just a WordPress contact form plugin. You can use it to create a payment form and accept credit card payments right from your website.
|
85 |
|
86 |
-
We offer seamless integration with PayPal, Stripe, and Authorize.net, so you can create an order form, donation or purchase form.
|
87 |
|
88 |
You can even create a WooCommerce form with custom fields.
|
89 |
|
@@ -182,14 +184,14 @@ Since Formidable is not your average form plugin, this feature list is going to
|
|
182 |
* Permissions. Lock visibility and access based on user role.
|
183 |
* Entry limits. Limit surveys, registration forms, bookings, quizzes, or directory submissions to only allow one entry per user, IP, or cookie.
|
184 |
* Form scheduling. Open and close event registration and signup forms on a specific date. Or close forms when the seat limit has been reached.
|
185 |
-
* Conditionally redirect after a custom search form, feedback form, support ticket form, quiz, or intake form is submitted. Help clients find the answers they need and show a tailored result based on their selections or calculated fields.
|
186 |
-
* We give you access to <a href="https://formidableforms.com/features/customize-form-html-wordpress/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion">customize the HTML</a> (like Contact Form 7). But you keep the ease and speed of drag
|
187 |
* <a href="https://formidableforms.com/features/importing-exporting-wordpress-forms/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion">Import and export submissions, styles, and views</a>. Quickly move your work and entries to another site. Need to export leads to another service? Done.
|
188 |
* Form templates for instant form building. Get started quickly with the most advanced form creator that includes form templates and style templates. Our WordPress form generator makes it FAST to build job application forms and other types of online forms.
|
189 |
* Import our <a href="https://formidableforms.com/form-templates/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion">pre-built form templates</a> as a shortcut to a final product. Our growing form template library includes payment forms (for Stripe and PayPal forms), a WooCommerce product creator, and more.
|
190 |
* <a href="https://formidableforms.com/conversational-forms/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion">Conversational forms</a>. Show one question at a time, and automatically advance when questions are answered.
|
191 |
* <a href="https://formidableforms.com/landing-page-forms/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion">Landing pages</a>. Get rid of all the distractions and show visitors only what they need.
|
192 |
-
* WCAG accessible forms with A11Y and ADA compliance. Ensure your survey, lead capture form, consent form, and quizzes are compliant and available to everyone. Allow those using screenreaders to successfully use your WordPress site.
|
193 |
* <a href="https://formidableforms.com/features/invisible-spam-protection/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion">Invisible SPAM protection</a>. Don't waste time sorting through SPAM. Get instant and powerful anti-spam features from honeypot, invisible Google reCAPTCHA, Akismet, and the WordPress comment blacklist.
|
194 |
* <a href="https://formidableforms.com/features/fill-out-forms-automatically/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion">Fill fields automatically</a> with values from the user profile or posts (i.e. custom fields). When a user is logged in, fill known values like name and email address.
|
195 |
* <a href="https://formidableforms.com/features/white-label-form-builder-wordpress/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion">White label</a>. Replace our branding with your own in the admin area. Plus, we never show "powered by" links in your free online form.
|
@@ -438,6 +440,14 @@ Using our Zapier integration, you can easily connect your website with over 1000
|
|
438 |
See all <a href="https://zapier.com/apps/formidable/integrations">Formidable Zapier Integrations</a>.
|
439 |
|
440 |
== Changelog ==
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
441 |
= 5.4.4 =
|
442 |
* New: Option icons are now be added dynamically when a field is selected to reduce the HTML required on load. This significantly improves performance for fields with many options.
|
443 |
* New: Added a new frm_before_duplicate_entry_values filter for customizing the data of a duplicated entry before it is saved.
|
@@ -501,7 +511,7 @@ See all <a href="https://zapier.com/apps/formidable/integrations">Formidable Zap
|
|
501 |
= 5.2.06 =
|
502 |
* New: The step value for number fields is now validated server side on submission.
|
503 |
|
504 |
-
= 5.2.05 =
|
505 |
* New: Added a new frm_focus_first_error filter to toggle of the behavior of the auto-focus that gets triggered on the first field with an error.
|
506 |
* New: Added a new frm_include_alert_role_on_field_errors filter to toggle the alert role that gets added to field errors.
|
507 |
|
1 |
=== Formidable Forms - Contact Form, Survey, Quiz, Calculator & Custom Form Builder ===
|
2 |
Plugin Name: Formidable Forms - Contact Form, Survey & Quiz Form Builder for WordPress
|
3 |
Contributors: formidableforms, sswells, srwells
|
4 |
+
Tags: forms, form builder, survey, free, custom form, contact form, form maker, form creator, paypal form, paypal, stripe, stripe form, aweber, aweber form, getresponse, calculator, quote form, contact button, form manager, Akismet, payment form, survey form, donation form, email subscription, user registration form, wordpress registration, wordpress login form, constant contact, mailpoet, active campaign, salesforce, hubspot, campaign monitor, quiz builder, quiz, feedback form, drag and drop, mailchimp form
|
5 |
Requires at least: 5.2
|
6 |
+
Tested up to: 6.0.2
|
7 |
Requires PHP: 5.6
|
8 |
+
Stable tag: 5.4.5
|
9 |
|
10 |
+
The most advanced WordPress forms plugin. Go beyond contact forms with our drag and drop form builder for surveys, quizzes, and more.
|
11 |
|
12 |
== Description ==
|
13 |
|
14 |
== The Most Powerful WordPress form builder plugin on the market ==
|
15 |
+
We built <a href="https://formidableforms.com/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion">Formidable Forms</a> to offer the "first-ever" solutions-focused WordPress form plugin. You can use our drag and drop WordPress forms plugin to create a contact form, survey, quiz, registration form, payment form, lead form, or calculator form. Build just about anything you can imagine.
|
16 |
|
17 |
+
At Formidable, creating the most extendable online forms is our #1 priority. Unlike other WP form maker plugins, we believe in pushing the limits. We want to give you the tools to save time and create complex custom forms quickly!
|
18 |
|
19 |
+
Before we explore the powerful features, you should know that Formidable is 100% mobile responsive. Your WordPress forms will always look great on all devices (desktop, laptop, tablets, and smartphones).
|
20 |
|
21 |
Speaking of quick, we’ve optimized for speed and maximum server performance. We can confidently say that this is one of the FASTEST WordPress form builders on the market.
|
22 |
|
23 |
> <strong>Formidable Pro</strong><br />
|
24 |
+
> This form builder plugin is the free version of Formidable Pro that comes with all the features you will ever need. Build an advanced email subscription form, multi-page form, file upload form, quiz, or a smart form with conditional logic. Stack on repeater fields, payment integrations, form templates, relationships, and cascading dropdown fields. Don't forget the calculated fields, front-end form editing, and powerful web application builder.
|
25 |
+
>
|
26 |
+
> With Formidable Pro, you get far more than just a contact form plugin. <a href="https://formidableforms.com/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion" rel="friend">Click here to purchase the most advanced premium WordPress forms plugin now!</a>
|
27 |
+
>
|
28 |
+
> Or start by checking out the <a href="https://formidableforms.com/knowledgebase/what-is-the-difference-between-the-lite-free-and-pro-version/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion">full feature comparison</a> for Lite vs Pro.
|
29 |
|
30 |
+
You can start with our pre-built templates or create totally custom forms from scratch. All with an easy-to-use drag and drop form maker interface.
|
31 |
|
32 |
https://youtu.be/7X2BqhRsXcg
|
33 |
|
43 |
|
44 |
== Drag & Drop Form Maker ==
|
45 |
|
|
|
|
|
46 |
Our form maker comes with all the powerful fields that you need to create a solution-focused form, fast!
|
47 |
|
48 |
+
Formidable drag and drop forms allow you to quickly build unlimited surveys, quizzes, price calculators, and whatever else you need.
|
49 |
+
|
50 |
== Complete Entry Management for Web Forms and Surveys ==
|
51 |
|
52 |
+
When a user submits a web form, it's stored in your WordPress database so you won’t lose any leads. Formidable allows you to view all your quiz and survey entries right from your WordPress dashboard (even in the free version!).
|
53 |
|
54 |
+
Even though the entries are saved, it's still a **GDPR-friendly** form generator. You can turn off IP tracking or stop saving submissions entirely. Or add a GDPR checkbox field to your lead forms and payment forms to collect consent.
|
55 |
|
56 |
Need to import your leads to an external service like MailChimp? No problem. **Export leads to a CSV**, open it in Excel, or import it anywhere.
|
57 |
|
58 |
+
You can also configure unlimited email notifications and autoresponders triggered by submissions.
|
59 |
|
60 |
On top of that, you can easily customize the success message after a form is submitted, or redirect visitors to another page.
|
61 |
|
67 |
|
68 |
== Build Smart Surveys with Beautiful Reports ==
|
69 |
|
70 |
+
Formidable Pro includes an intuitive survey feature (like Survey Monkey, but without the high costs), so you can quickly create powerful surveys with Net Promoter Scores (NPS), Likert fields, star ratings, image radio buttons, and more.
|
71 |
|
72 |
+
We believe that data alone does no good if you can't analyze it. That’s why we make it easy to analyze data from a survey, quiz, or calculator. Beautiful reports will be waiting for you, or create your own customized graphs. Our graphs and reports will help you analyze and showcase data.
|
73 |
|
74 |
You can even showcase data on the front-end of your website. Just embed graphs in your WordPress posts or pages.
|
75 |
|
85 |
|
86 |
By now, you probably already realize the theme that Formidable is more than just a WordPress contact form plugin. You can use it to create a payment form and accept credit card payments right from your website.
|
87 |
|
88 |
+
We offer seamless integration with PayPal, Stripe, and Authorize.net, so you can create an order form, donation form, or purchase form.
|
89 |
|
90 |
You can even create a WooCommerce form with custom fields.
|
91 |
|
184 |
* Permissions. Lock visibility and access based on user role.
|
185 |
* Entry limits. Limit surveys, registration forms, bookings, quizzes, or directory submissions to only allow one entry per user, IP, or cookie.
|
186 |
* Form scheduling. Open and close event registration and signup forms on a specific date. Or close forms when the seat limit has been reached.
|
187 |
+
* Conditionally redirect after a custom search form, feedback form, support ticket form, registration form, quiz, or intake form is submitted. Help clients find the answers they need and show a tailored result based on their selections or calculated fields.
|
188 |
+
* We give you access to <a href="https://formidableforms.com/features/customize-form-html-wordpress/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion">customize the HTML</a> (like Contact Form 7). But you keep the ease and speed of drag and drop forms. Our team labors for simplicity without sacrificing flexibility.
|
189 |
* <a href="https://formidableforms.com/features/importing-exporting-wordpress-forms/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion">Import and export submissions, styles, and views</a>. Quickly move your work and entries to another site. Need to export leads to another service? Done.
|
190 |
* Form templates for instant form building. Get started quickly with the most advanced form creator that includes form templates and style templates. Our WordPress form generator makes it FAST to build job application forms and other types of online forms.
|
191 |
* Import our <a href="https://formidableforms.com/form-templates/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion">pre-built form templates</a> as a shortcut to a final product. Our growing form template library includes payment forms (for Stripe and PayPal forms), a WooCommerce product creator, and more.
|
192 |
* <a href="https://formidableforms.com/conversational-forms/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion">Conversational forms</a>. Show one question at a time, and automatically advance when questions are answered.
|
193 |
* <a href="https://formidableforms.com/landing-page-forms/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion">Landing pages</a>. Get rid of all the distractions and show visitors only what they need.
|
194 |
+
* WCAG accessible forms with A11Y and ADA compliance. Ensure your survey, lead capture form, consent form, donation form, and quizzes are compliant and available to everyone. Allow those using screenreaders to successfully use your WordPress site.
|
195 |
* <a href="https://formidableforms.com/features/invisible-spam-protection/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion">Invisible SPAM protection</a>. Don't waste time sorting through SPAM. Get instant and powerful anti-spam features from honeypot, invisible Google reCAPTCHA, Akismet, and the WordPress comment blacklist.
|
196 |
* <a href="https://formidableforms.com/features/fill-out-forms-automatically/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion">Fill fields automatically</a> with values from the user profile or posts (i.e. custom fields). When a user is logged in, fill known values like name and email address.
|
197 |
* <a href="https://formidableforms.com/features/white-label-form-builder-wordpress/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion">White label</a>. Replace our branding with your own in the admin area. Plus, we never show "powered by" links in your free online form.
|
440 |
See all <a href="https://zapier.com/apps/formidable/integrations">Formidable Zapier Integrations</a>.
|
441 |
|
442 |
== Changelog ==
|
443 |
+
= 5.4.5 =
|
444 |
+
* New: Added support for several new language options for datepicker localization and for reCAPTCHA.
|
445 |
+
* New: Updated deprecated code in Elementor widget for better compatibility with new versions of Elementor.
|
446 |
+
* Fix: Actions that trigger when an entry is deleted were not properly working when conditional logic would check item meta values.
|
447 |
+
* Fix: An imported application page's parent page ID was not updating to match the new imported parent page ID.
|
448 |
+
* Fix: Clicking save while a field was still being inserted would cause an error pop up to appear with a missing message.
|
449 |
+
* Removed a restriction that was preventing a second summary field from being added after adding the first.
|
450 |
+
|
451 |
= 5.4.4 =
|
452 |
* New: Option icons are now be added dynamically when a field is selected to reduce the HTML required on load. This significantly improves performance for fields with many options.
|
453 |
* New: Added a new frm_before_duplicate_entry_values filter for customizing the data of a duplicated entry before it is saved.
|
511 |
= 5.2.06 =
|
512 |
* New: The step value for number fields is now validated server side on submission.
|
513 |
|
514 |
+
= 5.2.05 =
|
515 |
* New: Added a new frm_focus_first_error filter to toggle of the behavior of the auto-focus that gets triggered on the first field with an error.
|
516 |
* New: Added a new frm_include_alert_role_on_field_errors filter to toggle the alert role that gets added to field errors.
|
517 |
|