LinkBaseToken - bhsd-harry/wikiparser-node GitHub Wiki
目录
CategoryToken、FileToken、LinkToken 和 RedirectTargetToken 的父类。这个类继承了 Token 类的全部属性和方法,这里不再列出。
✅ 在 Mini 和 Browser 版本中可用。
🌐 在 Browser 版本中可用。
🌐 展开
type: string
目标页面的片段(锚点)。在 Browser 版本中为只读属性。
// fragment (print)
var {
firstChild,
lastChild,
} = Parser.parse("[[a#%7B%7D]][[b]]");
assert.strictEqual(firstChild.fragment, "{}");
assert.strictEqual(lastChild.fragment, undefined);// fragment (main)
var {firstChild} = Parser.parse("[[a#]]");
firstChild.fragment = undefined;
assert.equal(firstChild, "[[A]]"); // auto normalize the target page name
firstChild.fragment = "b";
assert.equal(firstChild, "[[A#b]]");展开
type: string
跨维基前缀。
// interwiki (main)
var firstChild;
Parser.getConfig();
Parser.config.interwiki = ["zhwp", "enwp"];
({firstChild} = Parser.parse("[[zhwp:a#b]]"));
assert.strictEqual(firstChild.interwiki, "zhwp");
firstChild.interwiki = "enwp";
assert.equal(firstChild, "[[enwp:A#b]]");✅ 展开
type: Title
完整链接。在 Mini 和 Browser 版本中为只读属性。
// link
var {firstChild: {link}} = Parser.parse("[[a]]");
assert.deepStrictEqual(
link,
Parser.normalizeTitle("A"),
);// link (main)
var {firstChild} = Parser.parse("[[a]]");
firstChild.link = "file:b";
assert.equal(firstChild, "[[:file:b]]"); // auto add ':' at the beginning
({firstChild} = Parser.parse("[[category:c]]"));
firstChild.link = "category:d";
assert.equal(firstChild, "[[category:d]]");✅ 展开
type: string
规范化的目标页面名称,只读。
// name
var {firstChild} = Parser.parse("[[category:a b]]");
assert.strictEqual(firstChild.name, "Category:A_b");展开
param: this
深拷贝节点。
// cloneNode (main)
var link = Parser.parse("[[a|b]]").firstChild;
assert.deepStrictEqual(link.cloneNode(), link);
link = Parser.parse("[[category:a|b]]").firstChild;
assert.deepStrictEqual(link.cloneNode(), link);
link = Parser.parse("#redirect [[a#b]]").querySelector("redirect-target");
assert.equal(link, "[[a#b]]");
assert.deepStrictEqual(link.cloneNode(), link);
link = Parser.parse("[[file:a|thumb|b|link=c]]").firstChild;
assert.deepStrictEqual(link.cloneNode(), link);🌐 展开
将语法树保存为 JSON。
// json (print)
var root = Parser.parse("#redirect [[c#d]]"),
target = root.querySelector("redirect-target");
assert.equal(target, "[[c#d]]");
assert.deepStrictEqual(target.json(), {
range: [10, 17],
type: "redirect-target",
name: "C",
fragment: "d",
childNodes: [
{
range: [12, 15],
type: "link-target",
childNodes: [
{
range: [12, 15],
data: "c#d",
},
],
},
],
});✅ 展开
returns: LintError[]
报告潜在语法错误。
// lint
assert.deepStrictEqual(Parser.parse("[[{{x}}]]").firstChild.lint(), [
{
rule: "unknown-page",
severity: "warning",
message: "template in an internal link target",
startLine: 0,
startCol: 2,
startIndex: 2,
endLine: 0,
endCol: 7,
endIndex: 7,
},
]);
assert.deepStrictEqual(Parser.parse("[[%3F]]").firstChild.lint(), [
{
rule: "url-encoding",
severity: "warning",
message: "unnecessary percent-encoding in an internal link",
startLine: 0,
startCol: 2,
startIndex: 2,
endLine: 0,
endCol: 5,
endIndex: 5,
fix: {
desc: "decode",
range: [2, 5],
text: "?",
},
},
]);
assert.deepStrictEqual(Parser.parse("[[a|A|]]").firstChild.lint(), [
{
rule: "pipe-like",
severity: "warning",
message: 'additional "|" in the link text',
startLine: 0,
startCol: 4,
startIndex: 4,
endLine: 0,
endCol: 6,
endIndex: 6,
suggestions: [
{
desc: "escape",
range: [4, 6],
text: "A|",
},
],
},
]);
assert.deepStrictEqual(Parser.parse("[[category:a#b]]").firstChild.lint(), [
{
rule: "no-ignored",
severity: "warning",
message: "useless fragment",
startLine: 0,
startCol: 2,
startIndex: 2,
endLine: 0,
endCol: 14,
endIndex: 14,
fix: {
range: [12, 14],
text: "",
desc: "remove",
},
},
]);🌐 展开
returns: string
以HTML格式输出。
// print (print)
var {firstChild} = Parser.parse("[[a#b|b]]");
assert.equal(
firstChild.print(),
`<span class="wpb-link">[[<span class="wpb-link-target">a#b</span>|<span class="wpb-link-text">b</span>]]</span>`,
);展开
param: string
设置fragment。
// setFragment (main)
var {firstChild} = Parser.parse("[[a#a]]");
firstChild.setFragment();
assert.equal(firstChild, "[[A]]"); // 这个方法会同时规范化页面名
firstChild.setFragment("]");
assert.equal(firstChild, "[[A#%5D]]");展开
param: string
设置链接显示文字。
// setLinkText (main)
var {firstChild} = Parser.parse("[[a|a]]");
firstChild.setLinkText();
assert.equal(firstChild, "[[a]]");
firstChild.setLinkText("''b''");
assert.equal(firstChild, "[[a|''b'']]");
assert.ok(firstChild.querySelector("quote"));
firstChild.setLinkText("-{c}-");
assert.equal(firstChild, "[[a|-{c}-]]");
assert.ok(firstChild.querySelector("converter"));展开
param: string
设置链接目标。
// setTarget (main)
var {firstChild} = Parser.parse("[[a]]");
firstChild.setTarget("b");
assert.equal(firstChild, "[[b]]");
firstChild.setTarget("<!---->category:c");
assert.equal(firstChild, "[[:<!---->category:c]]"); // 自动在开头添加':'展开
加入的版本:1.10.0
returns: string
转换为 HTML。
// toHtml (main)
Parser.getConfig();
Parser.config.interwiki = ["mw"];
assert.strictEqual(
Parser.parse('[[mw:"| c ]]').firstChild.toHtml(),
'<a class="extiw" href="/wiki/mw%3A%22" title="mw:""> c </a>',
);
assert.strictEqual(
Parser.parse("[[ #< ]]").firstChild.toHtml(),
'<a href="#%3C">#< </a>',
);
assert.strictEqual(
Parser.parse("[[ media : a ]]").firstChild.toHtml(),
'<a href="/wiki/Media%3AA" title="A">media : a </a>',
);
assert.strictEqual(
Parser.parse("[[category:a]]").firstChild.toHtml(),
"",
);