2015-07-10 04:32:30 +00:00
/*global ajaxurl, woocommerce_term_ordering_params */
2011-09-19 16:53:08 +00:00
/* Modifided script from the simple-page-ordering plugin */
2015-06-04 12:21:39 +00:00
jQuery ( function ( $ ) {
2011-09-19 16:53:08 +00:00
2018-02-01 14:46:04 +00:00
var table _selector = 'table.wp-list-table' ,
item _selector = 'tbody tr:not(.inline-edit-row)' ,
2018-04-26 13:11:00 +00:00
term _id _selector = '.column-handle input[name="term_id"]' ,
column _handle = '<td class="column-handle"></td>' ;
2018-02-01 14:46:04 +00:00
if ( 0 === $ ( table _selector ) . find ( '.column-handle' ) . length ) {
2018-04-26 13:11:00 +00:00
$ ( table _selector ) . find ( 'tr:not(.inline-edit-row)' ) . append ( column _handle ) ;
2018-02-01 14:46:04 +00:00
term _id _selector = '.check-column input' ;
}
2014-01-31 02:44:17 +00:00
2018-01-31 20:17:06 +00:00
$ ( table _selector ) . find ( '.column-handle' ) . show ( ) ;
2018-01-31 13:34:55 +00:00
2018-04-26 13:11:00 +00:00
$ . 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 ( ) ;
} ;
2018-02-21 13:34:07 +00:00
$ ( document ) . ajaxComplete ( function ( event , request , options ) {
2018-04-26 13:11:00 +00:00
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 ( ) ;
2018-02-21 13:34:07 +00:00
$ ( document . body ) . trigger ( 'init_tooltips' ) ;
}
2018-02-08 12:35:57 +00:00
} ) ;
2018-01-31 13:34:55 +00:00
$ ( table _selector ) . sortable ( {
items : item _selector ,
2011-09-19 16:53:08 +00:00
cursor : 'move' ,
2017-05-18 14:22:12 +00:00
handle : '.column-handle' ,
2011-09-19 16:53:08 +00:00
axis : 'y' ,
2012-04-10 18:06:12 +00:00
forcePlaceholderSize : true ,
helper : 'clone' ,
opacity : 0.65 ,
2011-09-19 16:53:08 +00:00
placeholder : 'product-cat-placeholder' ,
scrollSensitivity : 40 ,
2015-06-04 12:21:39 +00:00
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' ) ;
2011-09-19 16:53:08 +00:00
ui . item . css ( 'outline' , '1px solid #aaa' ) ;
} ,
2015-06-04 12:21:39 +00:00
stop : function ( event , ui ) {
ui . item . removeAttr ( 'style' ) ;
ui . item . children ( 'td, th' ) . css ( 'border-bottom-width' , '1px' ) ;
2011-09-19 16:53:08 +00:00
} ,
2015-06-04 12:21:39 +00:00
update : function ( event , ui ) {
2018-02-01 14:46:04 +00:00
var termid = ui . item . find ( term _id _selector ) . val ( ) ; // this post id
2015-06-04 12:21:39 +00:00
var termparent = ui . item . find ( '.parent' ) . html ( ) ; // post parent
2014-01-31 02:44:17 +00:00
2018-02-01 14:46:04 +00:00
var prevtermid = ui . item . prev ( ) . find ( term _id _selector ) . val ( ) ;
var nexttermid = ui . item . next ( ) . find ( term _id _selector ) . val ( ) ;
2014-01-31 02:44:17 +00:00
2015-06-04 12:21:39 +00:00
// Can only sort in same tree
2015-06-04 12:23:07 +00:00
var prevtermparent , nexttermparent ;
2015-06-04 12:21:39 +00:00
if ( prevtermid !== undefined ) {
2015-06-04 12:33:49 +00:00
prevtermparent = ui . item . prev ( ) . find ( '.parent' ) . html ( ) ;
2015-06-04 12:21:39 +00:00
if ( prevtermparent !== termparent ) {
prevtermid = undefined ;
}
2011-09-19 16:53:08 +00:00
}
2014-01-31 02:44:17 +00:00
2015-06-04 12:21:39 +00:00
if ( nexttermid !== undefined ) {
nexttermparent = ui . item . next ( ) . find ( '.parent' ) . html ( ) ;
if ( nexttermparent !== termparent ) {
nexttermid = undefined ;
}
2014-01-31 02:44:17 +00:00
}
2015-06-04 12:21:39 +00:00
// 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 ) ) {
2018-01-31 13:34:55 +00:00
$ ( table _selector ) . sortable ( 'cancel' ) ;
2011-09-19 16:53:08 +00:00
return ;
}
2014-01-31 02:44:17 +00:00
2015-06-04 12:21:39 +00:00
// Show Spinner
2018-01-31 20:17:06 +00:00
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;" />' ) ;
2014-01-31 02:44:17 +00:00
2015-06-04 12:21:39 +00:00
// Go do the sorting stuff via ajax
2014-01-31 02:44:17 +00:00
$ . post ( ajaxurl , { action : 'woocommerce_term_ordering' , id : termid , nextid : nexttermid , thetaxonomy : woocommerce _term _ordering _params . taxonomy } , function ( response ) {
2015-06-04 12:21:39 +00:00
if ( response === 'children' ) {
window . location . reload ( ) ;
} else {
2018-01-31 20:17:06 +00:00
ui . item . find ( '.check-column input' ) . show ( ) ;
ui . item . find ( '.check-column' ) . find ( 'img' ) . remove ( ) ;
2011-09-19 16:53:08 +00:00
}
} ) ;
2014-01-31 02:44:17 +00:00
2015-06-04 12:33:49 +00:00
// Fix cell colors
2015-06-04 12:21:39 +00:00
$ ( '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' ) ;
}
2011-09-19 16:53:08 +00:00
} ) ;
}
} ) ;
} ) ;