Direct File for Google Classroom

Directly Download the Files in Google Classroom using Ctrl Click

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey, Greasemonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Userscripts.

Voor het installeren van scripts heb je een extensie nodig, zoals {tampermonkey_link:Tampermonkey}.

Voor het installeren van scripts heb je een gebruikersscriptbeheerder nodig.

(Ik heb al een user script manager, laat me het downloaden!)

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

(Ik heb al een beheerder - laat me doorgaan met de installatie!)

// ==UserScript==
// @name         Direct File for Google Classroom
// @namespace    http://tampermonkey.net/
// @version      0.4.1
// @description  Directly Download the Files in Google Classroom using Ctrl Click
// @author       You
// @match        https://classroom.google.com/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=google.com
// @grant        none
// @license MIT
// ==/UserScript==

(function () {

  'use strict';
  // Your code here...

  const M_HREF = "https://drive.google.com/file/d/"

  const linkElmOnClick = function (evt) {

    // const linkElm = this;
    evt.stopPropagation();
    evt.stopImmediatePropagation();

  };

  let pageChangedFlag = false;

  const onPageChanged = () => {
    if (!pageChangedFlag) return;

    const linkSelector = `[href*="${M_HREF}"]:not([data-ozhref])`;
    if (!document.querySelector(linkSelector)) return;

    const links = document.querySelectorAll(linkSelector);
    for (const linkElm of links) {

      const orhref = linkElm.href;

      linkElm.dataset.ozhref = orhref;

      const mres = orhref.match(/https:\/\/drive\.google\.com\/file\/d\/([0-9a-zA-Z\-_+.·]+)\/\w+/);
      // id should be /[0-9a-zA-Z\-_+]+/ in general
      if (!mres) continue;

      const dfileId = `${mres[1]}`;

      // let newHref=`https://drive.google.com/u/1/uc?id=${mres[1]}&export=download`;

      let uo = null;
      try {
        uo = new URL(orhref);
      } catch (e) { }
      if (!uo) continue;

      const uo2 = new URL(`https://drive.google.com/uc?export=download&id=${dfileId}`);

      uo.searchParams.forEach((value, key) => {
        if (key === 'export' || key === 'id') return;
        uo2.searchParams.set(key, value);
      });
      const newHref = uo2.toString();

      if (!newHref || typeof newHref !== 'string') continue;
      // console.log(orhref, newHref)
      // linkElm.setAttribute('href',newHref)

      // let newHref = `https://drive.google.com/uc?export=download&id=${dfileId}&usp=drive_web&authuser=2`
      linkElm.setAttribute('href', newHref);

      linkElm.setAttribute('target', '_blank');

      linkElm.addEventListener('click', linkElmOnClick, true);

    }

  };

  new MutationObserver(() => {
    pageChangedFlag = true;
    Promise.resolve().then(onPageChanged);
  }).observe(document, { subtree: true, childList: true });


  try {
    // trigger onPageChanged
    document.documentElement.appendChild(document.createElement('noscript'));
  } catch (e) { }

})();