appendShadow

💜

// jshint esversion: 6
// eslint-disable-next-line
// ==UserScript==
// @name         appendShadow
// @namespace    https://dniness.github.io/
// @version      0.03
// @description  💜
// @author       Dniness
// @match        *://*/*
// @icon         data:image/svg+xml,<svg width='64' height='64' fill='none' xmlns='http://www.w3.org/2000/svg'><circle cx='32' cy='32' r='32' fill='darkgray'/></svg>
// @grant        none
// @run-at       document-body
// @license      MPL2.0
// ==/UserScript==

 

(document.appendShadow=(func,name)=>{
    'use strict';
    const mode = name?'open':'closed';
    [,name,func]=(func+'').match(/([^ =]+)[^{]+\{(.+)\}$/);
    name = name.replace(/([A-Z])/g,"-$1").toLowerCase();
    customElements.define(name, class extends HTMLElement {
        constructor() {
            super();
            new Function(func).call(this.attachShadow({mode}));
        }
    })
    document.body.appendChild(document.createElement(name));
})(exampleMonkeyShadow=>{this.appendChild(document.createElement('h2'))});