Advertisement
Caverna

Webix Uploader improvement sugestion

Nov 6th, 2014
221
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function WebixSenderAdvanced(sender, callback) {
  2.     this.sender = function () {
  3.         if (sender == null)
  4.             return null;
  5.  
  6.         if (sender._settings != null || sender.s != null)
  7.             return sender;
  8.  
  9.         if (sender.view !== null)
  10.             return $$(sender.id);
  11.  
  12.         return sender;
  13.     }();
  14.     this.callback = callback;
  15. }
  16.  
  17. WebixSenderAdvanced.prototype = function () {
  18.     var sender;
  19.     var callback;
  20.  
  21.     var debugMode;
  22.     var fileItem;
  23.     var formData;
  24.  
  25.     var send = function (file) {
  26.         sender = this.sender;
  27.         callback = this.callback;
  28.         getDebugStatus();
  29.         getFileObject(file);
  30.         createXhrObject();
  31.         compileFormData.apply(this, arguments);
  32.         post();
  33.     }
  34.  
  35.     function getDebugStatus() {
  36.         debugMode = (sender._settings != null);
  37.     }
  38.  
  39.     function getFileObject(file) {
  40.         fileItem = (typeof (file) === 'number')
  41.             ? fileItem = sender.files.getItem(file)
  42.             : file;
  43.  
  44.         if (fileItem == null || fileItem.status !== 'client')
  45.             return;
  46.  
  47.         fileItem.status = 'transfer';
  48.     }
  49.  
  50.     function createXhrObject() {
  51.         if (fileItem == null) return;
  52.  
  53.         var xhr = fileItem.xhr = new XMLHttpRequest();
  54.         var id = fileItem.id;
  55.  
  56.         if (debugMode)
  57.             createXhrObjectDebug(xhr, id);
  58.         else
  59.             createXhrObjectRelease(xhr, id);
  60.     }
  61.     function createXhrObjectDebug(xhr, id) {
  62.         var progress = 'progress';
  63.         xhr.upload.addEventListener(progress, webix.bind(function (e) {
  64.             this._update_progress(id, e.loaded / e.total * 100);
  65.         }, sender), false);
  66.         xhr.onload = webix.bind(function () {
  67.             this._file_complete(id);
  68.             callback();
  69.         }, sender);
  70.     }
  71.     function createXhrObjectRelease(xhr, id) {
  72.         var progress = 'progress';
  73.         xhr.upload.addEventListener(progress, webix.bind(function (e) {
  74.             this.hs(id, e.loaded / e.total * 100);
  75.         }, sender), false);
  76.         xhr.onload = webix.bind(function () {
  77.             this.is(id);
  78.             callback();
  79.         }, sender);
  80.     }
  81.  
  82.     function compileFormData() {
  83.         if (fileItem == null) return;
  84.  
  85.         formData = new FormData();
  86.         formData.append(fileItem.name, fileItem.file);
  87.  
  88.         for (var i = 1; i < arguments.length; i++) {
  89.             var parameter = arguments[i];
  90.             if (parameter == null) continue;
  91.  
  92.             Object.keys(parameter).forEach(function (key) {
  93.                 if (key != null)
  94.                     formData.append(key, parameter[key]);
  95.             });
  96.         }
  97.     }
  98.  
  99.     function post() {
  100.         if (fileItem == null) return;
  101.  
  102.         var id = fileItem.id;
  103.         var url = debugMode
  104.             ? sender._settings.upload
  105.             : sender.s.upload;
  106.  
  107.         fileItem.percent = 0;
  108.         sender.files.updateItem(id);
  109.  
  110.         fileItem.xhr.open('POST', url, true);
  111.         fileItem.xhr.send(formData);
  112.     }
  113.  
  114.     return {
  115.         send: send
  116.     }
  117. }();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement