Examples (redirect) - bhsd-harry/wikiparser-node GitHub Wiki

Other Languages

修复双重重定向

展开

假设存在从 FooBar 再到 Baz 的双重重定向,你可以通过编辑页面 Foo,将重定向目标从 Bar 改为 Baz 来修复它。此示例演示了 Parser.redirectsRedirectTargetToken 的用法。

// Fixing double redirects (main)
import type {RedirectTargetToken} from "wikiparser-node";
Parser.redirects.set("Bar", "Baz");

// 页面 `Foo` 的内容,可能包含额外的维基文本
const content = `#REDIRECT [[Bar]]

{{Redirect category shell}}`,
	root = Parser.parse(content, "Foo"),
	target = root.querySelector<RedirectTargetToken>("redirect-target#Baz");
if (target?.innerText !== "Baz") {
	target?.setTarget("Baz");
}
assert.equal(
	root,
	`#REDIRECT [[Baz]]

{{Redirect category shell}}`,
);

替换指向重定向的链接

展开

假设存在从 FooBar 的重定向,你可以将页面中所有指向 Foo 的链接替换为指向 Bar 的链接。此示例演示了 Parser.redirectsLinkTokenTitle.prototype.isRedirect 的用法。

// Replacing links to redirects (main)
import type {LinkToken} from "wikiparser-node";
Parser.redirects.set("Foo", "Bar");

// 包含指向 `Foo` 链接的页面内容
const content = "[[Foo]] is a redirect to [[Foo|Bar]].",
	root = Parser.parse(content);
for (const link of root.querySelectorAll<LinkToken>("link#Bar")) {
	if (link.link.isRedirect()) {
		// 保持链接文本不变,但将目标改为 `Bar`
		link.setLinkText(link.innerText);
		link.setTarget("Bar");
	}
}
assert.equal(
	root,
	"[[Bar|Foo]] is a redirect to [[Bar|Bar]].",
);

修复分类重定向

展开

假设存在从 Category:FooCategory:Bar 的重定向,你可以通过将页面中指向 Category:Foo 的分类链接替换为指向 Category:Bar 的分类链接来修复分类重定向。此示例演示了 Parser.redirectsCategoryTokenTitle.prototype.isRedirect 的用法。

// Fixing category redirects (main)
import type {CategoryToken} from "wikiparser-node";
Parser.redirects.set("Category:Foo", "Category:Bar");

// 包含指向 `Category:Foo` 分类链接的页面内容
const content = `Foo is Bar.

[[Category:Foo]]`,
	root = Parser.parse(content),
	categories = root.querySelectorAll<CategoryToken>("category#Category:Bar");
for (const category of categories) {
	if (category.link.isRedirect()) {
		// 将目标改为 `Category:Bar`
		category.setTarget("Category:Bar");
	}
}
assert.equal(
	root,
	`Foo is Bar.

[[Category:Bar]]`,
);
⚠️ **GitHub.com Fallback** ⚠️