File: /var/www/vhosts/ensaco.es/httpdocs/wp-content/plugins/bb-plugin/js/fl-builder-revisions.js
( function( $ ) {
/**
* Revisions manager for the builder.
*
* @since 2.0
* @class Revisions
*/
var Revisions = {
/**
* Initialize builder revisions.
*
* @since 2.0
* @method init
*/
init: function()
{
this.setupMainMenuData();
$( '.fl-builder--revision-actions select', window.parent.document ).on( 'change', this.selectChanged );
$( '.fl-cancel-revision-preview', window.parent.document ).on( 'click', this.exitPreview.bind( this ) );
$( '.fl-apply-revision-preview', window.parent.document ).on( 'click', this.applyClicked.bind( this ) );
FLBuilder.addHook( 'revisionItemClicked', this.itemClicked.bind( this ) );
FLBuilder.addHook( 'didPublishLayout', this.refreshItems.bind( this ) );
},
/**
* Adds the revision items to the main menu data.
*
* @since 2.0
* @method setupMainMenuData
*/
setupMainMenuData: function()
{
var posts = FLBuilderConfig.revisions.posts,
authors = FLBuilderConfig.revisions.authors,
template = wp.template( 'fl-revision-list-item' ),
select = $( '.fl-builder--revision-actions select', window.parent.document ),
date = '',
author = '',
i = 0;
FLBuilderConfig.mainMenu.revisions.items = [];
select.html( '' );
if ( 0 === posts.length ) {
FLBuilderConfig.mainMenu.revisions.items.push( {
eventName : 'noRevisionsMessage',
type : 'event',
label : wp.template( 'fl-no-revisions-message' )()
} );
} else {
for ( ; i < posts.length; i++ ) {
date = FLBuilderStrings.revisionDate.replace( '%s', posts[ i ].date.diff );
date += ' (' + posts[ i ].date.published + ')';
author = FLBuilderStrings.revisionAuthor.replace( '%s', authors[ posts[ i ].author ].name );
FLBuilderConfig.mainMenu.revisions.items.push( {
eventName : 'revisionItemClicked',
type : 'event',
label : template( {
id : posts[ i ].id,
date : date,
author : author,
avatar : authors[ posts[ i ].author ].avatar
} )
} );
select.append( '<option value="' + posts[ i ].id + '">' + date + '</option>' );
}
}
if ( undefined !== FLBuilder.MainMenu ) {
FLBuilder.MainMenu.renderPanel( 'revisions' )
}
},
/**
* Refreshes the items in the revisions menu.
*
* @since 2.0
* @method refreshItems
*/
refreshItems: function()
{
if ( ! FLBuilderConfig.iframeEnabled ) {
FLBuilder.ajax( {
action: 'refresh_revision_items'
}, this.refreshItemsComplete.bind( this ) );
}
},
/**
* Re-renders the revision items when they have been refreshed.
*
* @since 2.0
* @method preview
* @param {Number} id
*/
refreshItemsComplete: function( response )
{
FLBuilderConfig.revisions = FLBuilder._jsonParse( response );
this.setupMainMenuData();
},
/**
* Callback for when a revision item is clicked
* to preview a revision.
*
* @since 2.0
* @method itemClicked
* @param {Object} e
* @param {Object} item
*/
itemClicked: function( e, item )
{
var id = $( item ).find( '.fl-revision-list-item' ).attr( 'data-revision-id' );
// Save existing settings first if any exist. Don't proceed if it fails.
if ( ! FLBuilder._triggerSettingsSave( false, true ) ) {
return;
}
$( '.fl-builder--revision-actions select', window.parent.document ).val( id );
this.preview( id );
},
/**
* Callback for when the revision select is changed.
*
* @since 2.0
* @method selectChanged
* @param {Object} e
*/
selectChanged: function( e )
{
Revisions.preview( $( this ).val() );
},
/**
* Restores a revision when the apply button is clicked.
*
* @since 2.0
* @method applyClicked
* @param {Object} e
*/
applyClicked: function( e )
{
var id = $( '.fl-builder--revision-actions select', window.parent.document ).val();
Revisions.restore( id );
},
/**
* Previews a revision with the specified ID.
*
* @since 2.0
* @method preview
* @param {Number} id
*/
preview: function( id )
{
$( '.fl-builder--revision-actions', window.parent.document ).css( 'display', 'flex' );
FLBuilder.triggerHook( 'didEnterRevisionPreview' );
FLBuilder.showAjaxLoader();
FLBuilder.ajax( {
action : 'render_revision_preview',
revision_id : id
}, this.previewRenderComplete.bind( this ) );
},
/**
* Previews a revision with the specified ID.
*
* @since 2.0
* @method previewRenderComplete
* @param {String} response
*/
previewRenderComplete: function( response )
{
FLBuilder._renderLayout( response, function() {
FLBuilder._destroyOverlayEvents();
FLBuilder._removeAllOverlays();
} );
},
/**
* Exits a revision preview and restores the original layout.
*
* @since 2.0
* @method exitPreview
*/
exitPreview: function()
{
$( '.fl-builder--revision-actions', window.parent.document ).hide();
FLBuilder.triggerHook( 'didExitRevisionPreview' );
FLBuilder._bindOverlayEvents();
FLBuilder._updateLayout();
},
/**
* Restores the layout to a revision with the specified ID.
*
* @since 2.0
* @method restore
* @param {Number} id
*/
restore: function( id )
{
$( '.fl-builder--revision-actions', window.parent.document ).hide();
FLBuilder.triggerHook( 'didExitRevisionPreview' );
FLBuilder.showAjaxLoader();
FLBuilder._bindOverlayEvents();
FLBuilder.ajax( {
action : 'restore_revision',
revision_id : id
}, Revisions.restoreComplete );
},
/**
* Callback for when a revision is restored.
*
* @since 2.0
* @method restoreComplete
* @param {String} response
*/
restoreComplete: function( response ) {
var data = FLBuilder._jsonParse( response );
FLBuilder._renderLayout( data.layout );
FLBuilder.triggerHook( 'didRestoreRevisionComplete', data.config );
settings = data.settings
if( typeof( settings.css ) != "undefined" && settings.css !== null) {
FLBuilderSettingsConfig.settings.layout.css = settings.css
}
if( typeof( settings.js ) != "undefined" && settings.js !== null) {
FLBuilderSettingsConfig.settings.layout.js = settings.js
}
}
};
$( function() { Revisions.init(); } );
} )( jQuery );