Skip to content

Instantly share code, notes, and snippets.

@hungtcs
Last active December 10, 2024 01:17
Show Gist options
  • Select an option

  • Save hungtcs/8fffc8cf64a2d41a793535a98720e2f2 to your computer and use it in GitHub Desktop.

Select an option

Save hungtcs/8fffc8cf64a2d41a793535a98720e2f2 to your computer and use it in GitHub Desktop.

Revisions

  1. hungtcs revised this gist Dec 10, 2024. 1 changed file with 4 additions and 3 deletions.
    7 changes: 4 additions & 3 deletions github-jsdelivr-link.user.js
    Original file line number Diff line number Diff line change
    @@ -1,9 +1,10 @@
    // ==UserScript==
    // @name GitHub JsDelivr Link
    // @namespace http://tampermonkey.net/
    // @version 2024-12-05
    // @namespace https://github.com/hungtcs
    // @version 2024-12-10
    // @description open github jsdelivr link
    // @author You
    // @author hungtcs
    // @license MIT
    // @match https://github.com/**/*
    // @icon https://camo.githubusercontent.com/6a5d2046028682a99b5fa88ef0f3399c9bced1d514179686a3973a323bccbf44/68747470733a2f2f7777772e6a7364656c6976722e636f6d2f69636f6e5f323536783235362e706e67
    // @grant none
  2. hungtcs revised this gist Dec 5, 2024. No changes.
  3. hungtcs created this gist Dec 5, 2024.
    68 changes: 68 additions & 0 deletions github-jsdelivr-link.user.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,68 @@
    // ==UserScript==
    // @name GitHub JsDelivr Link
    // @namespace http://tampermonkey.net/
    // @version 2024-12-05
    // @description open github jsdelivr link
    // @author You
    // @match https://github.com/**/*
    // @icon https://camo.githubusercontent.com/6a5d2046028682a99b5fa88ef0f3399c9bced1d514179686a3973a323bccbf44/68747470733a2f2f7777772e6a7364656c6976722e636f6d2f69636f6e5f323536783235362e706e67
    // @grant none
    // ==/UserScript==

    (function() {
    'use strict';

    const iconUrl = 'https://camo.githubusercontent.com/6a5d2046028682a99b5fa88ef0f3399c9bced1d514179686a3973a323bccbf44/68747470733a2f2f7777772e6a7364656c6976722e636f6d2f69636f6e5f323536783235362e706e67'

    function run() {
    const copyPathButton = document.querySelector('button[aria-label="Copy path"]');
    if (!copyPathButton) {
    return;
    }

    const url = new URL(window.location.href);
    const { pathname } = url;
    const isFile = pathname.includes('/blob/')
    const isFolder = pathname.includes('/tree/')

    let link;
    if (isFolder) {
    const index = pathname.indexOf('/tree/');
    const author = pathname.slice(1, index);
    let rest = pathname.slice(index + 6);
    const version = rest.slice(0, rest.indexOf('/'))
    const filepath = rest.slice(rest.indexOf('/'));
    link = `https://cdn.jsdelivr.net/gh/${ author }@${version}${filepath}/`;
    } else if (isFile) {
    const index = pathname.indexOf('/blob/');
    const author = pathname.slice(1, index);
    let rest = pathname.slice(index + 6);
    const version = rest.slice(0, rest.indexOf('/'))
    const filepath = rest.slice(rest.indexOf('/'));
    link = `https://cdn.jsdelivr.net/gh/${ author }@${version}${filepath}`;
    } else {
    return;
    }

    let actionButton = document.querySelector('button[aria-label="Open JsDelivr Link"]')
    if (!actionButton) {
    const copyPathButtonWrapper = copyPathButton.parentElement;
    const container = copyPathButtonWrapper.parentElement
    const actionNode = copyPathButtonWrapper.cloneNode(true)
    actionButton = actionNode.querySelector('button')
    actionButton.setAttribute('title', 'Open JsDelivr Link')
    actionButton.setAttribute('aria-label', 'Open JsDelivr Link')
    actionButton.innerHTML = `<img src=${iconUrl} style="height: 16px;" />`;
    container.appendChild(actionNode);
    }


    actionButton.onclick = () => {
    window.open(link);
    };
    }

    setInterval((event) => {
    run();
    }, 1000);
    })();