Newer
Older
Dries Buytaert
committed
(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;
Dries Buytaert
committed
$(table).find('tr.shortcut-status-enabled').nextAll(':not(.shortcut-slot-empty)').each(function(index) {
Dries Buytaert
committed
if (index < disabledIndex) {
count++;
}
});
var total = slots - count;
if (total == -1) {
var disabled = $(table).find('tr.shortcut-status-disabled');
Dries Buytaert
committed
// 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.
Dries Buytaert
committed
var changedRowObject = new tableDrag.row(changedRow, 'mouse', self.indentEnabled, self.maxDepth, true);
changedRowObject.markChanged();
rowStatusChange(changedRowObject);
}
Dries Buytaert
committed
}
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 () {
rowStatusChange(this.rowObject);
return true;
};
function rowStatusChange(rowObject) {
Dries Buytaert
committed
// 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);
Dries Buytaert
committed
var statusName = statusRow.className.replace(/([^ ]+[ ]+)*shortcut-status-([^ ]+)([ ]+[^ ]+)*/, '$2');
var statusField = $('select.shortcut-status-select', rowObject.element);
Dries Buytaert
committed
statusField.val(statusName);
}
Dries Buytaert
committed
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
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).parents('div.form-item').get(1)).find('> label > input').attr('checked', 'checked');
};
$('div.form-item-new input').focus(selectDefault).keyup(selectDefault);
}
};
})(jQuery);