webmaster@1: // $Id: profile.js,v 1.2 2007/12/08 14:06:22 goba Exp $ webmaster@1: webmaster@1: /** webmaster@1: * Add functionality to the profile drag and drop table. webmaster@1: * webmaster@1: * This behavior is dependent on the tableDrag behavior, since it uses the webmaster@1: * objects initialized in that behavior to update the row. It shows and hides webmaster@1: * a warning message when removing the last field from a profile category. webmaster@1: */ webmaster@1: Drupal.behaviors.profileDrag = function(context) { webmaster@1: var table = $('#profile-fields'); webmaster@1: var tableDrag = Drupal.tableDrag['profile-fields']; // Get the profile tableDrag object. webmaster@1: webmaster@1: // Add a handler for when a row is swapped, update empty categories. webmaster@1: tableDrag.row.prototype.onSwap = function(swappedRow) { webmaster@1: var rowObject = this; webmaster@1: $('tr.category-message', table).each(function() { webmaster@1: // If the dragged row is in this category, but above the message row, swap it down one space. webmaster@1: if ($(this).prev('tr').get(0) == rowObject.element) { webmaster@1: // Prevent a recursion problem when using the keyboard to move rows up. webmaster@1: if ((rowObject.method != 'keyboard' || rowObject.direction == 'down')) { webmaster@1: rowObject.swap('after', this); webmaster@1: } webmaster@1: } webmaster@1: // This category has become empty webmaster@1: if ($(this).next('tr').is(':not(.draggable)') || $(this).next('tr').size() == 0) { webmaster@1: $(this).removeClass('category-populated').addClass('category-empty'); webmaster@1: } webmaster@1: // This category has become populated. webmaster@1: else if ($(this).is('.category-empty')) { webmaster@1: $(this).removeClass('category-empty').addClass('category-populated'); webmaster@1: } webmaster@1: }); webmaster@1: }; webmaster@1: webmaster@1: // Add a handler so when a row is dropped, update fields dropped into new categories. webmaster@1: tableDrag.onDrop = function() { webmaster@1: dragObject = this; webmaster@1: if ($(dragObject.rowObject.element).prev('tr').is('.category-message')) { webmaster@1: var categoryRow = $(dragObject.rowObject.element).prev('tr').get(0); webmaster@1: var categoryNum = categoryRow.className.replace(/([^ ]+[ ]+)*category-([^ ]+)-message([ ]+[^ ]+)*/, '$2'); webmaster@1: var categoryField = $('select.profile-category', dragObject.rowObject.element); webmaster@1: var weightField = $('select.profile-weight', dragObject.rowObject.element); webmaster@1: var oldcategoryNum = weightField[0].className.replace(/([^ ]+[ ]+)*profile-weight-([^ ]+)([ ]+[^ ]+)*/, '$2'); webmaster@1: webmaster@1: if (!categoryField.is('.profile-category-'+ categoryNum)) { webmaster@1: categoryField.removeClass('profile-category-' + oldcategoryNum).addClass('profile-category-' + categoryNum); webmaster@1: weightField.removeClass('profile-weight-' + oldcategoryNum).addClass('profile-weight-' + categoryNum); webmaster@1: webmaster@1: categoryField.val(categoryField[0].options[categoryNum].value); webmaster@1: } webmaster@1: } webmaster@1: }; webmaster@1: };