Add copy button next to base ref name in PR header information

What the title says

  1. // ==UserScript==
  2. // @name Add copy button next to base ref name in PR header information
  3. // @description What the title says
  4. // @namespace ahappyviking
  5. // @version 1
  6. // @grant none
  7. // @match https://github.com/*
  8. // @require https://unpkg.com/bundled-github-url-detector@1.0.0/index.js
  9. // @license MIT
  10. // ==/UserScript==
  11.  
  12.  
  13. const gh = githubUrlDetection
  14.  
  15. const addButton = () => {
  16. if (!gh.isPR()) return
  17. const baseRefNameParent = document.querySelector(".commit-ref.css-truncate.user-select-contain.base-ref")
  18. if (!baseRefNameParent) return
  19. const textContent = baseRefNameParent.querySelector("span")
  20. if (!textContent) return
  21. const button = generateButton(textContent.textContent)
  22. baseRefNameParent.appendChild(button)
  23. }
  24.  
  25. const generateButton = (url) => {
  26. //Taken from Github source...
  27. const htmlStr = `<clipboard-copy data-copy-feedback="Copied!" aria-label="Copy" value="${url}" data-view-component="true" class="Link--onHover color-fg-muted ml-2 mr-2" tabindex="0" role="button">
  28. <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copy">
  29. <path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path>
  30. </svg>
  31. <svg style="display: none;" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check color-fg-success">
  32. <path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path>
  33. </svg>
  34. </clipboard-copy>`
  35.  
  36. const template = document.createElement('template');
  37. template.innerHTML = htmlStr;
  38. const button = template.content.firstElementChild
  39. return button
  40. }
  41.  
  42. addButton()
  43. document.addEventListener("soft-nav:end", addButton);
  44. document.addEventListener("navigation:end", addButton);