mirror of
https://github.com/felixfoertsch/wordpress-dev-env.git
synced 2026-04-18 07:18:43 +02:00
Initial commit
This commit is contained in:
1435
wordpress_plugins/query-monitor/assets/query-monitor-dark.css
Normal file
1435
wordpress_plugins/query-monitor/assets/query-monitor-dark.css
Normal file
File diff suppressed because it is too large
Load Diff
1435
wordpress_plugins/query-monitor/assets/query-monitor.css
Normal file
1435
wordpress_plugins/query-monitor/assets/query-monitor.css
Normal file
File diff suppressed because it is too large
Load Diff
736
wordpress_plugins/query-monitor/assets/query-monitor.js
Normal file
736
wordpress_plugins/query-monitor/assets/query-monitor.js
Normal file
@@ -0,0 +1,736 @@
|
||||
/**
|
||||
* Front-end functionality for Query Monitor.
|
||||
*
|
||||
* @package query-monitor
|
||||
*/
|
||||
|
||||
var QM_i18n = {
|
||||
|
||||
// http://core.trac.wordpress.org/ticket/20491
|
||||
|
||||
number_format : function( number, decimals ) {
|
||||
|
||||
if ( isNaN( number ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ( ! decimals ) {
|
||||
decimals = 0;
|
||||
}
|
||||
|
||||
number = parseFloat( number );
|
||||
|
||||
var num_float = number.toFixed( decimals ),
|
||||
num_int = Math.floor( number ),
|
||||
num_str = num_int.toString(),
|
||||
fraction = num_float.substring( num_float.indexOf( '.' ) + 1, num_float.length ),
|
||||
o = '';
|
||||
|
||||
if ( num_str.length > 3 ) {
|
||||
for ( i = num_str.length; i > 3; i -= 3 ) {
|
||||
o = qm_number_format.thousands_sep + num_str.slice( i - 3, i ) + o;
|
||||
}
|
||||
o = num_str.slice( 0, i ) + o;
|
||||
} else {
|
||||
o = num_str;
|
||||
}
|
||||
|
||||
if ( decimals ) {
|
||||
o = o + qm_number_format.decimal_point + fraction;
|
||||
}
|
||||
|
||||
return o;
|
||||
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
if ( window.jQuery ) {
|
||||
|
||||
jQuery( function($) {
|
||||
var toolbarHeight = $('#wpadminbar').outerHeight();
|
||||
var minheight = 100;
|
||||
var maxheight = ( $(window).height() - toolbarHeight );
|
||||
var minwidth = 300;
|
||||
var maxwidth = $(window).width();
|
||||
var container = $('#query-monitor-main');
|
||||
var body = $('body');
|
||||
var body_margin = body.css('margin-bottom');
|
||||
var container_height_key = 'qm-container-height';
|
||||
var container_pinned_key = 'qm-' + ( $('body').hasClass('wp-admin') ? 'admin' : 'front' ) + '-container-pinned';
|
||||
var container_position_key = 'qm-container-position';
|
||||
var container_width_key = 'qm-container-width';
|
||||
|
||||
if ( container.hasClass('qm-peek') ) {
|
||||
minheight = 27;
|
||||
}
|
||||
|
||||
container.removeClass('qm-no-js').addClass('qm-js');
|
||||
|
||||
if ( $('#qm-fatal').length ) {
|
||||
console.error(qm_l10n.fatal_error + ': ' + $('#qm-fatal').attr('data-qm-message') );
|
||||
|
||||
if ( $('#wp-admin-bar-query-monitor').length ) {
|
||||
$('#wp-admin-bar-query-monitor')
|
||||
.addClass('qm-error')
|
||||
.find('a').eq(0)
|
||||
.text(qm_l10n.fatal_error);
|
||||
|
||||
var fatal_container = document.createDocumentFragment();
|
||||
|
||||
var fatal_message_menu = $('#wp-admin-bar-query-monitor-placeholder')
|
||||
.clone()
|
||||
.attr('id','wp-admin-bar-qm-fatal-message');
|
||||
|
||||
fatal_message_menu
|
||||
.find('a').eq(0)
|
||||
.text($('#qm-fatal').attr('data-qm-message'))
|
||||
.attr('href','#qm-fatal');
|
||||
|
||||
fatal_container.appendChild( fatal_message_menu.get(0) );
|
||||
|
||||
var fatal_file_menu = $('#wp-admin-bar-query-monitor-placeholder')
|
||||
.clone()
|
||||
.attr('id','wp-admin-bar-qm-fatal-file');
|
||||
|
||||
fatal_file_menu
|
||||
.find('a').eq(0)
|
||||
.text($('#qm-fatal').attr('data-qm-file') + ':' + $('#qm-fatal').attr('data-qm-line'))
|
||||
.attr('href','#qm-fatal');
|
||||
|
||||
fatal_container.appendChild( fatal_file_menu.get(0) );
|
||||
|
||||
$('#wp-admin-bar-query-monitor ul').append(fatal_container);
|
||||
}
|
||||
}
|
||||
|
||||
var link_click = function(e){
|
||||
var href = $( this ).attr('href') || $( this ).data('qm-href');
|
||||
|
||||
if ( '#qm-fatal' === href ) {
|
||||
return;
|
||||
}
|
||||
|
||||
show_panel( href );
|
||||
$(href).focus();
|
||||
$('#wp-admin-bar-query-monitor').removeClass('hover');
|
||||
e.preventDefault();
|
||||
};
|
||||
|
||||
var stripes = function( table ) {
|
||||
table.each(function() {
|
||||
$(this).find('tbody tr').removeClass('qm-odd').not('[class*="qm-hide-"]').filter(':even').addClass('qm-odd');
|
||||
} );
|
||||
};
|
||||
|
||||
var show_panel = function( panel ) {
|
||||
container.addClass('qm-show').removeClass('qm-hide');
|
||||
$( '.qm' ).removeClass('qm-panel-show');
|
||||
$('#qm-panels').scrollTop(0);
|
||||
$( panel ).addClass('qm-panel-show');
|
||||
|
||||
if ( container.height() < minheight ) {
|
||||
container.height( minheight );
|
||||
}
|
||||
|
||||
if ( container.hasClass('qm-show-right') ) {
|
||||
body.css( 'margin-bottom', '' );
|
||||
} else {
|
||||
body.css( 'margin-bottom', 'calc( ' + body_margin + ' + ' + container.height() + 'px )' );
|
||||
}
|
||||
|
||||
$('#qm-panel-menu').find('button').removeAttr('aria-selected');
|
||||
$('#qm-panel-menu').find('li').removeClass('qm-current-menu');
|
||||
var selected_menu = $('#qm-panel-menu').find('[data-qm-href="' + panel + '"]').attr('aria-selected',true);
|
||||
|
||||
if ( selected_menu.length ) {
|
||||
var selected_menu_top = selected_menu.position().top - 27;
|
||||
var menu_height = $('#qm-panel-menu').height();
|
||||
var menu_scroll = $('#qm-panel-menu').scrollTop();
|
||||
selected_menu.closest('#qm-panel-menu > ul > li').addClass('qm-current-menu');
|
||||
|
||||
var selected_menu_off_bottom = ( selected_menu_top > ( menu_height ) );
|
||||
var selected_menu_off_top = ( selected_menu_top < 0 );
|
||||
|
||||
if ( selected_menu_off_bottom || selected_menu_off_top ) {
|
||||
$('#qm-panel-menu').scrollTop( selected_menu_top + menu_scroll - ( menu_height / 2 ) + ( selected_menu.outerHeight() / 2 ) );
|
||||
}
|
||||
}
|
||||
|
||||
$('.qm-title-heading select').val(panel);
|
||||
|
||||
localStorage.setItem( container_pinned_key, panel );
|
||||
|
||||
var filters = $( panel ).find('.qm-filter');
|
||||
|
||||
if ( filters.length ) {
|
||||
filters.change();
|
||||
} else {
|
||||
stripes( $(panel).find('table') );
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
if ( $('#wp-admin-bar-query-monitor').length ) {
|
||||
|
||||
var admin_bar_menu_container = document.createDocumentFragment();
|
||||
|
||||
if ( window.qm && window.qm.menu ) {
|
||||
$('#wp-admin-bar-query-monitor')
|
||||
.addClass(qm.menu.top.classname)
|
||||
.attr('dir','ltr')
|
||||
.find('a').eq(0)
|
||||
.html(qm.menu.top.title);
|
||||
|
||||
$.each( qm.menu.sub, function( i, el ) {
|
||||
|
||||
var new_menu = $('#wp-admin-bar-query-monitor-placeholder')
|
||||
.clone()
|
||||
.attr('id','wp-admin-bar-' + el.id);
|
||||
new_menu
|
||||
.find('a').eq(0)
|
||||
.html(el.title)
|
||||
.attr('href',el.href);
|
||||
|
||||
if ( ( typeof el.meta != 'undefined' ) && ( typeof el.meta.classname != 'undefined' ) ) {
|
||||
new_menu.addClass(el.meta.classname);
|
||||
}
|
||||
|
||||
admin_bar_menu_container.appendChild( new_menu.get(0) );
|
||||
|
||||
} );
|
||||
|
||||
$('#wp-admin-bar-query-monitor ul').append(admin_bar_menu_container);
|
||||
}
|
||||
|
||||
$('#wp-admin-bar-query-monitor').find('a').on('click',link_click);
|
||||
|
||||
$('#wp-admin-bar-query-monitor,#wp-admin-bar-query-monitor-default').show();
|
||||
|
||||
} else {
|
||||
container.addClass('qm-peek').removeClass('qm-hide');
|
||||
$('#qm-overview').addClass('qm-panel-show');
|
||||
}
|
||||
|
||||
$('#qm-panel-menu').find('button').on('click',link_click);
|
||||
|
||||
container.find('.qm-filter').on('change',function(e){
|
||||
|
||||
var filter = $(this).attr('data-filter'),
|
||||
table = $(this).closest('table'),
|
||||
tr = table.find('tbody tr[data-qm-' + filter + ']'),
|
||||
// Escape the following chars with a backslash before passing into jQ selectors: [ ] ( ) ' " \
|
||||
val = $(this).val().replace(/[[\]()'"\\]/g, "\\$&"),
|
||||
total = tr.removeClass('qm-hide-' + filter).length,
|
||||
hilite = $(this).attr('data-highlight'),
|
||||
time = 0;
|
||||
|
||||
key = $(this).attr('id');
|
||||
if ( val ) {
|
||||
localStorage.setItem( key, $(this).val() );
|
||||
} else {
|
||||
localStorage.removeItem( key );
|
||||
}
|
||||
|
||||
if ( hilite ) {
|
||||
table.find('tr').removeClass('qm-highlight');
|
||||
}
|
||||
|
||||
if ( $(this).val() !== '' ) {
|
||||
if ( hilite ) {
|
||||
tr.filter('[data-qm-' + hilite + '*="' + val + '"]').addClass('qm-highlight');
|
||||
}
|
||||
tr.not('[data-qm-' + filter + '*="' + val + '"]').addClass('qm-hide-' + filter);
|
||||
$(this).closest('th').addClass('qm-filtered');
|
||||
} else {
|
||||
$(this).closest('th').removeClass('qm-filtered');
|
||||
}
|
||||
|
||||
var matches = tr.filter(':visible');
|
||||
matches.each(function(i){
|
||||
var row_time = $(this).attr('data-qm-time');
|
||||
if ( row_time ) {
|
||||
time += parseFloat( row_time );
|
||||
}
|
||||
});
|
||||
if ( time ) {
|
||||
time = QM_i18n.number_format( time, 4 );
|
||||
}
|
||||
|
||||
if ( table.find('.qm-filtered').length ) {
|
||||
var count = matches.length + ' / ' + tr.length;
|
||||
} else {
|
||||
var count = matches.length;
|
||||
}
|
||||
|
||||
table.find('.qm-items-number').text(count);
|
||||
table.find('.qm-items-time').text(time);
|
||||
|
||||
stripes(table);
|
||||
});
|
||||
|
||||
container.find('.qm-filter').each(function () {
|
||||
var key = $(this).attr('id');
|
||||
var value = localStorage.getItem( key );
|
||||
if ( value !== null ) {
|
||||
// Escape the following chars with a backslash before passing into jQ selectors: [ ] ( ) ' " \
|
||||
var val = value.replace(/[[\]()'"\\]/g, "\\$&");
|
||||
if ( ! $(this).find('option[value="' + val + '"]').length ) {
|
||||
$('<option>').attr('value',value).text(value).appendTo(this);
|
||||
}
|
||||
$(this).val(value).change();
|
||||
}
|
||||
});
|
||||
|
||||
container.find('.qm-filter-trigger').on('click',function(e){
|
||||
var filter = $(this).data('qm-filter'),
|
||||
value = $(this).data('qm-value'),
|
||||
target = $(this).data('qm-target');
|
||||
$('#qm-' + target).find('.qm-filter').not('[data-filter="' + filter + '"]').val('').removeClass('qm-highlight').change();
|
||||
$('#qm-' + target).find('[data-filter="' + filter + '"]').val(value).addClass('qm-highlight').change();
|
||||
show_panel( '#qm-' + target );
|
||||
$('#qm-' + target).focus();
|
||||
e.preventDefault();
|
||||
});
|
||||
|
||||
container.find('.qm-toggle').on('click',function(e){
|
||||
var el = $(this);
|
||||
var currentState = el.attr('aria-expanded');
|
||||
var newState = 'true';
|
||||
if (currentState === 'true') {
|
||||
newState = 'false';
|
||||
}
|
||||
el.attr('aria-expanded', newState);
|
||||
var toggle = $(this).closest('td').find('.qm-toggled');
|
||||
if ( currentState === 'true' ) {
|
||||
if ( toggle.length ) {
|
||||
toggle.slideToggle(200,function(){
|
||||
el.closest('td').removeClass('qm-toggled-on');
|
||||
el.text(el.attr('data-on'));
|
||||
});
|
||||
} else {
|
||||
el.closest('td').removeClass('qm-toggled-on');
|
||||
el.text(el.attr('data-on'));
|
||||
}
|
||||
} else {
|
||||
el.closest('td').addClass('qm-toggled-on');
|
||||
el.text(el.attr('data-off'));
|
||||
toggle.slideToggle(200);
|
||||
}
|
||||
e.preventDefault();
|
||||
});
|
||||
|
||||
container.find('.qm-highlighter').on('mouseenter',function(e){
|
||||
|
||||
var subject = $(this).data('qm-highlight');
|
||||
var table = $(this).closest('table');
|
||||
|
||||
if ( ! subject ) {
|
||||
return;
|
||||
}
|
||||
|
||||
$(this).addClass('qm-highlight');
|
||||
|
||||
$.each( subject.split(' '), function( i, el ){
|
||||
table.find('tr[data-qm-subject="' + el + '"]').addClass('qm-highlight');
|
||||
});
|
||||
|
||||
}).on('mouseleave',function(e){
|
||||
|
||||
$(this).removeClass('qm-highlight');
|
||||
$(this).closest('table').find('tr').removeClass('qm-highlight');
|
||||
|
||||
});
|
||||
|
||||
$('.qm').find('tbody a,tbody button').on('focus',function(e){
|
||||
$(this).closest('tr').addClass('qm-hovered');
|
||||
}).on('blur',function(e){
|
||||
$(this).closest('tr').removeClass('qm-hovered');
|
||||
});
|
||||
|
||||
container.find('.qm table').on('sorted.qm',function(){
|
||||
stripes( $(this) );
|
||||
});
|
||||
|
||||
$( document ).ajaxSuccess( function( event, response, options ) {
|
||||
|
||||
var errors = response.getResponseHeader( 'X-QM-php_errors-error-count' );
|
||||
|
||||
if ( ! errors ) {
|
||||
return event;
|
||||
}
|
||||
|
||||
errors = parseInt( errors, 10 );
|
||||
|
||||
if ( window.console ) {
|
||||
console.group( qm_l10n.ajax_error );
|
||||
}
|
||||
|
||||
for ( var key = 1; key <= errors; key++ ) {
|
||||
|
||||
error = $.parseJSON( response.getResponseHeader( 'X-QM-php_errors-error-' + key ) );
|
||||
|
||||
if ( window.console ) {
|
||||
switch ( error.type ) {
|
||||
case 'warning':
|
||||
console.error( error );
|
||||
break;
|
||||
default:
|
||||
console.warn( error );
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ( $('#qm-php_errors').find('[data-qm-key="' + error.key + '"]').length ) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( $('#wp-admin-bar-query-monitor').length ) {
|
||||
if ( ! qm.ajax_errors[error.type] ) {
|
||||
$('#wp-admin-bar-query-monitor')
|
||||
.addClass('qm-' + error.type)
|
||||
.find('a').first().append('<span class="ab-label qm-ajax-' + error.type + '"> Ajax: ' + error.type + '</span>');
|
||||
}
|
||||
}
|
||||
|
||||
qm.ajax_errors[error.type] = true;
|
||||
|
||||
}
|
||||
|
||||
if ( window.console ) {
|
||||
console.groupEnd();
|
||||
}
|
||||
|
||||
$( '#qm-ajax-errors' ).show();
|
||||
|
||||
return event;
|
||||
|
||||
} );
|
||||
|
||||
$('.qm-auth').on('click',function(e){
|
||||
var state = $('#qm-settings').data('qm-state');
|
||||
var action = ( 'off' === state ? 'on' : 'off' );
|
||||
|
||||
$.ajax(qm_l10n.ajaxurl,{
|
||||
type : 'POST',
|
||||
context : this,
|
||||
data : {
|
||||
action : 'qm_auth_' + action,
|
||||
nonce : qm_l10n.auth_nonce[action]
|
||||
},
|
||||
success : function(response){
|
||||
$(this).text( $(this).data('qm-text-' + action) );
|
||||
$('#qm-settings').attr('data-qm-state',action).data('qm-state',action);
|
||||
},
|
||||
dataType : 'json',
|
||||
xhrFields: {
|
||||
withCredentials: true
|
||||
}
|
||||
});
|
||||
|
||||
e.preventDefault();
|
||||
});
|
||||
|
||||
var editorSuccessIndicator = $('#qm-editor-save-status');
|
||||
editorSuccessIndicator.hide();
|
||||
|
||||
$('.qm-editor-button').on('click',function(e){
|
||||
var state = $('#qm-settings').data('qm-state');
|
||||
var editor = $('#qm-editor-select').val();
|
||||
|
||||
$.ajax(qm_l10n.ajaxurl,{
|
||||
type : 'POST',
|
||||
context : this,
|
||||
data : {
|
||||
action : 'qm_editor_set',
|
||||
nonce : qm_l10n.auth_nonce['editor-set'],
|
||||
editor : editor
|
||||
},
|
||||
success : function(response){
|
||||
if (response.success) {
|
||||
editorSuccessIndicator.show();
|
||||
}
|
||||
},
|
||||
dataType : 'json',
|
||||
xhrFields: {
|
||||
withCredentials: true
|
||||
}
|
||||
});
|
||||
|
||||
e.preventDefault();
|
||||
});
|
||||
|
||||
$.qm.tableSort({target: $('.qm-sortable')});
|
||||
|
||||
var startY, startX, resizerHeight;
|
||||
|
||||
$(document).on('mousedown touchstart', '.qm-resizer', function(event) {
|
||||
resizerHeight = $(this).outerHeight() - 1;
|
||||
startY = container.outerHeight() + ( event.clientY || event.originalEvent.targetTouches[0].pageY );
|
||||
startX = container.outerWidth() + ( event.clientX || event.originalEvent.targetTouches[0].pageX );
|
||||
|
||||
$(document).on('mousemove touchmove', qm_do_resizer_drag);
|
||||
$(document).on('mouseup touchend', qm_stop_resizer_drag);
|
||||
});
|
||||
|
||||
function qm_do_resizer_drag(event) {
|
||||
if ( ! container.hasClass('qm-show-right') ) {
|
||||
var h = ( startY - ( event.clientY || event.originalEvent.targetTouches[0].pageY ) );
|
||||
if ( h >= resizerHeight && h <= maxheight ) {
|
||||
container.height( h );
|
||||
body.css( 'margin-bottom', 'calc( ' + body_margin + ' + ' + h + 'px )' );
|
||||
}
|
||||
} else {
|
||||
var w = ( startX - event.clientX );
|
||||
if ( w >= minwidth && w <= maxwidth ) {
|
||||
container.width( w );
|
||||
}
|
||||
body.css( 'margin-bottom', '' );
|
||||
}
|
||||
}
|
||||
|
||||
function qm_stop_resizer_drag(event) {
|
||||
$(document).off('mousemove touchmove', qm_do_resizer_drag);
|
||||
$(document).off('mouseup touchend', qm_stop_resizer_drag);
|
||||
|
||||
if ( ! container.hasClass('qm-show-right') ) {
|
||||
localStorage.removeItem( container_position_key );
|
||||
localStorage.setItem( container_height_key, container.height() );
|
||||
} else {
|
||||
localStorage.setItem( container_position_key, 'right' );
|
||||
localStorage.setItem( container_width_key, container.width() );
|
||||
}
|
||||
}
|
||||
|
||||
var p = localStorage.getItem( container_position_key );
|
||||
var h = localStorage.getItem( container_height_key );
|
||||
var w = localStorage.getItem( container_width_key );
|
||||
if ( ! container.hasClass('qm-peek') ) {
|
||||
if ( p === 'right' ) {
|
||||
if ( w !== null ) {
|
||||
if ( w < minwidth ) {
|
||||
w = minwidth;
|
||||
}
|
||||
if ( w > maxwidth ) {
|
||||
w = maxwidth;
|
||||
}
|
||||
container.width( w );
|
||||
}
|
||||
container.addClass('qm-show-right');
|
||||
} else if ( p !== 'right' && h !== null ) {
|
||||
if ( h < minheight ) {
|
||||
h = minheight;
|
||||
}
|
||||
if ( h > maxheight ) {
|
||||
h = maxheight;
|
||||
}
|
||||
container.height( h );
|
||||
}
|
||||
}
|
||||
|
||||
$(window).on('resize', function(){
|
||||
var h = container.height();
|
||||
var w = container.width();
|
||||
|
||||
maxheight = ( $(window).height() - toolbarHeight );
|
||||
maxwidth = $(window).width();
|
||||
|
||||
if ( h < minheight ) {
|
||||
container.height( minheight );
|
||||
}
|
||||
if ( h > maxheight ) {
|
||||
container.height( maxheight );
|
||||
}
|
||||
localStorage.setItem( container_height_key, container.height() );
|
||||
|
||||
if ( w > $(window).width() ) {
|
||||
container.width( minwidth );
|
||||
localStorage.setItem( container_width_key, container.width() );
|
||||
}
|
||||
if ( $(window).width() < 960 ) {
|
||||
container.removeClass('qm-show-right');
|
||||
localStorage.removeItem( container_position_key );
|
||||
}
|
||||
});
|
||||
|
||||
$('.qm-button-container-close').click(function(){
|
||||
container.removeClass('qm-show').height('').width('');
|
||||
body.css( 'margin-bottom', '' );
|
||||
localStorage.removeItem( container_pinned_key );
|
||||
});
|
||||
|
||||
$('.qm-button-container-settings,a[href="#qm-settings"]').click(function(){
|
||||
show_panel( '#qm-settings' );
|
||||
$('#qm-settings').focus();
|
||||
});
|
||||
|
||||
$('.qm-button-container-position').click(function(){
|
||||
container.toggleClass('qm-show-right');
|
||||
|
||||
if ( container.hasClass('qm-show-right') ) {
|
||||
var w = localStorage.getItem( container_width_key );
|
||||
|
||||
if ( w !== null && w < $(window).width() ) {
|
||||
container.width( w );
|
||||
}
|
||||
|
||||
body.css( 'margin-bottom', '' );
|
||||
|
||||
localStorage.setItem( container_position_key, 'right' );
|
||||
} else {
|
||||
body.css( 'margin-bottom', 'calc( ' + body_margin + ' + ' + container.height() + 'px )' );
|
||||
|
||||
localStorage.removeItem( container_position_key );
|
||||
}
|
||||
});
|
||||
|
||||
var pinned = localStorage.getItem( container_pinned_key );
|
||||
if ( pinned && $( pinned ).length ) {
|
||||
show_panel( pinned );
|
||||
}
|
||||
|
||||
$('.qm-title-heading select').change(function(){
|
||||
show_panel( $(this).val() );
|
||||
$($(this).val()).focus();
|
||||
});
|
||||
|
||||
} );
|
||||
|
||||
/**
|
||||
* Table sorting library.
|
||||
*
|
||||
* This is a modified version of jQuery table-sort v0.1.1
|
||||
* https://github.com/gajus/table-sort
|
||||
*
|
||||
* Licensed under the BSD.
|
||||
* https://github.com/gajus/table-sort/blob/master/LICENSE
|
||||
*
|
||||
* Author: Gajus Kuizinas <g.kuizinas@anuary.com>
|
||||
*/
|
||||
(function ($) {
|
||||
$.qm = $.qm || {};
|
||||
$.qm.tableSort = function (settings) {
|
||||
// @param object columns NodeList table colums.
|
||||
// @param integer row_width defines the number of columns per row.
|
||||
var table_to_array = function (columns, row_width) {
|
||||
columns = Array.prototype.slice.call(columns, 0);
|
||||
|
||||
var rows = [];
|
||||
var row_index = 0;
|
||||
|
||||
for (var i = 0, j = columns.length; i < j; i += row_width) {
|
||||
var row = [];
|
||||
|
||||
for (var k = 0; k < row_width; k++) {
|
||||
var e = columns[i + k];
|
||||
var data = e.dataset.qmSortWeight;
|
||||
|
||||
if (data === undefined) {
|
||||
data = e.textContent || e.innerText;
|
||||
}
|
||||
|
||||
var number = parseFloat(data);
|
||||
|
||||
data = isNaN(number) ? data : number;
|
||||
|
||||
row.push(data);
|
||||
}
|
||||
|
||||
rows.push({index: row_index++, data: row});
|
||||
}
|
||||
|
||||
return rows;
|
||||
};
|
||||
|
||||
if ( ! settings.target || ! ( settings.target instanceof $) ) {
|
||||
throw 'Target is not defined or it is not instance of jQuery.';
|
||||
}
|
||||
|
||||
settings.target.each(function () {
|
||||
var table = $(this);
|
||||
|
||||
table.find('.qm-sortable-column').on('click', function (e) {
|
||||
var desc = ! $(this).hasClass('qm-sorted-desc');
|
||||
var index = $(this).index();
|
||||
|
||||
table.find('thead th').removeClass('qm-sorted-asc qm-sorted-desc').attr('aria-sort','none');
|
||||
|
||||
if ( desc ) {
|
||||
$(this).addClass('qm-sorted-desc').attr('aria-sort','descending');
|
||||
} else {
|
||||
$(this).addClass('qm-sorted-asc').attr('aria-sort','ascending');
|
||||
}
|
||||
|
||||
table.find('tbody').each(function () {
|
||||
var tbody = $(this);
|
||||
var rows = this.rows;
|
||||
var columns = this.querySelectorAll('th,td');
|
||||
|
||||
if (this.data_matrix === undefined) {
|
||||
this.data_matrix = table_to_array(columns, $(rows[0]).find('th,td').length);
|
||||
}
|
||||
|
||||
var data = this.data_matrix;
|
||||
|
||||
data.sort(function (a, b) {
|
||||
if (a.data[index] == b.data[index]) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return (desc ? a.data[index] > b.data[index] : a.data[index] < b.data[index]) ? -1 : 1;
|
||||
});
|
||||
|
||||
// Detach the tbody to prevent unnecessary overhead related
|
||||
// to the browser environment.
|
||||
tbody = tbody.detach();
|
||||
|
||||
// Convert NodeList into an array.
|
||||
rows = Array.prototype.slice.call(rows, 0);
|
||||
|
||||
var last_row = rows[data[data.length - 1].index];
|
||||
|
||||
for (var i = 0, j = data.length - 1; i < j; i++) {
|
||||
tbody[0].insertBefore(rows[data[i].index], last_row);
|
||||
|
||||
// Restore the index.
|
||||
data[i].index = i;
|
||||
}
|
||||
|
||||
// Restore the index.
|
||||
data[data.length - 1].index = data.length - 1;
|
||||
|
||||
table.append(tbody);
|
||||
});
|
||||
|
||||
table.trigger('sorted.qm');
|
||||
|
||||
e.preventDefault();
|
||||
});
|
||||
});
|
||||
};
|
||||
})(jQuery);
|
||||
|
||||
}
|
||||
|
||||
window.addEventListener('load', function() {
|
||||
if ( ( 'undefined' === typeof jQuery ) || ! window.jQuery ) {
|
||||
/* Fallback for running without jQuery (`QM_NO_JQUERY`) */
|
||||
document.getElementById( 'query-monitor-main' ).className += ' qm-broken';
|
||||
console.error( document.getElementById( 'qm-broken' ).textContent );
|
||||
|
||||
if ( 'undefined' === typeof jQuery ) {
|
||||
console.error( 'QM error from JS: undefined jQuery' );
|
||||
}
|
||||
|
||||
if ( ! window.jQuery ) {
|
||||
console.error( 'QM error from JS: no jQuery' );
|
||||
}
|
||||
|
||||
var menu_item = document.getElementById( 'wp-admin-bar-query-monitor' );
|
||||
if ( menu_item ) {
|
||||
menu_item.addEventListener( 'click', function() {
|
||||
document.getElementById( 'query-monitor-main' ).className += ' qm-show';
|
||||
} );
|
||||
}
|
||||
}
|
||||
} );
|
||||
Reference in New Issue
Block a user