Advertisement
Guest User

Untitled

a guest
Jul 17th, 2019
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Stage('Управление полями загрузки картинок',    'uploadfields', Stage.DOMREADY,     function(){
  2.     if(!window.thread.board) return; //не запускаем на главной
  3.     if(!window.FileReader) return; //HTML5
  4.     if(!window.FormData) return; //HTML5
  5.  
  6.     var FormFiles = window.FormFiles = {
  7.         vip: true,
  8.         max_files_size: Store.get('other.max_files_size') || window.thread.max_files_size,
  9.         max: Store.get('other.max_files') || 4,
  10.         inputsContainer: null,
  11.         count: 0,
  12.         files_size: 0,
  13.         filtered: [], //тут файлы, которые фактически пойдут на сервер(удаленные удаляются)
  14.  
  15.         init: function(){
  16.             var premium = Store.get('jsf34nfk3jh') && !Store.get('renewneeded');
  17.            
  18.             if(premium) {
  19.                 if(premium) $('.filer__limits').html('Макс объем: ' + this.max_files_size/1024 + 'Mб, макс кол-во файлов: ' + this.max);
  20.             }
  21.             $('.filer__input').change(this.onInputChangeMulti);
  22.             $('.filer__thumbnails').on('click','.filer__delete', this.onDeleteMulti);
  23.            
  24.             var drag = $('.filer__drag-area');
  25.             var postform = $('.makaba');
  26.             drag.on('drag dragstart dragend dragover dragenter dragleave drop', this.fileDragHover)
  27.                 .on('drop', this.fileSelectHandler)
  28.                 .on('click', function() { $('#formimages').click(); });
  29.             postform.on('paste', this.onClipboardPaste);
  30.            
  31.             this.draggable();
  32.         },
  33.  
  34.         draggable: function() {
  35.             var in_drag = false;
  36.             $('.filer__thumbnails').on('mousedown','.filer__img',function(e){
  37.                 if(in_drag) return;
  38.                 if(e.which != 1) return;
  39.                 e.preventDefault();
  40.  
  41.                 in_drag = $(this).closest('.filer__thumb').data('id');
  42.             });
  43.             $('.filer__thumbnails').on('mouseover','.filer__thumb',function(e){
  44.                 if(!in_drag) return;
  45.                 var this_id = $(this).data('id');
  46.                 if(in_drag == this_id) return;
  47.                 if(Math.abs(in_drag-this_id) > 1) return;
  48.  
  49.                 FormFiles.swap(in_drag, this_id);
  50.                 in_drag = this_id;
  51.             });
  52.  
  53.             $(window).mouseup(function(){
  54.                 if(!in_drag) return;
  55.                 in_drag = false;
  56.             });
  57.         },
  58.        
  59.         onClipboardPaste: function(e) {
  60.             var items = (e.clipboardData || e.originalEvent.clipboardData).items;
  61.             for (var i = 0; i < items.length; i++) {
  62.                 var item = items[i];
  63.                 if (item.kind === 'file') {
  64.                   var blob = item.getAsFile();
  65.                   //console.log(blob);
  66.                   FormFiles.addMultiFiles([blob]);
  67.                  
  68.                 }
  69.             }
  70.         },
  71.        
  72.         onInputChangeMulti: function(e) {
  73.             if(!this.files || !this.files[0]) return;
  74.             if(FormFiles.count >= FormFiles.max || this.files.length > FormFiles.max) {
  75.                 alert('Вы можете загрузить не более ' + FormFiles.max + ' файлов!');
  76.                 this.value='';
  77.                 return;
  78.             }
  79.             FormFiles.addMultiFiles(this.files);
  80.         },
  81.        
  82.         fileSelectHandler: function(e) {
  83.             FormFiles.fileDragHover(e);
  84.             e.dataTransfer = e.originalEvent.dataTransfer;
  85.             var files = e.target.files || e.dataTransfer.files;
  86.             if(FormFiles.count >= FormFiles.max || files.length > FormFiles.max) {
  87.                 alert('Вы можете загрузить не более ' + FormFiles.max + ' файлов!');
  88.                 this.value='';
  89.                 return;
  90.             }
  91.             FormFiles.addMultiFiles(files);
  92.         },
  93.        
  94.         fileDragHover: function(e) {
  95.             e.stopPropagation();
  96.             e.preventDefault();
  97.             e.target.className = 'filer__drag-area';
  98.             $(e.target).addClass(e.type == 'dragover' ? 'filer__drag-area_hover' : '');
  99.         },
  100.        
  101.         onDeleteMulti: function() {
  102.             var el = $(this);
  103.             var id = el.closest('.filer__thumb').data('id');
  104.             FormFiles.removeFileMulti(id);
  105.         },
  106.        
  107.         addMultiFiles: function(files) {
  108.             for(var i=0;i<files.length;i++) {
  109.                 this.files_size += files[i].size/1024;
  110.                 if(this.files_size > this.max_files_size) {
  111.                     alert('Превышен макс. объем данных для отправки, кол-во доступных для загрузки файлов - ' + i);
  112.                     this.files_size -= files[i].size/1024;
  113.                     break;
  114.                 }
  115.                 this.filtered.push(files[i]); //пишем файлы в массив, там можно их шатать, чтобы в sendForm высирать на сервер
  116.                 if(files[i].type.substr(0,5) == 'image') {
  117.                     var reader = new FileReader();
  118.                     reader.onload = (function () {
  119.                         var info = {
  120.                             name: files[i].name,
  121.                             size: files[i].size,
  122.                             type: files[i].type,
  123.                             preview: '/newtest/resources/images/dvlogo.png'
  124.                         };
  125.                         return function (e) {
  126.                             FormFiles.count++;
  127.                             info.preview = e.target.result;
  128.                             FormFiles.processFile(info);
  129.                         }
  130.                     })(files[i]);
  131.                     reader.readAsDataURL(files[i]);
  132.                 }else{
  133.                     FormFiles.count++;
  134.                     this.processFile({name: files[i].name,size: files[i].size,type: files[i].type,preview: '/newtest/resources/images/dvlogo.png'});
  135.                 }
  136.             }
  137.         },
  138.  
  139.         removeFileMulti: function(id) {
  140.             var name = $('.filer__thumb_c_' + id + ' .filer__img img').attr('title');
  141.            
  142.             $('.filer__thumb_c_' + id).remove();
  143.             for(var i=id;i<=this.count;i++) {
  144.                 this.rename(i, i-1);
  145.             }
  146.             this.count--;
  147.  
  148.             var filesArr = Array.prototype.slice.call(FormFiles.filtered);
  149.             for(var i=0;i<filesArr.length;i++) {
  150.                 if(filesArr[i].name === name) {
  151.                     this.files_size -= filesArr[i].size/1024;
  152.                     filesArr.splice(i,1);
  153.                     break;
  154.                 }
  155.             }
  156.             this.filtered = filesArr;
  157.         },
  158.  
  159.         rename: function(old_id, new_id) {
  160.             $('.form-files-input-image' + old_id)
  161.                 .attr('name', 'file' + new_id)
  162.                 .removeClass('form-files-input-image' + old_id)
  163.                 .addClass('form-files-input-image' + new_id);
  164.  
  165.             $('.filer__thumb_c_' + old_id)
  166.                 .removeClass('filer__thumb_c_' + old_id)
  167.                 .addClass('filer__thumb_c_' + new_id)
  168.                 .data('id', new_id);
  169.  
  170.         },
  171.  
  172.         swap: function(id1, id2) {
  173.             if(Math.abs(id1-id2) > 1) return;
  174.             if(id1 == id2) return;
  175.  
  176.             var $boxex = $('.filer__thumb_c_' + id1);
  177.             var $boxex2 = $('.filer__thumb_c_' + id2);
  178.  
  179.             for(var i=0;i<$boxex.length;i++) {
  180.                 if(id1 < id2) $($boxex2[i]).after($boxex[i]);
  181.                 else $($boxex2[i]).before($boxex[i]);
  182.             }
  183.  
  184.             this.rename(id1, 'temp');
  185.             this.rename(id2, id1);
  186.             this.rename('temp', id2);
  187.            
  188.             var tmpval = this.filtered[id1-1];
  189.             this.filtered[id1-1] = this.filtered[id2-1];
  190.             this.filtered[id2-1] = tmpval;
  191.         },
  192.  
  193.         processFile: function(file) {
  194.             //console.log(file);
  195.             var width= 100, height = 100;
  196.             $('.filer__thumbnails').append('<div class="filer__thumb filer__thumb_c_' + this.count + '"  data-id="' + this.count + '">' +
  197.                 '<span class="filer__img"><img src="' + file.preview + '" style="max-width:' + width + 'px;max-height:' + height + 'px" title="' + file.name + '"></span>' +
  198.                 '<span class="filer__meta">' +
  199.                     '<span class="filer__size">' + getReadableFileSizeString(file.size) + '</span> ' +
  200.                     '<span class="filer__delete"><svg xmlns="http://www.w3.org/2000/svg"class="icon"><use xlink:href="#icon__delete"></use></svg></span>' +
  201.                 '</span>' +
  202.                 '<span class="filer__nsfw" style="display:none;">' + '<label for="img_nsfw">nsfw: </label><input type="checkbox" id="img_nsfw" name="image' + this.count + '_nsfw" value="1">' + '</span> ' +  // window.thread.board=='pa'
  203.                 '</div>' +
  204.                 (this.count==4?'<br>':''));
  205.             if(window.thread.board=='pa') {
  206.                 $('.filer__nsfw').show();
  207.             }
  208.         },
  209.  
  210.         reset: function() {
  211.             $('.filer__thumbnails').html('');
  212.             $('#form-files-input-inputs-container').html('');
  213.             this.count = 0;
  214.             this.filtered = [];
  215.             this.files_size = 0;
  216.         },
  217.  
  218.         appendToForm: function(form) {
  219.             $(form).append($('#form-files-input-inputs-container'));
  220.         },
  221.     };
  222.  
  223.     if(FormFiles.max) FormFiles.init();
  224.  
  225. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement