Geekhub

geekhub增强插件

  1. // ==UserScript==
  2. // @name Geekhub
  3. // @namespace https://geekhub.com
  4. // @version 1.1.1
  5. // @description geekhub增强插件
  6. // @author Leetao
  7. // @match https://www.geekhub.com/*
  8. // @require https://cdn.jsdelivr.net/npm/marked/marked.min.js
  9. // @grant GM_xmlhttpRequest
  10. // ==/UserScript==
  11.  
  12.  
  13. (function() {
  14. 'use strict';
  15.  
  16. // 创建评论的markdown在线预览
  17. var initComment = function() {
  18. var divNode = document.createElement('div');
  19. divNode.setAttribute('id','markdown-preview');
  20. var comment = document.getElementById("comment-box");
  21. if(comment != null) {
  22. comment.parentElement.appendChild(divNode);
  23. };
  24. var el = document.getElementById('comment-box');
  25. if(el != null){
  26. el.addEventListener('input',function () {
  27. var value = document.getElementById('comment-box').value;
  28. console.log(value);
  29. if(value != null) {
  30. document.getElementById('markdown-preview').innerHTML = marked(value);
  31. }
  32. });
  33. }
  34. }
  35.  
  36. // 创建话题 markdown
  37. var initPost = function() {
  38. var postDivNode = document.createElement('div');
  39. postDivNode.setAttribute('id','markdown-preview');
  40. var post = document.getElementById("post_content");
  41. if(post != null) {
  42. post.parentElement.appendChild(postDivNode);
  43. };
  44. var e2 = document.getElementById('post_content');
  45. if(e2 != null){
  46. e2.addEventListener('input',function () {
  47. var value = document.getElementById('post_content').value;
  48. if(value != null) {
  49. document.getElementById('markdown-preview').innerHTML = marked(value);
  50. }
  51. });
  52. }
  53. }
  54.  
  55. var initSencondHand = function() {
  56. var postDivNode = document.createElement('div');
  57. postDivNode.setAttribute('id','markdown-preview');
  58. var post = document.getElementById("second_hand_content");
  59. if(post != null) {
  60. post.parentElement.appendChild(postDivNode);
  61. };
  62. var e2 = document.getElementById('second_hand_content');
  63. if(e2 != null){
  64. e2.addEventListener('input',function () {
  65. var value = document.getElementById('second_hand_content').value;
  66. if(value != null) {
  67. document.getElementById('markdown-preview').innerHTML = marked(value);
  68. }
  69. });
  70. }
  71. }
  72.  
  73.  
  74.  
  75. var initMolecule = function() {
  76. var postDivNode = document.createElement('div');
  77. postDivNode.setAttribute('id','markdown-preview');
  78. var post = document.getElementById("molecule_content");
  79. if(post != null) {
  80. post.parentElement.appendChild(postDivNode);
  81. };
  82. var e2 = document.getElementById('molecule_content');
  83. if(e2 != null){
  84. e2.addEventListener('input',function () {
  85. var value = document.getElementById('molecule_content').value;
  86. if(value != null) {
  87. document.getElementById('markdown-preview').innerHTML = marked(value);
  88. }
  89. });
  90. }
  91. }
  92.  
  93. // service_content
  94.  
  95.  
  96. var initGroupBuy = function() {
  97. var postDivNode = document.createElement('div');
  98. postDivNode.setAttribute('id','markdown-preview');
  99. var post = document.getElementById("group_buy_content");
  100. if(post != null) {
  101. post.parentElement.appendChild(postDivNode);
  102. };
  103. var e2 = document.getElementById('group_buy_content');
  104. if(e2 != null){
  105. e2.addEventListener('input',function () {
  106. var value = document.getElementById('group_buy_content').value;
  107. if(value != null) {
  108. document.getElementById('markdown-preview').innerHTML = marked(value);
  109. }
  110. });
  111. }
  112. }
  113.  
  114. var initService = function() {
  115. var postDivNode = document.createElement('div');
  116. postDivNode.setAttribute('id','markdown-preview');
  117. var post = document.getElementById("service_content");
  118. if(post != null) {
  119. post.parentElement.appendChild(postDivNode);
  120. };
  121. var e2 = document.getElementById('service_content');
  122. if(e2 != null){
  123. e2.addEventListener('input',function () {
  124. var value = document.getElementById('service_content').value;
  125. if(value != null) {
  126. document.getElementById('markdown-preview').innerHTML = marked(value);
  127. }
  128. });
  129. }
  130. }
  131.  
  132.  
  133. var pasteUpload = function(fileList) {
  134. for(var j = 0; j < fileList.length; j++) {
  135. var formData = new FormData();
  136. formData.append('smfile', fileList[j]);
  137. var response = GM_xmlhttpRequest({
  138. method: "post",
  139. url: 'https://sm.ms/api/v2/upload',
  140. data: formData,
  141. onload: function(r) {
  142. var json = JSON.parse(r.responseText);
  143. if (json.success == true){
  144. var url = json.data.url;
  145. var name = json.data.storename;
  146. if(document.getElementById('comment-box') != null) {
  147. document.getElementById('comment-box').value += "![alt "+ name +"](" + url + ")";
  148. }
  149. if(document.getElementById("post_content") != null) {
  150. document.getElementById('post_content').value += "![alt "+ name +"](" + url + ")";
  151. }
  152. } else {
  153. alert("上传失败");
  154. }
  155. }
  156. });
  157. }
  158.  
  159. }
  160.  
  161. var initMarkdown = function() {
  162. initComment();
  163. initService();
  164. initGroupBuy();
  165. initMolecule();
  166. initSencondHand();
  167. initPost();
  168.  
  169. document.addEventListener('paste', function (event) {
  170. var items = event.clipboardData && event.clipboardData.items;
  171. var fileList = [];
  172. var urlList = [];
  173. if (items && items.length) {
  174. // 检索剪切板items
  175. for (var i = 0; i < items.length; i++) {
  176. if (items[i].type.indexOf('image') !== -1) {
  177. fileList.push(items[i].getAsFile());
  178. }
  179. }
  180. }
  181. // 此时fileList就是剪切板中的图片文件列表
  182. if(fileList.length !== 0) { // 不为0,则上传到 sm.ms
  183. pasteUpload(fileList);
  184. }
  185. });
  186. }
  187.  
  188.  
  189.  
  190.  
  191.  
  192. var observer = new MutationObserver(function(doc, observer) {
  193. if(document.getElementById('markdown-preview') === null) {
  194. initMarkdown();
  195. }
  196. });
  197.  
  198. observer.observe(document, {
  199. characterData: true,
  200. childList: true,
  201. attributes: true,
  202. subtree: true,
  203. attributeOldValue: true,
  204. characterDataOldValue: true
  205. });
  206. })();