Littlefinix / Amazon URL Shortener

// ==UserScript==
// @name         Amazon URL Shortener
// @namespace    http://littlefinix.net/
// @version      0.9
// @updateURL    https://openuserjs.org/meta/Littlefinix/Amazon_URL_Shortener.meta.js
// @description  Adds an option for amazon to copy a shortened link to the clipboard, available under 'Share'.
// @author       Littlefinix
// @include      /^https?:\/\/(www.|smile.)?amazon.*\/[a-z]p\/.*/
// @grant        GM_setClipboard
// @license      MIT
// @sandbox      DOM
// ==/UserScript==

var isCopyInfoOpen = false;

(function () {
  'use strict';

  var container = document.querySelector("#ask_feature_div");

  if (!container)
    container = document.querySelector("#bylineInfo_feature_div");

  if (!container)
    container = document.querySelector("#addToCart");

  if (!container) {
    console.error("failed to find appropriate container");
    return;
  }

  console.log("container:", container);

  var info = document.createElement("div");
  info.innerHTML = "<span style=\"background: limegreen; color: white; padding: 0.5em;\">Copied Successfully!</span>";

  var link = document.createElement("a");
  link.innerText = "Copy URL";
  link.onclick = function (e) {
    var matches = /((?:.*)amazon(?:.[a-z]{2,})+)\/(?:.*)?([a-z]p)\/(?:product\/)?([^\/\?&]+)(?:.*|$)/.exec(document.URL);

    if (matches === null) {
      alert("Could not copy link.\nYou may need to update the script");
      return;
    }

    var scroll = window.scrollY;

    var txt = document.createElement("textarea");
    document.body.appendChild(txt);

    txt.innerText = matches[1] + "/dp/" + matches[3];
    txt.select();

    if (!document.execCommand('copy')) {
      prompt("Could not copy to clipboard!\nPlease copy manually:", txt.innerText);
    }

    txt.parentElement.removeChild(txt);
    window.scrollTo(window.scrollX, scroll);

    //console.log(GM_setClipboard(matches[1] + "/dp/" + matches[3], "text"));

    if (isCopyInfoOpen)
      return;

    isCopyInfoOpen = true;

    container.append(info);

    setTimeout(function () {
      isCopyInfoOpen = false;
      info.parentElement.removeChild(info);
    }, 1000);
  };

  var pipe = document.createElement("span");
  pipe.textContent = '|';
  pipe.classList.add('askPipe');

  container.append(pipe);
  container.append(link);
})();