Coding.NET Activities Grabber

Grab Coding.NET commit activities

当前为 2018-08-03 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Coding.NET Activities Grabber
  3. // @namespace https://zcc911.tk/
  4. // @version 0.1
  5. // @description Grab Coding.NET commit activities
  6. // @author Zcc911
  7. // @match https://coding.net/user
  8. // @grant none
  9. // ==/UserScript==
  10.  
  11. 'use strict';
  12. // https://coding.net/api/activities/joined_watched_projects_last?type=joined_watched_projects_last&last_id=999999999
  13. // https://wangdoc.com/javascript/dom/mutationobserver.html
  14.  
  15. // 通过 document.querySelector('#id||.class||tagname') 获取DOM元素
  16. let container = document.querySelector('div#container');
  17.  
  18. // 所要观察的变动类型(子节点变动、属性变动、节点内容/节点文本变动)
  19. let options = {
  20. attributes: false,
  21. characterData: false,
  22. childList: true,
  23. subtree: true,
  24. attributeOldValue: false,
  25. characterDataOldValue: false
  26. };
  27.  
  28. let watchedActivities;
  29. let watchedArr;
  30. let listEleShow = true;
  31.  
  32. // 使用MutationObserver构造函数,新建一个观察器实例,Mutation Observer API用来监视DOM变动
  33. let DOMObserver = new MutationObserver(function (mutations, DOMObserver) {
  34. // 创建代码推送记录文本框展示节点
  35. let listDiv = document.createElement('div');
  36. let listEle = document.createElement('textarea');
  37. let toggleBtn = document.createElement('button');
  38.  
  39. // 配置代码推送记录展示节点样式
  40. listDiv.style = 'margin: 66px 0 0 10px; position: fixed;'
  41. listEle.rows = 15;
  42. listEle.cols = 140;
  43. toggleBtn.innerText = '隐藏代码推送记录文本框';
  44. toggleBtn.style = 'display: block;';
  45. toggleBtn.addEventListener("click", () => {
  46. listEle.style = listEleShow ? "display: none" : "display: inline-block";
  47. toggleBtn.innerText = listEleShow ? '显示代码推送记录文本框' : '隐藏代码推送记录文本框';
  48. listEleShow = !listEleShow;
  49. });
  50.  
  51. // 插入代码推送记录文本框展示节点
  52. listDiv.appendChild(listEle);
  53. listDiv.appendChild(toggleBtn);
  54.  
  55. mutations.forEach(function(mutation) {
  56. if(mutation.target.id == 'joined_watched_projects_last' && !listEle.value) {
  57. watchedActivities = mutation.target;
  58. watchedArr = watchedActivities.querySelectorAll('.cuk-list-type-blocked>div');
  59. // console.log(watchedActivities);
  60. // console.dir(watchedArr);
  61.  
  62. // 提取推送动态数据
  63. watchedArr.forEach((listBlock) => {
  64. let listDate = listBlock.querySelector('.activity-title-3M6 .title-label-2Mr').innerHTML;
  65. let listArr = listBlock.querySelectorAll('.activity-3yv');
  66. // console.log(listDate);
  67. // console.log(listArr);
  68. let inputText = '' + listDate + '\n';
  69. for(let listIndex = 0; listIndex < listArr.length; listIndex++) {
  70. // console.log(listArr[listIndex].innerText);
  71. inputText += listArr[listIndex].innerText + '\n';
  72. }
  73. listEle.value += inputText + '\n';
  74. })
  75.  
  76. let reactRoot = container.childNodes[0];
  77. reactRoot.insertBefore(listDiv, reactRoot.childNodes[0]);
  78. }
  79. });
  80. });
  81.  
  82. // 观察指定DOM节点
  83. DOMObserver.observe(container, options);
  84. // DOMObserver.disconnect();