Blomaga Image Paste

ブロマガにクリップボードから画像アップロード

目前为 2016-09-06 提交的版本。查看 最新版本

  1. // ==UserScript==
  2. // @name Blomaga Image Paste
  3. // @namespace https://github.com/segabito/
  4. // @version 0.0.2
  5. // @description ブロマガにクリップボードから画像アップロード
  6. // @author segabito macmoto
  7. // @match http://ch.nicovideo.jp/tool/blomaga/edit?article_id=*
  8. // @grant none
  9. // @require https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.10.1/lodash.js
  10. // @license public domain
  11. // @noframes
  12. // ==/UserScript==
  13.  
  14. (function() {
  15. const monkey = function() {
  16. const $ = window.jQuery;
  17. const Blomaga = window.Blomaga;
  18. const Editor = Blomaga.Editor;
  19.  
  20. const post = function(file) {
  21. const transfer = new Editor.Uploader.FileReadTransfer();
  22. const progressBar = new Editor.Uploader.ProgressBar();
  23. progressBar.setPercent(0);
  24. transfer.progress_bar = progressBar;
  25. progressBar.show();
  26.  
  27. transfer.onProgress = (per) => {
  28. progressBar.setPercent(per);
  29. };
  30.  
  31. transfer.onLoad = (resp) => {
  32. console.info('success: ', resp);
  33. progressBar.setPercent(100);
  34. progressBar.showSuccess();
  35. window.setTimeout(() => { progressBar.hide(); }, 1000);
  36.  
  37. Editor.SideBar.Image.addList(
  38. resp.src,
  39. resp.image_id,
  40. resp.width,
  41. resp.height,
  42. resp.csrf_token,
  43. resp.csrf_token_time
  44. );
  45. Editor.insertUploadImage(
  46. resp.image_id,
  47. resp.src,
  48. resp.width,
  49. resp.height
  50. );
  51. };
  52.  
  53. transfer.onError = (json) => {
  54. progressBar.showError(json);
  55. };
  56.  
  57. transfer.upload(file);
  58. };
  59.  
  60. const onPaste = function(e) {
  61. let file;
  62. const items =
  63. (e.clipboardData || e.originalEvent.clipboardData).items;
  64. console.info('clipboard items', e, JSON.stringify(items));
  65.  
  66. for (let i = 0, len = items.length; i < len; i++) {
  67. let item = items[i];
  68. if (item.type.match(/^image/i)) {
  69. file = item.getAsFile();
  70. break;
  71. }
  72. }
  73. if (!file) { return; }
  74. e.preventDefault();
  75. e.stopPropagation();
  76. post(file);
  77. };
  78.  
  79. const initialize = function() {
  80. Editor.insertUploadImage =
  81. _.debounce(Editor.insertUploadImage.bind(Editor), 300);
  82.  
  83. window.setTimeout(() => {
  84. $('iframe#wysiwyg_editor_ifr')
  85. .contents().find('html').on('paste', onPaste);
  86. }, 1000);
  87. };
  88. initialize();
  89. };
  90.  
  91.  
  92. const script = document.createElement('script');
  93. script.setAttribute('type', 'text/javascript');
  94. script.setAttribute('charset', 'UTF-8');
  95. script.appendChild(document.createTextNode('(' + monkey + ')()'));
  96. document.body.appendChild(script);
  97. })();