UNPKG

cronapp-framework-mobile-js

Version:
168 lines (150 loc) 5.69 kB
(function ($app) { angular.module('upload.services', []).service('UploadService', function ($http, $compile, $ionicModal) { let body = $('body'); let $scope = angular.element(body.get(0)).scope(); this.upload = function (data) { $scope.data = data; $ionicModal.fromTemplateUrl('node_modules/cronapp-framework-mobile-js/components/upload/upload.html', { scope: $scope, animation: 'slide-in-up', resolve: { data: function () { return data; } } }).then(function (modal) { $scope.modal = modal; $scope.modal.show(); }); }.bind(this); }); function strFormat(str) { let args = [].slice.call(arguments, 1), i = 0; return str.replace(/%s/g, () => { return args[i++]; }); } angular.module('custom.controllers').controller('UploadController', function ($scope, $translate, $stateParams, $location, $http, Upload, $timeout) { app.registerEventsCronapi($scope, $translate); // save state params into scope $scope.params = $stateParams; $scope.$http = $http; // Query string params let queryStringParams = $location.search(); for (let key in queryStringParams) { if (queryStringParams.hasOwnProperty(key)) { $scope.params[key] = queryStringParams[key]; } } $scope.uploading = false; $scope.uploaded = true; $scope.progress = 0; $scope.message = $translate.instant('Upload.oneFile'); var headerClasses = $("ion-header-bar:visible").attr("class"); $scope.headerClass = headerClasses; $scope.buttonClass = "button-positive" if (headerClasses.indexOf("-assertive") != -1) { $scope.buttonClass = "button-assertive" } else if (headerClasses.indexOf("-balanced") != -1) { $scope.buttonClass = "button-balanced" } else if (headerClasses.indexOf("-energized") != -1) { $scope.buttonClass = "button-energized" } else if (headerClasses.indexOf("-light") != -1) { $scope.buttonClass = "button-light" } else if (headerClasses.indexOf("-stable") != -1) { $scope.buttonClass = "button-stable" } else if (headerClasses.indexOf("-calm") != -1) { $scope.buttonClass = "button-calm" } else if (headerClasses.indexOf("-royal") != -1) { $scope.buttonClass = "button-royal" } else if (headerClasses.indexOf("-dark") != -1) { $scope.buttonClass = "button-dark" } if ($scope.data.multiple === "true") { $scope.message = $translate.instant('Upload.multipleFile'); } if ($scope.data.description) { $scope.message = $scope.data.description; } $scope.safeApply = safeApply; $scope.imagesSelected = function (files) { $scope.files = files; if (files && files.length) { Upload.upload({ url: '/upload_image', method: 'POST', data: { files: files } }).then(function (response) { $timeout(function () { $scope.result = response.data; }); }, function (response) { if (response.status > 0) { $scope.errorMsg = response.status + ': ' + response.data; } }, function (evt) { $scope.progress = Math.min(100, parseInt(100.0 * evt.loaded / evt.total)); }); } }; $scope.uploadFile = function (files) { let pageScope = $scope.data.scope; let uploadUrl = 'api/cronapi/upload/' + $scope.data.id; let formData = new FormData(); if (files.length === 0) { this.Notification.error(strFormat($translate.instant('Upload.errorValidation'), $scope.data.maxSize, $scope.data.filter)); } else { for (let i = 0; i < files.length; i++) { formData.append("file", files[i]); } let _u = JSON.parse(localStorage.getItem('_u')); let headerValues = window.isUsingCookie() ? { 'Content-Type' : undefined } : { 'Content-Type' : undefined, 'X-AUTH-TOKEN' : (_u ?_u.token : '') }; this.$promise = $http({ method: 'POST', url: (window.hostApp || "") + uploadUrl, data: formData, headers: headerValues, onProgress: function (event) { this.safeApply(function () { if (event.lengthComputable) { let complete = (event.loaded / event.total * 100 | 0); $scope.progress = complete; } $scope.uploading = true; }); }.bind(this) }).success(function (data, status, headers, config) { pageScope.cronapi.evalInContext(JSON.stringify(data)).then((result) => { $scope.uploaded = true; $scope.uploading = false; $scope.close(); }); }.bind(this)).error(function (data, status, errorThrown) { this.Notification.error(data.error); $scope.uploading = false; $scope.close(); }.bind(this)); } }.bind($scope); $scope.close = function () { $scope.modal.hide(); }; }); }(app));