DashPlus - Follow Back Checker

Checks if the blogs you're following also follow you

当前为 2014-12-30 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name DashPlus - Follow Back Checker
  3. // @namespace http://www.dashpl.us/
  4. // @description Checks if the blogs you're following also follow you
  5. // @include *www.tumblr.com/following
  6. // @include *www.tumblr.com/following/*
  7. // @version 2.0.0
  8. // @grant none
  9. // @run-at document-end
  10. // ==/UserScript==
  11.  
  12.  
  13.  
  14. //var check_img = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAMAAAC6V+0/AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAYBQTFRFUqhUttq2XK1ePHs9TqJQ/f799fr1LFstyuXLvd6+KVUq6vTqUKZSHjMfSJZKRpFIZbJn8/nzXq5gT6RRTZ5PcLhyS5tMRZBHdLp2VqtYHj8fFSsVk8mUcrhzi8WM3+/fUKVSqNSputy7WKtas9m0Y7FlqdSqv9/AQolEqNOpZ7NpQohDgY2BU2NTuNy5Nkk3iMSK1+PX7vDuJzwo3uPe1OnU7/fviMOJkb6TN3I43O3cLl8wqtWrmMuZnM6dl6GX0uXT5/PnQmtDqbGqMmczxM7EwuDCv8zAv86/Xo5fNFs1WqlcWaxbn8+g2ezZoaqhtcO1sdizzubPaJRpQ4xFQYZChL+F1trXSI5Kt9q4jcaOcrl0+fz6YLBie718ms2b6Oro2ufaP4NB3eTdSnpLOXU6kMeRj8eQZnRmaXdpeLR6bXtud7t4m82cXHRcjLeNm6mblriX8fXy8Pfw8/fzeZZ6U6lV6PPo7PXsaLRqbbZvS1xMQWFC0ejSUahT////lfBh+AAAAIB0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wA4BUtnAAABLUlEQVR42mKoxwIYwCRrsRUHp5K6qRmSoGBtpGJumpxcVLoeG0yQW11TLlpAiCm2UlTWwBEiWBFpl8NUVgcEDJJCQhKCIMEYpXhZZYY6MGBirGKxAAqy+vnG+UDFZOXVyoQjEusZuAPlVKFi5mwydQwKIYWCDEG2EsoQMZl6GSCpIO5pyMAYJlAG0QsWAwqmeDCoyTKBxbTY1MG0sLZTAIONgCSTokpdnbw8xBCR1BpXBjdVBiaOehnFelmIIJ91nglDeRgLDxMbdz1Ecx0Ls5Q/0PEOfCLCmvX1WnUQa7j0jUDezNfm865XgdjCby3tDPZ7SXCqRpYwSJlYEpe0DjSUikrZLTX4xPhCXaR47eHhyeqe58XOziVlnBmOFPL1yQUZ1brZzgkQHkCAAQAJGIOAIXi03wAAAABJRU5ErkJggg==";
  15. var check_img = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAXBJREFUeNqslcsvA1EYxWfGNN6jqkK9QmvjESwEW2Fr4X9lZ2mHSNio1KaxIBJCCVU1zpFzk5smw1z6Jb%2F0tjP3zPked%2BrHcey1M3x9zoNNMPxHnSo4gLlqgEUH2P2HGGMK7HARgj6Qcdj8Bi5BDcRiCBSMoGucgyMJMgbAujEVOIrdSvAevMpdCcwYcy6CDXAM7kBTeym2ACJzk4vglajL2ThYUjMDV8EnuWPdPkEWLIPJ1obaTWmqgw393qMH8vsZuAYfoFNpzuoeL0mQYmVtjJQOO3gDTsG7DkIRLNp1SxJkXR7UxUizxaE%2FUVcZI2AV5JPKZQt2a0OvRqKimpV1nQdgDUz8dBDsp9DNoJ7O9C%2FAodYZpTmnGnppBBn9YFTrupyGOqsboOu3cWgVZNfGlJ4v1zmwpbr6roKh6liUm7xea4U0YkbgWbNmCs3uboMVucqlHP6acciB3gMv1kWmPO0g9gj2v9%2FY7f4L%2BBJgAK%2B%2FTCvBclH%2BAAAAAElFTkSuQmCC";
  16. var question_img = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAP5JREFUeNqslVELgjAQx91a9iBiUfggPfT9P1f0EIRICBVT%2B1%2FcYJm6uTw4ps773f%2B2m4qu66IlTfCYwLfwdSDnCS8h7iEZevgDRraB7%2BlCwVeWUtvucI2s1VdJQmQYUo79qVaNZLwA9BqaoASAUrKiF%2F8ByhFgMlUfoC1X4K0wYxUpw%2Bk9gpwZRjZYgZoQcuzdawtGFs8F2lYBVlobI1l9ELC0dxqwmNtMhQDbHoxaZjcVIF1AC6ZcMB%2BFCqDTnCPjAmr4lZqc1y53xbhKrs2J4bF2KZTRwuYCJlyqaZfUZw0bqmjki0PzBWA%2B4hqjkGA38yDQNDMisfQv4C3AAHp3Vn27XeuSAAAAAElFTkSuQmCC";
  17.  
  18. var idPrefix = "dashplus_follow_back_";
  19. var classPrefix = idPrefix;
  20.  
  21. var followBackCss = '.'+classPrefix+'status{ float: left; font-family: tumblr-icons; font-size: 30px !important; font-weight: normal; height: 27px !important; margin: 4px 11px 4px 0; padding: 0 10px 0 6px !important; text-align: center; width: 13px; } .follower .info{ width: 358px; } .viewhide{ visibility: hidden; } .'+classPrefix+'sideblog{ padding: 0 14px 0 1px !important } .follower .poptica_header.popover_standalone{ margin-left: 42px; } .'+classPrefix+'status ~ .poptica_header.popover_standalone{ margin-left: 0px; }';
  22.  
  23. function run(){
  24. document.getElementsByTagName('head')[0].insertAdjacentHTML('beforeend','<style type="text/css">' + followBackCss + '</style>');
  25.  
  26. blogTabs = document.querySelectorAll('.tab_blogs .tab_blog:not(.tab_dashboard)');
  27. blogs = new Array();
  28. Array.prototype.forEach.call(blogTabs, function(blogTab){
  29. blogs.push(blogTab.getAttribute('id').slice(9));
  30. });
  31. me = blogs[0]; //Use the first blog from the user's sidebar by default
  32. drop_down_menu(blogs,me);
  33. run_check(me);
  34. }
  35. function drop_down_menu(blogs,me){
  36. //Construct a link
  37. var blogLink = document.createElement('div');
  38. blogLink.insertAdjacentHTML('beforeend', '<a href="//www.tumblr.com/blog/'+me+'">'+me+'</a>');
  39. //Create a container for the text and the link
  40. container = document.createElement('div');
  41. container.insertAdjacentHTML('beforeend',
  42. 'You are seeing blogs that follow ' + blogLink.outerHTML
  43. );
  44. //And put that container in another box
  45. div = document.createElement('div');
  46. div.insertAdjacentHTML('beforeend',container.outerHTML);
  47. div.className += ' grey_note';
  48. div.style.overflow = 'hidden';
  49. div.style.marginTop = '20px';
  50. div.setAttribute('id',idPrefix + 'sidebar_box');
  51. //And then add it to the sidebar
  52. document.getElementById('right_column').insertAdjacentHTML('beforeend',div.outerHTML);
  53. }
  54. function run_check(me){
  55. followerDivs = document.querySelectorAll('div#following div.follower');
  56. Array.prototype.forEach.call(followerDivs, function(followerDiv){
  57. if(followerDiv.className.indexOf(classPrefix + "checked") < 0){
  58. followerDiv.className += " " + classPrefix + "checked";
  59. var nameLink = followerDiv.querySelector('.info .name > a');
  60. if(nameLink !== null && 'null' !== nameLink){ //Because JavaScript fails at having a "continue" operator.
  61. var name = nameLink.innerHTML;
  62. //console.log(name);
  63. if(name !== null && name !== ''){
  64. //Okay, now let's do an Ajax POST request
  65. var xhr = new XMLHttpRequest();
  66. xhr.open('POST',encodeURI('/svc/tumblelog/followed_by'));
  67. xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
  68. xhr.onload = function(){
  69. var icon = document.createElement('div');
  70. icon.className += " " + classPrefix + "status";
  71. //The response has finished, let's check the response
  72. if(xhr.status == 200){ //If the response status is OK
  73. var data = JSON.parse(xhr.responseText); //Parse the JSON response
  74. console.log(data);
  75. var followerRow = followerDiv.querySelector('.info');
  76. if(data.response.is_friend == 1){
  77. icon.className += " chrome green big";
  78. icon.innerHTML = "";
  79. }
  80. else{
  81. icon.className += " chrome red big";
  82. icon.innerHTML = "";
  83. }
  84. }
  85. else if(xhr.status == 400){
  86. icon.className += " chrome big viewhide";
  87. icon.innerHTML = "";
  88. }
  89. else{ //If the response is anything other than OK.
  90. console.log("DashPlus Follow Back: Error fetching follow-back status.");
  91. console.log(xhr);
  92. }
  93. followerDiv.querySelector('.info').insertAdjacentHTML('afterend',icon.outerHTML);
  94. }
  95. xhr.send(encodeURI('tumblelog='+me+'&query='+name));
  96. }
  97. }
  98. }
  99. });
  100. }
  101.  
  102. document.addEventListener('DOMContentLoaded', function(event){
  103. run();
  104. });

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址