Sha256: 842d69f5e4d85dc6add7cef0fd6bfa625abd7fee9bfc4b08980cb5758a48bc00

Contents?: true

Size: 1.67 KB

Versions: 3

Compression:

Stored size: 1.67 KB

Contents

"use strict";

document.addEventListener("change", function(e) {
  if(e.target.tagName === "INPUT" && e.target.type === "file" && e.target.dataset.direct) {
    var input = e.target;
    var file = input.files[0];
    if(file) {
      var url = e.target.dataset.url;
      if(e.target.dataset.fields) {
        var fields = JSON.parse(e.target.dataset.fields);
      }

      var data = new FormData();

      if(fields) {
        Object.keys(fields).forEach(function(key) {
          data.append(key, fields[key]);
        });
      }
      data.append(input.dataset.as, file);

      var xhr = new XMLHttpRequest();
      xhr.addEventListener("load", function(e) {
        input.classList.remove("uploading")
        input.dispatchEvent(new CustomEvent("upload:complete", { detail: xhr.responseText, bubbles: true }));
        if((xhr.status >= 200 && xhr.status < 300) || xhr.status === 304) {
          var id = input.dataset.id || JSON.parse(xhr.responseText).id;
          input.dispatchEvent(new CustomEvent("upload:success", { detail: xhr.responseText, bubbles: true }));
          input.previousSibling.value = id;
          input.removeAttribute("name");
        } else {
          input.dispatchEvent(new CustomEvent("upload:failure", { detail: xhr.responseText, bubbles: true }));
        }
      });

      xhr.addEventListener("progress", function(e) {
        if (e.lengthComputable) {
          input.dispatchEvent(new CustomEvent("upload:progress", { detail: e, bubbles: true }));
        }
      });

      xhr.open("POST", url, true);
      xhr.send(data);

      input.classList.add("uploading")
      input.dispatchEvent(new CustomEvent("upload:start", { bubbles: true }));
    }
  }
});

Version data entries

3 entries across 3 versions & 2 rubygems

Version Path
refile-0.2.2 app/assets/javascripts/refile.js
defile-0.2.1 app/assets/javascripts/defile.js
defile-0.2.0 app/assets/javascripts/defile.js