Github、Gitee仓库 图片文件显示工具

Github、Gitee代码托管网址,仓库图片文件预览功能,点击小图可直接在新窗口查看并保存文件

  1. // ==UserScript==
  2. // @name Github、Gitee仓库 图片文件显示工具
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.31
  5. // @license HHB
  6. // @antifeature 此脚本只做学习交流,使用此脚本的造成任何后果概不负责
  7. // @description Github、Gitee代码托管网址,仓库图片文件预览功能,点击小图可直接在新窗口查看并保存文件
  8. // @author 764777472@qq.com
  9. // @match http*://github.com/*
  10. // @match http*://gitee.com/*
  11. // @icon https://gitee.com/static/images/logo-en.svg
  12. // @grant none
  13. // @run-at document-body
  14. // ==/UserScript==
  15. function matchSrc(src) {
  16. //console.log(src)
  17. var macths = ['.jpg','.png','.gif','.jpeg','.svg','.webp'];
  18. let result = macths.map(item => {
  19. //console.log(src.indexOf(item))
  20. if(~src.indexOf(item)) {
  21. return true;
  22. }
  23. return false;
  24. });
  25. let backRes = result.find(val=>{return val == true;}) ? true : false
  26.  
  27. return backRes;
  28. };
  29. function loadImgs (){
  30. if (location.host.indexOf("github.com") !== -1 || location.host.indexOf("gitee.com") !== -1) {
  31. 'use strict';
  32. var mgsty = location.host.indexOf("gitee.com") !== -1 ? "margin:0 4px;" : "margin:4px 12px 4px 0;";
  33. var imgStyle = mgsty + " min-width: 45px;width: 45px; height: 45px;object-fit: contain;cursor: pointer;background:rgba(0,0,0,.1);border-radius: 4px;padding:4px;box-sizing:border-box;transition: all 0.2s;";
  34. var imgStyleHover = mgsty + "width: 200px; height: 100px;object-fit: contain;cursor: pointer;background:rgba(0,0,0,.1);border-radius: 4px;padding:4px;box-sizing:border-box;transition: all 0.2s;";
  35. var start = "https://github.com";
  36. var end = "?raw=true";
  37.  
  38. // Github
  39. if (location.host.indexOf("github.com") !== -1) {
  40. var arrs = document.getElementsByClassName('Box-sc-g0xbh4-0 cAQuiW')[0].querySelector('tbody').getElementsByClassName('react-directory-row')
  41.  
  42. if(document.getElementsByClassName('vbsNames').length > 0) {
  43. return false;
  44. }
  45. console.log(location.pathname,'目录,图片渲染完成,点击小图可在新窗口查看并保存图片')
  46.  
  47. for (var i = 0; i < arrs.length; i++) {
  48.  
  49. if(arrs[i].querySelector(".Link--primary")) {
  50. var src = arrs[i].querySelector(".Link--primary").href+end;
  51. if(matchSrc(src)) {
  52.  
  53. var spans = arrs[i].querySelector('td.react-directory-row-name-cell-large-screen > div > div > h3 > div > a').parentNode;
  54. spans.style = "display: flex !important;flex-direction: row;align-items: center;";
  55. arrs[i].querySelector('td.react-directory-row-name-cell-large-screen > div').style.height = "auto";
  56.  
  57. let imgs = document.createElement("img");
  58. imgs.style = imgStyle;
  59. imgs.src = src;
  60. imgs.className = 'vbsNames';
  61. spans.insertBefore(imgs,arrs[i].querySelector('td.react-directory-row-name-cell-large-screen > div > div > h3 > div > a'))
  62.  
  63. imgs.onload = (ig)=>{
  64. imgs.title = "Intrinsic size: "+imgs.naturalWidth + "×"+imgs.naturalHeight + "px";
  65. }
  66. imgs.onclick = function() {
  67. window.open(imgs.src);
  68. }
  69. imgs.onmouseover = function(event) {
  70. let e = event.target;
  71. e.style = imgStyleHover;
  72. }
  73. imgs.onmouseout = function(event) {
  74. let e = event.target;
  75. e.style = imgStyle;
  76. }
  77. }
  78. }
  79. }
  80. }
  81. // 码云 Gitee
  82. if (location.host.indexOf("gitee.com") !== -1){
  83. var arrs1 = document.querySelector('#git-project-content').getElementsByClassName('tree-holder')[0].getElementsByClassName('tree-table')[0].getElementsByClassName('five wide column tree-item-file-name tree-list-item');
  84. if(document.getElementsByClassName('vbsNames').length > 0) {
  85. return false;
  86. }
  87. console.log(location.pathname,'目录,图片渲染完成,点击小图可在新窗口查看并保存图片')
  88. for (var j = 0; j < arrs1.length; j++) {
  89. let src1 = arrs1[j].getElementsByTagName('a')[0].href.replace('/blob/','/raw/');
  90. if(matchSrc(src1)) {
  91. let imgs1 = document.createElement("img");
  92. imgs1.style = imgStyle;
  93. imgs1.src = src1;
  94. imgs1.className = 'vbsNames';
  95. arrs1[j].insertBefore(imgs1,arrs1[j].getElementsByTagName('a')[0]);
  96. //arrs1[j].appendChild(imgs1);
  97. imgs1.onload = ()=>{
  98. imgs1.title = "Intrinsic size: "+imgs1.naturalWidth + "×"+imgs1.naturalHeight + "px";
  99. }
  100. imgs1.onclick = function() { window.open(src1);}
  101. imgs1.parentNode.parentNode.onmouseover = function(event) {
  102. //let e = event.target;
  103. //e.style = imgStyleHover;
  104. imgs1.style = imgStyleHover;
  105. }
  106. imgs1.parentNode.parentNode.onmouseout = function(event) {
  107. //let e = event.target;
  108. //e.style = imgStyle;
  109. imgs1.style = imgStyle;
  110. }
  111. }
  112. }
  113. }
  114. };
  115. }
  116.  
  117. window.onLoad = setTimeout(()=>{
  118. setInterval(()=>{loadImgs();},1000);
  119. },400)

QingJ © 2025

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