flexible_views-2.0.1/js/flexible-views-column-selector.js

js/flexible-views-column-selector.js
/**
 * @file
 * Column selector js select logic.
 */

(function ($, Drupal, once) {

  'use strict';

  /**
   * Get the sort order of the fields and save it to the hidden order field.
   *
   * @param {Object} $selectedColumnsSelect - Selected columns <select>.
   */
  var populateSortOrder = function ($selectedColumnsSelect) {
    var sortOrder = [];

    $selectedColumnsSelect.find('option').each(function () {
      sortOrder.push($(this).val());
    });

    $('#flexible-table-selected-columns-submit-order').val(JSON.stringify(sortOrder));
  };

  /**
   * Move field from the available to the selected columns.
   *
   * @param {Object} $availableColumnsSelect - Available columns <select>.
   * @param {Object} $selectedColumnsSelect - Selected columns <select>.
   */
  var moveRight = function ($availableColumnsSelect, $selectedColumnsSelect) {
    var selected = $availableColumnsSelect.val();

    // Move and show/hide options in the visible selects.
    selected.forEach(function (value) {
      // Add option in selected select.
      $selectedColumnsSelect.prepend($('<option>', {
        value: value,
        text: $availableColumnsSelect.find('option[value="' + value + '"]').text()
      }));

      // Remove option in available select.
      $availableColumnsSelect.find('option[value="' + value + '"]').remove();
    });

    // Populate the value in the order textfield.
    populateSortOrder($selectedColumnsSelect);
  };

  /**
   * Move field from the selected to the available columns.
   *
   * @param {Object} $availableColumnsSelect - Available columns <select>.
   * @param {Object} $selectedColumnsSelect - Selected columns <select>.
   */
  var moveLeft = function ($availableColumnsSelect, $selectedColumnsSelect) {
    var selected = $selectedColumnsSelect.val();

    selected.forEach(function (value) {
      // Add option to selected select.
      $availableColumnsSelect.prepend($('<option>', {
        value: value,
        text: $selectedColumnsSelect.find('option[value="' + value + '"]').text()
      }));

      // Remove option in available select.
      $selectedColumnsSelect.find('option[value="' + value + '"]').remove();
    });

    // Populate the value in the order textfield.
    populateSortOrder($selectedColumnsSelect);
  };

  /**
   * Move field up in the selected columns.
   *
   * @param {Object} $availableColumnsSelect - Available columns <select>.
   * @param {Object} $selectedColumnsSelect - Selected columns <select>.
   */
  var moveTop = function ($availableColumnsSelect, $selectedColumnsSelect) {
    // Get the selected option(s) and move them up.
    $selectedColumnsSelect.find('option:selected').each(function () {
      $(this).prev(':not(:selected)').detach().insertAfter($(this));
    });

    // Populate the value in the order textfield.
    populateSortOrder($selectedColumnsSelect);
  };

  /**
   * Move field down in the selected columns.
   *
   * @param {Object} $availableColumnsSelect - Available columns <select>.
   * @param {Object} $selectedColumnsSelect - Selected columns <select>.
   */
  var moveDown = function ($availableColumnsSelect, $selectedColumnsSelect) {
    $($selectedColumnsSelect.find('option:selected').get().reverse()).each(function () {
      $(this).next(':not(:selected)').detach().insertBefore($(this));
    });

    // Populate the value in the order textfield.
    populateSortOrder($selectedColumnsSelect);
  };

  Drupal.behaviors.flexible_views_column_selector = {
    attach: function (context, settings) {

      var $availableColumnsSelect = $('select#flexible-table-available-columns'),
        $selectedColumnsSelect = $('select#flexible-table-selected-columns'),
        columnOrder = $('#flexible-table-selected-columns-submit-order').val() ? JSON.parse($('#flexible-table-selected-columns-submit-order').val()) : [];

      // Add the correct sort order.
      var sortOrderFromInput = columnOrder,
        sortedOptions = sortOrderFromInput.length > 0 ? $selectedColumnsSelect.find('option').sort(function (a, b) {
          if (sortOrderFromInput.indexOf($(a).val()) > sortOrderFromInput.indexOf($(b).val())) {
            return 1;
          }
          else {
            return -1;
          }
        }) : $selectedColumnsSelect.find('option');

      $selectedColumnsSelect.html('').append(sortedOptions);

      // Click event handler for moving columns.
      $(once('move-right', '.form-item.move-buttons .move-right')).on('click', function () {
        if ($availableColumnsSelect.val().length > 0) {
          moveRight($availableColumnsSelect, $selectedColumnsSelect);
        }
      });

      $(once('move-left', '.form-item.move-buttons .move-left')).on('click', function () {
        if ($selectedColumnsSelect.val().length > 0) {
          moveLeft($availableColumnsSelect, $selectedColumnsSelect);
          $availableColumnsSelect.val('');
        }
      });

      $(once('move-top', '.form-item.move-buttons .move-top')).on('click', function () {
        if ($selectedColumnsSelect.val().length > 0) {
          moveTop($availableColumnsSelect, $selectedColumnsSelect);
        }
      });

      $(once('move-down', '.form-item.move-buttons .move-down')).on('click', function () {
        if ($selectedColumnsSelect.val().length > 0) {
          moveDown($availableColumnsSelect, $selectedColumnsSelect);
        }
      });

    }
  };

})(jQuery, Drupal, once);

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc