|
@@ -17,7 +17,7 @@
|
|
// @license AGPL-3.0-only
|
|
// @license AGPL-3.0-only
|
|
// @author Sv443
|
|
// @author Sv443
|
|
// @copyright Sv443 (https://github.com/Sv443)
|
|
// @copyright Sv443 (https://github.com/Sv443)
|
|
-// @icon https://raw.githubusercontent.com/Sv443/BetterYTM/develop/assets/images/logo/logo_48.png?b=94d40b5
|
|
|
|
|
|
+// @icon https://raw.githubusercontent.com/Sv443/BetterYTM/develop/assets/images/logo/logo_48.png?b=96472f4
|
|
// @match https://music.youtube.com/*
|
|
// @match https://music.youtube.com/*
|
|
// @match https://www.youtube.com/*
|
|
// @match https://www.youtube.com/*
|
|
// @run-at document-start
|
|
// @run-at document-start
|
|
@@ -34,35 +34,35 @@
|
|
// @grant GM.xmlHttpRequest
|
|
// @grant GM.xmlHttpRequest
|
|
// @grant unsafeWindow
|
|
// @grant unsafeWindow
|
|
// @noframes
|
|
// @noframes
|
|
-// @resource css-anchor_improvements https://raw.githubusercontent.com/Sv443/BetterYTM/develop/assets/style/anchorImprovements.css?b=94d40b5
|
|
|
|
-// @resource css-fix_spacing https://raw.githubusercontent.com/Sv443/BetterYTM/develop/assets/style/fixSpacing.css?b=94d40b5
|
|
|
|
-// @resource doc-changelog https://raw.githubusercontent.com/Sv443/BetterYTM/develop/changelog.md?b=94d40b5
|
|
|
|
-// @resource icon-advanced_mode https://raw.githubusercontent.com/Sv443/BetterYTM/develop/assets/icons/plus_circle_small.svg?b=94d40b5
|
|
|
|
-// @resource icon-arrow_down https://raw.githubusercontent.com/Sv443/BetterYTM/develop/assets/icons/arrow_down.svg?b=94d40b5
|
|
|
|
-// @resource icon-delete https://raw.githubusercontent.com/Sv443/BetterYTM/develop/assets/icons/delete.svg?b=94d40b5
|
|
|
|
-// @resource icon-error https://raw.githubusercontent.com/Sv443/BetterYTM/develop/assets/icons/error.svg?b=94d40b5
|
|
|
|
-// @resource icon-experimental https://raw.githubusercontent.com/Sv443/BetterYTM/develop/assets/icons/beaker_small.svg?b=94d40b5
|
|
|
|
-// @resource icon-globe https://raw.githubusercontent.com/Sv443/BetterYTM/develop/assets/icons/globe.svg?b=94d40b5
|
|
|
|
-// @resource icon-help https://raw.githubusercontent.com/Sv443/BetterYTM/develop/assets/icons/help.svg?b=94d40b5
|
|
|
|
-// @resource icon-lock https://raw.githubusercontent.com/Sv443/BetterYTM/develop/assets/icons/lock.svg?b=94d40b5
|
|
|
|
-// @resource icon-lyrics https://raw.githubusercontent.com/Sv443/BetterYTM/develop/assets/icons/lyrics.svg?b=94d40b5
|
|
|
|
-// @resource icon-skip_to https://raw.githubusercontent.com/Sv443/BetterYTM/develop/assets/icons/skip_to.svg?b=94d40b5
|
|
|
|
-// @resource icon-spinner https://raw.githubusercontent.com/Sv443/BetterYTM/develop/assets/icons/spinner.svg?b=94d40b5
|
|
|
|
-// @resource img-logo https://raw.githubusercontent.com/Sv443/BetterYTM/develop/assets/images/logo/logo_48.png?b=94d40b5
|
|
|
|
-// @resource img-close https://raw.githubusercontent.com/Sv443/BetterYTM/develop/assets/images/close.png?b=94d40b5
|
|
|
|
-// @resource img-discord https://raw.githubusercontent.com/Sv443/BetterYTM/develop/assets/images/external/discord.png?b=94d40b5
|
|
|
|
-// @resource img-github https://raw.githubusercontent.com/Sv443/BetterYTM/develop/assets/images/external/github.png?b=94d40b5
|
|
|
|
-// @resource img-greasyfork https://raw.githubusercontent.com/Sv443/BetterYTM/develop/assets/images/external/greasyfork.png?b=94d40b5
|
|
|
|
-// @resource img-openuserjs https://raw.githubusercontent.com/Sv443/BetterYTM/develop/assets/images/external/openuserjs.png?b=94d40b5
|
|
|
|
-// @resource trans-de_DE https://raw.githubusercontent.com/Sv443/BetterYTM/develop/assets/translations/de_DE.json?b=94d40b5
|
|
|
|
-// @resource trans-en_US https://raw.githubusercontent.com/Sv443/BetterYTM/develop/assets/translations/en_US.json?b=94d40b5
|
|
|
|
-// @resource trans-en_UK https://raw.githubusercontent.com/Sv443/BetterYTM/develop/assets/translations/en_UK.json?b=94d40b5
|
|
|
|
-// @resource trans-es_ES https://raw.githubusercontent.com/Sv443/BetterYTM/develop/assets/translations/es_ES.json?b=94d40b5
|
|
|
|
-// @resource trans-fr_FR https://raw.githubusercontent.com/Sv443/BetterYTM/develop/assets/translations/fr_FR.json?b=94d40b5
|
|
|
|
-// @resource trans-hi_IN https://raw.githubusercontent.com/Sv443/BetterYTM/develop/assets/translations/hi_IN.json?b=94d40b5
|
|
|
|
-// @resource trans-ja_JA https://raw.githubusercontent.com/Sv443/BetterYTM/develop/assets/translations/ja_JA.json?b=94d40b5
|
|
|
|
-// @resource trans-pt_BR https://raw.githubusercontent.com/Sv443/BetterYTM/develop/assets/translations/pt_BR.json?b=94d40b5
|
|
|
|
-// @resource trans-zh_CN https://raw.githubusercontent.com/Sv443/BetterYTM/develop/assets/translations/zh_CN.json?b=94d40b5
|
|
|
|
|
|
+// @resource css-anchor_improvements https://raw.githubusercontent.com/Sv443/BetterYTM/develop/assets/style/anchorImprovements.css?b=96472f4
|
|
|
|
+// @resource css-fix_spacing https://raw.githubusercontent.com/Sv443/BetterYTM/develop/assets/style/fixSpacing.css?b=96472f4
|
|
|
|
+// @resource doc-changelog https://raw.githubusercontent.com/Sv443/BetterYTM/develop/changelog.md?b=96472f4
|
|
|
|
+// @resource icon-advanced_mode https://raw.githubusercontent.com/Sv443/BetterYTM/develop/assets/icons/plus_circle_small.svg?b=96472f4
|
|
|
|
+// @resource icon-arrow_down https://raw.githubusercontent.com/Sv443/BetterYTM/develop/assets/icons/arrow_down.svg?b=96472f4
|
|
|
|
+// @resource icon-delete https://raw.githubusercontent.com/Sv443/BetterYTM/develop/assets/icons/delete.svg?b=96472f4
|
|
|
|
+// @resource icon-error https://raw.githubusercontent.com/Sv443/BetterYTM/develop/assets/icons/error.svg?b=96472f4
|
|
|
|
+// @resource icon-experimental https://raw.githubusercontent.com/Sv443/BetterYTM/develop/assets/icons/beaker_small.svg?b=96472f4
|
|
|
|
+// @resource icon-globe https://raw.githubusercontent.com/Sv443/BetterYTM/develop/assets/icons/globe.svg?b=96472f4
|
|
|
|
+// @resource icon-help https://raw.githubusercontent.com/Sv443/BetterYTM/develop/assets/icons/help.svg?b=96472f4
|
|
|
|
+// @resource icon-lock https://raw.githubusercontent.com/Sv443/BetterYTM/develop/assets/icons/lock.svg?b=96472f4
|
|
|
|
+// @resource icon-lyrics https://raw.githubusercontent.com/Sv443/BetterYTM/develop/assets/icons/lyrics.svg?b=96472f4
|
|
|
|
+// @resource icon-skip_to https://raw.githubusercontent.com/Sv443/BetterYTM/develop/assets/icons/skip_to.svg?b=96472f4
|
|
|
|
+// @resource icon-spinner https://raw.githubusercontent.com/Sv443/BetterYTM/develop/assets/icons/spinner.svg?b=96472f4
|
|
|
|
+// @resource img-logo https://raw.githubusercontent.com/Sv443/BetterYTM/develop/assets/images/logo/logo_48.png?b=96472f4
|
|
|
|
+// @resource img-close https://raw.githubusercontent.com/Sv443/BetterYTM/develop/assets/images/close.png?b=96472f4
|
|
|
|
+// @resource img-discord https://raw.githubusercontent.com/Sv443/BetterYTM/develop/assets/images/external/discord.png?b=96472f4
|
|
|
|
+// @resource img-github https://raw.githubusercontent.com/Sv443/BetterYTM/develop/assets/images/external/github.png?b=96472f4
|
|
|
|
+// @resource img-greasyfork https://raw.githubusercontent.com/Sv443/BetterYTM/develop/assets/images/external/greasyfork.png?b=96472f4
|
|
|
|
+// @resource img-openuserjs https://raw.githubusercontent.com/Sv443/BetterYTM/develop/assets/images/external/openuserjs.png?b=96472f4
|
|
|
|
+// @resource trans-de_DE https://raw.githubusercontent.com/Sv443/BetterYTM/develop/assets/translations/de_DE.json?b=96472f4
|
|
|
|
+// @resource trans-en_US https://raw.githubusercontent.com/Sv443/BetterYTM/develop/assets/translations/en_US.json?b=96472f4
|
|
|
|
+// @resource trans-en_UK https://raw.githubusercontent.com/Sv443/BetterYTM/develop/assets/translations/en_UK.json?b=96472f4
|
|
|
|
+// @resource trans-es_ES https://raw.githubusercontent.com/Sv443/BetterYTM/develop/assets/translations/es_ES.json?b=96472f4
|
|
|
|
+// @resource trans-fr_FR https://raw.githubusercontent.com/Sv443/BetterYTM/develop/assets/translations/fr_FR.json?b=96472f4
|
|
|
|
+// @resource trans-hi_IN https://raw.githubusercontent.com/Sv443/BetterYTM/develop/assets/translations/hi_IN.json?b=96472f4
|
|
|
|
+// @resource trans-ja_JA https://raw.githubusercontent.com/Sv443/BetterYTM/develop/assets/translations/ja_JA.json?b=96472f4
|
|
|
|
+// @resource trans-pt_BR https://raw.githubusercontent.com/Sv443/BetterYTM/develop/assets/translations/pt_BR.json?b=96472f4
|
|
|
|
+// @resource trans-zh_CN https://raw.githubusercontent.com/Sv443/BetterYTM/develop/assets/translations/zh_CN.json?b=96472f4
|
|
// @require https://cdn.jsdelivr.net/npm/@sv443-network/[email protected]/dist/index.global.js
|
|
// @require https://cdn.jsdelivr.net/npm/@sv443-network/[email protected]/dist/index.global.js
|
|
// @require https://cdn.jsdelivr.net/npm/[email protected]/dist/fuse.basic.js
|
|
// @require https://cdn.jsdelivr.net/npm/[email protected]/dist/fuse.basic.js
|
|
// @require https://cdn.jsdelivr.net/npm/[email protected]/lib/marked.umd.js
|
|
// @require https://cdn.jsdelivr.net/npm/[email protected]/lib/marked.umd.js
|
|
@@ -252,7 +252,7 @@ var LogLevel;
|
|
})(LogLevel || (LogLevel = {}));const modeRaw = "development";
|
|
})(LogLevel || (LogLevel = {}));const modeRaw = "development";
|
|
const branchRaw = "develop";
|
|
const branchRaw = "develop";
|
|
const hostRaw = "github";
|
|
const hostRaw = "github";
|
|
-const buildNumberRaw = "94d40b5";
|
|
|
|
|
|
+const buildNumberRaw = "96472f4";
|
|
/** The mode in which the script was built (production or development) */
|
|
/** The mode in which the script was built (production or development) */
|
|
const mode = (modeRaw.match(/^#{{.+}}$/) ? "production" : modeRaw);
|
|
const mode = (modeRaw.match(/^#{{.+}}$/) ? "production" : modeRaw);
|
|
/** The branch to use in various URLs that point to the GitHub repo */
|
|
/** The branch to use in various URLs that point to the GitHub repo */
|
|
@@ -3309,10 +3309,6 @@ function disableDarkReader() {
|
|
info("Sent hint to Dark Reader to disable itself");
|
|
info("Sent hint to Dark Reader to disable itself");
|
|
}
|
|
}
|
|
}const inputIgnoreTagNames = ["INPUT", "TEXTAREA", "SELECT", "BUTTON", "A"];
|
|
}const inputIgnoreTagNames = ["INPUT", "TEXTAREA", "SELECT", "BUTTON", "A"];
|
|
-let features$1;
|
|
|
|
-function setInputConfig(feats) {
|
|
|
|
- features$1 = feats;
|
|
|
|
-}
|
|
|
|
//#MARKER arrow key skip
|
|
//#MARKER arrow key skip
|
|
function initArrowKeySkip() {
|
|
function initArrowKeySkip() {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -3325,7 +3321,7 @@ function initArrowKeySkip() {
|
|
return info(`Captured valid key to skip forward or backward but the current active element is <${(_c = document.activeElement) === null || _c === void 0 ? void 0 : _c.tagName.toLowerCase()}>, so the keypress is ignored`);
|
|
return info(`Captured valid key to skip forward or backward but the current active element is <${(_c = document.activeElement) === null || _c === void 0 ? void 0 : _c.tagName.toLowerCase()}>, so the keypress is ignored`);
|
|
evt.preventDefault();
|
|
evt.preventDefault();
|
|
evt.stopImmediatePropagation();
|
|
evt.stopImmediatePropagation();
|
|
- let skipBy = (_d = features$1.arrowKeySkipBy) !== null && _d !== void 0 ? _d : featInfo.arrowKeySkipBy.default;
|
|
|
|
|
|
+ let skipBy = (_d = getFeatures().arrowKeySkipBy) !== null && _d !== void 0 ? _d : featInfo.arrowKeySkipBy.default;
|
|
if (evt.code === "ArrowLeft")
|
|
if (evt.code === "ArrowLeft")
|
|
skipBy *= -1;
|
|
skipBy *= -1;
|
|
log(`Captured arrow key '${evt.code}' - skipping by ${skipBy} seconds`);
|
|
log(`Captured arrow key '${evt.code}' - skipping by ${skipBy} seconds`);
|
|
@@ -3344,7 +3340,7 @@ let siteSwitchEnabled = true;
|
|
function initSiteSwitch(domain) {
|
|
function initSiteSwitch(domain) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
document.addEventListener("keydown", (e) => {
|
|
document.addEventListener("keydown", (e) => {
|
|
- const hotkey = features$1.switchSitesHotkey;
|
|
|
|
|
|
+ const hotkey = getFeatures().switchSitesHotkey;
|
|
if (siteSwitchEnabled && e.code === hotkey.code && e.shiftKey === hotkey.shift && e.ctrlKey === hotkey.ctrl && e.altKey === hotkey.alt)
|
|
if (siteSwitchEnabled && e.code === hotkey.code && e.shiftKey === hotkey.shift && e.ctrlKey === hotkey.ctrl && e.altKey === hotkey.alt)
|
|
switchSite(domain === "yt" ? "ytm" : "yt");
|
|
switchSite(domain === "yt" ? "ytm" : "yt");
|
|
});
|
|
});
|
|
@@ -3745,11 +3741,7 @@ function createLyricsBtn(geniusUrl, hideIfLoading = true) {
|
|
function splitVideoTitle(title) {
|
|
function splitVideoTitle(title) {
|
|
const [artist, ...rest] = title.split("-").map((v, i) => i < 2 ? v.trim() : v);
|
|
const [artist, ...rest] = title.split("-").map((v, i) => i < 2 ? v.trim() : v);
|
|
return { artist, song: rest.join("-") };
|
|
return { artist, song: rest.join("-") };
|
|
-}let features;
|
|
|
|
-function setSongListsConfig(feats) {
|
|
|
|
- features = feats;
|
|
|
|
-}
|
|
|
|
-/** Initializes the queue buttons */
|
|
|
|
|
|
+}/** Initializes the queue buttons */
|
|
function initQueueButtons() {
|
|
function initQueueButtons() {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
const addCurrentQueueBtns = (evt) => {
|
|
const addCurrentQueueBtns = (evt) => {
|
|
@@ -3787,7 +3779,7 @@ function initQueueButtons() {
|
|
"ytmusic-section-list-renderer[main-page-type=\"MUSIC_PAGE_TYPE_ALBUM\"] ytmusic-shelf-renderer #contents",
|
|
"ytmusic-section-list-renderer[main-page-type=\"MUSIC_PAGE_TYPE_ALBUM\"] ytmusic-shelf-renderer #contents",
|
|
"ytmusic-section-list-renderer[main-page-type=\"MUSIC_PAGE_TYPE_ARTIST\"] ytmusic-shelf-renderer #contents",
|
|
"ytmusic-section-list-renderer[main-page-type=\"MUSIC_PAGE_TYPE_ARTIST\"] ytmusic-shelf-renderer #contents",
|
|
];
|
|
];
|
|
- if (features.listButtonsPlacement === "everywhere") {
|
|
|
|
|
|
+ if (getFeatures().listButtonsPlacement === "everywhere") {
|
|
for (const selector of listSelectors) {
|
|
for (const selector of listSelectors) {
|
|
onSelectorOld(selector, {
|
|
onSelectorOld(selector, {
|
|
all: true,
|
|
all: true,
|
|
@@ -3819,7 +3811,7 @@ function addQueueButtons(queueItem, containerParentSelector = ".song-info", list
|
|
const deleteIconUrl = yield getResourceUrl("icon-delete");
|
|
const deleteIconUrl = yield getResourceUrl("icon-delete");
|
|
//#SECTION lyrics btn
|
|
//#SECTION lyrics btn
|
|
let lyricsBtnElem;
|
|
let lyricsBtnElem;
|
|
- if (features.lyricsQueueButton) {
|
|
|
|
|
|
+ if (getFeatures().lyricsQueueButton) {
|
|
lyricsBtnElem = yield createLyricsBtn(undefined, false);
|
|
lyricsBtnElem = yield createLyricsBtn(undefined, false);
|
|
lyricsBtnElem.ariaLabel = lyricsBtnElem.title = t("open_lyrics");
|
|
lyricsBtnElem.ariaLabel = lyricsBtnElem.title = t("open_lyrics");
|
|
lyricsBtnElem.style.display = "inline-flex";
|
|
lyricsBtnElem.style.display = "inline-flex";
|
|
@@ -3902,7 +3894,7 @@ function addQueueButtons(queueItem, containerParentSelector = ".song-info", list
|
|
}
|
|
}
|
|
//#SECTION delete from queue btn
|
|
//#SECTION delete from queue btn
|
|
let deleteBtnElem;
|
|
let deleteBtnElem;
|
|
- if (features.deleteFromQueueButton) {
|
|
|
|
|
|
+ if (getFeatures().deleteFromQueueButton) {
|
|
deleteBtnElem = document.createElement("a");
|
|
deleteBtnElem = document.createElement("a");
|
|
deleteBtnElem.ariaLabel = deleteBtnElem.title = (listType === "currentQueue" ? t("remove_from_queue") : t("delete_from_list"));
|
|
deleteBtnElem.ariaLabel = deleteBtnElem.title = (listType === "currentQueue" ? t("remove_from_queue") : t("delete_from_list"));
|
|
deleteBtnElem.classList.add("ytmusic-player-bar", "bytm-delete-from-queue", "bytm-generic-btn");
|
|
deleteBtnElem.classList.add("ytmusic-player-bar", "bytm-delete-from-queue", "bytm-generic-btn");
|
|
@@ -5083,9 +5075,6 @@ function init() {
|
|
yield initLyricsCache();
|
|
yield initLyricsCache();
|
|
yield initTranslations((_a = features.locale) !== null && _a !== void 0 ? _a : "en_US");
|
|
yield initTranslations((_a = features.locale) !== null && _a !== void 0 ? _a : "en_US");
|
|
setLocale((_b = features.locale) !== null && _b !== void 0 ? _b : "en_US");
|
|
setLocale((_b = features.locale) !== null && _b !== void 0 ? _b : "en_US");
|
|
- // TODO(v1.2): remove these
|
|
|
|
- setInputConfig(features);
|
|
|
|
- setSongListsConfig(features);
|
|
|
|
if (features.disableBeforeUnloadPopup && domain === "ytm")
|
|
if (features.disableBeforeUnloadPopup && domain === "ytm")
|
|
disableBeforeUnload();
|
|
disableBeforeUnload();
|
|
if (!domLoaded)
|
|
if (!domLoaded)
|