var ordering = (function($){ var sort_column = 'rank'; $(document).ready(function(){ initialiseRows(); }); function initialiseRows(){ var last_so = 0; $('div.inline-related tbody tr.form-row').not('.empty-form').not('add-row').each(function(i){ // Gather the required items from this row var sort_td = $(this).find('.field-' + sort_column); var sort_input = $(this).find('.field-' + sort_column + ' input'); var this_sort = parseInt(sort_input.val()); // Remove any current movement buttons if this is a reinitialisation $(sort_td).find('.moveButton').remove(); // On the off chance any existing bad sort data exists replace it so you always start with a clean order if(this_sort != last_so+1){ $(sort_input).val(last_so+1); this_sort = last_so+1; } // Increment the sort loop value last_so = this_sort; // Setup the up/down button html for this row var btnUpHtml = ''; var btnDownHtml = ''; // Apply the up button to all but the first row if(this_sort > 1) $(sort_td).append(btnUpHtml); // Apply the down button to all but the last row if(this_sort < $('div.inline-related tbody tr.form-row').not('.empty-form').not('add-row').length) $(sort_td).append(btnDownHtml); }); // Set the default sort of the hidden add row so new items don't jump to the top on save $('div.inline-related tbody tr.empty-form').find('.field-' + sort_column + ' input').val(last_so+1); } function moveRow(i, dir){ // Grab all rows then find the one we are after and the one to swap it with var rows = $('div.inline-related tbody tr.form-row').not('.empty-form').not('add-row'); var this_row = rows[i]; var this_sort = parseInt($(this_row).find('.field-' + sort_column + ' input.vIntegerField').val()); if (dir) var swap_row = rows[i-1]; else var swap_row = rows[i+1]; var swap_sort = parseInt($(swap_row).find('.field-' + sort_column + ' input.vIntegerField').val()); // Swap the position of the rows and their sort order values if (dir) $(this_row).after($(swap_row)); else $(swap_row).after($(this_row)); $(this_row).find('.field-' + sort_column + ' input.vIntegerField').val(swap_sort); $(swap_row).find('.field-' + sort_column + ' input.vIntegerField').val(this_sort); // Reset the style classes to keep things pretty $(this_row).toggleClass('row1 row2'); $(swap_row).toggleClass('row1 row2'); // Re-initialise the rows to ensure the right buttons are in the right places initialiseRows(); } return { move: moveRow } })(django.jQuery);