Gab Autocomplete for Users

provides autocomplete for users from following and followers list

当前为 2016-09-09 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Gab Autocomplete for Users
  3. // @namespace https://gab.ai/Jeremy20_9
  4. // @version 0.3
  5. // @description provides autocomplete for users from following and followers list
  6. // @author Jeremiah 20:9
  7. // @match https://gab.ai/*/following
  8. // @match https://gab.ai/*/followers
  9. // @match https://gab.ai/home
  10. // @match https://gab.ai/
  11. // @match https://gab.ai
  12. // @require https://cdnjs.cloudflare.com/ajax/libs/jquery-cookie/1.4.1/jquery.cookie.min.js
  13. // @grant none
  14. // ==/UserScript==
  15.  
  16. var itvautocompleteusers = -1;
  17. var itvgatherusers = -1;
  18.  
  19. $(document).ready(function(){
  20. if(window.location.href.indexOf("/following") != -1 || window.location.href.indexOf("/followers") != -1)
  21. {
  22. itvgatherusers = setInterval(gatherUsers, 200);
  23. }
  24. else if(window.location.href == "https://gab.ai/home" || window.location.href == "https://gab.ai/" || window.location.href == "https://gab.ai")
  25. {
  26. itvautocompleteusers = setInterval(setupUserAutocomplete, 200);
  27. }
  28. });
  29.  
  30. function gatherUsers()
  31. {
  32. if($(".profile-badge.fal-panel").length === 0)
  33. return;
  34. clearInterval(itvgatherusers);
  35. var users = [];
  36. $(".profile-badge.fal-panel").each(function(idx){
  37. var userlink = $(this).find(".profile-badge__name");
  38. var href = $(userlink).attr("href");
  39. var hrefparts = href.split("/");
  40. var atname = hrefparts[hrefparts.length - 1];
  41. var username = $(userlink).text();
  42. var regex = /[^A-Z0-9 ]/gi;
  43. username = username.replace(regex, "").trim();
  44. var userpic = $(this).find(".profile-badge__picture").attr("src");
  45. users.push({name:username, atname:atname , pic:userpic});
  46. });
  47. if(window.location.href.indexOf("/followers") != -1)
  48. {
  49. localStorage.setItem("gabfollowers", JSON.stringify(users));
  50. }
  51. else if(window.location.href.indexOf("/following") != -1)
  52. {
  53. localStorage.setItem("gabfollowing", JSON.stringify(users));
  54. }
  55. }
  56.  
  57. function setupUserAutocomplete()
  58. {
  59. clearInterval(itvautocompleteusers);
  60. window.autocomplete_users = [];
  61. if(localStorage.getItem("gabfollowers"))
  62. {
  63. window.autocomplete_users = window.autocomplete_users.concat(JSON.parse(localStorage.getItem("gabfollowers")));//JSON.parse($.cookie("gabfollowers")));
  64. }
  65. if(localStorage.getItem("gabfollowing"))
  66. {
  67. window.autocomplete_users = window.autocomplete_users.concat(JSON.parse(localStorage.getItem("gabfollowing")));//JSON.parse($.cookie("gabfollowing")));
  68. }
  69. if(window.autocomplete_users.length === 0)
  70. {
  71. window.autocomplete_users = [{name:"Visit your followers and following pages to populate list", pic:null}];
  72. }
  73. // remove duplicates
  74. var usertable = {};
  75. for(var u = 0; u < window.autocomplete_users.length; u++)
  76. {
  77. var user = window.autocomplete_users[u];
  78. if(usertable[user.atname] === undefined)
  79. usertable[user.atname] = true;
  80. else
  81. {
  82. window.autocomplete_users.splice(u, 1);
  83. u--;
  84. }
  85. }
  86. $(composer.$el).add(composerModal.$el).find("textarea").atwho(
  87. {
  88. at: "@",
  89. displayTpl: "<li><img width='20' height='20' src='${pic}' align='left' style='margin-right:5px' />${name}</li>",
  90. insertTpl: "@${atname}",
  91. data: window.autocomplete_users
  92. }
  93. );
  94. }