TweetDeck Image Assistant

Download/Share Images Faster

目前為 2017-05-05 提交的版本,檢視 最新版本

  1. // ==UserScript==
  2. // @name TweetDeck Image Assistant
  3. // @namespace http://ejew.in/
  4. // @version 0.1
  5. // @description Download/Share Images Faster
  6. // @author EntranceJew
  7. // @match https://tweetdeck.twitter.com/*
  8. // @require https://cdn.rawgit.com/eligrey/FileSaver.js/5ed507ef8aa53d8ecfea96d96bc7214cd2476fd2/FileSaver.min.js
  9. // @noframes
  10. // @grant none
  11. // ==/UserScript==
  12.  
  13. (function() {
  14. 'use strict';
  15.  
  16. var tool_icon = '<li class="tweet-action-item pull-left margin-r--13 margin-l--1">';
  17. tool_icon += '<a class="js-show-tip tweet-action position-rel" href="#" rel="spice" title="" data-original-title="Spice It Up">';
  18. tool_icon += '<i class="icon icon-home icon-home-toggle txt-center"></i> <span class="is-vishidden"> Spice </span>';
  19. tool_icon += '</a> </li>';
  20.  
  21. var mime_db = {
  22. jpeg: "image/jpeg",
  23. jpg: "image/jpeg",
  24. gif: "image/gif",
  25. webp: "image/webp",
  26. undefined: "text/plain"
  27. };
  28.  
  29. function detect_mime(url){
  30. return mime_db[ /(?:\.([^.]+))?$/.exec(url)[1] ];
  31. }
  32.  
  33. function get_img_data( url, on_load ) {
  34. var xhr = new XMLHttpRequest();
  35. xhr.open("GET", url);
  36. xhr.responseType = "blob";
  37. xhr.onload = on_load;
  38. xhr.send();
  39. }
  40.  
  41. function download_now( url ){
  42. get_img_data( url, function( e ){
  43. var img_name = url.substring( url.lastIndexOf('/')+1 );
  44. var the_blob = new Blob([this.response], {type: detect_mime(url)});
  45. saveAs( the_blob, img_name.replace(/:orig$/, "") );
  46. });
  47. }
  48.  
  49. function nice_url( url, replacement ){
  50. replacement = replacement || ":orig";
  51. var bg = url;
  52. bg = bg.replace('url(','').replace(')','').replace(/\"/gi, "");
  53. bg = bg.replace(/:thumb$/, "");
  54. bg = bg.replace(/:small$/, "");
  55. bg = bg.replace(/:medium$/, "");
  56. bg = bg.replace(/:large$/, "");
  57. return bg;
  58. }
  59.  
  60. setInterval(function(){
  61. $('.stream-item:not([data-ejew])').each(function(){
  62. var grand_dad = $( this );
  63.  
  64. /*
  65. // for appending to the dropdown menu if we wanted that
  66. var tool_bar = grand_dad.find('.js-dropdown-content > ul');
  67. tool_bar.prepend('<li class="is-selectable"><a href="#" data-action="ejew">Spice it up</a></li>');
  68. */
  69.  
  70. // find all the images and store their links in data
  71. var images = [];
  72. grand_dad.find('.js-media-image-link, .js-media .media-image').each( function(i, el){
  73. images.push( nice_url( $( el ).css('background-image'), ":orig" ) );
  74. });
  75. grand_dad.data('ejew-imgs', images);
  76.  
  77. // make an instance of the toolbar button
  78. var new_tool = $( tool_icon );
  79. new_tool.on('click', function(){
  80. console.log("yes!");
  81. var imgs = grand_dad.data('ejew-imgs');
  82. console.log( 'loading', imgs );
  83. for( var i = 0; i < imgs.length; i++ ){
  84. download_now( imgs[i] );
  85. }
  86. });
  87. // attach
  88. grand_dad.find('ul.tweet-actions > li:nth-last-child(2)').before( new_tool );
  89.  
  90. // prevent loading up this element again
  91. grand_dad.attr('data-ejew', 'in');
  92. });
  93.  
  94. // make it so that you can copy image source from previews
  95. $('img.media-img:not([data-ejew])').each(function(){
  96. $( this ).attr('src', nice_url( $( this ).attr('src') ) );
  97. $( this ).attr('data-ejew', 'in');
  98. });
  99. }, 300);
  100. })();