diff options
Diffstat (limited to 'modules/shortcut/shortcut.admin.js')
-rw-r--r-- | modules/shortcut/shortcut.admin.js | 28 |
1 files changed, 22 insertions, 6 deletions
diff --git a/modules/shortcut/shortcut.admin.js b/modules/shortcut/shortcut.admin.js index 5e71e6fb6..453a40231 100644 --- a/modules/shortcut/shortcut.admin.js +++ b/modules/shortcut/shortcut.admin.js @@ -33,7 +33,7 @@ Drupal.behaviors.shortcutDrag = { 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) { + $(table).find('tr.shortcut-status-enabled').nextAll(':not(.shortcut-slot-empty)').each(function(index) { if (index < disabledIndex) { count++; } @@ -41,7 +41,19 @@ Drupal.behaviors.shortcutDrag = { 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)); + // 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', self.indentEnabled, self.maxDepth, true); + changedRowObject.markChanged(); + rowStatusChange(changedRowObject); + } } else if (total != visibleLength) { if (total > visibleLength) { @@ -59,14 +71,18 @@ Drupal.behaviors.shortcutDrag = { // Add a handler so when a row is dropped, update fields dropped into new regions. tableDrag.onDrop = function () { + rowStatusChange(this.rowObject); + return true; + }; + + function rowStatusChange(rowObject) { // 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 statusRow = $(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); + var statusField = $('select.shortcut-status-select', rowObject.element); statusField.val(statusName); - return true; - }; + } tableDrag.restripeTable = function () { // :even and :odd are reversed because jQuery counts from 0 and |