123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- (function ($) {
- /**
- * Provide the summary information for the block settings vertical tabs.
- */
- Drupal.behaviors.blockSettingsSummary = {
- attach: function (context) {
- // The drupalSetSummary method required for this behavior is not available
- // on the Blocks administration page, so we need to make sure this
- // behavior is processed only if drupalSetSummary is defined.
- if (typeof jQuery.fn.drupalSetSummary == 'undefined') {
- return;
- }
- $('fieldset#edit-path', context).drupalSetSummary(function (context) {
- if (!$('textarea[name="pages"]', context).val()) {
- return Drupal.t('Not restricted');
- }
- else {
- return Drupal.t('Restricted to certain pages');
- }
- });
- $('fieldset#edit-node-type', context).drupalSetSummary(function (context) {
- var vals = [];
- $('input[type="checkbox"]:checked', context).each(function () {
- vals.push($.trim($(this).next('label').text()));
- });
- if (!vals.length) {
- vals.push(Drupal.t('Not restricted'));
- }
- return vals.join(', ');
- });
- $('fieldset#edit-role', context).drupalSetSummary(function (context) {
- var vals = [];
- $('input[type="checkbox"]:checked', context).each(function () {
- vals.push($.trim($(this).next('label').text()));
- });
- if (!vals.length) {
- vals.push(Drupal.t('Not restricted'));
- }
- return vals.join(', ');
- });
- $('fieldset#edit-user', context).drupalSetSummary(function (context) {
- var $radio = $('input[name="custom"]:checked', context);
- if ($radio.val() == 0) {
- return Drupal.t('Not customizable');
- }
- else {
- return $radio.next('label').text();
- }
- });
- }
- };
- /**
- * Move a block in the blocks table from one region to another via select list.
- *
- * This behavior is dependent on the tableDrag behavior, since it uses the
- * objects initialized in that behavior to update the row.
- */
- Drupal.behaviors.blockDrag = {
- attach: function (context, settings) {
- // tableDrag is required and we should be on the blocks admin page.
- if (typeof Drupal.tableDrag == 'undefined' || typeof Drupal.tableDrag.blocks == 'undefined') {
- return;
- }
- 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);
- };
- // A custom message for the blocks page specifically.
- Drupal.theme.tableDragChangedWarning = function () {
- return '<div class="messages 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;
- // Use "region-message" row instead of "region" row because
- // "region-{region_name}-message" is less prone to regexp match errors.
- var regionRow = $(dragObject.rowObject.element).prevAll('tr.region-message').get(0);
- var regionName = regionRow.className.replace(/([^ ]+[ ]+)*region-([^ ]+)-message([ ]+[^ ]+)*/, '$2');
- var regionField = $('select.block-region-select', dragObject.rowObject.element);
- // Check whether the newly picked region is available for this block.
- if ($('option[value=' + regionName + ']', regionField).length == 0) {
- // If not, alert the user and keep the block in its old region setting.
- alert(Drupal.t('The block cannot be placed in this region.'));
- // Simulate that there was a selected element change, so the row is put
- // back to from where the user tried to drag it.
- regionField.change();
- }
- else if ($(dragObject.rowObject.element).prev('tr').is('.region-message')) {
- 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);
- }
- }
- };
- // Add the behavior to each region select list.
- $('select.block-region-select', context).once('block-region-select', function () {
- $(this).change(function (event) {
- // Make our new row and select field.
- var row = $(this).closest('tr');
- var select = $(this);
- tableDrag.rowObject = new tableDrag.row(row);
- // Find the correct region and insert the row as the last in the region.
- table.find('.region-' + select[0].value + '-message').nextUntil('.region-message').last().before(row);
- // Modify empty regions with added or removed fields.
- checkEmptyRegions(table, row);
- // Remove focus from selectbox.
- select.get(0).blur();
- });
- });
- 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').length == 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');
- }
- });
- };
- }
- };
- })(jQuery);
|