All files / src/nodes github-corners.ts

100% Statements 5/5
100% Branches 2/2
100% Functions 1/1
100% Lines 5/5

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106                    3x                                                                                                                                     9x 9x 1x   8x                                                
import { Element } from 'hast';
 
interface GithubCorners {
  href?: string;
}
 
/**
 * @uiw/github-corners@1.5.14
 * https://github.com/uiwjs/react-github-corners
 */
const scriptString = `const GITHUB_CORNERS_TEMPLATE = document.createElement("template");
GITHUB_CORNERS_TEMPLATE.innerHTML = \`
<style>
:host a:hover .octo-arm { animation: octocat-wave 560ms ease-in-out; }
@keyframes octocat-wave {
  0%, 100% { transform: rotate(0); }
  20%, 60% { transform: rotate(-25deg); }
  40%, 80% { transform: rotate(10deg); }
}
@media (max-width:500px) {
  :host a:hover .octo-arm { animation: none; }
  :host .octo-arm { animation: octocat-wave 560ms ease-in-out; }
}
:host svg { z-index: 99; position: fixed; border: 0px; top: 0px; }
</style>
<svg width="80" height="80" viewBox="0 0 250 250" aria-hidden="true">
  <a xlink:href="https://github.com/uiwjs/react-github-corners" target="_blank" rel="nofollow sponsored" style="fill: rgb(21, 21, 19); color: rgb(255, 255, 255);">
    <g>
      <path d="M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z"></path>
      <path d="M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2" fill="currentColor" class="octo-arm" style="transform-origin: 130px 106px;"></path>
      <path d="M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z" fill="currentColor" class="octo-body"></path>
    </g>
  </a>
</svg>
\`;
export class GithubCorners extends HTMLElement {
    constructor() {
        super();
        this.right = '0';
        this.shadow = this.attachShadow({ mode: 'open' });
        this.shadow.appendChild(this.ownerDocument.importNode(GITHUB_CORNERS_TEMPLATE.content, true));
        this.update();
    }
    static get observedAttributes() {
        return ['style', 'z-index', 'target', 'height', 'width', 'href', 'color', 'fill', 'position', 'top', 'left', 'right', 'bottom', 'transform'];
    }
    setAttr(name, value) {
        const svg = this.shadow.querySelector('svg');
        if (/(href)/.test(name.toLocaleLowerCase())) {
            svg.lastElementChild.setAttribute('xlink:href', value);
        }
        else if (/(color|fill)/.test(name.toLocaleLowerCase())) {
            svg.firstElementChild.style[name] = value;
        }
        else if (/(z-index|position|top|left|right|bottom|transform)/.test(name.toLocaleLowerCase())) {
            svg.style[name] = value;
        }
        else {
            svg.setAttribute(name, value);
        }
    }
    update() {
        ;
        [...this.getAttributeNames(), 'right'].forEach((name) => {
            const value = this.getAttribute(name) || this[name] || '';
            this.setAttr(name, value);
        });
    }
    attributeChangedCallback(name, oldValue, newValue) {
        if (oldValue !== newValue) {
            this.setAttr(name, newValue);
        }
    }
}
customElements.define('github-corners', GithubCorners);`;
 
export function githubCorners(opts: GithubCorners): Element[] {
  const { href } = opts;
  if (!href) {
    return;
  }
  return [
    {
      type: 'element',
      tagName: 'github-corners',
      properties: {
        target: '__blank',
        position: 'fixed',
        'z-index': 999,
        href,
      },
      children: []
    }, {
      type: 'element',
      tagName: 'script',
      properties: {
        type: 'module',
        // src: 'https://unpkg.com/@uiw/github-corners?module',
      },
      children: [{
        type: 'text',
        value: scriptString,
      }]
    }
  ];
}