Google Maps Coordinates Grabber

Once in Google Maps, click on the map (Do not click on markers) a popup should show at the bottom with the place and the coordinates displayed in the last line. If everything works as expected you should see a line of text on top of the map with the confirmation of the coordinates been copied to clipboard. Press Control + Shift + L while on streetview to get the coordinates from the URL.

As of 2021-08-23. See the latest version.

// ==UserScript==
// @name            Google Maps Coordinates Grabber
// @version         0.3.1
// @namespace       https://greasyfork.org/en/users/250979-mrmike
// @author          MrMike
// @description     Once in Google Maps, click on the map (Do not click on markers) a popup should show at the bottom with the place and the coordinates displayed in the last line. If everything works as expected you should see a line of text on top of the map with the confirmation of the coordinates been copied to clipboard. Press Control + Shift + L while on streetview to get the coordinates from the URL.
// @grant           none
// @include         http*://*google*/maps/*
// @run-at          document-start
// ==/UserScript==

// Leave empty to get just the values separated by a comma
// Example: `"lat": {{lat}}, "lng": {{lng}}`
const FORMAT = `{ "lat": {{lat}}, "lng": {{lng}} }`;

let theCopiedCoords;
let theCoords;
let theLatLng;
let theLat;
let theLng;
let tempCard;

document.addEventListener("keypress", (event) => {
    if(event.code == "KeyL" && event.ctrlKey && event.shiftKey && !event.altKey && !event.repeat){
        let theLink = location.href;
        let values = theLink.substring(theLink.indexOf("@")+1, theLink.length);
        values = values.split(",");
        theCoords = values[0] + ", " + values[1];
        theLat = values[0];
        theLng = values[1];
        if(FORMAT != ""){
            let out = FORMAT;
            copyTextToClipboard(out.replace("{{lat}}", theLat).replace("{{lng}}", theLng));
        }
        else{
            copyTextToClipboard(theCoords);
        }
    }
});

//Look for card every X time
setInterval(() => {
  //Get the card
  let theCard = document.getElementById("reveal-card");
  //Is the card not null?
  if (theCard != null) {
      let theDialog = theCard.querySelector("div[role='dialog']");
      if (theDialog != null) {
          theCoords = theDialog.lastElementChild.innerText;
          theLatLng = theCoords.replace(" ", "").split(",");

          if (theLatLng.length == 2 && theCopiedCoords != theCoords) {
              theLat = theLatLng[0];
              theLng = theLatLng[1];
              if (!isNaN(theLat) && !isNaN(theLng)) {
                  //Copy this data to clipboard
                  if(FORMAT != ""){
                      let out = FORMAT;
                      copyTextToClipboard(out.replace("{{lat}}", theLat).replace("{{lng}}", theLng));
                      theCopiedCoords = theCoords;
                  }
                  else{
                      copyTextToClipboard(theCoords);
                      theCopiedCoords = theCoords;
                  }
              }
          }
      }
  }
}, 1000);

function doDisplay(theData) {
	let theInput = document.getElementById("omnibox");
	let inBold = document.createElement("div");

	inBold.innerHTML = "<b style='font-size:20px'>Copied " + theData + "</b>";
	inBold.style.backgroundColor = "#202030CC";
	inBold.style.color = "#000099";
	inBold.style.width = "100vw";
	inBold.style.textAlign = "center";

	theInput.parentNode.insertBefore(inBold, theInput.nextSibling);

	setTimeout(() => {
		inBold.style.display = "none";
	}, 5000);
}

function fallbackCopyTextToClipboard(text, element) {
    var textArea = document.createElement("textarea");
    textArea.value = text;
    document.body.appendChild(textArea);
    textArea.focus();
    textArea.select();
    try {
      var successful = document.execCommand('copy');
      if (successful) {
        doDisplay(text);
      }
    } catch (err) {
    }
    document.body.removeChild(textArea);
}

function copyTextToClipboard(text, element) {
    if (!navigator.clipboard) {
      fallbackCopyTextToClipboard(text, element);
      return;
    }
    navigator.clipboard.writeText(text)
      .then(() => {
	      doDisplay(text);
	    }, (err) => {});
}