media-uploader.js 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. /**
  2. *
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. /**
  7. * @api
  8. */
  9. /*global byteConvert*/
  10. define([
  11. 'jquery',
  12. 'mage/template',
  13. 'Magento_Ui/js/modal/alert',
  14. 'Magento_Ui/js/form/element/file-uploader',
  15. 'mage/translate',
  16. 'jquery/file-uploader'
  17. ], function ($, mageTemplate, alert, FileUploader) {
  18. 'use strict';
  19. var fileUploader = new FileUploader({
  20. dataScope: '',
  21. isMultipleFiles: true
  22. });
  23. fileUploader.initUploader();
  24. $.widget('mage.mediaUploader', {
  25. /**
  26. *
  27. * @private
  28. */
  29. _create: function () {
  30. var self = this,
  31. progressTmpl = mageTemplate('[data-template="uploader"]'),
  32. isResizeEnabled = this.options.isResizeEnabled,
  33. resizeConfiguration = {
  34. action: 'resize',
  35. maxWidth: this.options.maxWidth,
  36. maxHeight: this.options.maxHeight
  37. };
  38. if (!isResizeEnabled) {
  39. resizeConfiguration = {
  40. action: 'resize'
  41. };
  42. }
  43. this.element.find('input[type=file]').fileupload({
  44. dataType: 'json',
  45. formData: {
  46. 'form_key': window.FORM_KEY
  47. },
  48. dropZone: '[data-tab-panel=image-management]',
  49. sequentialUploads: true,
  50. acceptFileTypes: /(\.|\/)(gif|jpe?g|png)$/i,
  51. maxFileSize: this.options.maxFileSize,
  52. /**
  53. * @param {Object} e
  54. * @param {Object} data
  55. */
  56. add: function (e, data) {
  57. var fileSize,
  58. tmpl;
  59. $.each(data.files, function (index, file) {
  60. fileSize = typeof file.size == 'undefined' ?
  61. $.mage.__('We could not detect a size.') :
  62. byteConvert(file.size);
  63. data.fileId = Math.random().toString(33).substr(2, 18);
  64. tmpl = progressTmpl({
  65. data: {
  66. name: file.name,
  67. size: fileSize,
  68. id: data.fileId
  69. }
  70. });
  71. $(tmpl).appendTo(self.element);
  72. });
  73. $(this).fileupload('process', data).done(function () {
  74. data.submit();
  75. });
  76. },
  77. /**
  78. * @param {Object} e
  79. * @param {Object} data
  80. */
  81. done: function (e, data) {
  82. if (data.result && !data.result.error) {
  83. self.element.trigger('addItem', data.result);
  84. } else {
  85. fileUploader.aggregateError(data.files[0].name, data.result.error);
  86. }
  87. self.element.find('#' + data.fileId).remove();
  88. },
  89. /**
  90. * @param {Object} e
  91. * @param {Object} data
  92. */
  93. progress: function (e, data) {
  94. var progress = parseInt(data.loaded / data.total * 100, 10),
  95. progressSelector = '#' + data.fileId + ' .progressbar-container .progressbar';
  96. self.element.find(progressSelector).css('width', progress + '%');
  97. },
  98. /**
  99. * @param {Object} e
  100. * @param {Object} data
  101. */
  102. fail: function (e, data) {
  103. var progressSelector = '#' + data.fileId;
  104. self.element.find(progressSelector).removeClass('upload-progress').addClass('upload-failure')
  105. .delay(2000)
  106. .hide('highlight')
  107. .remove();
  108. },
  109. stop: fileUploader.uploaderConfig.stop
  110. });
  111. this.element.find('input[type=file]').fileupload('option', {
  112. process: [{
  113. action: 'load',
  114. fileTypes: /^image\/(gif|jpeg|png)$/
  115. },
  116. resizeConfiguration,
  117. {
  118. action: 'save'
  119. }]
  120. });
  121. }
  122. });
  123. return $.mage.mediaUploader;
  124. });