Changeset 3794174
- Timestamp:
- 11/10/2026 10:59:22 AM (less than one hour ago)
- Location:
- extensions-for-elementor-form
- Files:
-
- 2 deleted
- 6 edited
- 1 copied
-
tags/2.7.12 (copied) (copied from extensions-for-elementor-form/trunk )
-
tags/2.7.12/assets/addons/js/global.js (modified) (1 diff)
-
tags/2.7.12/assets/js/cfl-editor-templates-extended-stub.js (deleted)
-
tags/2.7.12/extensions-for-elementor-form.php (modified) (5 diffs)
-
tags/2.7.12/readme.txt (modified) (2 diffs)
-
trunk/assets/addons/js/global.js (modified) (1 diff)
-
trunk/assets/js/cfl-editor-templates-extended-stub.js (deleted)
-
trunk/extensions-for-elementor-form.php (modified) (5 diffs)
-
trunk/readme.txt (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
extensions-for-elementor-form/tags/2.7.12/assets/addons/js/global.js
r3652011 r3794174 61 61 }; 62 62 63 /** 64 * Keep nested repeater rows (form_fields -> cfef_repeater_data) from mutating the document config. 65 * 66 * Elementor's BaseSettings.handleRepeaterData() writes a Backbone.Collection back into the attrs 67 * object it receives. For a repeater row that holds another repeater, that object is the raw row 68 * from elementor.documents.getCurrent().config.elements, so the config ends up holding a circular 69 * Backbone.Collection. Elementor Pro's editor-templates-extended package then walks the config 70 * recursively (collectShortcodeTemplateIdsFromValue) and throws "Maximum call stack size exceeded". 71 * Cloning the rows first means the Collection is written onto a copy, not onto the config. 72 * 73 * Runs once on load and again on elementor/init, in case elementorModules is not ready yet. 74 */ 75 const cfefPatchNestedRepeaterSettings = () => { 76 const models = window.elementorModules && elementorModules.editor && elementorModules.editor.elements && elementorModules.editor.elements.models; 77 const proto = models && models.BaseSettings && models.BaseSettings.prototype; 78 79 if (!proto || typeof proto.convertRepeaterValueToCollection !== 'function' || proto.cfefNestedRepeaterPatched) { 80 return; 81 } 82 83 const originalConvert = proto.convertRepeaterValueToCollection; 84 const hasNestedRepeater = (control) => Object.values(control.fields || {}).some( 85 (field) => field && ('repeater' === field.type || field.is_repeater) 86 ); 87 88 proto.convertRepeaterValueToCollection = function (attrs, repeaterControl) { 89 const rows = attrs ? attrs[repeaterControl.name] : null; 90 91 if (Array.isArray(rows) && hasNestedRepeater(repeaterControl)) { 92 const clonedRows = rows.map((row) => ( 93 row && 'object' === typeof row && !(row instanceof Backbone.Model) ? Object.assign({}, row) : row 94 )); 95 attrs = Object.assign({}, attrs, { [repeaterControl.name]: clonedRows }); 96 } 97 98 return originalConvert.call(this, attrs, repeaterControl); 99 }; 100 proto.cfefNestedRepeaterPatched = true; 101 }; 102 103 cfefPatchNestedRepeaterSettings(); 104 window.addEventListener('elementor/init', cfefPatchNestedRepeaterSettings); 105 63 106 window.addEventListener('elementor/init', function () { 64 107 var RepeaterControlItemView = elementor.modules.controls.Repeater.extend({ -
extensions-for-elementor-form/tags/2.7.12/extensions-for-elementor-form.php
r3783885 r3794174 8 8 * Author URI: https://coolplugins.net/?utm_source=cfkl_plugin&utm_medium=inside&utm_campaign=author_page&utm_content=plugins_list 9 9 * Text Domain: extensions-for-elementor-form 10 * Version: 2.7.1 110 * Version: 2.7.12 11 11 * Requires at least: 6.2 12 12 * Requires PHP: 7.4 … … 14 14 * License URI: http://www.gnu.org/licenses/gpl-2.0.txt 15 15 * Requires Plugins: elementor 16 * Elementor tested up to: 4. 3.517 * Elementor Pro tested up to: 4. 3.216 * Elementor tested up to: 4.4.0 17 * Elementor Pro tested up to: 4.4.0 18 18 */ 19 19 … … 34 34 } 35 35 36 define('CFL_VERSION', '2.7.1 1');36 define('CFL_VERSION', '2.7.12'); 37 37 define('PHP_MINIMUM_VERSION', '7.4'); 38 38 define('WP_MINIMUM_VERSION', '6.2'); … … 91 91 add_action('elementor_pro/forms/actions/register', array($this, 'cfl_register_new_form_actions')); 92 92 add_action( 'plugins_loaded',array($this,'formdb_elementor_marketing')); 93 add_filter( 'elementor-pro/editor/v2/packages', array( $this, 'filter_elementor_pro_editor_packages' ) );94 add_action( 'elementor/editor/v2/scripts/enqueue', array( $this, 'enqueue_editor_templates_extended_stub' ), 20 );95 93 } 96 94 } … … 396 394 } 397 395 398 /**399 * Skips Elementor Pro's editor-templates-extended package (crashes editor with nested form controls).400 *401 * @param mixed $packages Editor v2 packages.402 * @return mixed403 */404 public function filter_elementor_pro_editor_packages( $packages ) {405 if ( ! is_array( $packages ) ) {406 return $packages;407 }408 409 return array_values( array_diff( $packages, array( 'editor-templates-extended' ) ) );410 }411 412 /**413 * Stub the removed package handle for other Pro packages that depend on it.414 */415 public function enqueue_editor_templates_extended_stub() {416 wp_register_script(417 'elementor-v2-editor-templates-extended',418 CFL_PLUGIN_URL . 'assets/js/cfl-editor-templates-extended-stub.js',419 array(),420 CFL_VERSION,421 true422 );423 wp_enqueue_script( 'elementor-v2-editor-templates-extended' );424 }425 426 396 public function EEF_plugin_dashboard_link($links) 427 397 { -
extensions-for-elementor-form/tags/2.7.12/readme.txt
r3783885 r3794174 5 5 Requires at least: 6.2 6 6 Tested up to: 7.1 7 Stable tag: 2.7.1 17 Stable tag: 2.7.12 8 8 Requires PHP: 7.4 9 9 License: GPLv2 or later 10 10 License URI: http://www.gnu.org/licenses/gpl-2.0.html 11 Elementor tested up to: 4. 3.512 Elementor Pro tested up to: 4. 3.211 Elementor tested up to: 4.4.0 12 Elementor Pro tested up to: 4.4.0 13 13 14 14 Contact form addon for Elementor. Create forms in Elementor Free or extend Elementor Pro forms with conditional logic, country code and extra fields. … … 197 197 == Changelog == 198 198 199 = 2.7.12 - 2026-11-10 = 200 * Fixed: Unstyled Theme Builder Header/Footer in the Elementor editor. 201 199 202 = 2.7.11 - 2026-11-04 = 200 203 * Improved: Processing order of field values and shortcodes in the Email action. -
extensions-for-elementor-form/trunk/assets/addons/js/global.js
r3652011 r3794174 61 61 }; 62 62 63 /** 64 * Keep nested repeater rows (form_fields -> cfef_repeater_data) from mutating the document config. 65 * 66 * Elementor's BaseSettings.handleRepeaterData() writes a Backbone.Collection back into the attrs 67 * object it receives. For a repeater row that holds another repeater, that object is the raw row 68 * from elementor.documents.getCurrent().config.elements, so the config ends up holding a circular 69 * Backbone.Collection. Elementor Pro's editor-templates-extended package then walks the config 70 * recursively (collectShortcodeTemplateIdsFromValue) and throws "Maximum call stack size exceeded". 71 * Cloning the rows first means the Collection is written onto a copy, not onto the config. 72 * 73 * Runs once on load and again on elementor/init, in case elementorModules is not ready yet. 74 */ 75 const cfefPatchNestedRepeaterSettings = () => { 76 const models = window.elementorModules && elementorModules.editor && elementorModules.editor.elements && elementorModules.editor.elements.models; 77 const proto = models && models.BaseSettings && models.BaseSettings.prototype; 78 79 if (!proto || typeof proto.convertRepeaterValueToCollection !== 'function' || proto.cfefNestedRepeaterPatched) { 80 return; 81 } 82 83 const originalConvert = proto.convertRepeaterValueToCollection; 84 const hasNestedRepeater = (control) => Object.values(control.fields || {}).some( 85 (field) => field && ('repeater' === field.type || field.is_repeater) 86 ); 87 88 proto.convertRepeaterValueToCollection = function (attrs, repeaterControl) { 89 const rows = attrs ? attrs[repeaterControl.name] : null; 90 91 if (Array.isArray(rows) && hasNestedRepeater(repeaterControl)) { 92 const clonedRows = rows.map((row) => ( 93 row && 'object' === typeof row && !(row instanceof Backbone.Model) ? Object.assign({}, row) : row 94 )); 95 attrs = Object.assign({}, attrs, { [repeaterControl.name]: clonedRows }); 96 } 97 98 return originalConvert.call(this, attrs, repeaterControl); 99 }; 100 proto.cfefNestedRepeaterPatched = true; 101 }; 102 103 cfefPatchNestedRepeaterSettings(); 104 window.addEventListener('elementor/init', cfefPatchNestedRepeaterSettings); 105 63 106 window.addEventListener('elementor/init', function () { 64 107 var RepeaterControlItemView = elementor.modules.controls.Repeater.extend({ -
extensions-for-elementor-form/trunk/extensions-for-elementor-form.php
r3783885 r3794174 8 8 * Author URI: https://coolplugins.net/?utm_source=cfkl_plugin&utm_medium=inside&utm_campaign=author_page&utm_content=plugins_list 9 9 * Text Domain: extensions-for-elementor-form 10 * Version: 2.7.1 110 * Version: 2.7.12 11 11 * Requires at least: 6.2 12 12 * Requires PHP: 7.4 … … 14 14 * License URI: http://www.gnu.org/licenses/gpl-2.0.txt 15 15 * Requires Plugins: elementor 16 * Elementor tested up to: 4. 3.517 * Elementor Pro tested up to: 4. 3.216 * Elementor tested up to: 4.4.0 17 * Elementor Pro tested up to: 4.4.0 18 18 */ 19 19 … … 34 34 } 35 35 36 define('CFL_VERSION', '2.7.1 1');36 define('CFL_VERSION', '2.7.12'); 37 37 define('PHP_MINIMUM_VERSION', '7.4'); 38 38 define('WP_MINIMUM_VERSION', '6.2'); … … 91 91 add_action('elementor_pro/forms/actions/register', array($this, 'cfl_register_new_form_actions')); 92 92 add_action( 'plugins_loaded',array($this,'formdb_elementor_marketing')); 93 add_filter( 'elementor-pro/editor/v2/packages', array( $this, 'filter_elementor_pro_editor_packages' ) );94 add_action( 'elementor/editor/v2/scripts/enqueue', array( $this, 'enqueue_editor_templates_extended_stub' ), 20 );95 93 } 96 94 } … … 396 394 } 397 395 398 /**399 * Skips Elementor Pro's editor-templates-extended package (crashes editor with nested form controls).400 *401 * @param mixed $packages Editor v2 packages.402 * @return mixed403 */404 public function filter_elementor_pro_editor_packages( $packages ) {405 if ( ! is_array( $packages ) ) {406 return $packages;407 }408 409 return array_values( array_diff( $packages, array( 'editor-templates-extended' ) ) );410 }411 412 /**413 * Stub the removed package handle for other Pro packages that depend on it.414 */415 public function enqueue_editor_templates_extended_stub() {416 wp_register_script(417 'elementor-v2-editor-templates-extended',418 CFL_PLUGIN_URL . 'assets/js/cfl-editor-templates-extended-stub.js',419 array(),420 CFL_VERSION,421 true422 );423 wp_enqueue_script( 'elementor-v2-editor-templates-extended' );424 }425 426 396 public function EEF_plugin_dashboard_link($links) 427 397 { -
extensions-for-elementor-form/trunk/readme.txt
r3783885 r3794174 5 5 Requires at least: 6.2 6 6 Tested up to: 7.1 7 Stable tag: 2.7.1 17 Stable tag: 2.7.12 8 8 Requires PHP: 7.4 9 9 License: GPLv2 or later 10 10 License URI: http://www.gnu.org/licenses/gpl-2.0.html 11 Elementor tested up to: 4. 3.512 Elementor Pro tested up to: 4. 3.211 Elementor tested up to: 4.4.0 12 Elementor Pro tested up to: 4.4.0 13 13 14 14 Contact form addon for Elementor. Create forms in Elementor Free or extend Elementor Pro forms with conditional logic, country code and extra fields. … … 197 197 == Changelog == 198 198 199 = 2.7.12 - 2026-11-10 = 200 * Fixed: Unstyled Theme Builder Header/Footer in the Elementor editor. 201 199 202 = 2.7.11 - 2026-11-04 = 200 203 * Improved: Processing order of field values and shortcodes in the Email action.
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)