UNPKG

allex_cgiservice

Version:
94 lines (82 loc) 3.06 kB
(function (lib, allex, module) { var allexcomponent = allex.WEB_COMPONENT, HttpStatusTranslator = allexcomponent.http.parseHttpResponseError; module.factory('allex.cgi.UploadMixIn', ['Upload', function (Upload) { var DEFAULT_SETTINGS = { uploadslugname: 'uploadURL', allowDir: false, multiple: false, doDrop : true, accept: null, forget: true, browse: true }; function UploadMixIn ($scope, settings) { this.uploadSettings = angular.extend({}, DEFAULT_SETTINGS, settings); this._uploadStateM = null; this.uploadURL = null; this.uploadFiles = null; } UploadMixIn.prototype.__cleanUp = function () { this.uploadSettings = null; if (this._uploadStateM) this._uploadStateM.destroy(); this._uploadStateM = null; this.uploadURL = null; this.uploadFiles = null; }; UploadMixIn.prototype.uploadSetUser = function (user) { if (this._uploadStateM) this._uploadStateM.destroy(); this._uploadStateM = null; if (!user) return; var monitorobj = {}; monitorobj[this.uploadSettings.uploadslugname] = this.set.bind(this, 'uploadURL'); this._uploadStateM = user.getStateAndAttach(monitorobj); }; UploadMixIn.prototype.uploadOnFileDropped = function () { ///event triggered by the ngFileUpload }; UploadMixIn.prototype.upload = function (data) { var d = lib.q.defer(); Upload.upload({ 'url': this.uploadURL, 'file':this.get('uploadFiles'), 'method': 'POST', 'fields': data }) .progress(this._onUploadProgress.bind(this, d)) .success(this._onUploadSuccess.bind(this, d)) .error(this._onUploadError.bind(this, d)); return d.promise; }; UploadMixIn.prototype._onUploadProgress = function (defer, evnt){ defer.notify(parseInt(100*(evnt.loaded/evnt.total))); }; UploadMixIn.prototype._onUploadSuccess = function (defer, data, status, headers, config) { //if ('ok' === data) { ///TODO: za sad ... if (true) { if (this.uploadSettings.forget) this.uploadFiles.splice(0, this.uploadFiles.length); defer.resolve(this.uploadGetSuccessMessage()); }else{ defer.reject(data); } }; UploadMixIn.prototype._onUploadError = function (defer, data, status, headers, config) { if (!status) { defer.reject('Connectivity issues detected ...'); return; } if (data.length) { return defer.reject(data); } defer.reject(HttpStatusTranslator(status)); }; UploadMixIn.prototype.uploadGetSuccessMessage = function () { return 'Successfully done'; }; UploadMixIn.addMethods = function (extended) { lib.inheritMethods(extended, UploadMixIn, '_onUploadProgress', '_onUploadSuccess', '_onUploadError', 'uploadOnFileDropped', 'upload', 'uploadSetUser', 'uploadGetSuccessMessage'); }; return UploadMixIn; }]); })(ALLEX.lib, ALLEX, angular.module('allex.cgi'));