Greasy Fork镜像 支持简体中文。

GitHub Gist 代碼片段複製與下載器

向 Gist 文件添加複制按鈕,以便輕鬆複製代碼。 | 向 Gist 文件添加下載按鈕,以便輕鬆下載代碼。

  1. // ==UserScript==
  2. // @name GitHub Gist Copier & Downloader
  3. // @name:ar Github Gist Code Snippet Copy and Downloader
  4. // @name:bg Github Gist код Shippet Copy and Downloader
  5. // @name:cs Github Gist Code Snippet Copy and Downloader
  6. // @name:da GitHub Gist Code Strappet Copy and Downloader
  7. // @name:de Github Gist Code Snippet Copy und Downloader
  8. // @name:el GitHub Gist Κωδικός απόσπασμα και λήψη
  9. // @name:en GitHub Gist code snippet copy and downloader
  10. // @name:eo Github Gist Code Snippet Copy and Downloader
  11. // @name:es Copia y descargador de fragmentos de código Github Gist
  12. // @name:fi Github GIST -koodin katkelma kopio ja lataaja
  13. // @name:fr GitHub Gist Code Snippet Copy and Downloader
  14. // @name:fr-CA GitHub Gist Code Snippet Copy and Downloader
  15. // @name:he Github GiSt Code Snippet Copy and Downloader
  16. // @name:hr GitHub Gist Code Snippet Kopiranje i preuzimanje
  17. // @name:hu GitHub GIST kódrészlet másolat és letöltő
  18. // @name:id Salinan dan download cuplikan kode GIST GITHUB
  19. // @name:it Copia di snippet di codice GIST GIST e downloader
  20. // @name:ja GitHub Gistコードスニペットコピーとダウンローダー
  21. // @name:ka Github gist კოდის snippet ასლი და ჩამოტვირთვა
  22. // @name:ko github gist 코드 스 니펫 복사 및 다운로더
  23. // @name:nb GitHub Gist Code Snippet Copy and Downloader
  24. // @name:nl GitHub Gist Code Snippet Copy and Downloader
  25. // @name:pl Github gist kod kodu fragmentu i downloader
  26. // @name:pt-BR Cópia do snippet e downloader de código de código do Github
  27. // @name:ro Github Gist Code Snipt Copy and Downloader
  28. // @name:ru Github Gist Code Specy Copy and Downloader
  29. // @name:sk Kópia a sťahovanie kódu github gist
  30. // @name:sr ГитХуб Гист Цоде Сниппет Копирање и преузимање
  31. // @name:sv Github gist code kodavsnitt kopia och nedladdare
  32. // @name:th GitHub Gist Code Snippet Copy and Downloader
  33. // @name:tr Github Gist Kodu Snippet Copy ve Downloader
  34. // @name:ug GitHub GIST CLIPTE CLIPPET ۋە چۈشۈرگۈچى
  35. // @name:uk Копія та завантажувач Github Github Gist Code
  36. // @name:vi Github Gist Code Snippet Sao chép và tải xuống
  37. // @name:zh GitHub Gist 代码片段复制与下载器
  38. // @name:zh-CN GitHub Gist 代码片段复制与下载器
  39. // @name:zh-HK GitHub Gist 代碼片段複製與下載器
  40. // @name:zh-SG GitHub Gist 代码片段复制与下载器
  41. // @name:zh-TW GitHub Gist 代碼片段複製與下載器
  42. // @description Adds copy button to Gist files for easy code copying.| Adds download button to Gist files for easy code downloading.
  43. // @description:ar أضف زر نسخ إلى ملف GIST لجعل الكود يتم نسخه بسهولة. |
  44. // @description:bg Добавете бутон за копиране към файла на GIST, за да направите лесно копирания код. |.
  45. // @description:cs Přidejte tlačítko Kopírovat do souboru GIST, aby se kód snadno zkopíroval. |.
  46. // @description:da Tilføj en kopi -knap til GIST -filen for at gøre koden let kopieret. |.
  47. // @description:de Fügen Sie der GIST -Datei eine Kopierschaltfläche hinzu, um den Code leicht zu kopieren. |.
  48. // @description:el Προσθέστε ένα κουμπί αντιγραφής στο αρχείο GIST για να αντιγράψετε εύκολα τον κώδικα. | Προσθέστε ένα κουμπί λήψης στο αρχείο GIST για εύκολη λήψη του κώδικα.
  49. // @description:en Add a copy button to the Gist file to make the code easily copied. | Add a download button to the Gist file to easily download the code.
  50. // @description:eo Aldonu kopian butonon al la GIST -dosiero por fari la kodon facile kopiita. | Aldoni elŝutan butonon al la GIST -dosiero por facile elŝuti la kodon.
  51. // @description:es Agregue un botón de copia al archivo GIST para que el código se copie fácilmente. | Agregar un botón de descarga al archivo GIST para descargar fácilmente el código.
  52. // @description:fi Lisää kopio -painike GIST -tiedostoon, jotta koodi kopioidaan helposti. | Lisää latauspainike GIST -tiedostoon koodin helposti.
  53. // @description:fr Ajoutez un bouton de copie au fichier GIST pour que le code soit facilement copié. | Ajouter un bouton de téléchargement au fichier GIST pour télécharger facilement le code.
  54. // @description:fr-CA Ajoutez un bouton de copie au fichier GIST pour que le code soit facilement copié. | Ajouter un bouton de téléchargement au fichier GIST pour télécharger facilement le code.
  55. // @description:he הוסף כפתור העתק לקובץ ה- GIST כדי להפוך את הקוד להעתיק בקלות. |.
  56. // @description:hr Dodajte gumb za kopiranje u datoteku Gist da biste se kôd lako kopirali. | Dodajte gumb za preuzimanje u datoteku Gist da biste lako preuzeli kôd.
  57. // @description:hu Adjon hozzá egy másolat gombot a GIST fájlhoz, hogy a kód könnyen másoljon. | Adjon hozzá egy letöltési gombot a GIST fájlhoz, hogy könnyen letöltse a kódot.
  58. // @description:id Tambahkan tombol Salin ke file GIST untuk membuat kode dengan mudah disalin. Tambahkan tombol unduh ke file GIST untuk dengan mudah mengunduh kode.
  59. // @description:it Aggiungi un pulsante Copia al file GIST per rendere il codice facilmente copiato. | Aggiungi un pulsante di download al file GIST per scaricare facilmente il codice.
  60. // @description:ja GISTファイルにコピーボタンを追加して、コードを簡単にコピーすることができます。 |ダウンロードボタンをGISTファイルに追加して、コードを簡単にダウンロードします。
  61. // @description:ka დაამატეთ კოპირების ღილაკი GIST ფაილში, რომ კოდი ადვილად გადაწეროთ. |
  62. // @description:ko 코드를 쉽게 복사하기 위해 GIST 파일에 복사 버튼을 추가하십시오. |. 코드를 쉽게 다운로드하려면 GIST 파일에 다운로드 버튼을 추가하십시오.
  63. // @description:nb Legg til en kopiknapp i GIST -filen for å gjøre koden enkelt kopiert. |.
  64. // @description:nl Voeg een kopie -knop toe aan het GIST -bestand om de code gemakkelijk te laten kopiëren. | Voeg een downloadknop toe aan het GIST -bestand om de code eenvoudig te downloaden.
  65. // @description:pl Dodaj przycisk kopii do pliku GIST, aby kod był łatwy do kopiowania. |
  66. // @description:pt-BR Adicione um botão de cópia ao arquivo GIST para tornar o código facilmente copiado. |.
  67. // @description:ro Adăugați un buton de copiere în fișierul GIST pentru a face codul ușor copiat. |
  68. // @description:ru Добавьте кнопку копирования в файл GIST, чтобы сделать код легко скопированный. |.
  69. // @description:sk Pridajte tlačidlo kopírovania do súboru GIST, aby sa kód ľahko skopíroval. | Dodajte tlačidlo sťahovania do súboru GIST, aby ste si ľahko stiahnuť kód.
  70. // @description:sr Додајте дугме за копирање у датотеку Гист да бисте кодекс лако копирали. | Додајте дугме за преузимање у датотеку ГИСТ да бисте лако преузели код.
  71. // @description:sv Lägg till en kopieringsknapp i GIST -filen så att koden enkelt kopieras. | Lägg till en nedladdningsknapp i GIST -filen för att enkelt ladda ner koden.
  72. // @description:th เพิ่มปุ่มคัดลอกไปยังไฟล์ GIST เพื่อให้รหัสคัดลอกได้อย่างง่ายดาย | เพิ่มปุ่มดาวน์โหลดไปยังไฟล์ GIST เพื่อดาวน์โหลดรหัสได้อย่างง่ายดาย
  73. // @description:tr Kodu kolayca kopyalamak için GIST dosyasına bir kopya düğmesi ekleyin. Kodu kolayca indirmek için bir indir düğmesi ekleyin.
  74. // @description:ug كود ھۆججىتىگە بىر نۇسخا قوشۇش كۇنۇپكىسىنى قوشۇڭ. | بىز GIST ھۆججىتىگە چۈشۈرۈش كۇنۇپكىسىنى قوشۇڭ, كودنى ئاسانلا چۈشۈرۈش.
  75. // @description:uk Додайте кнопку копіювання до файлу GIST, щоб зробити код легко скопіювати. | Додайте кнопку завантаження до файлу GIST, щоб легко завантажити код.
  76. // @description:vi Thêm một nút sao chép vào tệp GIST để dễ dàng sao chép mã. |
  77. // @description:zh 向 Gist 文件添加复制按钮,以便轻松复制代码。| 向 Gist 文件添加下载按钮,以便轻松下载代码。
  78. // @description:zh-CN 向 Gist 文件添加复制按钮,以便轻松复制代码。| 向 Gist 文件添加下载按钮,以便轻松下载代码。
  79. // @description:zh-HK 向 Gist 文件添加複制按鈕,以便輕鬆複製代碼。 | 向 Gist 文件添加下載按鈕,以便輕鬆下載代碼。
  80. // @description:zh-SG 向 Gist 文件添加复制按钮,以便轻松复制代码。| 向 Gist 文件添加下载按钮,以便轻松下载代码。
  81. // @description:zh-TW 向 Gist 文件添加複制按鈕,以便輕鬆複製代碼。 | 向 Gist 文件添加下載按鈕,以便輕鬆下載代碼。
  82. // @author afkarxyz,人民的勤务员 <china.qinwuyuan@gmail.com>
  83. // @namespace https://github.com/ChinaGodMan/UserScripts
  84. // @supportURL https://github.com/ChinaGodMan/UserScripts/issues
  85. // @homepageURL https://github.com/ChinaGodMan/UserScripts
  86. // @license MIT
  87. // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAACXBIWXMAAAsTAAALEwEAmpwYAAAc6klEQVR4nO2deXBb13XGaTedTDxNp532j04z0yaTTpvpdGrLsjZLXAGCIPbtYd93ggRAkAC4kyK1y/JuybG1WJQsyZZsSd4X2dp3iqJkWd7kLXWdrWmcNMk0jWOfzrnAA+4FHkCIpCq55pv5hos4JPX9Ptx337nnXlZVzV6z1+w1e81es9fk100md2DU5An+3uQOfMK5fC/q7J40Z/P889fVvPom1T9VS9XtNc3a/TUy1UfVzerf18jUD6NXM/7DDA4fZ/GFweINEZk9QSKTJwicO/CWzukdUdr936v6f34tkun+vk6h66uTaS7VybVQK9dkJFMT1TSrobZZo5jxH8y5Ant58wsBoIzuABjd/i/0Du9xtdVtuiYpuI5XrVxfVyfX7qtX6D5H43kJAaiRqrbN6A+XSqPftHhC/1Xe/Iw4l59I7/B9oLM7W4aGhr5R9RW9amtrv1Ev1wcaFLr3G5Q6qFdkVMp8CsAv586d+6cz9ovoHD4TnX5bIAKRzj5whmMMAN58zunLSW/3fKK1OhPBYHDmfqFrfg3dXK/QWUVKPTFeyPyMNNCst4DBGYIGpSFjfrMaqqUquFMql83Yr2N0+7fR6Q/G0tC3bB1R19LV0NrZC7ZAaxEAQ1Z6hxc0dvcHSpNDV3WDXw1qtQaNF6n0gBICINEawegOgz/WBeFEH5HK6mYALG5SbZixX8rkCX5IA2jvGc4B6B25i6hn5C7yeU8kkYNAA0Dp7B7Q2lzH1FbXbVU32CXRWX4gUupfFqkMIGQ+vlUYHeAIxaGlox/CCV4ZAFZ/W858oibl5Rn5xThH8O9o8/Ft9/AaQQBEw2shObACfG0dmSEoaz4PIAvhD2qz40GV1/vtqut83alSfVusNtwvUun+QJvPA8C3OocPArEuYryQ+ahAtAdqZZocgCVNyi/n1cr+Ztq/oMHpC9EA3JF4afOzAFDdS9dCsn8FeFoTBea7c1JbnB8rTDZR1XW66pVcg1ht+Fis5iBjPpt+rQ2N74aWzoGMSgAItfcSNWrNNABYLFFbp/1Lck7fJnrmE2rvKpt+3nxU19I1RB19y8ARijIANLyszi+UJvt6juO+VenvVMtxfybSaP6KFn6u4v8Tx32rUaV/UKw2fMGanwGgMjnB15aCCG+8oPnFADQWb8581J0SxX1V072M7sAYDSDetbSi9NMAuoZWE0WSffjQVgDARaQyO64oja7FjZz9ezK92djMWZfLjfbtCpPtoJyzva0wWn8s46y/UxhtIOesRDJDRs0GS15682+lOtOnEq3pskRjfF2iNW5t1HLDjXKtoVZt+q5IwS1qVBvea9RwgObTAJq0ZnCGE8R4xvwK0h9s7wWzt5UBsFgiPzJN+4duNnuCv+XNR6GRlaRfCEB6aDWk+leCO5LIQLC6clJbnEQqs4NImZXCZM/IaMupFACp3pyRzpRTkzYjnLmg0Hgh8zlXCMIdfdCaHCwGUEH6EYCnNZk3v0kBixsVv57WA6nOFfwBnX6LNzzl9KdpDa6CWHqQzJbKmS8EoFz6CwEUmi8EAL+Hty1FjKfNLw+ANZ8HgMKZUA5AkwKqG5VTL8/o7F4NnX588JpO+nnzUamBVdA5sAJc4fhVp19htIPS5CDC91HNButVp9/gDBCjefOnk36ieA+I1aac+aiFTXLxlAEYXL40XXbwx5I58yu5+fLmlwKQGlgFyYGV0NLRA1q7l5ivtrjA5A6CIxQDb2snBNu7IdLZD9H0EMS6hyHRuwzae2iNEMW7M2pLD0JLZz8E23vIkGAPxsDoCYPG6gaJ1kQASPUWcLckGONnIv0IQG605wFIFHCnRNoydQBu38M0gHCie8bSTwNIDqyEzr4V5Abf0bccOvtXkLdEvXmh+SwA1nyirmGiWFbR9NKshqAtNUQMQ7Px/VIACs2f7ObLm4/CqSsDoFG2bsoAOLd/H110a0v1z3j6k6j+vNB8IQDF5gsAKGl+BgAPoZz500k/yuAI5cxHLZLIt08dgMt3ggYQ714qaH5FN9+s+eUAdBaa3zdz6afNv1bpR5m9bSwAseyVKQMwuoNv0yXnjt6Rr0z6Y2UAFJpf2c23b1IAgVgP2AKxnPmZIUg+Ph0AP6IBJPuXzaa/vXT6EYA92E6bDwvFsnemAcD/MxbAisnTX8HNN5f+gcrTX3b4uUHSj3KEEgyARRLZj6YOwBP4Bb3gkhxcecOM/e0V3XyHKr75Xm3ZoRQAV7gjZ372FfDjqQNwBX5KA0gNrppNf3tp8/2xbnC3dBYAkH88ZQCcy/8xvdzY2b98SmWHStLfWdHN98ZOPwJwBNtz5i8Sy6Z3D+Cc/nEaQLxn6Q059sev2dg/+dSTN58HYPG2FQBoPjYl84PB4C2cy/8BvdjelhyYTX976fSj9M5Q0SvgH6TSb141AL3DN1rY7RDvGpqRssNk6e+o5MHrBkw/CtcEePOzrwBYIJI9dFXma2wee6H5nkj7dUz/shuy7FBovj+akURrZgAsFDd/ubBRqq3IfKu15S9x/k8DsPpbiKmz6e8tm34egLs1CbVyHW9+5lXQIP1JrVr9F5MCMDi9W+lONxSZ/dzAZYfoDZR+lC/aBdZAHBY18kNQRvMbmh4oa77R7rmVc/m/oNMfau+esZLzjIz93TdG0a0UADQf5W3rAqXZXQBA+vk8UfM/lgSgd/ieoZNvDbRW9NT7tU9/TBiAuzUN1c0q3nyieQ0S4cZdrd37L4Xpj6YHb4iyQ/wrmH5eOC1lANQ3fT63Xvr9IgA6p+dhOv2OUNt1KTknviJFt5z55QC0polqZdocgPn1TTCvXrKmqP3c6A78J5P+1Gz6g1NIvxAAnc2fMx91R53kp0z7utbmMdBFNzPp/ywz9HzNS87+q0i/pzUFrkgSu+RyAObVS2BBQ3Nz/uZr922j0x+IJWdk7EezWzp6SXeD1R8BzuknDVkqs5NpN1FaHKCxYu+oFwxOPxjdITB7I2D3t5JuZHekg3Q4YDs4NsnizCzU3pMzKxjvhkAsTdoJ8euwuw27Icy+VjC6gqC1Yf+Rh3Q3Nxts0KQzg0htYDZZ1Cm0pEFLojGBwuQEvcMPNn8MAtNMPwJANelsOfOzyj8dcy7/pzQAbDOfTvqxZOEIR0Fr90za6yPPNlpV0unG9/lU0ulW2OV8VTtcqDZz/HcE4gx3VH7zzZpPA+BcYQbA3BrxR8R8kzP4fdp8HIquKv0UAGzCdYbioM52u13rTrfGrPnlABSaXw5AoflMn6dUSUB4IqmrTr87kgJXSxIWiPIA7qiTwMIG+Xdw+mmjATjD0SmlP949TL4H3+V2Pfs8RWUAFJlfBgDT55kVDlW47Hg16UcAqDqZNmc+am61SF2lc3jvoYtuwXjqqtOP3Wg43Aj1eToDEVi2cjVs3LgJnt37NBx85WU4/voBOHvsCJw7fgSOHzxAPj7w4gvwwjP74KkndsHjo6PwyA8fhfvvfwBWr7kLBpeOQKqnH9oSSWiJd4C3JQquYAQsngCR3RcCd6gN3KFWCMcSEO1IQ1ffIIwsXwF3rbsH1j+0HrZs2gS7tm+H/bufgJee3Q+HX34JTh16DU4ffp3o8CsvwWvPPwdP7doJG9avh+6+QZAZLCyA7FrvkiYVWPzRSW++tPkoqc7GAqhtHMb+z/00gNZU31WVHTD52Pdf2OUcinXA7l07Yez4ETh34iicO87rSJHGeB3jdbhIZ48W6hCrI3mdOXJQWIcz4k0XFEI59BqBc/L1A7D50UfB6PAwALDcXC1Vgy0Qrzj97kgS1FYfbT7MrZNsx+arsdzmOrwBdy+tOP04tTS6g0Xmr1t3LzGJGM+rBICxCgAUm18aQEnzpwCA1/HXXiGvCHqtF4UPWHhPqCT9CMDgamEB1IiPIIBP6N2Nyf7lFaffGYoV9fg/tH49jJ84SoTGnz95HC6NnYG3Js7BlTcm4MqbF+H9Ny/Ch5cvEb1/6SLRlUsX4L2LE/DuhfPw9sQ4XB4fgzfPnYFLY6fhjbOn4OLpE3Dh1AmYOHUczp88lvn+OIxlhzL+Z+K/TZw8DhOnTsDFMyfh0tlT5Pu8NX6W6J2Jc/DuxfPw3sXz8P4bF7KagCsXz8O7F8bhnfNj8ObYafJzTh8+mAdx8DVYtXoNs9qFwk0dkwNIEpl90UIA72P/52c0gPTg6orKDjju0ztc0Pzlq9fmjLhw+iT5j3741qW8sqY/t38/dHb35baz4vv4uQ8vvwEf8HqzUBcnFQ/z/UsXymrvnj3kXiLHG7/eApF4B+zbsycTkAIhvLNHDhIApw4egHRPX9GKF27umCz9KFugPW9+bSPcXiP6GW7C+296b296aE1F6Td7Qkz6w/FOOHPsMDH/zfGzrPFZYfKHV6wqOfMZXraSGHStAGDqewaGSs58evqHyKugCMTFCZg4eYwAOHbgZTDY3PRqF5nd4HNCufTjNNQR6mABVIt/g0PQFzSAStLfmupn0o96bt/TxHwcOj4SMB+Tv3TZyiLzZQVTz8GR5dcs/V19A4Lm01PPdE9/kfm8cAhECLt3PJ7t+cmudomaQW8PgjPUURYAKp9+McypFv0RAfyBPloAd75Pln57sI0B0Dc0AuMnjpHxVtD8ty7Bk7t2VTbv15vhiZ07ZxzA49u2VTzv3z46KgDgPNH48SMEQksswQBoVHPk+QAhlDIf/40GcHu16PdVeqfvN/TRAmhwufRjf6jWxk47n9u3l9z0MOVCAN57Y4LsM6bLDnqTFbrcFki7zKAzsg9enNML71wYrxhA3nxhAG9PnAOVycGYL1WqIcqpiCRyFoBMb4bL42eZ9PMA3rswTmZUTz6+nVntWiCSgc0fJ8OMM5QQBGD3t+fNJwDEn+Ea8C9oALjLvVz68ZAOOv34UITTS7zhlkr/6Ogok34lZ4VujwWGvGaitMsEcgP75Lv1sdEZS//GjRuZ9DfI1RA3qqDLrIK0SQkxTgm10oz5/IPXo49sLDKf1+Wx03Dy4AFQGm30ciPobAFwBBPgDCbAEWovAmD1xRgAc2rEP8ZXwKf0uQ5YzykHwNPawaR/zV13w8UzmaGn1NgfjnUw6ffb0Pw8gEGPCbxWtuYTaEvMSPpRTn+YSb9VmzGfB4Ayqdmyg80bKgkAb+ZjRw9Dd18/s9ol01uJ+TwAHJJ4813hTrB4W/PpJxJ9WKV3eq/QABI9w2VrPngqCg1gx/btZdM/fuokqf/kABis0EulfygLoNfN1nykOjOcO3l82uk/e+xovvYjU0OdTA0JKv28EkYFHrCRA4Awzhw9XGQ+DwBfBT/csIEBUK80UOa3sxDCnWD0RGjz8e2lKp3Nc5I+1STWNVQWQOHe3ldeeK7k2I+f3/H440z6zWYrSf996TbYvm45PDLUBUNeEwy6TcAZ2ZLz9tFt007/Y1u2MOlXKtXE/DVRH2xe3g8PdMWhy6SAtEkBMpmcqfts3rhJ0HxeTz/5BAMAoeH4z5tvD+K6RIIMSwgA14dpAHOqRa9W6ezuPTQAXEApV3IuLLph6aBU+hHA2rvvZmY+AZsVRgJ2eGrDPfDUhnvJ23UdYQLAb2ErnqvWrpv21HNkxUoGgE2jhl67FnbeuxJ23buKaEXYSQBYVXKm5jM0srwsgGMHXmXWevHZgE4+MR+BBNsJBGxTyadfhLOgLVUam/t++kyfQCxVdsEle8pJTjhbKJV+VKKrlwHQ7rLAsN8Gex66OwvhHrgrHiAAYnYWQCyZnjaAUKydARA0qKDXqoEdd6/IAVgetEHKKAe/lgUQiERLmo86f+IoA2BBg7SE+RkAEq2VBVAjXlalsbhSNABXS7xsnycNAMvNb58/VzL9KFcowsz7u9yZcX9texA2LeuDB7pjxHxUymFk6v1Wb3DaZQfO4WHm/TFjZuwfCdphQ38HrI0HSPoRQFQvZyqeGrOjLACsT9GL7RkACVZZ8xEI3iPy5otgzp0N4SqFxa6hAeDabbnlRly3pQG8OT5W0nwU5/IxAPo8+RvvIMqdV4+TBaC3u6cNQM5ZGACdJvrmq8iZj0oYWABSnbGk+eQVcPIYAwCfC4TM57W4SZ03v1oEty1uaKxSmb1/S59ohTfZcl3O+HX0gsvFs6fKAlBZHEzZYdArDGDAbYQ+V/5QDRQWyqZjPgpXw+in3rS5NIDOLIBcublZXRbAmSOHcuajFjcqSENAHkBe9kAC5tVJGABza2v/mu+K+zl9qhUuypfq8zS6AgyAE4cOlTS/EACWHAZLpH+gAAAuNV4LAKkC88sBqJGqSpqPeu3F55lWk+omFfUK6Mg/lAUTwLkjjPlzljT8G9WW6D7Em4/CMyFK9fqYvS0581HP7dtXFgA+Y9AAcAgSSv+A2wg9Do4BIDQEXY35WOvH5w666NZhFE5/kpNDQp9fbEE1aY1lAezYto0BUC/XCZqPH8s4BwPg9mrRszkAaqvrbvpMN7wRl+pydobjzGL75s2PlQXgDLYwRTcsO5QCkLRzzGK71RuaNgCDnT1OEssOQulHAG26vPk4pdRYHCXNR91z771Mq4lEa8mYj/Wg3BNx5uN6hT6ffhz/lzQM5gCojA4xDQDXiEt1uvljKQYA1vdLmY8LLO3pbgZAzClsfr+LgzYrCyDakZqW+ahgW5wBENALpx/l07AA/JFoWQCxzhQDQGlyC5qPwhkSDeD2xbUL841ZHPcnWpv7V/SBerGupYIAIsl+ptXE6guXBYC1Irrk7LeWBuA1s60mhQ9iUwGAizx0ydmiFk4/yqRklxvxQayU+e9OnINGtZ7p88ETdJ08AMp8nSNUmP5foudMg67a6nyeBoDHTQr1eeK5Phqbi+n1OX7ooID5GQA7tj/OADAazUXmD2QB6A0sgG2jo1dVdig0H/XY5i0MALlcKWg+StrMAti0cWNJAK++kLkB8wDmNzTnxn3afBSeosUCqH+iqD1dbXGG6NMMsUczWaLN3OKPMI1W6+69X9B81MTpkyDjsseJ6c14qiF0u4rTn3awXW749tyJY9NKPy62Y6m84ERbaOeKAUT1MsZ8fB+LcYIALoxD3+BSus8TRCouk/6sePNtgQQZfnjzUbfeKbIVAVAoFLdorO5f08dJtiX7BbucsRGWBoDPDu9cOC8IABVsa2cWXDyW4vR7CoYfXyQ+7fQjAJTdG2QWXEwqRVH6jQXDj8UdKJl+7NLAZwR6+FFbfEXmo7S2AJP+WxfX/2ruXMUtgrtkVBbHdhoAPhULtZgnepeD1upmWg0ffGiDoPmo0a1bGQAyvQnSzgwEND/l4EBa0Oe59bHHpp1+0m7yxgRsfPRRBkCNVAFRgyJnfpteBtWU+ahHH3mkZPqXLV/JpH8hFuGyQ08hAGzgotN/25L60nuGFRbHksJWk7bUgGCPv6slwfR54teeOXZEEACuF+ADHF3v1xhM0OkwEql1rPl6uyu7JDn99COAt8+PkXIIveDSKFNARCeHiF4BoiZ2+GnScqSHSAjAkVdfhsWNcib9MoO9aPhxYvnZES68+cK/1ojmVJW7NBbXGA3Ahq8Cgc3V7d0joDK7mCZbb0sMLp8fKwKAbSZP7txVcZfzE2RRfmbSz2v71lHBPs/CRivUtq1bBc3HlT+d1cmkf0FDM+n3KTQf39ZKNYXpP1Q12SU3WsV0vR/V0tkruMPFF00WdTl3dvdn7wd58/k+n8Hh5ZN2OQ8OL5v21FMIAAobfCcDkO7uKznue0IRZuaTGfu9TPrRfFTh2I/pv21JXe2kAMi9wOw4QVc88fj29t4RwS1GeJpuYatJayIJF8+eLgKAJi0dWVEy/UPLlpMWxZkwXwgANl3xPZ6FfZ5oPvYN4dcUmo+tjyaXjyk7kNIDLkGi4QXm2/ztRQ9ety1ueLki8/l7gdri+IJpMw/FBPd3xXuGQW/3FvX6mNx+eHr3bsEut+f274P2VA/obB7Q2dwQT3XDs/v2TrvsUC79tPbu2Q2haILUelD4tLx395OCycdWebHKUGQ+tqjTQw8uOfIARGpj4cznj7cvqZ9bMQDyKjDaNtBFN5x2BuNdghvsYumlZOYk1GzV0dUHr77wwjXr83y/wvSXarQqteCy/6k94MYhh6r38wAWS5Rg9cdy6afNV1m8bNUzM/avvirzyatAobhFabZ/xG4xckJrZ5/g0QK4qdvg8JXc4YK9o1s2b4E3zp6+5gCuTAEAaTU5dgQeeOBBMLt8zGI7bT72gebMD3cS83kAHGk/FxeO/e8sXLiw4r+NwFxKs7lBaXZ8Tpcd8AzmaGpIeGd79whYfa0g40rv78J2E3z5333PffDM00/D+ZMnrlv6Tx1+HZ7cuYPspDG7vHCnRMY0WrHLjU3QpLOSJlwh8/HAVvw6Nv0N//OvS+oWVE3nkhltEWZ/l8kOaosbWjv7S+7t9UfTBFQlG+zEag40FieE4wnoGxwmYDZv2gRP7NgJz+/fDwdfeQlOHDoIp44chjNHD5HZCOqt82M5ALj/APcCYEv8yUMHiY6+9iocePF52LdnN5lWPvzww7Bi5WroSHWDwx8GkVJfeKZP4cEaOQA1Mi1wrgi4WvJDDd/rQ/p93DhUNRcNPbcuqQ9UzcQlN9oeKtxgh0fHhxM9JY+VQUC4xxdBVHKOv6jE5rqpbi8t2mDHnmZb1OMvZD7OcnSOILhJdxuaXmw+PmzdUdfEdDsQADXiVVUzdw3dLOMse4q2lxptxORSB2tEOvohFO8mG7VNnjA551/IfHEF20sn/fOBAuZX8uBVmH78PjLOToYUNF7Q/CwAGeekej3p9ItH0bOqGb5ukhksDwttrsabb2vngODRAi24mz3eTYQ72n2tSbD520Bv94OcsxEQM725utL08/u8cGzX2PBksGjOdNJYWwCANx9PRqxu1hT2eWYA1Igeuhbm5y4pZ10r56xfFs77seSM68VtqcGisx0QAppPFOui1A3BaBd4Ih1gD0TB7GnJHC1gx/ZHN8iNDpDqLCDRcEQICf9kIAr/jCBtfp1cl1PmD6/pQaTQg0SDkwF8teKDJa76+cnCCR5D4I50ZjuYU8RoTxnz8XPY29Ost5Ehh2kzz5j/JbPMeC0vqdbEyTnbL4Xm/Tgs4V+Va00OMAdrtHRkXgmM+bH8x4EopeyZEIFomsjfhurKvI1mzoRA4ce+rPDvwBDltori+5mzI3KKpDLKflzS/AIAuB212WAnewCYDRZ8m3m1+D/m1DQqq/4vryaT6bvNevOpkkcL6M3kb7R425LkVYGnmpBXAmV+iAJSyvwMADS/i5jPAxA0H99vTYOPB5A9vEPI/AyAzE4WDw+AMh/PgMZmWlxomddAjpgp2GDHm99w6NaFDd+puk7XTY0azt6sN39S7mCNZp2FnD6CN2wEEohOYn6sq6T5/twrohBAsfl5ABnz6VdEkfktKbKNVGP1kiXEhaJmpuhGm58F8O9zqhtC13S8r/TCv2LXpDGubtKZflNJyRk/j0/VOrsPTO4WsPqiBI4nnABfWxK8rUliLELJmN81ufn4MQ+gwPxMohOkaw3HfjxcFdOtsnhAqrOS+8VCsbzoqVcQQE3jr26vEQ+VXNW6ntd8qfTPJVpjVKI1vnsjHKyxuMJ5f6myA2N+jfjK3FpJ9621tZOf/Xn9r6Gbm1ScvFHDbWnUcD+5VsfK1FQw9SwsOZd78Cosut1RJ/n0jnrJD+fWSBq/yn+i/aZGnXGxWKVfKVZzr4pVhl/cqOmfVy/5+by6phfm1TctnVstmf9VNr3sVa/RfF+s1BvrFbpUg1K3vk6he6ZeoRurV2g/qJNpf1Sv0H1WJ9P8bqbSv0gs++1CseyzRWLZR4tEzVcWiJvPzK9v3ju/Xnrf/HppYoFYpltQ2/Td6+3L7DV7zV6z1+xV9bW6/hcSd2EeG4WLWAAAAABJRU5ErkJggg==
  88. // @run-at document-end
  89. // @match https://gist.github.com/*
  90. // @grant GM_xmlhttpRequest
  91. // @grant GM_addStyle
  92. // @connect githubusercontent.com
  93. // @compatible chrome
  94. // @compatible firefox
  95. // @compatible edge
  96. // @compatible opera
  97. // @compatible safari
  98. // @compatible kiwi
  99. // @compatible qq
  100. // @compatible via
  101. // @compatible brave
  102. // @version 2025.03.18.0659
  103. // @created 2025-03-12 00:22:40
  104. // @modified 2025-03-12 00:22:40
  105. // ==/UserScript==
  106. /**
  107. * File: github-gist-copier.user.js
  108. * Project: UserScripts
  109. * File Created: 2025/03/12,Wednesday 00:22:50
  110. * Author: 人民的勤务员@ChinaGodMan (china.qinwuyuan@gmail.com)
  111. * -----
  112. * Last Modified: 2025/03/18,Tuesday 06:59:14
  113. * Modified By: 人民的勤务员@ChinaGodMan (china.qinwuyuan@gmail.com)
  114. * -----
  115. * License: MIT License
  116. * Copyright © 2024 - 2025 ChinaGodMan,Inc
  117. */
  118. (function () {
  119. 'use strict'
  120. const compactGist = true
  121. function noop() { }
  122. function debounce(f, delay) {
  123. let timeoutId = null
  124. return function (...args) {
  125. if (timeoutId) {
  126. clearTimeout(timeoutId)
  127. }
  128. timeoutId = setTimeout(() => {
  129. f.apply(this, args)
  130. }, delay)
  131. }
  132. }
  133.  
  134. function createCopyButton(fileElement) {
  135. const fileActionElement = fileElement.querySelector('.file-actions')
  136. if (!fileActionElement) {
  137. return noop
  138. }
  139.  
  140. const rawButton = fileActionElement.querySelector('a[href*="/raw/"]')
  141. if (!rawButton) {
  142. return noop
  143. }
  144.  
  145. const buttonToDown = document.createElement('button')
  146. buttonToDown.className = 'btn-octicon gist-down-button'
  147. buttonToDown.style.marginRight = '5px'
  148. const button = document.createElement('button')
  149. button.className = 'btn-octicon gist-copy-button'
  150. button.style.marginRight = '5px'
  151. buttonToDown.innerHTML = `
  152. <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-down">
  153. <path d="M2.75 14A1.75 1.75 0 0 1 1 12.25v-2.5a.75.75 0 0 1 1.5 0v2.5c0 .138.112.25.25.25h10.5a.25.25 0 0 0 .25-.25v-2.5a.75.75 0 0 1 1.5 0v2.5A1.75 1.75 0 0 1 13.25 14Z"></path>
  154. <path d="M7.25 7.689V2a.75.75 0 0 1 1.5 0v5.689l1.97-1.969a.749.749 0 1 1 1.06 1.06l-3.25 3.25a.749.749 0 0 1-1.06 0L4.22 6.78a.749.749 0 1 1 1.06-1.06l1.97 1.969Z"></path>
  155. </svg>
  156.  
  157. <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">
  158. <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>
  159. </svg>
  160. `
  161.  
  162. button.innerHTML = `
  163. <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copy">
  164. <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>
  165. </svg>
  166.  
  167. <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">
  168. <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>
  169. </svg>
  170. `
  171.  
  172. const copyIcon = button.querySelector('.octicon-copy')
  173. const checkIcon = button.querySelector('.octicon-check')
  174. const downIcon = buttonToDown.querySelector('.octicon-down')
  175. const downcheckIcon = buttonToDown.querySelector('.octicon-check')
  176. let timeoutId = null
  177. const copyHandler = (e) => {
  178. if (timeoutId) {
  179. return
  180. }
  181. e.preventDefault()
  182. const rawUrl = rawButton.href
  183. GM_xmlhttpRequest({
  184. method: 'GET',
  185. url: rawUrl,
  186. onload: function (response) {
  187. if (response.status === 200) {
  188. navigator.clipboard.writeText(response.responseText).then(() => {
  189. copyIcon.style.display = 'none'
  190. checkIcon.style.display = 'inline-block'
  191. timeoutId = setTimeout(() => {
  192. copyIcon.style.display = 'inline-block'
  193. checkIcon.style.display = 'none'
  194. timeoutId = null
  195. }, 500)
  196. }).catch(err => {
  197. console.error('Failed to copy text: ', err)
  198. })
  199. }
  200. },
  201. onerror: function (error) {
  202. timeoutId = null
  203. }
  204. })
  205. }
  206. const downHandler = (e, element) => {
  207. if (timeoutId) {
  208. return
  209. }
  210. e.preventDefault()
  211. const gistName = element.parentElement.querySelector('.gist-blob-name').innerText
  212. const rawUrl = rawButton.href
  213. if (gistName.slice(-8) === '.user.js') {
  214. const a = document.createElement('a')
  215. a.href = rawUrl
  216. a.click()
  217. return
  218. }
  219. GM_xmlhttpRequest({
  220. method: 'GET',
  221. url: rawUrl,
  222. onload: function (response) {
  223. if (response.status === 200) {
  224. const blob = new Blob([response.responseText], {
  225. type: 'text/plain'
  226. })
  227. const url = URL.createObjectURL(blob)
  228. const a = document.createElement('a')
  229. a.href = url
  230. a.download = gistName
  231. a.click()
  232. downIcon.style.display = 'none'
  233. downcheckIcon.style.display = 'inline-block'
  234. timeoutId = setTimeout(() => {
  235. downIcon.style.display = 'inline-block'
  236. downcheckIcon.style.display = 'none'
  237. timeoutId = null
  238. }, 500)
  239. } else {
  240. console.error('Download Failed')
  241. }
  242. },
  243. onerror: function (error) {
  244. timeoutId = null
  245. }
  246. })
  247. }
  248.  
  249. buttonToDown.addEventListener('click', (e) => downHandler(e, fileActionElement))
  250. button.addEventListener('click', copyHandler)
  251. fileActionElement.insertBefore(button, fileActionElement.firstChild)
  252. fileActionElement.insertBefore(buttonToDown, fileActionElement.firstChild)
  253. return () => {
  254. button.removeEventListener('click', copyHandler)
  255. if (timeoutId) {
  256. clearTimeout(timeoutId)
  257. }
  258. button.remove()
  259. }
  260. }
  261.  
  262. function runGist() {
  263. let removeAllListeners = noop
  264.  
  265. function tryCreateCopyButtons() {
  266. removeAllListeners()
  267. const fileElements = [...document.querySelectorAll('.file')]
  268. const removeListeners = fileElements.map(createCopyButton)
  269. removeAllListeners = () => {
  270. removeListeners.map((f) => f());
  271. [...document.querySelectorAll('.gist-down-button')].forEach((el) => {
  272. el.remove()
  273. });
  274. [...document.querySelectorAll('.gist-copy-button')].forEach((el) => {
  275. el.remove()
  276. })
  277. }
  278. }
  279.  
  280. setTimeout(tryCreateCopyButtons, 300)
  281.  
  282. const observer = new MutationObserver(debounce(() => {
  283. if (document.querySelectorAll('.file').length > 0 &&
  284. document.querySelectorAll('.gist-copy-button').length === 0) {
  285. tryCreateCopyButtons()
  286. }
  287. }, 100))
  288.  
  289. observer.observe(document.body, {
  290. childList: true,
  291. subtree: true
  292. })
  293.  
  294. if (window.onurlchange === null) {
  295. window.addEventListener('urlchange', debounce(tryCreateCopyButtons, 16))
  296. }
  297. }
  298. function compactView() {
  299. //! https://gf.qytechs.cn/es/scripts/529737
  300. GM_addStyle(`
  301. /* main container */
  302. .gist-snippet {margin-bottom: 2px !important;}
  303. /* icon */
  304. .gist-snippet-meta .d-lg-inline-block.d-none.v-align-top.mt-1 > a {display: none !important;}
  305. /* code */
  306. .gist-snippet .js-gist-file-update-container {display: none;}
  307. /* links */
  308. .gist-snippet-meta .px-lg-2.px-0 > span:nth-child(1) {display: none;}
  309. /* date */
  310. .gist-snippet-meta .px-lg-2.px-0 > div {display: none;}
  311. /* font size */
  312. .gist-snippet-meta .color-fg-muted {font-size: 14px !important;}
  313. `)
  314. }
  315. if (compactGist) {
  316. compactView()
  317. }
  318. runGist()
  319.  
  320. })()

QingJ © 2025

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