Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
eea7808
Internal: Improve Nested Elements Dynamic Tags - Title [ED-13824]
davseve May 28, 2024
4c8fa4e
Merge branch 'main' into ED-13824-to-main
elementorbot May 28, 2024
7c56ab3
Merge branch 'main' into ED-13824-to-main
elementorbot May 29, 2024
3e88993
wip
davseve May 29, 2024
2c1759c
Merge branch 'ED-13824-to-main' of https://github.com/davseve/element…
davseve May 29, 2024
d7258ee
Merge branch 'main' into ED-13824-to-main
elementorbot May 29, 2024
3d1bfed
Merge branch 'main' into ED-13824-to-main
elementorbot May 29, 2024
62ca667
Merge branch 'main' into ED-13824-to-main
elementorbot May 29, 2024
db7e9ef
wip
davseve May 29, 2024
96b4ccc
Merge branch 'ED-13824-to-main' of https://github.com/davseve/element…
davseve May 29, 2024
8d7e44d
Merge branch 'main' into ED-13824-to-main
elementorbot May 29, 2024
8288639
Merge branch 'main' into ED-13824-to-main
elementorbot May 30, 2024
38947e3
Merge branch 'main' into ED-13824-to-main
elementorbot May 30, 2024
eff5c85
Merge branch 'main' into ED-13824-to-main
elementorbot May 30, 2024
c6d797d
Merge branch 'main' into ED-13824-to-main
elementorbot May 30, 2024
c469f1f
Merge branch 'main' into ED-13824-to-main
elementorbot May 30, 2024
ae041a5
new solution
davseve May 31, 2024
ca288d4
Merge branch 'ED-13824-to-main' of https://github.com/davseve/element…
davseve May 31, 2024
86a1e06
Remove old solution
davseve May 31, 2024
b1010aa
revert backbone.marionette.js
davseve May 31, 2024
d5930f9
Remove redundant diff
davseve May 31, 2024
9dded99
Merge branch 'main' into ED-13824-to-main
elementorbot May 31, 2024
ddafdf0
Merge branch 'main' into ED-13824-to-main
elementorbot May 31, 2024
c734685
Merge branch 'main' into ED-13824-to-main
elementorbot May 31, 2024
ef46a11
Merge branch 'main' into ED-13824-to-main
elementorbot May 31, 2024
da86e29
Refactor
davseve Jun 2, 2024
e349293
Merge branch 'ED-13824-to-main' of https://github.com/davseve/element…
davseve Jun 2, 2024
9717f67
Merge branch 'main' into ED-13824-to-main-pt-2
davseve Jun 7, 2024
b1d4ce7
wip
davseve Jun 7, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions assets/dev/js/editor/components/dynamic-tags/manager.js
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,23 @@ module.exports = elementorModules.Module.extend( {
} );
},

loadSingleCacheRequest( request ) {
elementorCommon.ajax.addRequest( 'render_tags_single', {
data: {
post_id: elementor.config.document.id,
tags: Object.keys( request ),
},
success: ( data ) => {
this.cache = {
...this.cache,
...data,
};
},
} );

return this.cache;
},

