| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- /*global ajaxurl, woocommerce_term_ordering_params */
- /* Modifided script from the simple-page-ordering plugin */
- jQuery( function( $ ) {
- var table_selector = 'table.wp-list-table',
- item_selector = 'tbody tr:not(.inline-edit-row)',
- term_id_selector = '.column-handle input[name="term_id"]',
- column_handle = '<td class="column-handle"></td>';
- if ( 0 === $( table_selector ).find( '.column-handle' ).length ) {
- $( table_selector ).find( 'tr:not(.inline-edit-row)' ).append( column_handle );
- term_id_selector = '.check-column input';
- }
- $( table_selector ).find( '.column-handle' ).show();
- $.wc_add_missing_sort_handles = function() {
- var all_table_rows = $( table_selector ).find('tbody > tr');
- var rows_with_handle = $( table_selector ).find('tbody > tr > td.column-handle').parent();
- if ( all_table_rows.length !== rows_with_handle.length ) {
- all_table_rows.each(function(index, elem){
- if ( ! rows_with_handle.is( elem ) ) {
- $( elem ).append( column_handle );
- }
- });
- }
- $( table_selector ).find( '.column-handle' ).show();
- };
- $( document ).ajaxComplete( function( event, request, options ) {
- if (
- request &&
- 4 === request.readyState &&
- 200 === request.status &&
- options.data &&
- ( 0 <= options.data.indexOf( '_inline_edit' ) || 0 <= options.data.indexOf( 'add-tag' ) )
- ) {
- $.wc_add_missing_sort_handles();
- $( document.body ).trigger( 'init_tooltips' );
- }
- } );
- $( table_selector ).sortable({
- items: item_selector,
- cursor: 'move',
- handle: '.column-handle',
- axis: 'y',
- forcePlaceholderSize: true,
- helper: 'clone',
- opacity: 0.65,
- placeholder: 'product-cat-placeholder',
- scrollSensitivity: 40,
- start: function( event, ui ) {
- if ( ! ui.item.hasClass( 'alternate' ) ) {
- ui.item.css( 'background-color', '#ffffff' );
- }
- ui.item.children( 'td, th' ).css( 'border-bottom-width', '0' );
- ui.item.css( 'outline', '1px solid #aaa' );
- },
- stop: function( event, ui ) {
- ui.item.removeAttr( 'style' );
- ui.item.children( 'td, th' ).css( 'border-bottom-width', '1px' );
- },
- update: function( event, ui ) {
- var termid = ui.item.find( term_id_selector ).val(); // this post id
- var termparent = ui.item.find( '.parent' ).html(); // post parent
- var prevtermid = ui.item.prev().find( term_id_selector ).val();
- var nexttermid = ui.item.next().find( term_id_selector ).val();
- // Can only sort in same tree
- var prevtermparent, nexttermparent;
- if ( prevtermid !== undefined ) {
- prevtermparent = ui.item.prev().find( '.parent' ).html();
- if ( prevtermparent !== termparent) {
- prevtermid = undefined;
- }
- }
- if ( nexttermid !== undefined ) {
- nexttermparent = ui.item.next().find( '.parent' ).html();
- if ( nexttermparent !== termparent) {
- nexttermid = undefined;
- }
- }
- // If previous and next not at same tree level, or next not at same tree level and
- // the previous is the parent of the next, or just moved item beneath its own children.
- if (
- ( prevtermid === undefined && nexttermid === undefined ) ||
- ( nexttermid === undefined && nexttermparent === prevtermid ) ||
- ( nexttermid !== undefined && prevtermparent === termid )
- ) {
- $( table_selector ).sortable( 'cancel' );
- return;
- }
- // Show Spinner
- ui.item.find( '.check-column input' ).hide();
- ui.item
- .find( '.check-column' )
- .append( '<img alt="processing" src="images/wpspin_light.gif" class="waiting" style="margin-left: 6px;" />' );
- // Go do the sorting stuff via ajax.
- $.post(
- ajaxurl,
- {
- action: 'woocommerce_term_ordering',
- id: termid,
- nextid: nexttermid,
- thetaxonomy: woocommerce_term_ordering_params.taxonomy
- },
- function(response) {
- if ( response === 'children' ) {
- window.location.reload();
- } else {
- ui.item.find( '.check-column input' ).show();
- ui.item.find( '.check-column' ).find( 'img' ).remove();
- }
- }
- );
- // Fix cell colors
- $( 'table.widefat tbody tr' ).each( function() {
- var i = jQuery( 'table.widefat tbody tr' ).index( this );
- if ( i%2 === 0 ) {
- jQuery( this ).addClass( 'alternate' );
- } else {
- jQuery( this ).removeClass( 'alternate' );
- }
- });
- }
- });
- });
|