BitbucketServer_FirstParentsOnly

Emulate --first-parent in Bitbucket Server's commit list

  1. // ==UserScript==
  2. // @name BitbucketServer_FirstParentsOnly
  3. // @namespace http://max630.net
  4. // @include https://example.com/projects/FOO/repos/BAR/commits*
  5. // @version 1.0.1
  6. // @grant none
  7. // @run-at document-idle
  8. // @locale en-US
  9. // @description Emulate --first-parent in Bitbucket Server's commit list
  10. // ==/UserScript==
  11.  
  12. // jshint esversion: 6
  13.  
  14. function HandleContent() {
  15. while (window.rc_last.nextElementSibling !== null) {
  16. var rc_next = window.rc_last.nextElementSibling;
  17. console.log('tag name: ' + rc_next.tagName);
  18. while (rc_next !== null && rc_next.tagName.toLowerCase() != 'tr') { rc_next = rc_next.nextElementSibling; }
  19. var commit_data = JSON.parse(rc_next.getAttribute('data-commit-json'));
  20. if (window.rc_waitParent !== '' && window.rc_waitParent != commit_data.id) {
  21. console.log('drop: ' + commit_data.id);
  22. window.rc_tbody.removeChild(rc_next);
  23. } else {
  24. window.rc_last = rc_next;
  25. window.rc_waitParent = commit_data.parents[0].id;
  26. console.log('next parent: ' + window.rc_waitParent);
  27. }
  28. }
  29. }
  30.  
  31. var rc_trs = document.getElementsByTagName('tr');
  32. console.log('size: ' + rc_trs.length);
  33. for (let el of rc_trs[Symbol.iterator]()) {
  34. console.log('commit ' + el.classList);
  35. if (el.classList.contains('commit-row')) {
  36. window.rc_tbody = el.parentNode;
  37. console.log('rc_body ' + el.parentNode.innerHTML);
  38. break;
  39. }
  40. }
  41. window.rc_waitParent = '';
  42. window.rc_last = window.rc_tbody.firstElementChild;
  43. HandleContent();
  44. window.rc_updateHandler = (()=> {
  45. var obj = {};
  46. obj.triggerUpdate = () => {
  47. if(obj.triggered) {
  48. obj.observer.disconnect();
  49. }
  50.  
  51. obj.triggered = true;
  52. obj.observer.disconnect();
  53. window.setTimeout(() => { obj.runUpdate(); });
  54. };
  55. obj.runUpdate = () => {
  56. obj.observer.disconnect();
  57. HandleContent();
  58. obj.triggered = false;
  59. obj.observer.observe(window.rc_tbody, { childList: true });
  60. };
  61. obj.observer = new MutationObserver(() => { obj.triggerUpdate(); });
  62. obj.triggered = false;
  63. obj.observer.observe(window.rc_tbody, { childList: true });
  64. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址