Sha256: 7c3e7eaaf9866cfa8e6481fad4ce1a3ddce947c551679810b64de57e1fa6e017

Contents?: true

Size: 1.51 KB

Versions: 1

Compression:

Stored size: 1.51 KB

Contents

// Sortable fields
//
// This pattern for sorting fields can be used with the Cocoon gem.
//
// Sortable field sets can be nested multiple times, but need to follow this hierarchy:
// <div class="sortable-field-set">
//   <div class="sortable-field">
//     <div class="sortable-field-set__handle"></div>
//     <div class="sortable-field-set__position">
//       <%= f.hidden_field :position %>
//     </div>
//   </div>
// </div>

$(document).on('turbolinks:load cocoon:after-insert', function() {
  var $fieldSets = $('.sortable-field-set');

  $fieldSets.each(function() {
    var $fieldSet = $(this);

    $fieldSet.sortable({
      items: '> .sortable-field',
      containment: $fieldSet,
      // tolerance: 'pointer',
      placeholder: 'sortable-placeholder',
      handle: '.sortable-field-set__handle',
      forcePlaceholderSize: true,
      start: function(e, ui) {
        ui.placeholder.height( ui.item.outerHeight(true) );
      }
    });

    calculatePositions( $fieldSet );

    $fieldSet.on('sortupdate.sortableFieldSets', function() {
      calculatePositions( $fieldSet );
    });

    $(document).one('turbolinks:before-cache', function() {
      $fieldSet.off('sortupdate.sortableFieldSets');
      $fieldSet.sortable('destroy');
    });
  });

  function calculatePositions($fieldSet) {
    var $fields = $fieldSet.find('> .sortable-field');

    $fields.each(function(index) {
      var $field = $(this);
      var $input = $field.find('> .sortable-field-set__position input');

      $input.val(index);
    });
  }
});

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
forest_cms-0.98.1 app/assets/javascripts/forest/admin/partials/cocoon_sortable_field_sets.js