// $Id$ (function ($) { /** * Handle the concept of a fixed number of slots. * * This behavior is dependent on the tableDrag behavior, since it uses the * objects initialized in that behavior to update the row. */ Drupal.behaviors.shortcutDrag = { attach: function (context, settings) { if (Drupal.tableDrag) { var table = $('table#shortcuts'), visibleLength = 0, slots = 0, tableDrag = Drupal.tableDrag.shortcuts; $('> tbody > tr, > tr', table) .filter(':visible') .filter(':odd').filter('.odd') .removeClass('odd').addClass('even') .end().end() .filter(':even').filter('.even') .removeClass('even').addClass('odd') .end().end() .end() .filter('.shortcut-slot-empty').each(function(index) { if ($(this).is(':visible')) { visibleLength++; } slots++; }); // Add a handler for when a row is swapped. tableDrag.row.prototype.onSwap = function (swappedRow) { var disabledIndex = $(table).find('tr').index($(table).find('tr.shortcut-status-disabled')) - slots - 2, count = 0; $(table).find('tr.shortcut-status-enabled').nextAll().filter(':not(.shortcut-slot-empty)').each(function(index) { if (index < disabledIndex) { count++; } }); var total = slots - count; if (total == -1) { var disabled = $(table).find('tr.shortcut-status-disabled'); disabled.after(disabled.prevAll().filter(':not(.shortcut-slot-empty)').get(0)); } else if (total != visibleLength) { if (total > visibleLength) { // Less slots on screen than needed. $('.shortcut-slot-empty:hidden:last').show(); visibleLength++; } else { // More slots on screen than needed. $('.shortcut-slot-empty:visible:last').hide(); visibleLength--; } } }; // Add a handler so when a row is dropped, update fields dropped into new regions. tableDrag.onDrop = function () { // Use "status-message" row instead of "status" row because // "status-{status_name}-message" is less prone to regexp match errors. var statusRow = $(this.rowObject.element).prevAll('tr.shortcut-status').get(0); var statusName = statusRow.className.replace(/([^ ]+[ ]+)*shortcut-status-([^ ]+)([ ]+[^ ]+)*/, '$2'); var statusField = $('select.shortcut-status-select', this.rowObject.element); statusField.val(statusName); return true; }; tableDrag.restripeTable = function () { // :even and :odd are reversed because jQuery counts from 0 and // we count from 1, so we're out of sync. // Match immediate children of the parent element to allow nesting. $('> tbody > tr:visible, > tr:visible', this.table) .filter(':odd').filter('.odd') .removeClass('odd').addClass('even') .end().end() .filter(':even').filter('.even') .removeClass('even').addClass('odd'); }; } } }; /** * Make it so when you enter text into the "New set" textfield, the * corresponding radio button gets selected. */ Drupal.behaviors.newSet = { attach: function (context, settings) { var selectDefault = function() { $($(this).parents('div.form-item').get(1)).find('> label > input').attr('checked', 'checked'); }; $('div.form-item-new input').focus(selectDefault).keyup(selectDefault); } }; })(jQuery);