'Sharty Filename Randomizer

Randomizes filenames on soyjak.party!

  1. // ==UserScript==
  2. // @name 'Sharty Filename Randomizer
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.1
  5. // @description Randomizes filenames on soyjak.party!
  6. // @author Unknown
  7. // @match https://soyjak.party/*
  8. // @match https://www.soyjak.party/*
  9. // @icon https://www.google.com/s2/favicons?sz=64&domain=soyjak.party
  10. // @grant none
  11. // @license wtfpl
  12. // ==/UserScript==
  13.  
  14. $(document).off("drop click keypress paste");
  15. const max_images = 4;
  16.  
  17. var files = [];
  18. function addFile(file) {
  19. if (files.length == max_images)
  20. return;
  21.  
  22. var fileName = `${Date.now() - Math.floor(Math.random() * 365 * 24*60*60*1000)}` + "." + file.name.split('.').pop();
  23. //var fileName = "."+file.name.split('.').pop();
  24. var newFile = new File([file.slice(0, file.size, file.type)], fileName, {type: file.type});
  25. files.push(newFile);
  26. addThumb(newFile);
  27. }
  28.  
  29. function removeFile(file) {
  30. files.splice(files.indexOf(file), 1);
  31. }
  32.  
  33. function getThumbElement(file) {
  34. return $('.tmb-container').filter(function(){return($(this).data('file-ref')==file);});
  35. }
  36.  
  37. function addThumb(file) {
  38.  
  39. var fileName = (file.name.length < 24) ? file.name : file.name.substr(0, 22) + '…';
  40. var fileType = file.type.split('/')[0];
  41. var fileExt = file.type.split('/')[1];
  42. var $container = $('<div>')
  43. .addClass('tmb-container')
  44. .data('file-ref', file)
  45. .append(
  46. $('<div>').addClass('remove-btn').html('✖'),
  47. $('<div>').addClass('file-tmb'),
  48. $('<div>').addClass('tmb-filename').html(fileName)
  49. )
  50. .appendTo('.file-thumbs');
  51.  
  52. var $fileThumb = $container.find('.file-tmb');
  53. if (fileType == 'image') {
  54. // if image file, generate thumbnail
  55. var objURL = window.URL.createObjectURL(file);
  56. $fileThumb.css('background-image', 'url('+ objURL +')');
  57. } else {
  58. $fileThumb.html('<span>' + fileExt.toUpperCase() + '</span>');
  59. }
  60. }
  61.  
  62. $(document).on('ajax_before_post', function (e, formData) {
  63. for (var i=0; i<max_images; i++) {
  64. var key = 'file';
  65. if (i > 0) key += i + 1;
  66. if (typeof files[i] === 'undefined') break;
  67. formData.append(key, files[i]);
  68. }
  69. });
  70.  
  71. // clear file queue and UI on success
  72. $(document).on('ajax_after_post', function () {
  73. files = [];
  74. $('.file-thumbs').empty();
  75. });
  76.  
  77. var dragCounter = 0;
  78. var dropHandler = {
  79. drop: function (e) {
  80. e.stopPropagation();
  81. e.preventDefault();
  82.  
  83. $('.dropzone').removeClass('dragover');
  84. dragCounter = 0;
  85.  
  86. var fileList = e.originalEvent.dataTransfer.files;
  87. for (var i=0; i<fileList.length; i++) {
  88. addFile(fileList[i]);
  89. }
  90. }
  91. };
  92.  
  93.  
  94. // attach handlers
  95. $(document).on(dropHandler);
  96.  
  97. $(document).on('click', '.dropzone .remove-btn', function (e) {
  98. e.stopPropagation();
  99.  
  100. var file = $(e.target).parent().data('file-ref');
  101.  
  102. getThumbElement(file).remove();
  103. removeFile(file);
  104. });
  105.  
  106. $(document).on('keypress click', '.dropzone', function (e) {
  107. e.stopPropagation();
  108.  
  109. // accept mouse click or Enter
  110. if ((e.which != 1 || e.target.className != 'file-hint') &&
  111. e.which != 13)
  112. return;
  113.  
  114. var $fileSelector = $('<input type="file" multiple>');
  115.  
  116. $fileSelector.on('change', function (e) {
  117. if (this.files.length > 0) {
  118. for (var i=0; i<this.files.length; i++) {
  119. addFile(this.files[i]);
  120. }
  121. }
  122. $(this).remove();
  123. });
  124.  
  125. $fileSelector.click();
  126. });
  127.  
  128. $(document).on('paste', function (e) {
  129. var clipboard = e.originalEvent.clipboardData;
  130. if (typeof clipboard.items != 'undefined' && clipboard.items.length != 0) {
  131.  
  132. //Webkit
  133. for (var i=0; i<clipboard.items.length; i++) {
  134. if (clipboard.items[i].kind != 'file')
  135. continue;
  136.  
  137. //convert blob to file
  138. var file = new File([clipboard.items[i].getAsFile()], 'ClipboardImage.png', {type: 'image/png'});
  139. addFile(file);
  140. }
  141. }
  142. });
  143.