refreshCacheFromServer( callback ) {
this.cacheCallbacks.push( callback );

Expand Down
45 changes: 22 additions & 23 deletions assets/dev/js/editor/elements/views/base.js
Original file line number Diff line number Diff line change
Expand Up @@ -659,33 +659,40 @@ BaseElementView = BaseContainer.extend( {
this.renderHTML();
},

isAtomicDynamic( dataBinding, changedSetting ) {
return !! ( dataBinding.el.hasAttribute( 'data-binding-dynamic' ) &&
elementorCommon.config.experimentalFeatures.e_nested_atomic_repeaters ) &&
this.isAddingDynamicToTitle( dataBinding, changedSetting );
},

isAddingDynamicToTitle( dataBinding, changedSetting ) {
return (
'object' === typeof changedSetting?.__dynamic__ &&
Object.keys( changedSetting?.__dynamic__ )[ 0 ]?.length > 0 &&
dataBinding.el.getAttribute( 'data-binding-setting' ) === Object.keys( changedSetting?.__dynamic__ )[ 0 ]
);
isAtomicDynamic( dataBinding ) {
return dataBinding.el.hasAttribute( 'data-binding-dynamic' );
},

getDynamicValue( settings, bindingSetting ) {
const valueToParse = settings.attributes?.__dynamic__?.[ bindingSetting ],
const valueToParse = settings.attributes.__dynamic__[ bindingSetting ],
dynamicSettings = { active: true };

if ( valueToParse ) {
try {
return elementor.dynamicTags.parseTagsText( valueToParse, dynamicSettings, elementor.dynamicTags.getTagDataContent );
} catch {
return false;
// return false;
const request = elementor.dynamicTags.createCacheKey( this ); // This this is incorrect, we should add the tag.js this of build a dedicated this.
console.log( { request } );
elementor.dynamicTags.loadSingleCacheRequest( request );

console.log( 'cache:', elementor.dynamicTags.cache )

}
}

return settings.attributes[ bindingSetting ];
return settings.attributes.item_title; // Default title
},

renderDynamicValue( dynamicValue ) {
const activeItem = this?.model?.attributes?.editSettings?.attributes.activeItemIndex,
widgetConfig = elementor.widgetsCache[ this.model.config.name ],
titleContainers = this.$el.find( widgetConfig.title_container );

if ( activeItem ) {
titleContainers[ activeItem - 1 ].innerHTML = dynamicValue;
return;
}
},

/**
Expand Down Expand Up @@ -763,14 +770,6 @@ BaseElementView = BaseContainer.extend( {
const { bindingSetting } = dataBinding.dataset;
let change = settings.changed[ bindingSetting ];

if ( this.isAtomicDynamic( dataBinding, settings.changed ) ) {
const dynamicValue = this.getDynamicValue( settings, bindingSetting );

if ( dynamicValue ) {
change = dynamicValue;
}
}

if ( change !== undefined ) {
dataBinding.el.innerHTML = change;
return true;
Expand Down
35 changes: 35 additions & 0 deletions core/dynamic-tags/manager.php
Original file line number Diff line number Diff line change
Expand Up @@ -456,6 +456,39 @@ public function ajax_render_tags( $data ) {
return $tags_data;
}

/**
* @since 2.0.0
* @access public
*
* @throws \Exception If post ID is missing.
* @throws \Exception If current user don't have permissions to edit the post.
*/
public function ajax_render_tags_single( $data ) {
if ( empty( $data['post_id'] ) ) {
throw new \Exception( 'Missing post id.' );
}

if ( ! User::is_current_user_can_edit( $data['post_id'] ) ) {
throw new \Exception( 'Access denied.' );
}

Plugin::$instance->db->switch_to_post( $data['post_id'] );

$tags_data = [];

$tag_key_parts = explode( '-', $data['tag'] );

$tag_name = base64_decode( $tag_key_parts[0] );

$tag_settings = json_decode( urldecode( base64_decode( $tag_key_parts[1] ) ), true );

$tag = $this->create_tag( null, $tag_name, $tag_settings );

$tags_data[ $data['tag'] ] = $tag->get_content();

return $tags_data;
}

/**
* @since 2.0.0
* @access public
Expand Down Expand Up @@ -495,6 +528,8 @@ public function after_enqueue_post_css( $css_file ) {
*/
public function register_ajax_actions( Ajax $ajax ) {
$ajax->register_ajax_action( 'render_tags', [ $this, 'ajax_render_tags' ] );
$ajax->register_ajax_action( 'render_tags_single', [ $this, 'ajax_render_tags_single' ] );

}

/**
Expand Down
5 changes: 4 additions & 1 deletion modules/nested-accordion/widgets/nested-accordion.php
Original file line number Diff line number Diff line change
Expand Up @@ -896,6 +896,7 @@ protected function get_initial_config(): array {
'target_container' => [ '.e-n-accordion' ],
'node' => 'details',
'is_interlaced' => true,
'title_container' => '.e-n-accordion-item-title-text',
] );
}

Expand Down Expand Up @@ -951,7 +952,9 @@ protected function content_template_single_repeater_item() {
protected function content_template() {
?>
<div class="e-n-accordion" aria-label="Accordion. Open links with Enter or Space, close with Escape, and navigate with Arrow Keys">
<# if ( settings['items'] ) {
<#
console.log('re-rendered');
if ( settings['items'] ) {
const elementUid = view.getIDInt().toString().substring( 0, 3 ),
titleHTMLTag = elementor.helpers.validateHTMLTag( settings.title_tag ),
defaultState = settings.default_state,
Expand Down