Index: nodequeue_dragdrop.js =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/nodequeue/nodequeue_dragdrop.js,v retrieving revision 1.1 diff -u -p -r1.1 nodequeue_dragdrop.js --- nodequeue_dragdrop.js 6 Jan 2009 15:23:00 -0000 1.1 +++ nodequeue_dragdrop.js 14 May 2009 17:35:52 -0000 @@ -1,4 +1,85 @@ -$(document).ready(function() { +// $Id$ + +Drupal.behaviors.nodequeueInit = function(context) { + Drupal.nodequeue = {changed: false}; +} + +Drupal.behaviors.nodequeueReverse = function(context) { + $('#edit-reverse').click(function(){ + // reverse table rows... + $('tr.draggable').each(function(i){ + $('.nodequeue-dragdrop tbody').prepend(this); + }); + + // ...and update node positions + var size = $('.node-position').size(); + $('.node-position').each(function(i){ + var val = $(this).val(); + $(this).val(size - val + 1); + }); + + if (Drupal.nodequeue.changed == false) { + $(Drupal.theme('tableDragChangedWarning')).insertAfter('.nodequeue-dragdrop').hide().fadeIn('slow'); + Drupal.nodequeue.changed = true; + } + + nodequeueRestripeTable(); + + return false; + }); +}; + +Drupal.behaviors.nodequeueShuffle = function(context) { + $('#edit-shuffle').click(function(){ + // randomize table rows... + rows = $('table.nodequeue-dragdrop tbody tr:not(:hidden)').get(); + rows.sort(function(){return (Math.round(Math.random())-0.5);}); + $.each(rows, function(i, row) { + $('.nodequeue-dragdrop tbody').prepend(this); + }); + + // ...and update node positions + var size = $('.node-position').size(); + $('.node-position').each(function(i){ + var val = $(this).val(); + $(this).val(size); + size--; + }); + + if (Drupal.nodequeue.changed == false) { + $(Drupal.theme('tableDragChangedWarning')).insertAfter('.nodequeue-dragdrop').hide().fadeIn('slow'); + Drupal.nodequeue.changed = true; + } + + nodequeueRestripeTable(); + + return false; + }); +}; + +Drupal.behaviors.nodequeueClear = function(context) { + $('#edit-clear').click(function(){ + // mark nodes for removal + $('.node-position').each(function(i){ + $(this).val('r'); + }); + + // remove table rows... + rows = $('table.nodequeue-dragdrop tbody tr:not(:hidden)').hide(); + + // display 'empty queue' message + $('.nodequeue-dragdrop tbody').prepend('No nodes in this queue.'); + + if (Drupal.nodequeue.changed == false) { + $(Drupal.theme('tableDragChangedWarning')).insertAfter('.nodequeue-dragdrop').hide().fadeIn('slow'); + Drupal.nodequeue.changed = true; + } + + return false; + }); +}; + +Drupal.behaviors.nodequeueRemoveNode = function(context) { $('a.nodequeue-remove').css("display", "block"); $('a.nodequeue-remove').click(function() { a = $(this).attr('id'); @@ -6,15 +87,23 @@ $(document).ready(function() { $(a).val('r'); //Hide the current row $(this).parent().parent().addClass('hidden').hide(); - //Restripe the table - // :even and :odd are reversed because jquery counts from 0 and - // we count from 1, so we're out of sync. - $('table.nodequeue-dragdrop tr:not(:hidden)') - .filter(':odd').filter('.odd') - .removeClass('odd').addClass('even') - .end().end() - .filter(':even').filter('.even') - .removeClass('even').addClass('odd'); + + nodequeueRestripeTable() + return false; }); -}); \ No newline at end of file +} + +/** + * Restripe the nodequeue table after removing an element or changing the + * order of the elements. + */ +function nodequeueRestripeTable() { + $('table.nodequeue-dragdrop tbody tr:not(:hidden)') + .filter(':odd') //.filter('.odd') + .removeClass('odd').addClass('even') + .end() + .filter(':even') + .removeClass('even').addClass('odd') + .end(); +}