( function ( $ ) {
var item_type = [ 'uael', 'uael_section', 'uael_column', 'uael_container' ];
var item_type_elementor_hook = [ 'widget', 'column', 'section', 'container' ];
xsLocalStorage.init(
{
iframeUrl: uael_cross_domain.cross_domain_cdn,
initCallback: function () {}
}
);
UAE_Cross_Domain_Handler = {
paste: function( bsf_container, element ) {
var container = null,
element_location = {
index: 0
},
copied_widget_details = bsf_container.widgetCode,
copied_widget_details_string = JSON.stringify( copied_widget_details ),
copied_widget_type = copied_widget_details.elType,
media_check = /\.(jpg|png|jpeg|gif|svg)/gi.test( copied_widget_details_string ),
copied_widget = {
elType: copied_widget_type,
settings: copied_widget_details.settings
},
current_element = element,
current_element_type = element.model.get( "elType" );
switch( copied_widget_type ){
case 'section':
case "container":
copied_widget.elements = UAE_Cross_Domain_Handler.generateUniqueID( copied_widget_details.elements );
container = elementor.getPreviewContainer();
switch( current_element_type ){
case 'widget':
element_location.index = current_element.getContainer().parent.parent.view.getOption( "_index" ) + 1;
break;
case 'column':
element_location.index = current_element.getContainer().parent.view.getOption( "_index" ) + 1;
break;
case 'section':
element_location.index = current_element.getOption( "_index" ) + 1;
break;
}
break;
case 'column':
copied_widget.elements = UAE_Cross_Domain_Handler.generateUniqueID( copied_widget_details.elements );
switch( current_element_type ){
case 'widget':
container = current_element.getContainer().parent.parent;
element_location.index = current_element.getContainer().parent.view.getOption( "_index" ) + 1;
break;
case 'column':
container = current_element.getContainer().parent;
element_location.index = current_element.getOption( "_index" ) + 1;
break;
case 'section':
container = current_element.getContainer();
break;
}
break;
case 'widget':
copied_widget.widgetType = copied_widget_details.widgetType;
container = current_element.getContainer();
switch( current_element_type ){
case 'widget':
container = current_element.getContainer().parent;
element_location.index = current_element.getOption( "_index" ) + 1;
break;
case 'column':
container = current_element.getContainer();
break;
case 'section':
container = current_element.children.findByIndex(0).getContainer();
break;
}
break;
}
var new_element = $e.run( "document/elements/create", {
model: copied_widget,
container: container,
options: element_location
});
if( undefined == new_element ) {
if ( "widget" === current_element_type ) {
if( current_element.$el.next( '.undefined.elementor-widget-empty' ) ) {
current_element.$el.next( '.undefined.elementor-widget-empty' ).after( '
' + uael_cross_domain.widget_not_found + '
' );
}
} else {
if( current_element.$el.find( '.undefined.elementor-widget-empty' ) ) {
current_element.$el.find( '.undefined.elementor-widget-empty' ).after( '' + uael_cross_domain.widget_not_found + '
' );
}
}
}
if ( media_check ) {
jQuery.ajax({
url: uael_cross_domain.ajaxURL,
method: "POST",
data: {
nonce: uael_cross_domain.nonce,
action: "uael_process_import",
content: copied_widget_details_string
},
beforeSend: function () {
new_element.view.$el.addClass( "uael-processing-import" );
}
}).done( function ( response ) {
if ( response.success ) {
var media_element = response.data[0];
copied_widget.elType = media_element.elType;
copied_widget.settings = media_element.settings;
if( "widget" === copied_widget.elType ) {
copied_widget.widgetType = media_element.widgetType;
} else {
copied_widget.elements = media_element.elements;
}
$e.run( "document/elements/delete", {
container: new_element
});
$e.run( "document/elements/create", {
model: copied_widget,
container: container,
options: element_location
});
}
})
}
},
generateUniqueID: function( elements ) {
elements.forEach( function( item, index ) {
if ( typeof elementorCommon.helpers.getUniqueId() != "undefined" ) {
item.id = elementorCommon.helpers.getUniqueId();
} else {
item.id = elementor.helpers.getUniqueID();
}
if( item.elements.length > 0 ) {
UAE_Cross_Domain_Handler.generateUniqueID( item.elements );
}
} );
return elements;
},
getData: function( allSections, editor_view ) {
var allSectionsString = JSON.stringify( allSections );
jQuery.ajax({
url: uael_cross_domain.ajaxURL,
method: "POST",
data: {
action: "uael_process_import",
nonce: uael_cross_domain.nonce,
content: allSectionsString
},
beforeSend: function () {
editor_view.attr( "data-uael-fpcp-text", "Pasting the content..." );
},
}).done(function (e) {
if (e.success) {
editor_view.attr( "data-uael-fpcp-text", "Processing the content..." );
var data = e.data[0];
if ( uael_cross_domain.elementorCompatible ) {
// Compatibility for older elementor versions
elementor.sections.currentView.addChildModel( data )
} else {
elementor.previewView.addChildModel( data )
}
editor_view.attr( "data-uael-fpcp-text", "Processing Completed" );
var fpcp_wait_timeout = setTimeout( function () {
editor_view.removeClass( 'uael-fpcp-wait' );
if( 'uael-icon-uae' == uael_cross_domain.cross_domain_icon ){
editor_view.find('body').removeClass('uael-fpcp-wait__icon');
}
elementor.notifications.showToast( {
message: elementor.translate( 'Entire Page Content Is Pasted!' )
});
clearTimeout( fpcp_wait_timeout );
}, 60);
}
}).fail(function () {
editor_view.attr( "data-uael-fpcp-text", "" );
editor_view.removeClass( 'uael-fpcp-wait' );
if( 'uael-icon-uae' == uael_cross_domain.cross_domain_icon ){
editor_view.find('body').removeClass('uael-fpcp-wait__icon');
}
elementor.notifications.showToast( {
message: elementor.translate( 'Something went wrong!' )
});
})
},
isValidJson: function(str) {
try {
JSON.parse(str);
return true;
} catch (e) {
return false;
}
}
}
item_type.forEach( function( item, index ) {
elementor.hooks.addFilter( 'elements/' + item_type_elementor_hook[index] + '/contextMenuGroups', function ( groups, element ) {
var loop_element = this;
groups.push(
{
name: item_type[index],
actions: [
{
name: 'copy',
title: uael_cross_domain.uae_copy,
icon: uael_cross_domain.cross_domain_icon,
callback: function () {
var widgetType = element.model.get('widgetType'),
widgetCode = element.model.toJSON(),
bsf_container = {
widgetType: widgetType,
widgetCode: widgetCode
};
// Store data in local storage
xsLocalStorage.setItem('bsf_uael_container_new', JSON.stringify(bsf_container));
// Create a textarea, set its value to the JSON string, and copy to clipboard
var textarea = document.createElement('textarea');
textarea.value = JSON.stringify(bsf_container);
document.body.appendChild(textarea);
textarea.select();
document.execCommand('copy');
document.body.removeChild(textarea);
}
},
{
name: 'paste',
title: uael_cross_domain.uae_paste,
icon: uael_cross_domain.cross_domain_icon,
callback: function () {
if (!navigator.clipboard) {
// If the Clipboard API is not supported
var existingDialog = document.getElementById('uae-paste-area-dialog');
if (existingDialog) {
existingDialog.parentNode.removeChild(existingDialog);
}
var uae_paste = document.querySelector('#uae-paste-area-input');
if (!uae_paste) {
// Create a dialog for paste area
var container = document.createElement('div'),
paragraph = document.createElement('p');
paragraph.innerHTML = 'Please grant clipboard permission for this site to paste.';
var inputArea = document.createElement('input');
inputArea.id = 'uae-paste-area-input';
inputArea.type = 'text';
inputArea.setAttribute('autocomplete', 'off');
inputArea.setAttribute('autofocus', 'autofocus');
inputArea.focus();
container.appendChild(paragraph);
container.appendChild(inputArea);
// Handle paste event in the input area
inputArea.addEventListener('paste', async function (event) {
event.preventDefault();
var pastedData = event.clipboardData.getData("text");
if (UAE_Cross_Domain_Handler.isValidJson(pastedData)) {
var checktype = JSON.parse(pastedData);
if (pastedData && typeof checktype == 'object') {
// Call your paste handler function
xsLocalStorage.setItem("bsf_uael_container_new", pastedData);
UAE_Cross_Domain_Handler.paste(checktype, element);
}
}
var existingDialog = document.getElementById('uae-paste-area-dialog');
if (existingDialog) {
existingDialog.parentNode.removeChild(existingDialog);
}
});
// Determine system-specific paste instructions
let getSystem = '';
if (navigator.userAgent.indexOf('Mac OS X') != -1) {
getSystem = 'Command'
} else {
getSystem = 'Ctrl'
}
// Create and show a lightbox dialog for pasting
var uaeDialog = elementorCommon.dialogsManager.createWidget('lightbox', {
id: 'uae-paste-area-dialog',
headerMessage: `${getSystem} + V`,
message: container,
position: {
my: 'center center',
at: 'center center'
},
onShow: function onShow() {
inputArea.focus()
uaeDialog.getElements('widgetContent').on('click', function () {
inputArea.focus()
});
},
closeButton: true,
closeButtonOptions: {
iconClass: 'eicon-close'
},
});
uaeDialog.show();
}
} else {
// If Clipboard API is supported
navigator.clipboard.readText().then(function (pastedData) {
if (UAE_Cross_Domain_Handler.isValidJson(pastedData)) {
var checktype = JSON.parse(pastedData);
if (pastedData && typeof checktype == 'object') {
// Call your paste handler function
xsLocalStorage.setItem( "bsf_uael_container_new", pastedData );
UAE_Cross_Domain_Handler.paste( checktype, element);
}
}
}).catch(function (err) {
console.error("Error clipboard data: " + err);
});
}
},
},
{
name: 'copy_all',
title: uael_cross_domain.uae_copy_all,
icon: uael_cross_domain.cross_domain_icon,
callback: function(){
var copiedSections = Object.values( elementor.getPreviewView().children._views ).map( function (e) {
return e.getContainer();
});
var allSections = copiedSections.map( function (e) {
return e.model.toJSON();
});
xsLocalStorage.setItem( 'bsf_uael_all_sections', JSON.stringify( allSections ), function ( data ) {
elementor.notifications.showToast( {
message: elementor.translate( 'Entire Page Content Is Copied!' )
});
});
// Create a textarea, set its value to the JSON string, and copy to clipboard
var textarea = document.createElement('textarea');
textarea.value = JSON.stringify(allSections);
document.body.appendChild(textarea);
textarea.select();
document.execCommand('copy');
document.body.removeChild(textarea);
}
},
{
name: 'paste_all',
title: uael_cross_domain.uae_paste_all,
icon: uael_cross_domain.cross_domain_icon,
callback: function(){
var editor_view = elementor.$previewContents.find( "html" );
if (!navigator.clipboard) {
// If the Clipboard API is not supported
var existingDialog = document.getElementById('uae-paste-area-dialog');
if (existingDialog) {
existingDialog.parentNode.removeChild(existingDialog);
}
var uae_paste = document.querySelector('#uae-paste-area-input');
if (!uae_paste) {
// Create a dialog for paste area
var container = document.createElement('div'),
paragraph = document.createElement('p');
paragraph.innerHTML = 'Please grant clipboard permission for this site to paste.';
var inputArea = document.createElement('input');
inputArea.id = 'uae-paste-area-input';
inputArea.type = 'text';
inputArea.setAttribute('autocomplete', 'off');
inputArea.setAttribute('autofocus', 'autofocus');
inputArea.focus();
container.appendChild(paragraph);
container.appendChild(inputArea);
// Handle paste event in the input area
inputArea.addEventListener('paste', async function (event) {
event.preventDefault();
var pastedData = event.clipboardData.getData("text");
if (UAE_Cross_Domain_Handler.isValidJson(pastedData)) {
var checktype = JSON.parse(pastedData);
if (pastedData && typeof checktype == 'object') {
// Call your paste handler function
xsLocalStorage.setItem("bsf_uael_all_sections", pastedData);
UAE_Cross_Domain_Handler.getData(checktype, element);
}
}
var existingDialog = document.getElementById('uae-paste-area-dialog');
if (existingDialog) {
existingDialog.parentNode.removeChild(existingDialog);
}
});
// Determine system-specific paste instructions
let getSystem = '';
if (navigator.userAgent.indexOf('Mac OS X') != -1) {
getSystem = 'Command'
} else {
getSystem = 'Ctrl'
}
// Create and show a lightbox dialog for pasting
var uaeDialog = elementorCommon.dialogsManager.createWidget('lightbox', {
id: 'uae-paste-area-dialog',
headerMessage: `${getSystem} + V`,
message: container,
position: {
my: 'center center',
at: 'center center'
},
onShow: function onShow() {
inputArea.focus()
uaeDialog.getElements('widgetContent').on('click', function () {
inputArea.focus()
});
},
closeButton: true,
closeButtonOptions: {
iconClass: 'eicon-close'
},
});
uaeDialog.show();
}
} else {
navigator.clipboard.readText().then(function (pastedData) {
if (UAE_Cross_Domain_Handler.isValidJson(pastedData)) {
var checktype = JSON.parse(pastedData);
if (pastedData && typeof checktype == 'object') {
// Call your paste handler function
xsLocalStorage.setItem( "bsf_uael_all_sections", pastedData );
editor_view.addClass( 'uael-fpcp-wait' ).attr( "data-uael-fpcp-text", "Starting the process..." );
if( 'uael-icon-uae' == uael_cross_domain.cross_domain_icon ){
editor_view.find('body').addClass('uael-fpcp-wait__icon');
}
UAE_Cross_Domain_Handler.getData( checktype, editor_view );
}
}
}).catch(function (err) {
console.error("Error clipboard data: " + err);
});
}
}
},
]
}
);
return groups;
});
});
} )( jQuery );