2019-11-03 19:13:06 +00:00
|
|
|
|
// ==UserScript==
|
|
|
|
|
// @name musescore-downloader
|
|
|
|
|
// @namespace https://www.xmader.com/
|
2019-11-03 19:27:47 +00:00
|
|
|
|
// @homepageURL https://github.com/Xmader/musescore-downloader/
|
|
|
|
|
// @supportURL https://github.com/Xmader/musescore-downloader/issues
|
2019-11-03 20:01:29 +00:00
|
|
|
|
// @version 0.1.1
|
2019-11-03 19:13:06 +00:00
|
|
|
|
// @description 免登录、免 Musescore Pro,下载 musescore.com 上的曲谱
|
|
|
|
|
// @author Xmader
|
|
|
|
|
// @match https://musescore.com/user/*/scores/*
|
|
|
|
|
// @license MIT
|
|
|
|
|
// @copyright Copyright (c) 2019 Xmader
|
|
|
|
|
// @grant none
|
|
|
|
|
// ==/UserScript==
|
|
|
|
|
|
|
|
|
|
(function () {
|
|
|
|
|
'use strict';
|
|
|
|
|
|
|
|
|
|
const getIndexPath = (id) => {
|
|
|
|
|
const idStr = String(id);
|
|
|
|
|
// 获取最后三位,倒序排列
|
|
|
|
|
// "5449062" -> ["2", "6", "0"]
|
|
|
|
|
const indexN = idStr.split("").reverse().slice(0, 3);
|
|
|
|
|
return indexN.join("/");
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// @ts-ignore
|
|
|
|
|
const scorePlayer = window.UGAPP.store.jmuse_settings.score_player;
|
|
|
|
|
const { id, vid } = scorePlayer.json;
|
|
|
|
|
const baseURL = scorePlayer.urls.image_path;
|
|
|
|
|
const scoreHexId = baseURL.split("/").filter(Boolean).reverse()[1];
|
2019-11-03 20:01:29 +00:00
|
|
|
|
const msczURL = `https://musescore.com/static/musescore/scoredata/score/${getIndexPath(id)}/${id}/score_${vid}_${scoreHexId}.mscz`;
|
2019-11-03 19:13:06 +00:00
|
|
|
|
const pdfURL = baseURL + "score_full.pdf";
|
|
|
|
|
const mxlURL = baseURL + "score.mxl";
|
|
|
|
|
const { midi: midiURL, mp3: mp3URL } = scorePlayer.urls;
|
|
|
|
|
const btnsDiv = document.querySelectorAll("aside section > div")[3];
|
|
|
|
|
const downloadBtn = btnsDiv.querySelector("button");
|
|
|
|
|
downloadBtn.onclick = null;
|
|
|
|
|
const downloadURLs = {
|
|
|
|
|
"Musescore": msczURL,
|
|
|
|
|
"PDF": pdfURL,
|
|
|
|
|
"MusicXML": mxlURL,
|
|
|
|
|
"MIDI": midiURL,
|
|
|
|
|
"MP3": mp3URL,
|
|
|
|
|
};
|
|
|
|
|
const newDownloadBtns = Object.keys(downloadURLs).map((name) => {
|
|
|
|
|
const url = downloadURLs[name];
|
|
|
|
|
const btn = downloadBtn.cloneNode(true);
|
|
|
|
|
btn.onclick = () => {
|
|
|
|
|
window.open(url);
|
|
|
|
|
};
|
2019-11-03 20:01:29 +00:00
|
|
|
|
const span = downloadBtn.querySelector("span");
|
|
|
|
|
span.textContent = `Download ${name}`;
|
2019-11-03 19:13:06 +00:00
|
|
|
|
return btn;
|
|
|
|
|
});
|
|
|
|
|
downloadBtn.replaceWith(...newDownloadBtns);
|
|
|
|
|
|
|
|
|
|
}());
|