NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name Google Drive Direct Links // @namespace Yavos' Toolbox // @include https://drive.google.com/drive/* // @version 1 // @grant none // @description Adds a little text field to the details tab, showing a direct link to your file. (Will only work if you shared the containing folder for everybody in the internet.) // @copyright 2014, Yavos // @oujs:author Yavos // ==/UserScript== config = { attributes: true, childList: false, characterData: false, subtree: true }; var observer1 = new MutationObserver(function(mutations) { //wait for page to be loaded mutations.forEach(function(mutation) { if (mutation.target.getAttribute("role") && mutation.target.getAttribute("role") == "main" && mutation.target.style.display != "none") { details = document.getElementsByClassName("a-oa-ib-jd-Y-H a-oa-ib-jd-Y-H-ql a-oa-ib-Qh-H a-l-Kd-n"); for (i = 0; i < details.length; i++) { if (details[i].parentNode.parentNode.parentNode.parentNode.parentNode.style.display != "none" && details[i].style.display != "none") innerDetails = details[i].childNodes[0].childNodes[0].childNodes[0].childNodes[1].childNodes[0]; } detailsHeader = innerDetails.childNodes[0]; detailsBody = innerDetails.childNodes[1]; insertDiv = detailsBody.childNodes[0].childNodes[0].childNodes[0]; label = detailsHeader.childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[1].innerHTML; copy = document.createElement("input"); copy.type = "text"; copy.style = "width: 90%"; folderID = document.location.href.split("/").reverse()[0]; copy.value = "https://googledrive.com/host/" + folderID + "/" + label; copy.addEventListener("click", function(e) {e.target.setSelectionRange(0, e.target.value.length);}); newDiv = document.createElement("div"); newDiv.style = "width: 100%"; if (innerDetails.childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].getAttribute("aria-label") != "Freigegebene Google Drive-Ordner-Datei") { newDiv.appendChild(document.createTextNode("Copy this for direct link:")); newDiv.appendChild(document.createElement("br")); newDiv.appendChild(copy); insertDiv.appendChild(newDiv); } target = details[0].parentNode.parentNode.parentNode.parentNode.parentNode.parentNode; observer2.observe(target, config); observer1.disconnect(); } }); }); var observer2 = new MutationObserver(function(mutations) { mutations.forEach(function(mutation) { if (mutation.attributeName == "style") { if (mutation.target.getAttribute("aria-hidden")) { // <- tested to be the most reliable so far details = document.getElementsByClassName("a-oa-ib-jd-Y-H a-oa-ib-jd-Y-H-ql a-oa-ib-Qh-H a-l-Kd-n"); for (i = 0; i < details.length; i++) { if (details[i].parentNode.parentNode.parentNode.parentNode.parentNode.style.display != "none" && details[i].style.display != "none") { innerDetails = details[i].childNodes[0].childNodes[0].childNodes[0].childNodes[1].childNodes[0]; break; } } if (insertDiv && insertDiv.childNodes[insertDiv.childNodes.length-1] == newDiv) { insertDiv.removeChild(newDiv); } if (innerDetails.childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].getAttribute("aria-label") != "Freigegebene Google Drive-Ordner-Datei") { detailsHeader = innerDetails.childNodes[0]; detailsBody = innerDetails.childNodes[1]; insertDiv = detailsBody.childNodes[0].childNodes[0].childNodes[0]; label = detailsHeader.childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[1].innerHTML; folderID = document.location.href.split("/").reverse()[0]; copy.value = "https://googledrive.com/host/" + folderID + "/" + label; newDiv = document.createElement("div"); newDiv.appendChild(document.createTextNode("Copy this for direct link:")); newDiv.appendChild(document.createElement("br")); newDiv.appendChild(copy); insertDiv.appendChild(newDiv); } } } }); }); observer1.observe(document.getElementById("drive_main_page"), config);