Reddit - Load 'Continue this thread' inline

Changes 'Continue this thread' links to insert the linked comments into the current page

当前为 2015-07-16 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Reddit - Load 'Continue this thread' inline
  3. // @description Changes 'Continue this thread' links to insert the linked comments into the current page
  4. // @author James Skinner <spiralx@gmail.com> (http://github.com/spiralx)
  5. // @namespace http://spiralx.org/
  6. // @version 1.0.0
  7. // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAFiAAABYgAWToQQYAAAAYdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuNWWFMmUAAAF3SURBVDhP1ZI/SAJhGMZN3WpKOAgsKGiIoKWg0K2LXIJWj6DAhpAgKMiW7irBqziHbhYE12sLGtWGKHBx0kHcQrBJXNIz9e35vvsQoj841g9+fHy8z/PyHZzrXzANNbgKF2ASHsOhOYGTUIb3cBSq4hyKa3Ey2GsMeMRvvzALd+AVvIPbcAb+yAq8hBehUOgxnU5TtVol27ap3W5TpVKhVCpFsiw/IHMusstwgOHxeDZM07T7/T5Rr0vUfacBvR7uHWIzwzBayK+zDm8KktFo9FXEifaXiHbnxAXEZKKtqcHSSCTygs6nBYuWZfEhR1eIzjbFBdzsYcma8xKQyWQInXmn6jCeSCQ6fDoEqqqyzxhzqgK/368Xi0UeKJfLpGka5fN5yuVyrEClUonPCoUCSZLE/oMvjGBwqut6q16vU6PRoGw2yxc0m02q1WoUj8fffD5fjGWdyvdMeL3ew2AweKsoynM4HH4KBAKW2+0+wExyIn8Hl+sDt5ENCrpr91QAAAAASUVORK5CYII=
  8. // @icon64 data:image/png;base64,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
  9. // @match *://*.reddit.com/r/*/comments/*
  10. // @grant GM_addStyle
  11. // @grant GM_getResourceText
  12. // @grant GM_getResourceURL
  13. // @run-at document-start
  14. // @resource spinner data:image/gif;base64,R0lGODlhHQALANUxAO31+tvr9tzr9s3j87jX7jiQznGw3JvH5qfO6VCd1Pj7/dPm9N3s99bo9Ym94rnY7uTw+K3R67rZ7kGV0Y7A43az3fP4/Fyk11Wg1XSx3fn8/vv9/qrQ6k2c03y232mr2sbf8X+34KDK6JXE5XGv3Pn7/cTe8KnP6oW74ZfF5nq13qbN6fb6/Waq2szi8pnG5jONzf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFEAAxACwAAAAAHQALAAAGdcCYcEgsGo/IpNIYqFwqASJAEpEAiCxGg8EqBgqwcCEaAxxe6MM1xhq43oPu0BCuG4QEtJ4gFLz/AkQJdWEJQgh6aAhCC39vC0R0hHcxeYl8MX6OgUNfdWNCZnpqQm1/cV4ZFxlkoQ8RD2ulAg0Ccku4ubpJQQAh+QQFBAAxACwAAAAAAQABAAAGA8BYEAAh+QQFDAAxACwAAAEACwAJAAAGLsBYTEFJwBIUhTBmwcCeT4xF6IBaHcKJFToZbq1K7bcbq36xTKdVuiR2YJ2kMAgAIfkECQQAMQAsAAABAAoACQAABg7AmHBILBqPyKRyyWQGAQAh+QQJEAAxACwAAAAAHQALAAAGXMCYcEgsGo9IoobjaXk4mmQxULlUAkJWqMXlhlhSYaAAKxewiK4aEY4ZynBDjKTuktoJeDmhqaujUm96cnR+d2FjcGcxaX5sbQEZFxlYMVp1X21JSyotKlCaoZpBACH5BAUcADEALAAAAAAdAAsAAAZ9wJhwSCwaj8gkcQNCvBCgTTFQuVQCRMgL9YIIS6eXWHwqDQMFmLqAjUE+rfjHaxrbTUODem8QjuKAIzEidmMiQwl7aglCHoBxHhuFdlIxeop9MX+PgoSTh0Joe2xCb4BzMXWTeGcZFxltpSkoKV4xYIVlSrtMKy8rUbvCSEEAOw==
  15. // @resource expand data:image/gif;base64,R0lGODlhCwALAPcAABcXF6WlpaenqRkZGaamqKenpxgYGP7+/qampv///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAALAAsAAAhIABEEEFhAIIICBREkWMgwwYEECBQ6ZPgQokSHABY+jEjRQMMCAhYaMACA5EIEBBpmZIggJEOPLFM6fEjzAMqGFU8SiMizZ4GAADs=
  16. // @resource css data:text/css;utf8,.deepthread a { font-size: 0.9rem; min-height: 15px } .deepthread a img { display: inline-block; position: relative; top: 1px; margin-right: 4px; visibility: visible }
  17. // @require https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.js
  18. // @require https://greasyfork.org/scripts/7602-mutation-observer/code/mutation-observer.js
  19. // ==/UserScript==
  20.  
  21. /* jshint asi: true, esnext: true */
  22. /* global jQuery, MutationSummary, GM_addStyle, GM_getResourceText, GM_getResourceURL */
  23.  
  24. ; (function($) {
  25. 'use strict';
  26.  
  27. // --------------------------------------------------------------------
  28.  
  29. function processSummary(summary, options, func) {
  30. try {
  31. if (typeof options === 'function') {
  32. func = options
  33. options = {}
  34. }
  35. else if (typeof options === 'string') {
  36. options = { msg: options }
  37. }
  38.  
  39. if (options.msg) {
  40. console.info(options.msg, summary.added.length)
  41. }
  42.  
  43. func($(summary.added))
  44. }
  45. catch (ex) {
  46. console.error(ex)
  47. }
  48. }
  49.  
  50.  
  51. // --------------------------------------------------------------------
  52.  
  53. let observer = new MutationSummary({
  54. callback(summaries) {
  55. processSummary(summaries[0], 'Added %d continue links', processSpans)
  56. },
  57. rootNode: document.body,
  58. queries: [
  59. { element: 'span.deepthread' }
  60. ]
  61. })
  62.  
  63.  
  64. // --------------------------------------------------------------------
  65.  
  66. function processSpans($spans) {
  67. $spans
  68. .children('a')
  69. .prepend(`<img src="${GM_getResourceURL('expand')}">`)
  70. .one('click', continueThisThreadClicked)
  71. }
  72.  
  73.  
  74. function continueThisThreadClicked(event) {
  75. let $a = $(this),
  76. href = $a.prop('href'),
  77. $span = $a.parent()
  78.  
  79. // console.info(href)
  80.  
  81. $span
  82. .removeClass('deepthread')
  83. .html(`<img src="${GM_getResourceURL('spinner')}">`)
  84.  
  85. $.get(href, function(data) {
  86. let $page = $(data),
  87. $child = $('.nestedlisting > .comment > .child', $page)
  88.  
  89. $span
  90. .parentsUntil('.comment')
  91. .last()
  92. .replaceWith($child)
  93. })
  94.  
  95. return false
  96. }
  97.  
  98. GM_addStyle(GM_getResourceText('css'))
  99.  
  100. })(jQuery)
  101.  
  102. jQuery.noConflict()