PTH Drop Logfile

Enable dropping logfiles into a dropzone on the upload page

  1. // ==UserScript==
  2. // @name PTH Drop Logfile
  3. // @version 0.5
  4. // @description Enable dropping logfiles into a dropzone on the upload page
  5. // @author Chameleon
  6. // @include http*://redacted.ch/upload.php*
  7. // @include http*://redacted.ch/logchecker.php*
  8. // @grant none
  9. // @run-at document-idle
  10. // @namespace https://greasyfork.org/users/87476
  11. // ==/UserScript==
  12.  
  13. (function() {
  14. 'use strict';
  15.  
  16. var inputs=document.getElementsByTagName('input');
  17. for(var i=0; i<inputs.length; i++)
  18. {
  19. var inp=inputs[i];
  20. if(inp.type == 'file')
  21. {
  22. if(inp.getAttribute('hasDropzone') == 'true')
  23. continue;
  24. var field=inp.parentNode.getElementsByTagName('input');
  25. if(field.length > 1)
  26. {
  27. if(field[0].id == 'image')
  28. continue;
  29. }
  30. makeDropzone(inp);
  31. }
  32. }
  33. /*var input=document.getElementById('logfields').getElementsByTagName('input')[0];
  34.  
  35. makeDropzone(input);*/
  36.  
  37. var script=document.createElement('script');
  38. script.appendChild(document.createTextNode('AddLogField=('+AddLogField+'); makeDropzone=('+makeDropzone+'); dragenter=('+dragenter+'); drop=('+drop+');'));
  39. document.body.appendChild(script);
  40. }());
  41.  
  42. function AddLogField()
  43. {
  44. if (LogCount >= 200) {
  45. return;
  46. }
  47. var LogField = document.createElement("input");
  48. LogField.type = "file";
  49. LogField.id = "file";
  50. LogField.name = "logfiles[]";
  51. LogField.size = 50;
  52. var x = $('#logfields').raw();
  53. x.appendChild(document.createElement("br"));
  54. x.appendChild(LogField);
  55. LogCount++;
  56. makeDropzone(LogField);
  57. }
  58.  
  59. function makeDropzone(input)
  60. {
  61. var dropzone = document.createElement('div');
  62. input.parentNode.appendChild(dropzone);
  63. dropzone.addEventListener("dragenter", dragenter, false);
  64. dropzone.addEventListener("dragover", dragenter, false);
  65. dropzone.addEventListener("drop", drop.bind(undefined, input), false);
  66. dropzone.innerHTML = 'Or drop files here';
  67. dropzone.setAttribute('style', 'width: 400px; height: 30px; background: rgba(64,64,64,0.8); border: dashed; border-radius: 10px; margin: auto; text-align: center; font-size: 20px;');
  68. input.setAttribute('hasDropzone', 'true');
  69. }
  70.  
  71. function dragenter(event)
  72. {
  73. event.preventDefault();
  74. event.stopPropagation();
  75. }
  76.  
  77. function drop(input, event)
  78. {
  79. event.preventDefault();
  80. event.stopPropagation();
  81. /*event.dataTransfer.files = document.getElementById('file').files;
  82. console.log('here');
  83. input.files = event.dataTransfer.files;*/
  84. var e=new event.constructor(event.type, event);
  85. input.dispatchEvent(e);
  86. }