From 33dac6a917b4ce849d9cc2b514f20aa33442b769 Mon Sep 17 00:00:00 2001 From: liviu13 Date: Wed, 16 Jul 2025 15:17:19 +0300 Subject: [PATCH 1/9] add filter that will extended the form field container html attribues, add js filter that will get fired after a field is successfully added in the form build, export 2 js functions that are related to inserting a new field and deleting it from form builder in order to reuse these in other plugins, toggle a jQuery notice if jQuery is selected as library from general settings --- classes/controllers/FrmFieldsController.php | 29 +++++- classes/controllers/FrmStylesController.php | 3 +- classes/models/fields/FrmFieldType.php | 1 + .../views/frm-fields/back-end/settings.php | 3 +- classes/views/frm-forms/add_field.php | 2 +- css/admin/frm_admin_global.css | 4 + js/admin/settings.js | 22 +++++ js/admin/style.js | 5 + js/formidable_admin.js | 95 ++++++++++++++++++- 9 files changed, 154 insertions(+), 10 deletions(-) diff --git a/classes/controllers/FrmFieldsController.php b/classes/controllers/FrmFieldsController.php index 410cc1c8e6..99bf8484eb 100644 --- a/classes/controllers/FrmFieldsController.php +++ b/classes/controllers/FrmFieldsController.php @@ -64,12 +64,13 @@ public static function create() { FrmAppHelper::permission_check( 'frm_edit_forms' ); check_ajax_referer( 'frm_ajax', 'nonce' ); - $field_type = FrmAppHelper::get_post_param( 'field_type', '', 'sanitize_text_field' ); - $form_id = FrmAppHelper::get_post_param( 'form_id', 0, 'absint' ); + $field_type = FrmAppHelper::get_post_param( 'field_type', '', 'sanitize_text_field' ); + $form_id = FrmAppHelper::get_post_param( 'form_id', 0, 'absint' ); + $field_options = FrmAppHelper::get_post_param( 'field_options', array(), 'wp_kses_post' ); do_action( 'frm_before_create_field', $field_type, $form_id ); - $field = self::include_new_field( $field_type, $form_id ); + $field = self::include_new_field( $field_type, $form_id, $field_options ); // this hook will allow for multiple fields to be added at once do_action( 'frm_after_field_created', $field, $form_id ); @@ -82,12 +83,17 @@ public static function create() { * * @param string $field_type * @param int $form_id + * @param array $field_options * * @return array|false */ - public static function include_new_field( $field_type, $form_id ) { + public static function include_new_field( $field_type, $form_id, $field_options = array() ) { $field_values = FrmFieldsHelper::setup_new_vars( $field_type, $form_id ); + if ( ! empty( $field_options ) ) { + $field_values['field_options'] = array_merge( $field_values['field_options'], $field_options ); + } + // When a new field is added to the form, flag it as draft and hide it from the front-end. $field_values['field_options']['draft'] = 1; @@ -182,6 +188,17 @@ public static function load_single_field( $field_object, $values, $form_id = 0 ) $field = FrmFieldsHelper::setup_edit_vars( $field_object ); } + /** + * Filter for adding extra attributes to the field container. + * + * @since x.x + * + * @param array $extra_field_attributes + * @param array $field + * @param array $display + */ + $extra_field_attributes = apply_filters( 'frm_field_container_extra_attributes', '', $field, $display ); + $li_classes = self::get_classes_for_builder_field( $field, $display, $field_obj ); $li_classes .= ' ui-state-default widgets-holder-wrap'; @@ -315,6 +332,10 @@ public static function load_single_field_settings( $atts ) { $field['read_only'] = false; } + if ( ! isset( $field['range_field'] ) ) { + $field['range_field'] = false; + } + $field_selection_data = self::maybe_define_field_selection_data(); $all_field_types = $field_selection_data->all_field_types; $disabled_fields = $field_selection_data->disabled_fields; diff --git a/classes/controllers/FrmStylesController.php b/classes/controllers/FrmStylesController.php index 5d59564816..afc366e07e 100644 --- a/classes/controllers/FrmStylesController.php +++ b/classes/controllers/FrmStylesController.php @@ -124,7 +124,6 @@ public static function admin_init() { self::load_pro_hooks(); $version = FrmAppHelper::plugin_version(); - wp_enqueue_script( 'jquery-ui-datepicker' ); if ( FrmAppHelper::is_style_editor_page( 'edit' ) ) { wp_enqueue_style( 'wp-color-picker' ); @@ -541,7 +540,7 @@ private static function setup_styles_and_scripts_for_styler() { $version = FrmAppHelper::plugin_version(); $js_dependencies = array( 'wp-i18n', 'wp-hooks', 'formidable_dom' ); - if ( FrmAppHelper::pro_is_installed() ) { + if ( FrmAppHelper::pro_is_installed() && is_callable( 'FrmProAppHelper', 'use_jquery_datepicker' ) && FrmProAppHelper::use_jquery_datepicker() ) { $js_dependencies[] = 'jquery-ui-datepicker'; } diff --git a/classes/models/fields/FrmFieldType.php b/classes/models/fields/FrmFieldType.php index d778672471..591e23c879 100644 --- a/classes/models/fields/FrmFieldType.php +++ b/classes/models/fields/FrmFieldType.php @@ -367,6 +367,7 @@ protected function default_field_settings() { 'readonly_required' => false, 'unique' => false, 'read_only' => false, + 'range_field' => false, 'description' => true, 'options' => true, 'label_position' => true, diff --git a/classes/views/frm-fields/back-end/settings.php b/classes/views/frm-fields/back-end/settings.php index 8d3f3cbb0b..987880adec 100644 --- a/classes/views/frm-fields/back-end/settings.php +++ b/classes/views/frm-fields/back-end/settings.php @@ -112,7 +112,6 @@ @@ -426,7 +425,7 @@ if ( $display['unique'] ) { ?> -

+

diff --git a/classes/views/frm-forms/add_field.php b/classes/views/frm-forms/add_field.php index 98f5733b71..13d11b9115 100644 --- a/classes/views/frm-forms/add_field.php +++ b/classes/views/frm-forms/add_field.php @@ -3,7 +3,7 @@ die( 'You are not allowed to call this page directly.' ); } ?> -

  • +
  • > { + const formId = thisFormId; + let hasBreak = 0; + + if ( 'summary' === fieldType ) { + hasBreak = $newFields.children( 'li[data-type="break"]' ).length > 0 ? 1 : 0; + } + + jQuery.ajax({ + type: 'POST', + url: ajaxurl, + data: { + action: 'frm_insert_field', + form_id: formId, + field_type: fieldType, + field_options: fieldOptions, + section_id: 0, + nonce: frmGlobal.nonce, + has_break: hasBreak, + last_row_field_ids: getFieldIdsInSubmitRow() + }, + success: function( msg ) { + const fieldElement = jQuery( msg ); + fieldElement[0].style.display = 'none'; + resolve( fieldElement ); + setTimeout( () => { + updateFieldOrder(); + afterAddField( msg, true ); + syncLayoutClasses( jQuery( fieldElement.closest( 'ul' ).children()[0] ) ); + fieldElement[0].style.display = 'block'; + + /** + * Fires after a field is added. + * + * @since x.x + * + * @param {Object} fieldData The field data. + * @param {String} fieldData.field The field HTML. + * @param {String} fieldData.field_type The field type. + * @param {String} fieldData.form_id The form ID. + */ + wp.hooks.doAction( 'frmadmin.afterFieldAddedInFormBuilder', { + field: msg, + fieldId: msg.match( /data-fid="(\d+)"/ )[1], + fieldType: fieldType, + form_id: formId, + }); + }, 10 ); + }, + error: handleInsertFieldError + }); + } ); + } + function maybeHideQuantityProductFieldOption() { let hide = true, opts = document.querySelectorAll( '.frmjs_prod_field_opt_cont' ); @@ -10969,7 +11060,9 @@ function frmAdminBuildJS() { loadApiEmailForm, addMyEmailAddress, fillDropdownOpts, - showSaveAndReloadModal + showSaveAndReloadModal, + deleteField, + insertFormField }; } From 9cd05b0c34cfc4eea688dd997213fc07f6b66400 Mon Sep 17 00:00:00 2001 From: liviu13 Date: Wed, 16 Jul 2025 20:24:45 +0300 Subject: [PATCH 2/9] cleanup --- classes/controllers/FrmStylesController.php | 2 +- js/formidable_admin.js | 110 +++++++++++--------- 2 files changed, 61 insertions(+), 51 deletions(-) diff --git a/classes/controllers/FrmStylesController.php b/classes/controllers/FrmStylesController.php index afc366e07e..ca99ad416d 100644 --- a/classes/controllers/FrmStylesController.php +++ b/classes/controllers/FrmStylesController.php @@ -540,7 +540,7 @@ private static function setup_styles_and_scripts_for_styler() { $version = FrmAppHelper::plugin_version(); $js_dependencies = array( 'wp-i18n', 'wp-hooks', 'formidable_dom' ); - if ( FrmAppHelper::pro_is_installed() && is_callable( 'FrmProAppHelper', 'use_jquery_datepicker' ) && FrmProAppHelper::use_jquery_datepicker() ) { + if ( FrmAppHelper::pro_is_installed() && is_callable( 'FrmProAppHelper::use_jquery_datepicker' ) && FrmProAppHelper::use_jquery_datepicker() ) { $js_dependencies[] = 'jquery-ui-datepicker'; } diff --git a/js/formidable_admin.js b/js/formidable_admin.js index 0f0c22dea3..ebfc9d8cf1 100644 --- a/js/formidable_admin.js +++ b/js/formidable_admin.js @@ -1617,6 +1617,8 @@ function frmAdminBuildJS() { let replaceWith; document.getElementById( 'frm_form_editor_container' ).classList.add( 'frm-has-fields' ); const $siblings = $placeholder.siblings( 'li.form-field' ).not( '.edit_field_type_end_divider' ); + const fieldId = msg.match( /data-fid="(\d+)"/ )[1]; + if ( ! $siblings.length ) { // if dragging into a new row, we need to wrap the li first. replaceWith = wrapFieldLi( msg ); @@ -1642,22 +1644,24 @@ function frmAdminBuildJS() { makeDraggable( replaceWith.get( 0 ), '.frm-move' ); } - /** - * Fires after a field is added. - * - * @since x.x - * - * @param {Object} fieldData The field data. - * @param {String} fieldData.field The field HTML. - * @param {String} fieldData.field_type The field type. - * @param {String} fieldData.form_id The form ID. - */ - wp.hooks.doAction( 'frmadmin.afterFieldAddedInFormBuilder', { - field: msg, - fieldId: msg.match( /data-fid="(\d+)"/ )[1], - fieldType: fieldType, - form_id: formId, - }); + if ( fieldId ) { + /** + * Fires after a field is added. + * + * @since x.x + * + * @param {Object} fieldData The field data. + * @param {String} fieldData.field The field HTML. + * @param {String} fieldData.field_type The field type. + * @param {String} fieldData.form_id The form ID. + */ + wp.hooks.doAction( 'frmadmin.afterFieldAddedInFormBuilder', { + field: msg, + fieldId: fieldId, + fieldType: fieldType, + form_id: formId, + }); + } }, error: handleInsertFieldError @@ -2044,8 +2048,9 @@ function frmAdminBuildJS() { success: function( msg ) { document.getElementById( 'frm_form_editor_container' ).classList.add( 'frm-has-fields' ); const replaceWith = wrapFieldLi( msg ); - + const fieldId = msg.match( /data-fid="(\d+)"/ )[1]; const submitField = $newFields[0].querySelector( '.edit_field_type_submit' ); + if ( ! submitField ) { $newFields.append( replaceWith ); } else { @@ -2061,23 +2066,24 @@ function frmAdminBuildJS() { } ); - /** - * Fires after a field is added. - * - * @since x.x - * - * @param {Object} fieldData The field data. - * @param {String} fieldData.field The field HTML. - * @param {String} fieldData.field_type The field type. - * @param {String} fieldData.form_id The form ID. - */ - wp.hooks.doAction( 'frmadmin.afterFieldAddedInFormBuilder', { - field: msg, - fieldId: msg.match( /data-fid="(\d+)"/ )[1], - fieldType: fieldType, - form_id: formId, - }); - + if ( fieldId ) { + /** + * Fires after a field is added. + * + * @since x.x + * + * @param {Object} fieldData The field data. + * @param {String} fieldData.field The field HTML. + * @param {String} fieldData.field_type The field type. + * @param {String} fieldData.form_id The form ID. + */ + wp.hooks.doAction( 'frmadmin.afterFieldAddedInFormBuilder', { + field: msg, + fieldId: fieldId, + fieldType: fieldType, + form_id: formId, + }); + } }, error: handleInsertFieldError }); @@ -2109,6 +2115,8 @@ function frmAdminBuildJS() { }, success: function( msg ) { const fieldElement = jQuery( msg ); + const fieldId = msg.match( /data-fid="(\d+)"/ )[1]; + fieldElement[0].style.display = 'none'; resolve( fieldElement ); setTimeout( () => { @@ -2117,22 +2125,24 @@ function frmAdminBuildJS() { syncLayoutClasses( jQuery( fieldElement.closest( 'ul' ).children()[0] ) ); fieldElement[0].style.display = 'block'; - /** - * Fires after a field is added. - * - * @since x.x - * - * @param {Object} fieldData The field data. - * @param {String} fieldData.field The field HTML. - * @param {String} fieldData.field_type The field type. - * @param {String} fieldData.form_id The form ID. - */ - wp.hooks.doAction( 'frmadmin.afterFieldAddedInFormBuilder', { - field: msg, - fieldId: msg.match( /data-fid="(\d+)"/ )[1], - fieldType: fieldType, - form_id: formId, - }); + if ( fieldId ) { + /** + * Fires after a field is added. + * + * @since x.x + * + * @param {Object} fieldData The field data. + * @param {String} fieldData.field The field HTML. + * @param {String} fieldData.field_type The field type. + * @param {String} fieldData.form_id The form ID. + */ + wp.hooks.doAction( 'frmadmin.afterFieldAddedInFormBuilder', { + field: msg, + fieldId: fieldId, + fieldType: fieldType, + form_id: formId, + }); + } }, 10 ); }, error: handleInsertFieldError From 1e35a0bed69be01243e221bd1834a0703dcc1536 Mon Sep 17 00:00:00 2001 From: liviu13 Date: Tue, 5 Aug 2025 15:34:24 +0300 Subject: [PATCH 3/9] phpstan fix --- stubs.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/stubs.php b/stubs.php index 6df3403049..e0eb8ce05c 100644 --- a/stubs.php +++ b/stubs.php @@ -79,6 +79,8 @@ public static function plugin_url() { */ public static function get_updater() { } + public static function use_jquery_datepicker() { + } } class FrmProEntryMetaHelper { public static function get_post_or_meta_value( $entry, $field, $atts = array() ) { From 4cda92aab8b86d4719180c46627c1807899d1f66 Mon Sep 17 00:00:00 2001 From: liviu13 Date: Mon, 11 Aug 2025 12:27:12 +0300 Subject: [PATCH 4/9] revisions and fixes --- classes/controllers/FrmFieldsController.php | 8 ++------ classes/views/frm-fields/back-end/settings.php | 2 +- classes/views/frm-forms/add_field.php | 2 +- js/formidable_admin.js | 11 +---------- 4 files changed, 5 insertions(+), 18 deletions(-) diff --git a/classes/controllers/FrmFieldsController.php b/classes/controllers/FrmFieldsController.php index 99bf8484eb..53092b83f3 100644 --- a/classes/controllers/FrmFieldsController.php +++ b/classes/controllers/FrmFieldsController.php @@ -73,7 +73,7 @@ public static function create() { $field = self::include_new_field( $field_type, $form_id, $field_options ); // this hook will allow for multiple fields to be added at once - do_action( 'frm_after_field_created', $field, $form_id ); + do_action( 'frm_after_field_created', $field, $form_id, $field_options ); wp_die(); } @@ -197,7 +197,7 @@ public static function load_single_field( $field_object, $values, $form_id = 0 ) * @param array $field * @param array $display */ - $extra_field_attributes = apply_filters( 'frm_field_container_extra_attributes', '', $field, $display ); + $extra_field_attributes = apply_filters( 'frm_field_container_extra_attributes', array(), $field, $display ); $li_classes = self::get_classes_for_builder_field( $field, $display, $field_obj ); $li_classes .= ' ui-state-default widgets-holder-wrap'; @@ -332,10 +332,6 @@ public static function load_single_field_settings( $atts ) { $field['read_only'] = false; } - if ( ! isset( $field['range_field'] ) ) { - $field['range_field'] = false; - } - $field_selection_data = self::maybe_define_field_selection_data(); $all_field_types = $field_selection_data->all_field_types; $disabled_fields = $field_selection_data->disabled_fields; diff --git a/classes/views/frm-fields/back-end/settings.php b/classes/views/frm-fields/back-end/settings.php index ee5a61efce..4d7500f4b2 100644 --- a/classes/views/frm-fields/back-end/settings.php +++ b/classes/views/frm-fields/back-end/settings.php @@ -437,7 +437,7 @@ if ( $display['unique'] ) { ?> -

    +

    diff --git a/classes/views/frm-forms/add_field.php b/classes/views/frm-forms/add_field.php index 13d11b9115..016b05dc8d 100644 --- a/classes/views/frm-forms/add_field.php +++ b/classes/views/frm-forms/add_field.php @@ -3,7 +3,7 @@ die( 'You are not allowed to call this page directly.' ); } ?> -

  • > +
  • > Date: Mon, 11 Aug 2025 15:14:16 +0300 Subject: [PATCH 5/9] revert frm_after_field_created action change, add extra check on confirmMoldal on link href attribute search --- classes/controllers/FrmFieldsController.php | 2 +- js/formidable_admin.js | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/classes/controllers/FrmFieldsController.php b/classes/controllers/FrmFieldsController.php index 53092b83f3..70d2b30317 100644 --- a/classes/controllers/FrmFieldsController.php +++ b/classes/controllers/FrmFieldsController.php @@ -73,7 +73,7 @@ public static function create() { $field = self::include_new_field( $field_type, $form_id, $field_options ); // this hook will allow for multiple fields to be added at once - do_action( 'frm_after_field_created', $field, $form_id, $field_options ); + do_action( 'frm_after_field_created', $field, $form_id ); wp_die(); } diff --git a/js/formidable_admin.js b/js/formidable_admin.js index 53fd89d922..e804ffffb2 100644 --- a/js/formidable_admin.js +++ b/js/formidable_admin.js @@ -364,7 +364,7 @@ function frmAdminBuildJS() { wp.hooks.doAction( 'frmAdmin.beforeOpenConfirmModal', { $info, link }); $info.dialog( 'open' ); - continueButton.setAttribute( 'href', link.getAttribute( 'href' ) ); + continueButton.setAttribute( 'href', link.getAttribute( 'href' ) || link.getAttribute( 'data-href' ) ); return false; } @@ -11155,7 +11155,8 @@ function frmAdminBuildJS() { fillDropdownOpts, showSaveAndReloadModal, deleteField, - insertFormField + insertFormField, + confirmLinkClick }; } From f5ecaa2041c14abf02b53cf0664cad2906ac29d5 Mon Sep 17 00:00:00 2001 From: Mike Letellier Date: Mon, 11 Aug 2025 11:30:40 -0300 Subject: [PATCH 6/9] Drop space --- classes/views/frm-fields/back-end/settings.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/classes/views/frm-fields/back-end/settings.php b/classes/views/frm-fields/back-end/settings.php index 4d7500f4b2..0c96b70296 100644 --- a/classes/views/frm-fields/back-end/settings.php +++ b/classes/views/frm-fields/back-end/settings.php @@ -437,7 +437,7 @@ if ( $display['unique'] ) { ?> -

    +

    From 550cc9313d85017ac42cffb854f3b222752a5bed Mon Sep 17 00:00:00 2001 From: Mike Letellier Date: Mon, 11 Aug 2025 11:41:30 -0300 Subject: [PATCH 7/9] Drop jQuery note from Lite --- js/admin/settings.js | 23 ----------------------- 1 file changed, 23 deletions(-) diff --git a/js/admin/settings.js b/js/admin/settings.js index 29ce740d60..e7d1aec25d 100644 --- a/js/admin/settings.js +++ b/js/admin/settings.js @@ -1,5 +1,4 @@ ( function() { - function addEventListeners() { document.addEventListener( 'change', handleChangeEvent ); document.addEventListener( 'keydown', handleKeyDownEvent ); @@ -13,11 +12,6 @@ if ( 'frm_currency' === e.target.id) { syncCurrencyOptions( e.target ); } - - if ( 'frm_datepicker_library' === e.target.id ) { - toggleDatepickerJqueryRangeSupportNoteOnChange( e ); - } - } function handleKeyDownEvent( e ) { @@ -52,22 +46,5 @@ } } - /** - * Toggle the jQuery range support note based on the datepicker library selection. - * @param {Event} event - * @return {void} - */ - function toggleDatepickerJqueryRangeSupportNoteOnChange( event ) { - const datepickerLibrary = event.target.value; - const jqueryRangeSupportNote = document.getElementById( 'frm_datepicker_jquery_range_support_note' ); - - if ( 'jquery' === datepickerLibrary ) { - jqueryRangeSupportNote.classList.remove( 'frm_hidden' ); - return; - } - - jqueryRangeSupportNote.classList.add( 'frm_hidden' ); - } - addEventListeners(); }() ); From 62b3e6701eacbe055cddd75c5cd39e6af7cd3de9 Mon Sep 17 00:00:00 2001 From: Mike Letellier Date: Mon, 11 Aug 2025 11:46:28 -0300 Subject: [PATCH 8/9] Make field ID check safer, easier to read, and use less duplicate code --- js/formidable_admin.js | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/js/formidable_admin.js b/js/formidable_admin.js index e804ffffb2..d5d5879792 100644 --- a/js/formidable_admin.js +++ b/js/formidable_admin.js @@ -1650,7 +1650,7 @@ function frmAdminBuildJS() { let replaceWith; document.getElementById( 'frm_form_editor_container' ).classList.add( 'frm-has-fields' ); const $siblings = $placeholder.siblings( 'li.form-field' ).not( '.edit_field_type_end_divider' ); - const fieldId = msg.match( /data-fid="(\d+)"/ )[1]; + const fieldId = checkMsgForFieldId( msg ); if ( ! $siblings.length ) { // if dragging into a new row, we need to wrap the li first. @@ -1701,6 +1701,17 @@ function frmAdminBuildJS() { }); } + /** + * Get the field ID from the response message. + * + * @param {String} msg + * @return {Number} + */ + function checkMsgForFieldId( msg ) { + const result = msg.match( /data-fid="(\d+)"/ ); + return result ? parseInt( result[1] ) : 0; + } + function getFieldIdsInSubmitRow() { const submitField = document.querySelector( '.edit_field_type_submit' ); if ( ! submitField ) { @@ -2087,7 +2098,7 @@ function frmAdminBuildJS() { success: function( msg ) { document.getElementById( 'frm_form_editor_container' ).classList.add( 'frm-has-fields' ); const replaceWith = wrapFieldLi( msg ); - const fieldId = msg.match( /data-fid="(\d+)"/ )[1]; + const fieldId = checkMsgForFieldId( msg ); const submitField = $newFields[0].querySelector( '.edit_field_type_submit' ); if ( ! submitField ) { @@ -2145,7 +2156,7 @@ function frmAdminBuildJS() { data: Object.assign( getInsertNewFieldArgs( fieldType, 0, formId, hasBreak ), { field_options: fieldOptions } ), success: function( msg ) { const fieldElement = jQuery( msg ); - const fieldId = msg.match( /data-fid="(\d+)"/ )[1]; + const fieldId = checkMsgForFieldId( msg ); fieldElement[0].style.display = 'none'; resolve( fieldElement ); From 979177f6513c4729da0dd3da14a269fd9bcc2bff Mon Sep 17 00:00:00 2001 From: Mike Letellier Date: Mon, 11 Aug 2025 12:01:13 -0300 Subject: [PATCH 9/9] Drop new CSS class --- css/admin/frm_admin_global.css | 4 ---- js/formidable_admin.js | 2 ++ 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/css/admin/frm_admin_global.css b/css/admin/frm_admin_global.css index 602efed045..b0377e898b 100644 --- a/css/admin/frm_admin_global.css +++ b/css/admin/frm_admin_global.css @@ -20,8 +20,4 @@ #adminmenu .frm-orange-text { color: #F47449; -} -.frm-form-field-option-disabled { - opacity: 0.5; - pointer-events: none; } \ No newline at end of file diff --git a/js/formidable_admin.js b/js/formidable_admin.js index d5d5879792..a9353c89fc 100644 --- a/js/formidable_admin.js +++ b/js/formidable_admin.js @@ -1704,6 +1704,8 @@ function frmAdminBuildJS() { /** * Get the field ID from the response message. * + * @since x.x + * * @param {String} msg * @return {Number} */