Direct File for Google Classroom

Directly Download the Files in Google Classroom using Ctrl Click

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, Greasemonkey alebo Violentmonkey.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie, ako napríklad Tampermonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, % alebo Violentmonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey alebo Userscripts.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie, ako napríklad Tampermonkey.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie správcu používateľských skriptov.

(Už mám správcu používateľských skriptov, nechajte ma ho nainštalovať!)

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

(Už mám správcu používateľských štýlov, nechajte ma ho nainštalovať!)

// ==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) { }

})();