Sha256: b2343e369ba33fe115a723404d0d433a39c6c59742c7bd34c25d102c0fac56b9

Contents?: true

Size: 1.82 KB

Versions: 9

Compression:

Stored size: 1.82 KB

Contents

document.observe('click', function(e, el) {
	if (el = e.findElement('form a.add_nested_fields')) {
	  // Setup
	  var assoc   = el.readAttribute('data-association');           // Name of child
	  var content = $(assoc + '_fields_blueprint').innerHTML; // Fields template

	  // Make the context correct by replacing new_<parents> with the generated ID
	  // of each of the parent objects
	  var context = (el.getOffsetParent('.fields').firstDescendant().readAttribute('name') || '').replace(new RegExp('\[[a-z]+\]$'), '');

	  // context will be something like this for a brand new form:
	  // project[tasks_attributes][new_1255929127459][assignments_attributes][new_1255929128105]
	  // or for an edit form:
	  // project[tasks_attributes][0][assignments_attributes][1]
	  if(context) {
	    var parent_names = context.match(/[a-z_]+_attributes/g) || [];
	    var parent_ids   = context.match(/(new_)?[0-9]+/g) || [];

	    for(i = 0; i < parent_names.length; i++) {
        if(parent_ids[i]) {
          content = content.replace(
            new RegExp('(_' + parent_names[i] + ')_.+?_', 'g'),
            '$1_' + parent_ids[i] + '_');

          content = content.replace(
            new RegExp('(\\[' + parent_names[i] + '\\])\\[.+?\\]', 'g'),
            '$1[' + parent_ids[i] + ']');
        }
	    }
	  }

	  // Make a unique ID for the new child
	  var regexp  = new RegExp('new_' + assoc, 'g');
	  var new_id  = new Date().getTime();
	  content     = content.replace(regexp, "new_" + new_id);

	  el.insert({ before: content });
	  return false;
	}
});

document.observe('click', function(e, el) {
  	if (el = e.findElement('form a.remove_nested_fields')) {
		var hidden_field = el.previous(0);
		if(hidden_field) {
		  hidden_field.value = '1';
		}
		el.ancestors()[0].hide();
		return false;
	}
});

Version data entries

9 entries across 6 versions & 1 rubygems

Version Path
bbenezech-nested_form-0.0.6 spec/dummy/app/assets/javascripts/prototype_nested_form.js
bbenezech-nested_form-0.0.6 vendor/assets/javascripts/prototype_nested_form.js
bbenezech-nested_form-0.0.5 vendor/assets/javascripts/prototype_nested_form.js
bbenezech-nested_form-0.0.5 spec/dummy/app/assets/javascripts/prototype_nested_form.js
bbenezech-nested_form-0.0.4 vendor/assets/javascripts/prototype_nested_form.js
bbenezech-nested_form-0.0.4 spec/dummy/app/assets/javascripts/prototype_nested_form.js
bbenezech-nested_form-0.0.3 spec/dummy/app/assets/javascripts/prototype_nested_form.js
bbenezech-nested_form-0.0.2 spec/dummy/app/assets/javascripts/prototype_nested_form.js
bbenezech-nested_form-0.0.1 spec/dummy/app/assets/javascripts/prototype_nested_form.js