decko-commons/decko

View on GitHub
mod/carrierwave/assets/script/upload.js.coffee

Summary

Maintainability
Test Coverage
decko.editors.init[".file-upload"] = -> decko.upload_file(this)

$.extend decko,
  upload_file: (fileupload) ->
    # for file as a subcard in a form,
    # excess parameters are included in the request which cause errors.
    # only the file, type_id and attachment_card_name are needed
    # attachment_card_name is the original card name,
    # ex: card[subcards][+logo][image], card[file]
    $(fileupload).on 'fileuploadsubmit', (e,data) ->
      $_this = $(this)
      card_name = $_this.siblings(".attachment_card_name:first").attr("name")
      type_id = $_this.siblings("#attachment_type_id").val()
      data.formData = {
        "card[type_id]": type_id,
        "attachment_upload": card_name
      }
    $_fileupload = $(fileupload)
    if $_fileupload.closest("form").attr("action").indexOf("update") > -1
      url = "card/update/"+$(fileupload).siblings("#file_card_name").val()
    else
      url = "card/create"
    $(fileupload).fileupload(
      url: decko.path(url),
      dataType: 'html',
      done: decko.doneFile,
      add: decko.chooseFile,
      progressall: decko.progressallFile
    )#, forceIframeTransport: true )

  chooseFile: (e, data) ->
    data.form.find('button[type=submit]').attr('disabled',true)
    editor = $(this).closest '.card-editor'
    $('#progress').show()
    editor.append '<input type="hidden" class="extra_upload_param" ' +
                  'value="true" name="attachment_upload">'
    editor.append '<input type="hidden" class="extra_upload_param" ' +
                  'value="preview_editor" name="view">'
    data.submit()
    editor.find('.choose-file').hide()
    # editor.find(".file-upload").prop "disabled", true
    editor.find('.extra_upload_param').remove()

  progressallFile: (e, data) ->
    progress = parseInt(data.loaded / data.total * 100, 10)
    $('#progress .progress-bar').css('width', progress + '%')

  doneFile: (e, data) ->
    editor = $(this).closest '.card-editor'
    editor.find('.chosen-file').replaceWith data.result
    data.form.find('button[type=submit]').attr('disabled',false)

$(window).ready ->
  $('body').on 'click', '.cancel-upload', ->
    editor = $(this).closest '.card-editor'
    editor.find('.choose-file').show()
    # editor.find(".file-upload").prop "disabled", false
    editor.find('.chosen-file').empty()
    editor.find('.progress').show()
    editor.find('#progress .progress-bar').css('width', '0%')
    editor.find('#progress').hide()

  $('body').on "submit", "form", ->
    disableUploader this, true

  $("body").on "ajax:complete", "form", ->
    disableUploader this, false

disableUploader = (form, toggle) ->
  uploader = $(form).find ".file-upload[type=file]"
  if uploader[0]
    uploader.prop "disabled", toggle