Noosfero/noosfero

View on GitHub
plugins/custom_forms/public/javascripts/field.js

Summary

Maintainability
A
0 mins
Test Coverage
var fixHelperSortable = function(e, tr) {
  tr.children().each(function() {
    jQuery(this).width(jQuery(this).width());
  });
  return tr;
};

var updatePosition = function(e, ui) {
  var tag = ui.item[0].tagName.toLowerCase();
  var count = ui.item.prevAll(tag).eq(0).find('input').filter(function() {return /_position/.test(this.id); }).val();
  count = count ? ++count : 0;

  ui.item.find('input').filter(function() {return /_position/.test(this.id); }).eq(0).val(count);

  for (i = 0; i < ui.item.nextAll(tag).length; i++) {
    count++;
    ui.item.nextAll(tag).eq(i).find('input').filter(function() {return /_position/.test(this.id); }).val(count);
  }
}

jQuery('tbody.field-list').sortable({
  helper: fixHelperSortable,
  update: updatePosition
});

jQuery("ul.field-list").sortable({
  placeholder: 'ui-state-highlight',
  axis: 'y',
  opacity: 0.8,
  cursor: 'move',
  tolerance: 'pointer',
  forcePlaceholderSize: true,
  update: updatePosition
});

jQuery("ul.field-list li").disableSelection();

var customFormsPlugin = {
  removeAlternative: function (button, confirmMsg) {
    if (confirm(confirmMsg)) {
      alt = jQuery(button).closest('tr.alternative');
      jQuery('input.destroy-field', alt).val(1);
      alt.fadeOut(500, function() {
        customFormsPlugin.checkHeaderDisplay(jQuery(button).closest('table'));
      });
    }
  },

  addFields: function (button, association, content) {
    var new_id = new Date().getTime();
    var regexp = new RegExp("new_" + association, "g");
    content = content.replace(regexp, new_id);

    if(association == 'alternatives') {
      jQuery(content).appendTo(jQuery(button).closest('tfoot').next('tbody.field-list'));
      jQuery(button).closest('table').find('tr:first').show();
      jQuery(button).closest('tfoot').next('tbody.field-list').sortable({ helper: fixHelperSortable, update: updatePosition});
    } else {
      jQuery('<li>').append(jQuery(content)).appendTo(jQuery(button).parent().prev('ul.field-list')).hide().slideDown();
    }

    jQuery('input').filter(function () { return new RegExp(new_id + "_position", "g").test(this.id); }).val(new_id);
  },

  checkHeaderDisplay: function(table) {
    trs =jQuery('tr:visible', table);
    if (trs.length <= 2) {
      trs[0].style.display = 'none';
    } else {
      trs[0].style.display = 'table-row';
    }
  }
}

/* Remove field */
$(document).ready(function() {
  $("a.remove-field").live('click', function() {
    var field = $(this).closest('li');
    var destroy_field = jQuery('input.destroy-field', field);
    field.fadeOut(500, function() {
      if(destroy_field.length >= 1){
        destroy_field.val(1);
        field.hide();
      }
    });
    return false;
  });
});