编程随想的博客 - 评论区修复(重制版)

基于原版评论区修复,使用标准 WebAPI 重写,并增加了一点检查和提示。

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name        编程随想的博客 - 评论区修复(重制版)
// @description 基于原版评论区修复,使用标准 WebAPI 重写,并增加了一点检查和提示。
// @namespace   UnKnown
// @author      UnKnown
// @license     Unlicense
// @version     1.1
// @icon        https://program-think.blogspot.com/favicon.ico
// @match       https://program-think.blogspot.com/*
// @grant       none
// @run-at      document-start
// @inject-into content
// ==/UserScript==

"use strict";

const poNullNote = [
	"编程随想的博客 - 评论区修复(重制版):",
	"编程随想的评论区代码,需要从 a#comment-editor-src 这个超链接元素的链接中,提取一个名为 postID 的链接参数。",
	"大致在 2022 年 5 月,Google 修改了这个链接的格式。链接参数名字也从 postID 变成了 po。",
	"但评论区代码无从更新,评论区无法加载。",
	"然后就有了这个(和别的)修复脚本,工作原理大致是:找到 po,复制一份,把名字改成 postID,重新加到链接上。",
	"现在,这个脚本找不到名为 po 的链接参数,postID 也没有重新出现,所以修复大概是失效了,需要更新。",
	"请编写脚本反馈,也欢迎协助修复!",
	"目前超链接元素的链接是:"
].join("\n\n");

const css = `/* 滚动过长的回复列表 */
#comments .comment-replies .comment-thread {
	margin-bottom: 1em;
	padding: 1em 0;
	background-color: rgba(0, 0, 0, 0.05);
}
#comments .comment-replies .comment-thread .sub {
	max-height: 36rem;
	overflow-y: auto;
}`;


const addPostID = () => {

	const $editor_src = document.querySelector("a#comment-editor-src");
	if ($editor_src === null) return;

	const editorUrl = new URL($editor_src.href);
	const editorParams = editorUrl.searchParams;
	if (editorParams.get("postID") !== null) return;

	const postID = editorParams.get("po");
	if (postID === null) {
		alert(poNullNote + $editor_src.href);
		return;
	}

	editorParams.set("postID", postID);
	$editor_src.href = editorUrl.href;

	const style = document.createElement("style");
	style.textContent = css;
	document.head.appendChild(style);

};

document.addEventListener("DOMContentLoaded", addPostID, { once: true });