diff --git a/core/modules/shortcut/shortcut.admin.js b/core/modules/shortcut/shortcut.admin.js index 5e71e6fb654638fe0422483cf6fdc23f469ca24c..9a730fa67269795383da582ca24454492698550c 100644 --- a/core/modules/shortcut/shortcut.admin.js +++ b/core/modules/shortcut/shortcut.admin.js @@ -42,6 +42,15 @@ Drupal.behaviors.shortcutDrag = { if (total == -1) { var disabled = $(table).find('tr.shortcut-status-disabled'); disabled.after(disabled.prevAll().filter(':not(.shortcut-slot-empty)').get(0)); + if ($(swappedRow).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. + swappedRowObject = new tableDrag.row(swappedRow, 'mouse', self.indentEnabled, self.maxDepth, true); + swappedRowObject.markChanged(); + rowStatusChange(swappedRowObject); + } } else if (total != visibleLength) { if (total > visibleLength) { @@ -59,13 +68,17 @@ 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 () {