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