Greasy Fork Install Button at search

adds install button at search and at user pages.

// ==UserScript==
// @name Greasy Fork Install Button at search
// @namespace -
// @version 1.0.0
// @description adds install button at search and at user pages.
// @author NotYou
// @match *://*sleazyfork.org/*
// @match *://*greasyfork.org/*
// @grant none
// @run-at document-idle
// @license GPL-3.0-or-later
// ==/UserScript==

(function() {
    var $ = (s) => document.querySelector(s)

    var $$ = (s) => document.querySelectorAll(s)

    var appendHTML = function(el, html) {
        el.insertAdjacentHTML('beforeend', html)
    }

    var domain = location.host

    // STYLES
    appendHTML($('head'), ['<style>',

    '.custom-install-link-parent {',
      'text-decoration: none !important;',
    '}',

    '.custom-install-link-parent > * {',
      'transform: scale(0.7);',
    '}',

    '.custom-install-link {',
      'margin-right: -15px !important;',
      'margin-left: -6px !important;',
    '}',

    '.custom-install-style-link {',
      'margin-left: -14px !important;',
      'margin-right: -26px !important;',
    '}',

    '</style>'].join(''))

    // USER SCRIPT

    $$('#user-script-list > li[data-script-type="public"] > article > h2 > a, #browse-script-list > li[data-script-type="public"] > article > h2 > a').forEach(function(e) {
        var data = e.parentNode.parentNode.parentNode.dataset
        var scriptId = data.scriptId
        var scriptName = data.scriptName

        appendHTML(e, '<span data-install-format="js" data-script-id="'+ scriptId +'" data-script-name="' + scriptName + '"><a href="https://' + domain + '/scripts/' + scriptId + '/code/' + scriptName + '.user.js" class="custom-install-link-parent"><span class="install-link custom-install-link">Install</span></a><span>')
    })

    // USER STYLE

    $$('#user-script-list > li[data-script-language="css"] > article > h2 > a, #browse-script-list > li[data-script-language="css"] > article > h2 > a').forEach(function(e) {
        var data = e.parentNode.parentNode.parentNode.dataset
        var scriptId = data.scriptId
        var scriptName = data.scriptName

        appendHTML(e, '<span data-install-format="css" data-script-id="'+ scriptId +'" data-script-name="' + scriptName + '"><a target="_blank" href="https://' + domain + '/scripts/' + scriptId + '/code/' + scriptName + '.user.css" class="custom-install-link-parent"><span class="install-link custom-install-link custom-install-style-link">Install as style</span></a><span>')
    })

    // LIBRARIES

    $$('#user-library-script-list > li > article > h2 > a, #browse-script-list > li[data-script-type="library"] > article > h2 > a').forEach(function(e) {
        var data = e.parentNode.parentNode.parentNode.dataset
        var scriptId = data.scriptId
        var scriptName = data.scriptName
        var _scriptName = scriptName.replace(/\s/g, "-")

        appendHTML(e, '<span data-install-format="js" data-script-id="'+ scriptId +'" data-script-name="' + scriptName + '"><a href=javascript:void(0) onclick=navigator.clipboard.writeText("https://' + domain + '/scripts/' + scriptId + '/code/' + _scriptName + '.js") class="custom-install-link-parent"><span class="install-link custom-install-link">Copy URL</span></a><span>')
    })
})()