appirits/comable

View on GitHub
backend/app/assets/javascripts/comable/admin/search.coffee

Summary

Maintainability
Test Coverage
class DynamicField
  constructor: (@templates = {}) ->

  remove_fields: (button) ->
    $(button).closest('.fields').remove()

  add_fields: (button, type, content) ->
    new_id = new Date().getTime()
    regexp = new RegExp('new_' + type, 'g')
    $(button).before(content.replace(regexp, new_id))

  nest_fields: (button, type) ->
    new_id = new Date().getTime()
    id_regexp = new RegExp('new_' + type, 'g')
    template = @templates[type]
    object_name = $(button).closest('.fields').attr('data-object-name')
    sanitized_object_name = object_name.replace(/\]\[|[^-a-zA-Z0-9:.]/g, '_').replace(/_$/, '')
    template = template.replace(/new_object_name\[/g, object_name + "[")
    template = template.replace(/new_object_name_/, sanitized_object_name + '_')
    $(button).before(template.replace(id_regexp, new_id))

# ---
# main
# ---
dynamic_field = new DynamicField

$(document).on('click', '.add_fields', ->
  dynamic_field.add_fields(this, $(this).data('fieldType'), $(this).data('content'))
  false
)

$(document).on('click', '.remove_fields', ->
  dynamic_field.remove_fields(this)
  false
)