GitHubSourceTree

Adds a "Clone in SourceTree" button to github pages

当前为 2015-09-29 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name GitHubSourceTree
  3. // @namespace http://really-serious.biz/
  4. // @version 1.1.4
  5. // @description Adds a "Clone in SourceTree" button to github pages
  6. // @respository https://github.com/jamesgarfield/GitHubSourceTree
  7. // @match https://github.com/*
  8. // @match https://*.github.com/*
  9. // @grant none
  10. // @licence MIT(3)
  11. // @copyright 2014+, James Garfield
  12. // ==/UserScript==
  13.  
  14. //Firefox/GreaseMonkey apppears to not like IIFEs, so use of a named function is required
  15. ghst();
  16. function ghst(){
  17. const $ = document.querySelectorAll.bind(document);
  18. //Defining constants
  19. const sourceTreeUrlPrefix = "sourcetree://cloneRepo/"
  20.  
  21. //GitHub's "Clone in Desktop" Button
  22. const gitHubNode = $(".clone-options + a")[0]
  23. const parentNode = gitHubNode.parentNode;
  24.  
  25. //Insert our button between the GitHub Clone button and whatever is after it.
  26. const insertBeforeNode = gitHubNode.nextSibling;
  27.  
  28. var sourceTreeNode = gitHubNode.cloneNode();
  29. sourceTreeNode.href = sourceTreeUrlPrefix + getSelectedCloneUrl();
  30. sourceTreeNode.innerHTML = '<span class="octicon octicon-device-desktop"></span>&nbsp;Clone in SourceTree';
  31. parentNode.insertBefore(sourceTreeNode, insertBeforeNode);
  32. //Implement dynamic button link update on schema selection
  33. const allProtoSwitchButtons = $("button.js-clone-selector");
  34. for(var i = 0; i < allProtoSwitchButtons.length; ++i) {
  35. allProtoSwitchButtons[i].addEventListener("click", function(e) {
  36. //Run update after all other GitHub handlers were executed (so url was updated).
  37. setTimeout(function() {
  38. sourceTreeNode.href = sourceTreeUrlPrefix + getSelectedCloneUrl();
  39. }, 0);
  40. });
  41. }
  42.  
  43. //Function returns currently selected clone url
  44. function getSelectedCloneUrl() {
  45. return $("div.js-clone-url.open")[0].querySelector(".js-url-field").value;
  46. }
  47. }
  48.