| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 | (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(':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');          // To maintain the shortcut links limit, we need to move the last          // element from the enabled section to the disabled section.          var changedRow = disabled.prevAll(':not(.shortcut-slot-empty)').not($(this.element)).get(0);          disabled.after(changedRow);          if ($(changedRow).hasClass('draggable')) {            // The dropped element will automatically be marked as changed by            // the tableDrag system. However, the row that swapped with it            // has moved to the "disabled" section, so we need to force its            // status to be disabled and mark it also as changed.            var changedRowObject = new tableDrag.row(changedRow, 'mouse', false, 0, true);            changedRowObject.markChanged();            tableDrag.rowStatusChange(changedRowObject);          }        }        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 () {        tableDrag.rowStatusChange(this.rowObject);        return true;      };      tableDrag.rowStatusChange = function (rowObject) {        // Use "status-message" row instead of "status" row because        // "status-{status_name}-message" is less prone to regexp match errors.        var statusRow = $(rowObject.element).prevAll('tr.shortcut-status').get(0);        var statusName = statusRow.className.replace(/([^ ]+[ ]+)*shortcut-status-([^ ]+)([ ]+[^ ]+)*/, '$2');        var statusField = $('select.shortcut-status-select', rowObject.element);        statusField.val(statusName);      };      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).closest('form').find('.form-item-set .form-type-radio:last input').attr('checked', 'checked');    };    $('div.form-item-new input').focus(selectDefault).keyup(selectDefault);  }};})(jQuery);
 |