Sha256: efaa574fd9a9a0bad75b69abcca25b6258647f4c1507732d943be19f80d2a34b

Contents?: true

Size: 1.7 KB

Versions: 1

Compression:

Stored size: 1.7 KB

Contents

(function($){
  var createNewId, elCounter;
  elCounter = 0;
  
  createNewId = function() {
    return new Date().getTime() + elCounter++;
  };
	
  $(document).on('click', '.remove-item', function(e) {
		e.preventDefault();
    $(this).prev('input[type=hidden]').val('1');
    $(this).closest('.nested-item').hide();
  });
	
  $(function() {
	  $('.autocomplete').each(function() {
			var $this 			= $(this),
			nestedContainer = $this.parents('.nested-container');
      
			$this.autocomplete({
				source: function(request, response) {
					var addedObj = [];
          
          // Insert added objects to array
					nestedContainer.find('.nested-item:visible .nested-value').each(function () {
						addedObj.push($(this).val());
					});
					
					$.ajax({
						url: $this.data('source'),
						dataType: 'json',
						data: {
							term: request.term,
							added_obj: addedObj
						},
						success: function(data) {
							response(data);
						}
					});
				},
		    minLength: parseInt($(this).data('min-length')) || 1,
		    focus: function(e, ui) {
					e.preventDefault();
		      $this.val(ui.item.label);
		    },
		    select: function(e, ui) {
		      var keepAfterSelect 	= (String($this.data('keep-after-select')).toLowerCase() == 'true'),
							newId 						= createNewId(),
							idRegexp 					= new RegExp($this.data('id'), 'g'),
							content						= $.parseHTML( $this.data('item').replace(idRegexp, newId) );

					e.preventDefault();
					
		     	if (!keepAfterSelect) {
						$this.val('');
					};
					
					$('.nested-content', content).text(ui.item.content);
					$('.nested-value', content).val(ui.item.value);
		      $('.nested-items').prepend(content);
		    }
		  });
		});
	});
})(jQuery);

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
dynamic_nested_forms-0.1.0 app/assets/javascripts/dynamic_nested_forms.js