diff options
Diffstat (limited to 'modules/block/block.js')
-rw-r--r-- | modules/block/block.js | 150 |
1 files changed, 76 insertions, 74 deletions
diff --git a/modules/block/block.js b/modules/block/block.js index 802f25666..eeb9306e0 100644 --- a/modules/block/block.js +++ b/modules/block/block.js @@ -6,90 +6,92 @@ * This behavior is dependent on the tableDrag behavior, since it uses the * objects initialized in that behavior to update the row. */ -Drupal.behaviors.blockDrag = function(context) { - var table = $('table#blocks'); - var tableDrag = Drupal.tableDrag.blocks; // Get the blocks tableDrag object. +Drupal.behaviors.blockDrag = { + attach: function(context) { + var table = $('table#blocks'); + var tableDrag = Drupal.tableDrag.blocks; // Get the blocks tableDrag object. - // Add a handler for when a row is swapped, update empty regions. - tableDrag.row.prototype.onSwap = function(swappedRow) { - checkEmptyRegions(table, this); - }; + // Add a handler for when a row is swapped, update empty regions. + tableDrag.row.prototype.onSwap = function(swappedRow) { + checkEmptyRegions(table, this); + }; - // A custom message for the blocks page specifically. - Drupal.theme.tableDragChangedWarning = function () { - return '<div class="warning">' + Drupal.theme('tableDragChangedMarker') + ' ' + Drupal.t("The changes to these blocks will not be saved until the <em>Save blocks</em> button is clicked.") + '</div>'; - }; + // A custom message for the blocks page specifically. + Drupal.theme.tableDragChangedWarning = function () { + return '<div class="warning">' + Drupal.theme('tableDragChangedMarker') + ' ' + Drupal.t("The changes to these blocks will not be saved until the <em>Save blocks</em> button is clicked.") + '</div>'; + }; - // Add a handler so when a row is dropped, update fields dropped into new regions. - tableDrag.onDrop = function() { - dragObject = this; - if ($(dragObject.rowObject.element).prev('tr').is('.region-message')) { - var regionRow = $(dragObject.rowObject.element).prev('tr').get(0); - var regionName = regionRow.className.replace(/([^ ]+[ ]+)*region-([^ ]+)-message([ ]+[^ ]+)*/, '$2'); - var regionField = $('select.block-region-select', dragObject.rowObject.element); - var weightField = $('select.block-weight', dragObject.rowObject.element); - var oldRegionName = weightField[0].className.replace(/([^ ]+[ ]+)*block-weight-([^ ]+)([ ]+[^ ]+)*/, '$2'); + // Add a handler so when a row is dropped, update fields dropped into new regions. + tableDrag.onDrop = function() { + dragObject = this; + if ($(dragObject.rowObject.element).prev('tr').is('.region-message')) { + var regionRow = $(dragObject.rowObject.element).prev('tr').get(0); + var regionName = regionRow.className.replace(/([^ ]+[ ]+)*region-([^ ]+)-message([ ]+[^ ]+)*/, '$2'); + var regionField = $('select.block-region-select', dragObject.rowObject.element); + var weightField = $('select.block-weight', dragObject.rowObject.element); + var oldRegionName = weightField[0].className.replace(/([^ ]+[ ]+)*block-weight-([^ ]+)([ ]+[^ ]+)*/, '$2'); - if (!regionField.is('.block-region-'+ regionName)) { - regionField.removeClass('block-region-' + oldRegionName).addClass('block-region-' + regionName); - weightField.removeClass('block-weight-' + oldRegionName).addClass('block-weight-' + regionName); - regionField.val(regionName); + if (!regionField.is('.block-region-'+ regionName)) { + regionField.removeClass('block-region-' + oldRegionName).addClass('block-region-' + regionName); + weightField.removeClass('block-weight-' + oldRegionName).addClass('block-weight-' + regionName); + regionField.val(regionName); + } } - } - }; + }; - // Add the behavior to each region select list. - $('select.block-region-select:not(.blockregionselect-processed)', context).each(function() { - $(this).change(function(event) { - // Make our new row and select field. - var row = $(this).parents('tr:first'); - var select = $(this); - tableDrag.rowObject = new tableDrag.row(row); + // Add the behavior to each region select list. + $('select.block-region-select:not(.blockregionselect-processed)', context).each(function() { + $(this).change(function(event) { + // Make our new row and select field. + var row = $(this).parents('tr:first'); + var select = $(this); + tableDrag.rowObject = new tableDrag.row(row); - // Find the correct region and insert the row as the first in the region. - $('tr.region-message', table).each(function() { - if ($(this).is('.region-' + select[0].value + '-message')) { - // Add the new row and remove the old one. - $(this).after(row); - // Manually update weights and restripe. - tableDrag.updateFields(row.get(0)); - tableDrag.rowObject.changed = true; - if (tableDrag.oldRowElement) { - $(tableDrag.oldRowElement).removeClass('drag-previous'); + // Find the correct region and insert the row as the first in the region. + $('tr.region-message', table).each(function() { + if ($(this).is('.region-' + select[0].value + '-message')) { + // Add the new row and remove the old one. + $(this).after(row); + // Manually update weights and restripe. + tableDrag.updateFields(row.get(0)); + tableDrag.rowObject.changed = true; + if (tableDrag.oldRowElement) { + $(tableDrag.oldRowElement).removeClass('drag-previous'); + } + tableDrag.oldRowElement = row.get(0); + tableDrag.restripeTable(); + tableDrag.rowObject.markChanged(); + tableDrag.oldRowElement = row; + $(row).addClass('drag-previous'); } - tableDrag.oldRowElement = row.get(0); - tableDrag.restripeTable(); - tableDrag.rowObject.markChanged(); - tableDrag.oldRowElement = row; - $(row).addClass('drag-previous'); - } - }); + }); - // Modify empty regions with added or removed fields. - checkEmptyRegions(table, row); - // Remove focus from selectbox. - select.get(0).blur(); + // Modify empty regions with added or removed fields. + checkEmptyRegions(table, row); + // Remove focus from selectbox. + select.get(0).blur(); + }); + $(this).addClass('blockregionselect-processed'); }); - $(this).addClass('blockregionselect-processed'); - }); - var checkEmptyRegions = function(table, rowObject) { - $('tr.region-message', table).each(function() { - // If the dragged row is in this region, but above the message row, swap it down one space. - if ($(this).prev('tr').get(0) == rowObject.element) { - // Prevent a recursion problem when using the keyboard to move rows up. - if ((rowObject.method != 'keyboard' || rowObject.direction == 'down')) { - rowObject.swap('after', this); + var checkEmptyRegions = function(table, rowObject) { + $('tr.region-message', table).each(function() { + // If the dragged row is in this region, but above the message row, swap it down one space. + if ($(this).prev('tr').get(0) == rowObject.element) { + // Prevent a recursion problem when using the keyboard to move rows up. + if ((rowObject.method != 'keyboard' || rowObject.direction == 'down')) { + rowObject.swap('after', this); + } } - } - // This region has become empty. - if ($(this).next('tr').is(':not(.draggable)') || $(this).next('tr').size() == 0) { - $(this).removeClass('region-populated').addClass('region-empty'); - } - // This region has become populated. - else if ($(this).is('.region-empty')) { - $(this).removeClass('region-empty').addClass('region-populated'); - } - }); - }; + // This region has become empty. + if ($(this).next('tr').is(':not(.draggable)') || $(this).next('tr').size() == 0) { + $(this).removeClass('region-populated').addClass('region-empty'); + } + // This region has become populated. + else if ($(this).is('.region-empty')) { + $(this).removeClass('region-empty').addClass('region-populated'); + } + }); + }; + } }; |