byr-signature

为北邮人论坛发帖添加个性签名

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

  1. /* eslint-env greasemonkey */
  2. // ==UserScript==
  3. // @name byr-signature
  4. // @namespace weibo.com/flowmemo
  5. // @version 0.1.9
  6. // @description 为北邮人论坛发帖添加个性签名
  7. // @author flowmemo
  8. // @match https://bbs.byr.cn/*
  9. // @grant GM_getValue
  10. // @grant GM_setValue
  11. // @license MIT
  12. // @supportURL https://github.com/flowmemo/byr-signature
  13. // ==/UserScript==
  14.  
  15. ; (function () {
  16. 'use strict'
  17. const _DEBUG = 0
  18. function log () {
  19. if (_DEBUG === 1) console.log.apply(console, arguments)
  20. }
  21.  
  22. log('hello')
  23.  
  24. const defaultSig =
  25. `————
  26. 示例签名: 微博 [url=http://weibo.com/flowmemo][color=#0000FF]@flowmemo[/color][/url] , 现在主要写JavaScript. 关注广泛, 欢迎交流.
  27. 修改签名请到[url=https://bbs.byr.cn/#!article/WWWTechnology/post][color=#0000FF]这里[/color][/url]
  28. [url=https://github.com/flowmemo/byr-signature][color=#0000FF]此签名通过「北邮人签名档」脚本发送[/color][/url]`
  29.  
  30. let id // timeout id
  31.  
  32. function getSig () {
  33. // get username
  34. let user = document.querySelector('.u-login-id a')
  35. if (!user) return
  36. user = user.title
  37.  
  38. // get sig
  39. const signature = GM_getValue('sig-' + user, defaultSig)
  40. return signature
  41. }
  42.  
  43. function addPostSig () {
  44. log('addPostSig')
  45. const div = document.getElementById('post_content')
  46. if (!div) return
  47. div.value += '\n' + getSig()
  48. return true
  49. }
  50.  
  51. function addQuickSig () {
  52. log('addQuickSig')
  53.  
  54. // check whether page is loaded by comparing URL with real displayed page
  55. const page = document.querySelector('.page-select a')
  56. if (!page) return
  57. const curPage = page.text
  58. if (!window.location.href.match(/\?p=(\d+)/)) {
  59. if (curPage !== '1') return
  60. } else {
  61. const hrefPage = window.location.href.match(/\?p=(\d+)/)[1]
  62. if (hrefPage !== curPage) return
  63. }
  64.  
  65. const div = document.getElementsByName('content')[0]
  66. if (!div) return
  67.  
  68. div.value += '\n' + getSig()
  69. log('add value')
  70. return true
  71. }
  72.  
  73. function addSigPanel () {
  74. log('sigPanel')
  75.  
  76. const div = document.createElement('div')
  77. const postItems = document.getElementsByClassName('post-list-item')
  78. const referNode = postItems[postItems.length - 2]
  79. referNode.appendChild(div)
  80.  
  81. div.outerHTML =
  82. `<br><br><div>
  83. <div class="post-m">byr-signature自定义签名</div>
  84. <div class="byr-signature" style="border:1px solid #c9d7f1;padding:5px;width:680px">
  85. <textarea class="post-textarea" name="sig-content" placeholder="在此输入你的签名"></textarea><br>
  86. </div><p><input name="saveSig" type="button" value="保存"> 保存后刷新页面生效(注意保存你的发帖内容) </p></div>`
  87.  
  88. const userSig = document.getElementsByName('sig-content')[0]
  89.  
  90. userSig.value = getSig()
  91. const saveButton = document.getElementsByName('saveSig')[0]
  92.  
  93. // get username
  94. let user = document.querySelector('.u-login-id a')
  95. if (!user) return
  96. user = user.title
  97. saveButton.addEventListener('click', function () {
  98. GM_setValue('sig-' + user, userSig.value)
  99. })
  100. }
  101.  
  102. function polling () {
  103. log('polling')
  104.  
  105. if (window.location.href.indexOf('#!article') === -1) return
  106. window.clearTimeout(id) // clear timeout if it already exists
  107.  
  108. ; (function cb () {
  109. if (window.location.href.indexOf('/post') > -1) {
  110. if (addPostSig()) {
  111. addSigPanel()
  112. return
  113. }
  114. } else if (addQuickSig()) return
  115. id = setTimeout(cb, 300)
  116. })()
  117. }
  118.  
  119. if (window.location.href.indexOf('#!article') > -1) polling()
  120. window.addEventListener('hashchange', polling)
  121. })()