95 lines
4.5 KiB
JavaScript
95 lines
4.5 KiB
JavaScript
// global nimbleAdminLocalized
|
|
// Introduced for https://github.com/presscustomizr/nimble-builder/issues/449
|
|
(function ($) {
|
|
var button_printed = false,
|
|
// the callback is ran until unsuscribed when headerToolBar element has been detected and the btn printed
|
|
_callback = function () {
|
|
if ( button_printed )
|
|
return;
|
|
|
|
var $headerToolBar = $('#editor').find('.edit-post-header__toolbar');
|
|
var _printBtn = function() {
|
|
var html = $($('#sek-edit-with-nb').html());
|
|
setTimeout( function() {
|
|
$headerToolBar.append( html );
|
|
}, 300 );// <= May 2020 : introduce a delay to make sure NB edit btn is printed after all gutenberg menu items. @todo find the relevant event to do that instead.
|
|
button_printed = true;
|
|
// unsubscribe the listener
|
|
// documented here : https://developer.wordpress.org/block-editor/packages/packages-data/#subscribe
|
|
wp.data.subscribe(_callback)();
|
|
};
|
|
|
|
if ( $headerToolBar.length > 0 ) {
|
|
_printBtn();
|
|
} else {
|
|
// Nov 2020 => retro compat with WP version < 5.6
|
|
$headerToolBar = $('#editor').find('.edit-post-header-toolbar');
|
|
if ( $headerToolBar.length > 0 ) {
|
|
_printBtn();
|
|
}
|
|
}
|
|
};
|
|
|
|
// PRINT THE BUTTON WHEN element .edit-post-header-toolbar has been rendered
|
|
// wp.data.subscribe() documented here : https://developer.wordpress.org/block-editor/packages/packages-data/#subscribe
|
|
// Given a listener function, the function will be called any time the state value
|
|
// of one of the registered stores has changed. This function returns a unsubscribe
|
|
// function used to stop the subscription.
|
|
wp.data.subscribe(_callback);
|
|
|
|
// ATTACH EVENT LISTENER
|
|
// with delegation
|
|
// When editing an existing post, the customizer url is rendered server side in the data-cust-url='' attribute
|
|
// @see inc/admin/nimble-admin.php => sek_print_nb_btn_edit_with()
|
|
//
|
|
// When creating a new post, the customizer url is generated with an ajax call
|
|
$('body').on( 'click', '#sek-edit-with-nimble', function(evt) {
|
|
evt.preventDefault();
|
|
var $clickedEl = $(this),
|
|
_url = $clickedEl.data('cust-url'),
|
|
attempts = 0,
|
|
_openCustomizer = function( customizer_url ) {
|
|
// We don't want to enter in an infinite loop, that's why the number of attempts is limited to 5 if isSavingPost()
|
|
if ( wp.data.select('core/editor').isSavingPost() && attempts < 5 ) {
|
|
_.delay(function () {
|
|
self._openCustomizer();
|
|
attempts++;
|
|
}, 300 );
|
|
} else {
|
|
location.href = customizer_url;
|
|
}
|
|
//$clickedEl.removeClass('sek-loading-customizer');
|
|
};
|
|
|
|
if ( _.isEmpty( _url ) ) {
|
|
// for new post, the url is empty, let's generate it server side with an ajax call
|
|
var post_id = wp.data.select('core/editor').getCurrentPostId();
|
|
|
|
// introduced for https://github.com/presscustomizr/nimble-builder/issues/509
|
|
$clickedEl.addClass('sek-loading-customizer').removeClass('button-primary');
|
|
|
|
wp.ajax.post( 'sek_get_customize_url_for_nimble_edit_button', {
|
|
nimble_edit_post_id : post_id
|
|
}).done( function( resp ) {
|
|
_openCustomizer( resp );
|
|
}).fail( function( resp ) {
|
|
$clickedEl.removeClass('sek-loading-customizer').addClass('button-primary');
|
|
|
|
// If the ajax request fails, let's save the draft with a Nimble Builder title, and refresh the page, so the url is generated server side on next load.
|
|
var post_title = wp.data.select('core/editor').getEditedPostAttribute('title');
|
|
if ( !post_title ) {
|
|
wp.data.dispatch('core/editor').editPost({ title: 'Nimble Builder #' + post_id });
|
|
}
|
|
wp.data.dispatch('core/editor').savePost();
|
|
_.delay(function () {
|
|
// off the javascript pop up warning if post not saved yet
|
|
$( window ).off( 'beforeunload' );
|
|
location.href = location.href;
|
|
}, 300 );
|
|
});
|
|
} else {
|
|
_openCustomizer( _url );
|
|
}
|
|
});//.on( 'click'
|
|
|
|
})(jQuery); |