WhatIMG: Drag + Drop Files

This script allows you to drag and drop files for an easier upload process.

当前为 2014-05-16 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @id whatimg-drag-drop
  3. // @name WhatIMG: Drag + Drop Files
  4. // @namespace hateradio)))
  5. // @author hateradio
  6. // @version 2.2
  7. // @description This script allows you to drag and drop files for an easier upload process.
  8. // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAIAAAAlC+aJAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkM4Q0RGNzA3OUY5MzExRTBCOEQ4QzFGN0Q0NTcwQkQ5IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkM4Q0RGNzA4OUY5MzExRTBCOEQ4QzFGN0Q0NTcwQkQ5Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QzhDREY3MDU5RjkzMTFFMEI4RDhDMUY3RDQ1NzBCRDkiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6QzhDREY3MDY5RjkzMTFFMEI4RDhDMUY3RDQ1NzBCRDkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7XViS2AAAIFElEQVR42rxaa5rbNgwk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
  9. // @icon64 data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAIAAAAlC+aJAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkM4Q0RGNzA3OUY5MzExRTBCOEQ4QzFGN0Q0NTcwQkQ5IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkM4Q0RGNzA4OUY5MzExRTBCOEQ4QzFGN0Q0NTcwQkQ5Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QzhDREY3MDU5RjkzMTFFMEI4RDhDMUY3RDQ1NzBCRDkiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6QzhDREY3MDY5RjkzMTFFMEI4RDhDMUY3RDQ1NzBCRDkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7XViS2AAAIFElEQVR42rxaa5rbNgwk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
  10. // @include http*://*whatimg.com/
  11. // @match *://*.whatimg.com/
  12. // @since Mar-10-2010
  13. // @date Nov-5-2012
  14. // @grant GM_xmlhttpRequest
  15. // ==/UserScript==
  16.  
  17. // S T O R A G E HANDLE
  18. var strg = {
  19. on:(function(){ try { var s = window.localStorage; if(s.getItem&&s.setItem&&s.removeItem){return true;} } catch(e) {return false;} }()),
  20. read:function(key){ return this.on ? JSON.parse(window.localStorage.getItem(key)) : false; },
  21. save:function(key,dat){ return this.on ? !window.localStorage.setItem(key, JSON.stringify(dat)) : false; },
  22. wipe:function(key){ return this.on ? !window.localStorage.removeItem(key) : false; },
  23. zero:function(o){ var k; for(k in o){ if(o.hasOwnProperty(k)){ return false; } } return true; }
  24. };
  25.  
  26. // U P D A T E HANDLE
  27. var update = {
  28. name:'WhatIMG: Drag + Drop Files',
  29. version:2200,
  30. key:'ujs_WIMG_DRAGDROP',
  31. callback:'wimgddupdt',
  32. urij:'https://dl.dropbox.com/u/14626536/userscripts/updt/wimgdd/wimgdd.json',
  33. uric:'https://dl.dropbox.com/u/14626536/userscripts/updt/wimgdd/wimgdd.js', // If you get "Failed to load source for:" in Firebug, allow dropbox to run scripts.
  34. checkchrome:false,
  35. interval:5,
  36. day:(new Date()).getTime(),
  37. time:function(){return new Date(this.day + (1000*60*60*24*this.interval)).getTime();},
  38. css:function(t){
  39. if(!this.style){this.style = document.createElement('style'); this.style.type = 'text/css'; document.body.appendChild(this.style);} this.style.appendChild(document.createTextNode(t+'\n'));
  40. },
  41. js:function(t){
  42. var j = document.createElement('script'); j.type = 'text/javascript'; /(?:^https?\:\/\/)/i.test(t) ? j.src = t : j.textContent = t; document.body.appendChild(j);
  43. },
  44. notification:function(j){
  45. if(j){if(this.version < j.version){window.localStorage.setItem(this.key,JSON.stringify({date:this.time(),version:j.version,page:j.page}));}else{return true;}}
  46. var a = document.createElement('a'), b = JSON.parse(window.localStorage.getItem(this.key)); a.href = b.page || '#'; a.id = 'userscriptupdater'; a.title = 'Update now.'; a.textContent = 'An update for '+this.name+' is available.'; document.body.appendChild(a); return true;
  47. },
  48. check:function(opt){
  49. if(typeof(GM_updatingEnabled) === 'boolean' || !strg.on){return;}
  50. var stored = strg.read(this.key), J, page;
  51. if(opt || !stored || stored.date < this.day){
  52. page = stored && stored.page ? stored.page : '';
  53. strg.save(this.key,{date:this.time(),version:this.version,page:page});
  54. if(!opt){this.css(this.csstxt);}
  55. if(!opt && typeof(GM_xmlhttpRequest) === 'function' && !this.chrome()){
  56. GM_xmlhttpRequest({method: 'GET', url: update.urij, onload: function(r){ update.notification(JSON.parse(r.responseText));}, onerror: function(){update.check(1);}});
  57. }else{
  58. J = this.notification.toString().replace('function','function '+this.callback).replace('this.version',this.version).replace(/(?:this\.key)/g,"'"+this.key+"'").replace('this.time()',this.time()).replace('this.name','j.name');
  59. this.js(J); this.js(this.uric);
  60. }
  61. }else if(this.version < stored.version){ this.css(this.csstxt); this.notification(); }
  62. },
  63. chrome:function(){
  64. if(this.checkchrome === true && typeof(chrome) === 'object'){ return true; }
  65. },
  66. csstxt:'#userscriptupdater,#userscriptupdater:visited{-moz-box-shadow: 0 0 6px #787878;-webkit-box-shadow: 0 0 6px #787878;box-shadow: 0 0 6px #787878;border: 1px solid #777;-moz-border-radius:4px;border-radius:4px; cursor:pointer;color:#555;font-family: Arial;font-size: 11px;font-weight: bold; text-align: justify;min-height: 45px;padding: 12px 20px 10px 65px;position: fixed; right: 10px;top: 10px;width: 170px;background: #ebebeb url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACsAAACLCAYAAAD4QWAuAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2RpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo1NUIzQjc3MTI4N0RFMDExOUM4QzlBNkE2NUU3NDJFNCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpGN0Q1OEQyNjdEQzUxMUUwQThCNEE3MTU1NDU1NzY2OSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpGN0Q1OEQyNTdEQzUxMUUwQThCNEE3MTU1NDU1NzY2OSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IFdpbmRvd3MiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1NUIzQjc3MTI4N0RFMDExOUM4QzlBNkE2NUU3NDJFNCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo1NUIzQjc3MTI4N0RFMDExOUM4QzlBNkE2NUU3NDJFNCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Po6YcvQAAAQFSURBVHja7JzBSxRRHMdnp+gkiLdOgtshKGSljQVF8CK0biEErYfwFmT+BQpdA0MIBEFtTx2qSxESaAt5ioUQFDp5sjl06rbnumzfp7+VbZx5M+/Nb9wZ+f3g56wzO28//ua93/u9J/stdDodx2/P3o85llaFT8JvwlvwTfhf00a2Hv8IPO86PHYHvg//An8OfwRfg/9RfzvTZ7DBvoZXQq6p6D7MCuwT+N2I92zAB/sNO0yPO8quwxf7DasABmK+d0XTVVKHnYIvG96z1i9Ymw8ep/R2obAqNdkm41e2sFct71v1/f4BiXyOJpRpHKZ918s9527B5+FvLwJWDaoR3zmvZ/bZw2HPNyMeBOTeb/BfaXaDEuVMvx2G3QDQMkW21wZsUpkp7GbIeU9zz3TI+WXTVGYCW6XRbApb1lxbTwt2VVMltS1hVWRnuWFVqhoNudbW9NchHIpc+ToO7GDE49JFtRij/ZG4gy0O7CIVIjZWNuhiw0lhK1SA6GzI8ppxKouCjTNaOWC7qWzKFrYaNw/SQOKwNVtYk4KjyAQ7RpnHCHaeCg7ugZQon7sBj3RYM62mHdmTVAaGxbiRNVmqRM3/bUvgDQCX/CcLvZsceEOF1v82dgPTrkdVVp2iXU8Q4e9ob0IHu59gUecxdwdlMwBunusGAJ1NuPr0KLoFdYQ3GGBXAiMLWC9gBRDX2gTa9g3Wp7Rbk8TqaPfjWWRp9I0kaLARVCbiXMO/xLGwdfCd7Oa4eDGQdD0fYYcJ7z/bzXHpxbWEDRaddO1FF3aSobE6pazAawztX0H7465mXWVqB2hwqWdwFeFfGaM+Wlh4V/rkMO2fpmy3VWTf5AD0NzLLkYsfn53T7fUs21k2UPmw5jBs9qZgx/AH4Ns+VxvQwJg0rGXTMPUfnhYgj0MLmayb6+TIBFZgBVZgBVZgBVZgBVZgBVZgBVZgBVZgBVZgBVZgBVZgBVZgBVZgBVZgBVZgBVZgBVZgBVZgBVZgBTZzVrg3U+Nsz1iTo7m7c+GRFU2ONGBFkyMNWNHkSANWNDl0xqbJAZ+j1/nR5HBOv6zm/8JaPjQ5KKqiyRFVpORfk8PRf3NZq8lRrd3PhiaHc6pvcLk0ORDdfGlyAFg0OdKAPUlliG76mhyGUNaDLXOaHIjuJdXkoKVKXzU5wlJZZjU5AFyKKhErFkuVbjcoUo3Apcmhnu6Ebkcmc5oczd2dZlA3YNHkUAFwUtLkcJlWnm1a1ng94AvkbKnM1SxVTKwRMphYNDkAPNiFFU0OZuPV5NDMYiyaHOgKvJoc8CVftFk1ORRsi/FxvYR3yH9qZjYba+VGkwOTw5GCzZcmByzTmhyI6ra/kNkiz4wmByD/0+T4J8AAyDkZArebBxMAAAAASUVORK5CYII=) no-repeat 13px 15px} #userscriptupdater:hover,#userscriptupdater:visited:hover { border-color: #8f8d96; color:#55698c;background-position: 13px -85px }'
  67. };
  68. update.check();
  69.  
  70. var files = {
  71. URL:(function(){
  72. try {
  73. this.url = (window.createObjectURL && window) || (window.URL && URL) || (window.webkitURL && webkitURL);
  74. } finally {
  75. if (this.url && typeof this.url.revokeObjectURL !== 'function') { delete this.url; }
  76. return this.url;
  77. }
  78. }()),
  79. sizes:[],
  80. country:document.getElementById('countrydivcontainer'),
  81. form:document.getElementById('upload_form'),
  82. b:document.createElement('div'),
  83. c:document.createElement('div'),
  84. d:document.createElement('div'),
  85. send:document.createElement('div'),
  86. tab:document.getElementById('countrytabs'),
  87. init:function(){
  88. var that = this, css;
  89. this.bond = function(m){ var c = function(evt){ that[m].call(that,evt); }; return c; };
  90. css = '#upload_form input, #upload_form br, .dropboxhide { display:none; } #normal_upload input {display:inline !important} #dropbox { min-height: 200px; overflow: hidden; padding: 6px; cursor: pointer; position: relative; z-index: 1; background-color: #222; border-radius: 3px; margin: 5px 0px; } #dropbox:hover { background-color: #111} div.dropboxbg { background: url(http://whatimg.com/images/03448758284210266130.png) #222 no-repeat center center; }'
  91. +'\n.previewimgs { float: left; margin: 3px; border: 2px solid #eee; border-radius: 2px; max-width:150px;overflow:hidden;height:100px;background:#eee} .previewimgs img { max-height: 100px; opacity: .8; } .previewimgs:hover img { opacity: 1; /* position: absolute; top: -100px; left: -100px; z-index: 2; height: auto; */ }'
  92. +'\n#dropboxsend { background: #333; width: 50px; text-align: center; cursor: pointer; padding: 3px; border-radius: 2px; margin: auto; color: #eee; } #dropboxsend:hover { background: #111 }'
  93. +'\n#countrydivcontainer { position: relative } #dropboxpercent { position: absolute; top: 45px; right: 25px; color: #eee; z-index: 40; font-size: 24px; text-shadow: 1px 1px 8px #000; background: #333; padding: 0 3px; border-radius: 2px }';
  94. update.css(css);
  95. this.d.id = 'dropbox';
  96. this.d.title = 'Drop images onto me.';
  97. this.d.className = 'dropboxbg';
  98. this.d.addEventListener('dragenter',this.prevent,false);
  99. this.d.addEventListener('dragover',this.prevent,false);
  100. this.d.addEventListener('drop',this.bond('drops'),false);
  101. this.c.className = 'dropboxhide';
  102. this.c.id = 'dropboxpercent';
  103.  
  104. this.send.textContent = 'Send';
  105. this.send.title = 'Send Images';
  106. this.send.id = 'dropboxsend';
  107. this.send.addEventListener('click',this.bond('sender'),false);
  108. this.B = this.bond('mcs');
  109. this.tab.addEventListener('click',this.B,false);
  110. this.country.textContent = '';
  111. this.form.appendChild(this.d);
  112. this.form.appendChild(this.send);
  113. this.form.appendChild(this.b);
  114. this.country.appendChild(this.form);
  115. this.country.appendChild(this.c);
  116. this.ul();
  117. },
  118. mcs:function(){
  119. this.tab.removeEventListener('click',this.B,false);
  120. update.css('#upload_form input { display: inline-block !important }');
  121. },
  122. ul:function(){
  123. var temp = document.createElement('ul'),
  124. li = document.createElement('li'); li.textContent = 'Drop your images above. Double click on an image to remove it.'; temp.appendChild(li);
  125. li = document.createElement('li'); li.textContent = 'Allowed File Extensions: JPEG, JPG, GIF, and PNG'; temp.appendChild(li);
  126. li = document.createElement('li'); li.textContent = 'Max filesize is set at 5 Megabytes per image file.'; temp.appendChild(li);
  127. this.b.appendChild(temp);
  128. },
  129. prevent:function(evt){
  130. evt.stopPropagation();
  131. evt.preventDefault();
  132. },
  133. drops:function(evt){
  134. var dt = evt.dataTransfer;
  135. this.prevent(evt);
  136. this.d.className = 'dropboxnobg';
  137. this.gets(dt.files);
  138. },
  139. gets:function(files){
  140. var i = 0, f;
  141. for(i; i < files.length; i++){
  142. f = files[i]; // console.log(f.type);
  143. if(!f.type.match(/(?:image\/\b(?:jpeg|png|gif)\b)/)) { return false; }
  144. if(f.size > 5242880) { alert('Choose a smaller image!'); return false; }
  145. this.proc(f);
  146. }
  147. this.cls();
  148. },
  149. proc:function(f){
  150. if(this.sizes.indexOf(f.size) === -1){
  151. var D = document.createElement('div'), I = document.createElement('img');
  152. this.sizes.push(f.size);
  153. // console.log(this.sizes);
  154. I.file = f;
  155. I.title = 'Double click to remove';
  156. I.className = 'dropboximg';
  157. I.addEventListener('dblclick', this.bond('destroy'), false);
  158. D.className = 'previewimgs';
  159. D.appendChild(I);
  160. this.d.appendChild(D);
  161. this.img(I, f);
  162. }
  163. },
  164. img:function(i, f){
  165. if (this.URL) {
  166. // console.log('new');
  167. i.onload = this.rem.n;
  168. i.src = this.URL.createObjectURL(f);
  169. } else {
  170. // console.log('old');
  171. var r = new FileReader();
  172. r.onload = this.rem.o(i);
  173. r.readAsDataURL(f);
  174. }
  175. },
  176. rem: {
  177. n : function () {
  178. try {
  179. files.URL.revokeObjectURL(this.src);
  180. } catch (e) {
  181. // console.log('rem'+e);
  182. }
  183. },
  184. o : function (i) {
  185. return function (e) {
  186. i.src = e.target.result;
  187. };
  188. }
  189. },
  190. sender:function(){
  191. var imgs = document.querySelectorAll('.dropboximg'), i, img, xhr = new XMLHttpRequest(), fd = new FormData(this.form);
  192. if(imgs.length === 0){return false;}
  193. this.send.className = 'dropboxhide';
  194. this.c.className = '';
  195. for(i = 0; i < imgs.length; i++){ img = imgs[i]; fd.append('userfile[]', img.file); }
  196. xhr.upload.onprogress = this.bond('percent');
  197. xhr.open('POST', 'upload.php', true);
  198. xhr.onload = this.done;
  199. xhr.send(fd);
  200. },
  201. done:function(){
  202. var p = document.getElementById('page_body'), doc = document.implementation.createHTMLDocument('');
  203. doc.documentElement.innerHTML = this.responseText;
  204. p.innerHTML = doc.getElementById('page_body').innerHTML;
  205. },
  206. percent:function(evt){
  207. if(evt.lengthComputable){
  208. var percentage = Math.round((evt.loaded * 100) / evt.total);
  209. this.c.textContent = percentage +'%';
  210. }
  211. },
  212. destroy:function(evt){
  213. var i = evt.currentTarget, d = i.parentNode, n = this.sizes.indexOf(i.file.size);
  214. this.sizes.splice(n,1);
  215. d.parentNode.removeChild(d);
  216. // console.log(this.sizes);
  217. // console.log(this.sizes.length);
  218. this.cls();
  219. },
  220. cls:function(){
  221. if(this.sizes.length === 0){ this.d.className = 'dropboxbg'; }
  222. }
  223. };
  224. files.init();