您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Add a button that contains a list of gist raw file links
当前为
- // ==UserScript==
- // @name Gist Raw Links
- // @version 0.1.5
- // @description Add a button that contains a list of gist raw file links
- // @license MIT
- // @author Rob Garrison
- // @namespace https://github.com/Mottie
- // @include https://gist.github.com/*
- // @run-at document-idle
- // @grant GM_addStyle
- // @grant GM.addStyle
- // @grant GM_xmlhttpRequest
- // @grant GM.xmlHttpRequest
- // @connect api.github.com
- // @require https://greasemonkey.github.io/gm4-polyfill/gm4-polyfill.js
- // @icon https://assets-cdn.github.com/pinned-octocat.svg
- // ==/UserScript==
- (() => {
- "use strict";
- GM.addStyle(`
- .ghrl-get-list * { pointer-events:none; }
- .ghrl-get-list, .ghrl-files a { cursor:pointer; }
- .ghrl-files div { text-align:center; }
- .gist-count-links { z-index: 21; }
- `);
- const item = document.createElement("li");
- item.className = "select-menu js-menu-container js-select-menu";
- function addButton(node) {
- const button = item.cloneNode();
- button.innerHTML = `
- <a class="select-menu-button js-menu-target ghrl-get-list" aria-expanded="false" aria-haspopup="true">
- ? Raw urls
- </a>
- <div class="select-menu-modal-holder">
- <div class="select-menu-modal js-menu-content">
- <div class="select-menu-header">
- <svg aria-label="Close" class="octicon octicon-x js-menu-close" height="16" role="img" version="1.1" viewBox="0 0 12 16" width="12"><path fill-rule="evenodd" d="M7.48 8l3.75 3.75-1.48 1.48L6 9.48l-3.75 3.75-1.48-1.48L4.52 8 .77 4.25l1.48-1.48L6 6.52l3.75-3.75 1.48 1.48z"/></svg>
- <span class="select-menu-title">Files</span>
- </div>
- <div class="js-select-menu-deferred-content ghrl-files">
- <div>
- <img src="https://assets-cdn.github.com/images/spinners/octocat-spinner-32.gif" width="32" alt="">
- </div>
- </div>
- </div>
- </div>`;
- node.insertBefore(button, node.childNodes[0]);
- }
- function update() {
- const gists = $$(".gist-snippet");
- let indx = gists.length;
- if (indx) {
- while (indx--) {
- // only save dabblet files from list
- if (!$(".ghrl-get-list", gists[indx])) {
- addButton($(".gist-count-links", gists[indx]));
- }
- }
- }
- }
- function addList(link, files) {
- let url,
- html = "";
- Object.keys(files).forEach(file => {
- // remove version sha from raw_url to always point at
- // the latest version of the file - see #18
- url = files[file].raw_url.replace(/raw\/\w+\//, "raw/");
- html += `
- <a class="dropdown-item ghrl-file" role="menuitem" href="${url}">
- ${file}
- </a>`;
- });
- $(".ghrl-files", link.parentNode).innerHTML = html;
- }
- function loadFileList(link) {
- let url,
- el = link.closest(".select-menu");
- el = $("a", el.nextElementSibling);
- if (el) {
- url = el.href.split("/");
- GM.xmlHttpRequest({
- method : "GET",
- url : `https://api.github.com/gists/${url.pop()}`,
- onload : function(response) {
- let json = false;
- try {
- json = JSON.parse(response.responseText);
- } catch (err) {
- console.error(`Invalid JSON for gist ${gistid}`);
- return false;
- }
- if (json && json.files) {
- addList(link, json.files);
- }
- }
- });
- }
- }
- function addBindings() {
- document.addEventListener("click", function(event) {
- const target = event.target;
- if (target.classList.contains("ghrl-get-list")) {
- event.preventDefault();
- event.stopPropagation();
- if (!$(".dropdown-item", target.parentNode)) {
- loadFileList(target);
- }
- }
- });
- }
- function $(str, el) {
- return (el || document).querySelector(str);
- }
- function $$(str, el) {
- return Array.from((el || document).querySelectorAll(str));
- }
- document.addEventListener("pjax:end", update);
- update();
- addBindings();
- })();