NKUST elearning file download
// ==UserScript==
// @name 高科大教學平台檔案下載
// @namespace https://facaikotei.github.io/
// @version 7.0.0
// @description NKUST elearning file download
// @author (c)2024 facaikotei
// @match https://elearning.nkust.edu.tw/moocs/*
// @grant GM_getResourceText
// @require https://update.greasyfork.org/scripts/12228/setMutationHandler.js
// @resource downloadIcon https://elearning.nkust.edu.tw/moocs/assets/images/icons/ic_paperclip.svg
// @icon https://elearning.nkust.edu.tw/base/10001/door/tpl/icon.ico
// @license MIT
// @website https://greasyfork.org/users/1305953
// ==/UserScript==
(function () {
'use strict';
setMutationHandler(document.querySelector('cgust-root'), '.course-node__info', async (els) => {
const courseNodeData = await (await fetch(`/api/v1/courses/${location.hash.split('/').pop()}/node`)).json();
const urlExtractor = item => [item.blank_url, ...item.items.flatMap(urlExtractor)];
const urls = courseNodeData.data.items.flatMap(urlExtractor);
els = [...new Set(els)];
els.forEach((el, index) => {
const url = urls[index % urls.length];
el = el.querySelector(`a[href="${url}"]`) || el.querySelector('a');
if (url && el && el.getAttribute('href') !== url) {
const downloadLink = el.cloneNode(true);
downloadLink.href = url;
downloadLink.target = '_blank';
downloadLink.download = url.split('/').pop();
downloadLink.querySelector('svg').outerHTML = GM_getResourceText('downloadIcon');
el.after(downloadLink);
}
});
});
})();