GitHub code review helper - open/hide diff on click

Open/hide GitHub diff when clicking on diff header

  1. // ==UserScript==
  2. // @name GitHub code review helper - open/hide diff on click
  3. // @namespace http://think.js/
  4. // @version 0.3.4
  5. // @description Open/hide GitHub diff when clicking on diff header
  6. // @include http*://github.com/*/*/commit/*
  7. // @include http*://github.com/*/*/pull/*
  8. // @include http*://github.com/*/*/compare/*
  9. // @grant none
  10. // @copyright 2013+, Victor Homyakov
  11. // ==/UserScript==
  12.  
  13. function hasClass(element, className) {
  14. return element && element.classList && element.classList.contains(className);
  15. }
  16.  
  17. function isDiffHeader(element) {
  18. return hasClass(element, 'file-header');
  19. }
  20.  
  21. function isDiffContent(element) {
  22. return hasClass(element, 'image') || hasClass(element, 'data') || hasClass(element, 'render-wrapper');
  23. }
  24.  
  25. function toggle(element) {
  26. element.hidden = !element.hidden;
  27. element.style.display = element.hidden ? 'none' : '';
  28. }
  29.  
  30. document.body.addEventListener('click', function(event) {
  31. var target = event.target;
  32. while (target) {
  33. if (hasClass(target, 'file-actions')) {
  34. break;
  35. }
  36. if (isDiffHeader(target)) {
  37. var next = target;
  38.  
  39. next = next.nextElementSibling;
  40. if (isDiffContent(next)) {
  41. toggle(next);
  42. }
  43.  
  44. next = next.nextElementSibling;
  45. if (isDiffContent(next)) {
  46. toggle(next);
  47. }
  48.  
  49. break;
  50. }
  51. target = target.parentElement;
  52. }
  53. });