summaryrefslogtreecommitdiff
path: root/modules/shortcut/shortcut.admin.js
diff options
context:
space:
mode:
Diffstat (limited to 'modules/shortcut/shortcut.admin.js')
-rw-r--r--modules/shortcut/shortcut.admin.js28
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