webmaster@1
|
1 // $Id: profile.js,v 1.2 2007/12/08 14:06:22 goba Exp $ |
webmaster@1
|
2 |
webmaster@1
|
3 /** |
webmaster@1
|
4 * Add functionality to the profile drag and drop table. |
webmaster@1
|
5 * |
webmaster@1
|
6 * This behavior is dependent on the tableDrag behavior, since it uses the |
webmaster@1
|
7 * objects initialized in that behavior to update the row. It shows and hides |
webmaster@1
|
8 * a warning message when removing the last field from a profile category. |
webmaster@1
|
9 */ |
webmaster@1
|
10 Drupal.behaviors.profileDrag = function(context) { |
webmaster@1
|
11 var table = $('#profile-fields'); |
webmaster@1
|
12 var tableDrag = Drupal.tableDrag['profile-fields']; // Get the profile tableDrag object. |
webmaster@1
|
13 |
webmaster@1
|
14 // Add a handler for when a row is swapped, update empty categories. |
webmaster@1
|
15 tableDrag.row.prototype.onSwap = function(swappedRow) { |
webmaster@1
|
16 var rowObject = this; |
webmaster@1
|
17 $('tr.category-message', table).each(function() { |
webmaster@1
|
18 // If the dragged row is in this category, but above the message row, swap it down one space. |
webmaster@1
|
19 if ($(this).prev('tr').get(0) == rowObject.element) { |
webmaster@1
|
20 // Prevent a recursion problem when using the keyboard to move rows up. |
webmaster@1
|
21 if ((rowObject.method != 'keyboard' || rowObject.direction == 'down')) { |
webmaster@1
|
22 rowObject.swap('after', this); |
webmaster@1
|
23 } |
webmaster@1
|
24 } |
webmaster@1
|
25 // This category has become empty |
webmaster@1
|
26 if ($(this).next('tr').is(':not(.draggable)') || $(this).next('tr').size() == 0) { |
webmaster@1
|
27 $(this).removeClass('category-populated').addClass('category-empty'); |
webmaster@1
|
28 } |
webmaster@1
|
29 // This category has become populated. |
webmaster@1
|
30 else if ($(this).is('.category-empty')) { |
webmaster@1
|
31 $(this).removeClass('category-empty').addClass('category-populated'); |
webmaster@1
|
32 } |
webmaster@1
|
33 }); |
webmaster@1
|
34 }; |
webmaster@1
|
35 |
webmaster@1
|
36 // Add a handler so when a row is dropped, update fields dropped into new categories. |
webmaster@1
|
37 tableDrag.onDrop = function() { |
webmaster@1
|
38 dragObject = this; |
webmaster@1
|
39 if ($(dragObject.rowObject.element).prev('tr').is('.category-message')) { |
webmaster@1
|
40 var categoryRow = $(dragObject.rowObject.element).prev('tr').get(0); |
webmaster@1
|
41 var categoryNum = categoryRow.className.replace(/([^ ]+[ ]+)*category-([^ ]+)-message([ ]+[^ ]+)*/, '$2'); |
webmaster@1
|
42 var categoryField = $('select.profile-category', dragObject.rowObject.element); |
webmaster@1
|
43 var weightField = $('select.profile-weight', dragObject.rowObject.element); |
webmaster@1
|
44 var oldcategoryNum = weightField[0].className.replace(/([^ ]+[ ]+)*profile-weight-([^ ]+)([ ]+[^ ]+)*/, '$2'); |
webmaster@1
|
45 |
webmaster@1
|
46 if (!categoryField.is('.profile-category-'+ categoryNum)) { |
webmaster@1
|
47 categoryField.removeClass('profile-category-' + oldcategoryNum).addClass('profile-category-' + categoryNum); |
webmaster@1
|
48 weightField.removeClass('profile-weight-' + oldcategoryNum).addClass('profile-weight-' + categoryNum); |
webmaster@1
|
49 |
webmaster@1
|
50 categoryField.val(categoryField[0].options[categoryNum].value); |
webmaster@1
|
51 } |
webmaster@1
|
52 } |
webmaster@1
|
53 }; |
webmaster@1
|
54 }; |