Drudge Link Enhancements

Enhances links on Drudge Report and neuters links to fake-news sites

  1. // ==UserScript==
  2. // @name Drudge Link Enhancements
  3. // @namespace drudgereport.com
  4. // @description Enhances links on Drudge Report and neuters links to fake-news sites
  5. //
  6. // @include http://*.drudgereport.com/*
  7. // @include http://drudgereport.com/*
  8. // @version 0.2.6
  9. // @grant GM_addStyle
  10. // @run-at document-end
  11. // @license MIT License
  12. // @require https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js
  13. // ==/UserScript==
  14.  
  15. $("document").ready(function () {
  16. GM_addStyle('.fake-news-prefix { font-size: 0.8em; display: inline; }');
  17. GM_addStyle('.fake-news { font-size: 0.8em; }');
  18. GM_addStyle('.fake-news-icon { display: inline; }');
  19.  
  20. var fakeNewsDomains = [
  21. 'abcnews.com',
  22. 'abcnews.go.com',
  23. 'americanprogress.org',
  24. 'americanprogressaction.org',
  25. 'bbc.co.uk',
  26. 'bbc.com',
  27. 'bbcnews.com',
  28. 'bloomberg.com',
  29. 'businessinsider.com',
  30. 'buzzfeed.com',
  31. 'cbc.ca',
  32. 'cbslocal.com',
  33. 'cbsnews.com',
  34. 'chicagotribune.com',
  35. 'cnbc.com',
  36. 'cnn.com',
  37. 'dailykos.com',
  38. 'economist.com',
  39. 'eutimes.net',
  40. 'ft.com',
  41. 'gawker.com',
  42. 'huffingtonpost.com',
  43. 'latimes.com',
  44. 'littlegreenfootballs.com',
  45. 'mediaite.com',
  46. 'mediamatters.org',
  47. 'motherjones.com',
  48. 'moveon.org',
  49. 'msn.com',
  50. 'msnbc.com',
  51. 'nbcnews.com',
  52. 'news.sky.com',
  53. 'news.vice.com',
  54. 'newsweek.com',
  55. 'newyorker.com',
  56. 'npr.org',
  57. 'nydailynews.com',
  58. 'nytimes.com',
  59. 'pbs.org',
  60. 'politico.com',
  61. 'rawstory.com',
  62. 'rollingstone.com',
  63. 'salon.com',
  64. 'seattletimes.com',
  65. 'slate.com',
  66. 'superstation95.com',
  67. 'thedailybeast.com',
  68. 'theguardian.com',
  69. 'theyoungturks.co.uk',
  70. 'thinkprogress.org',
  71. 'time.com',
  72. 'tytnetwork.com',
  73. 'usatoday.com',
  74. 'vice.com',
  75. 'washingtonpost.com',
  76. 'wonkette.com',
  77. 'yahoo.com',
  78. ];
  79.  
  80. var icon = "<img class='fake-news-icon' src='data:image/png;base64,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' style='margin-right: 6px; vertical-align: middle;' />";
  81. var title = "Fake news sites, like this one, have been tagged";
  82. var linkStats = {};
  83.  
  84. function extractDomain(url) {
  85. var domain;
  86. if (url.indexOf("://") > -1) {
  87. domain = url.split('/')[2];
  88. } else {
  89. domain = url.split('/')[0];
  90. }
  91. domain = domain.split(':')[0];
  92. return domain;
  93. }
  94.  
  95. function appendLinkStats(stats) {
  96. var tuples = [];
  97. var statsHtml = '<h3>Link Stats</h3>';
  98.  
  99. for (var key in stats) {
  100. tuples.push([key, stats[key]]);
  101. }
  102.  
  103. // Reverse sort
  104. tuples.sort(function(a, b) {
  105. a = a[1];
  106. b = b[1];
  107. return a < b ? 1 : (a > b ? -1 : 0);
  108. });
  109.  
  110. for (var i=0; i<tuples.length; i++) {
  111. var key = tuples[i][0]
  112. var val = tuples[i][1];
  113. statsHtml += "<div class='linkstat-entry'>"+key+" == "+val+"</div>"
  114. }
  115.  
  116. $('body').append(statsHtml);
  117. }
  118.  
  119. function isFakeNewsLink(domain) {
  120. for (var i = 0; i < fakeNewsDomains.length; i++) {
  121. if (domain.indexOf(fakeNewsDomains[i]) >= 0) {
  122. return true;
  123. }
  124. }
  125. return false;
  126. }
  127.  
  128. function tagFakeNewsLink(link, domain) {
  129. var originalUrl = null;
  130. if (isFakeNewsLink(domain)) {
  131. // console.log("replacing fake news: " + domain);
  132. originalUrl = link.attr("href");
  133. // console.log("original link: " + originalUrl);
  134. link.replaceWith(
  135. '<a href="'+originalUrl+'" title="click this turd pile to go there anyway">'+icon+'</a>' +
  136. "<div title='click the turd pile to go there anyway' class='fake-news-prefix'>"+domain+" Fake-News link removed</div> <div title='"+title+"' class='fake-news'>" + link.text() + "</div>"
  137. );
  138. } else {
  139. // Add a popup with the link's domain name
  140. link.attr("title", domain);
  141. }
  142. }
  143.  
  144. $("a").each(function() {
  145. var link = $(this);
  146. var href = link.attr("href");
  147. var domain = extractDomain(href);
  148. // console.log(domain);
  149.  
  150. tagFakeNewsLink(link, domain);
  151.  
  152. // if (linkStats[domain] == null) {
  153. // linkStats[domain] = 1;
  154. // } else {
  155. // linkStats[domain] += 1;
  156. // }
  157. });
  158.  
  159. // appendLinkStats(linkStats);
  160. });