"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 }));
    }
  }
});


@@ -1,8 +1,24 @@
+(function() %7B%0A  
 %22use str
@@ -24,16 +24,18 @@
 rict%22;%0A%0A
+  
 document
@@ -76,16 +76,18 @@
 on(e) %7B%0A
+  
   if(e.t
@@ -170,24 +170,26 @@
 rect) %7B%0A    
+  
 var input = 
@@ -198,16 +198,18 @@
 target;%0A
+  
     var 
@@ -231,16 +231,18 @@
 les%5B0%5D;%0A
+  
     if(f
@@ -250,24 +250,26 @@
 le) %7B%0A      
+  
 var url = e.
@@ -288,16 +288,18 @@
 et.url;%0A
+  
       if
@@ -330,24 +330,26 @@
 ) %7B%0A        
+  
 var fields =
@@ -396,11 +396,15 @@
     
+ 
+ 
 %7D%0A%0A
+  
     
@@ -435,24 +435,26 @@
 a();%0A%0A      
+  
 if(fields) %7B
@@ -462,16 +462,18 @@
         
+ 
+ 
 Object.k
@@ -514,24 +514,26 @@
 %7B%0A          
+  
 data.append(
@@ -559,20 +559,24 @@
         
+  
 %7D);%0A
+  
       %7D%0A
@@ -577,24 +577,26 @@
     %7D%0A      
+  
 data.append(
@@ -623,24 +623,26 @@
 le);%0A%0A      
+  
 var xhr = ne
@@ -661,16 +661,18 @@
 uest();%0A
+  
       xh
@@ -716,24 +716,26 @@
 ) %7B%0A        
+  
 input.classL
@@ -754,24 +754,26 @@
 uploading%22)%0A
+  
         inpu
@@ -878,16 +878,18 @@
         
+  
 if((xhr.
@@ -954,24 +954,26 @@
 %7B%0A          
+ 
+ 
 var id = inp
@@ -1018,24 +1018,26 @@
 seText).id;%0A
+  
           in
@@ -1141,24 +1141,26 @@
 ;%0A          
+  
 input.previo
@@ -1187,24 +1187,26 @@
 ;%0A          
+ 
+ 
 input.remove
@@ -1232,16 +1232,18 @@
         
+  
 %7D else %7B
@@ -1243,16 +1243,18 @@
  else %7B%0A
+  
         
@@ -1348,32 +1348,34 @@
 bles: true %7D));%0A
+  
         %7D%0A      
@@ -1366,37 +1366,41 @@
         %7D%0A      
+  
 %7D);%0A%0A
+  
       xhr.addEve
@@ -1428,32 +1428,34 @@
 , function(e) %7B%0A
+  
         if (e.le
@@ -1474,32 +1474,34 @@
 le) %7B%0A          
+  
 input.dispatchEv
@@ -1575,26 +1575,30 @@
 ));%0A        
-%7D%0A
+  %7D%0A  
       %7D);%0A%0A 
@@ -1598,24 +1598,26 @@
  %7D);%0A%0A      
+ 
+ 
 xhr.open(%22PO
@@ -1633,16 +1633,18 @@
  true);%0A
+  
       xh
@@ -1660,24 +1660,26 @@
 ta);%0A%0A      
+  
 input.classL
@@ -1701,24 +1701,26 @@
 ing%22)%0A      
+ 
+ 
 input.dispat
@@ -1788,15 +1788,26 @@
     
+  
 %7D%0A  
+ 
+ 
 %7D%0A
+  
 %7D);%0A
+%7D)();
 %0A

Add function wrapper to refile.js