vendor/uvdesk/core-framework/Resources/views/Templates/attachment.html.twig line 1

Open in your IDE?
  1. <style>
  2. input.attachment {
  3. display: none;
  4. }
  5. .uv-element-block .uv-added-attachment {
  6. color: #333333;
  7. margin: -14px 5px;
  8. }
  9. </style>
  10. <script type="text/javascript">
  11. $(function () {
  12. var FileView = Backbone.View.extend({
  13. fileCounter: 0,
  14. max_post_size: {{ max_post_size }},
  15. max_file_uploads: {{ max_file_uploads }},
  16. upload_max_filesize: {{ upload_max_filesize }},
  17. el: '.attachment-block',
  18. events : {
  19. 'click .uv-file-label': 'createFileType',
  20. 'change .attachment': 'selectFile',
  21. 'click .uv-added-attachment span': 'removeFile',
  22. 'click .uv-field-message': 'removeError',
  23. },
  24. createFileType: function(e) {
  25. this.removeError(e)
  26. var currentElement = Backbone.$(e.currentTarget),
  27. attachmentBlock = currentElement.parents('.attachment-block')
  28. if (attachmentBlock.children('.uv-added-attachment').length + 1 > this.max_file_uploads) {
  29. attachmentBlock.append(this.getDefaultErrorMessage())
  30. return;
  31. }
  32. this.fileCounter += 1;
  33. attachmentBlock.append('<div class="uv-added-attachment" style="display: none" id="file-' + this.fileCounter + '"><div class="uv-attachment"><input type="file" name="attachments[]" class="attachment" multiple="multiple"></div></div>')
  34. $('#file-' + this.fileCounter).find('.attachment').trigger('click')
  35. },
  36. labelTemplate: _.template('<div data-name="<%- fileName %>" class="uv-selected-attachment-item"><span></span><label class="file-name"><%- fileName %></label></div>'),
  37. selectFile: function(e) {
  38. var currentElement = Backbone.$(e.currentTarget);
  39. var attachmentBlock = currentElement.parents(".uv-added-attachment");
  40. var isError = false;
  41. if (currentElement.length) {
  42. files = currentElement[0].files;
  43. if (files.length) {
  44. for (var i = 0; i < files.length; i++) {
  45. var fileName = files[i].name;
  46. if (files[i].size > this.upload_max_filesize) {
  47. isError = true;
  48. break;
  49. }
  50. // Validating Form Size
  51. var formSize = 0
  52. var formData = new FormData(currentElement.parents('form')[0])
  53. for (var pair of formData.entries()) {
  54. if (pair[1] instanceof Blob) {
  55. formSize += pair[1].size
  56. } else {
  57. formSize += pair[1].length
  58. }
  59. }
  60. if (formSize > this.max_post_size) {
  61. isError = true
  62. }
  63. attachmentBlock.append(this.labelTemplate({
  64. 'fileName': fileName
  65. }));
  66. }
  67. }
  68. }
  69. if (isError) {
  70. attachmentBlock.parents('.attachment-block').append(this.getDefaultErrorMessage())
  71. attachmentBlock.remove()
  72. return
  73. }
  74. attachmentBlock.show()
  75. },
  76. removeFile: function(e) {
  77. this.removeError(e);
  78. let el = $(e.currentTarget).parent('.uv-selected-attachment-item');
  79. let inputEl = el.siblings('.uv-attachment').find('input');
  80. let fileCount = $("input[name='attachments[]']")[0].files.length;
  81. if (fileCount > 1) {
  82. console.log(fileCount);
  83. let fileName = el.data('name');
  84. let files = inputEl[0].files;
  85. let dt = new DataTransfer();
  86. for (let i = 0; i < files.length; i++) {
  87. let file = files[i];
  88. if (el.data('name') != files[i].name) {
  89. dt.items.add(file);
  90. }
  91. }
  92. $("input[name='attachments[]']")[0].files = dt.files;
  93. el.remove();
  94. if ($("input[name='attachments[]']")[0].files.length == 0) {
  95. $('.uv-added-attachment').remove();
  96. }
  97. }
  98. Backbone.$(e.currentTarget).parents('.uv-added-attachment').remove();
  99. },
  100. getDefaultErrorMessage: function() {
  101. return '<span class="uv-field-message">You can send up to ' + Math.floor(this.upload_max_filesize/(1024*1024)) + ' MB in attachments. If you have more than one attachment, they can\'t add up to more than ' + Math.floor(this.max_post_size/(1024*1024)) + ' MB and ' + this.max_file_uploads + ' attachments in total.</span>'
  102. },
  103. removeError: function(e) {
  104. Backbone.$(e.currentTarget).parents('.attachment-block').find('.uv-field-message').remove()
  105. }
  106. });
  107. var fileView = new FileView();
  108. });
  109. </script>