mirror of
https://github.com/felixfoertsch/wordpress-dev-env.git
synced 2026-04-18 07:18:43 +02:00
216 lines
7.4 KiB
JavaScript
216 lines
7.4 KiB
JavaScript
jQuery( document ).ready( function() {
|
|
|
|
var dbsTable = jQuery( '#debug-bar-shortcodes' );
|
|
|
|
/* Make sure the spinner also works in the front-end */
|
|
dbsTable.find( 'span.spinner' ).css({ 'background-image': 'url("' + i18nDbShortcodes.spinner + '")' });
|
|
|
|
|
|
/* Show/hide action links */
|
|
/* @todo Keep the action links visible on associated debug-bar-shortcodes-details and
|
|
debug-bar-shortcodes-uses rows */
|
|
dbsTable.on( 'mouseenter.dbs-action-links', 'tr', function() {
|
|
jQuery( this ).find( 'div.row-actions' ).css({ 'visibility': 'visible' });
|
|
})
|
|
.on( 'mouseleave.dbs-action-links', 'tr', function() {
|
|
jQuery( this ).find( 'div.row-actions' ).css({ 'visibility': 'hidden' });
|
|
});
|
|
|
|
|
|
/* Show/hide details */
|
|
dbsTable.on( 'click', 'a.debug-bar-shortcodes-view-details', function( event ) {
|
|
var targetTr = jQuery( this ).closest( 'tr' ).next( 'tr.debug-bar-shortcodes-details' );
|
|
event.preventDefault();
|
|
|
|
if ( jQuery( this ).text() === i18nDbShortcodes.view_details ) {
|
|
targetTr.show();
|
|
jQuery( this ).text( i18nDbShortcodes.hide_details );
|
|
}
|
|
else {
|
|
targetTr.hide();
|
|
jQuery( this ).text( i18nDbShortcodes.view_details );
|
|
}
|
|
});
|
|
|
|
|
|
/* Show/hide group of found uses */
|
|
dbsTable.on( 'click', 'a.debug-bar-shortcodes-view-use', function( event ) {
|
|
var targetTr;
|
|
event.preventDefault();
|
|
|
|
targetTr = jQuery( this ).closest( 'tr' ).next( 'tr' );
|
|
if ( targetTr.hasClass( 'debug-bar-shortcodes-details' ) ) {
|
|
targetTr = targetTr.next( 'tr' );
|
|
}
|
|
if ( targetTr.hasClass( 'debug-bar-shortcodes-uses' ) ) {
|
|
if ( jQuery( this ).text() === i18nDbShortcodes.view_use ) {
|
|
targetTr.show();
|
|
jQuery( this ).text( i18nDbShortcodes.hide_use );
|
|
}
|
|
else {
|
|
targetTr.hide();
|
|
jQuery( this ).text( i18nDbShortcodes.view_use );
|
|
}
|
|
}
|
|
});
|
|
|
|
|
|
/* Retrieve & show details if there were none */
|
|
dbsTable.on( 'click', 'a.debug-bar-shortcodes-get-details', function( event ) {
|
|
var eventTarget, targetShortcode, spinner;
|
|
event.preventDefault();
|
|
|
|
eventTarget = jQuery( this );
|
|
targetShortcode = this.hash.substring( 1 );
|
|
spinner = eventTarget.closest( 'td.column-title' ).find( 'span.spinner' );
|
|
spinner.addClass( 'is-active' );
|
|
|
|
jQuery.ajax({
|
|
url: ( ajaxurl ) ? ajaxurl : i18nDbShortcodes.ajaxurl,
|
|
type: 'post',
|
|
data: {
|
|
'action': 'debug-bar-shortcodes-retrieve',
|
|
'dbs-nonce': i18nDbShortcodes.nonce,
|
|
'shortcode': targetShortcode
|
|
},
|
|
success: function( response ) {
|
|
var resData, nrOfColumns, supplemental;
|
|
|
|
// Handle errors
|
|
// -1 is nonce error, no proper response received
|
|
// 0 no wp ajax action hook found for this action
|
|
if ( 'string' === typeof( response ) ) {
|
|
// Remove all retrieve details links to prevent user trying it again.
|
|
jQuery( 'a.debug-bar-shortcodes-get-details' ).remove();
|
|
alert( i18nDbShortcodes.illegal );
|
|
}
|
|
else {
|
|
resData = wpAjax.parseAjaxResponse( response, 'ajax-response' );
|
|
|
|
if ( ! resData.responses || 1 > resData.responses.length || resData.errors ) {
|
|
// Didn't receive a proper response or received a WP error response
|
|
console.log( 'Received response: ' + response );
|
|
alert( i18nDbShortcodes.error );
|
|
}
|
|
else if ( '1' !== resData.responses[0].id || ! resData.responses[0].data || 0 === resData.responses[0].data.length ) {
|
|
// No info found
|
|
/* @todo Usability: row actions are hidden on mouseleave, so this feedback may not be seen
|
|
figure out a way to make this easier to see
|
|
(make row actions visible & highlight kind of thing, but is not so easy to do */
|
|
eventTarget.replaceWith( i18nDbShortcodes.no_details );
|
|
}
|
|
else {
|
|
// Found some ;-)
|
|
nrOfColumns = ( eventTarget.closest( 'tr' ).find( 'td' ).length - 1 );
|
|
resData = resData.responses[0];
|
|
supplemental = resData.supplemental;
|
|
resData = resData.data;
|
|
resData = resData.replace( /\{colspan\}/g, nrOfColumns );
|
|
|
|
if ( eventTarget.closest( 'tr' ).hasClass( 'even' ) ) {
|
|
resData = jQuery( resData ).addClass( 'even' );
|
|
}
|
|
|
|
eventTarget.closest( 'tr' ).after( resData );
|
|
eventTarget.text( i18nDbShortcodes.view_details )
|
|
.removeClass( 'debug-bar-shortcodes-get-details' )
|
|
.addClass( 'debug-bar-shortcodes-view-details' ).click();
|
|
if ( supplemental.url_link ) {
|
|
eventTarget.closest( 'div.row-actions' ).append( supplemental.url_link );
|
|
}
|
|
}
|
|
}
|
|
spinner.removeClass( 'is-active' );
|
|
},
|
|
error: handleAjaxError
|
|
});
|
|
});
|
|
|
|
|
|
/* Find all uses of the shortcodes */
|
|
dbsTable.on( 'click', 'a.debug-bar-shortcodes-find', function( event ) {
|
|
var eventTarget, targetShortcode, spinner;
|
|
event.preventDefault();
|
|
|
|
eventTarget = jQuery( this );
|
|
targetShortcode = this.hash.substring( 1 );
|
|
spinner = eventTarget.closest( 'td.column-title' ).find( 'span.spinner' );
|
|
spinner.addClass( 'is-active' );
|
|
|
|
jQuery.ajax({
|
|
url: ( ajaxurl ) ? ajaxurl : i18nDbShortcodes.ajaxurl,
|
|
type: 'post',
|
|
data: {
|
|
'action': 'debug-bar-shortcodes-find',
|
|
'dbs-nonce': i18nDbShortcodes.nonce,
|
|
'shortcode': targetShortcode
|
|
},
|
|
success: function( response ) {
|
|
var resData, nrOfColumns, nextTr;
|
|
|
|
// Handle errors
|
|
// -1 is nonce error, no proper response received
|
|
// 0 no wp ajax action hook found for this action
|
|
if ( 'string' === typeof( response ) ) {
|
|
// Remove all find links to prevent user trying it again.
|
|
jQuery( 'a.debug-bar-shortcodes-find' ).remove();
|
|
alert( i18nDbShortcodes.illegal );
|
|
}
|
|
else {
|
|
resData = wpAjax.parseAjaxResponse( response, 'ajax-response' );
|
|
|
|
if ( ! resData.responses || 1 > resData.responses.length || resData.errors ) {
|
|
// Didn't receive a proper response or received a WP error response
|
|
console.log( 'Received response: ' + response );
|
|
alert( i18nDbShortcodes.error );
|
|
}
|
|
else if ( '1' !== resData.responses[0].id || ! resData.responses[0].data || 0 === resData.responses[0].data.length ) {
|
|
// No uses found
|
|
/* @todo Usability: row actions are hidden on mouseleave, so this feedback may not be seen
|
|
figure out a way to make this easier to see
|
|
(make row actions visible & highlight kind of thing, but is not so easy to do */
|
|
eventTarget.replaceWith( i18nDbShortcodes.not_in_use );
|
|
}
|
|
else {
|
|
// Found some ;-)
|
|
nrOfColumns = ( eventTarget.closest( 'tr' ).find( 'td' ).length - 1 );
|
|
resData = resData.responses[0];
|
|
resData = resData.data;
|
|
resData = resData.replace( /\{colspan\}/g, nrOfColumns );
|
|
|
|
nextTr = eventTarget.closest( 'tr' ).next( 'tr' );
|
|
if ( nextTr.hasClass( 'debug-bar-shortcodes-details' ) ) {
|
|
nextTr = nextTr.next( 'tr' );
|
|
}
|
|
|
|
if ( eventTarget.closest( 'tr' ).hasClass( 'even' ) ) {
|
|
resData = jQuery( resData ).addClass( 'even' );
|
|
}
|
|
|
|
nextTr.before( resData );
|
|
eventTarget.text( i18nDbShortcodes.hide_use )
|
|
.removeClass( 'debug-bar-shortcodes-find' )
|
|
.addClass( 'debug-bar-shortcodes-view-use' );
|
|
}
|
|
}
|
|
|
|
spinner.removeClass( 'is-active' );
|
|
},
|
|
error: handleAjaxError
|
|
});
|
|
});
|
|
|
|
function handleAjaxError( response ) {
|
|
/* Triggered by http errors and by various jQuery errors such as:
|
|
- 'junk after document element'
|
|
- 'not well-formed'
|
|
- 'undefined entity'
|
|
*/
|
|
if ( 'undefined' !== typeof( response ) ) {
|
|
console.log( 'Received response: ' + response );
|
|
}
|
|
dbsTable.find( 'span.spinner' ).removeClass( 'is-active' );
|
|
alert( i18nDbShortcodes.error );
|
|
}
|
|
});
|